diff --git a/ChangeLog b/ChangeLog index 82fc220ab5..ed8a724eaa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-12-04 Joshua Sled + + * All: Fold branches/goffice-update/ back into trunk/. + 2005-12-04 David Hampton * src/gnome-utils/test/test-gnc-recurrence.c: @@ -155,6 +159,12 @@ * src/engine/Transaction.c: Initialize the qof entity in the new split, not the old one. +2005-11-26 David Hampton + + * lib/goffice-0.0.4/plugins/plot_radar/gog-radar.c: + * lib/goffice-0.0.4/goffice/app/go-plugin.c: Compile cleanly using + gcc4. + 2005-11-25 David Hampton * src/business/dialog-tax-table/dialog-tax-table.c: Andreas @@ -205,6 +215,24 @@ * src/gnome/gnc-plugin-page-account-tree.c: Update default accelerator keys as per the HIG. +2005-11-25 Derek Atkins + + * src/gnome-utils/Makefile.am: + add GSF_CFLAGS + * lib/goffice-0.0.4/goffice/utils/go-libxml-extras.c + lib/goffice-0.0.4/goffice/utils/datetime.c: + lib/goffice-0.0.4/goffice/graph/gog-chart.c + lib/goffice-0.0.4/goffice/graph/gog-plot.c + lib/goffice-0.0.4/goffice/graph/gog-object.c + lib/goffice-0.0.4/goffice/gtk/goffice-gtk.c: + look for goffice/glib24_26-compat.h + * lib/goffice-0.0.4/goffice/Makefile.am: + don't deal with goffice-features.h anymore + * configure.in: + fix for FC3 dependencies + * Makefile.am: + create goffice -> , symlink when building internal goffice + 2005-11-23 David Hampton * src/report/report-gnome/report-gnome.scm: @@ -560,6 +588,53 @@ * po/glossary/no.po: Updated Norwegian/Bokmaal glossary translation by Tor Harald Thorland . +2005-11-20 Neil Williams + + * goffice-config.h.in : svn moved from + lib/goffice-0.0.4/goffice to prevent unnecessary + subdirectory inclusion in make outside lib. + * goffice-features.h.in : svn moved from + lib/goffice-0.0.4/goffice. + * gsf-config.h.in : svn moved from lib/libsf-1.12.3 + * configure.in : Create AC_CONFIG_HEADERS only in + $(top_srcdir) and stop using LDFLAGS = -no-undeclared + * lib/goffice-0.0.4/goffice-plugins.mk : handle new config + header location. + * lib/goffice-0.0.4/tests/Makefile.am : Don't overwrite AM_LDFLAGS + * lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/Makefile.am : + handle new config header location. + * lib/goffice-0.0.4/goffice.mk : Handle new config header location. + +2005-11-20 Neil Williams + + * lib/goffice-0.0.4/plugins/plot_radar/gog-radar.c : + Mac OSX fix: comment out #warning + * lib/goffice-0.0.4/plugins/plot_xy/gog-bubble-prefs.c : + * lib/goffice-0.0.4/plugins/plot_xy/gog-xy.c : + * lib/goffice-0.0.4/goffice/app/file.c : + * lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.c : + * lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.c : + * lib/goffice-0.0.4/goffice/gtk/go-font-sel.c : + * lib/goffice-0.0.4/goffice/gtk/go-color-palette.c : + * lib/goffice-0.0.4/goffice/gtk/go-combo-color.c : + * lib/goffice-0.0.4/goffice/gtk/go-combo-box.c : + * lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.c + * lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.c + * lib/goffice-0.0.4/goffice/utils/go-pattern.c + * lib/goffice-0.0.4/goffice/graph/gog-guru.c + * lib/goffice-0.0.4/goffice/graph/gog-legend.c + * lib/goffice-0.0.4/goffice/graph/gog-graph.c + * lib/goffice-0.0.4/goffice/graph/gog-error-bar.c + * lib/goffice-0.0.4/goffice/graph/gog-style.c + * lib/goffice-0.0.4/goffice/graph/gog-theme.c + * lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.c : + + * lib/goffice-0.0.4/goffice.mk : + Adding AM_LDFLAGS for OSX build + + * lib/goffice-0.0.4/ : setting svn:ignore + * lib/libgsf-1.12.3/ : setting svn:ignore + 2005-11-19 David Hampton * various: More include file tweaking. Don't include gtk.h from @@ -912,6 +987,11 @@ Use the same x_offset logic regardless of how we enter the cell. Make sure x_offset gets reset when changing cells via the keyboard. + +2005-11-09 Josh Sled + + * lib/goffice-0.0.4/, lib/libgsf-1.12.3/: imported with changes to + update previously hacked-together versions. 2005-11-09 David Hampton diff --git a/Makefile.am b/Makefile.am index 509477268a..04146b25fb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,12 +1,12 @@ -SUBDIRS = doc lib src intl-scm po rpm accounts +SUBDIRS = . doc lib src intl-scm po rpm accounts docdir = ${GNC_DOC_INSTALL_DIR} GNC_CTAGS_FILE = @GNC_CTAGS_FILE@ GNC_ETAGS_FILE = @GNC_ETAGS_FILE@ -noinst_DATA = make-gnucash-patch make-gnucash-potfiles +noinst_DATA = make-gnucash-patch make-gnucash-potfiles .goffice-links doc_DATA = \ AUTHORS \ @@ -93,10 +93,19 @@ make-gnucash-potfiles: make-gnucash-potfiles.in Makefile chmod +x $@.tmp mv $@.tmp $@ + +.goffice-links: + rm -f goffice +if !HAVE_GOFFICE + ln -sf . goffice +endif + touch .goffice-links + DISTCLEANFILES = \ intltool-extract intltool-update intltool-merge\ cscope.files cscope.out etags.files make-gnucash-patch \ - make-gnucash-potfiles po/.intltool-merge-cache + make-gnucash-potfiles po/.intltool-merge-cache \ + goffice .goffice-links cscope.files: find . -name '*.[ch]' > cscope.files diff --git a/configure.in b/configure.in index 2a3c05ceed..91b62f9e2b 100644 --- a/configure.in +++ b/configure.in @@ -99,13 +99,6 @@ AC_CHECK_FUNCS(setenv,,[ ]) ]) -## +jsled -# copied from gnumeric for our lib/goffice/ stuffs. -AC_CHECK_HEADERS(ieeefp.h ieee754.h) -dnl Check for some functions -AC_CHECK_FUNCS(random drand48 finite memmove mkdtemp uname times sysconf fmin) -## --jsled - STRUCT_TM_GMTOFF_CHECK SCANF_LLD_CHECK if test $am_cv_scanf_lld = "no"; then @@ -243,6 +236,8 @@ AC_MSG_RESULT($G_WRAP_COMPILE_ARGS) AC_MSG_CHECKING(for g-wrap link args) G_WRAP_LINK_ARGS=`${G_WRAP_CONFIG} --c-link-args guile` +# Dear g-wrap: adding -L/usr/lib is very silly. Do not do this. +G_WRAP_LINK_ARGS=`echo ${G_WRAP_LINK_ARGS} | sed -e 's|-L/usr/lib ||'` AC_MSG_RESULT($G_WRAP_LINK_ARGS) AC_MSG_CHECKING(for g-wrap module directory) @@ -447,75 +442,819 @@ AC_SUBST(QOF_XML_DIR) ### -------------------------------------------------------------------------- ### for GOG/goffice... -dnl If libgoffice-1 >= 0.0.3-2 and libgsf >= 1.12.2-1 are found, -dnl we need to omit lib/goffice and use the external library -dnl because lib/goffice will not build with newer versions of libgsf. - -GOFFICE_REQUIRED=0.0.3 -GSF_REQUIRED=1.12.2 -AC_MSG_CHECKING([for GOffice and GSF]) -LIBGOFFICE_CFLAGS=`$PKG_CONFIG --silence-errors --cflags " libgoffice-1 >= $GOFFICE_REQUIRED"` -LIBGOFFICE_LIBS=`$PKG_CONFIG --silence-errors --libs " libgoffice-1 >= $GOFFICE_REQUIRED"` -LIBGSF_CFLAGS=`$PKG_CONFIG --silence-errors --cflags " libgsf-1 >= $GSF_REQUIRED"` -LIBGSF_LIBS=`$PKG_CONFIG --silence-errors --libs " libgsf-1 >= $GSF_REQUIRED"` -AC_SUBST(LIBGOFFICE_CFLAGS) -AC_SUBST(LIBGOFFICE_LIBS) - -if test x"$LIBGOFFICE_LIBS" = x; then - AC_MSG_RESULT([No, GOffice not found, will build using internal goffice library.]) - if test x"$LIBGSF_LIBS" != x; then - AC_MSG_NOTICE([Sorry, the internal goffice code cannot build with libgsf >= $GSF_REQUIRED.]) - AC_MSG_ERROR([Please either install goffice or downgrade libgsf to earlier than $GSF_REQUIRED]) - exit 1 - fi +AC_MSG_CHECKING(for GTK - version >= 2.6.0) +if $PKG_CONFIG 'gtk+-2.0 >= 2.6.0' +then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GTK26,1,[System has gtk 2.6.0 or better]) + HAVE_GTK26=yes else - AC_MSG_RESULT([Yes, using GOffice]) - AC_DEFINE(HAVE_GOFFICE,,[We have found an external GOffice]) - HAVE_GOFFICE="use_external" + AC_MSG_RESULT(no) fi -AM_CONDITIONAL(USE_LIBGOFFICE, [test x$HAVE_GOFFICE != x]) -AM_CONDITIONAL(USE_LIBGOFFICE, [test $HAVE_GOFFICE = "use_external"]) -AC_SUBST(USE_LIBGOFFICE) +AM_CONDITIONAL(HAVE_GTK26, test "x$HAVE_GTK26" = "xyes" ) -### -### GSF -PKG_CHECK_MODULES(GSF, libgsf-1 >= 1.8.0 - libgsf-gnome-1 >= 1.8.0) -AC_SUBST(GSF_LIBS) + +AC_MSG_CHECKING(for pango version >= 1.8.0) +if $PKG_CONFIG 'pango >= 1.8.0' +then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PANGO18,1,[System has pango 1.8.0 or better]) + HAVE_PANGO18=yes +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(HAVE_PANGO18, test "x$HAVE_PANGO18" = "xyes" ) + + +dnl @@fixme +dnl use both PKG_CHECK_MODULES and `$PKG_CONFIG`; the first importantly sets +dnl MUMBLE_{LIBS,CFLAGS}... +dnl Q: What does PKG_CHECK_MODULES create? +dnl A: Just _CFLAGS and _LIBS, apparently [pkg.m4] + +dnl $4=true => don't die in case of failure. +PKG_CHECK_MODULES(GSF, libgsf-1 >= 1.12.2 + libgsf-gnome-1 >= 1.12.2,,true) +if $PKG_CONFIG 'libgsf-1 >= 1.12.2' +then + AC_DEFINE(HAVE_LIBGSF,1,[System has libgsf-1.12.2 or better]) + HAVE_LIBGSF=yes +else + AC_MSG_NOTICE(using internally-packaged libgsf) + GSF_CFLAGS='-I${top_srcdir}/lib/libgsf-1.12.3' + GSF_LIBS='${top_builddir}/lib/libgsf-1.12.3/gsf/libgsf-1.la' + NEED_LIBGSF=yes +fi +AM_CONDITIONAL(HAVE_LIBGSF, test "x$HAVE_LIBGSF" = "xyes") AC_SUBST(GSF_CFLAGS) +AC_SUBST(GSF_LIBS) -### libart -PKG_CHECK_MODULES(ART, libart-2.0 >= 2.3.11) -AC_SUBST(ART_LIBS) -AC_SUBST(ART_CFLAGS) +dnl $4=true => don't die if failure. +PKG_CHECK_MODULES(GOFFICE, libgoffice-1 >= 0.0.4,,true) +if $PKG_CONFIG 'libgoffice-1 >= 0.0.4' +then + AC_DEFINE(HAVE_GOFFICE,1,[System has goffice-0.0.4 or better]) + HAVE_GOFFICE=yes +else + AC_MSG_NOTICE(using internally-packaged goffice) + GOFFICE_CFLAGS='-I${top_srcdir}/lib/goffice-0.0.4' + GOFFICE_LIBS='${top_builddir}/lib/goffice-0.0.4/goffice/libgoffice-1.la' + NEED_GOFFICE=yes +fi +AM_CONDITIONAL(HAVE_GOFFICE, test "x$HAVE_GOFFICE" = "xyes") +AC_SUBST(GOFFICE_CFLAGS) +AC_SUBST(GOFFICE_LIBS) -### silence convention-difference from cut-n-paste'd gnumeric Makefile.am's: -AM_CONDITIONAL(WITH_GNOME, true) -# for lib/goffice/graph/plugins/plot_barcol/gog-1.5d.c's use of -# goffice/graph/gog-error-bar.h:gog_error_bar_prefs, which is bounded by -# WITH_GTK for some reason... :/ -AM_CONDITIONAL(WITH_GTK, true) -AC_DEFINE(WITH_GTK, 1, [Define if UI is built]) +### ---------- -### gnome-print [= gnome-font] -PKG_CHECK_MODULES(PRINT, libgnomeprint-2.2 >= 2.5.2) -AC_SUBST(PRINT_LIBS) -AC_SUBST(PRINT_CFLAGS) +### +libgsf-1.12.3 +if test "x$HAVE_LIBGSF" != xyes; then +AC_MSG_NOTICE('internal libgsf configuration...') -AC_ARG_VAR(GLIB_GENMARSHAL, [Absolute path of the glib-genmarshal executable.]) -AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) +m4_define([libgsf_version_major], [1]) +m4_define([libgsf_version_minor], [12]) +m4_define([libgsf_version_micro], [3]) +m4_define([libgsf_version_extra], []) +m4_define([libgsf_full_version], + [libgsf_version_major.libgsf_version_minor.libgsf_version_micro[]libgsf_version_extra]) -gog_plugindir='${GNC_LIBDIR}/plugins' -# do this to minimize changes in the plugin makefiles... -gnumeric_plugindir='${gog_plugindir}' -AC_SUBST(gog_plugindir) -AC_SUBST(gnumeric_plugindir) -#AC_SUBST(pkglibdir) -- this breaks builds into /opt. -gnumeric_icondir='${GNC_SHAREDIR}/pixmaps' -AC_SUBST(gnumeric_icondir) +dnl AC_CONFIG_SRCDIR(lib/libgsf-1.12.3/gsf/gsf.h) +AC_SUBST(LIBGSF_MAJOR_VERSION, libgsf_version_major) +AC_SUBST(LIBGSF_MINOR_VERSION, libgsf_version_minor) +AC_SUBST(LIBGSF_MICRO_VERSION, libgsf_version_micro) -# /GOG +dnl Version info for libraries = CURRENT:REVISION:AGE +AC_SUBST(VERSION_INFO, +m4_eval(libgsf_version_major + libgsf_version_minor)[]dnl +:libgsf_version_micro:libgsf_version_minor) + +dnl 2005-11-19,jsled, this doesn't seem to work... :( +dnl ifelse(x$HAVE_LIBGSF, xyes,, + AC_CONFIG_HEADERS(gsf-config.h) +dnl) + +AC_FUNC_FSEEKO +AC_SYS_LARGEFILE + +dnl Checks for libraries. +ifelse([ + If we defined the module lists on the M4 level, we could have problems + with PKG_CHECK_MODULES from pkgconfig 0.16.0, which double quotes its + second argument (the module list). + As a handy workaround, we use shell variables. +]) +dnl Modules common to libgsf and libgsf-gnome +libgsf_reqs=" + gobject-2.0 >= 2.4.0 + glib-2.0 >= 2.4.0 + libxml-2.0 >= 2.4.16 +" +dnl Modules required for libgsf-gnome +libgsf_gnome_reqs=" + $libgsf_reqs + libbonobo-2.0 >= 2.0.0 + gnome-vfs-2.0 >= 2.2.0 + gnome-vfs-module-2.0 >= 2.2.0 +" +PKG_CHECK_MODULES(LIBGSF, $libgsf_reqs) + +# this should come after `AC_PROG_CC' +#ifdef([GNOME_COMPILE_WARNINGS],[GNOME_COMPILE_WARNINGS],) +#CFLAGS="$CFLAGS $WARN_CFLAGS -DG_DISABLE_DEPRECATED" + +#if test "$GCC" = "yes"; then +# for option in -Wno-system-headers -Wfloat-equal -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wformat -Wnested-externs -Winline -Wdeclaration-after-statement -Wundef -W -Wmissing-noreturn -Wmissing-format-attribute; do +# SAVE_CFLAGS="$CFLAGS" +# CFLAGS="$CFLAGS $option" +# AC_MSG_CHECKING([whether gcc understands $option]) +# AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], +# has_option=yes, +# has_option=no) +# if test $has_option = no; then +# CFLAGS="$SAVE_CFLAGS" +# fi +# AC_MSG_RESULT($has_option) +# unset has_option +# unset SAVE_CFLAGS +# done +# unset option +#fi + +AC_CHECK_DECL(fdopen, fdopen_works=yes, fdopen_works=no) +if test $fdopen_works = no ; then + unset ac_cv_have_decl_fdopen + CFLAGS="$CFLAGS -D_POSIX_SOURCE" + AC_MSG_NOTICE([adding -D_POSIX_SOURCE to CFLAGS]) + AC_CHECK_DECL(fdopen, fdopen_works=yes, fdopen_works=no) + if test $fdopen_works = no ; then + AC_MSG_ERROR([fdopen is not available]) + fi +fi + +# Unfortunately, -D_POSIX_SOURCE turns off struct timeval on Solaris +AC_MSG_CHECKING([whether struct timeval is available]) +for try in 1 2; do + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[struct timeval tv;]])], + struct_timeval_works=yes, + struct_timeval_works=no) + test $struct_timeval_works = yes && break + # Try this for the second attempt: + test $try = 1 && CFLAGS="$CFLAGS -D__EXTENSIONS__" +done +AC_MSG_RESULT($struct_timeval_works) +if test $struct_timeval_works = no ; then + AC_MSG_ERROR([struct timeval is not available]) +fi + +AC_MSG_CHECKING([whether -D_BSD_SOURCE is needed for caddr_t]) +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], [[caddr_t ca]])], + need_bsd1=no, + need_bsd1=yes) +AC_MSG_RESULT($need_bsd1) + +AC_MSG_CHECKING([whether -D_BSD_SOURCE is needed for lstat]) +AC_LINK_IFELSE([AC_LANG_PROGRAM( +[[#include +#include +#include ]], +[[void *ptr = &lstat]])], +need_bsd2=no, need_bsd2=yes) +AC_MSG_RESULT($need_bsd2) +if test $need_bsd1 = yes -o $need_bsd2 = yes; then + CFLAGS="$CFLAGS -D_BSD_SOURCE" +fi + +AC_TYPE_MODE_T +AC_CHECK_HEADERS(fcntl.h malloc.h unistd.h io.h) +AC_FUNC_MMAP + +AC_CHECK_FUNCS(chown) + +SAVE_CFLAGS=$CFLAGS +SAVE_LIBS=$LIBS +CFLAGS="$CFLAGS $LIBGSF_CFLAGS" +LIBS="$LIBGSF_LIBS $LIBS" +AC_MSG_CHECKING([for g_chmod]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[(void)g_chmod("/xxx",0777);]])], + [AC_DEFINE(HAVE_G_CHMOD, 1, [Define if g_chmod is available as macro or function]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +AC_MSG_CHECKING([for g_access]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[(void)g_access("/xxx",0777);]])], + [AC_DEFINE(HAVE_G_ACCESS, 1, [Define if g_access is available as macro or function]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +CFLAGS=$SAVE_CFLAGS +LIBS=$SAVE_LIBS + +AC_MSG_CHECKING([whether macro S_ISREG is available]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +[[#include +#include ]], +[[S_ISREG(S_IFMT);]])], + [macro_s_isreg=yes], + [AH_TEMPLATE([S_ISREG], [Define S_ISREG if stat.h doesn't]) + AC_DEFINE([S_ISREG(m)], [(((m) & S_IFMT) == S_IFREG)]) + macro_s_isreg=no]) +AC_MSG_RESULT($macro_s_isreg) + +AC_MSG_CHECKING([for native Win32]) +case $host in + *-*-mingw*) + native_win32=yes + ;; + *) + native_win32=no + ;; +esac +AC_MSG_RESULT([$native_win32]) +AM_CONDITIONAL(OS_WIN32, test "$native_win32" = yes) + +AC_MSG_CHECKING([for Win32 platform in general]) +case $host in + *-*-mingw*|*-*-cygwin*) + platform_win32=yes + ;; + *) + platform_win32=no + ;; +esac +AC_MSG_RESULT($platform_win32) +AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = yes) + +################################################## +# Checks for gtk-doc and docbook-tools +################################################## +gtk_doc_installed=true +#ifdef([GTK_DOC_CHECK],[GTK_DOC_CHECK([1.0])],[gtk_doc_installed=false]) +# I would have liked to conditionalize this, but +# that appears to break other things http://bugzilla.gnome.org/show_bug.cgi?id=156399 +GTK_DOC_CHECK([1.0]) +AM_CONDITIONAL(GTK_DOC_INSTALLED, $gtk_doc_installed) + +dnl *********************************************************************************** +# Check for zlib. +_cppflags=$CPPFLAGS +_ldflags=$LDFLAGS + +Z_DIR= Z_LIBS= Z_CPPFLAGS= + +AC_ARG_WITH(zlib, + [[ --with-zlib=DIR use libz in DIR]], + [case $withval in + yes|no) ;; + *) Z_DIR=$withval + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib" + ;; + esac]) + +if test "x$with_zlib" != xno; then + with_zlib=no + AC_CHECK_HEADER(zlib.h, [AC_CHECK_LIB(z, gzread, [with_zlib=yes])]) +fi +if test "$with_zlib" = no; then + AC_MSG_ERROR([*** zlib is required]) +fi +if test "x$Z_DIR" != "x"; then + Z_CPPFLAGS="-I$Z_DIR/include" + case $host in + *-*-solaris*) Z_LIBS="-L$Z_DIR/lib -R$Z_DIR/lib -lz" ;; + *) Z_LIBS="-L$Z_DIR/lib -lz" ;; + esac +else + Z_LIBS="-lz" +fi +AC_SUBST(Z_CPPFLAGS) +AC_SUBST(Z_LIBS) + +CPPFLAGS=${_cppflags} +LDFLAGS=${_ldflags} + +dnl bz2 +dnl +BZ2_LIBS= +test_bz2=true +AC_ARG_WITH(bz2, + [--{with,without}-bz2 Build additional wrappers for BZ2], + if test "x$withval" = xno; then + test_bz2=false + fi +) + +with_bz2=false +if test "x$test_bz2" = xtrue ; then + AC_CHECK_LIB(bz2, BZ2_bzDecompressInit, + bz2_ok=yes, + bz2_ok=no + AC_MSG_WARN(*** BZ2 support disabled (BZ2 library not found) ***)) + + if test "$bz2_ok" = yes; then + AC_MSG_CHECKING([for bzlib.h]) + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE( + [[#include + #undef PACKAGE + #undef VERSION + #undef HAVE_STDLIB_H + #include ]])], + bz2_ok=yes, + bz2_ok=no) + AC_MSG_RESULT($bz2_ok) + fi + + if test "$bz2_ok" = yes; then + AC_DEFINE(HAVE_BZ2, 1, [Is bzip2 available and enabled]) + BZ2_LIBS="-lbz2" + else + AC_MSG_WARN(*** BZ2 support disabled (BZ2 header not found) ***) + fi +else + AC_MSG_WARN([BZ2 support disabled, as requested (Use --with-bz2 to enable)]) +fi + +AC_SUBST(BZ2_LIBS) + +dnl *********************************************************************************** + +dnl gnome +dnl +want_gnome=auto +AC_ARG_WITH(gnome, + [--{with,without}-gnome Build additional wrappers for GNOME-VFS and BONOBO], + [case $withval in + yes) want_gnome=yes;; + no) want_gnome=no;; + esac[]dnl +]) +have_gnome=no +if test $want_gnome = no ; then + AC_MSG_WARN([GNOME support disabled, as requested (Use --with-gnome to enable)]) +else + PKG_CHECK_MODULES(LIBGSF_GNOME, $libgsf_gnome_reqs, + [have_gnome=yes], + [if test $want_gnome = yes; then + AC_MSG_ERROR([GNOME support requested, but not available.]) + else + AC_MSG_WARN([GNOME support disabled, unable to find required version of VFS and/or Bonobo]) + fi]) +fi +AM_CONDITIONAL(WITH_LIBGSF_GNOME, test $have_gnome = yes) + +# GConf configuration +dnl Don't publish the GCONFTOOL variable, AM_GCONF_SOURCE_2 has ``gconftool-2'' hardwired. +GCONFTOOL= +AC_CHECK_PROG([GCONFTOOL], [gconftool-2], [gconftool-2], [no]) +if test "x$GCONFTOOL" = "xno"; then + AC_MSG_WARN([thumbnailer will not be built, unable to find gconftool-2]) +else + AM_GCONF_SOURCE_2 +fi +AM_CONDITIONAL(WITH_GCONF, test "x$GCONFTOOL" != "xno") + +dnl # LDFLAGS="-no-undefined $LDFLAGS" + +# turn off unneeded python support +AM_CONDITIONAL(WITH_PYTHON, false) + +else + +AM_CONDITIONAL(OS_WIN32, false) +AM_CONDITIONAL(PLATFORM_WIN32, false) +AM_CONDITIONAL(GTK_DOC_INSTALLED, false) + AM_CONDITIONAL(ENABLE_GTK_DOC, false) + AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, false) +AM_CONDITIONAL(WITH_LIBGSF_GNOME, false) +AM_CONDITIONAL(WITH_GCONF, false) +AM_CONDITIONAL(WITH_PYTHON, false) + +fi +# -libgsf-1.12.3 + +# +goffice-0.0.4 +if test "x$HAVE_GOFFICE" != xyes; then + +AC_MSG_NOTICE('internal goffice configuration...') + +m4_define([goffice_version_epoch], [0]) +m4_define([goffice_version_major], [0]) +m4_define([goffice_version_minor], [4]) +m4_define([goffice_version_extra], []) +m4_define([goffice_full_version], + [goffice_version_epoch.goffice_version_major.goffice_version_minor[]goffice_version_extra]) + +AC_CONFIG_SRCDIR(lib/goffice-0.0.4/goffice/goffice.h) + +AC_SUBST(GOFFICE_LIB_VERSION, +m4_eval(goffice_version_epoch + goffice_version_major)[]dnl +:goffice_version_minor:goffice_version_major) + +dnl This one is created by autoheader, ... +AC_CONFIG_HEADERS(goffice-config.h) + +dnl ... and this one is a small subset, maintained manually, +dnl which will be installed. +AC_CONFIG_HEADERS(goffice-features.h) +dnl +dnl Make sure these two won't clash. Put the following to goffice-config.h: +AH_BOTTOM([/* Don't include goffice-features.h, it's a subset of goffice-config.h. */ +#define GOFFICE_FEATURES_H]) + +dnl We use $host_os: +dnl AC_CANONICAL_HOST + +AC_ISC_POSIX +AC_PROG_CC +AC_PROG_YACC +AM_PROG_LEX +AC_PROG_LN_S +AM_PROG_LIBTOOL +AC_STDC_HEADERS +AC_SYS_LARGEFILE + +dnl Propagate Gnome-specific variable ACLOCAL_FLAGS to Makefile. +AC_SUBST(ACLOCAL_AMFLAGS, $ACLOCAL_FLAGS) + +dnl The first call to PKG_CHECK_MODULES is inside an `if.' +dnl We have to call PKG_PROG_PKG_CONFIG explicitly; otherwise it would +dnl get expanded just before the first occurence of PKG_CHECK_MODULES +dnl and might escape execution. +dnl PKG_PROG_PKG_CONFIG + +dnl ***************************** +# libgsf-1 >= 1.12.2 +goffice_reqs=" + glib-2.0 >= 2.4.8 + gobject-2.0 >= 2.4.8 + gmodule-2.0 >= 2.4.8 + libxml-2.0 >= 2.4.12 + pango >= 1.6.0 + pangoft2 >= 1.6.0 +" +goffice_cairo_reqs=" + cairo >= 0.5.0 +" +goffice_gtk_reqs=" + gtk+-2.0 >= 2.4.14 + libglade-2.0 >= 2.3.6 + libgnomeprint-2.2 >= 2.8.0 + libart-2.0 >= 2.3.11 +" +goffice_gnome_reqs=" + gconf-2.0 + libgnomeui-2.0 >= 2.0.0 + libgsf-gnome-1 >= 1.12.2 +" +dnl ********************* +dnl Should we use cairo ? +dnl ********************* +goffice_with_cairo=false +AC_ARG_WITH(cairo, [ --{with,without}-cairo Use cairo for graph rendering]) +if test "x$with_cairo" = xyes; then + cairo_msg="Enabled" + PKG_CHECK_MODULES(CAIRO, [$goffice_cairo_reqs]) + AC_DEFINE(WITH_CAIRO, 1, [Define if goffice is build with cairo]) + goffice_reqs="$goffice_reqs $goffice_cairo_reqs" + goffice_with_cairo=true +else + cairo_msg="Disabled" + goffice_with_cairo=false +fi + +dnl ******************* +dnl Should we use gtk ? +dnl ******************* +goffice_with_gtk=true +AC_ARG_WITH(gtk, [ --without-gtk Build without UI]) +if test "x$with_gtk" = xno; then + ui_msg="None (Gtk disabled by request)" + goffice_with_gtk=false +else + dnl We shouldn't silently default to --without-gtk. + dnl If the requirements are not met, fail. + ui_msg="Gtk" + PKG_CHECK_MODULES(GTK, [$goffice_gtk_reqs]) +fi + +goffice_with_gnome=$goffice_with_gtk +if test "x$goffice_with_gtk" = "xtrue" ; then + AC_DEFINE(WITH_GTK, 1, [Define if UI is built]) + goffice_reqs="$goffice_reqs $goffice_gtk_reqs" + + dnl ************************************ + dnl Are the GNOME extensions available ? + dnl ************************************ + + goffice_with_gnome=true + AC_ARG_WITH(gnome, + [ --{with,without}-gnome Use GNOME extensions], + [if test "x$withval" = xno; then + goffice_with_gnome=false + ui_msg="Gtk+ (Gnome disabled by request)" + fi] + ) + if test "x$goffice_with_gnome" = "xtrue"; then + PKG_CHECK_MODULES(GNOME, [$goffice_gnome_reqs], + [ui_msg="Gnome"], + [ui_msg="Gtk (missing gnome dependencies)" ; goffice_with_gnome=false]) + fi + + if test "x$goffice_with_gnome" = "xtrue"; then + AC_DEFINE(WITH_GNOME, 1, [Define if GNOME extensions are available]) + goffice_reqs="$goffice_reqs $goffice_gnome_reqs" + fi +fi +AM_CONDITIONAL(WITH_CAIRO, $goffice_with_cairo) +AM_CONDITIONAL(WITH_GTK, $goffice_with_gtk) +AM_CONDITIONAL(WITH_GNOME, $goffice_with_gnome) + +dnl **************************** +dnl now that we have selected out libraries the whole collection in one +dnl shot so that we can have a nice neat compile/link line +dnl **************************** + +PKG_CHECK_MODULES(GOFFICE_DEPS, $goffice_reqs) + +dnl Checks for Xft/XRender +AC_CHECK_LIB(Xrender, XRenderFindFormat, + [AC_SUBST(RENDER_LIBS, "-lXrender -lXext") + AC_DEFINE(HAVE_RENDER, 1, [Define if libXrender is available.])], + [AC_SUBST(RENDER_LIBS, "")], + [-lXext]) + +dnl ***************************** +AC_MSG_CHECKING([for Win32 platform]) +with_win32=no +case $host_os in + mingw* | pw32* | cygwin*) + with_win32=yes + GOFFICE_PLUGIN_LDFLAGS="-Wl,--enable-runtime-pseudo-relo,--export-all-symbols $GOFFICE_PLUGIN_LDFLAGS" + AC_ARG_VAR(WINDRES, [The windres executable (used by win32 builds only).]) + AC_CHECK_TOOL(WINDRES, windres, :) + ;; +esac +AC_MSG_RESULT($with_win32) +AM_CONDITIONAL(WITH_WIN32, test $with_win32 = yes) + +dnl ***************************** +dnl FIXME: perhaps declare with AC_ARG_VAR? +dnl If we use the initial value of a variable, we have to make it precious. +dnl +GOFFICE_PLUGIN_LDFLAGS="-avoid-version -no-undefined $GOFFICE_PLUGIN_LDFLAGS" +GOFFICE_PLUGIN_LIBADD="\$(top_builddir)/lib/goffice-0.0.4/goffice/libgoffice-1.la $GOFFICE_DEPS_LIBS $GOFFICE_PLUGIN_LIBADD" +AC_SUBST(GOFFICE_PLUGIN_LDFLAGS) +AC_SUBST(GOFFICE_PLUGIN_LIBADD) + +dnl disable for in stable release, re-enable for development series +# FIXME - we should enable these, but maybe not right now... -jsled +# CFLAGS="$CFLAGS -DG_DISABLE_DEPRECATED" +# CFLAGS="$CFLAGS -DPANGO_DISABLE_DEPRECATED" +# if test "x$goffice_with_gtk" = "xtrue"; then +# CFLAGS="$CFLAGS -DGDK_PIXBUF_DISABLE_DEPRECATED" +# CFLAGS="$CFLAGS -DGDK_DISABLE_DEPRECATED" +# CFLAGS="$CFLAGS -DGDK_MULTIHEAD_SAFE" +# CFLAGS="$CFLAGS -DGTK_DISABLE_DEPRECATED" +# CFLAGS="$CFLAGS -DLIBGLADE_DISABLE_DEPRECATED" +# fi +# if test "x$goffice_with_gnome" = "xtrue"; then +# CFLAGS="$CFLAGS -DGNOME_DISABLE_DEPRECATED" +# CFLAGS="$CFLAGS -DBONOBO_DISABLE_DEPRECATED" +# CFLAGS="$CFLAGS -DBONOBO_UI_DISABLE_DEPRECATED" +# fi + +dnl **************************** +dnl prep the pixmap generator +dnl **************************** + +AC_ARG_VAR(GLIB_GENMARSHAL, [The glib-genmarshal executable.]) +AC_CHECK_PROG(GLIB_GENMARSHAL, glib-genmarshal, glib-genmarshal) + +AC_ARG_VAR(GDK_PIXBUF_CSOURCE, [The gdk-pixbuf-csource executable.]) +AC_CHECK_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, gdk-pixbuf-csource) + +## this should come after `AC_PROG_CC' +#ifdef([GNOME_COMPILE_WARNINGS], +# [GNOME_COMPILE_WARNINGS] CFLAGS="$CFLAGS $WARN_CFLAGS", +# [] +#) +#set_more_warnings=yes +#if test "$GCC" = "yes" -a "x$set_more_warnings" != "xno"; then +# for option in -Wsign-compare -Wpointer-arith -Wnested-externs -Wchar-subscripts -Wwrite-strings -Wdeclaration-after-statement -Wmissing-noreturn -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-format-attribute; do +# SAVE_CFLAGS="$CFLAGS" +# CFLAGS="$CFLAGS $option" +# AC_MSG_CHECKING([whether gcc understands $option]) +# AC_TRY_COMPILE([], [], +# has_option=yes, +# has_option=no,) +# if test $has_option = no; then +# CFLAGS="$SAVE_CFLAGS" +# fi +# AC_MSG_RESULT($has_option) +# unset has_option +# unset SAVE_CFLAGS +# done +# unset option +#fi +#AC_SUBST(WARN_CFLAGS) + +AC_CHECK_FUNC(gettimeofday, + [AC_DEFINE(HAVE_GETTIMEOFDAY, 1, + [Define if the gettimeofday function is available] + )]) + +dnl M_PI +AC_MSG_CHECKING([whether M_PI is available]) +AC_TRY_COMPILE([#include ], [double f = M_PI], works_without_bsd_source=yes, works_without_bsd_source=no) +AC_MSG_RESULT($works_without_bsd_source) + +if test $works_without_bsd_source = no ; then + CFLAGS="$CFLAGS -D_BSD_SOURCE" + AC_MSG_CHECKING([whether M_PI is available with -D_BSD_SOURCE]) + AC_TRY_COMPILE([#include ], [double f = M_PI], m_pi_works=yes, m_pi_works=no) + AC_MSG_RESULT($m_pi_works) + if test $m_pi_works = no ; then + AC_MSG_ERROR([M_PI is not available]) + fi +fi + +dnl +dnl On Solaris finite() needs ieeefp.h +dnl Either of these seem to signal IEEE754 math, see mathfunc.c +dnl +AC_CHECK_HEADERS(ieeefp.h ieee754.h) + +dnl Check for some functions +AC_CHECK_FUNCS(random drand48 finite memmove mkdtemp uname times sysconf) + +dnl FIXME: Does this really belong here? +AC_CHECK_FUNC(bind_textdomain_codeset,,[AC_CHECK_LIB(intl,bind_textdomain_codeset)]) + +dnl isfinite is a macro on HPUX +AC_TRY_COMPILE([#include ], [int a = isfinite(0.0)], + [AC_DEFINE(HAVE_ISFINITE, 1, + [Define if the isfinite() macro is available] + ) + ], []) + +dnl +dnl On BSD, we seem to need -lm for finite +dnl +if test $ac_cv_func_finite = no; then + AC_CHECK_LIB(m, finite, + [AC_DEFINE(HAVE_FINITE, 1, + [Define if the finite function is available] + ) + LIBS="$LIBS -lm"]) +fi + +dnl check for complete locale implementation +AC_CHECK_HEADERS(langinfo.h) + +dnl Handle systems that have stuff in -lm. +AC_CHECK_FUNCS(log) +if test $ac_cv_func_log = no; then + AC_CHECK_LIB(m, log, + [AC_DEFINE(HAVE_LOG, 1, + [Define if the log function is available] + ) + LIBS="$LIBS -lm"]) +fi + +AC_DEFUN([GOFFICE_CHECK_FUNC], +[AC_CHECK_FUNC([$1], + [], + [AC_DEFINE([GOFFICE_SUPPLIED_]AS_TR_CPP([$1]), + 1, + [Define if G Office supplies $1.])])dnl +]) +GOFFICE_CHECK_FUNC(log1p) +GOFFICE_CHECK_FUNC(expm1) +GOFFICE_CHECK_FUNC(asinh) +GOFFICE_CHECK_FUNC(acosh) +GOFFICE_CHECK_FUNC(atanh) + +float_msg=no +EXTRA_LIBS= EXTRA_INCLUDES= +AC_C_LONG_DOUBLE +if test $ac_cv_c_long_double = yes; then + have_mandatory_funcs=yes + need_sunmath=0 + sunmathlinkstuff='-L/opt/SUNWspro/lib -R/opt/SUNWspro/lib -lsunmath' + for ldfunc in fabsl logl log10l ceill floorl powl isnanl finitel; do + AC_CHECK_FUNC($ldfunc, + , + [AC_CHECK_LIB(m, + $ldfunc, + , + [AC_CHECK_LIB(sunmath, + $ldfunc, + [ if test $need_sunmath = 0; then + # FIXME: better idea? + LDFLAGS="$LDFLAGS $sunmathlinkstuff" + sunmathinclude=`ls -d /opt/SUNWspro/*/include/cc | sed '$!d'` + CPPFLAGS="$CPPFLAGS -I$sunmathinclude" + fi + need_sunmath=1 ], + [have_mandatory_funcs=no], + [-L/opt/SUNWspro/lib $GOFFICE_DEPS_LIBS])])]) + done + if test $need_sunmath = 1; then + EXTRA_LIBS="$EXTRA_LIBS $sunmathlinkstuff" + EXTRA_INCLUDES="$EXTRA_INCLUDES -I$sunmathinclude" + AC_CHECK_HEADERS([sunmath.h floatingpoint.h], + , + [AC_MSG_WARN([Long doubles require the $ac_header header.]) + have_mandatory_funcs=no]) + fi + unset need_sunmath + unset sunmathlinkstuff + unset sunmathinclude + + GOFFICE_CHECK_FUNC(modfl) + GOFFICE_CHECK_FUNC(ldexpl) + GOFFICE_CHECK_FUNC(frexpl) + + AC_CHECK_FUNCS(strtold) + if test "$ac_cv_func_strtold" = yes; then + AC_MSG_CHECKING([if we must prototype strtold ourselves]) + AC_TRY_RUN([#include + int main () + { + const char *s = "+3.1415e+0"; + char *theend; + long double res = strtold (s, &theend); + return !(*theend == 0 && finitel (res) && + res >= 3.14 && res <= 3.15); + }], + [AC_MSG_RESULT(no)], + [AC_MSG_RESULT(yes) + AC_DEFINE([GOFFICE_SUPPLIED_STRTOLD], 1, + [Define if G Office supplies strtold.]) + ], + [AC_MSG_RESULT(assuming not)]) + else + AC_DEFINE([GOFFICE_SUPPLIED_STRTOLD], 1, + [Define if G Office supplies strtold.]) + AC_CHECK_FUNCS(string_to_decimal decimal_to_quadruple) + if test "x$ac_cv_func_string_to_decimal" != "xyes" || \ + test "x$ac_cv_func_decimal_to_quadruple" != "xyes" || \ + test "x$ac_cv_header_floatingpoint_h" != "xyes"; then + AC_MSG_WARN([You lack the strtold function -- precision will be impaired]) + fi + fi + if test "$have_mandatory_funcs" = yes; then + float_msg=yes + AC_DEFINE([GOFFICE_WITH_LONG_DOUBLE], 1, + [Define if G Office supports long double.]) + else + AC_MSG_WARN([Long double support disabled because of library problems]) + fi + unset have_mandatory_funcs +fi +AC_SUBST(EXTRA_LIBS) +AC_SUBST(EXTRA_INCLUDES) + +dnl ****************** +dnl * Config defaults +dnl ****************** +dnl +dnl These are changed in goffice.c for WIN32 packages +AC_SUBST(goffice_datadir, '${datadir}/goffice/${GOFFICE_VERSION}') +AC_SUBST(goffice_libdir, '${libdir}/goffice/${GOFFICE_VERSION}') +AC_SUBST(goffice_icondir, '${datadir}/pixmaps/goffice') +AC_SUBST(goffice_localedir, '${prefix}/${DATADIRNAME}/locale') +dnl +AC_SUBST(goffice_plugindir, '${goffice_libdir}/plugins') +AC_SUBST(goffice_gladedir, '${goffice_datadir}/glade') + +dnl Export to goffice-config.h and goffice-features.h +AC_DEFINE(GOFFICE_VERSION, "goffice_full_version", + [The version number of this release, possibly with additional suffix]) +AC_DEFINE(GO_VERSION_EPOCH, goffice_version_epoch, + [The Epoch of this release]) +AC_DEFINE(GO_VERSION_MAJOR, goffice_version_major, + [The Major version number of this release]) +AC_DEFINE(GO_VERSION_MINOR, goffice_version_minor, + [The Minor version number of this release]) +AC_DEFINE(GO_VERSION_EXTRA, "goffice_version_extra", + [Extra, possibly empty tag for this release]) + +else + +AM_CONDITIONAL(WITH_CAIRO, false) +AM_CONDITIONAL(WITH_GTK, false) +AM_CONDITIONAL(WITH_GNOME, false) +AM_CONDITIONAL(WITH_WIN32, false) + +fi +# -goffice-0.0.4 + +# -gog2 ### -------------------------------------------------------------------------- ### Variables @@ -1253,23 +1992,47 @@ AC_CONFIG_FILES(po/Makefile.in lib/guile-www/Makefile lib/srfi/Makefile lib/libc/Makefile - lib/goffice/Makefile - lib/goffice/split/Makefile - lib/goffice/split/widgets/Makefile - lib/goffice/app/Makefile - lib/goffice/graph/Makefile - lib/goffice/graph/plugins/Makefile - lib/goffice/graph/plugins/plot_barcol/Makefile - lib/goffice/graph/plugins/plot_pie/Makefile - lib/goffice/graph/plugins/plot_radar/Makefile - lib/goffice/graph/plugins/plot_surface/Makefile - lib/goffice/graph/plugins/plot_xy/Makefile - lib/goffice/utils/Makefile - lib/goffice/gui-utils/Makefile - lib/goffice/drawing/Makefile - lib/goffice/pixmaps/Makefile - lib/goffice/cut-n-paste/Makefile - lib/goffice/cut-n-paste/pcre/Makefile + lib/libgsf-1.12.3/Makefile + lib/libgsf-1.12.3/doc/Makefile + lib/libgsf-1.12.3/gsf/Makefile + lib/libgsf-1.12.3/gsf-gnome/Makefile + lib/libgsf-1.12.3/gsf-win32/Makefile + lib/libgsf-1.12.3/tests/Makefile + lib/libgsf-1.12.3/python/Makefile + lib/libgsf-1.12.3/thumbnailer/Makefile + lib/libgsf-1.12.3/po/Makefile.in + lib/libgsf-1.12.3/gsf/version.c + lib/libgsf-1.12.3/doc/version.xml + lib/libgsf-1.12.3/libgsf-1.pc + lib/libgsf-1.12.3/libgsf-1.spec + lib/libgsf-1.12.3/libgsf-gnome-1.pc + lib/libgsf-1.12.3/libgsf-gnome-1.spec + lib/libgsf-1.12.3/libgsf-win32-1.pc + lib/libgsf-1.12.3/libgsf-zip + lib/goffice-0.0.4/Makefile + lib/goffice-0.0.4/libgoffice-1.pc + lib/goffice-0.0.4/goffice/Makefile + lib/goffice-0.0.4/goffice/app/Makefile + lib/goffice-0.0.4/goffice/utils/Makefile + lib/goffice-0.0.4/goffice/data/Makefile + lib/goffice-0.0.4/goffice/gtk/Makefile + lib/goffice-0.0.4/goffice/graph/Makefile + lib/goffice-0.0.4/goffice/drawing/Makefile + lib/goffice-0.0.4/goffice/ms-compat/Makefile + lib/goffice-0.0.4/goffice/cut-n-paste/Makefile + lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/Makefile + lib/goffice-0.0.4/goffice/cut-n-paste/pcre/Makefile + lib/goffice-0.0.4/plugins/Makefile + lib/goffice-0.0.4/plugins/plot_barcol/Makefile + lib/goffice-0.0.4/plugins/plot_pie/Makefile + lib/goffice-0.0.4/plugins/plot_radar/Makefile + lib/goffice-0.0.4/plugins/plot_xy/Makefile + lib/goffice-0.0.4/plugins/plot_surface/Makefile + lib/goffice-0.0.4/plugins/plot_boxes/Makefile + lib/goffice-0.0.4/plugins/reg_linear/Makefile + lib/goffice-0.0.4/pixmaps/Makefile + lib/goffice-0.0.4/po/Makefile.in + lib/goffice-0.0.4/tests/Makefile lib/libqof/Makefile lib/libqof/qof/Makefile lib/libqof/backend/Makefile @@ -1399,8 +2162,12 @@ AC_MSG_RESULT([ CPPFLAGS ............. : $CPPFLAGS CFLAGS ............... : $CFLAGS LDFLAGS .............. : $LDFLAGS + Have libgsf............: $HAVE_LIBGSF + Have goffice...........: $HAVE_GOFFICE QOF support ...........: $QOF_VERSION QOF location ..........: $QOF_PREFIX QOF library dir .......: $QOF_LIB_DIR QOF backend config ....: $QOF_XML_DIR + + ]) diff --git a/goffice-config.h.in b/goffice-config.h.in new file mode 100644 index 0000000000..e3dea58397 --- /dev/null +++ b/goffice-config.h.in @@ -0,0 +1,220 @@ +/* goffice/goffice-config.h.in. Generated from configure.in by autoheader. */ + +/* Conditionally include >2.4 pieces we use. */ +#undef HAVE_GLIB26 +#undef HAVE_GTK26 + +/* Conditionally work around exposed-in-1.8-functionality. */ +#undef HAVE_PANGO18 + +/* always defined to indicate that i18n is enabled */ +#undef ENABLE_NLS + +/* The package name, for gettext */ +#undef GETTEXT_PACKAGE + +/* Define if G Office supplies acosh. */ +#undef GOFFICE_SUPPLIED_ACOSH + +/* Define if G Office supplies asinh. */ +#undef GOFFICE_SUPPLIED_ASINH + +/* Define if G Office supplies atanh. */ +#undef GOFFICE_SUPPLIED_ATANH + +/* Define if G Office supplies expm1. */ +#undef GOFFICE_SUPPLIED_EXPM1 + +/* Define if G Office supplies frexpl. */ +#undef GOFFICE_SUPPLIED_FREXPL + +/* Define if G Office supplies ldexpl. */ +#undef GOFFICE_SUPPLIED_LDEXPL + +/* Define if G Office supplies log1p. */ +#undef GOFFICE_SUPPLIED_LOG1P + +/* Define if G Office supplies modfl. */ +#undef GOFFICE_SUPPLIED_MODFL + +/* Define if G Office supplies strtold. */ +#undef GOFFICE_SUPPLIED_STRTOLD + +/* The version number of this release, possibly with additional suffix */ +#undef GOFFICE_VERSION + +/* Define if G Office supports long double. */ +#undef GOFFICE_WITH_LONG_DOUBLE + +/* The Epoch of this release */ +#undef GO_VERSION_EPOCH + +/* Extra, possibly empty tag for this release */ +#undef GO_VERSION_EXTRA + +/* The Major version number of this release */ +#undef GO_VERSION_MAJOR + +/* The Minor version number of this release */ +#undef GO_VERSION_MINOR + +/* Define to 1 if you have the `bind_textdomain_codeset' function. */ +#undef HAVE_BIND_TEXTDOMAIN_CODESET + +/* Define to 1 if you have the `dcgettext' function. */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the `decimal_to_quadruple' function. */ +#undef HAVE_DECIMAL_TO_QUADRUPLE + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `drand48' function. */ +#undef HAVE_DRAND48 + +/* Define if the finite function is available */ +#undef HAVE_FINITE + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOATINGPOINT_H + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if the gettimeofday function is available */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_IEEE754_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_IEEEFP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if the isfinite() macro is available */ +#undef HAVE_ISFINITE + +/* Define to 1 if you have the header file. */ +#undef HAVE_LANGINFO_H + +/* Define if your file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if you have the `intl' library (-lintl). */ +#undef HAVE_LIBINTL + +/* Define to 1 if you have the `m' library (-lm). */ +#undef HAVE_LIBM + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define if the log function is available */ +#undef HAVE_LOG + +/* Define to 1 if long double works and has more range or precision than + double. */ +#undef HAVE_LONG_DOUBLE + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkdtemp' function. */ +#undef HAVE_MKDTEMP + +/* Define to 1 if you have the `random' function. */ +#undef HAVE_RANDOM + +/* Define if libXrender is available. */ +#undef HAVE_RENDER + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `string_to_decimal' function. */ +#undef HAVE_STRING_TO_DECIMAL + +/* Define to 1 if you have the `strtold' function. */ +#undef HAVE_STRTOLD + +/* Define to 1 if you have the header file. */ +#undef HAVE_SUNMATH_H + +/* Define to 1 if you have the `sysconf' function. */ +#undef HAVE_SYSCONF + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the `times' function. */ +#undef HAVE_TIMES + +/* Define to 1 if you have the `uname' function. */ +#undef HAVE_UNAME + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define if goffice is build with cairo */ +#undef WITH_CAIRO + +/* Define if GNOME extensions are available */ +#undef WITH_GNOME + +/* Define if UI is built */ +#undef WITH_GTK + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Don't include goffice-features.h, it's a subset of goffice-config.h. */ +#define GOFFICE_FEATURES_H diff --git a/goffice-features.h.in b/goffice-features.h.in new file mode 100644 index 0000000000..debc279dcb --- /dev/null +++ b/goffice-features.h.in @@ -0,0 +1,51 @@ +/* + * goffice-features.h.in: + * + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + */ +#ifndef GOFFICE_FEATURES_H +#define GOFFICE_FEATURES_H + +/* Define if G Office supports long double. */ +#undef GOFFICE_WITH_LONG_DOUBLE + +/* Define if G Office supplies acosh. */ +#undef GOFFICE_SUPPLIED_ACOSH + +/* Define if G Office supplies asinh. */ +#undef GOFFICE_SUPPLIED_ASINH + +/* Define if G Office supplies atanh. */ +#undef GOFFICE_SUPPLIED_ATANH + +/* Define if G Office supplies expm1. */ +#undef GOFFICE_SUPPLIED_EXPM1 + +/* Define if G Office supplies frexpl. */ +#undef GOFFICE_SUPPLIED_FREXPL + +/* Define if G Office supplies ldexpl. */ +#undef GOFFICE_SUPPLIED_LDEXPL + +/* Define if G Office supplies modfl. */ +#undef GOFFICE_SUPPLIED_MODFL + +/* Define if G Office supplies strtold. */ +#undef GOFFICE_SUPPLIED_STRTOLD + +/* The version number of this release, possibly with additional suffix */ +#undef GOFFICE_VERSION + +/* The Epoch of this release */ +#undef GO_VERSION_EPOCH + +/* The Major version number of this release */ +#undef GO_VERSION_MAJOR + +/* The Minor version number of this release */ +#undef GO_VERSION_MINOR + +/* Extra, possibly empty tag for this release */ +#undef GO_VERSION_EXTRA + +#endif /* GOFFICE_FEATURES_H */ diff --git a/gsf-config.h.in b/gsf-config.h.in new file mode 100644 index 0000000000..2b0b0f52ef --- /dev/null +++ b/gsf-config.h.in @@ -0,0 +1,124 @@ +/* gsf-config.h.in. Generated from configure.in by autoheader. */ + +/* always defined to indicate that i18n is enabled */ +#undef ENABLE_NLS + +/* Gettext package. */ +#undef GETTEXT_PACKAGE + +/* Define to 1 if you have the `bind_textdomain_codeset' function. */ +#undef HAVE_BIND_TEXTDOMAIN_CODESET + +/* Conditionally include glib-2.0 > 2.4 functionality. */ +#undef HAVE_GLIB26 + +/* Is bzip2 available and enabled */ +#undef HAVE_BZ2 + +/* Define to 1 if you have the `chown' function. */ +#undef HAVE_CHOWN + +/* Define to 1 if you have the `dcgettext' function. */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if g_access is available as macro or function */ +#undef HAVE_G_ACCESS + +/* Define if g_chmod is available as macro or function */ +#undef HAVE_G_CHMOD + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_IO_H + +/* Define if your file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define S_ISREG if stat.h doesn't */ +#undef S_ISREG + +/* Version number of package */ +#undef VERSION + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to `int' if does not define. */ +#undef mode_t diff --git a/lib/Makefile.am b/lib/Makefile.am index bb00a517c7..9c5a7381d4 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,9 +1,10 @@ SUBDIRS = libc glib26 guile-www srfi -if USE_LIBGOFFICE -SUBDIRS += -else -SUBDIRS += goffice +if !HAVE_GOFFICE +if !HAVE_LIBGSF +SUBDIRS += libgsf-1.12.3 +endif +SUBDIRS += goffice-0.0.4 endif if USE_LIBQOF diff --git a/lib/goffice-0.0.4/AUTHORS b/lib/goffice-0.0.4/AUTHORS new file mode 100644 index 0000000000..020c3ca73f --- /dev/null +++ b/lib/goffice-0.0.4/AUTHORS @@ -0,0 +1,8 @@ +Jody Goldberg, maintainer. +Jean Brefort, Core charting engine. +Emmanuel Pacaud, Many plot types for charting engine. +Morten Welinder, Gnumeric hacker and leak plugging demi-god. +Chris Lahey, number format engine, and powerpoint/escher code + +NOTE : Keep this in sync with the about dialog and the webpage. +NOTE : Get an about dialog and a webpage :-) diff --git a/lib/goffice-0.0.4/BUGS b/lib/goffice-0.0.4/BUGS new file mode 100644 index 0000000000..0634542273 --- /dev/null +++ b/lib/goffice-0.0.4/BUGS @@ -0,0 +1,278 @@ + To report libgoffice bugs, please visit bugzilla.gnome.org. + + This file is used as a scratch pad by developers. It is a list of known +issues that need to be addressed. Divided into, things that will prevent +release, and longer term bugs. + +------------------------------------------------------------------------------- +Release Critical +---------------- + + : src/cut-n-paste-code/goffice/gui-utils/go-format-sel.c: + g_warning ("TESTING TESTING 123 res = '%s'", res ? res : "(null)"); + + goffice/goffice/graph/gog-graph.c uses pointers as quarks. That cannot + work. + + goffice/goffice/utils/go-format.c: go_format_value don't use the format + argument. + +TODO +---- + 0) Move gnome depends into a plugin + 0.1) egg-recent-files + 1) Format and number match rewrite + : Why does the number matching bother comparing against formats that are + covered by 'General' ? + : When applying a currency symbol we need to store the NON-localized id. + : hour month and year format strings need to be internationalized. + eg tt:ss instead of hh:ss for other locales. + : formats with AM/PM need to be internationalized. + : We do not format fractional seconds correctly. + : Parsing should handle embedded strings + : It incorrectly accepts mmm:ss as some sort of minute spec. + : When entering "ppp/qqq" into a cell with non-fractional format, do not + make it a fraction. + : Consider adding "%" to entry text when typing a text with a percentage + format. (I.e., user has "44%" in cell and presses "5" -- that causes + "5%" to be shown the the cursor between "5" and "%".) + + 2) GOActionComboText + 2.1) stub (DONE) + 2.2) Move to TreeModel to simplify sharing + 2.3) Support custom menu item + 3) Plugin Framework + 3.1) "De-activate all" should take the dependency tree + into account and handle the python loader last. + - i18n support for third-party plugins. + - Add extra info (authors, etc.) to XML file. + - Beautify ErrorInfo dialog (it's ugly). + - Mark plugin as "broken" if deactivation failed. + 3.2) pluginize paste types + 3.3) plugin manager needs dependency tracking. (Deactivate + all python plugins before the python loader, for example.) + +1) graphs + 1.1) Split plot xml file engine, type, and family plugins (DONE) + 1.2) Use the registered engines to create plots (DONE) + 1.3) XML + 1.3.1) Use libglade code parse GObject properties (DONE) + 1.3.2) remove GdkColor from boxed type support (DONE) + 1.3.3) Walk GogObject tree and build DOM (DONE) + 1.3.4) Build GogObject treee from DOM (DONE) + 1.3.5) For flagged properties store value in DOM (DONE) + 1.3.6) Read properties from DOM (DONE) + 1.3.7) XMLWriter interface for extra object content (DONE) + 1.3.8) Use it for series (DONE) + 1.3.9) Extend GOData to support deserialization (DONE) + 1.3.10) Implement deserialization for GnmData (DONE) + 1.3.11) Use the XMLWriter for series for all datasets (DONE) + 1.3.12) Persist names (DONE) + 1.3.13) Use XMLWriter for properties of type object (DONE) + 1.3.14) implement it for styles (DONE) + 1.3.15) position + 1.3.16) image data + 1.4) Decide on model vs view structure (DONE) + 1.5) Graph Guru (DONE) + 1.5.1) update when someone else changes the model (DONE) + 1.5.2) remove prop pages for deleted items (DONE) + 1.5.3) Keep state::chart,plot safe for typeselector (DONE) + in case they get deleted + 1.5.4) Allow going backwards if there is only chart (DONE) + 1.6) data allocator in gnumeric (DONE) + 1.6.1) initial interface (DONE) + 1.6.2) generalize container to be a DataSet (DONE) + 1.6.3) editor to specify pref for vector or scalar (DONE) + 1.7) Single point formating + 1.7.1) Basic (DONE) + 1.7.2) Improve selection of single points for pies (DONE) + 1.8) data sources (DONE) + 1.8.1) vector and scalar data sources from gnumeric (DONE) + 1.8.2) Add min/max elements to vector (DONE) + 1.8.3) const scalar value (DONE) + 1.8.4) const scalar string (DONE) + 1.8.5) const vector value (DONE) + 1.8.6) const vector string (DONE) + 1.8.7) translation of const vector strings (DONE) + 1.9) Pie Plot (DONE) + 1.9.1) Make the segments curve (DONE) + 1.9.2) extracted segments (DONE) + 1.9.3) Rings (DONE) + 1.9.4) extracting single wedges (DONE) + 1.9.5) formating single wedges (DONE) + 1.10) Bar/Col Plot (DONE) + 1.10.1) merge bar/col stack type bools into 1 enum (DONE) + 1.10.2) normal (DONE) + 1.10.3) stacked (DONE) + 1.10.4) percentage (DONE) + 1.10.5) Skip over bars/cols when too narrow + 1.10.6) Work around bleed through with overlap 100 (DONE) + 1.10.7) Check for short vectors (DONE) + 1.10.8) Clip when values are out of range (DONE) + 1.10.9) Support vary style by element for type=normal + 1.11) Line/Area Plot (DONE) + 1.11.1) Normal (DONE) + 1.11.2) Stacked (DONE) + 1.11.3) Percentage (DONE) + 1.11.4) sub type with no-marker by default (DONE) + 1.11.5) center points on X index values for Line (DONE) + 1.11.6) handle missing points in unstacked lines (DONE) + 1.12) X/Y (Scatter) Plot + 1.12.1) Add simple implementation (DONE) + 1.12.2) Take marker sizes into account at bounds (DONE) + 1.12.3) Bounds on 1 axis explicitly clip the other + 1.12.4) Splined interpolation (DONE) + 1.12.5) Bubbles (DONE) + 1.13) Decide on recalc strategy (DONE) + 1.13.1) Getting data from sheet -> graphs (DONE) + 1.13.2) linking unlinking (DONE) + 1.14) Axis management + 1.14.1) Charts/plots have axis layout type (DONE) + 1.14.2) Add any missing axis when chart type is set (DONE) + 1.14.3) Remove any existing axis that do not correspond (DONE) + to chart type. + 1.14.2) Life cycle of plots/axis to maintain connection (DONE) + 1.14.3) UI for adding an axis (DONE) + 1.14.4) Only permit removal of unused axes (DONE) + 1.14.6) Create plot1.5d as base for bar/col & line (DONE) + 1.14.7) do range allocation and filtering in chart (DONE) + 1.14.7) Draw ticks and allocate space for them (DONE) + 1.14.8) Make the major labels optional (DONE) + 1.14.9) Add a font selector to the editor (DONE) + 1.14.10) Value formating (at least percentage and date) (DONE) + 1.14.11) Support index type axis (DONE) + 1.14.12) Use a map function (log, invert, date) (DONE) + 1.14.13) Allow a plot to select a different axis (DONE) + 1.14.14) Filter add plot in guru to matching types (DONE) + 1.14.15) Editor for min/max/major/minor (DONE) + 1.14.16) Respect user supplied min/max/major/minor (DONE) + 1.14.17) Draw major ticks in (DONE) + 1.14.18) Draw major ticks out (DONE) + 1.14.19) Draw minor ticks in (DONE) + 1.14.20) Draw minor ticks out (DONE) + 1.14.21) Why don't we honour selected font ? (DONE) + 1.14.22) Selectable label format for non-discrete data (DONE) + 1.14.23) Editor for label format (DONE) + 1.14.24) Persist label format (DONE) + 1.14.25) Auto selection of label format (DONE) + 1.15) per series plot type specific data (DONE) + 1.16) libart based render akin to guppicanvas. (DONE) + 1.16.1) Solid background fills (DONE) + 1.16.2) Gradient fills (DONE) + 1.16.3) Pattern fills (DONE) + 1.16.4) Image fills (DONE) + 1.16.5) path (DONE) + 1.16.6) text (DONE) + 1.16.7) markers (DONE) + 1.16.8) Rework text drawing to _not_ use libart (DONE) + 1.16.9) Add anchor flags to draw_text (DONE) + 1.16.10) Clip text to keep it in bounds (DONE) + 1.19) Precedence (DONE) + 1.19.1) Sort GogObject::children (DONE) + 1.19.2) Keep corresponding views in sync (DONE) + 1.19.3) Have guru maintain order for add/remove (DONE) + 1.19.4) api for changing order (DONE) + 1.19.5) Extend Guru to support changing precedence (DONE) + 1.20) GogStyle Editor page + 1.20.1) fill type (DONE) + 1.20.1.1) none (DONE) + 1.20.1.2) solid (DONE) + 1.20.1.3) basic gradients (DONE) + 1.20.1.4) advanced gradients via combo (DONE) + 1.20.1.5) pixmaps fills (DONE) + 1.20.1.6) patterns (DONE) + 1.20.2) outline line pattern + 1.20.3) font selector (DONE) + 1.20.4) Support 'auto' settings (DONE) + 1.20.4.1) outline (colour) (DONE) + 1.20.4.2) line (color) (DONE) + 1.20.4.3) fill (colors) (DONE) + 1.20.4.4) marker (DONE) + 1.20.5) image selector + 1.20.5.1) drag destination for background images + 1.20.5.2) scale image preview (DONE) + 1.20.5.3) Use file selector with image preview (DONE) + 1.20.6) De-sensitize (out)line colour when size == -1 + 1.21) themes + 1.21.1) Actually use the themes to initialize styles (DONE) + 1.21.2) load from xml + 1.21.3) selector for graphs + 1.21.4) How to change a graph's theme + 1.21.5) Use Roles rather than Types to enumerate (DONE) + 1.21.5) Allow type aliases (DONE) + 1.22) Legend + 1.22.1) Set up cardinality framework. (DONE) + 1.22.2) Get things to update when chart changes (DONE) + 1.22.2) smarter layout + 1.23) Layout engine + 1.23.1) In ChartView::size_allocate use the positions (DONE) + 1.23.2) For compass placement use the alignment flags (DONE) + 1.23.3) support NW, NE, SW, SE (DONE) + 1.23.4) Move ChartView::size_allocate -> GogView (DONE) + 1.24.5) Have Graph, Chart, Legend and Axis use it (DONE) + 1.23.6) Add some notion of padding (DONE) + 1.23.7) remove request_valid (DONE) + 1.23.8) pass in available space (DONE) + 1.23.9) How to support axis labels (siblings need + common residual) + 1.23.10) Create a common base for outlined objects (DONE) + 1.24) Sizing units (DONE) + 1.24.1) Have the legend use pts to size swatches (DONE) + 1.24.2) Test renderers mapping between pts & pixels (DONE) + 1.25) Printing (DONE) + 1.25.1) gog-renderer-gnomeprint (DONE) + 1.25.2) sheet object wrapper for printing (DONE) + 1.25.3) paths (DONE) + 1.25.4) solid and empty polygons (DONE) + 1.25.5) image filled polygons (DONE) + 1.25.6) gradient filled polygons (DONE) + 1.25.7) measure text (DONE) + 1.25.8) draw text (DONE) + 1.25.9) why doesn't text appear in preview (DONE) + 1.25.10) why is font selection bogus (DONE) + 1.25.11) text anchors (DONE) + 1.25.12) Check the zoom handling for fonts (DONE) + 1.26) Move 'use_one_style' from pie -> plot with 1 series (DONE) + 1.27) Add a flag to gobject to go with its role indicating (DONE) + whether the instance was autocreated or assigned. + 1.28) Rethink GraphItem lifecyle to simplify removal (DONE) + 1.29) Extend GogObjectRole to include more handlers (DONE) + 1.30) Grid Object + 1.30.1) Create (DONE) + 1.30.2) Theme it (DONE) + 1.30.3) Add or remove it depending on chart axis set (DONE) + 1.30.4) Render background (DONE) + 1.30.5) Support grid lines (added to axis) (DONE) + 1.30.6) XLS import of grid lines + 1.30.7) XLS export of grid lines + 1.31) SVG Render + 1.31.1) Paths (DONE) + 1.31.2) Solid Fills (DONE) + 1.31.3) Gradient Fills (DONE) + 1.31.4) Pattern Fills (DONE) + 1.31.5) Image Fills (DONE) + 1.31.6) Markers (DONE) + 1.31.7) Text (DONE) + 1.31.8) Text alignment (DONE) + 1.31.9) Text clipping (DONE) + 1.32) Radar plots + 1.32.1) line (DONE) + 1.32.2) area (DONE) + 1.32.3) axis labels (DONE) + 1.32.4) fix xls import of marker vs no marker + 1.33) Contour plots {Jean} + 1.33.1) Initial implementation (DONE) + 1.33.2) GOMatrix (DONE) + 1.33.3) Axis changes + 1.33.4) XLS import (DONE) + 1.33.4) XLS export + +Misc things to fix +------------------ + + : Open guru, click on forward, then back. Now navigating through plot + list is very slow. That's because at each object addition/removal in + object tree, an object editor is created. + + : Current GogGrid object is not used for grid display. We should rename + it to GogBackplane, GogWall or GogBackground. diff --git a/lib/goffice-0.0.4/COPYING b/lib/goffice-0.0.4/COPYING new file mode 100644 index 0000000000..d60c31a97a --- /dev/null +++ b/lib/goffice-0.0.4/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +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. + + , 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. diff --git a/lib/goffice/ChangeLog b/lib/goffice-0.0.4/ChangeLog similarity index 54% rename from lib/goffice/ChangeLog rename to lib/goffice-0.0.4/ChangeLog index edd9a2f08e..45093a0025 100644 --- a/lib/goffice/ChangeLog +++ b/lib/goffice-0.0.4/ChangeLog @@ -1,3 +1,2657 @@ +2005-09-08 Jody Goldberg + + * Release 0.0.4 + +2005-09-05 Jody Goldberg + + * goffice/utils/format.c (go_format_number) : Show 0/??? for fractions + with no integer component. [#315018] + +2005-09-05 Jody Goldberg + + * goffice/utils/go-format-match.c (format_create_regexp) : match + correct number of digits in denominator. + +2005-09-05 Stepan Kasal + + * goffice/graph/gog-reg-curve.c (skip_invalid_toggled_cb): Move this + function next to gog_reg_curve_populate_editor, where it is used. + (gog_reg_curve_set_property), (gog_reg_curve_class_init): Fix consts. + +2005-09-05 Jean Brefort + + * goffice/graph/gog-reg-curve-prefs.glade: add a check box to allow + invalid data skipping [#312788]. + * goffice/graph/gog-reg-curve.c: (skip_invalid_toggled_cb), + (gog_reg_curve_populate_editor), (gog_reg_curve_get_property), + (gog_reg_curve_set_property), (gog_reg_curve_class_init): ditto. + * goffice/graph/gog-reg-curve.h: add skip_invalid to GogRegCurve and + remove obsolete members. + * plugins/reg_linear/gog-lin-reg.c: (gog_lin_reg_curve_update): use + GogRegCurve::skip_invalid [#312788] and use code in go-regression.c. + +2005-09-04 Emmanuel Pacaud + + * goffice/graph/gog-renderer-svg.c (fill_properties): set fill pattern + opacity. + +2005-09-02 Jody Goldberg + + * goffice/app/io-context.c (gnm_io_context_processing_file) : people + do not want to see escaped uri's in the progress bar. + +2005-09-02 Jody Goldberg + + * goffice/utils/format.c : Add GOFormatElement::forces_text. + (format_entry_ctor) : initialize it to FALSE. + (format_compile) : '@' sets it to TRUE. + +2005-08-31 Jean Brefort + + * goffice/utils/Makefile.am: add go-regression.* and go-rangefuncs.* + * goffice/utils/go-rangefunc.c: imported various functions from gnumeric + and build both double and long double versions if long double is available. + * goffice/utils/go-rangefunc.h: ditto. + * goffice/utils/go-regression.c: ditto. + * goffice/utils/go-regression.h: ditto. + +2005-08-29 Jody Goldberg + + * goffice/utils/format-impl.h : s/StyleFormatEntry/GOFormatElement/ + Move the regexp into here from. + * goffice/utils/go-format.h : here. + s/StyleFormat/GOFormat/ + +2005-08-26 Jody Goldberg + + * goffice/graph/gog-plot.c (gog_plot_new_series) : add some safety. + * goffice/graph/gog-data-set.c (gog_dataset_set_dim) : add some safety + for invalid datasets, being careful to avoid leaking the new val. + +2005-08-24 Stepan Kasal + + The roles hash is now inherited by subclasses, with copy-on-write. + + * goffice/graph/gog-object.h (GogObject) : New flag, + indicates whether this function is resposible to free the hash. + (gog_object_unregister_role): Removed. + * goffice/graph/gog-object.c (gog_object_unregister_role): Removed. + (gog_object_base_finalize): Free the hash, if it's ours. + (gog_object_base_init): Set roles_allocated to FALSE, indicating that + the inherited hash is read-only. + (gog_object_register_roles): When first used for a class, call ... + (gog_object_allocate_roles): ... this new function, which creates + a new hash and fill is with inherited values, if any, using... + (cb_copy_hash_table): ... this new helper function. + + * goffice/graph/gog-series.c (gog_series_base_init): Nuke, moving the + roles registration code ... + (gog_series_class_init): ... here. + * plugins/plot_barcol/gog-1.5d.c (gog_series1_5d_base_class_finalize): Nuke. + * plugins/plot_xy/gog-xy.c (gog_xy_series_base_finalize): Nuke. + +2005-08-24 Stepan Kasal + + * goffice/utils/go-math.c (go_math_init): Fix the bugzilla URL. + +2005-08-18 Emmanuel Pacaud + + * goffice/graph/gog-reg-curve.c (gog_reg_curve_view_render): clip to + residual area. + * plugins/plot_xy/gog-xy.c (gog_xy_view_render): don't clip children, + we want to be able to show equation outside of plot area. + +2005-08-18 Stepan Kasal + + * goffice/utils/go-pattern.c (go_pattern_get_svg_path): Issue an + error if the pattern is not found. + * plugins/plot_xy/gog-xy.c (gog_xy_view_render): Silence the compiler. + +2005-08-18 Emmanuel Pacaud + + Make GogRegEqn and GogLabel a derived class of GogText. + + * goffice/graph/gog-reg-eqn.[ch]: removed. + * goffice/graph/Makefile.am: remove references to gog-reg-eqn.[ch]. + * goffice/graph/gog-label.c: rename GogLabel class to GogText. + Implement GogLabel as a derived class of GogText and a GogDataSet + interface. + (gog_text_get_str): new. + Implement GogRegEqn as a derived class of GogText. + (gog_reg_eqn_populate_editor): remove code related to position. + (gog_reg_eqn_class_init): remove position properties. + rename GogLabelView to GogTextView. + (gog_text_view_render): get content from gog_text_get_str. + * goffice/graph/gog-reg-eqn-prefs.glade: fix layout. Remove position + widgets. + * goffice/graph/gog-reg-curve-prefs.glade: fix layout. + +2005-08-16 Emmanuel Pacaud + + Fix position constistency between discrete and linear axes. Enable + user set bounds for discrete axes [#309468]. + + * goffice/graph/gog-chart.c (gog_chart_map_new): th1 = maximum now, + not maximum + 1. + (calc_polygon_parameters): ditto. take start theta (th0) into + account. + * goffice/graph/gog-axis-line.c (axis_circle_render): ditto. + (radar_process): ditto. + * goffice/graph/gog-grid-line.c (gog_grid_line_view_render): ditto. + * goffice/graph/gog-grid.c (gog_grid_view_render): ditto. + * goffice/utils/go-math.c (go_rint): new. + * goffice/graph/gog-axis.c (map_discrete_calc_ticks): fix label when + minimum != 1. + (gog_axis_populate_editor): enable minimum et maximum editor for + discrete axes. + * plugins/plot_barcol/gog-1.5d.c (gog_plot1_5d_axis_get_bounds): + minimum = 1.0 now. + * plugins/plot_barcol/gog-barcol.c (gog_barcol_view_render): use GogChartMap + facilities. minimum = 1.0 now. + * plugins/plot_barcol/gog-line.c (gog_line_view_render): minimum = 1.0 now. + * plugins/plot_radar/gog-radar.c (gog_rt_plot_update): ditto. + (gog_rt_view_render): take start theta (th0) into account. + +2005-08-17 Jean Brefort + + * plugins/plot_boxes/gog-boxplot.c: (gog_box_plot_update), + (gog_box_plot_view_render), (float_compare), + (gog_box_plot_series_update): use raw data instead of min, max, median + and quartiles. Fixes #308136. + * plugins/plot_boxes/plot-types.xml.in: removed obsolete comment. + +2005-08-16 Emmanuel Pacaud + + * plugins/plot_xy/gog-xy.c (gog_xy_view_render): use GogChartMap + facilities. + * plugins/plot_barcol/gog-line.c (gog_line_view_render): ditto. be + consistent with GogXYPlot. + +2005-08-16 Stepan Kasal + + * goffice/graph/gog-axis.c (gog_axis_get_grid_line): Fix typo + in the comment. + +2005-08-15 Morten Welinder + + * configure.in: Post release bump + +2005-08-15 Morten Welinder + + * Release 0.0.3 + +2005-08-15 Jean Brefort + * goffice/graph/gog-object-xml.c: (gog_object_new_from_xml): return NULL + if dynamic type is not available. + +2005-08-15 Emmanuel Pacaud + + * goffice/graph/gog-guru.c (cb_graph_guru_add_plot): call + gog_plot_guru_helper if plot is added from porerty editor page. + +2005-08-15 Emmanuel Pacaud + + * goffice/graph/gog-axis.c (map_bounds): minimum or maximum may be + NULL. + (map_log_bounds): ditto. + * goffice/graph/gog-series-lines.c (gog_series_lines_render): draw + sharp lines. + * plugins/plot_xy/gog-xy.c (gog_xy_view_render): draw drop lines from + point to axis start. + +2005-08-15 Emmanuel Pacaud + + * goffice/graph/goffice-graph.h: new GOG_POSITION_IS_SPECIAL and + GOG_POSITION_IS_PADDING macros for determining GogPosition type. + Simple == test doesn't work. + * goffice/graph/gog-axis.c (gog_axis_view_padding_request): use these + macros. + (gog_axis_view_size_allocate): ditto. + * goffice/graph/gog-chart.c (gog_chart_view_size_allocate): ditto. + * goffice/graph/gog-graph.c (gog_graph_view_size_allocate): ditto. + * goffice/graph/gog-view.c (gog_view_padding_request_real): ditto. + (gog_view_size_allocate_real): ditto. + (gog_view_size_child_request): ditto. + * goffice/graph/gog-object.c (gog_object_position_cmp): ditto. + (gog_object_populate_editor): fix manual_toggle widget handling. + (cb_anchor_changed): set position to manual if anchor changes. + +2005-08-14 Emmanuel Pacaud + + Fix clipping of polar plots. Renamed all clip_push, clip_pop functions + to push_clip, pop_clip for consistency with push_style, pop_style. + + * goffice/graph/gog-renderer-gnome-print.c + (print_make_rectangle_path): removed. + (gog_renderer_gnome_print_push_clip): clipping region is a path now. + (gog_renderer_gnome_print_draw_path): clip dashed line to graph bbox. + (gog_renderer_gnome_print_draw_polygon): ditto. + (gog_graph_print_to_gnome_print): stire graph bbox. + * goffice/graph/gog-renderer-pixbuf.c (gog_renderer_pixbuf_push_clip): + handle clipping region as path, assuming nested region is included in + parent one. + (gog_renderer_pixbuf_pop_clip): free clip svp. + (gog_renderer_pixbuf_do_clip): new. + (gog_renderer_pixbuf_draw_path): call gog_renderer_pixbuf_do_clip. + clip dashed line to graph bbox. + (gog_renderer_pixbuf_draw_polygon): ditto. + * goffice/graph/gog-renderer-svg.c (gog_renderer_svg_push_clip): + clipping region is a path now. + * goffice/graph/gog-renderer.c (gog_renderer_push_clip): ditto. + (gog_renderer_pop_clip): ditto. Free clip_path. + (gog_renderer_get_rectangle_vpath): new. + * goffice/graph/gog-view.c (gog_view_render): clipping region is a + path now. + * plugins/plot_barcol/gog-line.c (gog_line_view_render): ditto. + * plugins/plot_radar/gog-radar.c (gog_rt_plot_guru_helper): force + auto_dash to FALSE. + (gog_rt_view_render): add correct polar clipping. + (gog_rt_series_init_style): don't disable marker theming. + +2005-08-14 Jean Brefort + + * goffice/graph/gog-series.c: (gog_series_class_init), + (gog_series_base_init): moved roles registering from class_init to + base_init. + +2005-08-13 Jean Brefort + + * goffice/graph/gog-chart.c: (calc_circle_parameters): fix a dangerous + comparison and avoid resulting infinite loops. + +2005-08-13 Emmanuel Pacaud + + * goffice/graph/gog-view.c (gog_view_info_at_point): walk the list in + reverse order. + +2005-08-12 Emmanuel Pacaud + + Add pattern support for SVG renderer [#310320]. + + * goffice/graph/gog-renderer-svg.c (fill_properties): add support for + patterns. + * goffice/utils/Makefile.am: install svg-patterns.xml in + goffice_datadir/patterns. + * goffice/utils/go-pattern.c: fix thin-rev-diag str in go_patterns. + (go_pattern_get_svg_path): new. + * goffice//utils/svg-patterns.xml: new. + +2005-08-12 Jean Brefort + + * goffice/graph/gog-grid-line.c: (gog_grid_line_view_render): + fix a memory leak + * goffice/graph/gog-plot.c: (gog_plot_finalize): and one more. + +2005-08-12 Jean Brefort + + * goffice/graph/gog-object.c: (gog_object_clear_parent), + (gog_object_set_parent): do not set class before checking object validity. + +2005-08-11 Morten Welinder + + * goffice/utils/go-format-match.c (format_create_regexp): Fix + buffer overrun problem exibited while loading file from #313150. + +2005-08-11 Jean Brefort + + * goffice/app/go-plugin-loader-module.c: updated to new + GSF_CLASS_FULL signature. + * goffice/app/io-context.c: ditto. + * goffice/graph/gog-axis-line.c: ditto. + * goffice/graph/gog-axis.c: ditto. + * goffice/graph/gog-error-bar.c: ditto. + * goffice/graph/gog-label.c: ditto. + * goffice/graph/gog-reg-curve.c: ditto. + * goffice/graph/gog-series.c: ditto. + * goffice/graph/gog-style.c: ditto. + * plugins/plot_barcol/gog-1.5d.c: updated to new + GSF_DYNAMIC_CLASS_FULL signature. + * plugins/plot_xy/gog-xy.c: ditto and use base_finalize instead + of class_finalize. + +2005-08-10 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (axis_circle_render): fix label + overlap of 0° and 360° ticks. + + GogPlot::guru_helper implementation for automatic addition of objects + when creating graphs in guru. + + * goffice/graph/gog-axis.c (role_grid_line_can_add): removed. + (role_grid_line_major_can_add): use new gog_axis_get_grid_line + function. + (role_grid_line_minor_post_add): ditto. + (gog_axis_get_grid_line): new. + * goffice/graph/gog-chart.c (role_plot_pre_remove): remove + GogChart::grid if new axis set is not compatible. + (role_grid_can_add): add GOG_AXIS_SET_RADAR in list of axis sets + compatible with GogGrid. + (gog_chart_axis_set_assign): don't handle GogGrid object here. + * goffice/graph/gog-guru.c (graph_typeselect_minor): remove current + chart, not only plot. Call GogPlot::guru_helper for additionnal + objects. + * goffice/graph/gog-plot.c (gog_plot_set_property): add new guru-hints + property, which is a semicolon separated list of hints for + GogPlot::guru_helper. + (gog_plot_get_property): ditto. + (gog_plot_class_init): ditto. + (gog_plot_guru_helper_add_grid_line): new. + (gog_plot_guru_helper): new. + * plugins/plot_barcol/plot_types.xml.in: add "backplane" hint for all + plots. + * plugins/plot_box_plot/plot_types.xml.in: ditto. + * plugins/plot_radar/gog-radar.c (gog_rt_plot_guru_helper): new. + Handle "circular-no-line" guru hint. + * plugins/plot_radar/plot-types.xml.in: add "circular-no-line" hint to + radar plots. add "major-grid" and "backplane" to polar plot. + * plugins/plot_xy/plot-types.xml.in: add "backplane" to all plots. + +2005-08-10 Jean Brefort + + * plugins/plot_barcol/gog-1.5d.c: + (gog_series1_5d_register_type): use base_finalize instead of + class_finalize since we have derived classes. + +2005-08-08 J.H.M. Dassen (Ray) + + * *: Updated FSF's address. + +2005-08-07 Stepan Kasal + + * goffice/graph/Makefile.am (goffice_gladedir): Rename to ... + (gladedir): ..., to prevent conflicts--goffice_gladedir is AC_SUBSTed. + * goffice/gtk/Makefile.am (goffice_gladedir, gladedir): Likewise. + +2005-08-06 Jean Brefort + + * goffice/goffice.c: (libgoffice_init): add call to GOG_SERIES_LINES_TYPE. + * goffice/graph/Makefile.am: add gog-series-lines.[c,h]. + * goffice/graph/gog-object.c: (gog_object_unregister_role): new function. + * goffice/graph/gog-object.h: ditto. + * goffice/graph/gog-series-lines.c: moved from plugins/plot_barcol. + * goffice/graph/gog-series-lines.h: ditto. + * plugins/plot_barcol/Makefile.am: remove gog-series-lines.[c,h]. + * plugins/plot_barcol/gog-1.5d.c: (gog_series1_5d_class_finalize), + (gog_series1_5d_get_type), (gog_series1_5d_register_type), + (go_plugin_init): unregister roles when class is destroyed. + * plugins/plot_barcol/gog-barcol.c: update path to gog-series-lines.h. + * plugins/plot_barcol/gog-dropbar.c: ditto. + * plugins/plot_barcol/gog-line.c: ditto. + * plugins/plot_barcol/gog-minmax.c: ditto. + * plugins/plot_barcol/gog-series-lines.c: moved to goffice/graph/. + * plugins/plot_barcol/gog-series-lines.h: ditto. + * plugins/plot_xy/gog-xy.c: add horizontal and vertical droplines. + * plugins/plot_xy/gog-xy.h: ditto. + +2005-08-04 Jean Brefort + + * goffice/utils/go-line.c (go_line_build_bpath): do not access data + outside of allocated arrays. + +2005-08-04 Stepan Kasal + + * goffice/utils/go-file.c: #include unistd.h, for dup(). + +2005-08-04 Emmanuel Pacaud + + Allow user to delete all plots of a chart and re-add new plots with + different axis set. + + * goffice/graph/gog-axis-line.c (gog_axis_base_get_crossed_axis_type): + handle GOG_AXIS_SET_UNKNOW. + (gog_axis_base_view_info_at_point): ditto. Do nothing. + (gog_axis_base_view_padding_request): ditto. + (gog_axis_base_view_render): ditto. + * goffice/graph/gog-chart.c (role_plot_pre_remove): if there's no plot + left, reset axis_set to GOG_AXIS_SET_UNKNOW. + (gog_chart_axis_set_assign): don't touch axes if axis_set == + GOG_AXIS_SET_UNKNOW. + * goffice/graph/gog-guru.c (cb_graph_guru_delete_item): select parent + row after item is deleted, because if we do this before, parent->add + submenu is sometimes incorrect. + +2005-08-04 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (gog_axis_base_view_info_at_point): + handle GOG_AXIS_SET_XY_pseudo_3d. + * goffice/graph/gog-chart.c (gog_axis_set_from_str): new. + * goffice/graph/gog-guru.c (cb_plot_family_menu_create): show only + family with compatible axis set. + * goffice/graph/gog-label.c (gog_label_init_style): only change text + orientation if auto flag is TRUE. + * goffice/graph/gog-plot-engine.c (cb_pending_plot_types_load): load + axis_set from plot-types.xml. + (gog_plot_family_register): set axis_set. + * goffice/graph/gog-plot-impl.h: now store axis_set in GogPlotClass. No + need for GogPlot::axis_set_pref, GogPlot::axis_set_is_valid and + GogPlot::axis_set_assign. + * goffice/graph/gog-plot.c (gog_plot_axis_set_pref): use + GogPlot::axis_set. + (gog_plot_axis_set_is_valid): ditto. + (gog_plot_axis_set_assign): ditto. + * goffice/graph/gog-style.c (gog_style_assign): assign + GogStyle::text_layout.auto_angle too. + (gog_style_force_auto): init GogStyle::text_layout.auto_angle. + (gog_style_set_text_angle): force auto_angle to FALSE. + * goffice/gtk/goffice-gtk.c (go_gtk_button_new_with_stock): fix + compilation warning. + * plugins/plot_*/gog*.c: remove axis_set_pref, axis_set_is_valid, + axis_set_assign functions. Set GogPlotClass::axis_set value. + * plugins/plot_*/plot-types.xml.in: Add axis_set property. + +2005-08-04 J.H.M. Dassen (Ray) + + * README, configure.in: Bumped libgsf requirements as + goffice/utils/go-file.c needs gsf_input_stdio_new_FILE which is only in + libgsf HEAD. + +2005-08-03 Jody Goldberg + + * goffice/gtk/goffice-gtk.c (go_gtk_button_new_with_stock) : Use + gtk_button_set_image to avoid the kludgery that broken settings. + (go_gtk_dialog_add_button) : merged from gnumeric. + +2005-08-03 Morten Welinder + + * goffice/utils/go-file.c (go_file_open): Handle URIs like "fd://0". + +2005-08-03 Stepan Kasal + + * goffice/graph/gog-renderer-pixbuf.c (gog_renderer_pixbuf_draw_text): + Fix a typo; add an initialization to silence a warning. + +2005-08-03 Stepan Kasal + + In many Makefile.am's, use the "dist_" prefix instead of adding the + variable to EXTRA_DIST. + * goffice/graph/Makefile.am (cairo_sources, cairo_headers): Nuke; + instead, append to the variables directly. + +2005-08-03 Emmanuel Pacaud + + Cairo renderer build fixes. + + * goffice/graph/gog-renderer-cairo.c (gog_renderer_cairo_draw_text): + fix size. + (gog_renderer_cairo_get_text_OBR): ditto. + (gog_renderer_cairo_update): graph size is a property of GogGraph now. + +2005-07-28 Emmanuel Pacaud + + Who said text angle is not a style property ? + + * goffice/graph/gog-axis-line.c (gog_axis_base_set_property): remove + label-angle property. + (gog_axis_base_get_property): ditto. + (gog_axis_base_class_init): ditto. + (gog_axis_base_set_label_angle): removed. + (cb_label_angle_changed): removed. + (gog_axis_base_populate_editor): remove UI for label angle. + * goffice/graph/gog-axis-prefs.glade: ditto. + * goffice/graph/gog-axis.c (role_label_post_add): removed. + (role_label_can_add): new. + (gog_axis_init_style): if axis is GOG_AXIS_PSEUDO_3D, no style. + * goffice/graph/gog-label.c (gog_label_set_angle): removed. + (gog_label_set_property): remove angle property. + (gog_label_get_property): ditto. + (gog_label_class_init): ditto. + (label_pref_state_free): removed. + (cb_angle_changed): removed. + (gog_label_populate_editor): remove UI for angle. + (gog_label_init_style): set text angle to 90 if parent is an Y axis. + * goffice/graph/gog-renderer-gnome-print.c + (gog_renderer_gnome_print_draw_text): text_angle is a style property. + * goffice/graph/gog-renderer-pixbuf.c + (gog_renderer_pixbuf_get_pango_layout): ditto. + * goffice/graph/gog-renderer-svg.c (gog_renderer_svg_draw_text): + ditto. + * goffice/graph/gog-renderer.c (gog_renderer_get_text_OBR): ditto. + (gog_renderer_push_style): no more + angle property in renderer. + (gog_renderer_pop_style): ditto. + (gog_renderer_set_text_angle): removed. + * goffice/graph/gog-style-prefs.glade: add a new UI for text layout + group. + * goffice/graph/gog-style (cb_angle_changed): new. + (text_layout_init): new. + (gog_style_assign): handle angle. + (gog_style_init): ditto. + (gog_style_text_layout_load): new. + (gog_style_text_layout_dom_save): new. + (gog_style_text_layout_sax_save): new. + (gog_style_persist_dom_load): handle angle. + (gog_style_persist_dom_save): ditto. + (gog_style_persist_sax_save): ditto. + (gog_style_is_different_size): ditto. + (gog_style_set_text_angle): new. + * goffice/graph/gog-styled-object.c (styled_object_populate_editor): + don't display style editor if there isn't any interresting fields. + +2005-07-27 Emmanuel Pacaud + + Code cleanup. Remove bbox parameter of GogRenderer:draw functions. + It was a previous attempt to do clipping, which is handled by + gog_renderer_clip_push and gog_renderer_clip_pop for quite a long + time now. + + Modified Files: + + ChangeLog goffice/graph/gog-axis-line.c + goffice/graph/gog-error-bar.c goffice/graph/gog-grid-line.c + goffice/graph/gog-grid.c goffice/graph/gog-label.c + goffice/graph/gog-legend.c goffice/graph/gog-outlined-object.c + goffice/graph/gog-reg-curve.c goffice/graph/gog-reg-eqn.c + goffice/graph/gog-renderer-cairo.c + goffice/graph/gog-renderer-gnome-print.c + goffice/graph/gog-renderer-impl.h + goffice/graph/gog-renderer-pixbuf.c + goffice/graph/gog-renderer-svg.c goffice/graph/gog-renderer.c + goffice/graph/gog-renderer.h plugins/plot_barcol/gog-barcol.c + plugins/plot_barcol/gog-dropbar.c + plugins/plot_barcol/gog-line.c + plugins/plot_barcol/gog-minmax.c + plugins/plot_barcol/gog-series-lines.c + plugins/plot_boxes/gog-boxplot.c plugins/plot_pie/gog-pie.c + plugins/plot_radar/gog-radar.c + plugins/plot_surface/gog-surface.c plugins/plot_xy/gog-xy.c + +2005-07-27 Emmanuel Pacaud + + Text angle is not a font property. + Set default angle to 90° for y axes (#301582). + + * goffice/graph/gog-axis-line.c (gog_axis_base_class_init): install + label_angle property. + (gog_axis_base_set_property): handle label_angle property. + (gog_axis_base_get_property): ditto. + (gog_axis_base_set_label_angle): new. + (cb_label_angle_changed): new. + (gog_axis_base_populate_editor): init UI for label_angle. + (gog_axis_base_view_padding_request): set text angle. + (gog_axis_base_view_render): ditto. + * goffice/graph/gog-axis-prefs.glade: add UI for label angle. + * goffice/graph/gog-axis.c (role_label_post_add): new. Sets label + angle to 90° for y axis. + (gog_axis_class_init): add role_label_post_add. + * goffice/graph/gog-label-prefs.glade: new. + * goffice/graph/gog-label.c (gog_label_set_angle): new. + (gog_label_class_init): handle angle property. + (gog_label_set_property): ditto. + (gog_label_get_property): ditto. + (label_pref_state_free): new. + (cb_angle_changed): new. + (gog_label_populate_editor): add layout page for angle setting. + (gog_label_init): new. + (gog_label_view_size_request): set text angle. + (gog_label_view_render): ditto. + * goffice/graph/gog-renderer-gnome-print.c + (gog_renderer_gnome_print_draw_text): text_angle is a property of + renderer. + * goffice/graph/gog-renderer-pixbuf.c + (gog_renderer_pixbuf_get_pango_layout): ditto. + * goffice/graph/gog-renderer-svg.c (gog_renderer_svg_draw_text): + ditto. + * goffice/graph/gog-renderer.c (gog_renderer_push_style): reset text + angle. + (gog_renderer_pop_style): ditto. + (gog_renderer_set_text_angle): new. + (gog_renderer_get_text_OBR): text_angle is a property of renderer. + * goffice/graph/gog-style-prefs.glade: remove UI for angle. + * goffice/graph/gog-style.c (cb_rotation_angle_changed): removed. + (font_init): remove angle UI. + (gog_style_font_load): remove rotation_angle setting. + (gog_style_font_dom_save): ditto. + (gog_style_font_sax_save): ditto. + +2005-07-25 Emmanuel Pacaud + + * goffice/graph/gog-object-prefs.glade: remove chart preference + dialog and move it to gog-chart-prefs.glade. + * goffice/graph/gog-chart-prefs.glade: new. + * goffice/graph/gog-chart.c (cb_plot_area_changed): actually use + signal handlers. + (gog_chart_populate_editor): ditto. + +2005-07-25 Emmanuel Pacaud + + Implementation of manual position of graph objects. + + * goffice/graph/goffice-graph.h: new modifier flags in + GogObjectPosition for manual position. + * goffice/graph/gog-axis.c (gog_axis_class_init): Label can be + positionned manually. + (gog_axis_view_padding_request): GOG_POSITION_MANUAL supersedes + GOG_POSITION_SPECIAL. + (gog_axis_view_size_allocate): handle GOG_POSITION_MANUAL case. + * goffice/graph/gog-chart-impl.h: plot_area stores plot area position + in fraction of chart size. new is_plot_area_manual flag. + * goffice/graph/gog-chart.c (gog_chart_set_property): new. + (gog_chart_get_property): handles plot-area and is-plot-area-manual + properties. + (chart_pref_state_free): new. + (cb_plot_area_changed): new. + (cb_manual_toggle_changed): new. + (gog_chart_populate_editor): new. + (gog_chart_class_init): reorder childs. Still need some work for a + nice display in object tree. Install plot-area and + is-plot_area-manual properties. + (gog_chart_get_plot_area): new. + (gog_chart_set_plot_area): new. + (gog_chart_view_get_plot_area): plot area extents are stored in + GogChartView::plot_area now. + (gog_chart_view_size_allocate): handle manual case. + (gog_chart_view_class_init): don't clip to chart area. + * graph/goffice/gog-control-foocanvas + (gog_control_foocanvas_set_property): remove logical_width_pts and + logical_height_pts properties. These are properties of GogGraph now. + (gog_control_foocanvas_get_property): ditto. + (gog_control_foocanvas_class_init): ditto. + * goffice/graph/gog-graph.c (gog_graph_set_property): handle new width-pts + and height-pts properties. + (gog_graph_get_property): ditto. + (gog_graph_class_init): ditto. Chart and Title object can be + positionned manually. + (gog_graph_get_size): new. + (gog_graph_set_size): new. + * goffice/graph/gog-guru.c (cb_typesel_sample_plot_resize): don't + change graph logical size. + (cb_sample_pressed): don't change canvas scale. + (cb_canvas_select_item): center graph on canvas. + (cb_sample_plot_resize): calculate graph size to make it fit in canvas + area. + (graph_guru_init_format_page): don't change canvas scale. + * goffice/graph/gog-object.c (gog_object_set_property): handle new + position, position-is-manual and anchor properties. + (gog_object_get_property): ditto. + (gog_object_class_init): ditto. + (cb_position_changed): new. + (cb_manual_position_changed): new. + (cb_anchor_changed): new. + (gog_object_populate_editor): new UI for manual position setting. + (gog_role_cmp): test priority first, then compare allowable positions. + (gog_object_set_position_flags): emit a warning in case of wrong + flags. + (gog_object_get_manual_position): new. + (gog_object_set_manual_position): new. + (gog_object_get_manual_allocation): new. + * goffice/graph/gog-plot.c (gog_plot_populate_editor): allways call parent + populate_editor. + * goffice/graph/gog-renderer-pixbuf.c + (gog_renderer_pixbuf_get_text_OBR): use pango_layout_get_extents + instead of pango_layout_get_pixel_extents for more accuracy. + (gog_renderer_pixbuf_update): logical width and height of graph is a + property of GogGraph now. + * goffice/graph/gog-renderer.c (gog_renderer_set_property): remove + logical_width_pts and logical_height_pts properties. + (gog_renderer_get_property): ditto. + (gog_renderer_class_init): ditto. + * goffice/graph/gog-view.c (gog_view_size_allocate_real): handle + manual case. + +2005-07-22 Chris Lahey + + * goffice/drawing/god-drawing-renderer-gdk.c: Remove * .7 hack + since it's been fixed in parsing code. + +2005-07-21 Chris Lahey + + * goffice/drawing/god-drawing-renderer-gdk.c, + goffice/drawing/god-paragraph-attributes.c, + goffice/drawing/god-paragraph-attributes.h: Add support for + setting whether the bullet is drawn for a particular paragraph. + +2005-07-19 Emmanuel Pacaud + + * goffice/grah/gog-axis-line.c (gog_axis_base_get_crossed_axis_type): + don't complain when axis_set = GOG_AXIS_SET_X. + (axis_line_get_bbox): scale tick len with gog_renderer_pt2r instead of + gog_renderer_pt2r_x. + (axis_line_render): ditto. + (axis_circle_get_bbox): ditto. + (axis_circle_render): ditto. + (x_process): use correct enum for label/tick side, which fixes a + display bug. + +2005-07-15 Dom Lachowicz + + * goffice/utils/go-file.c (go_get_mime_type): Free 'wuri' if mime lookup failed; + have function return "application/octet-stream" instead of "octet-string"; + g_strdup() the "application/octet-stream" so that we don't try to free .text data + +2005-07-15 Emmanuel Pacaud + + * goffice/graph/gog-legend.c (cb_render_elements): fix swatch, + line/marker position. + +2005-07-11 Morten Welinder + + * configure.in (set_more_warnings): Check for fdopen. + + * goffice/utils/go-file.c (is_fd_uri): New function. + (go_file_create): Support URIs like "fd://1". + +2005-07-01 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_vector_str_load_values): set + vec->len (fixes a crash when pasting charts in abiword). + * goffice/graph/goffice-graph.h: change GOG_MS_DIM_* enum. + * goffice/graph/gog-data-set.c: (gog_dataset_dup_to_simple): fix export of + scalar strings. + * goffice/graph/gog-plot.c: (gog_plot_finalize), + (gog_plot_set_property), (gog_plot_get_property), + (gog_plot_class_init), (gog_plot_init): add "plot_group" property. + * goffice/graph/gog-plot.h: + * pixmaps/chart_dropbar_1_1.svg: + * pixmaps/chart_minmax_2_2.svg: + * plugins/plot_barcol/Makefile.am: + * plugins/plot_barcol/gog-1.5d.c: (go_plugin_init): + * plugins/plot_barcol/gog-dropbar.c: (gog_dropbar_plot_class_init): + update GOG_MS_DIM_*. + * plugins/plot_barcol/gog-minmax.c: (gog_minmax_axis_get_bounds): + set center_on_ticks to FALSE, + (gog_minmax_plot_class_init): update GOG_MS_DIM_*. + +2005-06-26 Jean Brefort + + * goffice/graph/gog-theme.c: (gog_themes_init): add GogSeriesLines. + * plugins/plot_barcol/Makefile.am: add gog-series-lines.[c,h]. + * plugins/plot_barcol/gog-1.5d.c: (gog_plot1_5d_init), + (series_lines_can_add), (series_lines_post_add), + (series_lines_pre_remove), (drop_lines_can_add), + (drop_lines_post_add), (drop_lines_pre_remove), (lines_can_add), + (lines_post_add), (lines_pre_remove), (gog_series1_5d_class_init), + (gog_series1_5d_init), (go_plugin_init): add support for various lines. + * plugins/plot_barcol/gog-1.5d.h: ditto. + * plugins/plot_barcol/gog-barcol.c: (gog_barcol_plot_init), + (gog_barcol_view_render): added series lines. + * plugins/plot_barcol/gog-dropbar.c: (gog_dropbar_plot_init), + (barcol_draw_rect), (gog_dropbar_view_render): added lines. + * plugins/plot_barcol/gog-line.c: (gog_line_plot_init), + (gog_area_plot_init), (gog_line_view_render): added drop lines. + * plugins/plot_barcol/gog-minmax.c: (gog_minmax_plot_init), + (gog_minmax_view_render): added lines. + * plugins/plot_barcol/gog-series-lines.c: + (gog_series_lines_init_style), (gog_series_lines_update), + (gog_series_lines_changed), (gog_series_lines_class_init), + (gog_series_lines_render): support for lines in various plots. + * plugins/plot_barcol/gog-series-lines.h: ditto. + +2005-06-24 Jean Brefort + + * goffice/graph/gog-legend.c: (cb_size_elements), + (gog_legend_view_size_request): use legned style to calculate elements + height. + +2005-06-21 Emmanuel Pacaud + + * goffice/graph/gog-renderer-cairo.c (grc_invert_pixbuf_RB): new. + (grc_draw_polygon): implement repeated image texture. + (grc_get_marker_surface): use grc_invert_pixbuf_RB. + (gog_renderer_cairo_update): ditto. + +2005-06-21 Jon K Hellan + + * goffice/graph/gog-control-foocanvas.c + (gog_control_foocanvas_update): Fix typo. + +2005-06-21 Emmanuel Pacaud + + New cairo renderer. Option at compile time (--with-cairo). + + * configure.in: add optional cairo dependency. + * goffice/graph/gog-control-foocanvas.c + (gog_control_foocanvas_set_property): use cairo renderer if enabled. + (gog_control_foocanvas_draw): ditto. + (gog_control_foocanvas_update): ditto. + (gog_control_foocanvas_class_init): ditto. + * goffice/graph/gog-renderer-cairo.[ch]: new files. + * goffice/utils/go-pattern.c (go_pattern_get_pattern): new. + +2005-06-20 Jean Brefort + + * plugins/plot_barcol/gog-1.5d.c: (gog_plot1_5d_update), + (gog_series1_5d_finalize), (gog_series1_5d_class_init): fixed error bar + leaks. + +2005-06-20 Morten Welinder + + * goffice/utils/formats.c (find_currency): Special hack to accept + a quoted euro character. + (pattern_account): Remove stray "}". + +2005-06-20 Jean Brefort + + * goffice/graph/gog-guru.c: (cb_canvas_select_item): fixed one more leak. + +2005-06-20 Jean Brefort + + * goffice/graph/gog-guru.c: (cb_canvas_select_item): add missing + g_object_unref call. + * goffice/graph/gog-series.c: (regression_curve_can_add): fixed the test. + * goffice/graph/gog-style.c: (gog_style_set_image_preview): return if + pix == NULL (#308307). + +2005-06-16 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (axis_line_render): remove kludge for + ticks not centered on labels. + * goffice/graph/gog-axis.c (map_discrete_calc_ticks): separate + handling of ticks from handling of labels. + (gog_axis_update): allways set GogAxis::center_on_ticks from + GogBounds. + * plugins/plot_radar/gog-radar.c (gog_radar_plot_axis_get_bounds): + set center_on_ticks=TRUE explicitely. + +2005-06-13 Emmanuel Pacaud + + Support for rotated text and text color. + + * goffice/graph/gog-axis-line.c (get_point_to_segment_distance): + moved to go-geometry.c. + (update_bbox): ditto. + (overlap): removed. + (compute_angles): removed. + (axis_line_point): use go_geometry_point_to_segment. + (axis_line_get_bbox): handle rotated text case. Use + go_geometry_cartesian_to_polar. side is an enum now. + (axis_line_render): ditto. + (axis_circle_get_bbox): ditto. + (axis_circle_render): ditto. + (xy_process): side is an enum. + (radar_process): ditto. + * goffice/graph/gog-label.c (gog_label_view_size_request): use + gog_renderer_get_text_AABR. + (gog_label_view_render): ditto. + * goffice/graph/gog-legend.c (cb_size_elements): ditto. + * goffice/graph/gog-reg-eqn.c + (gog_reg_eqn_view_render): ditto. + * goffice/graph/gog-renderer-gnome-print.c + (gog_renderer_gnome_print_draw_text): handle rotated text and color. + (gog_renderer_gnome_print_get_text_OBR): new. + * goffice/graph/gog-renderer-pixbuf.c (get_rotated_layout_bounds): + new. + (gog_renderer_pixbuf_get_pango_layout): handle rotation angle. + (gog_renderer_pixbuf_draw_text): ditto. Handle special n * pi / 2 + angles separately for performance. + (gog_renderer_pixbuf_get_text_OBR): new. + * goffice/graph/gog-renderer-svg.c (gog_renderer_svg_get_text_OBR): + ditto. + (gog_renderer_svg_draw_text): handle rotation angle and color. + * goffice/graph/gog-renderer.c (gog_renderer_get_text_OBR): new. + (gog_renderer_get_text_AABR): new. Replaces measure_text. + * goffice/graph/gog-style-prefs.glade: add widgets for text rotation + angle and text color. + * goffice/graph/gog-style.c (cb_rotation_angle_changed): new. + (cb_font_color_changed): new. + (font_init): load widgets for text rotation and color. + (gog_style_font_load): load rotation angle. + (gog_style_font_save): save rotation angle. + (gog_style_font_sax_save): ditto. + (gog_style_is_different_size): different angles means different sizes. + * goffice/utils/go-geometry.[ch]: new files. Collection of geometry + related functions. + +2005-06-12 Jody Goldberg + + * configure.in : post release bump + +2005-06-12 Jody Goldberg + + * Release 0.0.2 + +2005-06-11 Ivan, Wong Yat Cheung + + * goffice/gtk/Makefile.am: Fix typos. + +2005-06-09 Morten Welinder + + * goffice/utils/go-libxml-extras.c (xml_node_get_enum, + xml_node_set_enum): New functions. + (xml_node_get_int, xml_node_get_double): Improve error handling. + +2005-06-08 Ivan, Wong Yat Cheung + + * goffice/gtk/htmlhelp-stub.c: + * goffice/gtk/htmlhelp-stub.h: + * goffice/gtk/libhtmlhelp-stub.def: Remove + * goffice/gtk/Makefile.am: Remove libgoffice-html-help-stub.la + it no longer belongs here. + + * goffice/Makefile.am: + * goffice/gtk/goffice-gtk.c: + * goffice/utils/Makefile.am: Now stubs for Win32 are placed in + libgoffice-win32-stub.la + + * goffice/utils/goffice-win32-stub.def: + * goffice/utils/win32-stub.c: + * goffice/utils/win32-stub.h: New + + * goffice/utils/go-file.[ch] (go_get_mime_type): Use + FindMimeFromData() on Win32. Fall back to "text/plain" if + no mime type is matched. [#304074] + +2005-06-06 Jody Goldberg + + * goffice/app/go-plugin.c : Don't inherit from GTypeModule + contain one and use it as long as we are active. + +2005-06-06 Morten Welinder + + * goffice/utils/go-math.c (log1p): Define if needed. + +2005-06-05 Jean Brefort + + * goffice/graph/gog-data-set.c: (gog_dataset_dup_to_simple): add a helper + function to convert data to simple data. + * goffice/graph/gog-data-set.h: ditto. + * goffice/graph/gog-object.c: (dataset_dup), (gog_object_dup): add an + optional data converter to gog_object_dup and define a default one. + * goffice/graph/gog-object.h: ditto. + * goffice/graph/gog-graph.c: use new gog_object_dup syntax. + +2005-06-05 Jody Goldberg + + * goffice/app/go-plugin.c (go_plugin_get_type_module) : new in + preparation of change to GOPlugin. + +2005-06-05 Jody Goldberg + + * goffice/app/go-plugin.c (go_plugin_activate) : add a + g_type_module_use + (go_plugin_deactivate) : and an unuse. Things are still broken on + exit. + +2005-06-04 Emmanuel Pacaud + + * goffice/graph/gog-object (gog_object_populate_editor): remove + g_message call. + +2005-06-04 Jody Goldberg + + * plugins/plot_xy/plot-types.xml.in : XY priority 100 + * plugins/plot_barcol/plot-types.xml.in : COL priority 90 + BAR priority 80 + + * goffice/graph/gog-guru.c (cb_plot_families_init) : select if the + current item is a higher priority than anything we've seen. + (graph_guru_type_selector_new) : don't connect to the signal handler + until after we select the default type. Sort the list of families. + We need to prune this list. + + * goffice/graph/gog-plot-engine.c (cb_pending_plot_types_load) : load + a priority for each family to allow for a reasonable default. + +2005-06-04 Jody Goldberg + + * goffice/gtk/go-format-sel.c (nfs_init) : suppress warning. + (generate_preview) : put the args in the right order and remove the + debug spew. + +2005-06-04 Jean Brefort + + * plugins/plot_surface/gog-surface.c: (gog_contour_view_render): + fixed appearance, libart warnings and a major bug. + +2005-06-03 Stepan Kasal + + * configure.in: Require libgsf 1.12.1; GSF_DYNAMIC_CLASS has changed. + +2005-06-02 Emmanuel Pacaud + + * goffice/graph/Makefile.am: add gog-object-prefs.glade + * goffice/graph/gog-graph.c (gog_graph_class_init): position of chart + and title can be manual. + * goffice/graph/gog-object-prefs.glade: new. + * goffice/graph/gog-object.c (gog_editor_get_notebook): first page + is the default page. + (gog_object_set_property): handle compass and alignment properties. + (gog_object_get_property): ditto. + (object_pref_state_free): new. + (cb_compass_changed): new. + (cb_alignment_changed): new. + (gog_object_populate_editor): new. It handles only compass and alignment + flags. + (gog_object_class_init): install compass and alignment properties. + (gog_object_get_pos): renamed to gog_object_get_position_flags. Add a + mask parameter in order to get only a subset of position flags. + (gog_object_set_pos): renamed to gog_object_set_position_flags. Add a + mask parameter. + * goffice/graph/gog-style-prefs.glade: move line widgets to the left. + It improves consistency of widget position when navigating through + object tree. + * goffice/graph/gog-styled-object.c (styled_object_populate_editor): + call parent method. + +2005-06-01 Jody Goldberg + + * goffice/utils/go-format.c (go_format_value_gstring) : pull over from + gnumeric with a simplified structure to handle only ints and + doubles. + (go_style_format_condition) : ditto. + +2005-05-30 Jean Brefort + + * plugins/plot_surface/xl-surface.c: (xl_contour_plot_build_matrix): + set num-elements of the first series, not the last one. + +2005-05-29 Jean Brefort + + * goffice/graph/gog-object.c: (gog_object_dup), + (gog_object_dup_with_values): rewrote to share identical code. + +2005-05-28 Jean Brefort + + * goffice/graph/gog-object.h: added missing declaration + (gog_object_dup_with_values). + +2005-05-28 Jean Brefort + + * goffice/graph/gog-object.c: (gog_object_dup_with_values): + new function aimed at export charts. + +2005-05-27 Ivan, Wong Yat Cheung + + * goffice/utils/go-file.c (go_shell_arg_to_uri): + revert changes made by me in yesterday. + (go_shell_argv_to_glib_encoding): New. For Win32 we need to + get argv[] in utf-16 and convert them to utf-8 under NT + and use g_locale_to_utf() under Win9x. + +2005-05-27 Jean Brefort + + * plugins/plot_barcol/gog-dropbar.c: (gog_dropbar_view_render): fixed + bars width and position. + * plugins/plot_barcol/plot-types.xml.in: ditto. + +2005-05-27 Jean Brefort + + * goffice/gtk/go-format-sel.c: (nfs_init): make the shortcut for currency + symbol selection work (#305635). + +2005-05-27 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_vector_val_as_str), + (go_data_vector_val_from_str), (go_data_vector_str_finalize), + (go_data_vector_str_dup), (go_data_vector_str_as_str), + (go_data_vector_str_from_str), (go_data_vector_str_load_len), + (go_data_vector_str_load_values), (go_data_vector_str_get_value), + (go_data_matrix_val_as_str), (go_data_matrix_val_from_str): fixed various + concerns related to the abigochart plugin. + +2005-05-26 Emmanuel Pacaud + + [#305010] + * goffice/graph/gog-error-bar-prefs.glade: remove gnome requirement. + * plugins/plot_pie/gog-pie-series-prefs.glade: ditto. + * plugins/plot_pie/gog-ring-prefs.glade: ditto. + +2005-05-26 Ivan, Wong Yat Cheung + + * goffice/utils/go-file.c (go_shell_arg_to_uri): Convert + file name from system codepage to utf8 (glib/win32 now uses + utf8). [#304874] + +2005-05-25 Stepan Kasal + + * configure.in (PKG_PROG_PKG_CONFIG): Rephrase the explanation. + +2005-05-24 Morten Welinder + + * goffice/utils/format.c (format_remove_decimal): In the fallback + code, remove a decimals from all subformats. + (find_currency): Accept quotes around the currency. Fixes + recognition of accounting formats. [#305314] [#305313] + +2005-05-23 Morten Welinder + + * goffice/gtk/goffice-gtk.c (go_gtk_file_sel_dialog, + go_gtk_select_image): Insist on getting a toplevel. (It + determines, for one thing, what screen to use.) + * goffice/graph/gog-style.c (cb_image_file_select): Provide a + toplevel. Fixes #305009. + +2005-05-22 Jean Brefort + + * plugins/plot_barcol/gog-1.5d.c: (gog_series1_5d_update): Fix a trivial + bug. + +2005-05-20 Morten Welinder + + * goffice/gtk/goffice-gtk.c (go_access): Fix return type to int as + we return -1 sometimes. + + * configure.in (set_more_warnings): Don't use -Wcrazy. + +2005-05-20 Stepan Kasal + + * plugins/plot_barcol/gog-dropbar.c (gog_dropbar_view_render): + Remove unused variables. + +2005-05-20 Jean Brefort + + * goffice/graph/goffice-graph.h: change GOG_MS_DIM_TYPES value and + add new ones. + * goffice/graph/gog-axis.c: (gog_axis_set_property): remove labels + and ticks for GOG_AXIS_PSEUDO_3D (enhance export to excel). + * pixmaps/Makefile.am: add icons for minmax and dropbar plots. + * plugins/plot_barcol/Makefile.am: add minmx and dropbar support. + * plugins/plot_barcol/gog-1.5d.c: (gog_plot1_5d_update), + (gog_series1_5d_update), (gog_series1_5d_populate_editor), + (go_plugin_init): ditto. + * plugins/plot_barcol/gog-barcol.c: ditto. + (gog_barcol_plot_populate_editor): ditto. + * plugins/plot_barcol/gog-dropbar.c: (gog_dropbar_plot_type_name), + (gog_dropbar_plot_class_init), (barcol_draw_rect), + (gog_dropbar_view_render), (gog_dropbar_view_info_at_point), + (gog_dropbar_view_class_init): ditto. + * plugins/plot_barcol/gog-dropbar.h: ditto. + * plugins/plot_barcol/gog-minmax-prefs.glade: ditto. + * plugins/plot_barcol/gog-minmax.c: (gog_minmax_series_init_style), + (gog_minmax_series_class_init), (gog_minmax_plot_set_property), + (gog_minmax_plot_get_property), (gog_minmax_plot_type_name), + (gog_minmax_axis_get_bounds), (cb_gap_changed), + (gog_minmax_plot_populate_editor), (gog_minmax_swap_x_and_y), + (gog_minmax_plot_class_init), (gog_minmax_plot_init), + (gog_minmax_view_render), (gog_minmax_view_info_at_point), + (gog_minmax_view_class_init): ditto. + * plugins/plot_barcol/gog-minmax.h: ditto. + * plugins/plot_barcol/plot-types.xml.in: ditto. + * plugins/plot_barcol/plugin.xml.in: ditto. + +2005-05-19 Jody Goldberg + + * goffice/data/go-data-simple.c (go_data_vector_val_as_str) : use + format_get_row_sep. + +2005-05-19 Emmanuel Pacaud + + * goffice/graph/gog-axis.c (map_discrete_calc_ticks): remove kludge by + using center_on_ticks. + * goffice/graph/gog-plot.c (gog_plot_get_axis_bounds): defaults + center_on_ticks to TRUE. + * plugins/plot_barcol/gog-barcol.c (gog_barcol_axis_get_bounds): + center_on_ticks = FALSE. + +2005-05-18 Emmanuel Pacaud + + * goffice/graph/gog-axis.c (map_discrete_init): scale doesn't depend + on center_on_ticks. + (map_discrete): ditto. + (map_discrete_to_view): ditto. + (map_discrete_from_view): ditto. + (map_discrete_calc_ticks): tick_nbr doesn't depend on center_on_ticks. + * goffice/graph/gog-axis-line.c (gog_axis_base_populate_editor): don't + show layout page for GOG_AXIS_PSEUDO_3D. Call inherited + populate_editor if gui==NULL. + * plugins/plot_surface/gog-surface.c + (gog_contour_plot_axis_get_bounds): maxima = num_elements - 1.0 + * plugins/plot_surface/xl-surface.c + (xl_contour_plot_axis_get_bounds): ditto. + +2005-05-17 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_vector_val_get_value), + (go_data_vector_val_get_str): check args to avoid a segfault. + +2005-05-16 Stepan Kasal + + * goffice/graph/gog-reg-curve.c (gog_reg_curve_get_value_at): Make + this function static, without any declaration at the top. + + * goffice/utils/go-file.h (go_get_mime_type): Change the return type + to `const gchar *'. + * goffice/utils/go-file.c: ditto. + + * goffice/utils/format.c (beyond_precision, beyond_precisionl): + Move the declarations to the top, into an #ifdef DEFINE_COMMON. + + * plugins/plot_surface/xl-surface.c (xl_contour_plot_axis_get_bounds): + Make this more readable by moving part of the body ... + (get_y_vector): ... to this new function. + + * tests/pie-demo.c (main): Adapt to the changed type of arg 1 of + go_data_vector_str_new. + +2005-05-14 J.H.M. Dassen (Ray) + + * configure.in: Supply GOFFICE_PLUGIN_LIBADD on all platforms, not just + win32, in order to get complete dependency information in the plugins. + Use -no-undefined in GOFFICE_PLUGIN_LDFLAGS on all platforms to ensure + complete dependency information at link time. + Update the BUG-REPORT argument to AC_INIT now that bugzilla.gnome.org + has a "libgoffice" product. + Enable a number of additional warnings (when available) for which the + current code base is already virtually clean. + +2005-05-12 Stepan Kasal + + * goffice/data/go-data-simple.h (go_data_vector_str_new): Change the + type of the first parameter from (char**) back to (char const*const*) + * goffice/data/go-data-simple.c: Do the same and adapt the code. + +2005-05-12 Morten Welinder + + * goffice/utils/go-marker.c (go_marker_selector): Plug leak. + Avoid const for non-const parameter. + + * goffice/gtk/go-action-combo-pixmaps.c + (go_action_combo_pixmaps_create_tool_item): Take toolbar settings + into account. + + * goffice/gtk/go-action-combo-color.c (make_icon): Multihead fix. + + * goffice/gtk/goffice-gtk.c (update_preview_cb): Multihead fix. + + * goffice/gtk/go-action-combo-stack.c + (go_action_combo_stack_create_tool_item): Take theme into account. + +2005-05-12 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_matrix_val_as_str), + (go_data_matrix_val_from_str): always use a semicolon as row + separator. + +2005-05-11 Jean Brefort + + * pixmaps/chart_dropbar_1_1.png: update icon. + * pixmaps/chart_dropbar_1_1.svg: ditto. + * pixmaps/chart_dropbar_1_2.png: ditto. + * pixmaps/chart_dropbar_1_2.svg: ditto. + * pixmaps/chart_minmax_1_1.png: ditto. + * pixmaps/chart_minmax_1_1.svg: ditto. + * pixmaps/chart_minmax_1_2.png: ditto. + * pixmaps/chart_minmax_1_2.svg: ditto. + * pixmaps/chart_minmax_2_1.png: new icon. + * pixmaps/chart_minmax_2_1.svg: ditto. + * pixmaps/chart_minmax_2_2.png: ditto. + * pixmaps/chart_minmax_2_2.svg: ditto. + +2005-05-11 Jean Brefort + + * pixmaps/chart_dropbar_1_1.png: New icon. + * pixmaps/chart_dropbar_1_1.svg: ditto. + * pixmaps/chart_dropbar_1_2.png: ditto. + * pixmaps/chart_dropbar_1_2.svg: ditto. + * pixmaps/chart_minmax_1_1.png: ditto. + * pixmaps/chart_minmax_1_1.svg: ditto. + * pixmaps/chart_minmax_1_2.png: ditto. + * pixmaps/chart_minmax_1_2.svg: ditto. + * pixmaps/dropbar.xpm: ditto. + * pixmaps/minmax.xpm: ditto. + +2005-05-11 Jean Brefort + + * plugins/plot_surface/gog-surface.c: + (gog_contour_plot_class_init): limit series number to 1. + +2005-05-10 Emmanuel Pacaud + + * goffice/graph/gog-chart.c (gog_chart_map_free): unref map::chart. + +2005-05-10 Jean Brefort + + * configure.in: add linear regressions in scatter plots. + * goffice/goffice.c: (libgoffice_init): ditto. + * goffice/graph/Makefile.am: ditto. + * goffice/graph/goffice-graph.h: ditto. + * goffice/graph/gog-guru.c: (cb_graph_guru_add_reg_curve), + (cb_reg_curve_type_menu_create), (reg_curve_type_menu_create), + (cb_attr_tree_selection_change): ditto. + * goffice/graph/gog-object-xml.c: (gog_object_new_from_xml): ditto. + * goffice/graph/gog-plot-engine.c: ditto. + (gog_reg_curve_engine_service_get_description), + (gog_reg_curve_engine_service_class_init), + (gog_reg_curve_new_by_name), (cb_pending_reg_curve_types_load), + (pending_reg_curves_types_load), (gog_reg_curve_service_read_xml), + (gog_reg_curve_service_get_description), + (gog_reg_curve_service_init), (gog_reg_curve_service_class_init), + (gog_plugin_services_init), (gog_reg_curve_type_free), + (create_reg_curve_types), (gog_reg_curve_types): ditto. + * goffice/graph/gog-plot-engine.h: ditto. + * goffice/graph/gog-reg-curve-prefs.glade: ditto. + * goffice/graph/gog-reg-curve.c: (gog_reg_curve_init_style), + (gog_reg_curve_populate_editor), (gog_reg_curve_finalize), + (gog_reg_curve_type_name), (gog_reg_curve_class_init), + (gog_reg_curve_init), (gog_reg_curve_dataset_dims), + (gog_reg_curve_dataset_get_elem), + (gog_reg_curve_dataset_dim_changed), (gog_reg_curve_dataset_init), + (gog_reg_curve_new_by_type), (gog_reg_curve_get_value_at), + (gog_reg_curve_get_equation), (gog_reg_curve_get_R2), + (gog_reg_curve_get_bounds), (gog_reg_curve_view_render), + (gog_reg_curve_view_size_allocate), + (gog_reg_curve_view_class_init): ditto. + * goffice/graph/gog-reg-curve.h: ditto. + * goffice/graph/gog-reg-eqn-prefs.glade: ditto. + * goffice/graph/gog-reg-eqn.c: (cb_text_pos_changed), + (cb_text_visibility_changed), (gog_reg_eqn_set_property), + (gog_reg_eqn_get_property), (gog_reg_eqn_init_style), + (gog_reg_eqn_populate_editor), (gog_reg_eqn_type_name), + (gog_reg_eqn_class_init), (gog_reg_eqn_init), + (gog_reg_eqn_view_render), (gog_reg_eqn_view_class_init): ditto. + * goffice/graph/gog-reg-eqn.h: ditto. + * goffice/graph/gog-series-impl.h: ditto. + * goffice/graph/gog-series.c: (regression_curve_can_add), + (regression_curve_post_add), (regression_curve_pre_remove), + (gog_series_class_init), (gog_series_init): ditto. + * goffice/graph/gog-theme.c: (gog_themes_init): ditto. + * plugins/Makefile.am: ditto. + * plugins/plot_xy/gog-xy.c: (gog_xy_view_render), + (gog_xy_view_size_allocate), (gog_xy_view_class_init), + (gog_xy_series_view_render), (gog_xy_series_view_size_allocate), + (gog_xy_series_view_class_init), (gog_xy_series_update), + (gog_xy_series_init), (gog_xy_series_class_init): ditto. + * plugins/reg_linear/Makefile.am: ditto. + * plugins/reg_linear/gog-lin-reg.c: (gog_lin_reg_curve_update), + (gog_lin_reg_curve_get_value_at), (gog_lin_reg_curve_get_equation), + (gog_lin_reg_curve_get_R2), (gog_lin_reg_curve_finalize), + (gog_lin_reg_curve_class_init), (gog_lin_reg_curve_init), + (go_plugin_init), (go_plugin_shutdown): ditto. + * plugins/reg_linear/gog-lin-reg.h: ditto. + * plugins/reg_linear/plugin.xml.in: ditto. + * plugins/reg_linear/reg-types.xml.in: ditto. + * po/POTFILES.in: ditto. + * plugins/plot_surface/xl-surface.c: + (xl_contour_plot_axis_get_bounds): fixed a compilation warning. + +2005-05-10 Jody Goldberg + + * configure.in : post release version bump + +2005-05-09 Jody Goldberg + + * Release 0.0.1 + +2005-05-09 Jody Goldberg + + * tests/pie-demo.c (main) : update + +2005-05-09 Emmanuel Pacaud + + * plugins/plot_radar/gog-radar.c (gog_rt_view_render): warning fix. + +2005-05-09 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (gog_axis_base_get_crossed_axis_type): + handle GOG_AXIS_SET_XY_pseudo_3d case. + (axis_line_get_bbox): fix label offset. + (axis_line_render): ditto. + (axis_circle_get_bbox): take ticks into account. Use GogChartMap. + (axis_circle_render): if axis is polar, use bezier paths by calling + gog_renderer_draw_arc. Draw ticks. Use GogChartMap. + (x_process): new. + (xy_process): use GogChartMap. + (calc_polygon_parameters): removed. + (radar_process): implement padding_request for radial axes. + (gog_axis_base_view_info_at_point): handle GOG_AXIS_SET_X. + (gog_axis_base_view_padding_request): ditto. + (gog_axis_base_view_render): ditto. + * goffice/graph/gog-axis.c (map_bounds): new. + (map_linear_auto_bound): handle auto bounds for non discrete circular + axis. + (map_linear_calc_ticks): place major ticks to a multiple of major + step. + (map_log_bounds): new. + (gog_axis_map_get_extents): new. + (gog_axis_map_get_bounds): new. + (role_grid_line_major_can_add): can be TRUE for non discrete + GOG_AXIS_CIRCULAR. + (role_grid_line_minor_post_add): ditto. + (role_axis_line_can_add): can be TRUE for GOG_AXIS_RADIAL. + (gog_axis_set_property): changing invert flag invalidates layout. + (gog_axis_populate_editor): don't show map type selector for + GOG_AXIS_CIRCULAR. + (gog_axis_is_inverted): new. + * goffice/graph/gog-chart.c (calc_polygon_parameters): new. + (calc_circle_parameters): new. + (null_map_2D): new. + (x_map_2D_to_view): new. + (xy_map_2D_to_view): new. + (polar_map_2D_to_view): new. + (gog_chart_map_get_polar_parms): new. + (gog_chart_map_new): needs pointers to axes of the axis set now. + handle GOG_AXIS_SET_X, GOG_AXIS_SET_RADAR and + GOG_AXIS_SET_XY_pseudo_3d. + (gog_chart_map_2D): removed. + (gog_chart_map_2D_to_view): new. + (gog_chart_map_get_axis_map): new. + (gog_chart_map_is_valid): new. + (gog_chart_axis_set_assign): handle GOG_AXIS_SET_RADAR. + * goffice/graph/gog-grid-line.c (calc_polygon_parameters): removed. + (gog_grid_line_view_render): handle polar plots. + * goffice/graph/gog-grid.c (gog_grid_view_render): handle polar and + radar plots. + * goffice/graph/gog-renderer-gnome-print.c + (draw_bezier_path): new. + (gog_renderer_gnome_print_draw_bezier_path): use draw_bezier_path. + (gog_renderer_gnome_print_draw_bezier_polygon): new. + * goffice/graph/gog-renderer-pixbuf.c + (gog_renderer_pixbuf_draw_polygon): fix transparency rendering. Idea + stolen from gnome-print. + (gog_renderer_pixbuf_draw_bezier_polygon): new. + * goffice/graph/gog-renderer-svg.c (fill_properties): new. + (gog_renderer_svg_draw_bezier_polygon): new. + * goffice/graph/gog-renderer.c + (gog_renderer_get_ring_wedge_vpath): new. + (gog_renderer_draw_ring_wedge): new. + (gog_renderer_draw_pie_wedge): new. + (gog_renderer_draw_arc): new. + * plugins/plot_radar/gog-radar.c: renamed GogRadarPlot to GogRTPlot, + as base of GogRadarPlot and GogPolarPlot. + New GogRadarPlot and GogPolarPlot classes. + Renamed GogRadarView class to GogRTView class. + (gog_rt_view_render): handle radar and polar plots. + Renamed GogRadarSeries class to GogRTSeries. + * plugins/plot_radar/plot-types.xml.in: add polar plots. + * plugins/plot_radar/plugin.xml.in: ditto. + +2005-05-09 Morten Welinder + + * goffice/graph/gog-style.c (cb_font_changed): C99, const, and + type fixes. + +2005-05-09 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_matrix_val_as_str), + (go_data_matrix_val_from_str): made things work. + * plugins/plot_surface/gog-surface.c: (gog_contour_plot_update), + (gog_contour_view_render): avoid crashes and weird displays + when there are no data for the axis. + * plugins/plot_surface/xl-surface.c (xl_contour_plot_build_matrix): + fix a vector length problem and replace nan by 0. to be xl compatible. + +2005-05-08 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_vector_str_from_str): + fix an infinite loop condition. + * plugins/gog-surface.c: fixed several critical bugs. + +2005-05-07 Jean Brefort + * goffice/graph/gog-legend.c: (cb_render_elements): use style + for legend font. + * goffice/graph/gog-style.c: (cb_font_changed): make things work, + at least for now + * goffice/gtk/go-font-sel.c: (style_selected): fixed it, + (go_font_sel_set_style): added a warning. + +2005-05-07 Morten Welinder + + * goffice/gtk/go-action-combo-color.c (go_action_combo_color_new): + Don't set ->icon here, but make it when needed. Fixes #302880. + (make_icon): New function. + +2005-05-07 Jean Brefort + + * goffice/data/go-data-simple.c: (go_data_vector_val_finalize), + (go_data_vector_val_dup), (go_data_vector_val_as_str), + (go_data_vector_val_from_str), (go_data_vector_val_class_init), + (go_data_vector_val_new), (cb_strings_destroy_notify), + (go_data_vector_str_finalize), (go_data_vector_str_dup), + (go_data_vector_str_as_str), (go_data_vector_str_from_str), + (go_data_vector_str_class_init), (go_data_vector_str_init), + (go_data_vector_str_new), + (go_data_vector_str_set_translation_domain), + (go_data_matrix_val_finalize), (go_data_matrix_val_dup), + (go_data_matrix_val_eq), (go_data_matrix_val_load_size), + (go_data_matrix_val_load_values), (go_data_matrix_val_get_value), + (go_data_matrix_val_get_str), (go_data_matrix_val_as_str), + (go_data_matrix_val_from_str), (go_data_matrix_val_class_init), + (go_data_matrix_val_new): add GODataMatrixVal class and add + serialization to GODataVectorVal and GODataVectorStr. + * goffice/data/go-data-simple.h: add GODataMatrixVal class and + enhanced vectors. + * goffice/data/go-data.c: (go_data_matrix_get_value), + (go_data_matrix_get_str): check if row and column are valid. + * goffice/gtk/go-color-palette.c: (create_color_sel): set opacity (see + #302387). + * goffice/gtk/go-format-sel.c: use go_setlocale instead of gnm_setlocale. + * goffice/utils/format.c: (go_setlocale), + (go_set_untranslated_bools): renamed two gnm functions. + * goffice/utils/format.h: ditto. + * plugins/plot_surface/xl-surface.c: updated args to go_data_vector_str_new + (xl_contour_plot_axis_get_bounds): updated args to go_data_vector_str_new. + +2005-05-07 Jody Goldberg + + * goffice/graph/gog-object-xml.c (gog_dataset_sax_save) : use + g_snprintf it is more portable. + (gog_dataset_dom_save) : ditto. + * goffice/utils/go-libxml-extras.c (xml_node_set_double) : ditto. + +2005-05-06 Emmanuel Pacaud + + * goffice/graph/gog-chart.c (plot_render): new. + (gog_chart_view_render): render plot marked with render_before_axes + before axes, but after grid and background. + * goffice/graph/gog-plot.c (gog_plot_init): default render_before_axes + to FALSE. + * plugings/plot_barcol/gog-line.c (gog_area_plot_init): + render_before_axes = TRUE. + * plugins/plot_radar/gog-radar.c (gog_radar_area_plot_init): ditto. + * plugins/plot_surface/gog-surface.c (gog_contour_plot_init): ditto. + +2005-05-05 Morten Welinder + + * goffice/utils/go-glib-extras.c (go_object_properties_free, + go_object_properties_collect, go_object_properties_apply): New + functions. + +2005-05-04 Morten Welinder + + * goffice/gtk/go-combo-box.c (go_combo_box_style_set): New + function. + (go_combo_box_class_init): Hook up go_combo_box_style_set and + define add-tearoffs widget style property. + +2005-05-04 Jody Goldberg + + * goffice/app/go-plugin-service.c (plugin_service_new) : minor leak. + +2005-05-01 Jon K Hellan + + * goffice/gtk/goffice-gtk.[ch] (go_mime_to_image_format): New. Get + image format for mime type. + (go_image_format_to_mime): New. Get mime types for image format. + +2005-04-29 Jean Brefort + + * goffice/graph/gog-plot.c: added missing header. + +2005-04-29 Morten Welinder + + * goffice/utils/go-glib-extras.c (go_object_toggle): New function. + +2005-04-28 Stepan Kasal + + * configure.in (WITH_WIN32): Fix the case command for $host_os, + add the "pw32*" pattern. + (AC_CANONICAL_HOST): Call explicitly, we use $host_os. + (WINDRES): Add an AC_ARG_VAR declaration. + +2005-04-28 Ivan, Wong Yat Cheung + + * configure.in: Remove OS_WIN32 and combine PLATFORM_WIN32 + and WITH_WIN32. + + * goffice/Makefile.am: Use WITH_WIN32 + +2005-04-28 Jean Brefort + + * goffice/graph/gog-plot.c: (cb_axis_changed): initialize value. + +2005-04-21 Stepan Kasal + + * configure.in (GOFFICE_LIB_VERSON): Rename to ... + (GOFFICE_LIB_VERSION): ... and compute statically, by m4_eval. + * goffice/Makefile.am (goffice-paths.h): Also depends on Makefile. + * plugins/plot_barcol/Makefile.am, plugins/plot_pie/Makefile.am: + * plugins/plot_xy/Makefile.am: Don't list glade files in xml_DATA. + +2005-04-20 Ivan, Wong Yat Cheung + + * goffice/gtk/go-action-combo-text.c: Add a new property + "case-sensitive". + +2005-04-19 Stepan Kasal + + * goffice/utils/Makefile.am (SUFFIXES): Remove, Automake deduces it + (at least Automake >= 1.7). + +2005-04-18 Stepan Kasal + + * plugins/plot_surface/xl-surface.c (xl_contour_plot_build_matrix): + Don't initialize `ptr' twice; do initialize `series'. + +2005-04-18 Stepan Kasal + + * goffice/utils/go-gradient.h (GOGradientDirection): Properly terminate + with GO_GRADIENT_MAX. + * goffice/utils/go-gradient.c (grad_dir_names): No need to include the + enum number in the structure; code adapted. + * goffice/utils/go-marker.c: Don't omit libart includes when !WITH_GTK; + (marker_shape_names): Merge into marker_shapes; adapt code. + (marker_shapes): Use macros to shorten the definition. + (marker_update_pixbuf, go_marker_finalize, go_marker_set_shape): + (go_marker_set_outline_color, go_marker_set_fill_color): + (go_marker_set_size): Factor out common code ... + (marker_free_pixbuf): ... to a new static function. + (SELECTOR_PIXBUF_SIZE, SELECTOR_MARKER_SIZE): Remove unused defines. + * goffice/utils/go-marker.h (pixbuf): If !WITH_GTK, rename this to ... + (pixbuf_placeholder): ..., so that noone can actually use it. + * goffice/utils/go-pattern.c (pattern_names): Merge into go_patterns; + adapt code. + * goffice/utils/go-pattern.h (go_pattern_selector): Omit if !WITH_GTK. + +2005-04-18 Stepan Kasal + + * configure.in: Call PKG_PROG_PKG_CONFIG explicitly. + +2005-04-15 Stepan Kasal + + * configure.in: Fix the appearance of help strings. + +2005-04-12 Stepan Kasal + + * goffice/utils/go-file.c: #include libgnomevfs/gnome-vfs-mime-utils.h; + this file comes via gsf-input-gnomevfs.h and gnome-vfs.h in current + version, but not in my gnome-vfs 2.4.2. + * goffice/graph/gog-plot.c (gog_plot_update_3d): Cosmetic fix. + +2005-04-10 Jean Brefort + + * goffice/graph/goffice-graph.h: allow use of GOG_AXIS_PSEUDO_3D. + * goffice/graph/gog-axis-line.c: add pseudo 3d axis support. + (gog_axis_base_view_padding_request), (gog_axis_base_view_render): + * goffice/graph/gog-axis.c: (gog_axis_calc_ticks): ditto. + * goffice/graph/gog-chart.c: (gog_chart_map_new), + (gog_chart_map_2D), (role_grid_can_add), (pseudo_3d_axis_can_add), + (pseudo_3d_axis_post_add), (gog_chart_axis_set_assign): ditto. + * goffice/graph/gog-plot-impl.h: ditto. + * goffice/graph/gog-plot.c: (gog_plot_class_init), + (gog_plot_foreach_elem), (gog_plot_get_axis), (gog_plot_update_3d): ditto. + * goffice/graph/gog-plot.h: ditto. + * plugins/plot_surface/Makefile.am: ass xl-surface.*. + * plugins/plot_surface/gog-contour-prefs.c: removed deprecated code and + added "transposed" property managing. + * plugins/plot_surface/gog-contour-prefs.glade: ditto. + * plugins/plot_surface/gog-surface.c: rewrote to use pseudo 3d axis. + * plugins/plot_surface/gog-surface.h: ditto. + * plugins/plot_surface/plugin.xml.in: added xl compatibility contours plots + * plugins/plot_surface/xl-surface.c: ditto. + * plugins/plot_surface/xl-surface.h: ditto. + +2005-04-08 Ivan, Wong Yat Cheung + + * goffice/gtk/Makefile.am: use -export-symbols to link with + libhtmlhelp-stub.def + +2005-04-07 Emmanuel Pacaud + + * goffice/graph/gog-renderer-svg.c: avoid use of + g_string_append_printf. + +2005-04-07 Morten Welinder + + * goffice/gtk/goffice-gtk.c (go_gtk_url_is_writeable): Use + go_access. No need to define G_IS_DIR_SEPARATOR anymore. + (go_access): Copied from gsf while we're waiting for glib. + +2005-04-07 Emmanuel Pacaud + + * goffice/graph/gog-renderer-svg.c: Avoid locale changes by using + g_ascii_dtostr. Fixes 172726. + +2005-04-07 Jean Brefort + + * goffice/graph/gog-guru.c: (cb_attr_tree_selection_change): don't + scroll to selection if nothing is selected. + +2005-04-06 Morten Welinder + + * plugins/plot_barcol/gog-1.5d.c (gog_plot1_5d_set_property): Add + missing "break;" + + * goffice/utils/datetime.c (datetime_isoweeknum): Replace by + g_date_get_iso8601_week_of_year. + * configure.in: Require glib 2.6.4. + +2005-04-04 Morten Welinder + + * goffice/utils/format.c (go_format_number): Do at least a small + attempt at getting fractional seconds right. + +2005-04-02 Jean Brefort + + * goffice/goffice.c: (libgoffice_init), (libgoffice_shutdown): call + number_format_init/shutdown. + +2005-04-01 Jody Goldberg + + * goffice/utils/regutf8.c : include string.h to suppress warning about + implicit decl of strlen + +2005-04-01 Morten Welinder + + * goffice/utils/go-glib-extras.c (go_guess_encoding): Try exotic + encodings guess by libxml. + + * goffice/drawing/god-property-table.h: Use canonical property + names. + + * goffice/gtk/goffice-gtk.c (go_gtk_select_image): Moderately + cheesy way of saving where we were last time. + +2005-04-01 Stepan Kasal + + s/INCLUDES/AM_CPPFLAGS/ "automake -Wall" has told me this. + + * goffice/libgoffice-1.pc.in: Move ... + * libgoffice-1.pc.in: ... here. + * Makefile.am, goffice/Makefile.am, configure.in: Adapt to the move. + * goffice/utils/Makefile.am (non-intermediate): New dummy rule; see + http://bugzilla.gnome.org/show_bug.cgi?id=172211 and + http://bugzilla.gnome.org/show_bug.cgi?id=172212 + (.list.c, .list.h): Remove $(GLIB_GENMARSHAL); it didn't work + anyway, the prerequisities of an implicit rule are ignored. + * configure.in (GLIB_GENMARSHAL): Full path is not needed. + (GOFFICE_CFLAGS): No need to amend this. + +2005-03-31 Morten Welinder + + * goffice/app/go-plugin-service.c (go_plugin_file_saver_save): If + we failed to load the plugin, set an error on the output. + +2005-03-30 Ivan, Wong Yat Cheung + + * configure.in: + * plugins/plot_*/Makefile.am: modify GOFFICE_PLUGIN_LDFLAGS and + add add GOFFICE_PLUGIN_LIBADD. They help when + host_os == win32. + + * goffice/Makefile.am: -export-all-symbols is not the + final solution. Will remove it when we have GO_API or + any other solution. + + * goffice/goffice-priv.h: + * goffice/goffice.c: + * goffice/app/go-plugin.c: use go_sys_lib_dir () + + * goffice/gtk/Makefile.am: libgoffice-html-help-stub.la + +2005-03-30 Emmanuel Pacaud + + * goffice/graph/gog-object.c (gog_editor_free): free editor. + +2005-03-30 Morten Welinder + + * goffice/utils/regutf8.c: Import Gnumeric's non-gui search stuff. + Make it a gobject. + (go_search_replace_set_search_text, + go_search_replace_set_replace_text): Be paranoid. + +2005-03-29 Emmanuel Pacaud + + * pixmaps/chart_polar_1_1.[png,svg]: new. + * pixmaps/polar.[png,svg]: new. + +2005-03-28 Morten Welinder + + * .../*.c: Use canonical property names. + + * goffice/utils/go-libxml-extras.c + (e_xml_get_child_by_name_by_lang): Use g_get_language_names. + + * goffice/utils/Makefile.am (libgoffice_utils_la_HEADERS): Remove + go-locale.[ch]. + +2005-03-27 Morten Welinder + + * goffice/gtk/go-combo-box.c (go_combo_box_init): Use canonical + property names. + (go_combo_popup_tear_off): Ditto. + + * goffice/gtk/go-action-combo-text.c + (go_action_combo_create_tool_item): Ditto. + + * goffice/gtk/go-action-combo-stack.c + (go_action_combo_stack_create_tool_item): Ditto. + + * goffice/gtk/go-action-combo-color.c (go_action_combo_color_new): + Ditto. + +2005-03-27 Jean Brefort + + * goffice/app/error-info.h: add missing G_BEGIN_DECLS and G_END_DECLS. + * goffice/app/file-priv.h: ditto. + * goffice/app/file.h: ditto. + * goffice/app/go-cmd-context-impl.h: ditto. + * goffice/app/go-cmd-context.h: ditto. + * goffice/app/go-error-stack.h: ditto. + * goffice/app/go-object.h: ditto. + * goffice/app/go-plugin-loader-module.h: ditto. + * goffice/app/go-plugin-loader.h: ditto. + * goffice/app/go-plugin-service.h: ditto. + * goffice/app/go-plugin.h: ditto. + * goffice/app/go-service.h: ditto. + * goffice/app/io-context-priv.h: ditto. + * goffice/app/io-context.h: ditto. + * goffice/app/module-plugin-defs.h: ditto. + * goffice/data/go-data-simple.h: ditto. + * goffice/graph/gog-error-bar.h: ditto. + * goffice/graph/gog-renderer.h: ditto. + * goffice/ms-compat/go-ms-parser.h: ditto. + * goffice/ms-compat/god-drawing-ms.h: ditto. + * goffice/utils/datetime.h: ditto. + * goffice/utils/go-math.h: ditto. + +2005-03-25 Stepan Kasal + + * configure.in (GOFFICE_WITHOUT_GTK, GOFFICE_WITH_GNOME): Rename + these defines back to WITH_GTK and WITH_GNOME. + (GOFFICE_WITH_GTK, GOFFICE_WITH_GNOME): Rename the Automake + conditionals back to WITH_GTK and WITH_GNOME, too. + +2005-03-24 Stepan Kasal + + * goffice/app/module-plugin-defs.h (GOFFICE_MODULE_PLUGIN_INFO_DECL): + Removed, it's not used. + +2005-03-24 Stepan Kasal + + * goffice/Makefile.am (goffice-paths.h): Rewrite the rule, + goffice-paths.sh* is no longer used. + (EXTRA_DIST, noinst_HEADERS): No longer needed. + * goffice/goffice-paths.sh.in: Removed. + * configure.in: Don't generate goffice-paths.sh, rearrange the + goffice_* AC_SUBSTs. + * goffice/goffice.c (LIBGOFFICE_VERSION): Renamed to GOFFICE_VERSION. + (libgoffice_lib_dir): Comment out in the WIN32 block, since the + declaration is already commented out. + +2005-03-23 Stepan Kasal + + * configure.in: Generate goffice-features.h as a header file, subset + of goffice-config.h. + * goffice/goffice-config.h.in: Adjust the template. + +2005-03-22 Stepan Kasal + + * autogen.sh: REQUIRED_AUTOCONF_VERSION=2.54 We already required + that indirectly, by asking for Automake >= 1.7.2. + * configure.in: AC_PREREQ(2.54) + - don't default to --without-gtk even if the reqs are not met; + - don't generate stamp.h; the issue is solved by Automake 1.7.2; + see info '(autoconf)Automatic Remaking' for details. + * stamp.h.in: Nuke. + * .cvsignore: Remove stamp*. + * goffice/.cvsignore: Remove depcomp. + * po/POTFILES.in: Remove goffice/cut-n-paste/pcre/printint.c. + +2005-03-23 Emmanuel Pacaud + + * plugins/plot_radar/gog-radar.c (gog_radar_view_render): handle + inverted circular axis. + +2005-03-22 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (radar_process): fix padding request + for circular axis. + +2005-03-22 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (gog_axis_base_get_property): handle + GOG_AXIS_AUTO. + (gog_axis_base_set_position_auto): removed. + (gog_axis_base_set_position): handle GOG_AXIS_AUTO. + (xy_process): ditto. + * goffice/graph/gog-axis-line.h: add GOG_AXIS_AUTO to GogAxisPosition. + +2005-03-22 Emmanuel Pacaud + + Add support for axis selection. + + * goffice/graph/gog-axis-line.c (get_point_to_segment_distance): new. + (axis_line_point): new. + (axis_circle_point): new. + (axis_cirlce_render): render as polygon if num_radii > 0.0 + cos (x - pi/2) = sin (x) + sin (x - pi/2) = -cos (x) + (xy_process): handle point routine now. + (radar_process) : ditto. + (gog_axis_base_view_info_at_point): new. + (gog_axis_base_view_padding_request): pass action parameter to process + functions. + (gog_axis_base_view_render): ditto. + * goffice/graph/gog-grid-line.c (gog_grid_line_info_at_point): new. + Just return FALSE for now. + +2005-03-22 Emmanuel Pacaud + + * goffice/graph/gog-graph.c (gog_graph_force_update): replace if + statement by a while loop, since an object update may trigger a + update request for an other object. + * goffice/graph/gog-renderer-gnome-print.c + (gog_graph_print_to_gnome_print): force model update before rendering. + * goffice/graph/gog-renderer-pixbuf.c (gog_renderer_pixbuf_update): + ditto. + * goffice/graph/gog-renderer-svg.c (gog_graph_export_to_svg): ditto. + * plugins/plot_barcol/gog-line.c (gog_line_view_render): revert + previous broken fix (2005-03-17). + * tests/pie-demo.c (main): gog_chart_get_cardinality is not needed + anymore. + +2005-03-21 Emmanuel Pacaud + + * configure.in: change test/Makefile to tests/Makefile + +2005-03-21 Christopher James Lahey + + * goffice/graph/gog-axis-line.c (gog_axis_base_set_position_auto): + convenience function that places an axis line in the first free + position. + (cb_position_toggled): search all the axes with the same type, not + just parent one. + (axis_line_get_bbox): correct placement of axis labels. + (axis_line_render): ditto. + (axis_circle_get_bbox): ditto. + (axis_circle_render): ditto. + * goffice/graph/gog-axis.c (role_axis_line_post_add): use + gog_axis_base_set_position_auto. + (gog_axis_view_padding_request): restore padding hack. + (gog_axis_view_size_allocate): ditto. + * goffice/graph/gog-chart.c (axis_post_add): place axis in the first + free position. + +2005-03-21 Stepan Kasal + + * MAINTAINERS: New file, two beings selected as victims -- one human + and one demi-god. + * Makefile.am (EXTRA_DIST): Add README NEWS BUGS MAINTAINERS AUTHORS. + * README: In the requirements, state that we require pango 1.8.1, and + fix the Debian name of the pango package; delete intltool, it's + distributed with the package. + * configure.in: Delete the requirement for libgnomeprintui. + +2005-03-20 Jody Goldberg + + * goffice/gtk/go-format-sel.c (fmt_dialog_enable_widgets) : make sure + the current selection is visible. + + * goffice/goffice.c (libgoffice_init) : look in the right place. + +2005-03-19 Jean Brefort + + * goffice/gtk/go-graph-widget.c: (go_graph_widget_size_allocate), + (go_graph_widget_set_property), (go_graph_widget_get_property), + (go_graph_widget_class_init), (go_graph_widget_init): add abd use + aspect-ratio property. + * test/pie-demo.c: (main): add a title and a lengend. + +2005-03-18 Emmanuel Pacaud + + * goffice/graph/gog-axis.c (map_discrete): inverted is in + GogAxisMap::axis->inverted. + (map_discrete_to_view): ditto. + (map_discrete_from_view): ditto. + (map_linear_from_view) :ditto. + (map_linear_to_view): ditto. + (map_log_to_view): ditto. + (map_log_from_view): ditto. + (gog_axis_map_from_view): ditto. + (gog_axis_map_to_view): ditto. + (map_baseline): new. + (map_log_finite): new. + (map_log_baseline): new. + (gog_axis_map_finite): new. Returns TRUE if value means something in + this map. + (gog_axis_map_get_baseline): new. Returns the baseline for the given + map, in view coordinates, clipped to offset and offset+length, where + offset and length are the parameters of gog_axis_map_new. + * goffice/graph/gog-error-bar.c (gog_error_bar_render): do not try to + render error bar if a part of it is not at a valid coordinate. + * plugins/plot_barcol/gog-barcol.c (gog_barcol_view_render): replace + go_finite tests by gog_axis_map_finite. + * plugins/plot_radar/gog-radar.c (gog_radar_view_render): ditto. + * plugins/plot_xy/gog-xy.c: ditto. + * plugins/plot_barcol/gog-line.c (gog_line_view_render): ditto. Use + gog_axis_map_get_baseline for y_zero. + +2005-03-17 Emmanuel Pacaud + + * plugins/plot_barcol/gog-line.c (gog_line_view_render): Don't free + memory with invalid pointers. + +2005-03-16 Stepan Kasal + + * autogen.sh: Require intltool >= 0.27.2 and explain why; + fix IFS handling; cosmetic changes. + * configure.in: Cosmetics. + * goffice/libgoffice-1.pc.in: Change the "Name:" to libGOffice, + and put a command with a hint for anon cvs. + +2005-03-16 Emmanuel Pacaud + + * goffice/graph/gog-axis.c (map_discrete_auto_bound): do not set auto + cross point. + +2005-03-16 Emmanuel Pacaud + + * goffice/utils/go-line.c (go_line_build_vpath), + (go_line_build_bpath): fix new point test. + +2005-03-16 Jean Brefort + + * test/pie-demo.c: fix compilation warnings and add some comments. + +2005-03-15 Morten Welinder + + * goffice/cut-n-paste/pcre/pcre.c (pcre_exec): Backport another + UMR fix. + +2005-03-15 Emmanuel Pacaud + + * goffice/graph/gog-axis-line.c (axis_line_get_bbox): remove extra + gog_axis_map_new. + (gog_axis_base_view_padding_request): handle GOG_AXIS_SET_X like + GOG_AXIS_SET_XY. + (gog_axis_base_view_render): ditto. + * goffice/graph/gog-chart.c (gog_chart_map_new): ditto. + (gog_chart_map_2D): ditto. + * goffice/graph/gog-axis.c (role_axis_line_can_add): adding an axis + line is only relevant for GOG_AXIS_SET_XY for now. + (gog_axis_class_init): add role_axis_line_can_add. + * goffice/graph/gog-plot.c (gog_plot_populate_editor): axis selection + is only relevant for GOG_AXIS_SET_XY. + (gog_plot_set_axis_by_id): don't try to find an axis if id = 0, + GogObject::id starts at 1. + * plugins/plot_boxes/gog-xy.c (gog_bubble_plot_populate_editor): + call parent::populate_editor. + * plugins/plot_boxes/gog-boxplot.c (gog_box_plot_populate_editor): + ditto. + (gog_box_plot_view_render): free x_map. + +2005-03-15 Stepan Kasal + + * goffice/graph/Makefile.am: Distribute gog-axis-line-impl.h. + +2005-03-15 Jean Brefort + + * goffice/graph/gog-axis.c: (map_discrete_calc_ticks): limit ticks number + to GOG_AXIS_MAX_TICK_NBR (fix a crash when importing xl log axis). + +2005-03-15 Stepan Kasal + + Also undo the changes connected with the changes in configure.in, ... + + * plugins/plot_barcol/Makefile.am, plugins/plot_boxes/Makefile.am, + plugins/plot_pie/Makefile.am, plugins/plot_radar/Makefile.am, + plugins/plot_surface/Makefile.am, plugins/plot_xy/Makefile.am: ...here. + +2005-03-14 Morten Welinder + + * configure.in: Undo last change. Test links with gcc, not $LD. + + * goffice/utils/format.c: Compile plain double version first as + gdb sets breakpoints only for first copy. + (go_format_number): Disable strange number scaling for ".". + [#167274] + +2005-03-14 Jean Brefort + + * goffice/graph/gog-axis.c: (gog_axis_get_entry): fixed test for + GogAxisElemType arg (GOG_AXIS_ELEM_MAX_ENTRY instead of GOG_AXIS_ELEM_MAX). + +2005-03-13 Emmanuel Pacaud + + * goffice/goffice.c (libgoffice_init): add GogAxisLine object. + * goffice/graph/Makefile.am: add gog-axis-line.[ch] + * goffice/graph/goffice-graph.h: add GogAxisLine object. Add new + object position GOG_POSITION_PADDING. + * goffice/graph/gog-axis-prefs.glade: Rework of axis property pages, + now called Scale and Layout. + * goffice/graph/gog-axis-line.[ch], gog-axis-line-impl.h: new. + Contains an implementation of what is needed to actually draw an + axis on screen, which was previously provided by GogAxis, in + GogAxisBase and GogAxisBaseView. + * goffice/graph/gog-axis.c: GogAxis is now derived from GogAxisBase. + Tick settings and position are now property of GogAxisBase. + (create_invalid_axis_ticks): allways generate tick labels. + (map_discrete_calc_ticks): ditto. + (map_linear_calc_ticks): ditto. + (map_log_calc_ticks): ditto. + (role_label_post_add): removed. + (role_axis_line_post_add): new. Set axis line position to an unused + position. + (gog_axis_set_property): removed tick and position settings. + (gog_axis_get_property): ditto. + (cb_pos_changed): removed. + (gog_axis_editor): renamed to populate_editor. Use new GogEditor API. + Removed everything related to tick and position settings. + (gog_axis_class_init): Change position type of Label childs to + GOG_POSITION_SPECIAL. Add AxisLine as possible child. Removed tick and + position properties. + (gog_axis_init): removed tick and position settings. + (gog_axis_dataset_get_elem): cross location is a member of + GogAxisBase. + (gog_axis_get_pos): removed. + (gog_axis_is_center_on_ticks): new. + (gog_axis_view_padding_request): padding is now calculated in + GogAxisBaseView. + (gog_axis_view_size_request): removed. + (gog_axis_view_size_allocate): new. handle axis titles. + (draw_axis_from_a_to_b): removed. + (gog_axis_view_render_children): removed. + (gog_axis_view_render): rendering is now in GogAxisBaseView. + * goffice/graph/gog-chart.c (gog_chart_map_new), + (gog_chart_map_2D), (gog_chart_map_free): new. + (gog_chart_class_init): Axis position type is GOG_POSITION_PADDING + now. + (gog_chart_axis_set): renamed to gog_chart_get_axis_set. + (gog_chart_get_axis): renamed to gog_chart_get_axes. + (gog_chart_view_get_plot_area): no need to store plot_area. It's in + GogView::residual. + (child_request): removed. + (gog_chart_view_size_allocate): Do not handle axis padding request + here. + * goffice/graph/gog-grid-line.c (gog_grid_line_view_render): better + placement of radar plots. + * goffice/graph/gog-guru.c (cb_attr_tree_selection_change): + no need to handle editor type since gog_object_get_editor allways + returns a notebook now. + * goffice/graph/gog-label.c (gog_label_populate_editor): Use new + GogEditor API. + * goffice/graph/gog-legend.c (gog_legend_populate_editor): ditto. + * goffice/graph/gog-series.c (gog_series_element_populate_editor): + ditto. + (gog_series_populate_editor): ditto. + * goffice/graph/gog-style.c (font_init): ditto. + (gog_style_populate_editor): ditto. + (style_editor): ditto. + (gog_style_editor): renamed to gog_style_get_editor. + (gog_styled_object_editor): removed. + (gog_style_handle_notebook): removed. + * goffice/graph/gog-object.c (gog_editor_new), (gog_editor_add_page), + (gog_editor_set_store_page), (gog_editor_get_notebook), + (gog_editor_free): new. + GogObject::id is an int now. This id is unique for a given object type + and on the same level in the object tree. + (gog_object_set_property): persist id now. + (gog_object_get_property): ditto. + (gog_object_class_init): ditto. + (gog_object_is_same_type): new. + (gog_object_generate_name): store auto_name and don't return anything. + (gog_object_get_id): new. + (gog_object_generate_id): new. + (gog_object_set_id): new. + (gog_object_get_name): return GogObject::auto_name. + (gog_object_position_cmp): GOG_POSITION_PADDING and + GOG_POSITION_SPECIAL are equivalent. + (gog_object_get_editor): use new GogEditor API. + (gog_object_set_parent): id is an int now. + * goffice/graph/gog-plot.c (cb_axis_changed): new. + (gog_plot_populate_editor): new. + (gog_plot_set_property): store axis reference now. + (gog_plot_get_property): ditto. + (gog_plot_class_init): ditto. + (gog_plot_set_axis_by_id): new. + (gog_plot_get_axis_id): new. + * goffice/graph/gog-styled-object.c (styled_object_populate_editor): + use new GogEditor API. + * goffice/graph/gog-theme.c (gog_themes_init): handle GogAxisLine + objects. + * goffice/graph/gog-view.c: GogView::padding_request : new. + (gog_view_padding_request_real): new. + (gog_view_padding_request): new. + * plugins/plot_barcol/gog-1_5d.c (gog_series1_5d_populate_editor): + use GogEditor API. + * plugins/plot_barcol/gog-barcol.c (gog_barcol_plot_populate_editor): + ditto. + * plugins/plot_boxes/gog-boxplot.c (gog_box_plot_populate_editor): + ditto. + (gog_box_plot_view_render): draw sharp rectangles. + * plugins/plot_pie/gog-pie-prefs.glade: layout fixes. + * plugins/plot_pie/gog-pie-series.glade: ditto. + * plugins/plot_pie/gog-pie.c (gog_pie_series_element_populate_editor): + use GogEditor API. + (gog_pie_plot_populate_editor): ditto. + (gog_ring_plot_populate_editor): ditto. + * plugins/plot_radar/gog-radar.c (gog_radar_plot_axis_get_bounds): + maxima is num_elements - 1. + (gog_radar_view_render): better radar plot placement. + * plugins/plot_surface/gog-surface.c + (gog_contour_plot_populate_editor): use GogEditor API. + * plugins/plot_xy/gog-xy.c (gog_bubble_plot_populate_editor): ditto. + (gog_xy_series_populate_editor): ditto. + + +2005-03-13 J.H.M. Dassen (Ray) + + * configure.in: Link -Wl,-O1 if the linker supports it; see + http://people.redhat.com/drepper/dsohowto.pdf for background. + * configure.in: Link -Wl,-z,defs if the linker supports it + * plugins/plot_barcol/Makefile.am, plugins/plot_boxes/Makefile.am, + plugins/plot_pie/Makefile.am, plugins/plot_radar/Makefile.am, + plugins/plot_surface/Makefile.am, plugins/plot_xy/Makefile.am: except + for the plugins. + +2005-03-13 Jean Brefort + + * goffice/gtk/Makefile.am: add go-graph-widget.*. + * goffice/gtk/go-font-sel.c: (canvas_size_changed): display sample + text centered in the canvas. + * goffice/gtk/go-graph-widget.c: new GOGraphWidget class. + * goffice/gtk/go-graph-widget.h: ditto. + * test/Makefile.am: add pie-demo sample program. + * test/pie-demo.c: simple sample program. + +2005-03-12 Morten Welinder + + * goffice/utils/format.c (go_render_number): Add epsilon early and + permanently. Fix significant digit check. + +2005-03-11 Morten Welinder + + * goffice/utils/format.c (go_render_number): Fix two + trailing-zeros bugs. + + * goffice/utils/Makefile.am (.list.c): Add include of + goffice/goffice-config.h when building this. + + * goffice/utils/go-libxml-extras.c (xml_node_set_gocolor): Don't + go via GdkColor which we may not have. + + * goffice/utils/regutf8.c (go_regexp_quote): Renamed from + gnumeric_regexp_quote. + +2005-03-11 Stepan Kasal + + * configure.in: Propagate ACLOCAL_FLAGS, so that it's available + in the Makefile for the aclocal.m4 rule. + (goffice_reqs): Require pango 1.8.1; it is not good if we + _slightly_ differ from gnumeric. + +2005-03-09 Morten Welinder + + * goffice/utils/datetime.h (WEEKNUM_METHOD_SUNDAY): Define using + enum. + + * goffice/utils/datetime.c (datetime_weeknum, + datetime_g_days_between, datetime_g_months_between, + datetime_g_years_between): Use g_return_val_if_fail, not g_assert. + + * goffice/utils/format.c: Fix long double compilation. + +2005-03-08 Jody Goldberg + + The last of the code dependencies on gnumeric. Now I just need to + move the icons. + * goffice/gtk/go-action-combo-color.c (go_action_combo_color_new) : + use gtk_icon_theme_load_icon in place of gnm_app_get_pixbuf. + * goffice/gtk/goffice-gtk.c (update_preview_cb) : ditto. + +2005-03-08 Stepan Kasal + + * configure.in (AC_OUTPUT, AC_CONFIG_FILES): Use AC_CONFIG_FILES and + call AC_OUTPUT with no parameters; this was already available in + autoconf 2.52. + +2005-03-07 J.H.M. Dassen (Ray) + + * goffice/Makefile.am: Fixed inter-library dependencies; fix towards + -Wl,-z,defs buildability. + * goffice/graph/gog-grid-line.h, goffice/gtk/go-action-combo-stack.c, + goffice/ms-compat/god-drawing-ms.c: Switch to traditional C comments, + to be buildable by gcc -ansi. + +2005-03-07 Morten Welinder + + * configure.in: Pare down long double support checks to what is + needed. + * goffice/goffice-config.h: Don't install this, ... + * goffice/goffice-features.h: ... install this one instead. + +2005-03-07 Stepan Kasal + + * configure.in: Don't default to --without-gtk if gtk libs are not + found; remove checks for gconf, Corba and GNU make, as they are + not used in goffice; improve quoting and make use of AC_SUBST/2. + * goffice/app/Makefile.am (UNUSED): List the unused files lingering + in the CVS, ... + (EXTRA_DIST): ... and distribute them. + * goffice/gtk/Makefile.am (UNUSED, EXTRA_DIST): Likewise. + * goffice/cut-n-paste/pcre/Makefile.am: Refresh. + +2005-03-07 Morten Welinder + + * configure.in: Use largefile apis. + + * goffice/utils/go-libxml-extras.c (go_xml_parse_file): + New replacement for xmlParseFile. All users changed. + + * goffice/utils/go-math.c (go_math_init): Verify properties of + go_nanl, go_pinfl, and go_ninfl. + + * goffice/utils/format.c (number_format_init): Fix initialization + of beyond_precision and beyond_precisionl. + +2005-03-06 Jean Brefort + + * goffice/graph/gog-axis.c: (map_discrete_to_view), + (map_discrete_from_view), (map_linear_to_view), + (map_linear_from_view), (map_log_to_view), (map_log_from_view), + (gog_axis_map_from_view), (gog_axis_map_to_view), + (draw_axis_from_a_to_b), (gog_axis_view_render): changed map_to_canvas to + map_to_view and added gog_axis_map_from_canvas and support. + * goffice/graph/gog-axis.h: ditto. + * goffice/graph/gog-error-bar.c: (gog_error_bar_render): ditto. + * goffice/graph/gog-grid-line.c: (gog_grid_line_view_render): ditto. + * plugins/plot_barcol/gog-barcol.c: (barcol_draw_rect): ditto. + * plugins/plot_barcol/gog-line.c: (gog_line_view_render): ditto. + * plugins/plot_boxes/gog-boxplot.c: (gog_box_plot_view_render): ditto. + * plugins/plot_radar/gog-radar.c: (gog_radar_view_render): ditto. + * plugins/plot_surface/gog-surface.c: (gog_contour_view_render): ditto. + * plugins/plot_xy/gog-xy.c: (gog_xy_view_render): ditto. + +2005-03-06 Jon K Hellan + + * goffice/utils/go-file.c (go_get_mime_type): New. + +2005-03-06 Emmanuel Pacaud + + * goffice/app/go-plugin.c (go_plugins_init): append goffice plugin + directory to plugin_dirs list. + (go_plugins_get_plugin_dir): new. + +2005-03-04 Jody Goldberg + + * goffice/app/module-plugin-defs.h : remove the ugly go_get_current_plugin + and the PLUGIN & PLUGIN_CLASS macras. + +2005-03-04 Morten Welinder + + * goffice/utils/go-math.c (go_finite): Make this a function and + add a fallback definition. + + * goffice/graph/gog-renderer-pixbuf.c + (gog_renderer_pixbuf_finalize): No need to call + go_pango_fc_font_map_cache_clear. + (gog_renderer_pixbuf_get_pango_context): Use Gimp's leak + work-around instead. + + * goffice/utils/go-font.c (go_fonts_list_families, + go_fonts_list_sizes): New function. Rework all references to + go_fonts_family_names, go_fonts_font_size_names, + go_fonts_font_size_pts to use these. (This gets rid of one more + direct -- and wrong -- reference to the ft2 pango backend.) + (go_pango_fc_font_map_cache_clear): Remove. + + * goffice/utils/go-math.c (go_stern_brocot): Use double, not + float. + + * goffice/utils/go-glib-extras.c (go_mem_chunk_new): Drop + references to gnm_float. + +2005-03-04 Stepan Kasal + + * goffice/cut-n-paste/foocanvas/foo-canvas.c: Refresh. + +2005-03-02 Ivan, Wong Yat Cheung + + * goffice/gtk/goffice-gtk.c: Use gsf_input_textline_utf8_gets() + to read .hhmap file which stores topic_string-context_id pairs. + Become more verbose when topic is not found. + go_gtk_notice_(nonmodal_)dialog/go_gtk_query_yes_no now + accept va_arg. + +2005-03-02 Stepan Kasal + + * configure.in: Add check for Xrender. + * goffice-plugins.mk (INCLUDES): Fix. + * goffice/cut-n-paste/foocanvas/*: Refresh. + +2005-02-28 Jean Brefort + + * goffice/utils/go-glib-extras.c: replaced gnumeric-config.h by + goffice-config.h + * goffice/gtk/go-action-combo-pixmaps.h: updated gui-utils to gtk + for includes paths. + * goffice/gtk/go-font-sel.c: ditto. + * goffice/gtk/go-format-sel.c: ditto. + * goffice/utils/go-glib-extras.c: ditto. + * goffice/utils/go-gradient.c: ditto. + * goffice/utils/go-line.c: ditto. + * goffice/utils/go-marker.c: ditto. + * goffice/utils/go-pattern.c: ditto. + * plugins/plot_barcol/gog-barcol-prefs.c: ditto. + * plugins/plot_boxes/gog-boxplot.c: ditto. + * plugins/plot_pie/gog-pie-prefs.c: ditto. + * plugins/plot_surface/gog-contour-prefs.c: ditto. + * plugins/plot_xy/gog-bubble-prefs.c: ditto. + +2005-02-28 Christopher James Lahey + + * configure.in, goffice-plugins.mk: Changed gnumeric to goffice + here. + +2005-02-27 Christopher James Lahey + + * Makefile.am (pkgconfigdir), configure.in (AC_OUTPUT): Create and + install libgoffice-1.pc. + +2005-02-27 Christopher James Lahey + + * libgoffice-1.pc.in: New file. + +2005-02-27 Jody Goldberg + + * configure.in : Quick and dirty subset of gnumeric + +2005-02-26 Jody Goldberg + + * graph/Makefile.am : move the plugins into the root dir + so that the plugins can link against libgoffice + +2005-02-22 Morten Welinder + + * gui-utils/go-gui-utils.c (filter_images): If we have no + mime-type, fall back to checking the extension against what + gdk-pixbuf supports. Adapted from bug #164589. + +2005-02-17 Stepan Kasal + + * Makefile.am (INCLUDES): Remove -I$(top_srcdir)/src/cut-n-paste-code/goffice. + Fix the remaining includes. + * goffice.c (go_sys_icon_dir): Fix typo. + +2005-02-17 Emmanuel Pacaud + + * gui-utils/go-gui-utils.c: include errno.h + (go_help_display): link is part of paths. + +2005-02-16 Jean Brefort + + * graph/gog-renderer-pixbuf.c: (gog_renderer_pixbuf_draw_path): rewrite to + use large paths at once and have better dashes support + * graph/plugins/plot_xy/gog-xy.c: (gog_xy_view_render): render path at once + and use ART_PATH_STROKE_CAP_ROUND for better rendering of large lines. + * utils/go-line.c: (go_line_build_vpath): new function, builds a vpath from + a set of points. + * utils/go-line.h: ditto. + +2005-02-16 Jody Goldberg + + * utils/go-file.c (go_url_check_extension) : pull down from gnumeric + + * gui-utils/go-gui-utils.c (go_gtk_button_new_with_stock) : renamed + from go_gtk_button_new_with_stock_image. + (go_libglade_new) : use go_sys_data_dir. + (go_gtk_widget_disable_focus) : renamed from go_widget_disable_focus. + (go_pango_measure_string) : renamed from go_measure_string. + (go_gtk_window_set_transient) : renamed from go_window_set_transient. + (go_gtk_nonmodal_dialog) : renamed from gnumeric_non_modal_dialog. + (go_gtk_file_sel_dialog) : renamed from gnumeric_dialog_file_selection. + (go_gtk_select_image) : renamed from gui_image_file_select. + (gui_get_image_save_info) : pulled in from gnumeric. + (go_atk_setup_label) : renamed from gnm_setup_label_atk. + (go_help_display) : pulled down from gnumeric and made generic. + (go_gtk_help_button_init) : ditto. + (go_gtk_url_is_writeable) : ditto. + (go_gtk_dialog_run) : pulled from gnumeric + (go_gtk_notice_dialog) : ditto. + (go_gtk_notice_nonmodal_dialog) : ditto. + (go_gtk_query_yes_no) : ditto. + + * gui-utils/Makefile.am : Add libhtml_stub + + * graph/gog-renderer-pixbuf.c (gog_renderer_pixbuf_init) : init the + dpis. + (gog_renderer_pixbuf_get_pango_context) : use the stored calculated + dpi rather than gconf + (gog_renderer_pixbuf_update) : store the dpi + + * goffice.c (libgoffice_init) : init the paths. We may want to expand + this at some point to allow cmd-line or env-var override. + (go_sys_data_dir) : new. + (go_sys_icon_dir) : new. + +2005-02-15 Stepan Kasal + + * gui-utils/go-marshalers.list: Remove, merge with ... + * utils/go-marshalers.list: ... this one, adjust all callers. + * gui-utils/Makefile.am: Nuke the rules for go-marshalers. + * utils/Makefile.am: Typo. + * goffice.mk (INCLUDES): Add $(builddir)/../cut-n-paste-code, + for the generated header goffice/utils/go-marshalers.h. + +2005-02-11 Morten Welinder + + * gui-utils/go-combo-text.c (cb_list_changed): Plug leak. + + * utils/go-font.c (go_fonts_init): Copy family names instead of + relying on pango leak. Destroy fontmap only after we get the + names out. + + * gui-utils/go-format-sel.c (generate_preview): Avoid crash in + g_warning. + +2005-02-09 Stepan Kasal + + * app/error-info.h: Change the guard to GO_ERROR_INFO_H. + +2005-02-08 Jon K Hellan + + * utils/format.h: Include numbers.h. + (render_number): Make declaration match definition. + +2005-02-08 Morten Welinder + + * utils/go-font.c (go_fonts_init): Plug leak. + +2005-02-08 Jody Goldberg + + * Release 1.5.0 + +2005-02-05 Morten Welinder + + * graph/gog-renderer-gnome-print.c (get_font): Return a + PangoFontDescription, not a GnomeFont. All callers changed. + +2005-02-04 Morten Welinder + + * graph/gog-renderer-pixbuf.c (gog_renderer_pixbuf_finalize): + Remove old #ifdef HAVE_foo stuff. + * graph/gog-renderer-gnome-print.c: Ditto. + +2005-02-03 Jean Brefort + + * graph/gog-axis.c: (map_linear_auto_bound): change < to >, fix #164593. + +2005-01-25 Jody Goldberg + + * graph/plugins/plot_boxes/gog-boxplot.c (gog_box_plot_pref) : fix + signature. + +2005-01-24 Jean Brefort + + * graph/goffice-graph.h: add GOG_AXIS_SET_X. + * graph/gog-chart.c: (role_grid_can_add), + (gog_chart_axis_set_assign), (gog_chart_view_size_allocate): add grid + when we have only an X axis. + * graph/plugins/Makefile.am: add box-plots plugin + * graph/plugins/plot_boxes/Makefile.am: new plugin. + * graph/plugins/plot_boxes/gog-boxplot-prefs.glade: + * graph/plugins/plot_boxes/gog-boxplot.c: ditto. + * graph/plugins/plot_boxes/gog-boxplot.h: ditto. + * graph/plugins/plot_boxes/plot-types.xml.in: ditto. + * graph/plugins/plot_boxes/plugin.xml.in: ditto. + * pixmaps/Makefile.am: add box-plots pixmaps. + * pixmaps/boxplot.xpm: ditto. + * pixmaps/chart_boxplot_1_1.png: ditto. + * pixmaps/chart_boxplot_1_1.svg: ditto. + +2005-01-22 Jean Brefort + + * graph/gog-renderer-gnome-print.c: + (gog_renderer_gnome_print_draw_bezier_path), + (gog_renderer_gnome_print_class_init): add Bezier paths support. + * graph/gog-renderer-impl.h: ditto. + * graph/gog-renderer-pixbuf.c: + (gog_renderer_pixbuf_draw_bezier_path), + (gog_renderer_pixbuf_class_init): ditto. + * graph/gog-renderer-svg.c: (gog_renderer_svg_draw_bezier_path), + (gog_renderer_svg_class_init): ditto. + * graph/gog-renderer.c: (gog_renderer_draw_bezier_path): ditto. + * graph/gog-renderer.h: ditto. + * graph/plugins/plot_xy/gog-xy.c: (gog_xy_set_property), + (gog_xy_get_property), (gog_xy_plot_class_init), + (gog_xy_view_render): add spline interpolation support. + * graph/plugins/plot_xy/gog-xy.h: ditto. + * graph/plugins/plot_xy/plot-types.xml.in: ditto. + * pixmaps/Makefile.am: install chart_scatter_3_3.png. + * utils/go-line.c: (go_line_build_bpath): new function, builds a Bezier path + from an array of points. + * utils/go-line.h: add go_line_build_bpath. + +2005-01-17 Jody Goldberg + + * Release 1.4.2 + +2005-01-14 Jody Goldberg + + http://bugzilla.gnome.org/show_bug.cgi?id=163939 + * graph/gog-renderer-pixbuf.c (gog_renderer_pixbuf_update) : zero + sized views are not relevent, and does not require any redrawing. + +2005-01-11 Morten Welinder + + * gui-utils/go-combo-text.c (go_combo_text_init): Bind to the + treeview's cursor_changed signal, not the selection's changed + signal. [#163412]. + +2005-01-06 Morten Welinder + + * utils/go-math.c (go_fake_floor, go_fake_ceil): Fix negative + case. + +2005-01-05 Jean Brefort + + * pixmaps/Makefile.am: add chart_contour_1_1.png. + * pixmaps/chart_contour_1_1.png: new icon by Emmanuel Pacaud. + * pixmaps/chart_contour_1_1.svg: ditto. + * pixmaps/chart_contour_1_2.png: ditto. + * pixmaps/chart_contour_1_2.svg: ditto. + * pixmaps/chart_scatter_3_3.png: ditto. + * pixmaps/chart_scatter_3_3.png: ditto. + * graph/plugins/plot_surface/plot_types.xml.in: use chart_contour_1_1.png. + + +2005-01-05 Morten Welinder + + * graph/gog-series.c (gog_series_get_element): Fix NULL/FALSE + confusion. + +2004-12-17 Jody Goldberg + + From Ivan Wong : + http://bugzilla.gnome.org/show_bug.cgi?id=159860 + * utils/go-file.c (go_url_show) : Use ShellExecute on win32 + +2004-12-17 Emmanuel Pacaud + + * graph/plot-xy/gog-xy.c (gog_xy_series_init_style): don't disable + theming. + +2004-12-17 Emmanuel Pacaud + + * graph/gog-series.c (gog_series_dataset_dim_changed): resize for every + label change. + * graph/gog-axis.c (gog_axis_update): no need to force resize for + discrete axis, it's handled by gog_series_dataset_dim_changed. + 2004-12-15 Morten Welinder * gui-utils/go-action-combo-stack.c (get_key_at_path): Don't crash @@ -517,7 +3171,7 @@ 2004-09-15 Emmanuel Pacaud http://bugzilla.gnome.org/show_bug.cgi?id=152499 - * graph/gog-error-bar.c (gog_error_bar_get_minmax): check wether + * graph/gog-error-bar.c (gog_error_bar_get_minmax): check whether associated GogSeries is valid. 2004-09-15 Emmanuel Pacaud diff --git a/lib/goffice-0.0.4/INSTALL b/lib/goffice-0.0.4/INSTALL new file mode 100644 index 0000000000..54caf7c190 --- /dev/null +++ b/lib/goffice-0.0.4/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/lib/goffice-0.0.4/MAINTAINERS b/lib/goffice-0.0.4/MAINTAINERS new file mode 100644 index 0000000000..b662d2d157 --- /dev/null +++ b/lib/goffice-0.0.4/MAINTAINERS @@ -0,0 +1,2 @@ +Email: jody@gnome.org +Email: terra@gnome.org diff --git a/lib/goffice-0.0.4/Makefile.am b/lib/goffice-0.0.4/Makefile.am new file mode 100644 index 0000000000..8753dea752 --- /dev/null +++ b/lib/goffice-0.0.4/Makefile.am @@ -0,0 +1,17 @@ +# Makefile.am for goffice + +SUBDIRS = goffice tests pixmaps plugins +# po + +EXTRA_DIST = README NEWS BUGS MAINTAINERS AUTHORS \ + goffice.mk \ + goffice-plugins.mk \ + intltool-extract.in \ + intltool-update.in \ + intltool-merge.in +DISTCLEANFILES = intltool-extract intltool-merge intltool-update + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libgoffice-1.pc + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice-0.0.4/NEWS b/lib/goffice-0.0.4/NEWS new file mode 100644 index 0000000000..7b3889d529 --- /dev/null +++ b/lib/goffice-0.0.4/NEWS @@ -0,0 +1,101 @@ +goffice 0.0.4: + +Emmanuel Pacaud: + * Fix polar plot clipping. + * Fix line/area/barcol data position. + * Let user change bounds for discrete axes [#309468]. + +Jean Brefort: + * Box-plots use raw data [#308136]. + +Jody: + * GOFormat now matches against all tuples. + * Add GORotationSel from Gnumeric. + * fixed number of digits for denominator regexp [#144112] + +-------------------------------------------------------------------------- +goffice 0.0.3: + +Emmanuel Pacaud: + * Add support for manual position/size of graph objects. + * Add rotated text support. + * Add optional cairo renderer. + * Fix swatch position in legends. + * Sample graph in guru has the same aspect ratio than the edited graph + [#150458]. + * Displays Y axis labels vertically by default [#301582]. + * Add pattern support for SVG output [#310320]. + +Jean Brefort: + * Add series lines in bars and columns plots. + * Add drop lines in lines and xy plots. + * Add lines to min/max plots and dropbars. + +Morten: + * Fix problem with currency formats and problem with Euro [#305313]. + * Support fd://1 syntax for go_file_create. + * Fix ABR (or worse) for formats ending in "[$...]". + +-------------------------------------------------------------------------- +goffice 0.0.2: + +Emmanuel Pacaud: + * Make compass position and alignment of graph object persistent and + add a GUI for these properties [#124322]. + * Fix some libglade warnings [#305010]. + * Fix contour plots axes. + +Ivan, Y.C. Wong: + * Fix encoding bug when open file with non-ascii name in shell. + * Fix Mime Type detection on Win32 [#304074]. + +Jean Brefort: + * Add linear regressions in scatter plots. + * Fix shotcut in format selector [#305635]. + * Add MinMax and DropBar plots. + * Fixed various concerns in contour plots. + +J.H.M. Dassen (Ray): + * Ensure at link time that the shared objects, both the library and + the plugins, contain complete dependency information for all + symbols they use from elsewhere. + +Jody: + * Fix foocanvas's show/hide item for widgets. + * Fix the format selector preview. + * Improve selection of a default plot style. + +Morten: + * Fix theme bug. [#303707] + * Fix insert-image criticals. [#305009] + +-------------------------------------------------------------------------- +goffice 0.0.1 + +Emmanuel Pacaud: + * Add support for polar plots. + * Add multiple axes support for xy, line, barcol, bubble plots. + * Fix axis rendering order for contour, area and radar plots. + * avoid use of setlocale in svg renderer. [#172726] + * Add radar axis labels [#152695] + * Fix crash in print preview with log plots. [#170547] + * Fix crahs when deleting a serie. [#166403] + * Fix transparency in pixbuf renderer. [159368] + +Jean Brefort + * Fixed opacity problem in color selector (#135434) + +Jody: + * Split from gnumeric + +Ivan Wong: + * Become more robust when reading .hhmap files and finding help + topics on Win32. + +Morten: + * Fix various old number rendering bugs. [#170000] + * Update to PCRE 5.0 + * Give GOComboBox a themable add-tearoffs style. + * Fix icon sizes in color action combos. [#302880] + +-------------------------------------------------------------------------- diff --git a/lib/goffice-0.0.4/README b/lib/goffice-0.0.4/README new file mode 100644 index 0000000000..9c4019791a --- /dev/null +++ b/lib/goffice-0.0.4/README @@ -0,0 +1,41 @@ +GOffice -- A glib/gtk set of document centric objects and utilities +Jody Goldberg + +There are common operations for document centric applications that are +conceptually simple, but complex to implement fully. + - plugins + - load/save documents + - undo/redo + +To report goffice bugs, please visit bugzilla.gnome.org. + +goffice is licensed under the terms of the GNU GPL included in the +file COPYING. + +Requirements +------------ + +You need: Debian package name + glib >= 2.6.0 libglib2.0-dev + gtk+ >= 2.6.0 libgtk2.0-dev + pango >= 1.8.1 libpango1.0-dev + libgnomeprint >= 2.8.2 libgnomeprint2.2-dev + libgsf >= 1.12.2 libgsf-1-dev + libglade >= 2.3.6 libglade2-dev + gnome-xml >= 2.4.12 libxml2-dev + libart >= 2.3.11 libart-2.0-dev + NOTE: gnome-xml is also known as libxml + +Mailing lists +------------- + + There is a mailing list used to discuss Gnumeric, to subscribe +send a mail to: + + gnumeric-list-request@gnome.org + + And in the body of the message write "subscribe" + + An archive of the mailing lists is available in: + + http://www.gnome.org/mailing-lists/archives/gnumeric-list/ diff --git a/lib/goffice-0.0.4/aclocal.m4 b/lib/goffice-0.0.4/aclocal.m4 new file mode 100644 index 0000000000..577a79a3af --- /dev/null +++ b/lib/goffice-0.0.4/aclocal.m4 @@ -0,0 +1,7683 @@ +# generated automatically by aclocal 1.7.9 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Do all the work for Automake. -*- Autoconf -*- + +# This macro actually does too much some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 10 + +AC_PREREQ([2.54]) + +# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow +# the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG(AMTAR, tar) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl + +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.7.9])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# +# Check to make sure that the build environment is sane. +# + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# -*- Autoconf -*- + + +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# AM_AUX_DIR_EXPAND + +# Copyright 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +# Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50]) + +AC_DEFUN([AM_AUX_DIR_EXPAND], [ +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. + +# Copyright 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# AM_PROG_INSTALL_STRIP + +# Copyright 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# -*- Autoconf -*- +# Copyright (C) 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# serial 5 -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +#serial 2 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 5 + +AC_PREREQ(2.52) + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]) +fi])]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + +# serial 47 AC_PROG_LIBTOOL +# Debian $Rev: 214 $ + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-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. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # 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"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # 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. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux*) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED +]) +AC_MSG_RESULT([$SED]) +]) + + +dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) +# serial 2 IT_PROG_INTLTOOL +AC_DEFUN([IT_PROG_INTLTOOL], +[ + +if test -n "$1"; then + AC_MSG_CHECKING(for intltool >= $1) + + INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ printf "%d", $[1] * 100 + $[2]; }'` + INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $[2]; }' < ${ac_aux_dir}/intltool-update.in` + changequote({{,}}) + INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split(${{2}}, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in` + changequote([,]) + + if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then + AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) + else + AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found. Your intltool is too old. You need intltool $1 or later.]) + exit 1 + fi +fi + + INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' + INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' + INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + +AC_SUBST(INTLTOOL_DESKTOP_RULE) +AC_SUBST(INTLTOOL_DIRECTORY_RULE) +AC_SUBST(INTLTOOL_KEYS_RULE) +AC_SUBST(INTLTOOL_PROP_RULE) +AC_SUBST(INTLTOOL_OAF_RULE) +AC_SUBST(INTLTOOL_PONG_RULE) +AC_SUBST(INTLTOOL_SERVER_RULE) +AC_SUBST(INTLTOOL_SHEET_RULE) +AC_SUBST(INTLTOOL_SOUNDLIST_RULE) +AC_SUBST(INTLTOOL_UI_RULE) +AC_SUBST(INTLTOOL_XAM_RULE) +AC_SUBST(INTLTOOL_KBD_RULE) +AC_SUBST(INTLTOOL_XML_RULE) +AC_SUBST(INTLTOOL_XML_NOMERGE_RULE) +AC_SUBST(INTLTOOL_CAVES_RULE) +AC_SUBST(INTLTOOL_SCHEMAS_RULE) +AC_SUBST(INTLTOOL_THEME_RULE) + +# Use the tools built into the package, not the ones that are installed. + +INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract' +INTLTOOL_MERGE='$(top_builddir)/intltool-merge' +INTLTOOL_UPDATE='$(top_builddir)/intltool-update' + +AC_SUBST(INTLTOOL_EXTRACT) +AC_SUBST(INTLTOOL_MERGE) +AC_SUBST(INTLTOOL_UPDATE) + +AC_PATH_PROG(INTLTOOL_PERL, perl) +if test -z "$INTLTOOL_PERL"; then + AC_MSG_ERROR([perl not found; required for intltool]) +fi +if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then + AC_MSG_ERROR([perl 5.x required for intltool]) +fi +if test "x$2" != "xno-xml"; then + AC_MSG_CHECKING([for XML::Parser]) + if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then + AC_MSG_RESULT([ok]) + else + AC_MSG_ERROR([XML::Parser perl module is required for intltool]) + fi +fi + +AC_PATH_PROG(INTLTOOL_ICONV, iconv, iconv) +AC_PATH_PROG(INTLTOOL_MSGFMT, msgfmt, msgfmt) +AC_PATH_PROG(INTLTOOL_MSGMERGE, msgmerge, msgmerge) +AC_PATH_PROG(INTLTOOL_XGETTEXT, xgettext, xgettext) + +# Remove file type tags (using []) from po/POTFILES. + +ifdef([AC_DIVERSION_ICMDS],[ + AC_DIVERT_PUSH(AC_DIVERSION_ICMDS) + [mv -f po/POTFILES po/POTFILES.tmp + sed -e '/[[]encoding.*]/d' -e 's/[[].*] *//' < po/POTFILES.tmp > po/POTFILES + rm -f po/POTFILES.tmp + ]dnl + AC_DIVERT_POP() +],[ + ifdef([AC_CONFIG_COMMANDS_PRE],[ + AC_CONFIG_COMMANDS_PRE([ + [mv -f po/POTFILES po/POTFILES.tmp + sed -e '/[[]encoding.*]/d' -e 's/[[].*] *//' < po/POTFILES.tmp > po/POTFILES + rm -f po/POTFILES.tmp + ]dnl + ]) + ]) +]) + +# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT. + +AC_CONFIG_COMMANDS([intltool], [ + +intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \ + -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \ + -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \ + -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \ + -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \ + -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'" + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \ + > intltool-extract.out +if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then + rm -f intltool-extract.out +else + mv -f intltool-extract.out intltool-extract +fi +chmod ugo+x intltool-extract +chmod u+w intltool-extract + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \ + > intltool-merge.out +if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then + rm -f intltool-merge.out +else + mv -f intltool-merge.out intltool-merge +fi +chmod ugo+x intltool-merge +chmod u+w intltool-merge + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \ + > intltool-update.out +if cmp -s intltool-update intltool-update.out 2>/dev/null; then + rm -f intltool-update.out +else + mv -f intltool-update.out intltool-update +fi +chmod ugo+x intltool-update +chmod u+w intltool-update + +], INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir} +INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}' +MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}' +XGETTEXT='${INTLTOOL_XGETTEXT}') + +]) + +# deprecated macros +AC_DEFUN([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL($@)]) + + +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) + + +# Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +AC_PREREQ(2.50) + +# AM_PROG_LEX +# ----------- +# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a +# "missing" invocation, for better error output. +AC_DEFUN([AM_PROG_LEX], +[AC_REQUIRE([AM_MISSING_HAS_RUN])dnl +AC_REQUIRE([AC_PROG_LEX])dnl +if test "$LEX" = :; then + LEX=${am_missing_run}flex +fi]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_ifval([$1], [$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +if test $pkg_failed = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" 1>&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details.])], + [$4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES + +dnl GNOME_COMPILE_WARNINGS +dnl Turn on many useful compiler warnings +dnl For now, only works on GCC +AC_DEFUN([GNOME_COMPILE_WARNINGS],[ + dnl ****************************** + dnl More compiler warnings + dnl ****************************** + + AC_ARG_ENABLE(compile-warnings, + AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@], + [Turn on compiler warnings]),, + [enable_compile_warnings="m4_default([$1],[yes])"]) + + warnCFLAGS= + if test "x$GCC" != xyes; then + enable_compile_warnings=no + fi + + warning_flags= + realsave_CFLAGS="$CFLAGS" + + case "$enable_compile_warnings" in + no) + warning_flags= + ;; + minimum) + warning_flags="-Wall" + ;; + yes) + warning_flags="-Wall -Wmissing-prototypes" + ;; + maximum|error) + warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith" + CFLAGS="$warning_flags $CFLAGS" + for option in -Wno-sign-compare; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + AC_MSG_CHECKING([whether gcc understands $option]) + AC_TRY_COMPILE([], [], + has_option=yes, + has_option=no,) + CFLAGS="$SAVE_CFLAGS" + AC_MSG_RESULT($has_option) + if test $has_option = yes; then + warning_flags="$warning_flags $option" + fi + unset has_option + unset SAVE_CFLAGS + done + unset option + if test "$enable_compile_warnings" = "error" ; then + warning_flags="$warning_flags -Werror" + fi + ;; + *) + AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings) + ;; + esac + CFLAGS="$realsave_CFLAGS" + AC_MSG_CHECKING(what warning flags to pass to the C compiler) + AC_MSG_RESULT($warning_flags) + + AC_ARG_ENABLE(iso-c, + AC_HELP_STRING([--enable-iso-c], + [Try to warn if code is not ISO C ]),, + [enable_iso_c=no]) + + AC_MSG_CHECKING(what language compliance flags to pass to the C compiler) + complCFLAGS= + if test "x$enable_iso_c" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) complCFLAGS="$complCFLAGS -ansi" ;; + esac + case " $CFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) complCFLAGS="$complCFLAGS -pedantic" ;; + esac + fi + fi + AC_MSG_RESULT($complCFLAGS) + + WARN_CFLAGS="$warning_flags $complCFLAGS" + AC_SUBST(WARN_CFLAGS) +]) + +dnl For C++, do basically the same thing. + +AC_DEFUN([GNOME_CXX_WARNINGS],[ + AC_ARG_ENABLE(cxx-warnings, + AC_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@] + [Turn on compiler warnings.]),, + [enable_cxx_warnings="m4_default([$1],[minimum])"]) + + AC_MSG_CHECKING(what warning flags to pass to the C++ compiler) + warnCXXFLAGS= + if test "x$GCC" != xyes; then + enable_compile_warnings=no + fi + if test "x$enable_cxx_warnings" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CXXFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) warnCXXFLAGS="-Wall -Wno-unused" ;; + esac + + ## -W is not all that useful. And it cannot be controlled + ## with individual -Wno-xxx flags, unlike -Wall + if test "x$enable_cxx_warnings" = "xyes"; then + warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual" + fi + fi + fi + AC_MSG_RESULT($warnCXXFLAGS) + + AC_ARG_ENABLE(iso-cxx, + AC_HELP_STRING([--enable-iso-cxx], + [Try to warn if code is not ISO C++ ]),, + [enable_iso_cxx=no]) + + AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler) + complCXXFLAGS= + if test "x$enable_iso_cxx" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CXXFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) complCXXFLAGS="$complCXXFLAGS -ansi" ;; + esac + + case " $CXXFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) complCXXFLAGS="$complCXXFLAGS -pedantic" ;; + esac + fi + fi + AC_MSG_RESULT($complCXXFLAGS) + + WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS" + AC_SUBST(WARN_CXXFLAGS) +]) + +# Copyright (C) 1995-2002 Free Software Foundation, Inc. +# Copyright (C) 2001-2003,2004 Red Hat, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995, 1996 +# +# Modified to never use included libintl. +# Owen Taylor , 12/15/1998 +# +# Major rework to remove unused code +# Owen Taylor , 12/11/2002 +# +# Added better handling of ALL_LINGUAS from GNU gettext version +# written by Bruno Haible, Owen Taylor 5/30/3002 +# +# Modified to require ngettext +# Matthias Clasen 08/06/2004 +# +# We need this here as well, since someone might use autoconf-2.5x +# to configure GLib then an older version to configure a package +# using AM_GLIB_GNU_GETTEXT +AC_PREREQ(2.53) + +dnl +dnl We go to great lengths to make sure that aclocal won't +dnl try to pull in the installed version of these macros +dnl when running aclocal in the glib directory. +dnl +m4_copy([AC_DEFUN],[glib_DEFUN]) +m4_copy([AC_REQUIRE],[glib_REQUIRE]) +dnl +dnl At the end, if we're not within glib, we'll define the public +dnl definitions in terms of our private definitions. +dnl + +# GLIB_LC_MESSAGES +#-------------------- +glib_DEFUN([GLIB_LC_MESSAGES], + [AC_CHECK_HEADERS([locale.h]) + if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + +# GLIB_PATH_PROG_WITH_TEST +#---------------------------- +dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# GLIB_WITH_NLS +#----------------- +glib_DEFUN([GLIB_WITH_NLS], + dnl NLS is obligatory + [USE_NLS=yes + AC_SUBST(USE_NLS) + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + AC_CHECK_HEADER(libintl.h, + [gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, + [AC_TRY_LINK([ +#include +], + [return !ngettext ("","", 1)], + gt_cv_func_ngettext_libc=yes, + gt_cv_func_ngettext_libc=no) + ]) + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, + [AC_TRY_LINK([ +#include +], + [return !dgettext ("","")], + gt_cv_func_dgettext_libc=yes, + gt_cv_func_dgettext_libc=no) + ]) + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CHECK_FUNCS(bind_textdomain_codeset) + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dgettext, + gt_cv_func_dgettext_libintl=yes)])]) + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + AC_MSG_CHECKING([if -liconv is needed to use gettext]) + AC_MSG_RESULT([]) + AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dcgettext, + [gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv], + :,-liconv)], + :,-liconv) + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + AC_CHECK_FUNCS(bind_textdomain_codeset) + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + AC_DEFINE(HAVE_GETTEXT,1, + [Define if the GNU gettext() function is already present or preinstalled.]) + GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [case $host in + *-*-solaris*) + dnl On Solaris, if bind_textdomain_codeset is in libc, + dnl GNU format message catalog is always supported, + dnl since both are added to the libc all together. + dnl Hence, we'd like to go with DATADIRNAME=share and + dnl and CATOBJEXT=.gmo in this case. + AC_CHECK_FUNC(bind_textdomain_codeset, + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac]) + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + ]) + + if test "$gt_cv_have_gettext" = "yes" ; then + AC_DEFINE(ENABLE_NLS, 1, + [always defined to indicate that i18n is enabled]) + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is not GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLLIBS) + AC_SUBST(PO_IN_DATADIR_TRUE) + AC_SUBST(PO_IN_DATADIR_FALSE) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +# AM_GLIB_GNU_GETTEXT +# ------------------- +# Do checks necessary for use of gettext. If a suitable implementation +# of gettext is found in either in libintl or in the C library, +# it will set INTLLIBS to the libraries needed for use of gettext +# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable +# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() +# on various variables needed by the Makefile.in.in installed by +# glib-gettextize. +dnl +glib_DEFUN([GLIB_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + + GLIB_LC_MESSAGES + GLIB_WITH_NLS + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) +# ------------------------------- +# Define VARIABLE to the location where catalog files will +# be installed by po/Makefile. +glib_DEFUN([GLIB_DEFINE_LOCALEDIR], +[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl +glib_save_prefix="$prefix" +glib_save_exec_prefix="$exec_prefix" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +if test "x$CATOBJEXT" = "x.mo" ; then + localedir=`eval echo "${libdir}/locale"` +else + localedir=`eval echo "${datadir}/locale"` +fi +prefix="$glib_save_prefix" +exec_prefix="$glib_save_exec_prefix" +AC_DEFINE_UNQUOTED($1, "$localedir", + [Define the location where the catalogs will be installed]) +]) + +dnl +dnl Now the definitions that aclocal will find +dnl +ifdef(glib_configure_in,[],[ +AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) +AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) +])dnl + diff --git a/lib/goffice-0.0.4/config.guess b/lib/goffice-0.0.4/config.guess new file mode 100755 index 0000000000..ad5281e66e --- /dev/null +++ b/lib/goffice-0.0.4/config.guess @@ -0,0 +1,1466 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-08-03' + +# This file 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. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + *86) UNAME_PROCESSOR=i686 ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/lib/goffice-0.0.4/config.sub b/lib/goffice-0.0.4/config.sub new file mode 100755 index 0000000000..1c366dfde9 --- /dev/null +++ b/lib/goffice-0.0.4/config.sub @@ -0,0 +1,1579 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-07-08' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ms1 \ + | msp430 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m32c) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | ms1-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + m32c-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/lib/goffice-0.0.4/configure b/lib/goffice-0.0.4/configure new file mode 100755 index 0000000000..60fc545411 --- /dev/null +++ b/lib/goffice-0.0.4/configure @@ -0,0 +1,28301 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for goffice 0.0.4. +# +# Report bugs to . +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-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. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='goffice' +PACKAGE_TARNAME='goffice' +PACKAGE_VERSION='0.0.4' +PACKAGE_STRING='goffice 0.0.4' +PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice' + +ac_unique_file="goffice/goffice.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot GOFFICE_LIB_VERSION MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT INTLTOOL_DESKTOP_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_KEYS_RULE INTLTOOL_PROP_RULE INTLTOOL_OAF_RULE INTLTOOL_PONG_RULE INTLTOOL_SERVER_RULE INTLTOOL_SHEET_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_UI_RULE INTLTOOL_XAM_RULE INTLTOOL_KBD_RULE INTLTOOL_XML_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_CAVES_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_THEME_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE INTLTOOL_PERL INTLTOOL_ICONV INTLTOOL_MSGFMT INTLTOOL_MSGMERGE INTLTOOL_XGETTEXT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE YACC LEX LEXLIB LEX_OUTPUT_ROOT LN_S EGREP ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL ACLOCAL_AMFLAGS PKG_CONFIG ac_pt_PKG_CONFIG CAIRO_CFLAGS CAIRO_LIBS GTK_CFLAGS GTK_LIBS GNOME_CFLAGS GNOME_LIBS WITH_CAIRO_TRUE WITH_CAIRO_FALSE WITH_GTK_TRUE WITH_GTK_FALSE WITH_GNOME_TRUE WITH_GNOME_FALSE GOFFICE_CFLAGS GOFFICE_LIBS RENDER_LIBS WINDRES ac_ct_WINDRES WITH_WIN32_TRUE WITH_WIN32_FALSE GOFFICE_PLUGIN_LDFLAGS GOFFICE_PLUGIN_LIBADD GLIB_GENMARSHAL GDK_PIXBUF_CSOURCE WARN_CFLAGS ALL_LINGUAS GETTEXT_PACKAGE USE_NLS MSGFMT GMSGFMT XGETTEXT CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLLIBS PO_IN_DATADIR_TRUE PO_IN_DATADIR_FALSE POFILES POSUB MKINSTALLDIRS EXTRA_LIBS EXTRA_INCLUDES goffice_datadir goffice_libdir goffice_icondir goffice_localedir goffice_plugindir goffice_gladedir LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +ac_env_CXX_set=${CXX+set} +ac_env_CXX_value=$CXX +ac_cv_env_CXX_set=${CXX+set} +ac_cv_env_CXX_value=$CXX +ac_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_env_CXXFLAGS_value=$CXXFLAGS +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_cv_env_CXXFLAGS_value=$CXXFLAGS +ac_env_CXXCPP_set=${CXXCPP+set} +ac_env_CXXCPP_value=$CXXCPP +ac_cv_env_CXXCPP_set=${CXXCPP+set} +ac_cv_env_CXXCPP_value=$CXXCPP +ac_env_F77_set=${F77+set} +ac_env_F77_value=$F77 +ac_cv_env_F77_set=${F77+set} +ac_cv_env_F77_value=$F77 +ac_env_FFLAGS_set=${FFLAGS+set} +ac_env_FFLAGS_value=$FFLAGS +ac_cv_env_FFLAGS_set=${FFLAGS+set} +ac_cv_env_FFLAGS_value=$FFLAGS +ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} +ac_env_PKG_CONFIG_value=$PKG_CONFIG +ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} +ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG +ac_env_CAIRO_CFLAGS_set=${CAIRO_CFLAGS+set} +ac_env_CAIRO_CFLAGS_value=$CAIRO_CFLAGS +ac_cv_env_CAIRO_CFLAGS_set=${CAIRO_CFLAGS+set} +ac_cv_env_CAIRO_CFLAGS_value=$CAIRO_CFLAGS +ac_env_CAIRO_LIBS_set=${CAIRO_LIBS+set} +ac_env_CAIRO_LIBS_value=$CAIRO_LIBS +ac_cv_env_CAIRO_LIBS_set=${CAIRO_LIBS+set} +ac_cv_env_CAIRO_LIBS_value=$CAIRO_LIBS +ac_env_GTK_CFLAGS_set=${GTK_CFLAGS+set} +ac_env_GTK_CFLAGS_value=$GTK_CFLAGS +ac_cv_env_GTK_CFLAGS_set=${GTK_CFLAGS+set} +ac_cv_env_GTK_CFLAGS_value=$GTK_CFLAGS +ac_env_GTK_LIBS_set=${GTK_LIBS+set} +ac_env_GTK_LIBS_value=$GTK_LIBS +ac_cv_env_GTK_LIBS_set=${GTK_LIBS+set} +ac_cv_env_GTK_LIBS_value=$GTK_LIBS +ac_env_GNOME_CFLAGS_set=${GNOME_CFLAGS+set} +ac_env_GNOME_CFLAGS_value=$GNOME_CFLAGS +ac_cv_env_GNOME_CFLAGS_set=${GNOME_CFLAGS+set} +ac_cv_env_GNOME_CFLAGS_value=$GNOME_CFLAGS +ac_env_GNOME_LIBS_set=${GNOME_LIBS+set} +ac_env_GNOME_LIBS_value=$GNOME_LIBS +ac_cv_env_GNOME_LIBS_set=${GNOME_LIBS+set} +ac_cv_env_GNOME_LIBS_value=$GNOME_LIBS +ac_env_GOFFICE_CFLAGS_set=${GOFFICE_CFLAGS+set} +ac_env_GOFFICE_CFLAGS_value=$GOFFICE_CFLAGS +ac_cv_env_GOFFICE_CFLAGS_set=${GOFFICE_CFLAGS+set} +ac_cv_env_GOFFICE_CFLAGS_value=$GOFFICE_CFLAGS +ac_env_GOFFICE_LIBS_set=${GOFFICE_LIBS+set} +ac_env_GOFFICE_LIBS_value=$GOFFICE_LIBS +ac_cv_env_GOFFICE_LIBS_set=${GOFFICE_LIBS+set} +ac_cv_env_GOFFICE_LIBS_value=$GOFFICE_LIBS +ac_env_WINDRES_set=${WINDRES+set} +ac_env_WINDRES_value=$WINDRES +ac_cv_env_WINDRES_set=${WINDRES+set} +ac_cv_env_WINDRES_value=$WINDRES +ac_env_GLIB_GENMARSHAL_set=${GLIB_GENMARSHAL+set} +ac_env_GLIB_GENMARSHAL_value=$GLIB_GENMARSHAL +ac_cv_env_GLIB_GENMARSHAL_set=${GLIB_GENMARSHAL+set} +ac_cv_env_GLIB_GENMARSHAL_value=$GLIB_GENMARSHAL +ac_env_GDK_PIXBUF_CSOURCE_set=${GDK_PIXBUF_CSOURCE+set} +ac_env_GDK_PIXBUF_CSOURCE_value=$GDK_PIXBUF_CSOURCE +ac_cv_env_GDK_PIXBUF_CSOURCE_set=${GDK_PIXBUF_CSOURCE+set} +ac_cv_env_GDK_PIXBUF_CSOURCE_value=$GDK_PIXBUF_CSOURCE + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures goffice 0.0.4 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of goffice 0.0.4:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-static[=PKGS] + build static libraries [default=no] + --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors + --enable-shared[=PKGS] + build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + --enable-compile-warnings=[no/minimum/yes/maximum/error] + Turn on compiler warnings + --enable-iso-c Try to warn if code is not ISO C + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] + include additional configurations [automatic] + --{with,without}-cairo Use cairo for graph rendering + --without-gtk Build without UI + --{with,without}-gnome Use GNOME extensions + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + PKG_CONFIG path to pkg-config utility + CAIRO_CFLAGS + C compiler flags for CAIRO, overriding pkg-config + CAIRO_LIBS linker flags for CAIRO, overriding pkg-config + GTK_CFLAGS C compiler flags for GTK, overriding pkg-config + GTK_LIBS linker flags for GTK, overriding pkg-config + GNOME_CFLAGS + C compiler flags for GNOME, overriding pkg-config + GNOME_LIBS linker flags for GNOME, overriding pkg-config + GOFFICE_CFLAGS + C compiler flags for GOFFICE, overriding pkg-config + GOFFICE_LIBS + linker flags for GOFFICE, overriding pkg-config + WINDRES The windres executable (used by win32 builds only). + GLIB_GENMARSHAL + The glib-genmarshal executable. + GDK_PIXBUF_CSOURCE + The gdk-pixbuf-csource executable. + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +goffice configure 0.0.4 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by goffice $as_me 0.0.4, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +am__api_version="1.7" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + + # test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='goffice' + VERSION='0.0.4' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. + + + + +GOFFICE_LIB_VERSION=0:4:0 + + + ac_config_headers="$ac_config_headers goffice/goffice-config.h" + + + ac_config_headers="$ac_config_headers goffice/goffice-features.h" + + + + +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi; + echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Make --disable-static the default +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi; + + + + + +if test -n "0.27.2"; then + echo "$as_me:$LINENO: checking for intltool >= 0.27.2" >&5 +echo $ECHO_N "checking for intltool >= 0.27.2... $ECHO_C" >&6 + + INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.27.2 | awk -F. '{ printf "%d", $1 * 100 + $2; }'` + INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $2; }' < ${ac_aux_dir}/intltool-update.in` + + INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($2, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in` + + + if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then + echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found" >&5 +echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found" >&6 + else + echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found. Your intltool is too old. You need intltool 0.27.2 or later." >&5 +echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found. Your intltool is too old. You need intltool 0.27.2 or later." >&6 + exit 1 + fi +fi + + INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@' + INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@' + INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + + + + + + + + + + + + + + + + + + + +# Use the tools built into the package, not the ones that are installed. + +INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract' +INTLTOOL_MERGE='$(top_builddir)/intltool-merge' +INTLTOOL_UPDATE='$(top_builddir)/intltool-update' + + + + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL + +if test -n "$INTLTOOL_PERL"; then + echo "$as_me:$LINENO: result: $INTLTOOL_PERL" >&5 +echo "${ECHO_T}$INTLTOOL_PERL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$INTLTOOL_PERL"; then + { { echo "$as_me:$LINENO: error: perl not found; required for intltool" >&5 +echo "$as_me: error: perl not found; required for intltool" >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then + { { echo "$as_me:$LINENO: error: perl 5.x required for intltool" >&5 +echo "$as_me: error: perl 5.x required for intltool" >&2;} + { (exit 1); exit 1; }; } +fi +if test "x" != "xno-xml"; then + echo "$as_me:$LINENO: checking for XML::Parser" >&5 +echo $ECHO_N "checking for XML::Parser... $ECHO_C" >&6 + if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 + else + { { echo "$as_me:$LINENO: error: XML::Parser perl module is required for intltool" >&5 +echo "$as_me: error: XML::Parser perl module is required for intltool" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# Extract the first word of "iconv", so it can be a program name with args. +set dummy iconv; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_ICONV+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_ICONV in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_ICONV="$INTLTOOL_ICONV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_ICONV="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_ICONV" && ac_cv_path_INTLTOOL_ICONV="iconv" + ;; +esac +fi +INTLTOOL_ICONV=$ac_cv_path_INTLTOOL_ICONV + +if test -n "$INTLTOOL_ICONV"; then + echo "$as_me:$LINENO: result: $INTLTOOL_ICONV" >&5 +echo "${ECHO_T}$INTLTOOL_ICONV" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_MSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_MSGFMT="$INTLTOOL_MSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_MSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_MSGFMT" && ac_cv_path_INTLTOOL_MSGFMT="msgfmt" + ;; +esac +fi +INTLTOOL_MSGFMT=$ac_cv_path_INTLTOOL_MSGFMT + +if test -n "$INTLTOOL_MSGFMT"; then + echo "$as_me:$LINENO: result: $INTLTOOL_MSGFMT" >&5 +echo "${ECHO_T}$INTLTOOL_MSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_MSGMERGE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_MSGMERGE in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_MSGMERGE="$INTLTOOL_MSGMERGE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_MSGMERGE" && ac_cv_path_INTLTOOL_MSGMERGE="msgmerge" + ;; +esac +fi +INTLTOOL_MSGMERGE=$ac_cv_path_INTLTOOL_MSGMERGE + +if test -n "$INTLTOOL_MSGMERGE"; then + echo "$as_me:$LINENO: result: $INTLTOOL_MSGMERGE" >&5 +echo "${ECHO_T}$INTLTOOL_MSGMERGE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_XGETTEXT in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_XGETTEXT="$INTLTOOL_XGETTEXT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_XGETTEXT" && ac_cv_path_INTLTOOL_XGETTEXT="xgettext" + ;; +esac +fi +INTLTOOL_XGETTEXT=$ac_cv_path_INTLTOOL_XGETTEXT + +if test -n "$INTLTOOL_XGETTEXT"; then + echo "$as_me:$LINENO: result: $INTLTOOL_XGETTEXT" >&5 +echo "${ECHO_T}$INTLTOOL_XGETTEXT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + +# Remove file type tags (using []) from po/POTFILES. + + + + + + + +# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT. + + ac_config_commands="$ac_config_commands intltool" + + + + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + + +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + + echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 +echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6 +if test "${ac_cv_lib_cposix_strerror+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcposix $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror (); +int +main () +{ +strerror (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_cposix_strerror=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_cposix_strerror=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 +echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6 +if test $ac_cv_lib_cposix_strerror = yes; then + LIBS="$LIBS -lcposix" +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +for ac_prog in 'bison -y' byacc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_YACC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_YACC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +YACC=$ac_cv_prog_YACC +if test -n "$YACC"; then + echo "$as_me:$LINENO: result: $YACC" >&5 +echo "${ECHO_T}$YACC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + +for ac_prog in flex lex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_LEX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$LEX"; then + ac_cv_prog_LEX="$LEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LEX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +LEX=$ac_cv_prog_LEX +if test -n "$LEX"; then + echo "$as_me:$LINENO: result: $LEX" >&5 +echo "${ECHO_T}$LEX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$LEX" && break +done +test -n "$LEX" || LEX=":" + +if test -z "$LEXLIB" +then + echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 +echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 +if test "${ac_cv_lib_fl_yywrap+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char yywrap (); +int +main () +{ +yywrap (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_fl_yywrap=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_fl_yywrap=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 +echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 +if test $ac_cv_lib_fl_yywrap = yes; then + LEXLIB="-lfl" +else + echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 +echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 +if test "${ac_cv_lib_l_yywrap+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ll $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char yywrap (); +int +main () +{ +yywrap (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_l_yywrap=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_l_yywrap=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 +echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 +if test $ac_cv_lib_l_yywrap = yes; then + LEXLIB="-ll" +fi + +fi + +fi + +if test "x$LEX" != "x:"; then + echo "$as_me:$LINENO: checking lex output file root" >&5 +echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 +if test "${ac_cv_prog_lex_root+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # The minimal lex program is just a single line: %%. But some broken lexes +# (Solaris, I think it was) want two %% lines, so accommodate them. +cat >conftest.l <<_ACEOF +%% +%% +_ACEOF +{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 + (eval $LEX conftest.l) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +if test -f lex.yy.c; then + ac_cv_prog_lex_root=lex.yy +elif test -f lexyy.c; then + ac_cv_prog_lex_root=lexyy +else + { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 +echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} + { (exit 1); exit 1; }; } +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 +echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 +rm -f conftest.l +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 +echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 +if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # POSIX says lex can declare yytext either as a pointer or an array; the +# default is implementation-dependent. Figure out which it is, since +# not all implementations provide the %pointer and %array declarations. +ac_cv_prog_lex_yytext_pointer=no +echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c +ac_save_LIBS=$LIBS +LIBS="$LIBS $LEXLIB" +cat >conftest.$ac_ext <<_ACEOF +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_lex_yytext_pointer=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_save_LIBS +rm -f "${LEX_OUTPUT_ROOT}.c" + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 +echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 +if test $ac_cv_prog_lex_yytext_pointer = yes; then + +cat >>confdefs.h <<\_ACEOF +#define YYTEXT_POINTER 1 +_ACEOF + +fi + +fi +if test "$LEX" = :; then + LEX=${am_missing_run}flex +fi +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi; + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi; + +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED + +fi + +echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6 + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' + +echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6 +NM="$lt_cv_path_NM" + +echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 5237 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_cc_needs_belf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +esac + +need_locks="$enable_libtool_lock" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice ## +## ------------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CXX" && break +done +test -n "$ac_ct_CXX" || ac_ct_CXX="g++" + + CXX=$ac_ct_CXX +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +CXXFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cxx_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$CXX" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6 +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_F77" && break +done + + F77=$ac_ct_F77 +fi + + +# Provide some information about the compiler. +echo "$as_me:6794:" \ + "checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_f77_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # 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"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # 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. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 +else + echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6 +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris* | sysv5*) + symcode='[BDRT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6 +else + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 +fi + +echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6 +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6 +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi; +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# +# Check for any special shared library compilation flags. +# +lt_prog_cc_shlib= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + lt_prog_cc_shlib='-belf' + ;; + esac +fi +if test -n "$lt_prog_cc_shlib"; then + { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : + else + { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + lt_cv_prog_cc_can_build_shared=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_prog_compiler_static" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7826: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7830: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic='-Kpic' + lt_prog_compiler_static='-dn' + ;; + + solaris*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8059: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8063: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8119: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8123: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds="$tmp_archive_cmds" + fi + link_all_deplibs=no + else + ld_shlibs=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec=' ' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi4*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6 +test "$ld_shlibs" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var " || \ + test "X$hardcode_automatic"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which librarie types wil actually be built +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags or --without-tags was given. +if test "${with_tags+set}" = set; then + withval="$with_tags" + tagnames="$withval" +fi; + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_CXX=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX=' ' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_CXX=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + archive_cmds_need_lc_CXX=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_CXX='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='-all_load $convenience' + link_all_deplibs_CXX=yes + else + ld_shlibs_CXX=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd12*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + hardcode_libdir_separator_CXX=: + ;; + ia64*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + *) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + archive_cmds_need_lc_CXX=no + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sco*) + archive_cmds_need_lc_CXX=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.0-5 | solaris2.0-5.*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + archive_cmds_need_lc_CXX=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12582: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:12586: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12642: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:12646: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var CXX" || \ + test "X$hardcode_automatic_CXX"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6 + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + test "$enable_shared" = yes && enable_static=no + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +test "$ld_shlibs_F77" = no && can_build_shared=no + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_F77='-Kpic' + lt_prog_compiler_static_F77='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:14936: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:14940: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:14996: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:15000: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_F77="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_F77="$tmp_archive_cmds" + fi + link_all_deplibs_F77=no + else + ld_shlibs_F77=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_F77=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77=' ' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi4*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_F77=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_F77='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='-all_load $convenience' + link_all_deplibs_F77=yes + else + ld_shlibs_F77=no + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + ia64*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + *) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + sco3.2v5*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_F77='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv5*) + no_undefined_flag_F77=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_F77= + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6 +test "$ld_shlibs_F77" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var F77" || \ + test "X$hardcode_automatic_F77"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6 + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:17041: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:17045: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_GCJ='-Kpic' + lt_prog_compiler_static_GCJ='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:17274: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:17278: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:17334: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:17338: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_GCJ="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_GCJ="$tmp_archive_cmds" + fi + link_all_deplibs_GCJ=no + else + ld_shlibs_GCJ=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_GCJ=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ=' ' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi4*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_GCJ=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='-all_load $convenience' + link_all_deplibs_GCJ=yes + else + ld_shlibs_GCJ=no + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + ia64*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + *) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + sco3.2v5*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv5*) + no_undefined_flag_GCJ=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_GCJ= + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var GCJ" || \ + test "X$hardcode_automatic_GCJ"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6 + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# Check whether --enable-largefile or --disable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval="$enable_largefile" + +fi; +if test "$enable_largefile" != no; then + + echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 +echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_largefile_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext + CC="$CC -n32" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_largefile_CC=' -n32'; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_file_offset_bits=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_file_offset_bits=64; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 +echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 +if test "$ac_cv_sys_file_offset_bits" != no; then + +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF + +fi +rm -f conftest* + echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 +echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_large_files+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_large_files=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_large_files=1; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 +echo "${ECHO_T}$ac_cv_sys_large_files" >&6 +if test "$ac_cv_sys_large_files" != no; then + +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF + +fi +rm -f conftest* +fi + + +ACLOCAL_AMFLAGS=$ACLOCAL_FLAGS + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG + +if test -n "$ac_pt_PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 +echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + PKG_CONFIG=$ac_pt_PKG_CONFIG +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 +echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + PKG_CONFIG="" + fi + +fi + +goffice_reqs=" + glib-2.0 >= 2.4.4 + gobject-2.0 >= 2.4.4 + gmodule-2.0 >= 2.4.4 + libgsf-1 >= 1.12.2 + libxml-2.0 >= 2.4.12 + pango >= 1.6.0 + pangoft2 >= 1.6.0 +" +goffice_cairo_reqs=" + cairo >= 0.5.0 +" +goffice_gtk_reqs=" + gtk+-2.0 >= 2.4.14 + libglade-2.0 >= 2.3.6 + libgnomeprint-2.2 >= 2.8.2 + libart-2.0 >= 2.3.11 +" +goffice_gnome_reqs=" + gconf-2.0 + libgnomeui-2.0 >= 2.0.0 + libgsf-gnome-1 >= 1.12.2 +" + +goffice_with_cairo=false + +# Check whether --with-cairo or --without-cairo was given. +if test "${with_cairo+set}" = set; then + withval="$with_cairo" + +fi; +if test "x$with_cairo" = xyes; then + cairo_msg="Enabled" + +pkg_failed=no +echo "$as_me:$LINENO: checking for CAIRO" >&5 +echo $ECHO_N "checking for CAIRO... $ECHO_C" >&6 + +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_cairo_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_cairo_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "$goffice_cairo_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_cairo_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_cairo_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "$goffice_cairo_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + CAIRO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$goffice_cairo_reqs"` + # Put the nasty error message in config.log where it belongs + echo "$CAIRO_PKG_ERRORS" 1>&5 + + { { echo "$as_me:$LINENO: error: Package requirements ($goffice_cairo_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the CAIRO_CFLAGS and CAIRO_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&5 +echo "$as_me: error: Package requirements ($goffice_cairo_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the CAIRO_CFLAGS and CAIRO_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the CAIRO_CFLAGS and CAIRO_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the CAIRO_CFLAGS and CAIRO_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS + CAIRO_LIBS=$pkg_cv_CAIRO_LIBS + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + : +fi + +cat >>confdefs.h <<\_ACEOF +#define WITH_CAIRO 1 +_ACEOF + + goffice_reqs="$goffice_reqs $goffice_cairo_reqs" + goffice_with_cairo=true +else + cairo_msg="Disabled" + goffice_with_cairo=false +fi + +goffice_with_gtk=true + +# Check whether --with-gtk or --without-gtk was given. +if test "${with_gtk+set}" = set; then + withval="$with_gtk" + +fi; +if test "x$with_gtk" = xno; then + ui_msg="None (Gtk disabled by request)" + goffice_with_gtk=false +else + ui_msg="Gtk" + +pkg_failed=no +echo "$as_me:$LINENO: checking for GTK" >&5 +echo $ECHO_N "checking for GTK... $ECHO_C" >&6 + +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_gtk_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_gtk_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "$goffice_gtk_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_gtk_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_gtk_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "$goffice_gtk_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$goffice_gtk_reqs"` + # Put the nasty error message in config.log where it belongs + echo "$GTK_PKG_ERRORS" 1>&5 + + { { echo "$as_me:$LINENO: error: Package requirements ($goffice_gtk_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the GTK_CFLAGS and GTK_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&5 +echo "$as_me: error: Package requirements ($goffice_gtk_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the GTK_CFLAGS and GTK_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the GTK_CFLAGS and GTK_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the GTK_CFLAGS and GTK_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + GTK_CFLAGS=$pkg_cv_GTK_CFLAGS + GTK_LIBS=$pkg_cv_GTK_LIBS + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + : +fi +fi + +goffice_with_gnome=$goffice_with_gtk +if test "x$goffice_with_gtk" = "xtrue" ; then + +cat >>confdefs.h <<\_ACEOF +#define WITH_GTK 1 +_ACEOF + + goffice_reqs="$goffice_reqs $goffice_gtk_reqs" + + + goffice_with_gnome=true + +# Check whether --with-gnome or --without-gnome was given. +if test "${with_gnome+set}" = set; then + withval="$with_gnome" + if test "x$withval" = xno; then + goffice_with_gnome=false + ui_msg="Gtk+ (Gnome disabled by request)" + fi + +fi; + if test "x$goffice_with_gnome" = "xtrue"; then + +pkg_failed=no +echo "$as_me:$LINENO: checking for GNOME" >&5 +echo $ECHO_N "checking for GNOME... $ECHO_C" >&6 + +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_gnome_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_gnome_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GNOME_CFLAGS=`$PKG_CONFIG --cflags "$goffice_gnome_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_gnome_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_gnome_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GNOME_LIBS=`$PKG_CONFIG --libs "$goffice_gnome_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + GNOME_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$goffice_gnome_reqs"` + # Put the nasty error message in config.log where it belongs + echo "$GNOME_PKG_ERRORS" 1>&5 + + ui_msg="Gtk (missing gnome dependencies)" ; goffice_with_gnome=false +elif test $pkg_failed = untried; then + ui_msg="Gtk (missing gnome dependencies)" ; goffice_with_gnome=false +else + GNOME_CFLAGS=$pkg_cv_GNOME_CFLAGS + GNOME_LIBS=$pkg_cv_GNOME_LIBS + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + ui_msg="Gnome" +fi + fi + + if test "x$goffice_with_gnome" = "xtrue"; then + +cat >>confdefs.h <<\_ACEOF +#define WITH_GNOME 1 +_ACEOF + + goffice_reqs="$goffice_reqs $goffice_gnome_reqs" + fi +fi + + +if $goffice_with_cairo; then + WITH_CAIRO_TRUE= + WITH_CAIRO_FALSE='#' +else + WITH_CAIRO_TRUE='#' + WITH_CAIRO_FALSE= +fi + + + +if $goffice_with_gtk; then + WITH_GTK_TRUE= + WITH_GTK_FALSE='#' +else + WITH_GTK_TRUE='#' + WITH_GTK_FALSE= +fi + + + +if $goffice_with_gnome; then + WITH_GNOME_TRUE= + WITH_GNOME_FALSE='#' +else + WITH_GNOME_TRUE='#' + WITH_GNOME_FALSE= +fi + + + + +pkg_failed=no +echo "$as_me:$LINENO: checking for GOFFICE" >&5 +echo $ECHO_N "checking for GOFFICE... $ECHO_C" >&6 + +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GOFFICE_CFLAGS=`$PKG_CONFIG --cflags "$goffice_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$goffice_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$goffice_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GOFFICE_LIBS=`$PKG_CONFIG --libs "$goffice_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + GOFFICE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$goffice_reqs"` + # Put the nasty error message in config.log where it belongs + echo "$GOFFICE_PKG_ERRORS" 1>&5 + + { { echo "$as_me:$LINENO: error: Package requirements ($goffice_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the GOFFICE_CFLAGS and GOFFICE_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&5 +echo "$as_me: error: Package requirements ($goffice_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the GOFFICE_CFLAGS and GOFFICE_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the GOFFICE_CFLAGS and GOFFICE_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the GOFFICE_CFLAGS and GOFFICE_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + GOFFICE_CFLAGS=$pkg_cv_GOFFICE_CFLAGS + GOFFICE_LIBS=$pkg_cv_GOFFICE_LIBS + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + : +fi + +echo "$as_me:$LINENO: checking for XRenderFindFormat in -lXrender" >&5 +echo $ECHO_N "checking for XRenderFindFormat in -lXrender... $ECHO_C" >&6 +if test "${ac_cv_lib_Xrender_XRenderFindFormat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXrender -lXext $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XRenderFindFormat (); +int +main () +{ +XRenderFindFormat (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xrender_XRenderFindFormat=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_Xrender_XRenderFindFormat=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xrender_XRenderFindFormat" >&5 +echo "${ECHO_T}$ac_cv_lib_Xrender_XRenderFindFormat" >&6 +if test $ac_cv_lib_Xrender_XRenderFindFormat = yes; then + RENDER_LIBS="-lXrender -lXext" + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_RENDER 1 +_ACEOF + +else + RENDER_LIBS="" + +fi + + +echo "$as_me:$LINENO: checking for Win32 platform" >&5 +echo $ECHO_N "checking for Win32 platform... $ECHO_C" >&6 +with_win32=no +case $host_os in + mingw* | pw32* | cygwin*) + with_win32=yes + GOFFICE_PLUGIN_LDFLAGS="-Wl,--enable-runtime-pseudo-relo,--export-all-symbols $GOFFICE_PLUGIN_LDFLAGS" + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. +set dummy ${ac_tool_prefix}windres; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_WINDRES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$WINDRES"; then + ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_WINDRES="${ac_tool_prefix}windres" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +WINDRES=$ac_cv_prog_WINDRES +if test -n "$WINDRES"; then + echo "$as_me:$LINENO: result: $WINDRES" >&5 +echo "${ECHO_T}$WINDRES" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_WINDRES"; then + ac_ct_WINDRES=$WINDRES + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_WINDRES"; then + ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_WINDRES="windres" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_WINDRES" && ac_cv_prog_ac_ct_WINDRES=":" +fi +fi +ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES +if test -n "$ac_ct_WINDRES"; then + echo "$as_me:$LINENO: result: $ac_ct_WINDRES" >&5 +echo "${ECHO_T}$ac_ct_WINDRES" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + WINDRES=$ac_ct_WINDRES +else + WINDRES="$ac_cv_prog_WINDRES" +fi + + ;; +esac +echo "$as_me:$LINENO: result: $with_win32" >&5 +echo "${ECHO_T}$with_win32" >&6 + + +if test $with_win32 = yes; then + WITH_WIN32_TRUE= + WITH_WIN32_FALSE='#' +else + WITH_WIN32_TRUE='#' + WITH_WIN32_FALSE= +fi + + +GOFFICE_PLUGIN_LDFLAGS="-avoid-version -no-undefined $GOFFICE_PLUGIN_LDFLAGS" +GOFFICE_PLUGIN_LIBADD="\$(top_builddir)/goffice/libgoffice-1.la $GOFFICE_LIBS $GOFFICE_PLUGIN_LIBADD" + + + +CFLAGS="$CFLAGS -DG_DISABLE_DEPRECATED" +CFLAGS="$CFLAGS -DPANGO_DISABLE_DEPRECATED" +if test "x$goffice_with_gtk" = "xtrue"; then + CFLAGS="$CFLAGS -DGDK_PIXBUF_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DGDK_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DGDK_MULTIHEAD_SAFE" + CFLAGS="$CFLAGS -DGTK_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DLIBGLADE_DISABLE_DEPRECATED" +fi +if test "x$goffice_with_gnome" = "xtrue"; then + CFLAGS="$CFLAGS -DGNOME_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DBONOBO_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DBONOBO_UI_DISABLE_DEPRECATED" +fi + + + +# Extract the first word of "glib-genmarshal", so it can be a program name with args. +set dummy glib-genmarshal; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_GLIB_GENMARSHAL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$GLIB_GENMARSHAL"; then + ac_cv_prog_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GLIB_GENMARSHAL="glib-genmarshal" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +GLIB_GENMARSHAL=$ac_cv_prog_GLIB_GENMARSHAL +if test -n "$GLIB_GENMARSHAL"; then + echo "$as_me:$LINENO: result: $GLIB_GENMARSHAL" >&5 +echo "${ECHO_T}$GLIB_GENMARSHAL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + +# Extract the first word of "gdk-pixbuf-csource", so it can be a program name with args. +set dummy gdk-pixbuf-csource; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_GDK_PIXBUF_CSOURCE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$GDK_PIXBUF_CSOURCE"; then + ac_cv_prog_GDK_PIXBUF_CSOURCE="$GDK_PIXBUF_CSOURCE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GDK_PIXBUF_CSOURCE="gdk-pixbuf-csource" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +GDK_PIXBUF_CSOURCE=$ac_cv_prog_GDK_PIXBUF_CSOURCE +if test -n "$GDK_PIXBUF_CSOURCE"; then + echo "$as_me:$LINENO: result: $GDK_PIXBUF_CSOURCE" >&5 +echo "${ECHO_T}$GDK_PIXBUF_CSOURCE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + +## this should come after `AC_PROG_CC' + + + # Check whether --enable-compile-warnings or --disable-compile-warnings was given. +if test "${enable_compile_warnings+set}" = set; then + enableval="$enable_compile_warnings" + +else + enable_compile_warnings="yes" +fi; + + warnCFLAGS= + if test "x$GCC" != xyes; then + enable_compile_warnings=no + fi + + warning_flags= + realsave_CFLAGS="$CFLAGS" + + case "$enable_compile_warnings" in + no) + warning_flags= + ;; + minimum) + warning_flags="-Wall" + ;; + yes) + warning_flags="-Wall -Wmissing-prototypes" + ;; + maximum|error) + warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith" + CFLAGS="$warning_flags $CFLAGS" + for option in -Wno-sign-compare; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + echo "$as_me:$LINENO: checking whether gcc understands $option" >&5 +echo $ECHO_N "checking whether gcc understands $option... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + has_option=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +has_option=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$SAVE_CFLAGS" + echo "$as_me:$LINENO: result: $has_option" >&5 +echo "${ECHO_T}$has_option" >&6 + if test $has_option = yes; then + warning_flags="$warning_flags $option" + fi + unset has_option + unset SAVE_CFLAGS + done + unset option + if test "$enable_compile_warnings" = "error" ; then + warning_flags="$warning_flags -Werror" + fi + ;; + *) + { { echo "$as_me:$LINENO: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&5 +echo "$as_me: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + CFLAGS="$realsave_CFLAGS" + echo "$as_me:$LINENO: checking what warning flags to pass to the C compiler" >&5 +echo $ECHO_N "checking what warning flags to pass to the C compiler... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $warning_flags" >&5 +echo "${ECHO_T}$warning_flags" >&6 + + # Check whether --enable-iso-c or --disable-iso-c was given. +if test "${enable_iso_c+set}" = set; then + enableval="$enable_iso_c" + +else + enable_iso_c=no +fi; + + echo "$as_me:$LINENO: checking what language compliance flags to pass to the C compiler" >&5 +echo $ECHO_N "checking what language compliance flags to pass to the C compiler... $ECHO_C" >&6 + complCFLAGS= + if test "x$enable_iso_c" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *\ \ -ansi\ \ *) ;; + *) complCFLAGS="$complCFLAGS -ansi" ;; + esac + case " $CFLAGS " in + *\ \ -pedantic\ \ *) ;; + *) complCFLAGS="$complCFLAGS -pedantic" ;; + esac + fi + fi + echo "$as_me:$LINENO: result: $complCFLAGS" >&5 +echo "${ECHO_T}$complCFLAGS" >&6 + + WARN_CFLAGS="$warning_flags $complCFLAGS" + + CFLAGS="$CFLAGS $WARN_CFLAGS" +set_more_warnings=yes +if test "$GCC" = "yes" -a "x$set_more_warnings" != "xno"; then + for option in -Wsign-compare -Wpointer-arith -Wnested-externs -Wchar-subscripts -Wwrite-strings -Wdeclaration-after-statement -Wmissing-noreturn -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-format-attribute; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + echo "$as_me:$LINENO: checking whether gcc understands $option" >&5 +echo $ECHO_N "checking whether gcc understands $option... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + has_option=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +has_option=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + if test $has_option = no; then + CFLAGS="$SAVE_CFLAGS" + fi + echo "$as_me:$LINENO: result: $has_option" >&5 +echo "${ECHO_T}$has_option" >&6 + unset has_option + unset SAVE_CFLAGS + done + unset option +fi + + +echo "$as_me:$LINENO: checking whether fdopen is declared" >&5 +echo $ECHO_N "checking whether fdopen is declared... $ECHO_C" >&6 +if test "${ac_cv_have_decl_fdopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef fdopen + char *p = (char *) fdopen; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_have_decl_fdopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_have_decl_fdopen=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_have_decl_fdopen" >&5 +echo "${ECHO_T}$ac_cv_have_decl_fdopen" >&6 +if test $ac_cv_have_decl_fdopen = yes; then + fdopen_works=yes +else + fdopen_works=no +fi + +if test $fdopen_works = no ; then + unset ac_cv_have_decl_fdopen + CFLAGS="$CFLAGS -D_POSIX_SOURCE" + { echo "$as_me:$LINENO: adding -D_POSIX_SOURCE to CFLAGS" >&5 +echo "$as_me: adding -D_POSIX_SOURCE to CFLAGS" >&6;} + echo "$as_me:$LINENO: checking whether fdopen is declared" >&5 +echo $ECHO_N "checking whether fdopen is declared... $ECHO_C" >&6 +if test "${ac_cv_have_decl_fdopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef fdopen + char *p = (char *) fdopen; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_have_decl_fdopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_have_decl_fdopen=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_have_decl_fdopen" >&5 +echo "${ECHO_T}$ac_cv_have_decl_fdopen" >&6 +if test $ac_cv_have_decl_fdopen = yes; then + fdopen_works=yes +else + fdopen_works=no +fi + + if test $fdopen_works = no ; then + { { echo "$as_me:$LINENO: error: fdopen is not available" >&5 +echo "$as_me: error: fdopen is not available" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# Unfortunately, -D_POSIX_SOURCE turns off struct timeval on Solaris +echo "$as_me:$LINENO: checking whether struct timeval is available" >&5 +echo $ECHO_N "checking whether struct timeval is available... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +struct timeval tv; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + struct_timeval_works=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +struct_timeval_works=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $struct_timeval_works" >&5 +echo "${ECHO_T}$struct_timeval_works" >&6 + +if test $struct_timeval_works = no ; then + CFLAGS="$CFLAGS -D__EXTENSIONS__" + echo "$as_me:$LINENO: checking whether struct timeval is available with -D__EXTENSIONS__" >&5 +echo $ECHO_N "checking whether struct timeval is available with -D__EXTENSIONS__... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +struct timeval tv; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + struct_timeval_works=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +struct_timeval_works=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + echo "$as_me:$LINENO: result: $struct_timeval_works" >&5 +echo "${ECHO_T}$struct_timeval_works" >&6 + if test $struct_timeval_works = no ; then + { { echo "$as_me:$LINENO: error: struct timeval is not available" >&5 +echo "$as_me: error: struct timeval is not available" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +echo "$as_me:$LINENO: checking for gettimeofday" >&5 +echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6 +if test "${ac_cv_func_gettimeofday+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define gettimeofday to an innocuous variant, in case declares gettimeofday. + For example, HP-UX 11i declares gettimeofday. */ +#define gettimeofday innocuous_gettimeofday + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char gettimeofday (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef gettimeofday + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gettimeofday (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday) +choke me +#else +char (*f) () = gettimeofday; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != gettimeofday; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_gettimeofday=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_gettimeofday=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_gettimeofday" >&5 +echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6 +if test $ac_cv_func_gettimeofday = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETTIMEOFDAY 1 +_ACEOF + +fi + + +echo "$as_me:$LINENO: checking whether M_PI is available" >&5 +echo $ECHO_N "checking whether M_PI is available... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +double f = M_PI + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + works_without_bsd_source=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +works_without_bsd_source=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $works_without_bsd_source" >&5 +echo "${ECHO_T}$works_without_bsd_source" >&6 + +if test $works_without_bsd_source = no ; then + CFLAGS="$CFLAGS -D_BSD_SOURCE" + echo "$as_me:$LINENO: checking whether M_PI is available with -D_BSD_SOURCE" >&5 +echo $ECHO_N "checking whether M_PI is available with -D_BSD_SOURCE... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +double f = M_PI + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + m_pi_works=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +m_pi_works=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + echo "$as_me:$LINENO: result: $m_pi_works" >&5 +echo "${ECHO_T}$m_pi_works" >&6 + if test $m_pi_works = no ; then + { { echo "$as_me:$LINENO: error: M_PI is not available" >&5 +echo "$as_me: error: M_PI is not available" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +ALL_LINGUAS="am az bg ca cs da de el en_CA en_GB es et fi fr ga gl he hr hu it ja ko lv ml mr ms nb nl nn no pl pt pt_BR ro ru sk sr sr@Latn sv tr uk vi zh_CN zh_TW" + + +GETTEXT_PACKAGE=goffice + + +cat >>confdefs.h <<_ACEOF +#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" +_ACEOF + + + +for ac_header in locale.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice ## +## ------------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_locale_h = yes; then + echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 +if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_val_LC_MESSAGES=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_val_LC_MESSAGES=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 + if test $am_cv_val_LC_MESSAGES = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LC_MESSAGES 1 +_ACEOF + + fi + fi + USE_NLS=yes + + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + if test "${ac_cv_header_libintl_h+set}" = set; then + echo "$as_me:$LINENO: checking for libintl.h" >&5 +echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 +if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking libintl.h usability" >&5 +echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking libintl.h presence" >&5 +echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice ## +## ------------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for libintl.h" >&5 +echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 +if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_libintl_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 + +fi +if test $ac_cv_header_libintl_h = yes; then + gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + echo "$as_me:$LINENO: checking for ngettext in libc" >&5 +echo $ECHO_N "checking for ngettext in libc... $ECHO_C" >&6 +if test "${gt_cv_func_ngettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include + +int +main () +{ +return !ngettext ("","", 1) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_ngettext_libc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_ngettext_libc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $gt_cv_func_ngettext_libc" >&5 +echo "${ECHO_T}$gt_cv_func_ngettext_libc" >&6 + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + echo "$as_me:$LINENO: checking for dgettext in libc" >&5 +echo $ECHO_N "checking for dgettext in libc... $ECHO_C" >&6 +if test "${gt_cv_func_dgettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include + +int +main () +{ +return !dgettext ("","") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_dgettext_libc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_dgettext_libc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $gt_cv_func_dgettext_libc" >&5 +echo "${ECHO_T}$gt_cv_func_dgettext_libc" >&6 + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + +for ac_func in bind_textdomain_codeset +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bindtextdomain (); +int +main () +{ +bindtextdomain (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_bindtextdomain=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_bindtextdomain=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 +if test $ac_cv_lib_intl_bindtextdomain = yes; then + echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5 +echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_ngettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ngettext (); +int +main () +{ +ngettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_ngettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_ngettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6 +if test $ac_cv_lib_intl_ngettext = yes; then + echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5 +echo $ECHO_N "checking for dgettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_dgettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dgettext (); +int +main () +{ +dgettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_dgettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_dgettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dgettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_dgettext" >&6 +if test $ac_cv_lib_intl_dgettext = yes; then + gt_cv_func_dgettext_libintl=yes +fi + +fi + +fi + + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + echo "$as_me:$LINENO: checking if -liconv is needed to use gettext" >&5 +echo $ECHO_N "checking if -liconv is needed to use gettext... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: " >&5 +echo "${ECHO_T}" >&6 + echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5 +echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_ngettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl -liconv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ngettext (); +int +main () +{ +ngettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_ngettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_ngettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6 +if test $ac_cv_lib_intl_ngettext = yes; then + echo "$as_me:$LINENO: checking for dcgettext in -lintl" >&5 +echo $ECHO_N "checking for dcgettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_dcgettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl -liconv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dcgettext (); +int +main () +{ +dcgettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_dcgettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_dcgettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dcgettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_dcgettext" >&6 +if test $ac_cv_lib_intl_dcgettext = yes; then + gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv +else + : +fi + +else + : +fi + + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + +for ac_func in bind_textdomain_codeset +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETTEXT 1 +_ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != "no"; then + echo "$as_me:$LINENO: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + +for ac_func in dcgettext +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + CATOBJEXT=.gmo + DATADIRNAME=share +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +case $host in + *-*-solaris*) + echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5 +echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6 +if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define bind_textdomain_codeset to an innocuous variant, in case declares bind_textdomain_codeset. + For example, HP-UX 11i declares gettimeofday. */ +#define bind_textdomain_codeset innocuous_bind_textdomain_codeset + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char bind_textdomain_codeset (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef bind_textdomain_codeset + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bind_textdomain_codeset (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_bind_textdomain_codeset) || defined (__stub___bind_textdomain_codeset) +choke me +#else +char (*f) () = bind_textdomain_codeset; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != bind_textdomain_codeset; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_bind_textdomain_codeset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_bind_textdomain_codeset=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5 +echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6 +if test $ac_cv_func_bind_textdomain_codeset = yes; then + CATOBJEXT=.gmo + DATADIRNAME=share +else + CATOBJEXT=.mo + DATADIRNAME=lib +fi + + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + +fi + + + + if test "$gt_cv_have_gettext" = "yes" ; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_NLS 1 +_ACEOF + + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + ac_config_commands="$ac_config_commands default-1" + + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + + + + + + + + + + + + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + echo "$as_me:$LINENO: result: $LINGUAS" >&5 +echo "${ECHO_T}$LINGUAS" >&6 + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + + + + +for ac_header in ieeefp.h ieee754.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice ## +## ------------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + +for ac_func in random drand48 finite memmove mkdtemp uname times sysconf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5 +echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6 +if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define bind_textdomain_codeset to an innocuous variant, in case declares bind_textdomain_codeset. + For example, HP-UX 11i declares gettimeofday. */ +#define bind_textdomain_codeset innocuous_bind_textdomain_codeset + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char bind_textdomain_codeset (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef bind_textdomain_codeset + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bind_textdomain_codeset (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_bind_textdomain_codeset) || defined (__stub___bind_textdomain_codeset) +choke me +#else +char (*f) () = bind_textdomain_codeset; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != bind_textdomain_codeset; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_bind_textdomain_codeset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_bind_textdomain_codeset=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5 +echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6 +if test $ac_cv_func_bind_textdomain_codeset = yes; then + : +else + +echo "$as_me:$LINENO: checking for bind_textdomain_codeset in -lintl" >&5 +echo $ECHO_N "checking for bind_textdomain_codeset in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_bind_textdomain_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bind_textdomain_codeset (); +int +main () +{ +bind_textdomain_codeset (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_bind_textdomain_codeset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_bind_textdomain_codeset=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bind_textdomain_codeset" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_bind_textdomain_codeset" >&6 +if test $ac_cv_lib_intl_bind_textdomain_codeset = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBINTL 1 +_ACEOF + + LIBS="-lintl $LIBS" + +fi + +fi + + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +int a = isfinite(0.0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ISFINITE 1 +_ACEOF + + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_func_finite = no; then + echo "$as_me:$LINENO: checking for finite in -lm" >&5 +echo $ECHO_N "checking for finite in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_finite+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char finite (); +int +main () +{ +finite (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_finite=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_finite=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_finite" >&5 +echo "${ECHO_T}$ac_cv_lib_m_finite" >&6 +if test $ac_cv_lib_m_finite = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FINITE 1 +_ACEOF + + LIBS="$LIBS -lm" +fi + +fi + + +for ac_header in langinfo.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice ## +## ------------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_func in log +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test $ac_cv_func_log = no; then + echo "$as_me:$LINENO: checking for log in -lm" >&5 +echo $ECHO_N "checking for log in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_log+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char log (); +int +main () +{ +log (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_log=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_log=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_log" >&5 +echo "${ECHO_T}$ac_cv_lib_m_log" >&6 +if test $ac_cv_lib_m_log = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOG 1 +_ACEOF + + LIBS="$LIBS -lm" +fi + +fi + + +echo "$as_me:$LINENO: checking for log1p" >&5 +echo $ECHO_N "checking for log1p... $ECHO_C" >&6 +if test "${ac_cv_func_log1p+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define log1p to an innocuous variant, in case declares log1p. + For example, HP-UX 11i declares gettimeofday. */ +#define log1p innocuous_log1p + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char log1p (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef log1p + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char log1p (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_log1p) || defined (__stub___log1p) +choke me +#else +char (*f) () = log1p; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != log1p; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_log1p=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_log1p=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_log1p" >&5 +echo "${ECHO_T}$ac_cv_func_log1p" >&6 +if test $ac_cv_func_log1p = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_LOG1P 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for expm1" >&5 +echo $ECHO_N "checking for expm1... $ECHO_C" >&6 +if test "${ac_cv_func_expm1+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define expm1 to an innocuous variant, in case declares expm1. + For example, HP-UX 11i declares gettimeofday. */ +#define expm1 innocuous_expm1 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char expm1 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef expm1 + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char expm1 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_expm1) || defined (__stub___expm1) +choke me +#else +char (*f) () = expm1; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != expm1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_expm1=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_expm1=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_expm1" >&5 +echo "${ECHO_T}$ac_cv_func_expm1" >&6 +if test $ac_cv_func_expm1 = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_EXPM1 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asinh" >&5 +echo $ECHO_N "checking for asinh... $ECHO_C" >&6 +if test "${ac_cv_func_asinh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define asinh to an innocuous variant, in case declares asinh. + For example, HP-UX 11i declares gettimeofday. */ +#define asinh innocuous_asinh + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char asinh (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef asinh + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asinh (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_asinh) || defined (__stub___asinh) +choke me +#else +char (*f) () = asinh; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != asinh; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_asinh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_asinh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_asinh" >&5 +echo "${ECHO_T}$ac_cv_func_asinh" >&6 +if test $ac_cv_func_asinh = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_ASINH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for acosh" >&5 +echo $ECHO_N "checking for acosh... $ECHO_C" >&6 +if test "${ac_cv_func_acosh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define acosh to an innocuous variant, in case declares acosh. + For example, HP-UX 11i declares gettimeofday. */ +#define acosh innocuous_acosh + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char acosh (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef acosh + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acosh (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_acosh) || defined (__stub___acosh) +choke me +#else +char (*f) () = acosh; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != acosh; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_acosh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_acosh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_acosh" >&5 +echo "${ECHO_T}$ac_cv_func_acosh" >&6 +if test $ac_cv_func_acosh = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_ACOSH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atanh" >&5 +echo $ECHO_N "checking for atanh... $ECHO_C" >&6 +if test "${ac_cv_func_atanh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define atanh to an innocuous variant, in case declares atanh. + For example, HP-UX 11i declares gettimeofday. */ +#define atanh innocuous_atanh + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char atanh (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef atanh + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atanh (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_atanh) || defined (__stub___atanh) +choke me +#else +char (*f) () = atanh; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != atanh; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_atanh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_atanh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_atanh" >&5 +echo "${ECHO_T}$ac_cv_func_atanh" >&6 +if test $ac_cv_func_atanh = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_ATANH 1 +_ACEOF + +fi + + +float_msg=no +EXTRA_LIBS= EXTRA_INCLUDES= +echo "$as_me:$LINENO: checking for working long double with more range or precision than double" >&5 +echo $ECHO_N "checking for working long double with more range or precision than double... $ECHO_C" >&6 +if test "${ac_cv_c_long_double+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + long double foo = 0.0; +int +main () +{ +static int test_array [1 - 2 * !(/* Using '|' rather than '||' catches a GCC 2.95.2 x86 bug. */ + (DBL_MAX < LDBL_MAX) | (LDBL_EPSILON < DBL_EPSILON) + | (DBL_MAX_EXP < LDBL_MAX_EXP) | (DBL_MANT_DIG < LDBL_MANT_DIG))]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_long_double=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_long_double=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_c_long_double" >&5 +echo "${ECHO_T}$ac_cv_c_long_double" >&6 +if test $ac_cv_c_long_double = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LONG_DOUBLE 1 +_ACEOF + +fi + +if test $ac_cv_c_long_double = yes; then + have_mandatory_funcs=yes + need_sunmath=0 + sunmathlinkstuff='-L/opt/SUNWspro/lib -R/opt/SUNWspro/lib -lsunmath' + for ldfunc in fabsl logl log10l ceill floorl powl isnanl finitel; do + as_ac_var=`echo "ac_cv_func_$ldfunc" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ldfunc" >&5 +echo $ECHO_N "checking for $ldfunc... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ldfunc to an innocuous variant, in case declares $ldfunc. + For example, HP-UX 11i declares gettimeofday. */ +#define $ldfunc innocuous_$ldfunc + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ldfunc (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ldfunc + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ldfunc (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ldfunc) || defined (__stub___$ldfunc) +choke me +#else +char (*f) () = $ldfunc; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ldfunc; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + : +else + +as_ac_Lib=`echo "ac_cv_lib_m_$ldfunc" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ldfunc in -lm" >&5 +echo $ECHO_N "checking for $ldfunc in -lm... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Lib+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ldfunc (); +int +main () +{ +$ldfunc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Lib=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +else + as_ac_Lib=`echo "ac_cv_lib_sunmath_$ldfunc" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ldfunc in -lsunmath" >&5 +echo $ECHO_N "checking for $ldfunc in -lsunmath... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Lib+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsunmath -L/opt/SUNWspro/lib $GOFFICE_LIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ldfunc (); +int +main () +{ +$ldfunc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Lib=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + if test $need_sunmath = 0; then + # FIXME: better idea? + LDFLAGS="$LDFLAGS $sunmathlinkstuff" + sunmathinclude=`ls -d /opt/SUNWspro/*/include/cc | sed '$!d'` + CPPFLAGS="$CPPFLAGS -I$sunmathinclude" + fi + need_sunmath=1 +else + have_mandatory_funcs=no +fi + +fi + +fi + + done + if test $need_sunmath = 1; then + EXTRA_LIBS="$EXTRA_LIBS $sunmathlinkstuff" + EXTRA_INCLUDES="$EXTRA_INCLUDES -I$sunmathinclude" + + +for ac_header in sunmath.h floatingpoint.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice ## +## ------------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + { echo "$as_me:$LINENO: WARNING: Long doubles require the $ac_header header." >&5 +echo "$as_me: WARNING: Long doubles require the $ac_header header." >&2;} + have_mandatory_funcs=no +fi + +done + + fi + unset need_sunmath + unset sunmathlinkstuff + unset sunmathinclude + + echo "$as_me:$LINENO: checking for modfl" >&5 +echo $ECHO_N "checking for modfl... $ECHO_C" >&6 +if test "${ac_cv_func_modfl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define modfl to an innocuous variant, in case declares modfl. + For example, HP-UX 11i declares gettimeofday. */ +#define modfl innocuous_modfl + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char modfl (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef modfl + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char modfl (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_modfl) || defined (__stub___modfl) +choke me +#else +char (*f) () = modfl; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != modfl; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_modfl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_modfl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_modfl" >&5 +echo "${ECHO_T}$ac_cv_func_modfl" >&6 +if test $ac_cv_func_modfl = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_MODFL 1 +_ACEOF + +fi + + echo "$as_me:$LINENO: checking for ldexpl" >&5 +echo $ECHO_N "checking for ldexpl... $ECHO_C" >&6 +if test "${ac_cv_func_ldexpl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define ldexpl to an innocuous variant, in case declares ldexpl. + For example, HP-UX 11i declares gettimeofday. */ +#define ldexpl innocuous_ldexpl + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char ldexpl (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef ldexpl + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ldexpl (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_ldexpl) || defined (__stub___ldexpl) +choke me +#else +char (*f) () = ldexpl; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != ldexpl; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_ldexpl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_ldexpl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_ldexpl" >&5 +echo "${ECHO_T}$ac_cv_func_ldexpl" >&6 +if test $ac_cv_func_ldexpl = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_LDEXPL 1 +_ACEOF + +fi + + echo "$as_me:$LINENO: checking for frexpl" >&5 +echo $ECHO_N "checking for frexpl... $ECHO_C" >&6 +if test "${ac_cv_func_frexpl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define frexpl to an innocuous variant, in case declares frexpl. + For example, HP-UX 11i declares gettimeofday. */ +#define frexpl innocuous_frexpl + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char frexpl (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef frexpl + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char frexpl (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_frexpl) || defined (__stub___frexpl) +choke me +#else +char (*f) () = frexpl; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != frexpl; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_frexpl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_frexpl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_frexpl" >&5 +echo "${ECHO_T}$ac_cv_func_frexpl" >&6 +if test $ac_cv_func_frexpl = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_FREXPL 1 +_ACEOF + +fi + + + +for ac_func in strtold +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + if test "$ac_cv_func_strtold" = yes; then + echo "$as_me:$LINENO: checking if we must prototype strtold ourselves" >&5 +echo $ECHO_N "checking if we must prototype strtold ourselves... $ECHO_C" >&6 + if test "$cross_compiling" = yes; then + echo "$as_me:$LINENO: result: assuming not" >&5 +echo "${ECHO_T}assuming not" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + int main () + { + const char *s = "+3.1415e+0"; + char *theend; + long double res = strtold (s, &theend); + return !(*theend == 0 && finitel (res) && + res >= 3.14 && res <= 3.15); + } +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_STRTOLD 1 +_ACEOF + + +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + else + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_SUPPLIED_STRTOLD 1 +_ACEOF + + + +for ac_func in string_to_decimal decimal_to_quadruple +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + if test "x$ac_cv_func_string_to_decimal" != "xyes" || \ + test "x$ac_cv_func_decimal_to_quadruple" != "xyes" || \ + test "x$ac_cv_header_floatingpoint_h" != "xyes"; then + { echo "$as_me:$LINENO: WARNING: You lack the strtold function -- precision will be impaired" >&5 +echo "$as_me: WARNING: You lack the strtold function -- precision will be impaired" >&2;} + fi + fi + if test "$have_mandatory_funcs" = yes; then + float_msg=yes + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_WITH_LONG_DOUBLE 1 +_ACEOF + + else + { echo "$as_me:$LINENO: WARNING: Long double support disabled because of library problems" >&5 +echo "$as_me: WARNING: Long double support disabled because of library problems" >&2;} + fi + unset have_mandatory_funcs +fi + + + +goffice_datadir='${datadir}/goffice/${VERSION}' + +goffice_libdir='${libdir}/goffice/${VERSION}' + +goffice_icondir='${datadir}/pixmaps/goffice' + +goffice_localedir='${prefix}/${DATADIRNAME}/locale' + +goffice_plugindir='${goffice_libdir}/plugins' + +goffice_gladedir='${goffice_datadir}/glade' + + + +cat >>confdefs.h <<\_ACEOF +#define GOFFICE_VERSION "0.0.4" +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define GO_VERSION_EPOCH 0 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define GO_VERSION_MAJOR 0 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define GO_VERSION_MINOR 4 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define GO_VERSION_EXTRA "" +_ACEOF + + + ac_config_files="$ac_config_files Makefile libgoffice-1.pc goffice/Makefile goffice/app/Makefile goffice/utils/Makefile goffice/data/Makefile goffice/gtk/Makefile goffice/graph/Makefile goffice/drawing/Makefile goffice/ms-compat/Makefile goffice/cut-n-paste/Makefile goffice/cut-n-paste/foocanvas/Makefile goffice/cut-n-paste/pcre/Makefile plugins/Makefile plugins/plot_barcol/Makefile plugins/plot_pie/Makefile plugins/plot_radar/Makefile plugins/plot_xy/Makefile plugins/plot_surface/Makefile plugins/plot_boxes/Makefile plugins/reg_linear/Makefile pixmaps/Makefile po/Makefile.in tests/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + + mv -f po/POTFILES po/POTFILES.tmp + sed -e '/[[]encoding.*]/d' -e 's/[[].*] *//' < po/POTFILES.tmp > po/POTFILES + rm -f po/POTFILES.tmp + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_CAIRO_TRUE}" && test -z "${WITH_CAIRO_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_CAIRO\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_CAIRO\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_GTK_TRUE}" && test -z "${WITH_GTK_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_GTK\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_GTK\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_GNOME_TRUE}" && test -z "${WITH_GNOME_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_GNOME\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_GNOME\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_WIN32_TRUE}" && test -z "${WITH_WIN32_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by goffice $as_me 0.0.4, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +goffice config.status 0.0.4 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir} +INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}' +MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}' +XGETTEXT='${INTLTOOL_XGETTEXT}' +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libgoffice-1.pc" ) CONFIG_FILES="$CONFIG_FILES libgoffice-1.pc" ;; + "goffice/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/Makefile" ;; + "goffice/app/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/app/Makefile" ;; + "goffice/utils/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/utils/Makefile" ;; + "goffice/data/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/data/Makefile" ;; + "goffice/gtk/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/gtk/Makefile" ;; + "goffice/graph/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/graph/Makefile" ;; + "goffice/drawing/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/drawing/Makefile" ;; + "goffice/ms-compat/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/ms-compat/Makefile" ;; + "goffice/cut-n-paste/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/cut-n-paste/Makefile" ;; + "goffice/cut-n-paste/foocanvas/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/cut-n-paste/foocanvas/Makefile" ;; + "goffice/cut-n-paste/pcre/Makefile" ) CONFIG_FILES="$CONFIG_FILES goffice/cut-n-paste/pcre/Makefile" ;; + "plugins/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + "plugins/plot_barcol/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/plot_barcol/Makefile" ;; + "plugins/plot_pie/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/plot_pie/Makefile" ;; + "plugins/plot_radar/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/plot_radar/Makefile" ;; + "plugins/plot_xy/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/plot_xy/Makefile" ;; + "plugins/plot_surface/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/plot_surface/Makefile" ;; + "plugins/plot_boxes/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/plot_boxes/Makefile" ;; + "plugins/reg_linear/Makefile" ) CONFIG_FILES="$CONFIG_FILES plugins/reg_linear/Makefile" ;; + "pixmaps/Makefile" ) CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;; + "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "intltool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS intltool" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "goffice/goffice-config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS goffice/goffice-config.h" ;; + "goffice/goffice-features.h" ) CONFIG_HEADERS="$CONFIG_HEADERS goffice/goffice-features.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@AMTAR@,$AMTAR,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@GOFFICE_LIB_VERSION@,$GOFFICE_LIB_VERSION,;t t +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +s,@MAINT@,$MAINT,;t t +s,@INTLTOOL_DESKTOP_RULE@,$INTLTOOL_DESKTOP_RULE,;t t +s,@INTLTOOL_DIRECTORY_RULE@,$INTLTOOL_DIRECTORY_RULE,;t t +s,@INTLTOOL_KEYS_RULE@,$INTLTOOL_KEYS_RULE,;t t +s,@INTLTOOL_PROP_RULE@,$INTLTOOL_PROP_RULE,;t t +s,@INTLTOOL_OAF_RULE@,$INTLTOOL_OAF_RULE,;t t +s,@INTLTOOL_PONG_RULE@,$INTLTOOL_PONG_RULE,;t t +s,@INTLTOOL_SERVER_RULE@,$INTLTOOL_SERVER_RULE,;t t +s,@INTLTOOL_SHEET_RULE@,$INTLTOOL_SHEET_RULE,;t t +s,@INTLTOOL_SOUNDLIST_RULE@,$INTLTOOL_SOUNDLIST_RULE,;t t +s,@INTLTOOL_UI_RULE@,$INTLTOOL_UI_RULE,;t t +s,@INTLTOOL_XAM_RULE@,$INTLTOOL_XAM_RULE,;t t +s,@INTLTOOL_KBD_RULE@,$INTLTOOL_KBD_RULE,;t t +s,@INTLTOOL_XML_RULE@,$INTLTOOL_XML_RULE,;t t +s,@INTLTOOL_XML_NOMERGE_RULE@,$INTLTOOL_XML_NOMERGE_RULE,;t t +s,@INTLTOOL_CAVES_RULE@,$INTLTOOL_CAVES_RULE,;t t +s,@INTLTOOL_SCHEMAS_RULE@,$INTLTOOL_SCHEMAS_RULE,;t t +s,@INTLTOOL_THEME_RULE@,$INTLTOOL_THEME_RULE,;t t +s,@INTLTOOL_EXTRACT@,$INTLTOOL_EXTRACT,;t t +s,@INTLTOOL_MERGE@,$INTLTOOL_MERGE,;t t +s,@INTLTOOL_UPDATE@,$INTLTOOL_UPDATE,;t t +s,@INTLTOOL_PERL@,$INTLTOOL_PERL,;t t +s,@INTLTOOL_ICONV@,$INTLTOOL_ICONV,;t t +s,@INTLTOOL_MSGFMT@,$INTLTOOL_MSGFMT,;t t +s,@INTLTOOL_MSGMERGE@,$INTLTOOL_MSGMERGE,;t t +s,@INTLTOOL_XGETTEXT@,$INTLTOOL_XGETTEXT,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@YACC@,$YACC,;t t +s,@LEX@,$LEX,;t t +s,@LEXLIB@,$LEXLIB,;t t +s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t +s,@LN_S@,$LN_S,;t t +s,@EGREP@,$EGREP,;t t +s,@ECHO@,$ECHO,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@CPP@,$CPP,;t t +s,@CXX@,$CXX,;t t +s,@CXXFLAGS@,$CXXFLAGS,;t t +s,@ac_ct_CXX@,$ac_ct_CXX,;t t +s,@CXXDEPMODE@,$CXXDEPMODE,;t t +s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t +s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t +s,@CXXCPP@,$CXXCPP,;t t +s,@F77@,$F77,;t t +s,@FFLAGS@,$FFLAGS,;t t +s,@ac_ct_F77@,$ac_ct_F77,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@ACLOCAL_AMFLAGS@,$ACLOCAL_AMFLAGS,;t t +s,@PKG_CONFIG@,$PKG_CONFIG,;t t +s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t +s,@CAIRO_CFLAGS@,$CAIRO_CFLAGS,;t t +s,@CAIRO_LIBS@,$CAIRO_LIBS,;t t +s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t +s,@GTK_LIBS@,$GTK_LIBS,;t t +s,@GNOME_CFLAGS@,$GNOME_CFLAGS,;t t +s,@GNOME_LIBS@,$GNOME_LIBS,;t t +s,@WITH_CAIRO_TRUE@,$WITH_CAIRO_TRUE,;t t +s,@WITH_CAIRO_FALSE@,$WITH_CAIRO_FALSE,;t t +s,@WITH_GTK_TRUE@,$WITH_GTK_TRUE,;t t +s,@WITH_GTK_FALSE@,$WITH_GTK_FALSE,;t t +s,@WITH_GNOME_TRUE@,$WITH_GNOME_TRUE,;t t +s,@WITH_GNOME_FALSE@,$WITH_GNOME_FALSE,;t t +s,@GOFFICE_CFLAGS@,$GOFFICE_CFLAGS,;t t +s,@GOFFICE_LIBS@,$GOFFICE_LIBS,;t t +s,@RENDER_LIBS@,$RENDER_LIBS,;t t +s,@WINDRES@,$WINDRES,;t t +s,@ac_ct_WINDRES@,$ac_ct_WINDRES,;t t +s,@WITH_WIN32_TRUE@,$WITH_WIN32_TRUE,;t t +s,@WITH_WIN32_FALSE@,$WITH_WIN32_FALSE,;t t +s,@GOFFICE_PLUGIN_LDFLAGS@,$GOFFICE_PLUGIN_LDFLAGS,;t t +s,@GOFFICE_PLUGIN_LIBADD@,$GOFFICE_PLUGIN_LIBADD,;t t +s,@GLIB_GENMARSHAL@,$GLIB_GENMARSHAL,;t t +s,@GDK_PIXBUF_CSOURCE@,$GDK_PIXBUF_CSOURCE,;t t +s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +s,@ALL_LINGUAS@,$ALL_LINGUAS,;t t +s,@GETTEXT_PACKAGE@,$GETTEXT_PACKAGE,;t t +s,@USE_NLS@,$USE_NLS,;t t +s,@MSGFMT@,$MSGFMT,;t t +s,@GMSGFMT@,$GMSGFMT,;t t +s,@XGETTEXT@,$XGETTEXT,;t t +s,@CATALOGS@,$CATALOGS,;t t +s,@CATOBJEXT@,$CATOBJEXT,;t t +s,@DATADIRNAME@,$DATADIRNAME,;t t +s,@GMOFILES@,$GMOFILES,;t t +s,@INSTOBJEXT@,$INSTOBJEXT,;t t +s,@INTLLIBS@,$INTLLIBS,;t t +s,@PO_IN_DATADIR_TRUE@,$PO_IN_DATADIR_TRUE,;t t +s,@PO_IN_DATADIR_FALSE@,$PO_IN_DATADIR_FALSE,;t t +s,@POFILES@,$POFILES,;t t +s,@POSUB@,$POSUB,;t t +s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +s,@EXTRA_LIBS@,$EXTRA_LIBS,;t t +s,@EXTRA_INCLUDES@,$EXTRA_INCLUDES,;t t +s,@goffice_datadir@,$goffice_datadir,;t t +s,@goffice_libdir@,$goffice_libdir,;t t +s,@goffice_icondir@,$goffice_icondir,;t t +s,@goffice_localedir@,$goffice_localedir,;t t +s,@goffice_plugindir@,$goffice_plugindir,;t t +s,@goffice_gladedir@,$goffice_gladedir,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + intltool ) + +intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \ + -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \ + -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \ + -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \ + -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \ + -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'" + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \ + > intltool-extract.out +if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then + rm -f intltool-extract.out +else + mv -f intltool-extract.out intltool-extract +fi +chmod ugo+x intltool-extract +chmod u+w intltool-extract + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \ + > intltool-merge.out +if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then + rm -f intltool-merge.out +else + mv -f intltool-merge.out intltool-merge +fi +chmod ugo+x intltool-merge +chmod u+w intltool-merge + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \ + > intltool-update.out +if cmp -s intltool-update intltool-update.out 2>/dev/null; then + rm -f intltool-update.out +else + mv -f intltool-update.out intltool-update +fi +chmod ugo+x intltool-update +chmod u+w intltool-update + + ;; + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + default-1 ) case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + + +echo " + +Configuration: + + Source code location: ${srcdir} + Compiler: ${CC} + Compiler flags: ${CFLAGS} + Long double support: ${float_msg} + + Cairo support: ${cairo_msg} + UI: ${ui_msg} +" diff --git a/lib/goffice-0.0.4/configure.in b/lib/goffice-0.0.4/configure.in new file mode 100644 index 0000000000..dfdc455ca7 --- /dev/null +++ b/lib/goffice-0.0.4/configure.in @@ -0,0 +1,503 @@ +-*- mode: m4 -*- +dnl We require Automake 1.7.2, which requires Autoconf 2.54. +dnl (It needs _AC_AM_CONFIG_HEADER_HOOK, for example.) +AC_PREREQ(2.54) + +m4_define([goffice_version_epoch], [0]) +m4_define([goffice_version_major], [0]) +m4_define([goffice_version_minor], [4]) +m4_define([goffice_version_extra], []) +m4_define([goffice_full_version], + [goffice_version_epoch.goffice_version_major.goffice_version_minor[]goffice_version_extra]) + +dnl Emphasize some of the checks. +m4_define([BIG_CHECKING], [AC_MSG_CHECKING([ +======== $1])]) + +AC_INIT([goffice], [goffice_full_version], + [http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice]) + +AC_CONFIG_SRCDIR(goffice/goffice.h) +AM_INIT_AUTOMAKE([dist-bzip2]) + +dnl Version info for libraries = CURRENT:REVISION:AGE +dnl +dnl FIXME: This formula is wrong. --kasal +dnl +AC_SUBST(GOFFICE_LIB_VERSION, +m4_eval(goffice_version_epoch + goffice_version_major)[]dnl +:goffice_version_minor:goffice_version_major) + +dnl This one is created by autoheader, ... +AC_CONFIG_HEADERS(goffice/goffice-config.h) + +dnl ... and this one is a small subset, maintained manually, +dnl which will be installed. +AC_CONFIG_HEADERS(goffice/goffice-features.h) +dnl +dnl Make sure these two won't clash. Put the following to goffice-config.h: +AH_BOTTOM([/* Don't include goffice-features.h, it's a subset of goffice-config.h. */ +#define GOFFICE_FEATURES_H]) + +AM_MAINTAINER_MODE + +# Make --disable-static the default +AC_DISABLE_STATIC + +dnl We need intltool >= 0.27.2 to extract the UTF-8 chars from source code +AC_PROG_INTLTOOL([0.27.2]) + +dnl We use $host_os: +AC_CANONICAL_HOST + +AC_ISC_POSIX +AC_PROG_CC +AC_PROG_YACC +AM_PROG_LEX +AC_PROG_LN_S +AM_PROG_LIBTOOL +AC_STDC_HEADERS +AC_SYS_LARGEFILE + +dnl Propagate Gnome-specific variable ACLOCAL_FLAGS to Makefile. +AC_SUBST(ACLOCAL_AMFLAGS, $ACLOCAL_FLAGS) + +dnl The first call to PKG_CHECK_MODULES is inside an `if.' +dnl We have to call PKG_PROG_PKG_CONFIG explicitly; otherwise it would +dnl get expanded just before the first occurence of PKG_CHECK_MODULES +dnl and might escape execution. +PKG_PROG_PKG_CONFIG + +dnl ***************************** +goffice_reqs=" + glib-2.0 >= 2.4.8 + gobject-2.0 >= 2.4.8 + gmodule-2.0 >= 2.4.8 + libgsf-1 >= 1.12.2 + libxml-2.0 >= 2.4.12 + pango >= 1.6.0 + pangoft2 >= 1.6.0 +" +goffice_cairo_reqs=" + cairo >= 0.5.0 +" +goffice_gtk_reqs=" + gtk+-2.0 >= 2.4.14 + libglade-2.0 >= 2.3.6 + libgnomeprint-2.2 >= 2.8.2 + libart-2.0 >= 2.3.11 +" +goffice_gnome_reqs=" + gconf-2.0 + libgnomeui-2.0 >= 2.0.0 + libgsf-gnome-1 >= 1.12.2 +" + +dnl ********************* +dnl Should we use cairo ? +dnl ********************* +goffice_with_cairo=false +AC_ARG_WITH(cairo, [ --{with,without}-cairo Use cairo for graph rendering]) +if test "x$with_cairo" = xyes; then + cairo_msg="Enabled" + PKG_CHECK_MODULES(CAIRO, [$goffice_cairo_reqs]) + AC_DEFINE(WITH_CAIRO, 1, [Define if goffice is build with cairo]) + goffice_reqs="$goffice_reqs $goffice_cairo_reqs" + goffice_with_cairo=true +else + cairo_msg="Disabled" + goffice_with_cairo=false +fi + +dnl ******************* +dnl Should we use gtk ? +dnl ******************* +goffice_with_gtk=true +AC_ARG_WITH(gtk, [ --without-gtk Build without UI]) +if test "x$with_gtk" = xno; then + ui_msg="None (Gtk disabled by request)" + goffice_with_gtk=false +else + dnl We shouldn't silently default to --without-gtk. + dnl If the requirements are not met, fail. + ui_msg="Gtk" + PKG_CHECK_MODULES(GTK, [$goffice_gtk_reqs]) +fi + +goffice_with_gnome=$goffice_with_gtk +if test "x$goffice_with_gtk" = "xtrue" ; then + AC_DEFINE(WITH_GTK, 1, [Define if UI is built]) + goffice_reqs="$goffice_reqs $goffice_gtk_reqs" + + dnl ************************************ + dnl Are the GNOME extensions available ? + dnl ************************************ + + goffice_with_gnome=true + AC_ARG_WITH(gnome, + [ --{with,without}-gnome Use GNOME extensions], + [if test "x$withval" = xno; then + goffice_with_gnome=false + ui_msg="Gtk+ (Gnome disabled by request)" + fi] + ) + if test "x$goffice_with_gnome" = "xtrue"; then + PKG_CHECK_MODULES(GNOME, [$goffice_gnome_reqs], + [ui_msg="Gnome"], + [ui_msg="Gtk (missing gnome dependencies)" ; goffice_with_gnome=false]) + fi + + if test "x$goffice_with_gnome" = "xtrue"; then + AC_DEFINE(WITH_GNOME, 1, [Define if GNOME extensions are available]) + goffice_reqs="$goffice_reqs $goffice_gnome_reqs" + fi +fi +AM_CONDITIONAL(WITH_CAIRO, $goffice_with_cairo) +AM_CONDITIONAL(WITH_GTK, $goffice_with_gtk) +AM_CONDITIONAL(WITH_GNOME, $goffice_with_gnome) + +dnl **************************** +dnl now that we have selected out libraries the whole collection in one +dnl shot so that we can have a nice neat compile/link line +dnl **************************** + +PKG_CHECK_MODULES(GOFFICE, $goffice_reqs) + +dnl Checks for Xft/XRender +AC_CHECK_LIB(Xrender, XRenderFindFormat, + [AC_SUBST(RENDER_LIBS, "-lXrender -lXext") + AC_DEFINE(HAVE_RENDER, 1, [Define if libXrender is available.])], + [AC_SUBST(RENDER_LIBS, "")], + [-lXext]) + +dnl ***************************** +AC_MSG_CHECKING([for Win32 platform]) +with_win32=no +case $host_os in + mingw* | pw32* | cygwin*) + with_win32=yes + GOFFICE_PLUGIN_LDFLAGS="-Wl,--enable-runtime-pseudo-relo,--export-all-symbols $GOFFICE_PLUGIN_LDFLAGS" + AC_ARG_VAR(WINDRES, [The windres executable (used by win32 builds only).]) + AC_CHECK_TOOL(WINDRES, windres, :) + ;; +esac +AC_MSG_RESULT($with_win32) +AM_CONDITIONAL(WITH_WIN32, test $with_win32 = yes) + +dnl ***************************** +dnl FIXME: perhaps declare with AC_ARG_VAR? +dnl If we use the initial value of a variable, we have to make it precious. +dnl +GOFFICE_PLUGIN_LDFLAGS="-avoid-version -no-undefined $GOFFICE_PLUGIN_LDFLAGS" +GOFFICE_PLUGIN_LIBADD="\$(top_builddir)/goffice/libgoffice-1.la $GOFFICE_LIBS $GOFFICE_PLUGIN_LIBADD" +AC_SUBST(GOFFICE_PLUGIN_LDFLAGS) +AC_SUBST(GOFFICE_PLUGIN_LIBADD) + +dnl disable for in stable release, re-enable for development series +CFLAGS="$CFLAGS -DG_DISABLE_DEPRECATED" +CFLAGS="$CFLAGS -DPANGO_DISABLE_DEPRECATED" +if test "x$goffice_with_gtk" = "xtrue"; then + CFLAGS="$CFLAGS -DGDK_PIXBUF_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DGDK_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DGDK_MULTIHEAD_SAFE" + CFLAGS="$CFLAGS -DGTK_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DLIBGLADE_DISABLE_DEPRECATED" +fi +if test "x$goffice_with_gnome" = "xtrue"; then + CFLAGS="$CFLAGS -DGNOME_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DBONOBO_DISABLE_DEPRECATED" + CFLAGS="$CFLAGS -DBONOBO_UI_DISABLE_DEPRECATED" +fi + +dnl **************************** +dnl prep the pixmap generator +dnl **************************** + +AC_ARG_VAR(GLIB_GENMARSHAL, [The glib-genmarshal executable.]) +AC_CHECK_PROG(GLIB_GENMARSHAL, glib-genmarshal, glib-genmarshal) + +AC_ARG_VAR(GDK_PIXBUF_CSOURCE, [The gdk-pixbuf-csource executable.]) +AC_CHECK_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, gdk-pixbuf-csource) + +## this should come after `AC_PROG_CC' +ifdef([GNOME_COMPILE_WARNINGS], + [GNOME_COMPILE_WARNINGS] CFLAGS="$CFLAGS $WARN_CFLAGS", + [] +) +set_more_warnings=yes +if test "$GCC" = "yes" -a "x$set_more_warnings" != "xno"; then + for option in -Wsign-compare -Wpointer-arith -Wnested-externs -Wchar-subscripts -Wwrite-strings -Wdeclaration-after-statement -Wmissing-noreturn -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-format-attribute; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + AC_MSG_CHECKING([whether gcc understands $option]) + AC_TRY_COMPILE([], [], + has_option=yes, + has_option=no,) + if test $has_option = no; then + CFLAGS="$SAVE_CFLAGS" + fi + AC_MSG_RESULT($has_option) + unset has_option + unset SAVE_CFLAGS + done + unset option +fi +AC_SUBST(WARN_CFLAGS) + +AC_CHECK_DECL(fdopen, fdopen_works=yes, fdopen_works=no) +if test $fdopen_works = no ; then + unset ac_cv_have_decl_fdopen + CFLAGS="$CFLAGS -D_POSIX_SOURCE" + AC_MSG_NOTICE([adding -D_POSIX_SOURCE to CFLAGS]) + AC_CHECK_DECL(fdopen, fdopen_works=yes, fdopen_works=no) + if test $fdopen_works = no ; then + AC_MSG_ERROR([fdopen is not available]) + fi +fi + +# Unfortunately, -D_POSIX_SOURCE turns off struct timeval on Solaris +AC_MSG_CHECKING([whether struct timeval is available]) +AC_TRY_COMPILE([#include ], [struct timeval tv;], struct_timeval_works=yes, struct_timeval_works=no) +AC_MSG_RESULT($struct_timeval_works) + +if test $struct_timeval_works = no ; then + CFLAGS="$CFLAGS -D__EXTENSIONS__" + AC_MSG_CHECKING([whether struct timeval is available with -D__EXTENSIONS__]) + AC_TRY_COMPILE([#include ], [struct timeval tv;], struct_timeval_works=yes, struct_timeval_works=no) + AC_MSG_RESULT($struct_timeval_works) + if test $struct_timeval_works = no ; then + AC_MSG_ERROR([struct timeval is not available]) + fi +fi + +AC_CHECK_FUNC(gettimeofday, + [AC_DEFINE(HAVE_GETTIMEOFDAY, 1, + [Define if the gettimeofday function is available] + )]) + +dnl M_PI +AC_MSG_CHECKING([whether M_PI is available]) +AC_TRY_COMPILE([#include ], [double f = M_PI], works_without_bsd_source=yes, works_without_bsd_source=no) +AC_MSG_RESULT($works_without_bsd_source) + +if test $works_without_bsd_source = no ; then + CFLAGS="$CFLAGS -D_BSD_SOURCE" + AC_MSG_CHECKING([whether M_PI is available with -D_BSD_SOURCE]) + AC_TRY_COMPILE([#include ], [double f = M_PI], m_pi_works=yes, m_pi_works=no) + AC_MSG_RESULT($m_pi_works) + if test $m_pi_works = no ; then + AC_MSG_ERROR([M_PI is not available]) + fi +fi + +dnl ************************************************** +AC_SUBST(ALL_LINGUAS, +"am az bg ca cs da de el en_CA en_GB es et fi fr ga gl he hr hu it ja ko lv ml mr ms nb nl nn no pl pt pt_BR ro ru sk sr sr@Latn sv tr uk vi zh_CN zh_TW") + +AC_SUBST(GETTEXT_PACKAGE, goffice) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", + [The package name, for gettext]) +AM_GLIB_GNU_GETTEXT + +dnl +dnl On Solaris finite() needs ieeefp.h +dnl Either of these seem to signal IEEE754 math, see mathfunc.c +dnl +AC_CHECK_HEADERS(ieeefp.h ieee754.h) + +dnl Check for some functions +AC_CHECK_FUNCS(random drand48 finite memmove mkdtemp uname times sysconf) + +dnl FIXME: Does this really belong here? +AC_CHECK_FUNC(bind_textdomain_codeset,,[AC_CHECK_LIB(intl,bind_textdomain_codeset)]) + +dnl isfinite is a macro on HPUX +AC_TRY_COMPILE([#include ], [int a = isfinite(0.0)], + [AC_DEFINE(HAVE_ISFINITE, 1, + [Define if the isfinite() macro is available] + ) + ], []) + +dnl +dnl On BSD, we seem to need -lm for finite +dnl +if test $ac_cv_func_finite = no; then + AC_CHECK_LIB(m, finite, + [AC_DEFINE(HAVE_FINITE, 1, + [Define if the finite function is available] + ) + LIBS="$LIBS -lm"]) +fi + +dnl check for complete locale implementation +AC_CHECK_HEADERS(langinfo.h) + +dnl Handle systems that have stuff in -lm. +AC_CHECK_FUNCS(log) +if test $ac_cv_func_log = no; then + AC_CHECK_LIB(m, log, + [AC_DEFINE(HAVE_LOG, 1, + [Define if the log function is available] + ) + LIBS="$LIBS -lm"]) +fi + +AC_DEFUN([GOFFICE_CHECK_FUNC], +[AC_CHECK_FUNC([$1], + [], + [AC_DEFINE([GOFFICE_SUPPLIED_]AS_TR_CPP([$1]), + 1, + [Define if G Office supplies $1.])])dnl +]) +GOFFICE_CHECK_FUNC(log1p) +GOFFICE_CHECK_FUNC(expm1) +GOFFICE_CHECK_FUNC(asinh) +GOFFICE_CHECK_FUNC(acosh) +GOFFICE_CHECK_FUNC(atanh) + +float_msg=no +EXTRA_LIBS= EXTRA_INCLUDES= +AC_C_LONG_DOUBLE +if test $ac_cv_c_long_double = yes; then + have_mandatory_funcs=yes + need_sunmath=0 + sunmathlinkstuff='-L/opt/SUNWspro/lib -R/opt/SUNWspro/lib -lsunmath' + for ldfunc in fabsl logl log10l ceill floorl powl isnanl finitel; do + AC_CHECK_FUNC($ldfunc, + , + [AC_CHECK_LIB(m, + $ldfunc, + , + [AC_CHECK_LIB(sunmath, + $ldfunc, + [ if test $need_sunmath = 0; then + # FIXME: better idea? + LDFLAGS="$LDFLAGS $sunmathlinkstuff" + sunmathinclude=`ls -d /opt/SUNWspro/*/include/cc | sed '$!d'` + CPPFLAGS="$CPPFLAGS -I$sunmathinclude" + fi + need_sunmath=1 ], + [have_mandatory_funcs=no], + [-L/opt/SUNWspro/lib $GOFFICE_LIBS])])]) + done + if test $need_sunmath = 1; then + EXTRA_LIBS="$EXTRA_LIBS $sunmathlinkstuff" + EXTRA_INCLUDES="$EXTRA_INCLUDES -I$sunmathinclude" + AC_CHECK_HEADERS([sunmath.h floatingpoint.h], + , + [AC_MSG_WARN([Long doubles require the $ac_header header.]) + have_mandatory_funcs=no]) + fi + unset need_sunmath + unset sunmathlinkstuff + unset sunmathinclude + + GOFFICE_CHECK_FUNC(modfl) + GOFFICE_CHECK_FUNC(ldexpl) + GOFFICE_CHECK_FUNC(frexpl) + + AC_CHECK_FUNCS(strtold) + if test "$ac_cv_func_strtold" = yes; then + AC_MSG_CHECKING([if we must prototype strtold ourselves]) + AC_TRY_RUN([#include + int main () + { + const char *s = "+3.1415e+0"; + char *theend; + long double res = strtold (s, &theend); + return !(*theend == 0 && finitel (res) && + res >= 3.14 && res <= 3.15); + }], + [AC_MSG_RESULT(no)], + [AC_MSG_RESULT(yes) + AC_DEFINE([GOFFICE_SUPPLIED_STRTOLD], 1, + [Define if G Office supplies strtold.]) + ], + [AC_MSG_RESULT(assuming not)]) + else + AC_DEFINE([GOFFICE_SUPPLIED_STRTOLD], 1, + [Define if G Office supplies strtold.]) + AC_CHECK_FUNCS(string_to_decimal decimal_to_quadruple) + if test "x$ac_cv_func_string_to_decimal" != "xyes" || \ + test "x$ac_cv_func_decimal_to_quadruple" != "xyes" || \ + test "x$ac_cv_header_floatingpoint_h" != "xyes"; then + AC_MSG_WARN([You lack the strtold function -- precision will be impaired]) + fi + fi + if test "$have_mandatory_funcs" = yes; then + float_msg=yes + AC_DEFINE([GOFFICE_WITH_LONG_DOUBLE], 1, + [Define if G Office supports long double.]) + else + AC_MSG_WARN([Long double support disabled because of library problems]) + fi + unset have_mandatory_funcs +fi +AC_SUBST(EXTRA_LIBS) +AC_SUBST(EXTRA_INCLUDES) + +dnl ****************** +dnl * Config defaults +dnl ****************** +dnl +dnl These are changed in goffice.c for WIN32 packages +AC_SUBST(goffice_datadir, '${datadir}/goffice/${VERSION}') +AC_SUBST(goffice_libdir, '${libdir}/goffice/${VERSION}') +AC_SUBST(goffice_icondir, '${datadir}/pixmaps/goffice') +AC_SUBST(goffice_localedir, '${prefix}/${DATADIRNAME}/locale') +dnl +AC_SUBST(goffice_plugindir, '${goffice_libdir}/plugins') +AC_SUBST(goffice_gladedir, '${goffice_datadir}/glade') + +dnl Export to goffice-config.h and goffice-features.h +AC_DEFINE(GOFFICE_VERSION, "goffice_full_version", + [The version number of this release, possibly with additional suffix]) +AC_DEFINE(GO_VERSION_EPOCH, goffice_version_epoch, + [The Epoch of this release]) +AC_DEFINE(GO_VERSION_MAJOR, goffice_version_major, + [The Major version number of this release]) +AC_DEFINE(GO_VERSION_MINOR, goffice_version_minor, + [The Minor version number of this release]) +AC_DEFINE(GO_VERSION_EXTRA, "goffice_version_extra", + [Extra, possibly empty tag for this release]) + +AC_CONFIG_FILES([ +Makefile +libgoffice-1.pc +goffice/Makefile +goffice/app/Makefile +goffice/utils/Makefile +goffice/data/Makefile +goffice/gtk/Makefile +goffice/graph/Makefile +goffice/drawing/Makefile +goffice/ms-compat/Makefile +goffice/cut-n-paste/Makefile +goffice/cut-n-paste/foocanvas/Makefile +goffice/cut-n-paste/pcre/Makefile +plugins/Makefile +plugins/plot_barcol/Makefile +plugins/plot_pie/Makefile +plugins/plot_radar/Makefile +plugins/plot_xy/Makefile +plugins/plot_surface/Makefile +plugins/plot_boxes/Makefile +plugins/reg_linear/Makefile +pixmaps/Makefile +po/Makefile.in +tests/Makefile +]) +AC_OUTPUT + +echo " + +Configuration: + + Source code location: ${srcdir} + Compiler: ${CC} + Compiler flags: ${CFLAGS} + Long double support: ${float_msg} + + Cairo support: ${cairo_msg} + UI: ${ui_msg} +" diff --git a/lib/goffice-0.0.4/depcomp b/lib/goffice-0.0.4/depcomp new file mode 100755 index 0000000000..edb5d38efd --- /dev/null +++ b/lib/goffice-0.0.4/depcomp @@ -0,0 +1,479 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/lib/goffice-0.0.4/goffice-plugins.mk b/lib/goffice-0.0.4/goffice-plugins.mk new file mode 100644 index 0000000000..aa65f29f4e --- /dev/null +++ b/lib/goffice-0.0.4/goffice-plugins.mk @@ -0,0 +1,7 @@ +AM_CPPFLAGS = \ + -I$(top_srcdir)/lib/libgsf-1.12.3 \ + -I$(top_srcdir)/lib/goffice-0.0.4 \ + -I$(top_builddir)/lib/goffice-0.0.4 \ + $(GOFFICE_DEPS_CFLAGS) + +GOFFICE_PLUGIN_FLAGS = $(GOFFICE_PLUGIN_LDFLAGS) diff --git a/lib/goffice-0.0.4/goffice.mk b/lib/goffice-0.0.4/goffice.mk new file mode 100644 index 0000000000..7ab833f029 --- /dev/null +++ b/lib/goffice-0.0.4/goffice.mk @@ -0,0 +1,11 @@ +AM_CPPFLAGS = \ + -I$(top_srcdir)/lib/libgsf-1.12.3 \ + -I$(top_builddir)/lib/goffice-0.0.4 \ + -I$(top_srcdir)/lib/goffice-0.0.4 \ + $(GOFFICE_DEPS_CFLAGS) + +AM_LDFLAGS = \ + $(GSF_LIBS) + +GOFFICE_PLUGIN_FLAGS = $(GOFFICE_PLUGIN_LDFLAGS) +goffice_include_dir = $(includedir)/libgoffice-1/goffice diff --git a/lib/goffice-0.0.4/goffice/Makefile.am b/lib/goffice-0.0.4/goffice/Makefile.am new file mode 100644 index 0000000000..d5fd17a148 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/Makefile.am @@ -0,0 +1,58 @@ +SUBDIRS = utils data app graph gtk drawing ms-compat cut-n-paste + +lib_LTLIBRARIES = libgoffice-1.la + +libgoffice_1_la_LIBADD = \ + cut-n-paste/pcre/libpcre.la \ + utils/libgoffice-utils.la \ + app/libgoffice-app.la \ + data/libgoffice-data.la \ + gtk/libgoffice-gtk.la \ + cut-n-paste/foocanvas/libfoocanvas.la \ + graph/libgoffice-graph.la \ + drawing/libgoffice-drawing.la \ + ms-compat/libgoffice-ms-compat.la \ + $(GOFFICE_DEPS_LIBS) + +libgoffice_1_la_LDFLAGS = -version-info $(GOFFICE_LIB_VERSION) +if WITH_WIN32 +libgoffice_1_la_LDFLAGS += -no-undefined -Wl,-export-all-symbols +libgoffice_1_la_LIBADD += utils/libgoffice-win32-stub.la +endif + +BUILT_SOURCES = goffice-paths.h +CLEANFILES = $(BUILT_SOURCES) + +libgoffice_1_la_SOURCES = \ + $(BUILT_SOURCES) \ + goffice.c \ + goffice-priv.h +if !HAVE_GLIB26 + libgoffice_1_la_SOURCES += glib24_26-compat.c +endif + +libgoffice_1_ladir = $(goffice_include_dir) +libgoffice_1_la_HEADERS = \ + goffice.h +if !HAVE_GLIB26 + libgoffice_1_la_HEADERS += glib24_26-compat.h +endif + +# Depends on this Makefile, because it uses make variables. +goffice-paths.h: Makefile + @echo 'creating $@' + @( \ + echo '/* This file has been automatically generated. Do not edit. */'; \ + echo ''; \ + echo '#ifndef GOFFICE_PATHS_H'; \ + echo '#define GOFFICE_PATHS_H'; \ + echo ''; \ + echo '#define GOFFICE_DATADIR "$(goffice_datadir)"'; \ + echo '#define GOFFICE_LIBDIR "$(goffice_libdir)"'; \ + echo '#define GOFFICE_ICONDIR "$(goffice_icondir)"'; \ + echo '#define GOFFICE_LOCALEDIR "$(goffice_localedir)"'; \ + echo ''; \ + echo '#endif /* GOFFICE_PATHS_H */'; \ + ) >$@ + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice-0.0.4/goffice/app/Makefile.am b/lib/goffice-0.0.4/goffice/app/Makefile.am new file mode 100644 index 0000000000..e3ee660aec --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/Makefile.am @@ -0,0 +1,54 @@ +noinst_LTLIBRARIES = libgoffice-app.la + +noinst_HEADERS = \ + file-priv.h \ + io-context-priv.h + +libgoffice_app_la_SOURCES = \ + go-doc.c \ + go-doc-control.c \ + \ + go-plugin.c \ + go-plugin-loader.c \ + go-plugin-loader-module.c \ + go-plugin-service.c \ + \ + file.c \ + error-info.c \ + io-context.c \ + go-cmd-context.c + +libgoffice_app_ladir = $(goffice_include_dir)/app +libgoffice_app_la_HEADERS = \ + goffice-app.h \ + \ + go-doc.h \ + go-doc-impl.h \ + go-doc-control.h \ + go-doc-control-impl.h \ + go-plugin.h \ + go-plugin-loader.h \ + go-plugin-loader-module.h \ + module-plugin-defs.h \ + go-plugin-service.h \ + go-plugin-service-impl.h \ + file.h \ + error-info.h \ + io-context.h \ + io-context-priv.h \ + go-cmd-context.h \ + go-cmd-context-impl.h + +# This list should be empty when we reach a stable phase. +UNUSED = \ + go-app.h \ + go-error-stack.h \ + go-object.c \ + go-object.h \ + go-service.c \ + go-service.h \ + go-service-impl.h + +EXTRA_DIST = $(UNUSED) + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice/split/error-info.c b/lib/goffice-0.0.4/goffice/app/error-info.c similarity index 88% rename from lib/goffice/split/error-info.c rename to lib/goffice-0.0.4/goffice/app/error-info.c index 3307d1406d..1e6d030597 100644 --- a/lib/goffice/split/error-info.c +++ b/lib/goffice-0.0.4/goffice/app/error-info.c @@ -5,16 +5,15 @@ * Zbigniew Chyla (cyba@gnome.pl) */ -#include -#include "gnumeric.h" -#include "error-info.h" +#include +#include #include #include struct _ErrorInfo { gchar *msg; - GnmSeverity severity; + GOSeverity severity; GSList *details; /* list of ErrorInfo */ }; @@ -23,19 +22,19 @@ error_info_new_str (char const *msg) { ErrorInfo *error = g_new (ErrorInfo, 1); error->msg = g_strdup (msg); - error->severity = GNM_ERROR; + error->severity = GO_ERROR; error->details = NULL; return error; } ErrorInfo * -error_info_new_vprintf (GnmSeverity severity, char const *msg_format, +error_info_new_vprintf (GOSeverity severity, char const *msg_format, va_list args) { ErrorInfo *error; - g_return_val_if_fail (severity >= GNM_WARNING, NULL); - g_return_val_if_fail (severity <= GNM_ERROR, NULL); + g_return_val_if_fail (severity >= GO_WARNING, NULL); + g_return_val_if_fail (severity <= GO_ERROR, NULL); error = g_new (ErrorInfo, 1); error->msg = g_strdup_vprintf (msg_format, args); @@ -52,7 +51,7 @@ error_info_new_printf (char const *msg_format, ...) va_list args; va_start (args, msg_format); - error = error_info_new_vprintf (GNM_ERROR, msg_format, args); + error = error_info_new_vprintf (GO_ERROR, msg_format, args); va_end (args); return error; @@ -161,7 +160,7 @@ error_info_print_with_offset (ErrorInfo *error, gint offset) if (error->msg != NULL) { char c = 'E'; - if (error->severity == GNM_WARNING) + if (error->severity == GO_WARNING) c = 'W'; fprintf (stderr, "%*s%c %s\n", offset, "", c, error->msg); offset += 2; @@ -194,10 +193,10 @@ error_info_peek_details (ErrorInfo *error) return error->details; } -GnmSeverity +GOSeverity error_info_peek_severity (ErrorInfo *error) { - g_return_val_if_fail (error != NULL, GNM_ERROR); + g_return_val_if_fail (error != NULL, GO_ERROR); return error->severity; } diff --git a/lib/goffice-0.0.4/goffice/app/error-info.h b/lib/goffice-0.0.4/goffice/app/error-info.h new file mode 100644 index 0000000000..280ca1ad7a --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/error-info.h @@ -0,0 +1,39 @@ +#ifndef GO_ERROR_INFO_H +#define GO_ERROR_INFO_H + +#include +#include + +G_BEGIN_DECLS + +typedef enum { + GO_WARNING = 1, + GO_ERROR +} GOSeverity; + +ErrorInfo *error_info_new_str (char const *msg); +ErrorInfo *error_info_new_printf (char const *msg_format, ...) G_GNUC_PRINTF (1, 2); +ErrorInfo *error_info_new_vprintf (GOSeverity severity, + char const *msg_format, + va_list args); +ErrorInfo *error_info_new_str_with_details (char const *msg, ErrorInfo *details); +ErrorInfo *error_info_new_str_with_details_list (char const *msg, GSList *details); +ErrorInfo *error_info_new_from_error_list (GSList *errors); +ErrorInfo *error_info_new_from_errno (void); +void error_info_add_details (ErrorInfo *error, ErrorInfo *details); +void error_info_add_details_list (ErrorInfo *error, GSList *details); +void error_info_free (ErrorInfo *error); +void error_info_print (ErrorInfo *error); +char const*error_info_peek_message (ErrorInfo *error); +GSList *error_info_peek_details (ErrorInfo *error); +GOSeverity error_info_peek_severity (ErrorInfo *error); + +#define GO_INIT_RET_ERROR_INFO(ret_error) \ +G_STMT_START { \ + g_assert (ret_error != NULL); \ + *ret_error = NULL; \ +} G_STMT_END + +G_END_DECLS + +#endif /* GO_ERROR_INFO_H */ diff --git a/lib/goffice-0.0.4/goffice/app/file-priv.h b/lib/goffice-0.0.4/goffice/app/file-priv.h new file mode 100644 index 0000000000..63282cfe84 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/file-priv.h @@ -0,0 +1,95 @@ +#ifndef GO_FILE_PRIV_H +#define GO_FILE_PRIV_H + +#include + +G_BEGIN_DECLS + +/* + * GOFileOpener + */ + +#define GO_FILE_OPENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GO_FILE_OPENER, GOFileOpenerClass)) +#define IS_GO_FILE_OPENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GO_FILE_OPENER)) + +#define GO_FILE_OPENER_METHOD(obj,name) \ + ((GO_FILE_OPENER_CLASS (G_OBJECT_GET_CLASS (obj)))->name) + +struct _GOFileOpenerClass { + GObjectClass parent_class; + + gboolean (*can_probe) (GOFileOpener const *fo, + FileProbeLevel pl); + gboolean (*probe) (GOFileOpener const *fo, + GsfInput *input, + FileProbeLevel pl); + void (*open) (GOFileOpener const *fo, + gchar const *opt_enc, + IOContext *io_context, + gpointer fixme_fixme_workbook_view, + GsfInput *input); +}; + +struct _GOFileOpener { + GObject parent; + + gchar *id; + gchar *description; + GSList *suffixes; + GSList *mimes; + gboolean encoding_dependent; + + GOFileOpenerProbeFunc probe_func; + GOFileOpenerOpenFunc open_func; +}; + +void go_file_opener_setup (GOFileOpener *fo, const gchar *id, + const gchar *description, + GSList *suffixes, + GSList *mimes, + gboolean encoding_dependent, + GOFileOpenerProbeFunc probe_func, + GOFileOpenerOpenFunc open_func); + +/* + * GOFileSaver + */ + +#define GO_FILE_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GO_FILE_SAVER, GOFileSaverClass)) +#define IS_GO_FILE_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GO_FILE_SAVER)) + +#define GO_FILE_SAVER_METHOD(obj,name) \ + ((GO_FILE_SAVER_CLASS (G_OBJECT_GET_CLASS (obj)))->name) + +struct _GOFileSaverClass { + GObjectClass parent_class; + + void (*save) (GOFileSaver const *fs, + IOContext *io_context, + gconstpointer wbv, + GsfOutput *output); +}; + +struct _GOFileSaver { + GObject parent; + + gchar *id; + const gchar *mime_type; + gchar *extension; + gchar *description; + gboolean overwrite_files; + FileFormatLevel format_level; + FileSaveScope save_scope; + GOFileSaverSaveFunc save_func; +}; + +void go_file_saver_setup (GOFileSaver *fs, + const gchar *id, + const gchar *extension, + const gchar *description, + FileFormatLevel level, + GOFileSaverSaveFunc save_func); + +G_END_DECLS + +#endif /* GO_FILE_PRIV_H */ diff --git a/lib/goffice-0.0.4/goffice/app/file.c b/lib/goffice-0.0.4/goffice/app/file.c new file mode 100644 index 0000000000..d5bac21e14 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/file.c @@ -0,0 +1,869 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * file.c: File loading and saving routines + * + * Authors: + * Miguel de Icaza (miguel@kernel.org) + * Zbigniew Chyla (cyba@gnome.pl) + */ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +static void +go_file_opener_init (GOFileOpener *fo) +{ + fo->id = NULL; + fo->description = NULL; + fo->probe_func = NULL; + fo->open_func = NULL; +} + +static void +go_file_opener_finalize (GObject *obj) +{ + GOFileOpener *fo; + + g_return_if_fail (IS_GO_FILE_OPENER (obj)); + + fo = GO_FILE_OPENER (obj); + g_free (fo->id); + g_free (fo->description); + g_slist_foreach (fo->suffixes, (GFunc)g_free, NULL); + g_slist_free (fo->suffixes); + g_slist_foreach (fo->mimes, (GFunc)g_free, NULL); + g_slist_free (fo->mimes); + + G_OBJECT_CLASS (g_type_class_peek (G_TYPE_OBJECT))->finalize (obj); +} + +static gboolean +go_file_opener_can_probe_real (GOFileOpener const *fo, FileProbeLevel pl) +{ + return fo->probe_func != NULL; +} + +static gboolean +go_file_opener_probe_real (GOFileOpener const *fo, GsfInput *input, + FileProbeLevel pl) +{ + gboolean ret = FALSE; + + if (fo->probe_func != NULL) { + ret = fo->probe_func (fo, input, pl); + gsf_input_seek (input, 0, G_SEEK_SET); + } + return ret; +} + +static void +go_file_opener_open_real (GOFileOpener const *fo, gchar const *opt_enc, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input) +{ + if (fo->open_func != NULL) { + if (fo->encoding_dependent) + ((GOFileOpenerOpenFuncWithEnc)fo->open_func) + (fo, opt_enc, io_context, FIXME_FIXME_workbook_view, input); + else + fo->open_func (fo, io_context, FIXME_FIXME_workbook_view, input); + } else + gnumeric_io_error_unknown (io_context); +} + +static void +go_file_opener_class_init (GOFileOpenerClass *klass) +{ + G_OBJECT_CLASS (klass)->finalize = go_file_opener_finalize; + + klass->can_probe = go_file_opener_can_probe_real; + klass->probe = go_file_opener_probe_real; + klass->open = go_file_opener_open_real; +} + +GSF_CLASS (GOFileOpener, go_file_opener, + go_file_opener_class_init, go_file_opener_init, + G_TYPE_OBJECT) + +/** + * go_file_opener_setup: + * @fo : Newly created GOFileOpener object + * @id : Optional ID of the opener (or NULL) + * @description : Description of supported file format + * @encoding_dependent: whether the opener depends on an encoding sel. + * @probe_func : Optional pointer to "probe" function (or NULL) + * @open_func : Pointer to "open" function + * + * Sets up GOFileOpener object, newly created with g_object_new function. + * This is intended to be used only by GOFileOpener derivates. + * Use go_file_opener_new, if you want to create GOFileOpener object. + */ +void +go_file_opener_setup (GOFileOpener *fo, gchar const *id, + gchar const *description, + GSList *suffixes, + GSList *mimes, + gboolean encoding_dependent, + GOFileOpenerProbeFunc probe_func, + GOFileOpenerOpenFunc open_func) +{ + g_return_if_fail (IS_GO_FILE_OPENER (fo)); + + fo->id = g_strdup (id); + fo->description = g_strdup (description); + fo->suffixes = suffixes; + fo->mimes = mimes; + + fo->encoding_dependent = encoding_dependent; + fo->probe_func = probe_func; + fo->open_func = open_func; +} + +/** + * go_file_opener_new: + * @id : Optional ID of the opener (or NULL) + * @description : Description of supported file format + * @probe_func : Optional pointer to "probe" function (or NULL) + * @open_func : Pointer to "open" function + * + * Creates new GOFileOpener object. Optional @id will be used + * after registering it with go_file_opener_register function. + * + * Return value: newly created GOFileOpener object. + */ +GOFileOpener * +go_file_opener_new (gchar const *id, + gchar const *description, + GSList *suffixes, + GSList *mimes, + GOFileOpenerProbeFunc probe_func, + GOFileOpenerOpenFunc open_func) +{ + GOFileOpener *fo; + + fo = GO_FILE_OPENER (g_object_new (TYPE_GO_FILE_OPENER, NULL)); + go_file_opener_setup (fo, id, description, suffixes, mimes, FALSE, + probe_func, open_func); + + return fo; +} + +/** + * go_file_opener_new_with_enc: + * @id : Optional ID of the opener (or NULL) + * @description : Description of supported file format + * @probe_func : Optional pointer to "probe" function (or NULL) + * @open_func : Pointer to "open" function + * + * Creates new GOFileOpener object. Optional @id will be used + * after registering it with go_file_opener_register function. + * + * Return value: newly created GOFileOpener object. + */ + +GOFileOpener * +go_file_opener_new_with_enc (gchar const *id, + gchar const *description, + GSList *suffixes, + GSList *mimes, + GOFileOpenerProbeFunc probe_func, + GOFileOpenerOpenFuncWithEnc open_func) +{ + GOFileOpener *fo; + + fo = GO_FILE_OPENER (g_object_new (TYPE_GO_FILE_OPENER, NULL)); + go_file_opener_setup (fo, id, description, suffixes, mimes, TRUE, + probe_func, (GOFileOpenerOpenFunc)open_func); + return fo; +} + + + + +gchar const * +go_file_opener_get_id (GOFileOpener const *fo) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), NULL); + + return fo->id; +} + +gchar const * +go_file_opener_get_description (GOFileOpener const *fo) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), NULL); + + return fo->description; +} + +gboolean +go_file_opener_is_encoding_dependent (GOFileOpener const *fo) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), FALSE); + + return fo->encoding_dependent; +} + +gboolean +go_file_opener_can_probe (GOFileOpener const *fo, FileProbeLevel pl) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), FALSE); + + return GO_FILE_OPENER_METHOD (fo, can_probe) (fo, pl); +} + +GSList const * +go_file_opener_get_suffixes (GOFileOpener const *fo) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), NULL); + return fo->suffixes; +} +GSList const * +go_file_opener_get_mimes (GOFileOpener const *fo) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), NULL); + return fo->mimes; +} + + +/** + * go_file_opener_probe: + * @fo : GOFileOpener object + * @input : The input source + * + * Checks if a given file is supported by the opener. + * + * Return value: TRUE, if the opener can read given file and FALSE + * otherwise. + */ +gboolean +go_file_opener_probe (GOFileOpener const *fo, GsfInput *input, FileProbeLevel pl) +{ + g_return_val_if_fail (IS_GO_FILE_OPENER (fo), FALSE); + g_return_val_if_fail (GSF_IS_INPUT (input), FALSE); + +#if 0 + g_print ("Trying format %s at level %d...\n", + go_file_opener_get_id (fo), + (int)pl); +#endif + return GO_FILE_OPENER_METHOD (fo, probe) (fo, input, pl); +} + +/** + * go_file_opener_open: + * @fo : GOFileOpener object + * @opt_enc : Optional encoding + * @io_context : Context for i/o operation + * @wbv : Workbook View + * @input : Gsf input stream + * + * Reads content of @file_name file into workbook @wbv is attached to. + * Results are reported using @io_context object, use + * gnumeric_io_error_occurred to find out if operation was successful. + * The state of @wbv and its workbook is undefined if operation fails, you + * should destroy them in that case. + */ +void +go_file_opener_open (GOFileOpener const *fo, gchar const *opt_enc, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, GsfInput *input) +{ + g_return_if_fail (IS_GO_FILE_OPENER (fo)); + g_return_if_fail (GSF_IS_INPUT (input)); + + GO_FILE_OPENER_METHOD (fo, open) (fo, opt_enc, io_context, FIXME_FIXME_workbook_view, input); +} + +/* + * GOFileSaver + */ + +static void +go_file_saver_init (GOFileSaver *fs) +{ + fs->id = NULL; + fs->extension = NULL; + fs->mime_type = NULL; + fs->description = NULL; + fs->overwrite_files = TRUE; + fs->format_level = FILE_FL_NEW; + fs->save_scope = FILE_SAVE_WORKBOOK; + fs->save_func = NULL; +} + +static void +go_file_saver_finalize (GObject *obj) +{ + GOFileSaver *fs; + + g_return_if_fail (IS_GO_FILE_SAVER (obj)); + + fs = GO_FILE_SAVER (obj); + g_free (fs->id); + g_free (fs->extension); + g_free (fs->description); + + G_OBJECT_CLASS (g_type_class_peek (G_TYPE_OBJECT))->finalize (obj); +} + +static void +go_file_saver_save_real (GOFileSaver const *fs, IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, GsfOutput *output) +{ + if (fs->save_func == NULL) { + gnumeric_io_error_unknown (io_context); + return; + } + + fs->save_func (fs, io_context, FIXME_FIXME_workbook_view, output); +} + +static void +go_file_saver_class_init (GOFileSaverClass *klass) +{ + G_OBJECT_CLASS (klass)->finalize = go_file_saver_finalize; + + klass->save = go_file_saver_save_real; +} + +GSF_CLASS (GOFileSaver, go_file_saver, + go_file_saver_class_init, go_file_saver_init, + G_TYPE_OBJECT) + +/** + * go_file_saver_setup: + * @fs : Newly created GOFileSaver object + * @id : Optional ID of the saver (or NULL) + * @extension : Optional default extension of saved files (or NULL) + * @description : Description of supported file format + * @level : File format level + * @save_func : Pointer to "save" function + * + * Sets up GOFileSaver object, newly created with g_object_new function. + * This is intended to be used only by GOFileSaver derivates. + * Use go_file_saver_new, if you want to create GOFileSaver object. + */ +void +go_file_saver_setup (GOFileSaver *fs, gchar const *id, + gchar const *extension, + gchar const *description, + FileFormatLevel level, + GOFileSaverSaveFunc save_func) +{ + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + + fs->id = g_strdup (id); + fs->mime_type = NULL; + +//#warning mime disabled +#if 0 + gchar *tmp = g_strdup_printf ("SomeFile.%s", extension); + gnome_mime_type_or_default (tmp, + "application/application/x-gnumeric"); + g_free (tmp); +#endif + fs->extension = g_strdup (extension); + fs->description = g_strdup (description); + fs->format_level = level; + fs->save_func = save_func; +} + +/** + * go_file_saver_new: + * @id : Optional ID of the saver (or NULL) + * @extension : Optional default extension of saved files (or NULL) + * @description : Description of supported file format + * @level : File format level + * @save_func : Pointer to "save" function + * + * Creates new GOFileSaver object. Optional @id will be used + * after registering it with go_file_saver_register or + * go_file_saver_register_as_default function. + * + * Return value: newly created GOFileSaver object. + */ +GOFileSaver * +go_file_saver_new (gchar const *id, + gchar const *extension, + gchar const *description, + FileFormatLevel level, + GOFileSaverSaveFunc save_func) +{ + GOFileSaver *fs; + + fs = GO_FILE_SAVER (g_object_new (TYPE_GO_FILE_SAVER, NULL)); + go_file_saver_setup (fs, id, extension, description, level, save_func); + + return fs; +} + +void +go_file_saver_set_save_scope (GOFileSaver *fs, FileSaveScope scope) +{ + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + g_return_if_fail (scope < FILE_SAVE_LAST); + + fs->save_scope = scope; +} + +FileSaveScope +go_file_saver_get_save_scope (GOFileSaver const *fs) +{ + g_return_val_if_fail (IS_GO_FILE_SAVER (fs), FILE_SAVE_WORKBOOK); + + return fs->save_scope; +} + +gchar const * +go_file_saver_get_id (GOFileSaver const *fs) +{ + g_return_val_if_fail (IS_GO_FILE_SAVER (fs), NULL); + + return fs->id; +} + +gchar const * +go_file_saver_get_mime_type (GOFileSaver const *fs) +{ + g_return_val_if_fail (IS_GO_FILE_SAVER (fs), NULL); + + return fs->mime_type; +} + +gchar const * +go_file_saver_get_extension (GOFileSaver const *fs) +{ + g_return_val_if_fail (IS_GO_FILE_SAVER (fs), NULL); + + return fs->extension; +} + +gchar const * +go_file_saver_get_description (GOFileSaver const *fs) +{ + g_return_val_if_fail (IS_GO_FILE_SAVER (fs), NULL); + + return fs->description; +} + +FileFormatLevel +go_file_saver_get_format_level (GOFileSaver const *fs) +{ + g_return_val_if_fail (IS_GO_FILE_SAVER (fs), FILE_FL_NEW); + + return fs->format_level; +} + +/** + * go_file_saver_save: + * @fs : GOFileSaver object + * @io_context : Context for i/o operation + * @wbv : Workbook View + * @output : Output stream + * + * Saves @wbv and the workbook it is attached to into @output stream. + * Results are reported using @io_context object, use + * gnumeric_io_error_occurred to find out if operation was successful. + * It's possible that @file_name is created and contain some data if + * operation fails, you should remove the file in that case. + */ +void +go_file_saver_save (GOFileSaver const *fs, IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, + GsfOutput *output) +{ + char *file_name; + + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + g_return_if_fail (GSF_IS_OUTPUT (output)); + + if (GSF_IS_OUTPUT_STDIO (output)) { + file_name = (char *) gsf_output_name (output); + + if (file_name == NULL) { + ErrorInfo *save_error = error_info_new_str( + _("Not a valid UTF-8 filename.")); + gnumeric_io_error_info_set (io_context, save_error); + return; + } + + if (!fs->overwrite_files && + g_file_test ((file_name), G_FILE_TEST_EXISTS)) { + ErrorInfo *save_error; + + save_error = error_info_new_str_with_details ( + _("Saving over old files of this type is disabled for safety."), + error_info_new_str ( + _("You can turn this safety feature off by editing appropriate plugin.xml file."))); + gnumeric_io_error_info_set (io_context, save_error); + return; + } + } + + GO_FILE_SAVER_METHOD (fs, save) (fs, io_context, FIXME_FIXME_workbook_view, output); +} + +/** + * go_file_saver_set_overwrite_files: + * @fs : GOFileSaver object + * @overwrite : A boolean value saying whether the saver should overwrite + * existing files. + * + * Changes behaviour of the saver when saving a file. If @overwrite is set + * to TRUE, existing file will be overwritten. Otherwise, the saver will + * report an error without saving anything. + */ +void +go_file_saver_set_overwrite_files (GOFileSaver *fs, gboolean overwrite) +{ + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + + fs->overwrite_files = overwrite; +} + + +/* + * ------ + */ + +typedef struct { + gint priority; + GOFileSaver *saver; +} DefaultFileSaver; + +static GHashTable *file_opener_id_hash = NULL, + *file_saver_id_hash = NULL; +static GList *file_opener_list = NULL, *file_opener_priority_list = NULL; +static GList *file_saver_list = NULL, *default_file_saver_list = NULL; + +static gint +cmp_int_less_than (gconstpointer list_i, gconstpointer i) +{ + return !(GPOINTER_TO_INT (list_i) < GPOINTER_TO_INT (i)); +} + +/** + * go_file_opener_register: + * @fo : GOFileOpener object + * @priority : Opener's priority + * + * Adds @fo opener to the list of available file openers, making it + * available for Gnumeric i/o routines. The opener is registered with given + * @priority. The priority is used to determine the order in which openers + * will be tried when reading a file. The higher the priority, the sooner it + * will be tried. Default XML-based Gnumeric file opener is registered at + * priority 50. Recommended range for @priority is [0, 100]. + * Reference count for the opener is incremented inside the function, but + * you don't have to (and shouldn't) call g_object_unref on it if it's + * floating object (for example, when you pass object newly created with + * go_file_opener_new and not referenced anywhere). + */ +void +go_file_opener_register (GOFileOpener *fo, gint priority) +{ + gint pos; + gchar const *id; + + g_return_if_fail (IS_GO_FILE_OPENER (fo)); + g_return_if_fail (priority >=0 && priority <= 100); + + pos = go_list_index_custom (file_opener_priority_list, + GINT_TO_POINTER (priority), + cmp_int_less_than); + file_opener_priority_list = g_list_insert ( + file_opener_priority_list, + GINT_TO_POINTER (priority), pos); + file_opener_list = g_list_insert (file_opener_list, fo, pos); + g_object_ref (G_OBJECT (fo)); + + id = go_file_opener_get_id (fo); + if (id != NULL) { + if (file_opener_id_hash == NULL) + file_opener_id_hash = g_hash_table_new (&g_str_hash, &g_str_equal); + g_hash_table_insert (file_opener_id_hash, (gpointer) id, fo); + } +} + +/** + * go_file_opener_unregister: + * @fo : GOFileOpener object previously registered using + * go_file_opener_register + * + * Removes @fo opener from list of available file openers. Reference count + * for the opener is decremented inside the function. + */ +void +go_file_opener_unregister (GOFileOpener *fo) +{ + gint pos; + GList *l; + gchar const *id; + + g_return_if_fail (IS_GO_FILE_OPENER (fo)); + + pos = g_list_index (file_opener_list, fo); + g_return_if_fail (pos != -1); + l = g_list_nth (file_opener_list, pos); + file_opener_list = g_list_remove_link (file_opener_list, l); + g_list_free_1 (l); + l = g_list_nth (file_opener_priority_list, pos); + file_opener_priority_list = g_list_remove_link (file_opener_priority_list, l); + g_list_free_1 (l); + + id = go_file_opener_get_id (fo); + if (id != NULL) { + g_hash_table_remove (file_opener_id_hash, (gpointer) id); + if (g_hash_table_size (file_opener_id_hash) == 0) { + g_hash_table_destroy (file_opener_id_hash); + file_opener_id_hash = NULL; + } + } + + g_object_unref (G_OBJECT (fo)); +} + +static gint +default_file_saver_cmp_priority (gconstpointer a, gconstpointer b) +{ + DefaultFileSaver const *dfs_a = a, *dfs_b = b; + + return dfs_b->priority - dfs_a->priority; +} + +/** + * go_file_saver_register: + * @fs : GOFileSaver object + * + * Adds @fs saver to the list of available file savers, making it + * available for the user when selecting file format for save. + */ +void +go_file_saver_register (GOFileSaver *fs) +{ + gchar const *id; + + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + + file_saver_list = g_list_prepend (file_saver_list, fs); + g_object_ref (G_OBJECT (fs)); + + id = go_file_saver_get_id (fs); + if (id != NULL) { + if (file_saver_id_hash == NULL) + file_saver_id_hash = g_hash_table_new (&g_str_hash, + &g_str_equal); + g_hash_table_insert (file_saver_id_hash, (gpointer) id, fs); + } +} + +/** + * go_file_saver_register_as_default: + * @fs : GOFileSaver object + * @priority : Saver's priority + * + * Adds @fs saver to the list of available file savers, making it + * available for the user when selecting file format for save. + * The saver is also marked as default saver with given priority. + * When Gnumeric needs default file saver, it chooses the one with the + * highest priority. Recommended range for @priority is [0, 100]. + */ +void +go_file_saver_register_as_default (GOFileSaver *fs, gint priority) +{ + DefaultFileSaver *dfs; + + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + g_return_if_fail (priority >=0 && priority <= 100); + + go_file_saver_register (fs); + + dfs = g_new (DefaultFileSaver, 1); + dfs->priority = priority; + dfs->saver = fs; + default_file_saver_list = g_list_insert_sorted ( + default_file_saver_list, dfs, + default_file_saver_cmp_priority); +} + +/** + * go_file_saver_unregister: + * @fs : GOFileSaver object previously registered using + * go_file_saver_register or go_file_saver_register_as_default + * + * Removes @fs saver from list of available file savers. Reference count + * for the saver is decremented inside the function. + */ +void +go_file_saver_unregister (GOFileSaver *fs) +{ + GList *l; + gchar const *id; + + g_return_if_fail (IS_GO_FILE_SAVER (fs)); + + l = g_list_find (file_saver_list, fs); + g_return_if_fail (l != NULL); + file_saver_list = g_list_remove_link (file_saver_list, l); + g_list_free_1 (l); + + id = go_file_saver_get_id (fs); + if (id != NULL) { + g_hash_table_remove (file_saver_id_hash, (gpointer) id); + if (g_hash_table_size (file_saver_id_hash) == 0) { + g_hash_table_destroy (file_saver_id_hash); + file_saver_id_hash = NULL; + } + } + + for (l = default_file_saver_list; l != NULL; l = l->next) { + if (((DefaultFileSaver *) l->data)->saver == fs) { + default_file_saver_list = g_list_remove_link (default_file_saver_list, l); + g_free (l->data); + g_list_free_1 (l); + break; + } + } + + g_object_unref (G_OBJECT (fs)); +} + +/** + * go_file_saver_get_default: + * + * Returns file saver registered as default saver with the highest priority. + * Reference count for the saver is NOT incremented. + * + * Return value: GOFileSaver object or NULL if default saver is not + * available. + */ +GOFileSaver * +go_file_saver_get_default (void) +{ + if (default_file_saver_list == NULL) + return NULL; + + return ((DefaultFileSaver *) default_file_saver_list->data)->saver; +} + +/** + * go_file_saver_for_mime_type: + * @mime_type: A mime type + * + * Returns a file saver that claims to save files with given mime type. + * + * Return value: GOFileSaver object or NULL if no suitable file saver could + * be found. + */ +GOFileSaver * +go_file_saver_for_mime_type (gchar const *mime_type) +{ + GList *l; + + for (l = file_saver_list; l != NULL; l = l->next) { + if (!strcmp (go_file_saver_get_mime_type (l->data), mime_type)) { + return (l->data); + } + } + return (NULL); +} + +/** + * go_file_saver_for_file_name : + * @file_name : + * + * Searches for file opener with given @filename, registered using + * go_file_opener_register + * + * Return value: GOFileOpener object or NULL if opener cannot be found. + **/ +GOFileSaver * +go_file_saver_for_file_name (char const *file_name) +{ + GList *l; + char const *extension = gsf_extension_pointer (file_name); + + for (l = file_saver_list; l != NULL; l = l->next) + if (!strcmp (go_file_saver_get_extension (l->data), extension)) + return l->data; + return NULL; +} + +/** + * go_file_opener_for_id: + * @id : File opener's ID + * + * Searches for file opener with given @id, registered using + * go_file_opener_register + * + * Return value: GOFileOpener object or NULL if opener cannot be found. + */ +GOFileOpener * +go_file_opener_for_id (gchar const *id) +{ + g_return_val_if_fail (id != NULL, NULL); + + if (file_opener_id_hash == NULL) + return NULL; + return GO_FILE_OPENER (g_hash_table_lookup (file_opener_id_hash, id)); +} + +/** + * go_file_saver_for_id: + * @id : File saver's ID + * + * Searches for file saver with given @id, registered using + * go_file_saver_register or register_file_opener_as_default. + * + * Return value: GOFileSaver object or NULL if saver cannot be found. + */ +GOFileSaver * +go_file_saver_for_id (gchar const *id) +{ + g_return_val_if_fail (id != NULL, NULL); + + if (file_saver_id_hash == NULL) + return NULL; + return GO_FILE_SAVER (g_hash_table_lookup (file_saver_id_hash, id)); +} + +/** + * get_file_savers: + * + * Returns the list of registered file savers (using go_file_saver_register or + * go_file_saver_register_as_default). + * + * Return value: list of GOFileSaver objects, which you shouldn't modify. + */ +GList * +get_file_savers (void) +{ + return file_saver_list; +} + +/** + * get_file_openers: + * + * Returns the list of registered file openers (using go_file_opener_register). + * + * Return value: list of GOFileOpener objects, which you shouldn't modify. + */ +GList * +get_file_openers (void) +{ + return file_opener_list; +} diff --git a/lib/goffice-0.0.4/goffice/app/file.h b/lib/goffice-0.0.4/goffice/app/file.h new file mode 100644 index 0000000000..9159864a79 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/file.h @@ -0,0 +1,148 @@ +#ifndef _GOFFICE_FILE_H_ +#define _GOFFICE_FILE_H_ + +#include +#include +#include + +G_BEGIN_DECLS + +/* + * File format levels. They are ordered. When we save a file, we + * remember the name, but not if we already have a name at a higher level. + * When created, workbooks are assigned a name at level FILE_FL_NEW. + */ +typedef enum { + FILE_FL_NONE, /* No name assigned, won't happen */ + FILE_FL_WRITE_ONLY, /* PostScript etc, won't be remembered */ + FILE_FL_NEW, /* Wb just created */ + FILE_FL_MANUAL, /* Save gets punted to save as */ + FILE_FL_MANUAL_REMEMBER, /* Ditto, but remember in history */ + FILE_FL_AUTO, /* Save will save to this filename */ + FILE_FL_LAST +} FileFormatLevel; + +/* + * FileSaveScope specifies what information file saver can save in a file. + * Many savers can save the whole workbook (with all sheets), but others + * save only current sheet, usually because of file format limitations. + */ +typedef enum { + FILE_SAVE_WORKBOOK, + FILE_SAVE_SHEET, + FILE_SAVE_RANGE, + FILE_SAVE_LAST +} FileSaveScope; + +/* + * GOFileOpener + */ + +typedef struct _GOFileOpenerClass GOFileOpenerClass; + +#define TYPE_GO_FILE_OPENER (go_file_opener_get_type ()) +#define GO_FILE_OPENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GO_FILE_OPENER, GOFileOpener)) +#define IS_GO_FILE_OPENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GO_FILE_OPENER)) + +typedef gboolean (*GOFileOpenerProbeFunc) (GOFileOpener const *fo, + GsfInput *input, + FileProbeLevel pl); +typedef void (*GOFileOpenerOpenFunc) (GOFileOpener const *fo, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input); +typedef void (*GOFileOpenerOpenFuncWithEnc) (GOFileOpener const *fo, + gchar const *enc, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input); + +GType go_file_opener_get_type (void); + +GOFileOpener *go_file_opener_new (char const *id, + char const *description, + GSList *suffixes, + GSList *mimes, + GOFileOpenerProbeFunc probe_func, + GOFileOpenerOpenFunc open_func); +GOFileOpener *go_file_opener_new_with_enc (char const *id, + char const *description, + GSList *suffixes, + GSList *mimes, + GOFileOpenerProbeFunc probe_func, + GOFileOpenerOpenFuncWithEnc open_func); + + +gboolean go_file_opener_probe (GOFileOpener const *fo, GsfInput *input, + FileProbeLevel pl); +void go_file_opener_open (GOFileOpener const *fo, gchar const *opt_enc, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input); + +char const *go_file_opener_get_id (GOFileOpener const *fo); +char const *go_file_opener_get_description (GOFileOpener const *fo); +gboolean go_file_opener_is_encoding_dependent (GOFileOpener const *fo); +gboolean go_file_opener_can_probe (GOFileOpener const *fo, + FileProbeLevel pl); +GSList const *go_file_opener_get_suffixes (GOFileOpener const *fo); +GSList const *go_file_opener_get_mimes (GOFileOpener const *fo); + +/* + * GOFileSaver + */ + +typedef struct _GOFileSaverClass GOFileSaverClass; + +#define TYPE_GO_FILE_SAVER (go_file_saver_get_type ()) +#define GO_FILE_SAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GO_FILE_SAVER, GOFileSaver)) +#define IS_GO_FILE_SAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GO_FILE_SAVER)) + +typedef void (*GOFileSaverSaveFunc) (GOFileSaver const *fs, + IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, + GsfOutput *output); +GType go_file_saver_get_type (void); + +GOFileSaver *go_file_saver_new (char const *id, + char const *extension, + char const *description, + FileFormatLevel level, + GOFileSaverSaveFunc save_func); + +void go_file_saver_set_save_scope (GOFileSaver *fs, FileSaveScope scope); +FileSaveScope go_file_saver_get_save_scope (GOFileSaver const *fs); + +void go_file_saver_save (GOFileSaver const *fs, IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, + GsfOutput *output); +void go_file_saver_set_overwrite_files (GOFileSaver *fs, + gboolean overwrite); +char const *go_file_saver_get_id (GOFileSaver const *fs); +char const *go_file_saver_get_extension (GOFileSaver const *fs); +char const *go_file_saver_get_mime_type (GOFileSaver const *fs); +char const *go_file_saver_get_description (GOFileSaver const *fs); +FileFormatLevel go_file_saver_get_format_level (GOFileSaver const *fs); + +/* + * + */ + +GList *get_file_openers (void); +void go_file_opener_unregister (GOFileOpener *fo); +void go_file_opener_register (GOFileOpener *fo, gint priority); +GOFileOpener *go_file_opener_for_id (char const *id); + +GList *get_file_savers (void); +void go_file_saver_unregister (GOFileSaver *fs); +void go_file_saver_register (GOFileSaver *fs); +void go_file_saver_register_as_default (GOFileSaver *fs, gint priority); + +GOFileSaver *go_file_saver_get_default (void); +GOFileSaver *go_file_saver_for_mime_type (char const *mime_type); +GOFileSaver *go_file_saver_for_file_name (char const *file_name); +GOFileSaver *go_file_saver_for_id (char const *id); + +G_END_DECLS + +#endif /* _GOFFICE_FILE_H_ */ diff --git a/lib/goffice/app/go-app.h b/lib/goffice-0.0.4/goffice/app/go-app.h similarity index 96% rename from lib/goffice/app/go-app.h rename to lib/goffice-0.0.4/goffice/app/go-app.h index 38ad2a70cd..31268a2133 100644 --- a/lib/goffice/app/go-app.h +++ b/lib/goffice-0.0.4/goffice/app/go-app.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_APP_H diff --git a/lib/goffice/app/go-cmd-context-impl.h b/lib/goffice-0.0.4/goffice/app/go-cmd-context-impl.h similarity index 78% rename from lib/goffice/app/go-cmd-context-impl.h rename to lib/goffice-0.0.4/goffice/app/go-cmd-context-impl.h index 0c61528502..3323d56b85 100644 --- a/lib/goffice/app/go-cmd-context-impl.h +++ b/lib/goffice-0.0.4/goffice/app/go-cmd-context-impl.h @@ -3,6 +3,8 @@ #include +G_BEGIN_DECLS + typedef struct { GTypeInterface base; @@ -12,7 +14,7 @@ typedef struct { gboolean sensitive); struct { void (*error) (GOCmdContext *gcc, GError *err); - void (*error_info) (GOCmdContext *gcc, GOErrorStack *stack); + void (*error_info) (GOCmdContext *gcc, ErrorInfo *err); } error; void (*progress_set) (GOCmdContext *gcc, float val); @@ -23,7 +25,9 @@ typedef struct { #define IS_GO_CMD_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), GO_CMD_CONTEXT_TYPE)) /* protected, these do not really belong here, they are associated with io-context */ -void cmd_context_progress_set (GOCmdContext *gcc, float f); -void cmd_context_progress_message_set (GOCmdContext *gcc, char const *msg); +void go_cmd_context_progress_set (GOCmdContext *gcc, float f); +void go_cmd_context_progress_message_set (GOCmdContext *gcc, char const *msg); + +G_END_DECLS #endif /* GO_CMD_CONTEXT_IMPL_H */ diff --git a/lib/goffice/app/go-cmd-context.c b/lib/goffice-0.0.4/goffice/app/go-cmd-context.c similarity index 94% rename from lib/goffice/app/go-cmd-context.c rename to lib/goffice-0.0.4/goffice/app/go-cmd-context.c index bfea915a57..3115adcaa3 100644 --- a/lib/goffice/app/go-cmd-context.c +++ b/lib/goffice-0.0.4/goffice/app/go-cmd-context.c @@ -29,7 +29,7 @@ go_cmd_context_error (GOCmdContext *context, GError *err) } void -go_cmd_context_error_info (GOCmdContext *context, GOErrorStack *stack) +go_cmd_context_error_info (GOCmdContext *context, ErrorInfo *stack) { g_return_if_fail (IS_GO_CMD_CONTEXT (context)); GCC_CLASS (context)->error.error_info (context, stack); @@ -101,7 +101,7 @@ go_error_invalid (void) } void -cmd_context_progress_set (GOCmdContext *context, gfloat f) +go_cmd_context_progress_set (GOCmdContext *context, gfloat f) { g_return_if_fail (IS_GO_CMD_CONTEXT (context)); @@ -109,7 +109,7 @@ cmd_context_progress_set (GOCmdContext *context, gfloat f) } void -cmd_context_progress_message_set (GOCmdContext *context, gchar const *msg) +go_cmd_context_progress_message_set (GOCmdContext *context, gchar const *msg) { g_return_if_fail (IS_GO_CMD_CONTEXT (context)); diff --git a/lib/goffice/app/go-cmd-context.h b/lib/goffice-0.0.4/goffice/app/go-cmd-context.h similarity index 91% rename from lib/goffice/app/go-cmd-context.h rename to lib/goffice-0.0.4/goffice/app/go-cmd-context.h index fc3ffcbaef..bd04bc228f 100644 --- a/lib/goffice/app/go-cmd-context.h +++ b/lib/goffice-0.0.4/goffice/app/go-cmd-context.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_CMD_CONTEXT_H @@ -24,6 +24,8 @@ #include #include +G_BEGIN_DECLS + #define GO_CMD_CONTEXT_TYPE (go_cmd_context_get_type ()) #define GO_CMD_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_CMD_CONTEXT_TYPE, GOCmdContext)) #define IS_GO_CMD_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_CMD_CONTEXT_TYPE)) @@ -40,7 +42,7 @@ void go_cmd_context_error_import (GOCmdContext *cc, char const *msg); void go_cmd_context_error_export (GOCmdContext *cc, char const *msg); void go_cmd_context_error_invalid (GOCmdContext *cc, char const *msg, char const *val); -void go_cmd_context_error_info (GOCmdContext *cc, GOErrorStack *stack); +void go_cmd_context_error_info (GOCmdContext *cc, ErrorInfo *stack); /* An initial set of std errors */ GQuark go_error_system (void); @@ -48,4 +50,6 @@ GQuark go_error_import (void); GQuark go_error_export (void); GQuark go_error_invalid (void); +G_END_DECLS + #endif /* GO_CMD_CONTEXT_H */ diff --git a/lib/goffice/app/go-doc-control-impl.h b/lib/goffice-0.0.4/goffice/app/go-doc-control-impl.h similarity index 95% rename from lib/goffice/app/go-doc-control-impl.h rename to lib/goffice-0.0.4/goffice/app/go-doc-control-impl.h index 06838ed167..9efa0ccff5 100644 --- a/lib/goffice/app/go-doc-control-impl.h +++ b/lib/goffice-0.0.4/goffice/app/go-doc-control-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DOC_CONTROL_IMPL_H diff --git a/lib/goffice/app/go-doc-control.c b/lib/goffice-0.0.4/goffice/app/go-doc-control.c similarity index 94% rename from lib/goffice/app/go-doc-control.c rename to lib/goffice-0.0.4/goffice/app/go-doc-control.c index 9b1bb278f6..dd272d56d3 100644 --- a/lib/goffice/app/go-doc-control.c +++ b/lib/goffice-0.0.4/goffice/app/go-doc-control.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -38,3 +38,4 @@ go_doc_control_init (GODocControl *obj) GSF_CLASS (GODocControl, go_doc_control, go_doc_control_class_init, go_doc_control_init, G_TYPE_OBJECT) + diff --git a/lib/goffice/app/go-doc-control.h b/lib/goffice-0.0.4/goffice/app/go-doc-control.h similarity index 94% rename from lib/goffice/app/go-doc-control.h rename to lib/goffice-0.0.4/goffice/app/go-doc-control.h index 3fb9f3b81b..58af615a26 100644 --- a/lib/goffice/app/go-doc-control.h +++ b/lib/goffice-0.0.4/goffice/app/go-doc-control.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DOC_CONTROL_H diff --git a/lib/goffice/app/go-doc-impl.h b/lib/goffice-0.0.4/goffice/app/go-doc-impl.h similarity index 94% rename from lib/goffice/app/go-doc-impl.h rename to lib/goffice-0.0.4/goffice/app/go-doc-impl.h index ec56f58a30..a370b4bad7 100644 --- a/lib/goffice/app/go-doc-impl.h +++ b/lib/goffice-0.0.4/goffice/app/go-doc-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DOC_IMPL_H diff --git a/lib/goffice/app/go-doc.c b/lib/goffice-0.0.4/goffice/app/go-doc.c similarity index 93% rename from lib/goffice/app/go-doc.c rename to lib/goffice-0.0.4/goffice/app/go-doc.c index e116a8f062..17d212bce6 100644 --- a/lib/goffice/app/go-doc.c +++ b/lib/goffice-0.0.4/goffice/app/go-doc.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -38,3 +38,4 @@ go_doc_init (GODoc *obj) GSF_CLASS (GODoc, go_doc, go_doc_class_init, go_doc_init, G_TYPE_OBJECT) + diff --git a/lib/goffice/app/go-doc.h b/lib/goffice-0.0.4/goffice/app/go-doc.h similarity index 95% rename from lib/goffice/app/go-doc.h rename to lib/goffice-0.0.4/goffice/app/go-doc.h index 50a61c19f5..33158ba060 100644 --- a/lib/goffice/app/go-doc.h +++ b/lib/goffice-0.0.4/goffice/app/go-doc.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DOC_H diff --git a/lib/goffice/app/go-error-stack.h b/lib/goffice-0.0.4/goffice/app/go-error-stack.h similarity index 81% rename from lib/goffice/app/go-error-stack.h rename to lib/goffice-0.0.4/goffice/app/go-error-stack.h index b610fde8be..565312fc4d 100644 --- a/lib/goffice/app/go-error-stack.h +++ b/lib/goffice-0.0.4/goffice/app/go-error-stack.h @@ -15,18 +15,23 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_ERROR_STACK_H #define GO_ERROR_STACK_H #include +#include -GOErrorStack *gog_error_stack_new (GOErrorStack *child, - char const *msg, ...) G_GNUC_PRINTF (2, 3); +G_BEGIN_DECLS + +GOErrorStack *go_error_stack_new (GOErrorStack *parent, + char const *fmt, ...) G_GNUC_PRINTF (2, 3); void go_error_stack_add_child (GOErrorStack *estack, GOErrorStack *child); void go_error_stack_dump (GOErrorStack *estack); void go_error_stack_free (GOErrorStack *estack); +G_END_DECLS + #endif /* GO_ERROR_STACK_H */ diff --git a/lib/goffice/app/go-object.c b/lib/goffice-0.0.4/goffice/app/go-object.c similarity index 87% rename from lib/goffice/app/go-object.c rename to lib/goffice-0.0.4/goffice/app/go-object.c index f2786413d7..7584c58b12 100644 --- a/lib/goffice/app/go-object.c +++ b/lib/goffice-0.0.4/goffice/app/go-object.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -35,11 +35,14 @@ struct _GOServiceObject { }; typedef GOServiceClass GOServiceObjectClass; +static GObjectClass *go_service_object_parent_class; + static GHashTable *plugin_types = NULL; static void go_service_object_finalize (GObject *obj) { + go_service_object_finalize->finalize (obj); } static char * @@ -52,6 +55,7 @@ static void go_service_object_class_init (GObjectClass *gobj_class) { GOServiceClass *serv_class = (GOServiceClass *)gobj_class; + go_combo_box_parent_class = g_type_class_peek_parent (gobj_class); gobj_class->finalize = go_service_object_finalize; serv_class->description = go_service_object_description; plugin_types = g_hash_table_new (g_str_hash, g_str_equal); @@ -98,11 +102,13 @@ go_object_new_valist (char const *type, char const *first_prop, va_list args) if (!go_plugin_is_loaded (plugin)) err = go_plugin_load (plugin); - t = g_type_from_name (type); - if (t == 0) - err = gog_error_stack_new (err, - _("Loading plugin '%s' that contains the object '%s'"), - go_plugin_get_id (plugin), type);; + if (err == NULL) { + t = g_type_from_name (type); + if (t == 0) + err = go_error_stack_new (err, + _("Loading plugin '%s' that contains the object '%s'"), + go_plugin_get_id (plugin), type);; + } if (err != NULL) { go_error_stack_dump (err); go_error_stack_free (err); diff --git a/lib/goffice/app/go-object.h b/lib/goffice-0.0.4/goffice/app/go-object.h similarity index 94% rename from lib/goffice/app/go-object.h rename to lib/goffice-0.0.4/goffice/app/go-object.h index 6c9b3eb4b4..e53fd060dc 100644 --- a/lib/goffice/app/go-object.h +++ b/lib/goffice-0.0.4/goffice/app/go-object.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_OBJECT_H @@ -23,6 +23,8 @@ #include +G_BEGIN_DECLS + gpointer go_object_new (char const *type, char const *first_prop, ...); gpointer go_object_new_valist (char const *type, char const *first_prop, va_list vargs); @@ -38,4 +40,6 @@ GType go_service_object_get_type (void); char const *go_service_object_primary_type (GOServiceObject const *service); GSList const *go_service_object_interfaces (GOServiceObject const *service); +G_END_DECLS + #endif /* GO_OBJECT_H */ diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin-loader-module.c b/lib/goffice-0.0.4/goffice/app/go-plugin-loader-module.c new file mode 100644 index 0000000000..7d8e910157 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-loader-module.c @@ -0,0 +1,409 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * plugin-loader-module.c: Support for "g_module" (shared libraries) plugins. + * + * Author: Zbigniew Chyla (cyba@gnome.pl) + */ + +#include +#include "go-plugin-loader-module.h" +#include "module-plugin-defs.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +static void go_plugin_loader_module_set_attributes (GOPluginLoader *loader, GHashTable *attrs, ErrorInfo **ret_error); +static void go_plugin_loader_module_load_base (GOPluginLoader *loader, ErrorInfo **ret_error); +static void go_plugin_loader_module_unload_base (GOPluginLoader *loader, ErrorInfo **ret_error); + +static void go_plugin_loader_module_load_service_file_opener (GOPluginLoader *loader, GOPluginService *service, ErrorInfo **ret_error); +static void go_plugin_loader_module_load_service_file_saver (GOPluginLoader *loader, GOPluginService *service, ErrorInfo **ret_error); +static void go_plugin_loader_module_load_service_plugin_loader (GOPluginLoader *loader, GOPluginService *service, ErrorInfo **ret_error); + +static GHashTable *go_plugin_loader_module_known_deps = NULL; + +void +go_plugin_loader_module_register_version (char const *id, char const *version) +{ + if (NULL == go_plugin_loader_module_known_deps) + go_plugin_loader_module_known_deps = + g_hash_table_new (g_str_hash, g_str_equal); + g_hash_table_replace (go_plugin_loader_module_known_deps, + (gpointer)id, (gpointer)version); +} + +static void +go_plugin_loader_module_set_attributes (GOPluginLoader *loader, GHashTable *attrs, + ErrorInfo **err) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (loader); + gchar *module_file_name = g_hash_table_lookup (attrs, "module_file"); + + if (module_file_name != NULL) + loader_module->module_file_name = g_strdup (module_file_name); + else + *err = error_info_new_str ( _("Module file name not given.")); +} + +static ErrorInfo * +check_version (GOPluginModuleDepend const *deps, guint32 num_deps, char const *module_file) +{ + unsigned i; + char const *ver; + + if (deps == NULL && num_deps != 0) + return error_info_new_printf ( + _("Module \"%s\" has an inconsistent dependency list."), + module_file); + + g_return_val_if_fail (go_plugin_loader_module_known_deps != NULL, NULL); + + for (i = 0; i < num_deps ; i++) { + if (deps[i].key == NULL) + return error_info_new_printf ( + _("Module \"%s\" depends on an invalid null dependency."), + module_file); + ver = g_hash_table_lookup (go_plugin_loader_module_known_deps, deps[i].key); + if (ver == NULL) + return error_info_new_printf ( + _("Module \"%s\" depends on an unknown dependency '%s'."), + module_file, deps[i].key); + + if (strcmp (ver, deps[i].version)) + return error_info_new_printf ( + _("Module \"%s\" was built with version %s of %s, but this executable supplied version %s."), + module_file, deps[i].version, deps[i].key, ver); + } + return NULL; +} + +static void +go_plugin_loader_module_load_base (GOPluginLoader *loader, ErrorInfo **err) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (loader); + gchar *full_module_file_name; + GModule *handle; + GOPluginModuleHeader const *go_plugin_header = NULL; + GOPluginModuleDepend const *go_plugin_depends = NULL; + + GO_INIT_RET_ERROR_INFO (err); + if (!g_module_supported ()) { + *err = error_info_new_str ( + _("Dynamic module loading is not supported in this system.")); + return; + } + + full_module_file_name = g_build_filename (go_plugin_get_dir_name ( + go_plugin_loader_get_plugin (loader)), + loader_module->module_file_name, NULL); + handle = g_module_open (full_module_file_name, 0); + if (handle == NULL) { + *err = error_info_new_printf ( + _("Unable to open module file \"%s\"."), + full_module_file_name); + error_info_add_details (*err, error_info_new_str (g_module_error())); + } else { + g_module_symbol (handle, "go_plugin_header", (gpointer) &go_plugin_header); + g_module_symbol (handle, "go_plugin_depends", (gpointer) &go_plugin_depends); + if (go_plugin_header == NULL) { + *err = error_info_new_printf ( + _("Module \"%s\" doesn't contain (\"go_plugin_header\" symbol)."), + full_module_file_name); + } else if (go_plugin_header->magic_number != GOFFICE_MODULE_PLUGIN_MAGIC_NUMBER) { + *err = error_info_new_printf ( + _("Module \"%s\" has an invalid magic number."), + full_module_file_name); + } else if (NULL == (*err = check_version (go_plugin_depends, go_plugin_header->num_depends, full_module_file_name))) { + loader_module->handle = handle; + g_module_symbol (handle, "go_plugin_init", (gpointer)&loader_module->plugin_init); + g_module_symbol (handle, "go_plugin_shutdown", (gpointer)&loader_module->plugin_shutdown); + if (loader_module->plugin_init != NULL) + (loader_module->plugin_init) (go_plugin_loader_get_plugin (loader), NULL); + } + + if (*err != NULL) + g_module_close (handle); + } + g_free (full_module_file_name); +} + +static void +go_plugin_loader_module_unload_base (GOPluginLoader *loader, ErrorInfo **ret_error) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (loader); + + GO_INIT_RET_ERROR_INFO (ret_error); + if (loader_module->plugin_shutdown != NULL) { + loader_module->plugin_shutdown (go_plugin_loader_get_plugin (loader), NULL); + } + if (!g_module_close (loader_module->handle)) { + *ret_error = error_info_new_printf ( + _("Unable to close module file \"%s\"."), + loader_module->module_file_name); + error_info_add_details (*ret_error, error_info_new_str (g_module_error())); + } + loader_module->handle = NULL; + loader_module->plugin_init = NULL; + loader_module->plugin_shutdown = NULL; +} + +static void +go_plugin_loader_module_init (GOPluginLoaderModule *loader_module) +{ + g_return_if_fail (IS_GO_PLUGIN_LOADER_MODULE (loader_module)); + + loader_module->module_file_name = NULL; + loader_module->handle = NULL; +} + +static void +go_plugin_loader_module_finalize (GObject *obj) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (obj); + g_free (loader_module->module_file_name); + loader_module->module_file_name = NULL; + G_OBJECT_CLASS (g_type_class_peek (G_TYPE_OBJECT))->finalize (obj); +} + +static void +go_plugin_loader_module_class_init (GObjectClass *gobject_class) +{ + gobject_class->finalize = go_plugin_loader_module_finalize; + go_plugin_loader_module_register_version ("goffice", GOFFICE_API_VERSION); +} + +static void +go_plugin_loader_init (GOPluginLoaderClass *go_plugin_loader_class) +{ + go_plugin_loader_class->set_attributes = go_plugin_loader_module_set_attributes; + go_plugin_loader_class->load_base = go_plugin_loader_module_load_base; + go_plugin_loader_class->unload_base = go_plugin_loader_module_unload_base; + go_plugin_loader_class->load_service_file_opener = go_plugin_loader_module_load_service_file_opener; + go_plugin_loader_class->load_service_file_saver = go_plugin_loader_module_load_service_file_saver; + go_plugin_loader_class->load_service_plugin_loader = go_plugin_loader_module_load_service_plugin_loader; +} + +GSF_CLASS_FULL (GOPluginLoaderModule, go_plugin_loader_module, + NULL, NULL, go_plugin_loader_module_class_init, NULL, + go_plugin_loader_module_init, G_TYPE_OBJECT, 0, + GSF_INTERFACE (go_plugin_loader_init, GO_PLUGIN_LOADER_TYPE)) + +/* + * Service - file_opener + */ + +typedef struct { + gboolean (*module_func_file_probe) (GOFileOpener const *fo, GsfInput *input, + FileProbeLevel pl); + void (*module_func_file_open) (GOFileOpener const *fo, IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input); +} ServiceLoaderDataFileOpener; + +static gboolean +go_plugin_loader_module_func_file_probe (GOFileOpener const *fo, GOPluginService *service, + GsfInput *input, FileProbeLevel pl) +{ + ServiceLoaderDataFileOpener *loader_data; + + g_return_val_if_fail (IS_GO_PLUGIN_SERVICE_FILE_OPENER (service), FALSE); + g_return_val_if_fail (input != NULL, FALSE); + + loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); + return loader_data->module_func_file_probe (fo, input, pl); +} + +static void +go_plugin_loader_module_func_file_open (GOFileOpener const *fo, GOPluginService *service, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input) +{ + ServiceLoaderDataFileOpener *loader_data; + + g_return_if_fail (IS_GO_PLUGIN_SERVICE_FILE_OPENER (service)); + g_return_if_fail (input != NULL); + + loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); + loader_data->module_func_file_open (fo, io_context, + FIXME_FIXME_workbook_view, input); +} + +static void +go_plugin_loader_module_load_service_file_opener (GOPluginLoader *loader, + GOPluginService *service, + ErrorInfo **ret_error) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (loader); + gchar *func_name_file_probe, *func_name_file_open; + gpointer module_func_file_probe = NULL, module_func_file_open = NULL; + + g_return_if_fail (IS_GO_PLUGIN_SERVICE_FILE_OPENER (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + func_name_file_probe = g_strconcat ( + plugin_service_get_id (service), "_file_probe", NULL); + g_module_symbol (loader_module->handle, func_name_file_probe, &module_func_file_probe); + func_name_file_open = g_strconcat ( + plugin_service_get_id (service), "_file_open", NULL); + g_module_symbol (loader_module->handle, func_name_file_open, &module_func_file_open); + if (module_func_file_open != NULL) { + PluginServiceFileOpenerCallbacks *cbs; + ServiceLoaderDataFileOpener *loader_data; + + cbs = plugin_service_get_cbs (service); + cbs->plugin_func_file_probe = go_plugin_loader_module_func_file_probe; + cbs->plugin_func_file_open = go_plugin_loader_module_func_file_open; + + loader_data = g_new (ServiceLoaderDataFileOpener, 1); + loader_data->module_func_file_probe = module_func_file_probe; + loader_data->module_func_file_open = module_func_file_open; + g_object_set_data_full ( + G_OBJECT (service), "loader_data", loader_data, g_free); + } else { + *ret_error = error_info_new_printf ( + _("Module file \"%s\" has invalid format."), + loader_module->module_file_name); + error_info_add_details (*ret_error, error_info_new_printf ( + _("File doesn't contain \"%s\" function."), func_name_file_open)); + } + g_free (func_name_file_probe); + g_free (func_name_file_open); +} + +/* + * Service - file_saver + */ + +typedef struct { + void (*module_func_file_save) (GOFileSaver const *fs, IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, + GsfOutput *output); +} ServiceLoaderDataFileSaver; + +static void +go_plugin_loader_module_func_file_save (GOFileSaver const *fs, GOPluginService *service, + IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, + GsfOutput *output) +{ + ServiceLoaderDataFileSaver *loader_data; + + g_return_if_fail (IS_GO_PLUGIN_SERVICE_FILE_SAVER (service)); + g_return_if_fail (GSF_IS_OUTPUT (output)); + + loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); + loader_data->module_func_file_save (fs, io_context, + FIXME_FIXME_workbook_view, output); +} + +static void +go_plugin_loader_module_load_service_file_saver (GOPluginLoader *loader, + GOPluginService *service, + ErrorInfo **ret_error) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (loader); + gchar *func_name_file_save; + gpointer module_func_file_save = NULL; + + g_return_if_fail (IS_GO_PLUGIN_SERVICE_FILE_SAVER (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + func_name_file_save = g_strconcat ( + plugin_service_get_id (service), "_file_save", NULL); + g_module_symbol (loader_module->handle, func_name_file_save, &module_func_file_save); + if (module_func_file_save != NULL) { + PluginServiceFileSaverCallbacks *cbs; + ServiceLoaderDataFileSaver *loader_data; + + cbs = plugin_service_get_cbs (service); + cbs->plugin_func_file_save = go_plugin_loader_module_func_file_save; + + loader_data = g_new (ServiceLoaderDataFileSaver, 1); + loader_data->module_func_file_save = module_func_file_save; + g_object_set_data_full ( + G_OBJECT (service), "loader_data", loader_data, g_free); + } else { + *ret_error = error_info_new_printf ( + _("Module file \"%s\" has invalid format."), + loader_module->module_file_name); + error_info_add_details (*ret_error, error_info_new_printf ( + _("File doesn't contain \"%s\" function."), + func_name_file_save)); + } + g_free (func_name_file_save); +} + +/* + * Service - plugin_loader + */ + +typedef struct { + GType (*module_func_get_loader_type) (ErrorInfo **ret_error); +} ServiceLoaderDataPluginLoader; + +static GType +go_plugin_loader_module_func_get_loader_type (GOPluginService *service, + ErrorInfo **ret_error) +{ + ServiceLoaderDataPluginLoader *loader_data; + ErrorInfo *error = NULL; + GType loader_type; + + g_return_val_if_fail (IS_GO_PLUGIN_SERVICE_PLUGIN_LOADER (service), 0); + + GO_INIT_RET_ERROR_INFO (ret_error); + loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); + loader_type = loader_data->module_func_get_loader_type (&error); + if (error == NULL) { + return loader_type; + } else { + *ret_error = error; + return (GType) 0; + } +} + +static void +go_plugin_loader_module_load_service_plugin_loader (GOPluginLoader *loader, + GOPluginService *service, + ErrorInfo **ret_error) +{ + GOPluginLoaderModule *loader_module = GO_PLUGIN_LOADER_MODULE (loader); + gchar *func_name_get_loader_type; + gpointer module_func_get_loader_type = NULL; + + g_return_if_fail (IS_GO_PLUGIN_SERVICE_PLUGIN_LOADER (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + func_name_get_loader_type = g_strconcat ( + plugin_service_get_id (service), "_get_loader_type", NULL); + g_module_symbol (loader_module->handle, func_name_get_loader_type, + &module_func_get_loader_type); + if (module_func_get_loader_type != NULL) { + PluginServicePluginLoaderCallbacks *cbs; + ServiceLoaderDataPluginLoader *loader_data; + + cbs = plugin_service_get_cbs (service); + cbs->plugin_func_get_loader_type = go_plugin_loader_module_func_get_loader_type; + + loader_data = g_new (ServiceLoaderDataPluginLoader, 1); + loader_data->module_func_get_loader_type = module_func_get_loader_type; + g_object_set_data_full (G_OBJECT (service), + "loader_data", loader_data, g_free); + } else + *ret_error = error_info_new_printf ( + _("Module doesn't contain \"%s\" function."), + func_name_get_loader_type); + g_free (func_name_get_loader_type); +} diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin-loader-module.h b/lib/goffice-0.0.4/goffice/app/go-plugin-loader-module.h new file mode 100644 index 0000000000..2ecde86958 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-loader-module.h @@ -0,0 +1,33 @@ +#ifndef GO_PLUGIN_LOADER_MODULE_H +#define GO_PLUGIN_LOADER_MODULE_H + +#include +#include +#include + +G_BEGIN_DECLS + +#define GO_PLUGIN_LOADER_MODULE_TYPE (go_plugin_loader_module_get_type ()) +#define GO_PLUGIN_LOADER_MODULE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_LOADER_MODULE_TYPE, GOPluginLoaderModule)) +#define IS_GO_PLUGIN_LOADER_MODULE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_LOADER_MODULE_TYPE)) +#define GO_PLUGIN_LOADER_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GO_PLUGIN_LOADER_MODULE_TYPE, GOPluginLoaderModuleClass)) +#define IS_GO_PLUGIN_LOADER_MODULE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GO_PLUGIN_LOADER_MODULE_TYPE)) + +typedef struct { + GObject base; + + gchar *module_file_name; + GModule *handle; + + void (*plugin_init) (GOPlugin *plugin, GOCmdContext *cc); + void (*plugin_shutdown) (GOPlugin *plugin, GOCmdContext *cc); +} GOPluginLoaderModule; +typedef GObjectClass GOPluginLoaderModuleClass; + +GType go_plugin_loader_module_get_type (void); + +void go_plugin_loader_module_register_version (char const *id, char const *ver); + +G_END_DECLS + +#endif /* GO_PLUGIN_LOADER_MODULE_H */ diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin-loader.c b/lib/goffice-0.0.4/goffice/app/go-plugin-loader.c new file mode 100644 index 0000000000..1140194bf4 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-loader.c @@ -0,0 +1,181 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + +/* + * go-plugin-loader.c: Base class for plugin loaders. + * + * Author: Zbigniew Chyla (cyba@gnome.pl) + */ + +#include +#include +#include +#include +#include + +#include +#include + +#define PL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GO_PLUGIN_LOADER_TYPE, GOPluginLoaderClass)) + +gboolean +go_plugin_loader_is_base_loaded (GOPluginLoader *loader) +{ + return g_object_get_data (G_OBJECT (loader), "is-base-loaded") != NULL; +} +GOPlugin * +go_plugin_loader_get_plugin (GOPluginLoader *l) +{ + return g_object_get_data (G_OBJECT (l), "plugin"); +} + +void +go_plugin_loader_set_plugin (GOPluginLoader *l, GOPlugin *p) +{ + g_object_set_data (G_OBJECT (l), "plugin", p); +} + +void +go_plugin_loader_set_attributes (GOPluginLoader *loader, GHashTable *attrs, + ErrorInfo **err) +{ + g_return_if_fail (IS_GO_PLUGIN_LOADER (loader)); + + GO_INIT_RET_ERROR_INFO (err); + if (PL_GET_CLASS (loader)->set_attributes) + PL_GET_CLASS (loader)->set_attributes (loader, attrs, err); + else + *err = error_info_new_printf (_("Loader has no set_attributes method.\n")); +} + +void +go_plugin_loader_load_base (GOPluginLoader *loader, ErrorInfo **err) +{ + GOPluginLoaderClass *go_plugin_loader_class; + + g_return_if_fail (IS_GO_PLUGIN_LOADER (loader)); + g_return_if_fail (!go_plugin_loader_is_base_loaded (loader)); + + go_plugin_loader_class = PL_GET_CLASS (loader); + if (go_plugin_loader_class->load_base != NULL) + go_plugin_loader_class->load_base (loader, err); + else + *err = error_info_new_printf (_("Loader has no load_base method.\n")); + if (*err == NULL) + g_object_set_data (G_OBJECT (loader), "is-base-loaded", GINT_TO_POINTER (1)); +} + +void +go_plugin_loader_unload_base (GOPluginLoader *loader, ErrorInfo **err) +{ + GOPluginLoaderClass *go_plugin_loader_class; + + g_return_if_fail (IS_GO_PLUGIN_LOADER (loader)); + + go_plugin_loader_class = PL_GET_CLASS (loader); + if (go_plugin_loader_class->unload_base != NULL) { + go_plugin_loader_class->unload_base (loader, err); + if (*err == NULL) + g_object_set_data (G_OBJECT (loader), "is-base-loaded", NULL); + } +} + +void +go_plugin_loader_load_service (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err) +{ + GOPluginLoaderClass *klass; + void (*load_service_method) (GOPluginLoader *, GOPluginService *, ErrorInfo **) = NULL; + + g_return_if_fail (IS_GO_PLUGIN_LOADER (l)); + g_return_if_fail (IS_GO_PLUGIN_SERVICE (s)); + g_return_if_fail (go_plugin_loader_is_base_loaded (l)); + + GO_INIT_RET_ERROR_INFO (err); + + klass = PL_GET_CLASS (l); + if (klass->service_load && (klass->service_load) (l, s, err)) + return; + + if (IS_GO_PLUGIN_SERVICE_FILE_OPENER (s)) { + load_service_method = klass->load_service_file_opener; + } else if (IS_GO_PLUGIN_SERVICE_FILE_SAVER (s)) { + load_service_method = klass->load_service_file_saver; + } else if (IS_GO_PLUGIN_SERVICE_PLUGIN_LOADER (s)) { + load_service_method = klass->load_service_plugin_loader; + } else if (IS_GO_PLUGIN_SERVICE_SIMPLE (s)) { + load_service_method = NULL; + } else { + *err = error_info_new_printf (_("Service '%s' not supported by l."), + G_OBJECT_TYPE_NAME (s)); + } + if (load_service_method != NULL) + load_service_method (l, s, err); + + if (*err == NULL) { + gpointer num_services = g_object_get_data (G_OBJECT (l), "num-services"); + g_object_set_data (G_OBJECT (l), "num-services", + GINT_TO_POINTER (GPOINTER_TO_INT (num_services) + 1));; + } +} + +void +go_plugin_loader_unload_service (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err) +{ + GOPluginLoaderClass *klass; + void (*unload_service_method) (GOPluginLoader *, GOPluginService *, ErrorInfo **) = NULL; + ErrorInfo *error = NULL; + + g_return_if_fail (IS_GO_PLUGIN_LOADER (l)); + g_return_if_fail (IS_GO_PLUGIN_SERVICE (s)); + + GO_INIT_RET_ERROR_INFO (err); + + klass = PL_GET_CLASS (l); + if (klass->service_unload && (klass->service_unload) (l, s, err)) + return; + + if (IS_GO_PLUGIN_SERVICE_FILE_OPENER (s)) { + unload_service_method = klass->unload_service_file_opener; + } else if (IS_GO_PLUGIN_SERVICE_FILE_SAVER (s)) { + unload_service_method = klass->unload_service_file_saver; + } else if (IS_GO_PLUGIN_SERVICE_PLUGIN_LOADER (s)) { + unload_service_method = klass->unload_service_plugin_loader; + } else if (IS_GO_PLUGIN_SERVICE_SIMPLE (s)) { + unload_service_method = NULL; + } else + *err = error_info_new_printf (_("Service '%s' not supported by l."), + G_OBJECT_TYPE_NAME (s)); + + if (unload_service_method != NULL) + unload_service_method (l, s, &error); + if (error == NULL) { + gpointer num_services = g_object_get_data (G_OBJECT (l), "num-services"); + g_return_if_fail (num_services != NULL); + g_object_set_data (G_OBJECT (l), "num-services", + GINT_TO_POINTER (GPOINTER_TO_INT (num_services) - 1));; + if (GPOINTER_TO_INT (num_services) == 1) { + go_plugin_loader_unload_base (l, &error); + error_info_free (error); + } + } else + *err = error; +} + +GType +go_plugin_loader_get_type (void) +{ + static GType go_plugin_loader_type = 0; + + if (!go_plugin_loader_type) { + static GTypeInfo const go_plugin_loader_info = { + sizeof (GOPluginLoaderClass), /* class_size */ + NULL, /* base_init */ + NULL, /* base_finalize */ + }; + + go_plugin_loader_type = g_type_register_static (G_TYPE_INTERFACE, + "GOPluginLoader", &go_plugin_loader_info, 0); + } + + return go_plugin_loader_type; +} + diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin-loader.h b/lib/goffice-0.0.4/goffice/app/go-plugin-loader.h new file mode 100644 index 0000000000..07e64cf3b5 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-loader.h @@ -0,0 +1,50 @@ +#ifndef GO_PLUGIN_LOADER_H +#define GO_PLUGIN_LOADER_H + +#include +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GO_PLUGIN_LOADER_TYPE (go_plugin_loader_get_type ()) +#define GO_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_LOADER_TYPE, GOPluginLoader)) +#define IS_GO_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_LOADER_TYPE)) +#define GO_PLUGIN_LOADER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GO_PLUGIN_LOADER_TYPE, GOPluginLoaderClass)) +#define IS_GO_PLUGIN_LOADER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GO_PLUGIN_LOADER_TYPE)) + +typedef struct { + GTypeInterface base; + + void (*load_base) (GOPluginLoader *l, ErrorInfo **err); + void (*unload_base) (GOPluginLoader *l, ErrorInfo **err); + void (*set_attributes) (GOPluginLoader *l, GHashTable *attrs, ErrorInfo **err); + gboolean (*service_load) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + gboolean (*service_unload) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + + void (*load_service_file_opener) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + void (*unload_service_file_opener) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + + void (*load_service_file_saver) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + void (*unload_service_file_saver) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + + void (*load_service_plugin_loader) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); + void (*unload_service_plugin_loader) (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); +} GOPluginLoaderClass; + +GType go_plugin_loader_get_type (void); +void go_plugin_loader_set_attributes (GOPluginLoader *l, GHashTable *attrs, + ErrorInfo **err); +GOPlugin *go_plugin_loader_get_plugin (GOPluginLoader *l); +void go_plugin_loader_set_plugin (GOPluginLoader *l, GOPlugin *p); +void go_plugin_loader_load_base (GOPluginLoader *l, ErrorInfo **err); +void go_plugin_loader_unload_base (GOPluginLoader *l, ErrorInfo **err); +void go_plugin_loader_load_service (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); +void go_plugin_loader_unload_service (GOPluginLoader *l, GOPluginService *s, ErrorInfo **err); +gboolean go_plugin_loader_is_base_loaded (GOPluginLoader *l); + +G_END_DECLS + +#endif /* GO_PLUGIN_LOADER_H */ diff --git a/lib/goffice/split/plugin-service-impl.h b/lib/goffice-0.0.4/goffice/app/go-plugin-service-impl.h similarity index 62% rename from lib/goffice/split/plugin-service-impl.h rename to lib/goffice-0.0.4/goffice/app/go-plugin-service-impl.h index 39eba44f16..3434da9175 100644 --- a/lib/goffice/split/plugin-service-impl.h +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-service-impl.h @@ -16,24 +16,24 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ -#ifndef GO_GRAPH_ITEM_IMPL_H -#define GO_GRAPH_ITEM_IMPL_H +#ifndef GO_PLUGIN_SERVICE_IMPL_H +#define GO_PLUGIN_SERVICE_IMPL_H -#include "gnumeric.h" -#include "plugin-service.h" +#include #include +#include G_BEGIN_DECLS -struct _GnmPluginService { +struct _GOPluginService { GObject g_object; char *id; - GnmPlugin *plugin; + GOPlugin *plugin; gboolean is_loaded; /* protected */ @@ -47,36 +47,36 @@ struct _GnmPluginService { typedef struct{ GObjectClass g_object_class; - void (*read_xml) (GnmPluginService *service, xmlNode *tree, ErrorInfo **ret_error); - void (*activate) (GnmPluginService *service, ErrorInfo **ret_error); - void (*deactivate) (GnmPluginService *service, ErrorInfo **ret_error); - char *(*get_description) (GnmPluginService *service); -} GnmPluginServiceClass; + void (*read_xml) (GOPluginService *service, xmlNode *tree, ErrorInfo **ret_error); + void (*activate) (GOPluginService *service, ErrorInfo **ret_error); + void (*deactivate) (GOPluginService *service, ErrorInfo **ret_error); + char *(*get_description) (GOPluginService *service); +} GOPluginServiceClass; -#define GPS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNM_PLUGIN_SERVICE_TYPE, GnmPluginServiceClass)) +#define GPS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GO_PLUGIN_SERVICE_TYPE, GOPluginServiceClass)) #define GPS_GET_CLASS(o) GPS_CLASS (G_OBJECT_GET_CLASS (o)) typedef struct{ - GnmPluginServiceClass plugin_service_class; + GOPluginServiceClass plugin_service_class; GHashTable *pending; /* has service instances by type names */ } PluginServiceGObjectLoaderClass; struct _PluginServiceGObjectLoader { - GnmPluginService plugin_service; + GOPluginService plugin_service; }; -#define GPS_GOBJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNM_PLUGIN_SERVICE_TYPE, PluginServiceGObjectLoaderClass)) +#define GPS_GOBJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GO_PLUGIN_SERVICE_TYPE, PluginServiceGObjectLoaderClass)) #define GPS_GOBJECT_LOADER_GET_CLASS(o) GPS_GOBJECT_LOADER_CLASS (G_OBJECT_GET_CLASS (o)) typedef struct{ - GnmPluginServiceClass plugin_service_class; + GOPluginServiceClass plugin_service_class; } PluginServiceSimpleClass; struct _PluginServiceSimple { - GnmPluginService plugin_service; + GOPluginService plugin_service; }; G_END_DECLS -#endif /* GO_GRAPH_ITEM_IMPL_H */ +#endif /* GO_PLUGIN_SERVICE_IMPL_H */ diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin-service.c b/lib/goffice-0.0.4/goffice/app/go-plugin-service.c new file mode 100644 index 0000000000..90bfc76a9f --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-service.c @@ -0,0 +1,1182 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-plugin-service.c: Plugin services - reading XML info, activating, etc. + * (everything independent of plugin loading method) + * + * Author: Zbigniew Chyla (cyba@gnome.pl) + */ + +#include +#include "go-plugin-service.h" +#include "go-plugin-service-impl.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +static GHashTable *services = NULL; + +static FileFormatLevel +parse_format_level_str (gchar const *format_level_str, FileFormatLevel def) +{ + FileFormatLevel format_level; + + if (format_level_str == NULL) { + format_level = def; + } else if (g_ascii_strcasecmp (format_level_str, "none") == 0) { + format_level = FILE_FL_NONE; + } else if (g_ascii_strcasecmp (format_level_str, "write_only") == 0) { + format_level = FILE_FL_WRITE_ONLY; + } else if (g_ascii_strcasecmp (format_level_str, "new") == 0) { + format_level = FILE_FL_NEW; + } else if (g_ascii_strcasecmp (format_level_str, "manual") == 0) { + format_level = FILE_FL_MANUAL; + } else if (g_ascii_strcasecmp (format_level_str, "manual_remember") == 0) { + format_level = FILE_FL_MANUAL_REMEMBER; + } else if (g_ascii_strcasecmp (format_level_str, "auto") == 0) { + format_level = FILE_FL_AUTO; + } else { + format_level = def; + } + + return format_level; +} + +static GHashTable * +get_plugin_file_savers_hash (GOPlugin *plugin) +{ + GHashTable *hash; + + hash = g_object_get_data (G_OBJECT (plugin), "file_savers_hash"); + if (hash == NULL) { + hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + g_object_set_data_full ( + G_OBJECT (plugin), "file_savers_hash", + hash, (GDestroyNotify) g_hash_table_destroy); + } + + return hash; +} + + +static void +plugin_service_init (GObject *obj) +{ + GOPluginService *service = GO_PLUGIN_SERVICE (obj); + + service->id = NULL; + service->is_active = FALSE; + service->is_loaded = FALSE; + service->plugin = NULL; + service->cbs_ptr = NULL; + service->saved_description = NULL; +} + +static void +plugin_service_finalize (GObject *obj) +{ + GOPluginService *service = GO_PLUGIN_SERVICE (obj); + GObjectClass *parent_class; + + g_free (service->id); + service->id = NULL; + g_free (service->saved_description); + service->saved_description = NULL; + + parent_class = g_type_class_peek (G_TYPE_OBJECT); + parent_class->finalize (obj); +} + +static void +plugin_service_class_init (GObjectClass *gobject_class) +{ + GOPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); + + gobject_class->finalize = plugin_service_finalize; + plugin_service_class->read_xml = NULL; + plugin_service_class->activate = NULL; + plugin_service_class->deactivate = NULL; + plugin_service_class->get_description = NULL; +} + +GSF_CLASS (GOPluginService, plugin_service, + plugin_service_class_init, plugin_service_init, + G_TYPE_OBJECT) + + +/****************************************************************************/ + +/* + * PluginServiceGeneral + */ + +typedef struct{ + GOPluginServiceClass plugin_service_class; +} PluginServiceGeneralClass; + +struct _PluginServiceGeneral { + GOPluginService plugin_service; + PluginServiceGeneralCallbacks cbs; +}; + + +static void +plugin_service_general_init (GObject *obj) +{ + PluginServiceGeneral *service_general = GO_PLUGIN_SERVICE_GENERAL (obj); + + GO_PLUGIN_SERVICE (obj)->cbs_ptr = &service_general->cbs; + service_general->cbs.plugin_func_init = NULL; + service_general->cbs.plugin_func_cleanup = NULL; +} + +static void +plugin_service_general_activate (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServiceGeneral *service_general = GO_PLUGIN_SERVICE_GENERAL (service); + ErrorInfo *error = NULL; + + GO_INIT_RET_ERROR_INFO (ret_error); + plugin_service_load (service, &error); + if (error != NULL) { + *ret_error = error_info_new_str_with_details ( + _("Error while loading plugin service."), + error); + return; + } + g_return_if_fail (service_general->cbs.plugin_func_init != NULL); + service_general->cbs.plugin_func_init (service, &error); + if (error != NULL) { + *ret_error = error_info_new_str_with_details ( + _("Initializing function inside plugin returned error."), + error); + return; + } + service->is_active = TRUE; +} + +static void +plugin_service_general_deactivate (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServiceGeneral *service_general = GO_PLUGIN_SERVICE_GENERAL (service); + ErrorInfo *error = NULL; + + GO_INIT_RET_ERROR_INFO (ret_error); + g_return_if_fail (service_general->cbs.plugin_func_cleanup != NULL); + service_general->cbs.plugin_func_cleanup (service, &error); + if (error != NULL) { + *ret_error = error_info_new_str_with_details ( + _("Cleanup function inside plugin returned error."), + error); + return; + } + service->is_active = FALSE; +} + +static char * +plugin_service_general_get_description (GOPluginService *service) +{ + return g_strdup (_("General")); +} + +static void +plugin_service_general_class_init (GObjectClass *gobject_class) +{ + GOPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); + + plugin_service_class->activate = plugin_service_general_activate; + plugin_service_class->deactivate = plugin_service_general_deactivate; + plugin_service_class->get_description = plugin_service_general_get_description; +} + +GSF_CLASS (PluginServiceGeneral, plugin_service_general, + plugin_service_general_class_init, plugin_service_general_init, + GO_PLUGIN_SERVICE_TYPE) + +/****************************************************************************/ + +/* + * PluginServiceFileOpener + */ + +typedef struct _GOPluginFileOpener GOPluginFileOpener; +static GOPluginFileOpener *go_plugin_file_opener_new (GOPluginService *service); + +struct _InputFileSaveInfo { + gchar *saver_id_str; + FileFormatLevel format_level; +}; + +typedef struct _InputFileSaveInfo InputFileSaveInfo; + + +typedef struct{ + GOPluginServiceClass plugin_service_class; +} PluginServiceFileOpenerClass; + +struct _PluginServiceFileOpener { + GOPluginService plugin_service; + + gint priority; + gboolean has_probe; + gchar *description; + GSList *suffixes; /* list of char * */ + GSList *mimes; /* list of char * */ + + GOFileOpener *opener; + PluginServiceFileOpenerCallbacks cbs; +}; + + +static void +plugin_service_file_opener_init (GObject *obj) +{ + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (obj); + + GO_PLUGIN_SERVICE (obj)->cbs_ptr = &service_file_opener->cbs; + service_file_opener->description = NULL; + service_file_opener->suffixes = NULL; + service_file_opener->mimes = NULL; + service_file_opener->opener = NULL; + service_file_opener->cbs.plugin_func_file_probe = NULL; + service_file_opener->cbs.plugin_func_file_open = NULL; +} + +static void +plugin_service_file_opener_finalize (GObject *obj) +{ + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (obj); + GObjectClass *parent_class; + + g_free (service_file_opener->description); + service_file_opener->description = NULL; + go_slist_free_custom (service_file_opener->suffixes, g_free); + service_file_opener->suffixes = NULL; + go_slist_free_custom (service_file_opener->mimes, g_free); + service_file_opener->mimes = NULL; + if (service_file_opener->opener != NULL) { + g_object_unref (service_file_opener->opener); + service_file_opener->opener = NULL; + } + + parent_class = g_type_class_peek (GO_PLUGIN_SERVICE_TYPE); + parent_class->finalize (obj); +} + +static void +plugin_service_file_opener_read_xml (GOPluginService *service, xmlNode *tree, ErrorInfo **ret_error) +{ + int priority; + gboolean has_probe; + xmlNode *information_node; + gchar *description; + + GO_INIT_RET_ERROR_INFO (ret_error); + if (xml_node_get_int (tree, "priority", &priority)) + priority = CLAMP (priority, 0, 100); + else + priority = 50; + + if (!xml_node_get_bool (tree, "probe", &has_probe)) + has_probe = TRUE; + + information_node = e_xml_get_child_by_name (tree, (xmlChar *)"information"); + if (information_node != NULL) { + xmlNode *node; + xmlChar *val; + + node = e_xml_get_child_by_name_by_lang ( + information_node, "description"); + if (node != NULL) { + val = xmlNodeGetContent (node); + description = g_strdup ((gchar *)val); + xmlFree (val); + } else { + description = NULL; + } + } else { + description = NULL; + } + if (description != NULL) { + GSList *suffixes = NULL, *mimes = NULL; + char *tmp; + xmlNode *list, *node; + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (service); + + list = e_xml_get_child_by_name (tree, (xmlChar *)"suffixes"); + if (list != NULL) { + for (node = list->xmlChildrenNode; node != NULL; node = node->next) + if (strcmp (node->name, "suffix") == 0 && + (tmp = xmlNodeGetContent (node)) != NULL) + GO_SLIST_PREPEND (suffixes, tmp); + } + GO_SLIST_REVERSE (suffixes); + + list = e_xml_get_child_by_name (tree, (xmlChar *)"mime-types"); + if (list != NULL) { + for (node = list->xmlChildrenNode; node != NULL; node = node->next) + if (strcmp (node->name, "mime-type") == 0 && + (tmp = xmlNodeGetContent (node)) != NULL) + GO_SLIST_PREPEND (mimes, tmp); + } + GO_SLIST_REVERSE (mimes); + + service_file_opener->priority = priority; + service_file_opener->has_probe = has_probe; + service_file_opener->description = description; + service_file_opener->suffixes = suffixes; + service_file_opener->mimes = mimes; + } else { + *ret_error = error_info_new_str (_("File opener has no description")); + } +} + +static void +plugin_service_file_opener_activate (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (service); + + GO_INIT_RET_ERROR_INFO (ret_error); + service_file_opener->opener = GO_FILE_OPENER (go_plugin_file_opener_new (service)); + go_file_opener_register (service_file_opener->opener, + service_file_opener->priority); + service->is_active = TRUE; +} + +static void +plugin_service_file_opener_deactivate (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (service); + + GO_INIT_RET_ERROR_INFO (ret_error); + go_file_opener_unregister (service_file_opener->opener); + service->is_active = FALSE; +} + +static char * +plugin_service_file_opener_get_description (GOPluginService *service) +{ + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (service); + + return g_strdup_printf ( + _("File opener - %s"), service_file_opener->description); +} + +static void +plugin_service_file_opener_class_init (GObjectClass *gobject_class) +{ + GOPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); + + gobject_class->finalize = plugin_service_file_opener_finalize; + plugin_service_class->read_xml = plugin_service_file_opener_read_xml; + plugin_service_class->activate = plugin_service_file_opener_activate; + plugin_service_class->deactivate = plugin_service_file_opener_deactivate; + plugin_service_class->get_description = plugin_service_file_opener_get_description; +} + +GSF_CLASS (PluginServiceFileOpener, plugin_service_file_opener, + plugin_service_file_opener_class_init, plugin_service_file_opener_init, + GO_PLUGIN_SERVICE_TYPE) + + +/** GOPluginFileOpener class **/ + +#define TYPE_GO_PLUGIN_FILE_OPENER (go_plugin_file_opener_get_type ()) +#define GO_PLUGIN_FILE_OPENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GO_PLUGIN_FILE_OPENER, GOPluginFileOpener)) +#define GO_PLUGIN_FILE_OPENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GO_PLUGIN_FILE_OPENER, GOPluginFileOpenerClass)) +#define IS_GO_PLUGIN_FILE_OPENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GO_PLUGIN_FILE_OPENER)) + +GType go_plugin_file_opener_get_type (void); + +typedef struct { + GOFileOpenerClass parent_class; +} GOPluginFileOpenerClass; + +struct _GOPluginFileOpener { + GOFileOpener parent; + + GOPluginService *service; +}; + +static void +go_plugin_file_opener_init (GOPluginFileOpener *fo) +{ + fo->service = NULL; +} + +static gboolean +go_plugin_file_opener_can_probe (GOFileOpener const *fo, FileProbeLevel pl) +{ + GOPluginFileOpener *pfo = GO_PLUGIN_FILE_OPENER (fo); + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (pfo->service); + if (pl == FILE_PROBE_FILE_NAME) + return service_file_opener->suffixes != NULL; + return service_file_opener->has_probe; +} + +static gboolean +go_plugin_file_opener_probe (GOFileOpener const *fo, GsfInput *input, + FileProbeLevel pl) +{ + GOPluginFileOpener *pfo = GO_PLUGIN_FILE_OPENER (fo); + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (pfo->service); + + g_return_val_if_fail (GSF_IS_INPUT (input), FALSE); + + if (pl == FILE_PROBE_FILE_NAME && service_file_opener->suffixes != NULL) { + GSList *ptr; + gchar const *extension; + gchar *lowercase_extension; + + if (gsf_input_name (input) == NULL) + return FALSE; + extension = gsf_extension_pointer (gsf_input_name (input)); + if (extension == NULL) + return FALSE; + + lowercase_extension = g_utf8_strdown (extension, -1); + for (ptr = service_file_opener->suffixes; ptr != NULL ; ptr = ptr->next) + if (0 == strcmp (lowercase_extension, ptr->data)) + break; + g_free (lowercase_extension); + return ptr != NULL; + } + + if (service_file_opener->has_probe) { + ErrorInfo *ignored_error = NULL; + + plugin_service_load (pfo->service, &ignored_error); + if (ignored_error != NULL) { + error_info_print (ignored_error); + error_info_free (ignored_error); + return FALSE; + } else if (service_file_opener->cbs.plugin_func_file_probe == NULL) { + return FALSE; + } else { + gboolean res = service_file_opener->cbs.plugin_func_file_probe (fo, pfo->service, input, pl); + gsf_input_seek (input, 0, G_SEEK_SET); + return res; + } + } else { + return FALSE; + } +} + +static void +go_plugin_file_opener_open (GOFileOpener const *fo, gchar const *unused_enc, + IOContext *io_context, + gpointer FIXME_FIXME_workbook_view, + GsfInput *input) + +{ + GOPluginFileOpener *pfo = GO_PLUGIN_FILE_OPENER (fo); + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (pfo->service); + ErrorInfo *error = NULL; + + g_return_if_fail (GSF_IS_INPUT (input)); + + plugin_service_load (pfo->service, &error); + if (error != NULL) { + gnumeric_io_error_info_set (io_context, error); + gnumeric_io_error_push (io_context, error_info_new_str ( + _("Error while reading file."))); + return; + } + + g_return_if_fail (service_file_opener->cbs.plugin_func_file_open != NULL); + service_file_opener->cbs.plugin_func_file_open (fo, pfo->service, io_context, FIXME_FIXME_workbook_view, input); +} + +static void +go_plugin_file_opener_class_init (GOPluginFileOpenerClass *klass) +{ + GOFileOpenerClass *go_file_opener_klass = GO_FILE_OPENER_CLASS (klass); + + go_file_opener_klass->can_probe = go_plugin_file_opener_can_probe; + go_file_opener_klass->probe = go_plugin_file_opener_probe; + go_file_opener_klass->open = go_plugin_file_opener_open; +} + +GSF_CLASS (GOPluginFileOpener, go_plugin_file_opener, + go_plugin_file_opener_class_init, go_plugin_file_opener_init, + TYPE_GO_FILE_OPENER) + +static GSList * +go_str_slist_dup (GSList *l) +{ + GSList *res = NULL; + for ( ; l != NULL ; l = l->next) + res = g_slist_prepend (res, g_strdup (l->data)); + return g_slist_reverse (res); +} + +static GOPluginFileOpener * +go_plugin_file_opener_new (GOPluginService *service) +{ + PluginServiceFileOpener *service_file_opener = GO_PLUGIN_SERVICE_FILE_OPENER (service); + GOPluginFileOpener *fo; + gchar *opener_id; + + opener_id = g_strconcat ( + go_plugin_get_id (service->plugin), ":", service->id, NULL); + fo = GO_PLUGIN_FILE_OPENER (g_object_new (TYPE_GO_PLUGIN_FILE_OPENER, NULL)); + go_file_opener_setup (GO_FILE_OPENER (fo), opener_id, + service_file_opener->description, + go_str_slist_dup (service_file_opener->suffixes), + go_str_slist_dup (service_file_opener->mimes), + FALSE, NULL, NULL); + fo->service = service; + g_free (opener_id); + + return fo; +} + +/** -- **/ + + +/* + * PluginServiceFileSaver + */ + +typedef struct _GOPluginFileSaver GOPluginFileSaver; +static GOPluginFileSaver *go_plugin_file_saver_new (GOPluginService *service); + + +typedef struct{ + GOPluginServiceClass plugin_service_class; +} PluginServiceFileSaverClass; + +struct _PluginServiceFileSaver { + GOPluginService plugin_service; + + gchar *file_extension; + FileFormatLevel format_level; + gchar *description; + gint default_saver_priority; + FileSaveScope save_scope; + gboolean overwrite_files; + + GOFileSaver *saver; + PluginServiceFileSaverCallbacks cbs; +}; + + +static void +plugin_service_file_saver_init (GObject *obj) +{ + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (obj); + + GO_PLUGIN_SERVICE (obj)->cbs_ptr = &service_file_saver->cbs; + service_file_saver->file_extension = NULL; + service_file_saver->description = NULL; + service_file_saver->cbs.plugin_func_file_save = NULL; + service_file_saver->saver = NULL; +} + +static void +plugin_service_file_saver_finalize (GObject *obj) +{ + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (obj); + GObjectClass *parent_class; + + g_free (service_file_saver->file_extension); + service_file_saver->file_extension = NULL; + g_free (service_file_saver->description); + service_file_saver->description = NULL; + if (service_file_saver->saver != NULL) { + g_object_unref (service_file_saver->saver); + service_file_saver->saver = NULL; + } + + parent_class = g_type_class_peek (GO_PLUGIN_SERVICE_TYPE); + parent_class->finalize (obj); +} + +static void +plugin_service_file_saver_read_xml (GOPluginService *service, xmlNode *tree, ErrorInfo **ret_error) +{ + gchar *file_extension; + xmlNode *information_node; + gchar *description; + gchar *format_level_str, *save_scope_str; + + GO_INIT_RET_ERROR_INFO (ret_error); + file_extension = xml_node_get_cstr (tree, "file_extension"); + format_level_str = xml_node_get_cstr (tree, "format_level"); + save_scope_str = xml_node_get_cstr (tree, "save_scope"); + information_node = e_xml_get_child_by_name (tree, (xmlChar *)"information"); + if (information_node != NULL) { + xmlNode *node; + xmlChar *val; + + node = e_xml_get_child_by_name_by_lang ( + information_node, "description"); + if (node != NULL) { + val = xmlNodeGetContent (node); + description = g_strdup ((gchar *)val); + xmlFree (val); + } else { + description = NULL; + } + } else { + description = NULL; + } + if (description != NULL) { + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (service); + + service_file_saver->file_extension = file_extension; + service_file_saver->description = description; + service_file_saver->format_level = parse_format_level_str (format_level_str, + FILE_FL_WRITE_ONLY); + if (!xml_node_get_int (tree, "default_saver_priority", &(service_file_saver->default_saver_priority))) + service_file_saver->default_saver_priority = -1; + + service_file_saver->save_scope = FILE_SAVE_WORKBOOK; + if (save_scope_str) { + if (g_ascii_strcasecmp (save_scope_str, "sheet") == 0) + service_file_saver->save_scope + = FILE_SAVE_SHEET; + else if (g_ascii_strcasecmp (save_scope_str, + "range") == 0) { + service_file_saver->save_scope + = FILE_SAVE_RANGE; + } + } + if (!xml_node_get_bool (tree, "overwrite_files", &(service_file_saver->overwrite_files))) + service_file_saver->overwrite_files = TRUE; + } else { + *ret_error = error_info_new_str (_("File saver has no description")); + g_free (file_extension); + } + g_free (format_level_str); + g_free (save_scope_str); +} + +static void +plugin_service_file_saver_activate (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (service); + GHashTable *file_savers_hash; + + GO_INIT_RET_ERROR_INFO (ret_error); + service_file_saver->saver = GO_FILE_SAVER (go_plugin_file_saver_new (service)); + if (service_file_saver->default_saver_priority < 0) { + go_file_saver_register (service_file_saver->saver); + } else { + go_file_saver_register_as_default (service_file_saver->saver, + service_file_saver->default_saver_priority); + } + file_savers_hash = get_plugin_file_savers_hash (service->plugin); + g_assert (g_hash_table_lookup (file_savers_hash, service->id) == NULL); + g_hash_table_insert (file_savers_hash, g_strdup (service->id), service_file_saver->saver); + service->is_active = TRUE; +} + +static void +plugin_service_file_saver_deactivate (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (service); + GHashTable *file_savers_hash; + + GO_INIT_RET_ERROR_INFO (ret_error); + file_savers_hash = get_plugin_file_savers_hash (service->plugin); + g_hash_table_remove (file_savers_hash, service->id); + go_file_saver_unregister (service_file_saver->saver); + service->is_active = FALSE; +} + +static char * +plugin_service_file_saver_get_description (GOPluginService *service) +{ + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (service); + + return g_strdup_printf ( + _("File saver - %s"), service_file_saver->description); +} + +static void +plugin_service_file_saver_class_init (GObjectClass *gobject_class) +{ + GOPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); + + gobject_class->finalize = plugin_service_file_saver_finalize; + plugin_service_class->read_xml = plugin_service_file_saver_read_xml; + plugin_service_class->activate = plugin_service_file_saver_activate; + plugin_service_class->deactivate = plugin_service_file_saver_deactivate; + plugin_service_class->get_description = plugin_service_file_saver_get_description; +} + +GSF_CLASS (PluginServiceFileSaver, plugin_service_file_saver, + plugin_service_file_saver_class_init, plugin_service_file_saver_init, + GO_PLUGIN_SERVICE_TYPE) + + +/** GOPluginFileSaver class **/ + +#define TYPE_GO_PLUGIN_FILE_SAVER (go_plugin_file_saver_get_type ()) +#define GO_PLUGIN_FILE_SAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GO_PLUGIN_FILE_SAVER, GOPluginFileSaver)) +#define GO_PLUGIN_FILE_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GO_PLUGIN_FILE_SAVER, GOPluginFileSaverClass)) +#define IS_GO_PLUGIN_FILE_SAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GO_PLUGIN_FILE_SAVER)) + +GType go_plugin_file_saver_get_type (void); + +typedef struct { + GOFileSaverClass parent_class; +} GOPluginFileSaverClass; + +struct _GOPluginFileSaver { + GOFileSaver parent; + + GOPluginService *service; +}; + +static void +go_plugin_file_saver_init (GOPluginFileSaver *fs) +{ + fs->service = NULL; +} + +static void +go_plugin_file_saver_save (GOFileSaver const *fs, IOContext *io_context, + gconstpointer FIXME_FIXME_workbook_view, + GsfOutput *output) +{ + GOPluginFileSaver *pfs = GO_PLUGIN_FILE_SAVER (fs); + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (pfs->service); + ErrorInfo *error = NULL; + + g_return_if_fail (GSF_IS_OUTPUT (output)); + + plugin_service_load (pfs->service, &error); + if (error != NULL) { + gnumeric_io_error_info_set (io_context, error); + gnumeric_io_error_push (io_context, error_info_new_str ( + _("Error while loading plugin for saving."))); + if (!gsf_output_error (output)) + gsf_output_set_error (output, 0, _("Failed to load plugin for saving")); + return; + } + + g_return_if_fail (service_file_saver->cbs.plugin_func_file_save != NULL); + service_file_saver->cbs.plugin_func_file_save (fs, pfs->service, io_context, FIXME_FIXME_workbook_view, output); +} + +static void +go_plugin_file_saver_class_init (GOPluginFileSaverClass *klass) +{ + GOFileSaverClass *go_file_saver_klass = GO_FILE_SAVER_CLASS (klass); + + go_file_saver_klass->save = go_plugin_file_saver_save; +} + +GSF_CLASS (GOPluginFileSaver, go_plugin_file_saver, + go_plugin_file_saver_class_init, go_plugin_file_saver_init, + TYPE_GO_FILE_SAVER) + +static GOPluginFileSaver * +go_plugin_file_saver_new (GOPluginService *service) +{ + GOPluginFileSaver *fs; + PluginServiceFileSaver *service_file_saver = GO_PLUGIN_SERVICE_FILE_SAVER (service); + gchar *saver_id; + + saver_id = g_strconcat ( + go_plugin_get_id (service->plugin), ":", service->id, NULL); + fs = GO_PLUGIN_FILE_SAVER (g_object_new (TYPE_GO_PLUGIN_FILE_SAVER, NULL)); + go_file_saver_setup (GO_FILE_SAVER (fs), saver_id, + service_file_saver->file_extension, + service_file_saver->description, + service_file_saver->format_level, + NULL); + go_file_saver_set_save_scope (GO_FILE_SAVER (fs), + service_file_saver->save_scope); + go_file_saver_set_overwrite_files (GO_FILE_SAVER (fs), + service_file_saver->overwrite_files); + fs->service = service; + g_free (saver_id); + + return fs; +} + +/* + * PluginServicePluginLoader + */ + +typedef struct{ + GOPluginServiceClass plugin_service_class; +} PluginServicePluginLoaderClass; + +struct _PluginServicePluginLoader { + GOPluginService plugin_service; + PluginServicePluginLoaderCallbacks cbs; +}; + + +static void +plugin_service_plugin_loader_init (GObject *obj) +{ + PluginServicePluginLoader *service_plugin_loader = GO_PLUGIN_SERVICE_PLUGIN_LOADER (obj); + + GO_PLUGIN_SERVICE (obj)->cbs_ptr = &service_plugin_loader->cbs; +} + +GType +plugin_service_plugin_loader_generate_type (GOPluginService *service, ErrorInfo **ret_error) +{ + PluginServicePluginLoader *service_plugin_loader = GO_PLUGIN_SERVICE_PLUGIN_LOADER (service); + ErrorInfo *error = NULL; + GType loader_type; + + GO_INIT_RET_ERROR_INFO (ret_error); + plugin_service_load (service, &error); + if (error == NULL) { + loader_type = service_plugin_loader->cbs.plugin_func_get_loader_type ( + service, &error); + if (error == NULL) + return loader_type; + *ret_error = error; + } else { + *ret_error = error_info_new_str_with_details ( + _("Error while loading plugin service."), + error); + } + return G_TYPE_NONE; +} + +static void +plugin_service_plugin_loader_activate (GOPluginService *service, ErrorInfo **ret_error) +{ + gchar *full_id; + + GO_INIT_RET_ERROR_INFO (ret_error); + full_id = g_strconcat ( + go_plugin_get_id (service->plugin), ":", service->id, NULL); + go_plugins_register_loader (full_id, service); + g_free (full_id); + service->is_active = TRUE; +} + +static void +plugin_service_plugin_loader_deactivate (GOPluginService *service, ErrorInfo **ret_error) +{ + gchar *full_id; + + GO_INIT_RET_ERROR_INFO (ret_error); + full_id = g_strconcat ( + go_plugin_get_id (service->plugin), ":", service->id, NULL); + go_plugins_unregister_loader (full_id); + g_free (full_id); + service->is_active = FALSE; +} + +static char * +plugin_service_plugin_loader_get_description (GOPluginService *service) +{ + return g_strdup (_("Plugin loader")); +} + +static void +plugin_service_plugin_loader_class_init (GObjectClass *gobject_class) +{ + GOPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); + + plugin_service_class->activate = plugin_service_plugin_loader_activate; + plugin_service_class->deactivate = plugin_service_plugin_loader_deactivate; + plugin_service_class->get_description = plugin_service_plugin_loader_get_description; +} + +GSF_CLASS (PluginServicePluginLoader, plugin_service_plugin_loader, + plugin_service_plugin_loader_class_init, plugin_service_plugin_loader_init, + GO_PLUGIN_SERVICE_TYPE) + +/************************************************************************** + * PluginServiceGObjectLoader + */ + +static char * +plugin_service_gobject_loader_get_description (GOPluginService *service) +{ + return g_strdup (_("GObject loader")); +} + +static void +plugin_service_gobject_loader_read_xml (GOPluginService *service, + G_GNUC_UNUSED xmlNode *tree, + G_GNUC_UNUSED ErrorInfo **ret_error) +{ + PluginServiceGObjectLoaderClass *gobj_loader_class = GPS_GOBJECT_LOADER_GET_CLASS (service); + g_return_if_fail (gobj_loader_class->pending != NULL); + g_hash_table_replace (gobj_loader_class->pending, service->id, service); +} + +static void +plugin_service_gobject_loader_class_init (PluginServiceGObjectLoaderClass *gobj_loader_class) +{ + GOPluginServiceClass *psc = GPS_CLASS (gobj_loader_class); + + psc->get_description = plugin_service_gobject_loader_get_description; + psc->read_xml = plugin_service_gobject_loader_read_xml; + gobj_loader_class->pending = NULL; +} + +GSF_CLASS (PluginServiceGObjectLoader, plugin_service_gobject_loader, + plugin_service_gobject_loader_class_init, NULL, + GO_PLUGIN_SERVICE_SIMPLE_TYPE) + +/************************************************************************** + * PluginServiceSimple + */ + +static void +plugin_service_simple_activate (GOPluginService *service, ErrorInfo **ret_error) +{ + service->is_active = TRUE; +} + +static void +plugin_service_simple_deactivate (GOPluginService *service, ErrorInfo **ret_error) +{ + service->is_active = FALSE; +} + +static void +plugin_service_simple_class_init (GObjectClass *gobject_class) +{ + GOPluginServiceClass *psc = GPS_CLASS (gobject_class); + + psc->activate = plugin_service_simple_activate; + psc->deactivate = plugin_service_simple_deactivate; +} + +GSF_CLASS (PluginServiceSimple, plugin_service_simple, + plugin_service_simple_class_init, + NULL, + GO_PLUGIN_SERVICE_TYPE) + +/* ---------------------------------------------------------------------- */ + +void +plugin_service_load (GOPluginService *service, ErrorInfo **ret_error) +{ + g_return_if_fail (IS_GO_PLUGIN_SERVICE (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + + if (service->is_loaded) + return; + go_plugin_load_service (service->plugin, service, ret_error); + if (*ret_error == NULL) + service->is_loaded = TRUE; +} + +void +plugin_service_unload (GOPluginService *service, ErrorInfo **ret_error) +{ + ErrorInfo *error = NULL; + + g_return_if_fail (IS_GO_PLUGIN_SERVICE (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + if (!service->is_loaded) { + return; + } + go_plugin_unload_service (service->plugin, service, &error); + if (error == NULL) { + service->is_loaded = FALSE; + } else { + *ret_error = error; + } +} + +GOPluginService * +plugin_service_new (GOPlugin *plugin, xmlNode *tree, ErrorInfo **ret_error) +{ + GOPluginService *service = NULL; + char *type_str; + ErrorInfo *service_error = NULL; + GOPluginServiceCreate ctor; + + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); + g_return_val_if_fail (tree != NULL, NULL); + g_return_val_if_fail (strcmp (tree->name, "service") == 0, NULL); + + GO_INIT_RET_ERROR_INFO (ret_error); + type_str = xml_node_get_cstr (tree, "type"); + if (type_str == NULL) { + *ret_error = error_info_new_str (_("No \"type\" attribute on \"service\" element.")); + return NULL; + } + + ctor = g_hash_table_lookup (services, type_str); + if (ctor == NULL) { + *ret_error = error_info_new_printf (_("Unknown service type: %s."), type_str); + g_free (type_str); + return NULL; + } + g_free (type_str); + + service = g_object_new (ctor(), NULL); + service->plugin = plugin; + service->id = xml_node_get_cstr (tree, "id"); + if (service->id == NULL) + service->id = g_strdup ("default"); + + if (GPS_GET_CLASS (service)->read_xml != NULL) { + GPS_GET_CLASS (service)->read_xml (service, tree, &service_error); + if (service_error != NULL) { + *ret_error = error_info_new_str_with_details ( + _("Error reading service information."), service_error); + g_object_unref (service); + service = NULL; + } + } + + return service; +} + +char const * +plugin_service_get_id (GOPluginService *service) +{ + g_return_val_if_fail (IS_GO_PLUGIN_SERVICE (service), NULL); + + return service->id; +} + +char const * +plugin_service_get_description (GOPluginService *service) +{ + g_return_val_if_fail (IS_GO_PLUGIN_SERVICE (service), NULL); + + if (service->saved_description == NULL) { + service->saved_description = GPS_GET_CLASS (service)->get_description (service); + } + + return service->saved_description; +} + +GOPlugin * +plugin_service_get_plugin (GOPluginService *service) +{ + g_return_val_if_fail (IS_GO_PLUGIN_SERVICE (service), NULL); + + return service->plugin; +} + +gpointer +plugin_service_get_cbs (GOPluginService *service) +{ + g_return_val_if_fail (IS_GO_PLUGIN_SERVICE (service), NULL); + g_return_val_if_fail (service->cbs_ptr != NULL, NULL); + + return service->cbs_ptr; +} + +void +plugin_service_activate (GOPluginService *service, ErrorInfo **ret_error) +{ + g_return_if_fail (IS_GO_PLUGIN_SERVICE (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + if (service->is_active) { + return; + } +#ifdef PLUGIN_ALWAYS_LOAD + { + ErrorInfo *load_error = NULL; + + plugin_service_load (service, &load_error); + if (load_error != NULL) { + *ret_error = error_info_new_str_with_details ( + _("We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) " + "but loading failed."), load_error); + return; + } + } +#endif + GPS_GET_CLASS (service)->activate (service, ret_error); +} + +void +plugin_service_deactivate (GOPluginService *service, ErrorInfo **ret_error) +{ + g_return_if_fail (IS_GO_PLUGIN_SERVICE (service)); + + GO_INIT_RET_ERROR_INFO (ret_error); + if (!service->is_active) { + return; + } + GPS_GET_CLASS (service)->deactivate (service, ret_error); + if (*ret_error == NULL) { + ErrorInfo *ignored_error = NULL; + + service->is_active = FALSE; + /* FIXME */ + plugin_service_unload (service, &ignored_error); + error_info_free (ignored_error); + } +} + +/*****************************************************************************/ + +void +plugin_services_init (void) +{ + static struct { + char const *type_str; + GOPluginServiceCreate ctor; + } const builtin_services[] = { + { "general", plugin_service_general_get_type}, + { "file_opener", plugin_service_file_opener_get_type}, + { "file_saver", plugin_service_file_saver_get_type}, + { "plugin_loader", plugin_service_plugin_loader_get_type}, +/* base classes, not really for direct external use, + * put here for expositional purposes + */ +#if 0 + { "gobject_loader", plugin_service_gobject_loader_get_type} + { "simple", plugin_service_simple_get_type} +#endif + }; + unsigned i; + + g_return_if_fail (services == NULL); + + services = g_hash_table_new (g_str_hash, g_str_equal); + for (i = 0; i < G_N_ELEMENTS (builtin_services); i++) + plugin_service_define (builtin_services[i].type_str, + builtin_services[i].ctor); +} + +void +plugin_services_shutdown (void) +{ + g_return_if_fail (services != NULL); + g_hash_table_destroy (services); + services = NULL; +} + +/** + * Allow the definition of new service types + **/ +void +plugin_service_define (char const *type_str, GOPluginServiceCreate ctor) +{ + g_return_if_fail (services != NULL); + + g_return_if_fail (NULL == g_hash_table_lookup (services, type_str)); + + g_hash_table_insert (services, (gpointer)type_str, ctor); +} diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin-service.h b/lib/goffice-0.0.4/goffice/app/go-plugin-service.h new file mode 100644 index 0000000000..618f476bb9 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin-service.h @@ -0,0 +1,112 @@ +#ifndef PLUGIN_SERVICE_H +#define PLUGIN_SERVICE_H + +#include +#include +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GO_PLUGIN_SERVICE_TYPE (plugin_service_get_type ()) +#define GO_PLUGIN_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_TYPE, GOPluginService)) +#define IS_GO_PLUGIN_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_TYPE)) + +GType plugin_service_get_type (void); + +#define GO_PLUGIN_SERVICE_GENERAL_TYPE (plugin_service_general_get_type ()) +#define GO_PLUGIN_SERVICE_GENERAL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_GENERAL_TYPE, PluginServiceGeneral)) +#define IS_GO_PLUGIN_SERVICE_GENERAL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_GENERAL_TYPE)) + +GType plugin_service_general_get_type (void); +typedef struct _PluginServiceGeneral PluginServiceGeneral; +typedef struct { + void (*plugin_func_init) (GOPluginService *service, ErrorInfo **ret_error); + void (*plugin_func_cleanup) (GOPluginService *service, ErrorInfo **ret_error); +} PluginServiceGeneralCallbacks; + +#define GO_PLUGIN_SERVICE_FILE_OPENER_TYPE (plugin_service_file_opener_get_type ()) +#define GO_PLUGIN_SERVICE_FILE_OPENER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_FILE_OPENER_TYPE, PluginServiceFileOpener)) +#define IS_GO_PLUGIN_SERVICE_FILE_OPENER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_FILE_OPENER_TYPE)) + +GType plugin_service_file_opener_get_type (void); +typedef struct _PluginServiceFileOpener PluginServiceFileOpener; +typedef struct { + /* plugin_func_file_probe may be NULL */ + gboolean (*plugin_func_file_probe) ( + GOFileOpener const *fo, GOPluginService *service, + GsfInput *input, FileProbeLevel pl); + void (*plugin_func_file_open) ( + GOFileOpener const *fo, GOPluginService *service, + IOContext *io_context, gpointer fixme_workbook_view, + GsfInput *input); +} PluginServiceFileOpenerCallbacks; + + +#define GO_PLUGIN_SERVICE_FILE_SAVER_TYPE (plugin_service_file_saver_get_type ()) +#define GO_PLUGIN_SERVICE_FILE_SAVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_FILE_SAVER_TYPE, PluginServiceFileSaver)) +#define IS_GO_PLUGIN_SERVICE_FILE_SAVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_FILE_SAVER_TYPE)) + +GType plugin_service_file_saver_get_type (void); +typedef struct _PluginServiceFileSaver PluginServiceFileSaver; +typedef struct { + void (*plugin_func_file_save) ( + GOFileSaver const *fs, GOPluginService *service, + IOContext *io_context, gconstpointer fixme_workbook_view, + GsfOutput *output); +} PluginServiceFileSaverCallbacks; + +#define GO_PLUGIN_SERVICE_PLUGIN_LOADER_TYPE (plugin_service_plugin_loader_get_type ()) +#define GO_PLUGIN_SERVICE_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_PLUGIN_LOADER_TYPE, PluginServicePluginLoader)) +#define IS_GO_PLUGIN_SERVICE_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_PLUGIN_LOADER_TYPE)) + +GType plugin_service_plugin_loader_get_type (void); +typedef struct _PluginServicePluginLoader PluginServicePluginLoader; +typedef struct { + GType (*plugin_func_get_loader_type) ( + GOPluginService *service, ErrorInfo **ret_error); +} PluginServicePluginLoaderCallbacks; + +GType plugin_service_plugin_loader_generate_type (GOPluginService *service, + ErrorInfo **ret_error); + +/****************************************************************************/ + +#define GO_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE (plugin_service_gobject_loader_get_type ()) +#define GO_PLUGIN_SERVICE_GOBJECT_LOADER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE, PluginServiceGObjectLoader)) +#define IS_GO_PLUGIN_SERVICE_GOBJECT_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE)) + +GType plugin_service_gobject_loader_get_type (void); +typedef struct _PluginServiceGObjectLoader PluginServiceGObjectLoader; + +/****************************************************************************/ +#define GO_PLUGIN_SERVICE_SIMPLE_TYPE (plugin_service_simple_get_type ()) +#define GO_PLUGIN_SERVICE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_SERVICE_SIMPLE_TYPE, PluginServiceSimple)) +#define IS_GO_PLUGIN_SERVICE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_SERVICE_SIMPLE_TYPE)) + +GType plugin_service_simple_get_type (void); +typedef struct _PluginServiceSimple PluginServiceSimple; + +/****************************************************************************/ + +GOPluginService *plugin_service_new (GOPlugin *plugin, xmlNode *tree, ErrorInfo **ret_error); +char const *plugin_service_get_id (GOPluginService *service); +char const *plugin_service_get_description (GOPluginService *service); +GOPlugin *plugin_service_get_plugin (GOPluginService *service); +gpointer plugin_service_get_cbs (GOPluginService *service); +void plugin_service_activate (GOPluginService *service, ErrorInfo **ret_error); +void plugin_service_deactivate (GOPluginService *service, ErrorInfo **ret_error); +void plugin_service_load (GOPluginService *service, ErrorInfo **ret_error); +void plugin_service_unload (GOPluginService *service, ErrorInfo **ret_error); + +typedef GType (*GOPluginServiceCreate) (void); +void plugin_services_init (void); +void plugin_services_shutdown (void); +void plugin_service_define (char const *type_str, + GOPluginServiceCreate ctor); + +G_END_DECLS + +#endif /* PLUGIN_SERVICE_H */ diff --git a/lib/goffice/split/plugin.c b/lib/goffice-0.0.4/goffice/app/go-plugin.c similarity index 61% rename from lib/goffice/split/plugin.c rename to lib/goffice-0.0.4/goffice/app/go-plugin.c index 47275568d4..7be3d15f32 100644 --- a/lib/goffice/split/plugin.c +++ b/lib/goffice-0.0.4/goffice/app/go-plugin.c @@ -10,23 +10,26 @@ * Zbigniew Chyla (cyba@gnome.pl) */ -#include -#include -#include "gnumeric.h" -#include "plugin.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "gui-util.h" -#include "gutils.h" -#include "command-context.h" -#include "file.h" -//#include "workbook.h" -//#include "workbook-view.h" -#include "error-info.h" -#include "plugin-loader.h" -#include "plugin-loader-module.h" -#include "plugin-service.h" -#include "xml-io.h" -#include "gnumeric-gconf.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include @@ -37,46 +40,36 @@ #ifdef HAVE_UNISTD_H #include #endif -#include -#include - -#include -#include -#include -#include - -#include - #define PLUGIN_INFO_FILE_NAME "plugin.xml" #define PLUGIN_ID_VALID_CHARS "_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #define BUILTIN_LOADER_MODULE_ID "Gnumeric_Builtin:module" - static GHashTable *plugins_marked_for_deactivation_hash = NULL; static GSList *available_plugins = NULL; +static GSList *go_plugin_dirs = NULL; static GHashTable *available_plugins_id_hash = NULL; static GHashTable *loader_services = NULL; +static GType go_default_loader_type; - -static void plugin_get_loader_if_needed (GnmPlugin *pinfo, ErrorInfo **ret_error); -static void plugin_info_read (GnmPlugin *pinfo, const gchar *dir_name, ErrorInfo **ret_error); -static void gnm_plugin_load_base (GnmPlugin *plugin, ErrorInfo **ret_error); +static void plugin_get_loader_if_needed (GOPlugin *plugin, ErrorInfo **ret_error); +static void go_plugin_read (GOPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_error); +static void go_plugin_load_base (GOPlugin *plugin, ErrorInfo **ret_error); /* - * GnmPlugin + * GOPlugin */ typedef struct { gchar *plugin_id; - GnmPlugin *plugin; /* don't use directly */ + GOPlugin *plugin; /* don't use directly */ gboolean force_load; } PluginDependency; -struct _GnmPlugin { - GTypeModule parent_instance; +struct _GOPlugin { + GObject base; gboolean has_full_info; gchar *dir_name; @@ -86,24 +79,26 @@ struct _GnmPlugin { gchar *description; gboolean require_explicit_enabling; - gboolean is_active; - gint use_refcount; + gboolean is_active; + gint use_refcount; + GTypeModule *type_module; + GSList *dependencies; gchar *loader_id; GHashTable *loader_attrs; - GnmPluginLoader *loader; + GOPluginLoader *loader; GSList *services; char *saved_textdomain; }; -typedef struct _GnmPluginClass GnmPluginClass; -struct _GnmPluginClass { +typedef struct _GOPluginClass GOPluginClass; +struct _GOPluginClass { GTypeModuleClass parent_class; /* signals */ - void (*state_changed) (GnmPluginClass *gpc); - void (*can_deactivate_changed) (GnmPluginClass *gpc); + void (*state_changed) (GOPluginClass *gpc); + void (*can_deactivate_changed) (GOPluginClass *gpc); }; enum { @@ -112,15 +107,28 @@ enum { LAST_SIGNAL }; -static guint gnm_plugin_signals[LAST_SIGNAL]; +static guint go_plugin_signals[LAST_SIGNAL]; static GObjectClass *parent_class = NULL; static void plugin_dependency_free (gpointer data); static void -gnm_plugin_init (GObject *obj) +go_plugin_message (gint level, const gchar *format, ...) { - GnmPlugin *plugin = GNM_PLUGIN (obj); +#ifdef PLUGIN_DEBUG + va_list args; + + if (level <= PLUGIN_DEBUG) { + va_start (args, format); + vprintf (format, args); + va_end (args); + } +#endif +} +static void +go_plugin_init (GObject *obj) +{ + GOPlugin *plugin = GO_PLUGIN (obj); plugin->id = NULL; plugin->dir_name = NULL; @@ -130,9 +138,14 @@ gnm_plugin_init (GObject *obj) } static void -gnm_plugin_finalize (GObject *obj) +go_plugin_finalize (GObject *obj) { - GnmPlugin *plugin = GNM_PLUGIN (obj); + GOPlugin *plugin = GO_PLUGIN (obj); + + if (plugin->type_module != NULL) { + g_type_module_unuse (plugin->type_module); + plugin->type_module = NULL; + } g_free (plugin->id); plugin->id = NULL; @@ -142,7 +155,7 @@ gnm_plugin_finalize (GObject *obj) plugin->has_full_info = FALSE; g_free (plugin->name); g_free (plugin->description); - gnm_slist_free_custom (plugin->dependencies, plugin_dependency_free); + go_slist_free_custom (plugin->dependencies, plugin_dependency_free); g_free (plugin->loader_id); if (plugin->loader_attrs != NULL) { g_hash_table_destroy (plugin->loader_attrs); @@ -150,7 +163,7 @@ gnm_plugin_finalize (GObject *obj) if (plugin->loader != NULL) { g_object_unref (plugin->loader); } - gnm_slist_free_custom (plugin->services, g_object_unref); + go_slist_free_custom (plugin->services, g_object_unref); } g_free (plugin->saved_textdomain); plugin->saved_textdomain = NULL; @@ -158,76 +171,44 @@ gnm_plugin_finalize (GObject *obj) parent_class->finalize (obj); } -static gboolean -gnm_plugin_type_module_load (GTypeModule *module) -{ - GnmPlugin *plugin = GNM_PLUGIN (module); - ErrorInfo *ignored_error; - - g_return_val_if_fail (plugin->is_active, FALSE); - - gnm_plugin_load_base (plugin, &ignored_error); - if (ignored_error != NULL) { - error_info_print (ignored_error); - error_info_free (ignored_error); - return FALSE; - } - gnm_plugin_use_ref (plugin); - return TRUE; -} static void -gnm_plugin_type_module_unload (GTypeModule *module) +go_plugin_class_init (GObjectClass *gobject_class) { - GnmPlugin *plugin = GNM_PLUGIN (module); - - g_return_if_fail (plugin->is_active); - - gnm_plugin_use_unref (plugin); -} - -static void -gnm_plugin_class_init (GObjectClass *gobject_class) -{ - GTypeModuleClass *type_module_class = G_TYPE_MODULE_CLASS (gobject_class); - parent_class = g_type_class_peek_parent (gobject_class); - gobject_class->finalize = gnm_plugin_finalize; + gobject_class->finalize = go_plugin_finalize; - type_module_class->load = gnm_plugin_type_module_load; - type_module_class->unload = gnm_plugin_type_module_unload; - - gnm_plugin_signals[STATE_CHANGED] = g_signal_new ( + go_plugin_signals[STATE_CHANGED] = g_signal_new ( "state_changed", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GnmPluginClass, state_changed), + G_STRUCT_OFFSET (GOPluginClass, state_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - gnm_plugin_signals[CAN_DEACTIVATE_CHANGED] = g_signal_new ( + go_plugin_signals[CAN_DEACTIVATE_CHANGED] = g_signal_new ( "can_deactivate_changed", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GnmPluginClass, can_deactivate_changed), + G_STRUCT_OFFSET (GOPluginClass, can_deactivate_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } -GSF_CLASS (GnmPlugin, gnm_plugin, gnm_plugin_class_init, gnm_plugin_init, - G_TYPE_TYPE_MODULE) +GSF_CLASS (GOPlugin, go_plugin, go_plugin_class_init, go_plugin_init, + G_TYPE_OBJECT) -static GnmPlugin * -plugin_info_new_from_xml (const gchar *dir_name, ErrorInfo **ret_error) +static GOPlugin * +go_plugin_new_from_xml (const gchar *dir_name, ErrorInfo **ret_error) { - GnmPlugin *plugin; + GOPlugin *plugin; ErrorInfo *error; - GNM_INIT_RET_ERROR_INFO (ret_error); - plugin = g_object_new (GNM_PLUGIN_TYPE, NULL); - plugin_info_read (plugin, dir_name, &error); + GO_INIT_RET_ERROR_INFO (ret_error); + plugin = g_object_new (GO_PLUGIN_TYPE, NULL); + go_plugin_read (plugin, dir_name, &error); if (error == NULL) { plugin->has_full_info = TRUE; } else { @@ -239,17 +220,13 @@ plugin_info_new_from_xml (const gchar *dir_name, ErrorInfo **ret_error) return plugin; } -static GnmPlugin * -plugin_info_new_with_id_and_dir_name_only (const gchar *id, const gchar *dir_name) +static GOPlugin * +go_plugin_new_with_id_and_dir_name_only (const gchar *id, const gchar *dir_name) { - GnmPlugin *plugin; - - plugin = g_object_new (GNM_PLUGIN_TYPE, NULL); - g_type_module_set_name (G_TYPE_MODULE (plugin), id); + GOPlugin *plugin = g_object_new (GO_PLUGIN_TYPE, NULL); plugin->id = g_strdup (id); plugin->dir_name = g_strdup (dir_name); plugin->has_full_info = FALSE; - return plugin; } @@ -326,32 +303,32 @@ plugin_file_state_free (gpointer data) /* --- */ static gboolean -plugin_info_read_full_info_if_needed_error_info (GnmPlugin *pinfo, ErrorInfo **ret_error) +go_plugin_read_full_info_if_needed_error_info (GOPlugin *plugin, ErrorInfo **ret_error) { ErrorInfo *read_error; gchar *old_id, *old_dir_name; - GNM_INIT_RET_ERROR_INFO (ret_error); - if (pinfo->has_full_info) { + GO_INIT_RET_ERROR_INFO (ret_error); + if (plugin->has_full_info) { return TRUE; } - old_id = pinfo->id; - old_dir_name = pinfo->dir_name; - plugin_info_read (pinfo, old_dir_name, &read_error); - if (read_error == NULL && strcmp (pinfo->id, old_id) == 0) { + old_id = plugin->id; + old_dir_name = plugin->dir_name; + go_plugin_read (plugin, old_dir_name, &read_error); + if (read_error == NULL && strcmp (plugin->id, old_id) == 0) { /* id and dir_name pointers are guaranteed to be valid during plugin's lifetime */ - g_free (pinfo->id); - g_free (pinfo->dir_name); - pinfo->id = old_id; - pinfo->dir_name = old_dir_name; - pinfo->has_full_info = TRUE; + g_free (plugin->id); + g_free (plugin->dir_name); + plugin->id = old_id; + plugin->dir_name = old_dir_name; + plugin->has_full_info = TRUE; } else { - plugin_message (1, "Can't read plugin.xml file for %s.\n", old_id); + go_plugin_message (1, "Can't read plugin.xml file for %s.\n", old_id); if (read_error == NULL) { read_error = error_info_new_printf ( _("File contains plugin info with invalid id (%s), expected %s."), - pinfo->id, old_id); + plugin->id, old_id); } *ret_error = error_info_new_str_with_details ( _("Couldn't read plugin info from file."), @@ -364,14 +341,14 @@ plugin_info_read_full_info_if_needed_error_info (GnmPlugin *pinfo, ErrorInfo **r } static gboolean -plugin_info_read_full_info_if_needed (GnmPlugin *pinfo) +go_plugin_read_full_info_if_needed (GOPlugin *plugin) { ErrorInfo *error; - if (plugin_info_read_full_info_if_needed_error_info (pinfo, &error)) { + if (go_plugin_read_full_info_if_needed_error_info (plugin, &error)) { return TRUE; } else { - g_warning ("plugin_info_read_full_info_if_needed: couldn't read plugin info from file."); + g_warning ("go_plugin_read_full_info_if_needed: couldn't read plugin info from file."); error_info_print (error); error_info_free (error); return FALSE; @@ -383,16 +360,16 @@ plugin_info_read_full_info_if_needed (GnmPlugin *pinfo) */ /** - * gnm_plugin_get_textdomain: + * go_plugin_get_textdomain: * @plugin : The plugin * * Returns plugin's textdomain for use with textdomain(3) and d*gettext(3) * functions. */ const gchar * -gnm_plugin_get_textdomain (GnmPlugin *plugin) +go_plugin_get_textdomain (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (plugin), NULL); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); if (plugin->saved_textdomain == NULL) { plugin->saved_textdomain = g_strconcat ("gnumeric__", plugin->id, NULL); @@ -402,15 +379,15 @@ gnm_plugin_get_textdomain (GnmPlugin *plugin) } /** - * gnm_plugin_is_active: - * @pinfo : The plugin + * go_plugin_is_active: + * @plugin : The plugin * * Returns : TRUE if @plugin is active and FALSE otherwise. */ gboolean -gnm_plugin_is_active (GnmPlugin *plugin) +go_plugin_is_active (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (plugin), FALSE); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), FALSE); if (!plugin->has_full_info) { return FALSE; @@ -418,23 +395,59 @@ gnm_plugin_is_active (GnmPlugin *plugin) return plugin->is_active; } +/**********************************************************/ +typedef GTypeModule GOPluginTypeModule; +typedef GTypeModuleClass GOPluginTypeModuleClass; +static gboolean go_plugin_type_module_load (GTypeModule *module) { return TRUE; } +static void go_plugin_type_module_unload (GTypeModule *module) { } +static void +go_plugin_type_module_class_init (GTypeModuleClass *gtm_class) +{ + gtm_class->load = go_plugin_type_module_load; + gtm_class->unload = go_plugin_type_module_unload; +} +static GSF_CLASS (GOPluginTypeModule, go_plugin_type_module, + go_plugin_type_module_class_init, NULL, + G_TYPE_TYPE_MODULE) + +/**********************************************************/ + /** - * gnm_plugin_get_dir_name: + * go_plugin_get_type_module : + * @plugin : #GOPlugin + * + * Return the GTypeModule associated with the plugin creating it if necessary. + **/ +GTypeModule * +go_plugin_get_type_module (GOPlugin *plugin) +{ + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); + g_return_val_if_fail (plugin->is_active, NULL); + + if (NULL == plugin->type_module) { + plugin->type_module = g_object_new (go_plugin_type_module_get_type (), NULL); + g_type_module_use (plugin->type_module); + } + return plugin->type_module; +} + +/** + * go_plugin_get_dir_name: * @plugin : The plugin * * Returns the name of the directory in which @plugin is located. * Returned string is != NULL and stays valid during @plugin's lifetime. */ const gchar * -gnm_plugin_get_dir_name (GnmPlugin *pinfo) +go_plugin_get_dir_name (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (pinfo), NULL); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); - return pinfo->dir_name; + return plugin->dir_name; } /** - * gnm_plugin_get_id: + * go_plugin_get_id: * @plugin : The plugin * * Returns the ID of @plugin (unique string used for idenfification of @@ -442,15 +455,15 @@ gnm_plugin_get_dir_name (GnmPlugin *pinfo) * Returned string is != NULL and stays valid during @plugin's lifetime. */ const gchar * -gnm_plugin_get_id (GnmPlugin *pinfo) +go_plugin_get_id (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (pinfo), NULL); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); - return pinfo->id; + return plugin->id; } /** - * gnm_plugin_get_name: + * go_plugin_get_name: * @plugin : The plugin * * Returns textual name of @plugin. If the real name is not available @@ -458,18 +471,18 @@ gnm_plugin_get_id (GnmPlugin *pinfo) * Returned string is != NULL and stays valid during @plugin's lifetime. */ const gchar * -gnm_plugin_get_name (GnmPlugin *pinfo) +go_plugin_get_name (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (pinfo), NULL); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); - if (!plugin_info_read_full_info_if_needed (pinfo)) { + if (!go_plugin_read_full_info_if_needed (plugin)) { return _("Unknown name"); } - return pinfo->name; + return plugin->name; } /** - * gnm_plugin_get_description: + * go_plugin_get_description: * @plugin : The plugin * * Returns textual description of @plugin or NULL if description is not @@ -477,32 +490,29 @@ gnm_plugin_get_name (GnmPlugin *pinfo) * Returned string stays valid during @plugin's lifetime. */ const gchar * -gnm_plugin_get_description (GnmPlugin *pinfo) +go_plugin_get_description (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (pinfo), NULL); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); - if (!plugin_info_read_full_info_if_needed (pinfo)) { + if (!go_plugin_read_full_info_if_needed (plugin)) { return NULL; } - return pinfo->description; + return plugin->description; } /** - * gnm_plugin_is_loaded: - * @pinfo : The plugin + * go_plugin_is_loaded: + * @plugin : The plugin * * Returns : TRUE if @plugin is loaded and FALSE otherwise. */ gboolean -gnm_plugin_is_loaded (GnmPlugin *pinfo) +go_plugin_is_loaded (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (pinfo), FALSE); - - if (!pinfo->has_full_info) { - return FALSE; - } - return pinfo->loader != NULL && - gnm_plugin_loader_is_base_loaded (pinfo->loader); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), FALSE); + return plugin->has_full_info && + plugin->loader != NULL && + go_plugin_loader_is_base_loaded (plugin->loader); } /* - */ @@ -516,10 +526,10 @@ gnm_plugin_is_loaded (GnmPlugin *pinfo) * consists of loader's plugin id and service id concatenated using colon). * All requests to create new loader object of this type will be passed to * @service. - * This function is intended for use by GnmPluginService objects. + * This function is intended for use by GOPluginService objects. */ void -plugins_register_loader (const gchar *loader_id, GnmPluginService *service) +go_plugins_register_loader (const gchar *loader_id, GOPluginService *service) { g_return_if_fail (loader_id != NULL); g_return_if_fail (service != NULL); @@ -534,10 +544,10 @@ plugins_register_loader (const gchar *loader_id, GnmPluginService *service) * Unregisters a type of plugin loader identified by @loader_id. After * callingthis function Gnumeric will be unable to load plugins supported * by the specified loader. - * This function is intended for use by GnmPluginService objects. + * This function is intended for use by GOPluginService objects. */ void -plugins_unregister_loader (const gchar *loader_id) +go_plugins_unregister_loader (const gchar *loader_id) { g_return_if_fail (loader_id != NULL); @@ -547,16 +557,16 @@ plugins_unregister_loader (const gchar *loader_id) static GType get_loader_type_by_id (const gchar *id_str, ErrorInfo **ret_error) { - GnmPluginService *loader_service; + GOPluginService *loader_service; ErrorInfo *error; GType loader_type; g_return_val_if_fail (id_str != NULL, G_TYPE_NONE); - GNM_INIT_RET_ERROR_INFO (ret_error); - if (strcmp (id_str, BUILTIN_LOADER_MODULE_ID) == 0) { - return TYPE_GNM_PLUGIN_LOADER_MODULE; - } + GO_INIT_RET_ERROR_INFO (ret_error); + if (strcmp (id_str, BUILTIN_LOADER_MODULE_ID) == 0) + return go_default_loader_type; + loader_service = g_hash_table_lookup (loader_services, id_str); if (loader_service == NULL) { *ret_error = error_info_new_printf ( @@ -577,18 +587,18 @@ get_loader_type_by_id (const gchar *id_str, ErrorInfo **ret_error) return loader_type; } -static GnmPlugin * +static GOPlugin * plugin_dependency_get_plugin (PluginDependency *dep) { g_return_val_if_fail (dep != NULL, NULL); if (dep->plugin == NULL) - dep->plugin = plugins_get_plugin_by_id (dep->plugin_id); + dep->plugin = go_plugins_get_plugin_by_id (dep->plugin_id); return dep->plugin; } static GSList * -plugin_info_read_dependency_list (xmlNode *tree) +go_plugin_read_dependency_list (xmlNode *tree) { GSList *dependency_list = NULL; xmlNode *node; @@ -609,7 +619,7 @@ plugin_info_read_dependency_list (xmlNode *tree) dep->plugin = NULL; if (!xml_node_get_bool (node, "force_load", &(dep->force_load))) dep->force_load = FALSE; - GNM_SLIST_PREPEND (dependency_list, dep); + GO_SLIST_PREPEND (dependency_list, dep); } } } @@ -618,7 +628,7 @@ plugin_info_read_dependency_list (xmlNode *tree) } static GSList * -plugin_info_read_service_list (GnmPlugin *plugin, xmlNode *tree, ErrorInfo **ret_error) +go_plugin_read_service_list (GOPlugin *plugin, xmlNode *tree, ErrorInfo **ret_error) { GSList *service_list = NULL; GSList *error_list = NULL; @@ -633,14 +643,14 @@ plugin_info_read_service_list (GnmPlugin *plugin, xmlNode *tree, ErrorInfo **ret node = node->xmlChildrenNode; for (i = 0; node != NULL; i++, node = node->next) { if (strcmp (node->name, "service") == 0) { - GnmPluginService *service; + GOPluginService *service; ErrorInfo *service_error; service = plugin_service_new (plugin, node, &service_error); if (service != NULL) { g_assert (service_error == NULL); - GNM_SLIST_PREPEND (service_list, service); + GO_SLIST_PREPEND (service_list, service); } else { ErrorInfo *error; @@ -648,14 +658,14 @@ plugin_info_read_service_list (GnmPlugin *plugin, xmlNode *tree, ErrorInfo **ret _("Error while reading service #%d info."), i); error_info_add_details (error, service_error); - GNM_SLIST_PREPEND (error_list, error); + GO_SLIST_PREPEND (error_list, error); } } } if (error_list != NULL) { - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); *ret_error = error_info_new_from_error_list (error_list); - gnm_slist_free_custom (service_list, g_object_unref); + go_slist_free_custom (service_list, g_object_unref); return NULL; } else { return g_slist_reverse (service_list); @@ -663,7 +673,7 @@ plugin_info_read_service_list (GnmPlugin *plugin, xmlNode *tree, ErrorInfo **ret } static GHashTable * -plugin_info_read_loader_attrs (xmlNode *tree) +go_plugin_read_loader_attrs (xmlNode *tree) { xmlNode *node; GHashTable *hash; @@ -704,7 +714,7 @@ plugin_dependency_free (gpointer data) } static void -plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_error) +go_plugin_read (GOPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_error) { gchar *file_name; xmlDocPtr doc; @@ -715,12 +725,12 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro GHashTable *loader_attrs; gboolean require_explicit_enabling = FALSE; - g_return_if_fail (IS_GNM_PLUGIN (plugin)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); g_return_if_fail (dir_name != NULL); - GNM_INIT_RET_ERROR_INFO (ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); file_name = g_build_filename (dir_name, PLUGIN_INFO_FILE_NAME, NULL); - doc = xmlParseFile (file_name); + doc = go_xml_parse_file (file_name); if (doc == NULL || doc->xmlRootNode == NULL || strcmp (doc->xmlRootNode->name, "plugin") != 0) { if (access (file_name, R_OK) != 0) { *ret_error = error_info_new_printf ( @@ -765,7 +775,7 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro } dependencies_node = e_xml_get_child_by_name (tree, (xmlChar *)"dependencies"); if (dependencies_node != NULL) { - dependency_list = plugin_info_read_dependency_list (dependencies_node); + dependency_list = go_plugin_read_dependency_list (dependencies_node); } else { dependency_list = NULL; } @@ -775,7 +785,7 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro loader_id = xmlGetProp (loader_node, (xmlChar *)"type"); if (loader_id != NULL && (p = strchr (loader_id, ':')) != NULL) { - loader_attrs = plugin_info_read_loader_attrs (loader_node); + loader_attrs = go_plugin_read_loader_attrs (loader_node); if (strcmp (loader_id, BUILTIN_LOADER_MODULE_ID) != 0) { PluginDependency *dep; @@ -784,7 +794,7 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro dep->plugin_id = g_strndup (loader_id, p - loader_id); dep->plugin = NULL; dep->force_load = FALSE; - GNM_SLIST_PREPEND (dependency_list, dep); + GO_SLIST_PREPEND (dependency_list, dep); } } else { loader_id = NULL; @@ -797,8 +807,6 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro if (id != NULL && name != NULL && loader_id != NULL && id[strspn (id, PLUGIN_ID_VALID_CHARS)] == '\0') { ErrorInfo *services_error = NULL; - - g_type_module_set_name (G_TYPE_MODULE (plugin), id); plugin->dir_name = g_strdup (dir_name); plugin->id = id; plugin->name = name; @@ -806,46 +814,43 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro plugin->require_explicit_enabling = require_explicit_enabling; plugin->is_active = FALSE; plugin->use_refcount = 0; + plugin->type_module = NULL; plugin->dependencies = dependency_list; plugin->loader_id = loader_id; plugin->loader_attrs = loader_attrs; plugin->loader = NULL; - plugin->services = plugin_info_read_service_list (plugin, tree, &services_error); + plugin->services = go_plugin_read_service_list (plugin, tree, &services_error); if (services_error != NULL) { *ret_error = error_info_new_printf ( _("Errors while reading services for plugin with id=\"%s\"."), id); error_info_add_details (*ret_error, services_error); - } else if (plugin->services == NULL) - *ret_error = error_info_new_printf ( - _("No services defined for plugin with id=\"%s\"."), - id); - else - plugin_message (4, "Read plugin.xml file for %s.\n", plugin->id); + } else + go_plugin_message (4, "Read plugin.xml file for %s.\n", plugin->id); } else { if (id != NULL) { GSList *error_list = NULL; if (id[strspn (id, PLUGIN_ID_VALID_CHARS)] != '\0') { - GNM_SLIST_PREPEND (error_list, error_info_new_printf ( + GO_SLIST_PREPEND (error_list, error_info_new_printf ( _("Plugin id contains invalid characters (%s)."), id)); } if (name == NULL) { - GNM_SLIST_PREPEND (error_list, error_info_new_str ( + GO_SLIST_PREPEND (error_list, error_info_new_str ( _("Unknown plugin name."))); } if (loader_id == NULL) { - GNM_SLIST_PREPEND (error_list, error_info_new_printf ( + GO_SLIST_PREPEND (error_list, error_info_new_printf ( _("No loader defined or loader id invalid for plugin with id=\"%s\"."), id)); } g_assert (error_list != NULL); - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); *ret_error = error_info_new_from_error_list (error_list); } else *ret_error = error_info_new_str (_("Plugin has no id.")); - gnm_slist_free_custom (dependency_list, plugin_dependency_free); + go_slist_free_custom (dependency_list, plugin_dependency_free); g_free (plugin->loader_id); if (plugin->loader_attrs != NULL) g_hash_table_destroy (plugin->loader_attrs); @@ -858,36 +863,34 @@ plugin_info_read (GnmPlugin *plugin, const gchar *dir_name, ErrorInfo **ret_erro } static void -plugin_get_loader_if_needed (GnmPlugin *pinfo, ErrorInfo **ret_error) +plugin_get_loader_if_needed (GOPlugin *plugin, ErrorInfo **ret_error) { GType loader_type; ErrorInfo *error = NULL; - g_return_if_fail (IS_GNM_PLUGIN (pinfo)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); - GNM_INIT_RET_ERROR_INFO (ret_error); - if (!plugin_info_read_full_info_if_needed_error_info (pinfo, ret_error)) { + GO_INIT_RET_ERROR_INFO (ret_error); + if (!go_plugin_read_full_info_if_needed_error_info (plugin, ret_error)) { return; } - if (pinfo->loader != NULL) { + if (plugin->loader != NULL) { return; } - loader_type = get_loader_type_by_id (pinfo->loader_id, &error); + loader_type = get_loader_type_by_id (plugin->loader_id, &error); if (error == NULL) { - GnmPluginLoader *loader; ErrorInfo *error; - - loader = GNM_PLUGIN_LOADER (g_object_new (loader_type, NULL)); - gnm_plugin_loader_set_attributes (loader, pinfo->loader_attrs, &error); + GOPluginLoader *loader = g_object_new (loader_type, NULL); + go_plugin_loader_set_attributes (loader, plugin->loader_attrs, &error); if (error == NULL) { - pinfo->loader = loader; - gnm_plugin_loader_set_plugin (loader, pinfo); + plugin->loader = loader; + go_plugin_loader_set_plugin (loader, plugin); } else { g_object_unref (loader); loader = NULL; *ret_error = error_info_new_printf ( _("Error initializing plugin loader (\"%s\")."), - pinfo->loader_id); + plugin->loader_id); error_info_add_details (*ret_error, error); } } else { @@ -896,7 +899,7 @@ plugin_get_loader_if_needed (GnmPlugin *pinfo, ErrorInfo **ret_error) } /** - * gnm_plugin_activate: + * go_plugin_activate: * @plugin : The plugin * @ret_error : Pointer used to report errors * @@ -905,52 +908,52 @@ plugin_get_loader_if_needed (GnmPlugin *pinfo, ErrorInfo **ret_error) * information will be returned using @ret_error. */ void -gnm_plugin_activate (GnmPlugin *pinfo, ErrorInfo **ret_error) +go_plugin_activate (GOPlugin *plugin, ErrorInfo **ret_error) { GSList *error_list = NULL; GSList *l; gint i; static GSList *activate_stack = NULL; - g_return_if_fail (IS_GNM_PLUGIN (pinfo)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); - GNM_INIT_RET_ERROR_INFO (ret_error); - if (g_slist_find (activate_stack, pinfo) != NULL) { + GO_INIT_RET_ERROR_INFO (ret_error); + if (g_slist_find (activate_stack, plugin) != NULL) { *ret_error = error_info_new_str ( _("Detected cyclic plugin dependencies.")); return; } - if (!plugin_info_read_full_info_if_needed_error_info (pinfo, ret_error)) { + if (!go_plugin_read_full_info_if_needed_error_info (plugin, ret_error)) { return; } - if (pinfo->is_active) { + if (plugin->is_active) { return; } /* Activate plugin dependencies */ - GNM_SLIST_PREPEND (activate_stack, pinfo); - GNM_SLIST_FOREACH (pinfo->dependencies, PluginDependency, dep, - GnmPlugin *dep_plugin; + GO_SLIST_PREPEND (activate_stack, plugin); + GO_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, + GOPlugin *dep_plugin; dep_plugin = plugin_dependency_get_plugin (dep); if (dep_plugin != NULL) { ErrorInfo *dep_error; - gnm_plugin_activate (dep_plugin, &dep_error); + go_plugin_activate (dep_plugin, &dep_error); if (dep_error != NULL) { ErrorInfo *new_error; new_error = error_info_new_printf ( _("Couldn't activate plugin with id=\"%s\"."), dep->plugin_id); error_info_add_details (new_error, dep_error); - GNM_SLIST_PREPEND (error_list, new_error); + GO_SLIST_PREPEND (error_list, new_error); } } else { - GNM_SLIST_PREPEND (error_list, error_info_new_printf ( + GO_SLIST_PREPEND (error_list, error_info_new_printf ( _("Couldn't find plugin with id=\"%s\"."), dep->plugin_id)); } ); - g_assert (activate_stack != NULL && activate_stack->data == pinfo); + g_assert (activate_stack != NULL && activate_stack->data == plugin); activate_stack = g_slist_delete_link (activate_stack, activate_stack); if (error_list != NULL) { *ret_error = error_info_new_str ( @@ -959,8 +962,8 @@ gnm_plugin_activate (GnmPlugin *pinfo, ErrorInfo **ret_error) return; } - for (l = pinfo->services, i = 0; l != NULL; l = l->next, i++) { - GnmPluginService *service = l->data; + for (l = plugin->services, i = 0; l != NULL; l = l->next, i++) { + GOPluginService *service = l->data; ErrorInfo *service_error; plugin_service_activate (service, &service_error); @@ -970,7 +973,7 @@ gnm_plugin_activate (GnmPlugin *pinfo, ErrorInfo **ret_error) error = error_info_new_printf ( _("Error while activating plugin service #%d."), i); error_info_add_details (error, service_error); - GNM_SLIST_PREPEND (error_list, error); + GO_SLIST_PREPEND (error_list, error); } } if (error_list != NULL) { @@ -978,15 +981,15 @@ gnm_plugin_activate (GnmPlugin *pinfo, ErrorInfo **ret_error) /* FIXME - deactivate activated services */ return; } - GNM_SLIST_FOREACH (pinfo->dependencies, PluginDependency, dep, - gnm_plugin_use_ref (plugin_dependency_get_plugin (dep)); + GO_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, + go_plugin_use_ref (plugin_dependency_get_plugin (dep)); ); - pinfo->is_active = TRUE; - g_signal_emit (G_OBJECT (pinfo), gnm_plugin_signals[STATE_CHANGED], 0); + plugin->is_active = TRUE; + g_signal_emit (G_OBJECT (plugin), go_plugin_signals[STATE_CHANGED], 0); } /** - * gnm_plugin_deactivate: + * go_plugin_deactivate: * @plugin : The plugin * @ret_error : Pointer used to report errors * @@ -996,24 +999,24 @@ gnm_plugin_activate (GnmPlugin *pinfo, ErrorInfo **ret_error) * information will be returned using @ret_error. */ void -gnm_plugin_deactivate (GnmPlugin *pinfo, ErrorInfo **ret_error) +go_plugin_deactivate (GOPlugin *plugin, ErrorInfo **ret_error) { GSList *error_list = NULL; GSList *l; gint i; - g_return_if_fail (IS_GNM_PLUGIN (pinfo)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); - GNM_INIT_RET_ERROR_INFO (ret_error); - if (!pinfo->has_full_info || !pinfo->is_active) { + GO_INIT_RET_ERROR_INFO (ret_error); + if (!plugin->has_full_info || !plugin->is_active) { return; } - if (pinfo->use_refcount > 0) { + if (plugin->use_refcount > 0) { *ret_error = error_info_new_str ("Plugin is still in use."); return; } - for (l = pinfo->services, i = 0; l != NULL; l = l->next, i++) { - GnmPluginService *service = l->data; + for (l = plugin->services, i = 0; l != NULL; l = l->next, i++) { + GOPluginService *service = l->data; ErrorInfo *service_error; plugin_service_deactivate (service, &service_error); @@ -1023,64 +1026,64 @@ gnm_plugin_deactivate (GnmPlugin *pinfo, ErrorInfo **ret_error) error = error_info_new_printf ( _("Error while deactivating plugin service #%d."), i); error_info_add_details (error, service_error); - GNM_SLIST_PREPEND (error_list, error); + GO_SLIST_PREPEND (error_list, error); } } if (error_list != NULL) { *ret_error = error_info_new_from_error_list (error_list); /* FIXME - some services are still active (or broken) */ } else { - pinfo->is_active = FALSE; - GNM_SLIST_FOREACH (pinfo->dependencies, PluginDependency, dep, - gnm_plugin_use_unref (plugin_dependency_get_plugin (dep)); + plugin->is_active = FALSE; + GO_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, + go_plugin_use_unref (plugin_dependency_get_plugin (dep)); ); - if (pinfo->loader != NULL) { - g_object_unref (pinfo->loader); - pinfo->loader = NULL; + if (plugin->loader != NULL) { + g_object_unref (plugin->loader); + plugin->loader = NULL; } } - g_signal_emit (G_OBJECT (pinfo), gnm_plugin_signals[STATE_CHANGED], 0); + g_signal_emit (G_OBJECT (plugin), go_plugin_signals[STATE_CHANGED], 0); } /** - * gnm_plugin_can_deactivate: - * @pinfo : The plugin + * go_plugin_can_deactivate: + * @plugin : The plugin * - * Tells if the plugin can be deactivated using gnm_plugin_deactivate. + * Tells if the plugin can be deactivated using go_plugin_deactivate. * * Returns : TRUE if @plugin can be deactivated and FALSE otherwise. */ gboolean -gnm_plugin_can_deactivate (GnmPlugin *pinfo) +go_plugin_can_deactivate (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (pinfo), FALSE); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), FALSE); - if (!pinfo->is_active) { + if (!plugin->is_active) { return FALSE; } - if (!plugin_info_read_full_info_if_needed (pinfo)) { + if (!go_plugin_read_full_info_if_needed (plugin)) { return FALSE; } - return pinfo->use_refcount == 0; + return plugin->use_refcount == 0; } static void -gnm_plugin_load_base (GnmPlugin *plugin, ErrorInfo **ret_error) +go_plugin_load_base (GOPlugin *plugin, ErrorInfo **ret_error) { ErrorInfo *error; GSList *error_list = NULL; static GSList *load_stack = NULL; - GNM_INIT_RET_ERROR_INFO (ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); if (g_slist_find (load_stack, plugin) != NULL) { *ret_error = error_info_new_str ( _("Detected cyclic plugin dependencies.")); return; } - if (gnm_plugin_is_loaded (plugin)) { + if (go_plugin_is_loaded (plugin)) { return; } - if (!plugin_info_read_full_info_if_needed_error_info (plugin, ret_error)) { + if (!go_plugin_read_full_info_if_needed_error_info (plugin, ret_error)) { return; } plugin_get_loader_if_needed (plugin, &error); @@ -1092,9 +1095,9 @@ gnm_plugin_load_base (GnmPlugin *plugin, ErrorInfo **ret_error) } /* Load plugin dependencies */ - GNM_SLIST_PREPEND (load_stack, plugin); - GNM_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, - GnmPlugin *dep_plugin; + GO_SLIST_PREPEND (load_stack, plugin); + GO_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, + GOPlugin *dep_plugin; ErrorInfo *dep_error; if (!dep->force_load) { @@ -1104,7 +1107,7 @@ gnm_plugin_load_base (GnmPlugin *plugin, ErrorInfo **ret_error) if (dep_plugin != NULL) { plugin_get_loader_if_needed (dep_plugin, &dep_error); if (dep_error == NULL) { - gnm_plugin_load_base (dep_plugin, &dep_error); + go_plugin_load_base (dep_plugin, &dep_error); } else { dep_error = error_info_new_str_with_details ( _("Cannot load plugin loader."), @@ -1116,10 +1119,10 @@ gnm_plugin_load_base (GnmPlugin *plugin, ErrorInfo **ret_error) new_error = error_info_new_printf ( _("Couldn't load plugin with id=\"%s\"."), dep->plugin_id); error_info_add_details (new_error, dep_error); - GNM_SLIST_PREPEND (error_list, new_error); + GO_SLIST_PREPEND (error_list, new_error); } } else { - GNM_SLIST_PREPEND (error_list, error_info_new_printf ( + GO_SLIST_PREPEND (error_list, error_info_new_printf ( _("Couldn't find plugin with id=\"%s\"."), dep->plugin_id)); } ); @@ -1132,125 +1135,125 @@ gnm_plugin_load_base (GnmPlugin *plugin, ErrorInfo **ret_error) return; } - gnm_plugin_loader_load_base (plugin->loader, &error); + go_plugin_loader_load_base (plugin->loader, &error); if (error != NULL) { *ret_error = error; return; } - g_signal_emit (G_OBJECT (plugin), gnm_plugin_signals[STATE_CHANGED], 0); + g_signal_emit (G_OBJECT (plugin), go_plugin_signals[STATE_CHANGED], 0); } /** - * gnm_plugin_load_service: - * @pinfo : The plugin + * go_plugin_load_service: + * @plugin : The plugin * @service : Plugin service * @ret_error : Pointer used to report errors * * Loads base part of the plugin if is not loaded and then loads given * plugin service (prepares necessary part of the plugin for direct use). - * This function is intended for use by GnmPluginService objects. + * This function is intended for use by GOPluginService objects. */ void -gnm_plugin_load_service (GnmPlugin *pinfo, GnmPluginService *service, ErrorInfo **ret_error) +go_plugin_load_service (GOPlugin *plugin, GOPluginService *service, ErrorInfo **ret_error) { - g_return_if_fail (IS_GNM_PLUGIN (pinfo)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); g_return_if_fail (service != NULL); - GNM_INIT_RET_ERROR_INFO (ret_error); - gnm_plugin_load_base (pinfo, ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); + go_plugin_load_base (plugin, ret_error); if (*ret_error != NULL) { return; } - gnm_plugin_loader_load_service (pinfo->loader, service, ret_error); + go_plugin_loader_load_service (plugin->loader, service, ret_error); } /** - * gnm_plugin_unload_service: - * @pinfo : The plugin + * go_plugin_unload_service: + * @plugin : The plugin * @service : Plugin service * @ret_error : Pointer used to report errors * * ... - * This function is intended for use by GnmPluginService objects. + * This function is intended for use by GOPluginService objects. */ void -gnm_plugin_unload_service (GnmPlugin *pinfo, GnmPluginService *service, ErrorInfo **ret_error) +go_plugin_unload_service (GOPlugin *plugin, GOPluginService *service, ErrorInfo **ret_error) { - g_return_if_fail (IS_GNM_PLUGIN (pinfo)); - g_return_if_fail (pinfo->loader != NULL); + g_return_if_fail (IS_GO_PLUGIN (plugin)); + g_return_if_fail (plugin->loader != NULL); g_return_if_fail (service != NULL); - GNM_INIT_RET_ERROR_INFO (ret_error); - if (!plugin_info_read_full_info_if_needed_error_info (pinfo, ret_error)) { + GO_INIT_RET_ERROR_INFO (ret_error); + if (!go_plugin_read_full_info_if_needed_error_info (plugin, ret_error)) { return; } - gnm_plugin_loader_unload_service (pinfo->loader, service, ret_error); + go_plugin_loader_unload_service (plugin->loader, service, ret_error); } /** - * gnm_plugin_use_ref: + * go_plugin_use_ref: * @plugin : The plugin */ void -gnm_plugin_use_ref (GnmPlugin *plugin) +go_plugin_use_ref (GOPlugin *plugin) { - g_return_if_fail (IS_GNM_PLUGIN (plugin)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); g_return_if_fail (plugin->is_active); plugin->use_refcount++; if (plugin->use_refcount == 1) { - g_signal_emit (G_OBJECT (plugin), gnm_plugin_signals[CAN_DEACTIVATE_CHANGED], 0); + g_signal_emit (G_OBJECT (plugin), go_plugin_signals[CAN_DEACTIVATE_CHANGED], 0); } } /** - * gnm_plugin_use_unref: + * go_plugin_use_unref: * @plugin : The plugin */ void -gnm_plugin_use_unref (GnmPlugin *plugin) +go_plugin_use_unref (GOPlugin *plugin) { - g_return_if_fail (IS_GNM_PLUGIN (plugin)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); g_return_if_fail (plugin->is_active); g_return_if_fail (plugin->use_refcount > 0); plugin->use_refcount--; if (plugin->use_refcount == 0) { - g_signal_emit (G_OBJECT (plugin), gnm_plugin_signals[CAN_DEACTIVATE_CHANGED], 0); + g_signal_emit (G_OBJECT (plugin), go_plugin_signals[CAN_DEACTIVATE_CHANGED], 0); } } /** - * gnm_plugin_get_dependencies_ids: + * go_plugin_get_dependencies_ids: * @plugin : The plugin * * Returns the list of identifiers of plugins that @plugin depends on. * All these plugins will be automatically activated before activating * the @plugin itself. * The caller must free the returned list together with the strings it - * points to (use gnm_slist_free_custom (list, g_free) to do this). + * points to (use go_slist_free_custom (list, g_free) to do this). */ GSList * -gnm_plugin_get_dependencies_ids (GnmPlugin *plugin) +go_plugin_get_dependencies_ids (GOPlugin *plugin) { GSList *list = NULL; - GNM_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, - GNM_SLIST_PREPEND (list, g_strdup (dep->plugin_id)); + GO_SLIST_FOREACH (plugin->dependencies, PluginDependency, dep, + GO_SLIST_PREPEND (list, g_strdup (dep->plugin_id)); ); return g_slist_reverse (list); } /** - * gnm_plugin_get_services: + * go_plugin_get_services: * @plugin : The plugin * */ GSList * -gnm_plugin_get_services (GnmPlugin *plugin) +go_plugin_get_services (GOPlugin *plugin) { - g_return_val_if_fail (IS_GNM_PLUGIN (plugin), NULL); + g_return_val_if_fail (IS_GO_PLUGIN (plugin), NULL); return plugin->services; } @@ -1258,10 +1261,10 @@ gnm_plugin_get_services (GnmPlugin *plugin) /* * May return NULL without errors (is XML file doesn't exist) */ -static GnmPlugin * -plugin_info_read_for_dir (const gchar *dir_name, ErrorInfo **ret_error) +static GOPlugin * +go_plugin_read_for_dir (const gchar *dir_name, ErrorInfo **ret_error) { - GnmPlugin *pinfo = NULL; + GOPlugin *plugin = NULL; gchar *file_name; gchar *file_state; PluginFileState *state; @@ -1269,7 +1272,7 @@ plugin_info_read_for_dir (const gchar *dir_name, ErrorInfo **ret_error) g_return_val_if_fail (dir_name != NULL, NULL); - GNM_INIT_RET_ERROR_INFO (ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); file_name = g_build_filename (dir_name, PLUGIN_INFO_FILE_NAME, NULL); file_state = get_file_state_as_string (file_name); if (file_state == NULL) { @@ -1278,19 +1281,19 @@ plugin_info_read_for_dir (const gchar *dir_name, ErrorInfo **ret_error) } state = g_hash_table_lookup (plugin_file_state_dir_hash, dir_name); if (state != NULL && strcmp (state->file_state, file_state) == 0) { - pinfo = plugin_info_new_with_id_and_dir_name_only (state->plugin_id, state->dir_name); + plugin = go_plugin_new_with_id_and_dir_name_only (state->plugin_id, state->dir_name); state->age = PLUGIN_OLD_USED; - } else if ((pinfo = plugin_info_new_from_xml (dir_name, &plugin_error)) != NULL) { + } else if ((plugin = go_plugin_new_from_xml (dir_name, &plugin_error)) != NULL) { g_assert (plugin_error == NULL); if (state == NULL) { state = g_new (PluginFileState, 1); state->dir_name = g_strdup (dir_name); state->file_state = g_strdup (file_state); - state->plugin_id = g_strdup (gnm_plugin_get_id (pinfo)); + state->plugin_id = g_strdup (go_plugin_get_id (plugin)); state->age = PLUGIN_NEW; g_hash_table_insert (plugin_file_state_dir_hash, state->dir_name, state); } else { - if (strcmp (state->plugin_id, pinfo->id) == 0) { + if (strcmp (state->plugin_id, plugin->id) == 0) { state->age = PLUGIN_OLD_USED; } else { state->age = PLUGIN_NEW; @@ -1298,7 +1301,7 @@ plugin_info_read_for_dir (const gchar *dir_name, ErrorInfo **ret_error) g_free (state->file_state); g_free (state->plugin_id); state->file_state = g_strdup (file_state); - state->plugin_id = g_strdup (gnm_plugin_get_id (pinfo)); + state->plugin_id = g_strdup (go_plugin_get_id (plugin)); } plugin_file_state_hash_changed = TRUE; } else { @@ -1310,23 +1313,23 @@ plugin_info_read_for_dir (const gchar *dir_name, ErrorInfo **ret_error) g_free (file_name); g_free (file_state); - return pinfo; + return plugin; } /* * May return partial list and some error info. */ static GSList * -plugin_info_list_read_for_subdirs_of_dir (const gchar *dir_name, ErrorInfo **ret_error) +go_plugin_list_read_for_subdirs_of_dir (const gchar *dir_name, ErrorInfo **ret_error) { - GSList *plugin_info_list = NULL; + GSList *plugins = NULL; GDir *dir; char const *d_name; GSList *error_list = NULL; g_return_val_if_fail (dir_name != NULL, NULL); - GNM_INIT_RET_ERROR_INFO (ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); dir = g_dir_open (dir_name, 0, NULL); if (dir == NULL) return NULL; @@ -1334,98 +1337,69 @@ plugin_info_list_read_for_subdirs_of_dir (const gchar *dir_name, ErrorInfo **ret while ((d_name = g_dir_read_name (dir)) != NULL) { gchar *full_entry_name; ErrorInfo *error = NULL; - GnmPlugin *pinfo; + GOPlugin *plugin; if (strcmp (d_name, ".") == 0 || strcmp (d_name, "..") == 0) continue; full_entry_name = g_build_filename (dir_name, d_name, NULL); - pinfo = plugin_info_read_for_dir (full_entry_name, &error); - if (pinfo != NULL) { - GNM_SLIST_PREPEND (plugin_info_list, pinfo); + plugin = go_plugin_read_for_dir (full_entry_name, &error); + if (plugin != NULL) { + GO_SLIST_PREPEND (plugins, plugin); } if (error != NULL) { - GNM_SLIST_PREPEND (error_list, error); + GO_SLIST_PREPEND (error_list, error); } g_free (full_entry_name); } if (error_list != NULL) { - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); *ret_error = error_info_new_from_error_list (error_list); } g_dir_close (dir); - return g_slist_reverse (plugin_info_list); + return g_slist_reverse (plugins); } /* * May return partial list and some error info. */ static GSList * -plugin_info_list_read_for_subdirs_of_dir_list (GSList *dir_list, ErrorInfo **ret_error) +go_plugin_list_read_for_subdirs_of_dir_list (GSList *dir_list, ErrorInfo **ret_error) { - GSList *plugin_info_list = NULL; + GSList *plugins = NULL; GSList *dir_iterator; GSList *error_list = NULL; - GNM_INIT_RET_ERROR_INFO (ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); for (dir_iterator = dir_list; dir_iterator != NULL; dir_iterator = dir_iterator->next) { gchar *dir_name; ErrorInfo *error = NULL; GSList *dir_plugin_info_list; dir_name = (gchar *) dir_iterator->data; - dir_plugin_info_list = plugin_info_list_read_for_subdirs_of_dir (dir_name, &error); + dir_plugin_info_list = go_plugin_list_read_for_subdirs_of_dir (dir_name, &error); if (error != NULL) { - GNM_SLIST_PREPEND (error_list, error); + GO_SLIST_PREPEND (error_list, error); } if (dir_plugin_info_list != NULL) { - GNM_SLIST_CONCAT (plugin_info_list, dir_plugin_info_list); + GO_SLIST_CONCAT (plugins, dir_plugin_info_list); } } if (error_list != NULL) { - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); *ret_error = error_info_new_from_error_list (error_list); } - return plugin_info_list; -} - -static GSList * -gnumeric_extra_plugin_dirs (void) -{ - GSList *extra_dirs; - gchar const *plugin_path_env; - - extra_dirs = gnm_string_slist_copy (gnm_app_prefs->plugin_extra_dirs); - plugin_path_env = g_getenv ("GNUMERIC_PLUGIN_PATH"); - if (plugin_path_env != NULL) { - GNM_SLIST_CONCAT (extra_dirs, gnm_strsplit_to_slist (plugin_path_env, ":")); - } - - return extra_dirs; + return plugins; } /* * May return partial list and some error info. */ static GSList * -plugin_info_list_read_for_all_dirs (ErrorInfo **ret_error) +go_plugin_list_read_for_all_dirs (ErrorInfo **ret_error) { - GSList *dir_list; - GSList *plugin_info_list; - ErrorInfo *error; - - GNM_INIT_RET_ERROR_INFO (ret_error); - dir_list = gnm_slist_create (gnm_sys_plugin_dir (), - gnm_usr_plugin_dir (), - NULL); - GNM_SLIST_CONCAT (dir_list, gnumeric_extra_plugin_dirs ()); - plugin_info_list = plugin_info_list_read_for_subdirs_of_dir_list (dir_list, &error); - g_slist_foreach (dir_list, (GFunc)g_free, NULL); - g_slist_free (dir_list); - *ret_error = error; - - return plugin_info_list; + return go_plugin_list_read_for_subdirs_of_dir_list (go_plugin_dirs, ret_error); } /** @@ -1438,27 +1412,27 @@ plugin_info_list_read_for_all_dirs (ErrorInfo **ret_error) * affect plugins activated successfully). */ void -plugin_db_activate_plugin_list (GSList *plugins, ErrorInfo **ret_error) +go_plugin_db_activate_plugin_list (GSList *plugins, ErrorInfo **ret_error) { GSList *error_list = NULL; - GNM_INIT_RET_ERROR_INFO (ret_error); - GNM_SLIST_FOREACH (plugins, GnmPlugin, pinfo, + GO_INIT_RET_ERROR_INFO (ret_error); + GO_SLIST_FOREACH (plugins, GOPlugin, plugin, ErrorInfo *error; - gnm_plugin_activate (pinfo, &error); + go_plugin_activate (plugin, &error); if (error != NULL) { ErrorInfo *new_error; new_error = error_info_new_printf ( _("Couldn't activate plugin \"%s\" (ID: %s)."), - pinfo->name, pinfo->id); + plugin->name, plugin->id); error_info_add_details (new_error, error); - GNM_SLIST_PREPEND (error_list, new_error); + GO_SLIST_PREPEND (error_list, new_error); } ); if (error_list != NULL) { - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); *ret_error = error_info_new_from_error_list (error_list); } } @@ -1473,27 +1447,27 @@ plugin_db_activate_plugin_list (GSList *plugins, ErrorInfo **ret_error) * affect plugins deactivated successfully). */ void -plugin_db_deactivate_plugin_list (GSList *plugins, ErrorInfo **ret_error) +go_plugin_db_deactivate_plugin_list (GSList *plugins, ErrorInfo **ret_error) { GSList *error_list = NULL; - GNM_INIT_RET_ERROR_INFO (ret_error); - GNM_SLIST_FOREACH (plugins, GnmPlugin, pinfo, + GO_INIT_RET_ERROR_INFO (ret_error); + GO_SLIST_FOREACH (plugins, GOPlugin, plugin, ErrorInfo *error; - gnm_plugin_deactivate (pinfo, &error); + go_plugin_deactivate (plugin, &error); if (error != NULL) { ErrorInfo *new_error; new_error = error_info_new_printf ( _("Couldn't deactivate plugin \"%s\" (ID: %s)."), - pinfo->name, pinfo->id); + plugin->name, plugin->id); error_info_add_details (new_error, error); - GNM_SLIST_PREPEND (error_list, new_error); + GO_SLIST_PREPEND (error_list, new_error); } ); if (error_list != NULL) { - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); *ret_error = error_info_new_from_error_list (error_list); } } @@ -1503,24 +1477,44 @@ plugin_db_deactivate_plugin_list (GSList *plugins, ErrorInfo **ret_error) * * Returns the list of available plugins. The returned value must not be * freed and stays valid until calling plugins_rescan or plugins_shutdown. - */ + **/ GSList * -plugins_get_available_plugins (void) +go_plugins_get_available_plugins (void) { return available_plugins; } +/** + * plugins_get_active_plugins: + * + * Returns the list of active plugins. The caller needs to free the list, but + * not the content. + **/ +GSList * +go_plugins_get_active_plugins (void) +{ + GSList *active_list = NULL; + + GO_SLIST_FOREACH (available_plugins, GOPlugin, plugin, + if (go_plugin_is_active (plugin) && + !go_plugin_db_is_plugin_marked_for_deactivation (plugin)) { + GO_SLIST_PREPEND (active_list, (gpointer) go_plugin_get_id (plugin)); + } + ); + return g_slist_reverse (active_list); +} + /** * plugins_get_plugin_by_id: * @plugin_id : String containing plugin ID * - * Returns GnmPlugin object for plugin with ID equal to @plugin_id or NULL + * Returns GOPlugin object for plugin with ID equal to @plugin_id or NULL * if there's no plugin available with given id. * Function returns "borrowed" reference, use g_object_ref if you want to * be sure that plugin won't disappear. */ -GnmPlugin * -plugins_get_plugin_by_id (const gchar *plugin_id) +GOPlugin * +go_plugins_get_plugin_by_id (const gchar *plugin_id) { g_return_val_if_fail (plugin_id != NULL, NULL); @@ -1532,18 +1526,18 @@ plugins_get_plugin_by_id (const gchar *plugin_id) * ... */ void -plugin_db_mark_plugin_for_deactivation (GnmPlugin *pinfo, gboolean mark) +go_plugin_db_mark_plugin_for_deactivation (GOPlugin *plugin, gboolean mark) { - g_return_if_fail (IS_GNM_PLUGIN (pinfo)); + g_return_if_fail (IS_GO_PLUGIN (plugin)); if (mark) { if (plugins_marked_for_deactivation_hash == NULL) { plugins_marked_for_deactivation_hash = g_hash_table_new (&g_str_hash, &g_str_equal); } - g_hash_table_insert (plugins_marked_for_deactivation_hash, pinfo->id, pinfo); + g_hash_table_insert (plugins_marked_for_deactivation_hash, plugin->id, plugin); } else { if (plugins_marked_for_deactivation_hash != NULL) { - g_hash_table_remove (plugins_marked_for_deactivation_hash, pinfo->id); + g_hash_table_remove (plugins_marked_for_deactivation_hash, plugin->id); } } } @@ -1553,10 +1547,10 @@ plugin_db_mark_plugin_for_deactivation (GnmPlugin *pinfo, gboolean mark) * ... */ gboolean -plugin_db_is_plugin_marked_for_deactivation (GnmPlugin *pinfo) +go_plugin_db_is_plugin_marked_for_deactivation (GOPlugin *plugin) { return plugins_marked_for_deactivation_hash != NULL && - g_hash_table_lookup (plugins_marked_for_deactivation_hash, pinfo->id) != NULL; + g_hash_table_lookup (plugins_marked_for_deactivation_hash, plugin->id) != NULL; } static void @@ -1575,7 +1569,7 @@ ghf_set_state_old_unused (gpointer key, gpointer value, gpointer unused) * */ void -plugins_rescan (ErrorInfo **ret_error, GSList **ret_new_plugins) +go_plugins_rescan (ErrorInfo **ret_error, GSList **ret_new_plugins) { GSList *error_list = NULL; ErrorInfo *error; @@ -1583,45 +1577,45 @@ plugins_rescan (ErrorInfo **ret_error, GSList **ret_new_plugins) GHashTable *new_available_plugins_id_hash; GSList *removed_plugins = NULL, *added_plugins = NULL, *still_active_ids = NULL; - GNM_INIT_RET_ERROR_INFO (ret_error); + GO_INIT_RET_ERROR_INFO (ret_error); /* re-read plugins list from disk */ g_hash_table_foreach (plugin_file_state_dir_hash, ghf_set_state_old_unused, NULL); - new_available_plugins = plugin_info_list_read_for_all_dirs (&error); + new_available_plugins = go_plugin_list_read_for_all_dirs (&error); if (error != NULL) { - GNM_SLIST_PREPEND (error_list, error_info_new_str_with_details ( + GO_SLIST_PREPEND (error_list, error_info_new_str_with_details ( _("Errors while reading info about available plugins."), error)); } /* Find and (try to) deactivate not any longer available plugins */ new_available_plugins_id_hash = g_hash_table_new (g_str_hash, g_str_equal); - GNM_SLIST_FOREACH (new_available_plugins, GnmPlugin, plugin, + GO_SLIST_FOREACH (new_available_plugins, GOPlugin, plugin, g_hash_table_insert ( - new_available_plugins_id_hash, (char *) gnm_plugin_get_id (plugin), plugin); + new_available_plugins_id_hash, (char *) go_plugin_get_id (plugin), plugin); ); - GNM_SLIST_FOREACH (available_plugins, GnmPlugin, plugin, - GnmPlugin *found_plugin; + GO_SLIST_FOREACH (available_plugins, GOPlugin, plugin, + GOPlugin *found_plugin; found_plugin = g_hash_table_lookup ( - new_available_plugins_id_hash, gnm_plugin_get_id (plugin)); + new_available_plugins_id_hash, go_plugin_get_id (plugin)); if (found_plugin == NULL || - strcmp (gnm_plugin_get_dir_name (found_plugin), - gnm_plugin_get_dir_name (plugin)) != 0) { - GNM_SLIST_PREPEND (removed_plugins, plugin); + strcmp (go_plugin_get_dir_name (found_plugin), + go_plugin_get_dir_name (plugin)) != 0) { + GO_SLIST_PREPEND (removed_plugins, plugin); } ); g_hash_table_destroy (new_available_plugins_id_hash); - plugin_db_deactivate_plugin_list (removed_plugins, &error); + go_plugin_db_deactivate_plugin_list (removed_plugins, &error); if (error != NULL) { - GNM_SLIST_PREPEND (error_list, error_info_new_str_with_details ( + GO_SLIST_PREPEND (error_list, error_info_new_str_with_details ( _("Errors while deactivating plugins that are no longer on disk."), error)); } - GNM_SLIST_FOREACH (removed_plugins, GnmPlugin, plugin, - if (gnm_plugin_is_active (plugin)) { - GNM_SLIST_PREPEND (still_active_ids, (char *) gnm_plugin_get_id (plugin)); + GO_SLIST_FOREACH (removed_plugins, GOPlugin, plugin, + if (go_plugin_is_active (plugin)) { + GO_SLIST_PREPEND (still_active_ids, (char *) go_plugin_get_id (plugin)); } else { - GNM_SLIST_REMOVE (available_plugins, plugin); - g_hash_table_remove (available_plugins_id_hash, gnm_plugin_get_id (plugin)); + GO_SLIST_REMOVE (available_plugins, plugin); + g_hash_table_remove (available_plugins_id_hash, go_plugin_get_id (plugin)); g_object_unref (plugin); } ); @@ -1630,37 +1624,37 @@ plugins_rescan (ErrorInfo **ret_error, GSList **ret_new_plugins) GString *s; s = g_string_new (still_active_ids->data); - GNM_SLIST_FOREACH (still_active_ids->next, char, id, + GO_SLIST_FOREACH (still_active_ids->next, const char, id, g_string_append (s, ", "); g_string_append (s, id); ); - GNM_SLIST_PREPEND (error_list, error_info_new_printf ( + GO_SLIST_PREPEND (error_list, error_info_new_printf ( _("The following plugins are no longer on disk but are still active:\n" - "%s.\nYou should restart Gnumeric now."), s->str)); + "%s.\nYou should restart this program now."), s->str)); g_string_free (s, TRUE); - gnm_slist_free_custom (still_active_ids, g_free); + go_slist_free_custom (still_active_ids, g_free); } /* Find previously not available plugins */ - GNM_SLIST_FOREACH (new_available_plugins, GnmPlugin, plugin, - GnmPlugin *old_plugin; + GO_SLIST_FOREACH (new_available_plugins, GOPlugin, plugin, + GOPlugin *old_plugin; old_plugin = g_hash_table_lookup ( - available_plugins_id_hash, gnm_plugin_get_id (plugin)); + available_plugins_id_hash, go_plugin_get_id (plugin)); if (old_plugin == NULL) { - GNM_SLIST_PREPEND (added_plugins, plugin); + GO_SLIST_PREPEND (added_plugins, plugin); g_object_ref (plugin); } ); - gnm_slist_free_custom (new_available_plugins, g_object_unref); + go_slist_free_custom (new_available_plugins, g_object_unref); if (ret_new_plugins != NULL) { *ret_new_plugins = g_slist_copy (added_plugins); } - GNM_SLIST_FOREACH (added_plugins, GnmPlugin, plugin, + GO_SLIST_FOREACH (added_plugins, GOPlugin, plugin, g_hash_table_insert ( - available_plugins_id_hash, (char *) gnm_plugin_get_id (plugin), plugin); + available_plugins_id_hash, (char *) go_plugin_get_id (plugin), plugin); ); - GNM_SLIST_CONCAT (available_plugins, added_plugins); + GO_SLIST_CONCAT (available_plugins, added_plugins); /* handle errors */ if (error_list != NULL) { @@ -1673,33 +1667,51 @@ ghf_collect_new_plugins (gpointer ignored, PluginFileState *s, GSList **plugin_list) { if (s->age == PLUGIN_NEW) { - GnmPlugin *plugin = plugins_get_plugin_by_id (s->plugin_id); + GOPlugin *plugin = go_plugins_get_plugin_by_id (s->plugin_id); if (plugin != NULL && !plugin->require_explicit_enabling) - GNM_SLIST_PREPEND (*plugin_list, plugin); + GO_SLIST_PREPEND (*plugin_list, plugin); + } +} + +static void +go_plugins_set_dirs (GSList *plugin_dirs) +{ + if (go_plugin_dirs != plugin_dirs) { + g_slist_foreach (go_plugin_dirs, (GFunc) g_free, NULL); + g_slist_free (go_plugin_dirs); + go_plugin_dirs = plugin_dirs; } } /** - * plugins_init: - * @context : #GnmCmdContext used to report errors + * go_plugins_init: + * @context : #GOCmdContext used to report errors * * Initializes the plugin subsystem. Don't call this function more than * once. */ void -plugins_init (GnmCmdContext *context) +go_plugins_init (GOCmdContext *context, + GSList const *known_states, + GSList const *active_plugins, + GSList *plugin_dirs, + gboolean activate_new_plugins, + GType default_loader_type) { GSList *error_list = NULL; ErrorInfo *error; GSList *plugin_list; - gnm_time_counter_push (); + plugin_dirs = g_slist_append (plugin_dirs, go_plugins_get_plugin_dir ()); + + go_default_loader_type = default_loader_type; + go_plugins_set_dirs (plugin_dirs); loader_services = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); /* initialize hash table with information about known plugin.xml files */ plugin_file_state_dir_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, plugin_file_state_free); - GNM_SLIST_FOREACH (gnm_app_prefs->plugin_file_states, char, state_str, + GO_SLIST_FOREACH (known_states, char, state_str, PluginFileState *state; state = plugin_file_state_from_string (state_str); @@ -1709,55 +1721,51 @@ plugins_init (GnmCmdContext *context) plugin_file_state_hash_changed = FALSE; /* collect information about the available plugins */ - available_plugins = plugin_info_list_read_for_all_dirs (&error); + available_plugins = go_plugin_list_read_for_all_dirs (&error); available_plugins_id_hash = g_hash_table_new (g_str_hash, g_str_equal); - GNM_SLIST_FOREACH (available_plugins, GnmPlugin, plugin, + GO_SLIST_FOREACH (available_plugins, GOPlugin, plugin, g_hash_table_insert ( available_plugins_id_hash, - (gpointer) gnm_plugin_get_id (plugin), plugin); + (gpointer) go_plugin_get_id (plugin), plugin); ); if (error != NULL) { - GNM_SLIST_PREPEND (error_list, error_info_new_str_with_details ( + GO_SLIST_PREPEND (error_list, error_info_new_str_with_details ( _("Errors while reading info about available plugins."), error)); } /* get descriptors for all previously active plugins */ plugin_list = NULL; - GNM_SLIST_FOREACH (gnm_app_prefs->active_plugins, char, plugin_id, - GnmPlugin *plugin = plugins_get_plugin_by_id (plugin_id); + GO_SLIST_FOREACH (active_plugins, char, plugin_id, + GOPlugin *plugin = go_plugins_get_plugin_by_id (plugin_id); if (plugin != NULL) - GNM_SLIST_PREPEND (plugin_list, plugin); + GO_SLIST_PREPEND (plugin_list, plugin); ); /* get descriptors for new plugins */ - if (gnm_app_prefs->activate_new_plugins) - { + if (activate_new_plugins) g_hash_table_foreach ( plugin_file_state_dir_hash, (GHFunc) ghf_collect_new_plugins, &plugin_list); - } plugin_list = g_slist_reverse (plugin_list); - plugin_db_activate_plugin_list (plugin_list, &error); + go_plugin_db_activate_plugin_list (plugin_list, &error); g_slist_free (plugin_list); if (error != NULL) { - GNM_SLIST_PREPEND (error_list, error_info_new_str_with_details ( + GO_SLIST_PREPEND (error_list, error_info_new_str_with_details ( _("Errors while activating plugins."), error)); } /* report initialization errors */ if (error_list != NULL) { - GNM_SLIST_REVERSE (error_list); + GO_SLIST_REVERSE (error_list); error = error_info_new_str_with_details_list ( _("Errors while initializing plugin system."), error_list); - gnm_cmd_context_error_info (context, error); + go_cmd_context_error_info (context, error); error_info_free (error); } - - plugin_message (4, "plugins_init() time: %fs\n", gnm_time_counter_pop ()); } static void @@ -1767,25 +1775,7 @@ ghf_collect_used_plugin_state_strings (gpointer key, gpointer value, gpointer us GSList **strings = user_data; if (state->age != PLUGIN_OLD_UNUSED) { - GNM_SLIST_PREPEND (*strings, plugin_file_state_as_string (state)); - } -} - -/** - * gnm_plugin_try_unref - * - * Unref plugin object if it is legal to destroy it. Destruction is - * not legal if a type or interface has been registered for it. "Once - * a GTypeModule is initialized, it must exist forever" - docs of - * g_type_module_unuse(). - */ -static void -gnm_plugin_try_unref (gpointer plugin) -{ - GTypeModule *module = G_TYPE_MODULE (plugin); - - if (!module->type_infos && !module->interface_infos) { - g_object_unref (plugin); + GO_SLIST_PREPEND (*strings, plugin_file_state_as_string (state)); } } @@ -1796,29 +1786,18 @@ gnm_plugin_try_unref (gpointer plugin) * exiting the application. Some plugins may be left active or in broken * state, so calling plugins_init again will NOT work properly. */ -void -plugins_shutdown (void) +GSList * +go_plugins_shutdown (void) { - GSList *active_list = NULL, *used_plugin_state_strings = NULL; + GSList *used_plugin_state_strings = NULL; ErrorInfo *ignored_error; - /* save active plugins list */ - GNM_SLIST_FOREACH (available_plugins, GnmPlugin, plugin, - if (gnm_plugin_is_active (plugin) && - !plugin_db_is_plugin_marked_for_deactivation (plugin)) { - GNM_SLIST_PREPEND (active_list, (gpointer) gnm_plugin_get_id (plugin)); - } - ); - active_list = g_slist_reverse (active_list); - gnm_gconf_set_active_plugins (active_list); - g_slist_free (active_list); - if (plugins_marked_for_deactivation_hash != NULL) { g_hash_table_destroy (plugins_marked_for_deactivation_hash); } /* deactivate all plugins */ - plugin_db_deactivate_plugin_list (available_plugins, &ignored_error); + go_plugin_db_deactivate_plugin_list (available_plugins, &ignored_error); error_info_free (ignored_error); /* update information stored in gconf database @@ -1827,31 +1806,22 @@ plugins_shutdown (void) plugin_file_state_dir_hash, ghf_collect_used_plugin_state_strings, &used_plugin_state_strings); - if (plugin_file_state_hash_changed || - g_hash_table_size (plugin_file_state_dir_hash) != g_slist_length (used_plugin_state_strings)) { - gnm_gconf_set_plugin_file_states (used_plugin_state_strings); - plugin_message (5, "Plugin cache changed\n"); - } else - gnm_slist_free_custom (used_plugin_state_strings, g_free); + if (!plugin_file_state_hash_changed && + g_hash_table_size (plugin_file_state_dir_hash) == g_slist_length (used_plugin_state_strings)) { + go_slist_free_custom (used_plugin_state_strings, g_free); + used_plugin_state_strings = NULL; + } g_hash_table_destroy (plugin_file_state_dir_hash); g_hash_table_destroy (loader_services); g_hash_table_destroy (available_plugins_id_hash); - gnm_slist_free_custom (available_plugins, gnm_plugin_try_unref); + go_slist_free_custom (available_plugins, g_object_unref); - go_conf_sync (); + return used_plugin_state_strings; } -void -plugin_message (gint level, const gchar *format, ...) +char * +go_plugins_get_plugin_dir (void) { -#ifdef PLUGIN_DEBUG - va_list args; - - if (level <= PLUGIN_DEBUG) { - va_start (args, format); - vprintf (format, args); - va_end (args); - } -#endif + return g_build_filename (go_sys_lib_dir (), "plugins", NULL); } diff --git a/lib/goffice-0.0.4/goffice/app/go-plugin.h b/lib/goffice-0.0.4/goffice/app/go-plugin.h new file mode 100644 index 0000000000..6af879b186 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-plugin.h @@ -0,0 +1,67 @@ +#ifndef GO_PLUGIN_H +#define GO_PLUGIN_H + +#include +#include + +G_BEGIN_DECLS + +/* + * Use "#define PLUGIN_DEBUG x" to enable some plugin related debugging + * messages. +#undef PLUGIN_DEBUG + * Define PLUGIN_ALWAYS_LOAD to disable loading on demand feature + */ + +#define GO_PLUGIN_TYPE (go_plugin_get_type ()) +#define GO_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_TYPE, GOPlugin)) +#define IS_GO_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_TYPE)) + +GType go_plugin_get_type (void); + +void go_plugin_activate (GOPlugin *plugin, ErrorInfo **ret_error); +void go_plugin_deactivate (GOPlugin *plugin, ErrorInfo **ret_error); +gboolean go_plugin_is_active (GOPlugin *plugin); +gboolean go_plugin_can_deactivate (GOPlugin *plugin); +void go_plugin_load_service (GOPlugin *plugin, GOPluginService *service, ErrorInfo **ret_error); +void go_plugin_unload_service (GOPlugin *plugin, GOPluginService *service, ErrorInfo **ret_error); +gboolean go_plugin_is_loaded (GOPlugin *plugin); +void go_plugin_use_ref (GOPlugin *plugin); +void go_plugin_use_unref (GOPlugin *plugin); + +GTypeModule *go_plugin_get_type_module (GOPlugin *plugin); +char const *go_plugin_get_dir_name (GOPlugin *plugin); +char const *go_plugin_get_id (GOPlugin *plugin); +char const *go_plugin_get_name (GOPlugin *plugin); +char const *go_plugin_get_description (GOPlugin *plugin); +char const *go_plugin_get_textdomain (GOPlugin *plugin); +GSList *go_plugin_get_services (GOPlugin *plugin); +GSList *go_plugin_get_dependencies_ids (GOPlugin *plugin); + +/* + * + */ +void go_plugins_init (GOCmdContext *context, + GSList const *known_states, + GSList const *active_plugins, + GSList *plugin_dirs, + gboolean activate_new_plugins, + GType default_loader_type); +GSList *go_plugins_shutdown (void); + +void go_plugins_register_loader (const gchar *id_str, GOPluginService *service); +void go_plugins_unregister_loader (const gchar *id_str); +GOPlugin *go_plugins_get_plugin_by_id (const gchar *plugin_id); +GSList *go_plugins_get_available_plugins (void); +GSList *go_plugins_get_active_plugins (void); +void go_plugins_rescan (ErrorInfo **ret_error, GSList **ret_new_plugins); +char *go_plugins_get_plugin_dir (void); + +void go_plugin_db_mark_plugin_for_deactivation (GOPlugin *plugin, gboolean mark); +gboolean go_plugin_db_is_plugin_marked_for_deactivation (GOPlugin *plugin); +void go_plugin_db_activate_plugin_list (GSList *plugins, ErrorInfo **ret_error); +void go_plugin_db_deactivate_plugin_list (GSList *plugins, ErrorInfo **ret_error); + +G_END_DECLS + +#endif /* GO_PLUGIN_H */ diff --git a/lib/goffice/app/go-service-impl.h b/lib/goffice-0.0.4/goffice/app/go-service-impl.h similarity index 95% rename from lib/goffice/app/go-service-impl.h rename to lib/goffice-0.0.4/goffice/app/go-service-impl.h index 11b3a43e5f..c9382acffc 100644 --- a/lib/goffice/app/go-service-impl.h +++ b/lib/goffice-0.0.4/goffice/app/go-service-impl.h @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ diff --git a/lib/goffice-0.0.4/goffice/app/go-service.c b/lib/goffice-0.0.4/goffice/app/go-service.c new file mode 100644 index 0000000000..f6a933cb0e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/go-service.c @@ -0,0 +1,2 @@ +#include +#include "go-service.h" diff --git a/lib/goffice/app/go-service.h b/lib/goffice-0.0.4/goffice/app/go-service.h similarity index 94% rename from lib/goffice/app/go-service.h rename to lib/goffice-0.0.4/goffice/app/go-service.h index ec45bb55e9..cf53219fd2 100644 --- a/lib/goffice/app/go-service.h +++ b/lib/goffice-0.0.4/goffice/app/go-service.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_SERVICE_H @@ -24,6 +24,8 @@ #include #include +G_BEGIN_DECLS + #define GO_SERVICE_TYPE (go_service_get_type ()) #define GO_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_SERVICE_TYPE, GOService)) #define IS_GO_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_SERVICE_TYPE)) @@ -37,4 +39,6 @@ GOPlugin *go_service_get_plugin (GOService const *service); typedef struct _GOServiceSimple GOServiceSimple; GType go_service_simple_get_type (void); +G_END_DECLS + #endif /* GO_SERVICE_H */ diff --git a/lib/goffice-0.0.4/goffice/app/goffice-app.h b/lib/goffice-0.0.4/goffice/app/goffice-app.h new file mode 100644 index 0000000000..2ecb3c999b --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/goffice-app.h @@ -0,0 +1,62 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * goffice-app.h: + * + * Copyright (C) 2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOFFICE_APP_H +#define GOFFICE_APP_H + +#include + +G_BEGIN_DECLS + +typedef struct _GOApp GOApp; +typedef struct _GODoc GODoc; +typedef struct _GODocControl GODocControl; +typedef struct _GOCmdContext GOCmdContext; + +typedef struct _GOPlugin GOPlugin; +typedef struct _GOPluginService GOPluginService; +typedef struct _GOPluginLoader GOPluginLoader; + +/* temporary */ +typedef struct _ErrorInfo ErrorInfo; +typedef struct _GOFileSaver GOFileSaver; +typedef struct _GOFileOpener GOFileOpener; +typedef struct _IOContext IOContext; + +/* + * File probe level tells file opener (its probe method to be exact), how + * hard it should try to recognize the type of the file. File openers may + * ignore this or support only some probe levels, but if specifies + * "reccomened" behaviour. + * Before opening any file we detect its type by calling probe for + * every registered file opener (in order of priority) and passing + * FILE_PROBE_FILE_NAME as probe level. If none of them recogizes the file, + * we increase probe level and try again... + */ +typedef enum { + FILE_PROBE_FILE_NAME, /* Test only file name, don't read file contents */ + FILE_PROBE_CONTENT, /* Read the whole file if it's necessary */ + FILE_PROBE_LAST +} FileProbeLevel; + +G_END_DECLS + +#endif /* GOFFICE_GRAPH_H */ diff --git a/lib/goffice/split/io-context-priv.h b/lib/goffice-0.0.4/goffice/app/io-context-priv.h similarity index 62% rename from lib/goffice/split/io-context-priv.h rename to lib/goffice-0.0.4/goffice/app/io-context-priv.h index 61b67bc54c..0ed89c5e2d 100644 --- a/lib/goffice/split/io-context-priv.h +++ b/lib/goffice-0.0.4/goffice/app/io-context-priv.h @@ -1,27 +1,24 @@ -#ifndef GNUMERIC_IO_CONTEXT_PRIV_H -#define GNUMERIC_IO_CONTEXT_PRIV_H +#ifndef GO_IO_CONTEXT_PRIV_H +#define GO_IO_CONTEXT_PRIV_H -#include "gnumeric.h" -#include "io-context.h" -#include "error-info.h" -#include "command-context-priv.h" -#include +#include +#include +#include + +G_BEGIN_DECLS #define IO_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IO_CONTEXT, IOContextClass)) #define IS_IO_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IO_CONTEXT)) typedef enum { - GNM_PROGRESS_HELPER_NONE, - GNM_PROGRESS_HELPER_FILE, - GNM_PROGRESS_HELPER_MEM, - GNM_PROGRESS_HELPER_COUNT, - GNM_PROGRESS_HELPER_VALUE, - GNM_PROGRESS_HELPER_WORKBOOK, - GNM_PROGRESS_HELPER_LAST -} GnmProgressHelperType; + GO_PROGRESS_HELPER_NONE, + GO_PROGRESS_HELPER_COUNT, + GO_PROGRESS_HELPER_VALUE, + GO_PROGRESS_HELPER_LAST +} GOProgressHelperType; typedef struct { - GnmProgressHelperType helper_type; + GOProgressHelperType helper_type; union { struct { gchar *start; @@ -40,7 +37,7 @@ typedef struct { gint step; } workbook; } v; -} GnmProgressHelper; +} GOProgressHelper; typedef struct { gfloat min, max; @@ -49,7 +46,7 @@ typedef struct { struct _IOContext { GObject base; - GnmCmdContext *impl; + GOCmdContext *impl; ErrorInfo *info; gboolean error_occurred; gboolean warning_occurred; @@ -58,7 +55,7 @@ struct _IOContext { gfloat progress_min, progress_max; gdouble last_progress; gdouble last_time; - GnmProgressHelper helper; + GOProgressHelper helper; }; struct _IOContextClass { @@ -67,4 +64,6 @@ struct _IOContextClass { void (*processing_file) (IOContext *ioc, char const *name); }; -#endif /* GNUMERIC_IO_CONTEXT_PRIV_H */ +G_END_DECLS + +#endif /* GO_IO_CONTEXT_PRIV_H */ diff --git a/lib/goffice/split/io-context.c b/lib/goffice-0.0.4/goffice/app/io-context.c similarity index 74% rename from lib/goffice/split/io-context.c rename to lib/goffice-0.0.4/goffice/app/io-context.c index 21bec1c423..ef341aaffe 100644 --- a/lib/goffice/split/io-context.c +++ b/lib/goffice-0.0.4/goffice/app/io-context.c @@ -9,17 +9,12 @@ * Jody Goldberg * Zbigniew Chyla * - * (C) 2000-2002 Jody Goldberg + * (C) 2000-2005 Jody Goldberg */ -#include -#include "gnumeric.h" +#include #include "io-context-priv.h" - -//#include "sheet.h" -//#include "workbook.h" -#include "command-context.h" -#include "gui-util.h" - +#include "go-cmd-context.h" +#include #include #include @@ -42,7 +37,7 @@ io_context_init (IOContext *ioc) ioc->progress_max = 1.0; ioc->last_progress = -1.0; ioc->last_time = 0.0; - ioc->helper.helper_type = GNM_PROGRESS_HELPER_NONE; + ioc->helper.helper_type = GO_PROGRESS_HELPER_NONE; } static void @@ -55,8 +50,8 @@ ioc_finalize (GObject *obj) ioc = IO_CONTEXT (obj); error_info_free (ioc->info); if (ioc->impl) { - cmd_context_progress_set (ioc->impl, 0.0); - cmd_context_progress_message_set (ioc->impl, NULL); + go_cmd_context_progress_set (ioc->impl, 0.0); + go_cmd_context_progress_message_set (ioc->impl, NULL); g_object_unref (G_OBJECT (ioc->impl)); } @@ -64,26 +59,26 @@ ioc_finalize (GObject *obj) } static char * -ioc_get_password (GnmCmdContext *cc, char const *filename) +ioc_get_password (GOCmdContext *cc, char const *filename) { IOContext *ioc = (IOContext *)cc; - return gnm_cmd_context_get_password (ioc->impl, filename); + return go_cmd_context_get_password (ioc->impl, filename); } static void -ioc_set_sensitive (GnmCmdContext *cc, gboolean sensitive) +ioc_set_sensitive (GOCmdContext *cc, gboolean sensitive) { (void)cc; (void)sensitive; } static void -ioc_error_error (GnmCmdContext *cc, GError *err) +ioc_error_error (GOCmdContext *cc, GError *err) { gnumeric_io_error_string (IO_CONTEXT (cc), err->message); } static void -ioc_error_error_info (G_GNUC_UNUSED GnmCmdContext *ctxt, +ioc_error_error_info (G_GNUC_UNUSED GOCmdContext *ctxt, ErrorInfo *error) { /* TODO what goes here */ @@ -103,7 +98,7 @@ gnumeric_io_error_string (IOContext *context, const gchar *str) } static void -io_context_gnm_cmd_context_init (GnmCmdContextClass *cc_class) +io_context_gnm_cmd_context_init (GOCmdContextClass *cc_class) { cc_class->get_password = ioc_get_password; cc_class->set_sensitive = ioc_set_sensitive; @@ -117,16 +112,16 @@ io_context_class_init (GObjectClass *klass) } GSF_CLASS_FULL (IOContext, io_context, - io_context_class_init, io_context_init, - G_TYPE_OBJECT, 0, - GSF_INTERFACE (io_context_gnm_cmd_context_init, GNM_CMD_CONTEXT_TYPE)) + NULL, NULL, io_context_class_init, NULL, + io_context_init, G_TYPE_OBJECT, 0, + GSF_INTERFACE (io_context_gnm_cmd_context_init, GO_CMD_CONTEXT_TYPE)) IOContext * -gnumeric_io_context_new (GnmCmdContext *cc) +gnumeric_io_context_new (GOCmdContext *cc) { IOContext *ioc; - g_return_val_if_fail (IS_GNM_CMD_CONTEXT (cc), NULL); + g_return_val_if_fail (IS_GO_CMD_CONTEXT (cc), NULL); ioc = g_object_new (TYPE_IO_CONTEXT, NULL); /* The cc is optional for subclasses, but mandatory in this class. */ @@ -169,7 +164,7 @@ gnumeric_io_error_push (IOContext *context, ErrorInfo *error) void gnumeric_io_error_display (IOContext *context) { - GnmCmdContext *cc; + GOCmdContext *cc; g_return_if_fail (context != NULL); @@ -177,8 +172,8 @@ gnumeric_io_error_display (IOContext *context) if (context->impl) cc = context->impl; else - cc = GNM_CMD_CONTEXT (context); - gnm_cmd_context_error_info (cc, context->info); + cc = GO_CMD_CONTEXT (context); + go_cmd_context_error_info (cc, context->info); } } @@ -227,13 +222,13 @@ io_progress_update (IOContext *ioc, gdouble f) (void) g_get_current_time (&tv); t = tv.tv_sec + tv.tv_usec / 1000000.0; if (at_end || t - ioc->last_time >= PROGRESS_UPDATE_PERIOD_SEC) { - GnmCmdContext *cc; + GOCmdContext *cc; if (ioc->impl) cc = ioc->impl; else - cc = GNM_CMD_CONTEXT (ioc); - cmd_context_progress_set (cc, f); + cc = GO_CMD_CONTEXT (ioc); + go_cmd_context_progress_set (cc, f); ioc->last_time = t; ioc->last_progress = f; } @@ -247,15 +242,15 @@ io_progress_update (IOContext *ioc, gdouble f) void io_progress_message (IOContext *ioc, const gchar *msg) { - GnmCmdContext *cc; + GOCmdContext *cc; g_return_if_fail (IS_IO_CONTEXT (ioc)); if (ioc->impl) cc = ioc->impl; else - cc = GNM_CMD_CONTEXT (ioc); - cmd_context_progress_message_set (cc, msg); + cc = GO_CMD_CONTEXT (ioc); + go_cmd_context_progress_message_set (cc, msg); } void @@ -313,7 +308,7 @@ value_io_progress_set (IOContext *ioc, gint total, gint step) g_return_if_fail (IS_IO_CONTEXT (ioc)); g_return_if_fail (total >= 0); - ioc->helper.helper_type = GNM_PROGRESS_HELPER_VALUE; + ioc->helper.helper_type = GO_PROGRESS_HELPER_VALUE; ioc->helper.v.value.total = MAX (total, 1); ioc->helper.v.value.last = -step; ioc->helper.v.value.step = step; @@ -326,7 +321,7 @@ value_io_progress_update (IOContext *ioc, gint value) gint step, total; g_return_if_fail (IS_IO_CONTEXT (ioc)); - g_return_if_fail (ioc->helper.helper_type == GNM_PROGRESS_HELPER_VALUE); + g_return_if_fail (ioc->helper.helper_type == GO_PROGRESS_HELPER_VALUE); total = ioc->helper.v.value.total; step = ioc->helper.v.value.step; @@ -347,7 +342,7 @@ count_io_progress_set (IOContext *ioc, gint total, gint step) g_return_if_fail (IS_IO_CONTEXT (ioc)); g_return_if_fail (total >= 0); - ioc->helper.helper_type = GNM_PROGRESS_HELPER_COUNT; + ioc->helper.helper_type = GO_PROGRESS_HELPER_COUNT; ioc->helper.v.count.total = MAX (total, 1); ioc->helper.v.count.last = -step; ioc->helper.v.count.current = 0; @@ -361,7 +356,7 @@ count_io_progress_update (IOContext *ioc, gint inc) gint current, step, total; g_return_if_fail (IS_IO_CONTEXT (ioc)); - g_return_if_fail (ioc->helper.helper_type == GNM_PROGRESS_HELPER_COUNT); + g_return_if_fail (ioc->helper.helper_type == GO_PROGRESS_HELPER_COUNT); current = (ioc->helper.v.count.current += inc); step = ioc->helper.v.count.step; @@ -376,57 +371,12 @@ count_io_progress_update (IOContext *ioc, gint inc) io_progress_update (ioc, complete); } -#if 0 -void -workbook_io_progress_set (IOContext *ioc, Workbook const *wb, gint step) -{ - gint n = 0; - GList *sheets, *l; - - g_return_if_fail (IS_IO_CONTEXT (ioc)); - g_return_if_fail (IS_WORKBOOK (wb)); - - sheets = workbook_sheets (wb); - for (l = sheets; l != NULL; l = l->next) { - Sheet *sheet = l->data; - n += g_hash_table_size (sheet->cell_hash); - } - g_list_free (sheets); - - ioc->helper.helper_type = GNM_PROGRESS_HELPER_WORKBOOK; - ioc->helper.v.workbook.n_elements = MAX (n, 1); - ioc->helper.v.workbook.last = -step; - ioc->helper.v.workbook.current = 0; - ioc->helper.v.workbook.step = step; -} - -void -workbook_io_progress_update (IOContext *ioc, gint inc) -{ - gdouble complete; - - g_return_if_fail (IS_IO_CONTEXT (ioc)); - g_return_if_fail (ioc->helper.helper_type == GNM_PROGRESS_HELPER_WORKBOOK); - - ioc->helper.v.workbook.current += inc; - if (ioc->helper.v.workbook.current - ioc->helper.v.workbook.last - < ioc->helper.v.workbook.step) { - return; - } - ioc->helper.v.workbook.last = ioc->helper.v.workbook.current; - - complete = 1.0 * ioc->helper.v.workbook.current - / ioc->helper.v.workbook.n_elements; - io_progress_update (ioc, complete); -} -#endif // 0 - void io_progress_unset (IOContext *ioc) { g_return_if_fail (IS_IO_CONTEXT (ioc)); - ioc->helper.helper_type = GNM_PROGRESS_HELPER_NONE; + ioc->helper.helper_type = GO_PROGRESS_HELPER_NONE; } void @@ -438,13 +388,23 @@ gnm_io_context_set_num_files (IOContext *ioc, guint count) klass->set_num_files (ioc, count); } +/** + * gnm_io_context_processing_file : + * @ioc : #IOContext + * @uri : An escaped uri (eg foo%20bar) + **/ void -gnm_io_context_processing_file (IOContext *ioc, char const *name) +gnm_io_context_processing_file (IOContext *ioc, char const *uri) { + char *basename; IOContextClass *klass = IOC_CLASS(ioc); + g_return_if_fail (klass != NULL); - if (klass->processing_file != NULL) - klass->processing_file (ioc, name); + + basename = go_basename_from_uri (uri); /* unescape the uri */ + if (basename != NULL && klass->processing_file != NULL) + klass->processing_file (ioc, basename); + g_free (basename); } void @@ -461,7 +421,7 @@ gnm_io_warning (G_GNUC_UNUSED IOContext *context, void gnm_io_warning_varargs (IOContext *context, char const *fmt, va_list args) { - context->info = error_info_new_vprintf (GNM_WARNING, fmt, args); + context->info = error_info_new_vprintf (GO_WARNING, fmt, args); context->warning_occurred = TRUE; } diff --git a/lib/goffice/split/io-context.h b/lib/goffice-0.0.4/goffice/app/io-context.h similarity index 83% rename from lib/goffice/split/io-context.h rename to lib/goffice-0.0.4/goffice/app/io-context.h index 34640d8961..6cdfdbe3a8 100644 --- a/lib/goffice/split/io-context.h +++ b/lib/goffice-0.0.4/goffice/app/io-context.h @@ -1,11 +1,12 @@ -#ifndef GNUMERIC_IO_CONTEXT_H -#define GNUMERIC_IO_CONTEXT_H +#ifndef GO_IO_CONTEXT_H +#define GO_IO_CONTEXT_H -#include "gnumeric.h" +#include #include #include -/* typedef struct _IOContext IOContext; */ +G_BEGIN_DECLS + typedef struct _IOContextClass IOContextClass; #define TYPE_IO_CONTEXT (io_context_get_type ()) @@ -13,7 +14,7 @@ typedef struct _IOContextClass IOContextClass; #define IS_IO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IO_CONTEXT)) GType io_context_get_type (void); -IOContext *gnumeric_io_context_new (GnmCmdContext *cc); +IOContext *gnumeric_io_context_new (GOCmdContext *cc); void gnumeric_io_error_unknown (IOContext *ioc); @@ -37,17 +38,16 @@ void count_io_progress_update (IOContext *io_context, gint inc); void value_io_progress_set (IOContext *io_context, gint total, gint step); void value_io_progress_update (IOContext *io_context, gint value); -void workbook_io_progress_set (IOContext *io_context, Workbook const *wb, gint step); -void workbook_io_progress_update (IOContext *io_context, gint inc); - void io_progress_unset (IOContext *io_context); void gnm_io_context_set_num_files (IOContext *ioc, guint count); -void gnm_io_context_processing_file (IOContext *ioc, char const *name); +void gnm_io_context_processing_file (IOContext *ioc, char const *uri); void gnm_io_warning (IOContext *ioc, char const *fmt, ...) G_GNUC_PRINTF (2, 3); void gnm_io_warning_varargs (IOContext *ioc, char const *fmt, va_list args); void gnm_io_warning_unknown_font (IOContext *ioc, char const *font_name); void gnm_io_warning_unknown_function (IOContext *ioc, char const *funct_name); void gnm_io_warning_unsupported_feature (IOContext *ioc, char const *feature); -#endif /* GNUMERIC_IO_CONTEXT_H */ +G_END_DECLS + +#endif /* GO_IO_CONTEXT_H */ diff --git a/lib/goffice-0.0.4/goffice/app/module-plugin-defs.h b/lib/goffice-0.0.4/goffice/app/module-plugin-defs.h new file mode 100644 index 0000000000..e071b9a7d3 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/app/module-plugin-defs.h @@ -0,0 +1,39 @@ +#ifndef GOFFICE_MODULE_PLUGIN_DEFS_H +#define GOFFICE_MODULE_PLUGIN_DEFS_H + +#include +#include +#include + +G_BEGIN_DECLS + +void go_plugin_init (GOPlugin *p, GOCmdContext *cc); /* optional, called after dlopen */ +void go_plugin_shutdown (GOPlugin *p, GOCmdContext *cc); /* optional, called before close */ + +typedef struct { + char const * const key; /* object being versioned */ + char const * const version; /* version id (strict equality is required) */ +} GOPluginModuleDepend; +typedef struct { + guint32 const magic_number; + guint32 const num_depends; +} GOPluginModuleHeader; + +/* Cheesy api versioning + * bump this when external api changes. eventually we will just push this out + * into the module's link dependencies */ +#define GOFFICE_API_VERSION "0.0" + +#define GOFFICE_MODULE_PLUGIN_MAGIC_NUMBER 0x476e756d + +/* convenience header for goffice plugins */ +#define GOFFICE_PLUGIN_MODULE_HEADER \ +G_MODULE_EXPORT GOPluginModuleDepend const go_plugin_depends [] = { \ + { "goffice", GOFFICE_API_VERSION } \ +}; \ +G_MODULE_EXPORT GOPluginModuleHeader const go_plugin_header = \ + { GOFFICE_MODULE_PLUGIN_MAGIC_NUMBER, G_N_ELEMENTS (go_plugin_depends) } + +G_END_DECLS + +#endif /* GOFFICE_MODULE_PLUGIN_DEFS_H */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/Makefile.am b/lib/goffice-0.0.4/goffice/cut-n-paste/Makefile.am new file mode 100644 index 0000000000..9833ad4710 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = pcre foocanvas diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/Makefile.am b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/Makefile.am new file mode 100644 index 0000000000..c07430fdd9 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/Makefile.am @@ -0,0 +1,68 @@ +AM_CPPFLAGS = \ + -I$(top_srcdir)/lib/libgsf-1.12.3 \ + -I$(top_srcdir)/lib/goffice-0.0.4 \ + -I$(top_builddir)/lib/goffice-0.0.4 \ + $(WARN_CFLAGS) \ + $(GOFFICE_DEPS_CFLAGS) \ + -DFOOCANVASLIBDIR=\""$(libdir)"\" \ + -DFOOCANVASDATADIR=\""$(datadir)"\" \ + -DFOOCANVASPIXMAPDIR=\""$(datadir)/pixmaps"\" \ + -DFOOCANVASBINDIR=\""$(bindir)"\" \ + -DFOOCANVASLOCALSTATEDIR=\""$(localstatedir)"\" \ + -DFOOCANVASLOCALEDIR=\""$(gnomelocaledir)"\" \ + -DG_LOG_DOMAIN=\"Foocanvas\" \ + -DVERSION=\"$(VERSION)\" + +noinst_LTLIBRARIES = libfoocanvas.la + +libfoocanvas_la_LIBADD = \ + $(RENDER_LIBS) \ + $(LIBFOOCANVAS_LIBS) + +libfoocanvasincludedir = $(includedir)/libgoffice-1/goffice/cut-n-paste/foocanvas/ + +libfoocanvasinclude_HEADERS = \ + foo-canvas-line.h \ + foo-canvas-pixbuf.h \ + foo-canvas-polygon.h \ + foo-canvas-rect-ellipse.h \ + foo-canvas-text.h \ + foo-canvas-util.h \ + foo-canvas-widget.h \ + foo-canvas.h \ + libfoocanvas.h + +libfoocanvas_la_SOURCES = \ + $(libfoocanvasinclude_HEADERS) \ + foo-canvas-marshal.list \ + foo-canvas-i18n.h \ + foo-canvas-line.c \ + foo-canvas-pixbuf.c \ + foo-canvas-polygon.c \ + foo-canvas-rect-ellipse.c \ + foo-canvas-text.c \ + foo-canvas-util.c \ + foo-canvas-widget.c \ + foo-canvas.c \ + libfoocanvastypes.c + +GENMARSHAL_COMMAND = $(GLIB_GENMARSHAL) --prefix=foo_canvas_marshal +SUFFIXES = .list + +.list.h: + $(GENMARSHAL_COMMAND) --header $< >$@ + +.list.c: + (echo '/* This file has been automatically generated. Do not edit. */' && \ + echo '#include ' && \ + echo '#include "$*.h"' && \ + $(GENMARSHAL_COMMAND) --body $< ) >$@ + +# A hint is needed to build the header first: +BUILT_SOURCES = foo-canvas-marshal.h + +# Another hint, see bugs #172211 and #172212: +non-intermediate: foo-canvas-marshal.c + +CLEANFILES = foo-canvas-marshal.h foo-canvas-marshal.c + diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-i18n.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-i18n.h new file mode 100644 index 0000000000..662b0ed0fa --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-i18n.h @@ -0,0 +1,70 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ + +/* + * Handles all of the internationalization configuration options. + * Author: Tom Tromey + */ + +#ifndef __LIBFOO_CANVAS_I18N_H__ +#define __LIBFOO_CANVAS_I18N_H__ + +#include + +G_BEGIN_DECLS + +#if !defined(__LIBFOO_CANVAS_I18NP_H__) + +#ifdef ENABLE_NLS +# include +# ifdef GNOME_EXPLICIT_TRANSLATION_DOMAIN +# undef _ +# define _(String) dgettext (GNOME_EXPLICIT_TRANSLATION_DOMAIN, String) +# else +# define _(String) gettext (String) +# endif +# ifdef gettext_noop +# define N_(String) gettext_noop (String) +# else +# define N_(String) (String) +# endif +#else +/* Stubs that do something close enough. */ +# define textdomain(String) (String) +# define gettext(String) (String) +# define dgettext(Domain,Message) (Message) +# define dcgettext(Domain,Message,Type) (Message) +# define bindtextdomain(Domain,Directory) (Domain) +# define _(String) (String) +# define N_(String) (String) +#endif + +#endif + +G_END_DECLS + +#endif /* __LIBFOO_CANVAS_I18N_H__ */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.c new file mode 100644 index 0000000000..5f4fc1d19d --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.c @@ -0,0 +1,1317 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#undef GTK_DISABLE_DEPRECATED +#include +#include +#include +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ + +/* Line/curve item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#include +#include +#include "libfoocanvas.h" + +#define noVERBOSE + +#define DEFAULT_SPLINE_STEPS 12 /* this is what Tk uses */ +#define NUM_ARROW_POINTS 6 /* number of points in an arrowhead */ +#define NUM_STATIC_POINTS 256 /* number of static points to use to avoid allocating arrays */ + + +#define GROW_BOUNDS(bx1, by1, bx2, by2, x, y) { \ + if (x < bx1) \ + bx1 = x; \ + \ + if (x > bx2) \ + bx2 = x; \ + \ + if (y < by1) \ + by1 = y; \ + \ + if (y > by2) \ + by2 = y; \ +} + + +enum { + PROP_0, + PROP_POINTS, + PROP_FILL_COLOR, + PROP_FILL_COLOR_GDK, + PROP_FILL_COLOR_RGBA, + PROP_FILL_STIPPLE, + PROP_WIDTH_PIXELS, + PROP_WIDTH_UNITS, + PROP_CAP_STYLE, + PROP_JOIN_STYLE, + PROP_LINE_STYLE, + PROP_FIRST_ARROWHEAD, + PROP_LAST_ARROWHEAD, + PROP_SMOOTH, + PROP_SPLINE_STEPS, + PROP_ARROW_SHAPE_A, + PROP_ARROW_SHAPE_B, + PROP_ARROW_SHAPE_C +}; + + +static void foo_canvas_line_class_init (FooCanvasLineClass *class); +static void foo_canvas_line_init (FooCanvasLine *line); +static void foo_canvas_line_destroy (GtkObject *object); +static void foo_canvas_line_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void foo_canvas_line_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); + +static void foo_canvas_line_update (FooCanvasItem *item, + double i2w_dx, double i2w_dy, + int flags); +static void foo_canvas_line_realize (FooCanvasItem *item); +static void foo_canvas_line_unrealize (FooCanvasItem *item); +static void foo_canvas_line_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *event); +static double foo_canvas_line_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item); +static void foo_canvas_line_translate (FooCanvasItem *item, double dx, double dy); +static void foo_canvas_line_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2); + + +static FooCanvasItemClass *parent_class; + + +GtkType +foo_canvas_line_get_type (void) +{ + static GtkType line_type = 0; + + if (!line_type) { + /* FIXME: Convert to gobject style. */ + static const GtkTypeInfo line_info = { + (char *)"FooCanvasLine", + sizeof (FooCanvasLine), + sizeof (FooCanvasLineClass), + (GtkClassInitFunc) foo_canvas_line_class_init, + (GtkObjectInitFunc) foo_canvas_line_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + line_type = gtk_type_unique (foo_canvas_item_get_type (), &line_info); + } + + return line_type; +} + +static void +foo_canvas_line_class_init (FooCanvasLineClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + parent_class = gtk_type_class (foo_canvas_item_get_type ()); + + gobject_class->set_property = foo_canvas_line_set_property; + gobject_class->get_property = foo_canvas_line_get_property; + + g_object_class_install_property + (gobject_class, + PROP_POINTS, + g_param_spec_boxed ("points", NULL, NULL, + FOO_TYPE_CANVAS_POINTS, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR, + g_param_spec_string ("fill-color", NULL, NULL, + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_GDK, + g_param_spec_boxed ("fill-color-gdk", NULL, NULL, + GDK_TYPE_COLOR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_RGBA, + g_param_spec_uint ("fill-color-rgba", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_STIPPLE, + g_param_spec_object ("fill-stipple", NULL, NULL, + GDK_TYPE_DRAWABLE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_PIXELS, + g_param_spec_uint ("width-pixels", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_UNITS, + g_param_spec_double ("width-units", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_CAP_STYLE, + g_param_spec_enum ("cap-style", NULL, NULL, + GDK_TYPE_CAP_STYLE, + GDK_CAP_BUTT, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_JOIN_STYLE, + g_param_spec_enum ("join-style", NULL, NULL, + GDK_TYPE_JOIN_STYLE, + GDK_JOIN_MITER, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_LINE_STYLE, + g_param_spec_enum ("line-style", NULL, NULL, + GDK_TYPE_LINE_STYLE, + GDK_LINE_SOLID, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FIRST_ARROWHEAD, + g_param_spec_boolean ("first-arrowhead", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_LAST_ARROWHEAD, + g_param_spec_boolean ("last-arrowhead", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_SMOOTH, + g_param_spec_boolean ("smooth", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_SPLINE_STEPS, + g_param_spec_uint ("spline-steps", NULL, NULL, + 0, G_MAXUINT, DEFAULT_SPLINE_STEPS, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_ARROW_SHAPE_A, + g_param_spec_double ("arrow-shape-a", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_ARROW_SHAPE_B, + g_param_spec_double ("arrow-shape-b", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_ARROW_SHAPE_C, + g_param_spec_double ("arrow-shape-c", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + object_class->destroy = foo_canvas_line_destroy; + + item_class->update = foo_canvas_line_update; + item_class->realize = foo_canvas_line_realize; + item_class->unrealize = foo_canvas_line_unrealize; + item_class->draw = foo_canvas_line_draw; + item_class->point = foo_canvas_line_point; + item_class->translate = foo_canvas_line_translate; + item_class->bounds = foo_canvas_line_bounds; +} + +static void +foo_canvas_line_init (FooCanvasLine *line) +{ + line->width = 0.0; + line->cap = GDK_CAP_BUTT; + line->join = GDK_JOIN_MITER; + line->line_style = GDK_LINE_SOLID; + line->shape_a = 0.0; + line->shape_b = 0.0; + line->shape_c = 0.0; + line->spline_steps = DEFAULT_SPLINE_STEPS; +} + +static void +foo_canvas_line_destroy (GtkObject *object) +{ + FooCanvasLine *line; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_LINE (object)); + + line = FOO_CANVAS_LINE (object); + + /* remember, destroy can be run multiple times! */ + + if (line->coords) + g_free (line->coords); + line->coords = NULL; + + if (line->first_coords) + g_free (line->first_coords); + line->first_coords = NULL; + + if (line->last_coords) + g_free (line->last_coords); + line->last_coords = NULL; + + if (line->stipple) + g_object_unref (line->stipple); + line->stipple = NULL; + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + +/* Computes the bounding box of the line, including its arrow points. Assumes that the number of + * points in the line is not zero. + */ +static void +get_bounds (FooCanvasLine *line, double *bx1, double *by1, double *bx2, double *by2) +{ + double *coords; + double x1, y1, x2, y2; + double width; + int i; + + if (!line->coords) { + *bx1 = *by1 = *bx2 = *by2 = 0.0; + return; + } + + /* Find bounding box of line's points */ + + x1 = x2 = line->coords[0]; + y1 = y2 = line->coords[1]; + + for (i = 1, coords = line->coords + 2; i < line->num_points; i++, coords += 2) + GROW_BOUNDS (x1, y1, x2, y2, coords[0], coords[1]); + + /* Add possible over-estimate for wide lines */ + + if (line->width_pixels) + width = line->width / line->item.canvas->pixels_per_unit; + else + width = line->width; + + x1 -= width; + y1 -= width; + x2 += width; + y2 += width; + + /* For mitered lines, make a second pass through all the points. Compute the location of + * the two miter vertex points and add them to the bounding box. + */ + + if (line->join == GDK_JOIN_MITER) + for (i = line->num_points, coords = line->coords; i >= 3; i--, coords += 2) { + double mx1, my1, mx2, my2; + + if (foo_canvas_get_miter_points (coords[0], coords[1], + coords[2], coords[3], + coords[4], coords[5], + width, + &mx1, &my1, &mx2, &my2)) { + GROW_BOUNDS (x1, y1, x2, y2, mx1, my1); + GROW_BOUNDS (x1, y1, x2, y2, mx2, my2); + } + } + + /* Add the arrow points, if any */ + + if (line->first_arrow && line->first_coords) + for (i = 0, coords = line->first_coords; i < NUM_ARROW_POINTS; i++, coords += 2) + GROW_BOUNDS (x1, y1, x2, y2, coords[0], coords[1]); + + if (line->last_arrow && line->last_coords) + for (i = 0, coords = line->last_coords; i < NUM_ARROW_POINTS; i++, coords += 2) + GROW_BOUNDS (x1, y1, x2, y2, coords[0], coords[1]); + + /* Done */ + + *bx1 = x1; + *by1 = y1; + *bx2 = x2; + *by2 = y2; +} + +/* Computes the bounding box of the line, in canvas coordinates. Assumes that the number of points in the polygon is + * not zero. + */ +static void +get_bounds_canvas (FooCanvasLine *line, + double *bx1, double *by1, double *bx2, double *by2, + double i2w_dx, double i2w_dy) +{ + FooCanvasItem *item; + double bbox_x0, bbox_y0, bbox_x1, bbox_y1; + + item = FOO_CANVAS_ITEM (line); + + get_bounds (line, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1); + + bbox_x0 += i2w_dx; + bbox_y0 += i2w_dy; + bbox_x1 += i2w_dx; + bbox_y1 += i2w_dy; + + foo_canvas_w2c_rect_d (item->canvas, + &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1); + + /* include 1 pixel of fudge */ + *bx1 = bbox_x0 - 1; + *by1 = bbox_y0 - 1; + *bx2 = bbox_x1 + 1; + *by2 = bbox_y1 + 1; +} + +/* Recalculates the arrow polygons for the line */ +static void +reconfigure_arrows (FooCanvasLine *line) +{ + double *poly, *coords; + double dx, dy, length; + double sin_theta, cos_theta, tmp; + double frac_height; /* Line width as fraction of arrowhead width */ + double backup; /* Distance to backup end points so the line ends in the middle of the arrowhead */ + double vx, vy; /* Position of arrowhead vertex */ + double shape_a, shape_b, shape_c; + double width; + int i; + + if (line->num_points == 0) + return; + + /* Set up things */ + + if (line->first_arrow) { + if (line->first_coords) { + line->coords[0] = line->first_coords[0]; + line->coords[1] = line->first_coords[1]; + } else + line->first_coords = g_new (double, 2 * NUM_ARROW_POINTS); + } else if (line->first_coords) { + line->coords[0] = line->first_coords[0]; + line->coords[1] = line->first_coords[1]; + + g_free (line->first_coords); + line->first_coords = NULL; + } + + i = 2 * (line->num_points - 1); + + if (line->last_arrow) { + if (line->last_coords) { + line->coords[i] = line->last_coords[0]; + line->coords[i + 1] = line->last_coords[1]; + } else + line->last_coords = g_new (double, 2 * NUM_ARROW_POINTS); + } else if (line->last_coords) { + line->coords[i] = line->last_coords[0]; + line->coords[i + 1] = line->last_coords[1]; + + g_free (line->last_coords); + line->last_coords = NULL; + } + + if (!line->first_arrow && !line->last_arrow) + return; + + if (line->width_pixels) + width = line->width / line->item.canvas->pixels_per_unit; + else + width = line->width; + + /* Add fudge value for better-looking results */ + + shape_a = line->shape_a; + shape_b = line->shape_b; + shape_c = line->shape_c + width / 2.0; + + if (line->width_pixels) { + shape_a /= line->item.canvas->pixels_per_unit; + shape_b /= line->item.canvas->pixels_per_unit; + shape_c /= line->item.canvas->pixels_per_unit; + } + + shape_a += 0.001; + shape_b += 0.001; + shape_c += 0.001; + + /* Compute the polygon for the first arrowhead and adjust the first point in the line so + * that the line does not stick out past the leading edge of the arrowhead. + */ + + frac_height = (line->width / 2.0) / shape_c; + backup = frac_height * shape_b + shape_a * (1.0 - frac_height) / 2.0; + + if (line->first_arrow) { + poly = line->first_coords; + poly[0] = poly[10] = line->coords[0]; + poly[1] = poly[11] = line->coords[1]; + + dx = poly[0] - line->coords[2]; + dy = poly[1] - line->coords[3]; + length = sqrt (dx * dx + dy * dy); + if (length < FOO_CANVAS_EPSILON) + sin_theta = cos_theta = 0.0; + else { + sin_theta = dy / length; + cos_theta = dx / length; + } + + vx = poly[0] - shape_a * cos_theta; + vy = poly[1] - shape_a * sin_theta; + + tmp = shape_c * sin_theta; + + poly[2] = poly[0] - shape_b * cos_theta + tmp; + poly[8] = poly[2] - 2.0 * tmp; + + tmp = shape_c * cos_theta; + + poly[3] = poly[1] - shape_b * sin_theta - tmp; + poly[9] = poly[3] + 2.0 * tmp; + + poly[4] = poly[2] * frac_height + vx * (1.0 - frac_height); + poly[5] = poly[3] * frac_height + vy * (1.0 - frac_height); + poly[6] = poly[8] * frac_height + vx * (1.0 - frac_height); + poly[7] = poly[9] * frac_height + vy * (1.0 - frac_height); + + /* Move the first point towards the second so that the corners at the end of the + * line are inside the arrowhead. + */ + + line->coords[0] = poly[0] - backup * cos_theta; + line->coords[1] = poly[1] - backup * sin_theta; + } + + /* Same process for last arrowhead */ + + if (line->last_arrow) { + coords = line->coords + 2 * (line->num_points - 2); + poly = line->last_coords; + poly[0] = poly[10] = coords[2]; + poly[1] = poly[11] = coords[3]; + + dx = poly[0] - coords[0]; + dy = poly[1] - coords[1]; + length = sqrt (dx * dx + dy * dy); + if (length < FOO_CANVAS_EPSILON) + sin_theta = cos_theta = 0.0; + else { + sin_theta = dy / length; + cos_theta = dx / length; + } + + vx = poly[0] - shape_a * cos_theta; + vy = poly[1] - shape_a * sin_theta; + + tmp = shape_c * sin_theta; + + poly[2] = poly[0] - shape_b * cos_theta + tmp; + poly[8] = poly[2] - 2.0 * tmp; + + tmp = shape_c * cos_theta; + + poly[3] = poly[1] - shape_b * sin_theta - tmp; + poly[9] = poly[3] + 2.0 * tmp; + + poly[4] = poly[2] * frac_height + vx * (1.0 - frac_height); + poly[5] = poly[3] * frac_height + vy * (1.0 - frac_height); + poly[6] = poly[8] * frac_height + vx * (1.0 - frac_height); + poly[7] = poly[9] * frac_height + vy * (1.0 - frac_height); + + coords[2] = poly[0] - backup * cos_theta; + coords[3] = poly[1] - backup * sin_theta; + } +} + +/* Convenience function to set the line's GC's foreground color */ +static void +set_line_gc_foreground (FooCanvasLine *line) +{ + GdkColor c; + + if (!line->gc) + return; + + c.pixel = line->fill_pixel; + gdk_gc_set_foreground (line->gc, &c); +} + +/* Recalculate the line's width and set it in its GC */ +static void +set_line_gc_width (FooCanvasLine *line) +{ + int width; + + if (!line->gc) + return; + + if (line->width_pixels) + width = (int) line->width; + else + width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5); + + gdk_gc_set_line_attributes (line->gc, + width, + line->line_style, + (line->first_arrow || line->last_arrow) ? GDK_CAP_BUTT : line->cap, + line->join); +} + +/* Sets the stipple pattern for the line */ +static void +set_stipple (FooCanvasLine *line, GdkBitmap *stipple, int reconfigure) +{ + if (line->stipple && !reconfigure) + g_object_unref (line->stipple); + + line->stipple = stipple; + if (stipple && !reconfigure) + g_object_ref (stipple); + + if (line->gc) { + if (stipple) { + gdk_gc_set_stipple (line->gc, stipple); + gdk_gc_set_fill (line->gc, GDK_STIPPLED); + } else + gdk_gc_set_fill (line->gc, GDK_SOLID); + } +} + +static void +foo_canvas_line_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasLine *line; + FooCanvasPoints *points; + GdkColor color = { 0, 0, 0, 0, }; + GdkColor *pcolor; + gboolean color_changed; + int have_pixel; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_LINE (object)); + + item = FOO_CANVAS_ITEM (object); + line = FOO_CANVAS_LINE (object); + + color_changed = FALSE; + have_pixel = FALSE; + + switch (param_id) { + case PROP_POINTS: + points = g_value_get_boxed (value); + + if (line->coords) { + g_free (line->coords); + line->coords = NULL; + } + + if (!points) + line->num_points = 0; + else { + line->num_points = points->num_points; + line->coords = g_new (double, 2 * line->num_points); + memcpy (line->coords, points->coords, 2 * line->num_points * sizeof (double)); + } + + /* Drop the arrowhead polygons if they exist -- they will be regenerated */ + + if (line->first_coords) { + g_free (line->first_coords); + line->first_coords = NULL; + } + + if (line->last_coords) { + g_free (line->last_coords); + line->last_coords = NULL; + } + + /* Since the line's points have changed, we need to re-generate arrowheads in + * addition to recalculating the bounds. + */ + foo_canvas_item_request_update (item); + break; + + case PROP_FILL_COLOR: + if (g_value_get_string (value)) + gdk_color_parse (g_value_get_string (value), &color); + line->fill_rgba = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + color_changed = TRUE; + break; + + case PROP_FILL_COLOR_GDK: + pcolor = g_value_get_boxed (value); + if (pcolor) { + GdkColormap *colormap; + color = *pcolor; + + colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + gdk_rgb_find_color (colormap, &color); + + have_pixel = TRUE; + } + + line->fill_rgba = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + color_changed = TRUE; + break; + + case PROP_FILL_COLOR_RGBA: + line->fill_rgba = g_value_get_uint (value); + color_changed = TRUE; + break; + + case PROP_FILL_STIPPLE: + set_stipple (line, (GdkBitmap *) g_value_get_object (value), FALSE); + foo_canvas_item_request_redraw (item); + break; + + case PROP_WIDTH_PIXELS: + line->width = g_value_get_uint (value); + line->width_pixels = TRUE; + set_line_gc_width (line); + foo_canvas_item_request_update (item); + break; + + case PROP_WIDTH_UNITS: + line->width = fabs (g_value_get_double (value)); + line->width_pixels = FALSE; + set_line_gc_width (line); + foo_canvas_item_request_update (item); + break; + + case PROP_CAP_STYLE: + line->cap = g_value_get_enum (value); + foo_canvas_item_request_update (item); + break; + + case PROP_JOIN_STYLE: + line->join = g_value_get_enum (value); + foo_canvas_item_request_update (item); + break; + + case PROP_LINE_STYLE: + line->line_style = g_value_get_enum (value); + set_line_gc_width (line); + foo_canvas_item_request_update (item); + break; + + case PROP_FIRST_ARROWHEAD: + line->first_arrow = g_value_get_boolean (value); + foo_canvas_item_request_update (item); + break; + + case PROP_LAST_ARROWHEAD: + line->last_arrow = g_value_get_boolean (value); + foo_canvas_item_request_update (item); + break; + + case PROP_SMOOTH: + /* FIXME */ + break; + + case PROP_SPLINE_STEPS: + /* FIXME */ + break; + + case PROP_ARROW_SHAPE_A: + line->shape_a = fabs (g_value_get_double (value)); + foo_canvas_item_request_update (item); + break; + + case PROP_ARROW_SHAPE_B: + line->shape_b = fabs (g_value_get_double (value)); + foo_canvas_item_request_update (item); + break; + + case PROP_ARROW_SHAPE_C: + line->shape_c = fabs (g_value_get_double (value)); + foo_canvas_item_request_update (item); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } + + if (color_changed) { + if (have_pixel) + line->fill_pixel = color.pixel; + else + line->fill_pixel = foo_canvas_get_color_pixel (item->canvas, + line->fill_rgba); + + set_line_gc_foreground (line); + + foo_canvas_item_request_redraw (item); + } +} + +/* Returns a copy of the line's points without the endpoint adjustments for + * arrowheads. + */ +static FooCanvasPoints * +get_points (FooCanvasLine *line) +{ + FooCanvasPoints *points; + int start_ofs, end_ofs; + + if (line->num_points == 0) + return NULL; + + start_ofs = end_ofs = 0; + + points = foo_canvas_points_new (line->num_points); + + /* Invariant: if first_coords or last_coords exist, then the line's + * endpoints have been adjusted. + */ + + if (line->first_coords) { + start_ofs = 1; + + points->coords[0] = line->first_coords[0]; + points->coords[1] = line->first_coords[1]; + } + + if (line->last_coords) { + end_ofs = 1; + + points->coords[2 * (line->num_points - 1)] = line->last_coords[0]; + points->coords[2 * (line->num_points - 1) + 1] = line->last_coords[1]; + } + + memcpy (points->coords + 2 * start_ofs, + line->coords + 2 * start_ofs, + 2 * (line->num_points - (start_ofs + end_ofs)) * sizeof (double)); + + return points; +} + +static void +foo_canvas_line_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + FooCanvasLine *line; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_LINE (object)); + + line = FOO_CANVAS_LINE (object); + + switch (param_id) { + case PROP_POINTS: + g_value_set_boxed (value, get_points (line)); + break; + + case PROP_FILL_COLOR: + g_value_take_string (value, + g_strdup_printf ("#%02x%02x%02x", + line->fill_rgba >> 24, + (line->fill_rgba >> 16) & 0xff, + (line->fill_rgba >> 8) & 0xff)); + break; + + case PROP_FILL_COLOR_GDK: { + FooCanvas *canvas = FOO_CANVAS_ITEM (line)->canvas; + GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (canvas)); + GdkColor color; + + gdk_colormap_query_color (colormap, line->fill_pixel, &color); + g_value_set_boxed (value, &color); + break; + } + + case PROP_FILL_COLOR_RGBA: + g_value_set_uint (value, line->fill_rgba); + break; + + case PROP_FILL_STIPPLE: + g_value_set_object (value, line->stipple); + break; + + case PROP_WIDTH_PIXELS: + g_value_set_uint (value, line->width); + break; + + case PROP_WIDTH_UNITS: + g_value_set_double (value, line->width); + break; + + case PROP_CAP_STYLE: + g_value_set_enum (value, line->cap); + break; + + case PROP_JOIN_STYLE: + g_value_set_enum (value, line->join); + break; + + case PROP_LINE_STYLE: + g_value_set_enum (value, line->line_style); + break; + + case PROP_FIRST_ARROWHEAD: + g_value_set_boolean (value, line->first_arrow); + break; + + case PROP_LAST_ARROWHEAD: + g_value_set_boolean (value, line->last_arrow); + break; + + case PROP_SMOOTH: + g_value_set_boolean (value, line->smooth); + break; + + case PROP_SPLINE_STEPS: + g_value_set_uint (value, line->spline_steps); + break; + + case PROP_ARROW_SHAPE_A: + g_value_set_double (value, line->shape_a); + break; + + case PROP_ARROW_SHAPE_B: + g_value_set_double (value, line->shape_b); + break; + + case PROP_ARROW_SHAPE_C: + g_value_set_double (value, line->shape_c); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +static void +foo_canvas_line_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) +{ + FooCanvasLine *line; + double x1, y1, x2, y2; + + line = FOO_CANVAS_LINE (item); + + if (parent_class->update) + (* parent_class->update) (item, i2w_dx, i2w_dy, flags); + + reconfigure_arrows (line); + + set_line_gc_foreground (line); + set_line_gc_width (line); + set_stipple (line, line->stipple, TRUE); + + get_bounds_canvas (line, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy); + foo_canvas_update_bbox (item, x1, y1, x2, y2); +} + +static void +foo_canvas_line_realize (FooCanvasItem *item) +{ + FooCanvasLine *line; + + line = FOO_CANVAS_LINE (item); + + if (parent_class->realize) + (* parent_class->realize) (item); + + line->gc = gdk_gc_new (item->canvas->layout.bin_window); +//#warning "FIXME: Need to recalc pixel values, set colours, etc." + +#if 0 + (* FOO_CANVAS_ITEM_CLASS (item->object.klass)->update) (item, NULL, NULL, 0); +#endif +} + +static void +foo_canvas_line_unrealize (FooCanvasItem *item) +{ + FooCanvasLine *line; + + line = FOO_CANVAS_LINE (item); + + g_object_unref (line->gc); + line->gc = NULL; + + if (parent_class->unrealize) + (* parent_class->unrealize) (item); +} + +static void +item_to_canvas (FooCanvas *canvas, double *item_coords, GdkPoint *canvas_coords, int num_points, + int *num_drawn_points, double i2w_dx, double i2w_dy) +{ + int i; + int old_cx, old_cy; + int cx, cy; + + /* the first point is always drawn */ + foo_canvas_w2c (canvas, + item_coords[0] + i2w_dx, + item_coords[1] + i2w_dy, + &canvas_coords->x, &canvas_coords->y); + old_cx = canvas_coords->x; + old_cy = canvas_coords->y; + canvas_coords++; + *num_drawn_points = 1; + + for (i = 1; i < num_points; i++) { + foo_canvas_w2c (canvas, + item_coords[i*2] + i2w_dx, + item_coords[i*2+1] + i2w_dy, + &cx, &cy); + if (old_cx != cx || old_cy != cy) { + canvas_coords->x = cx; + canvas_coords->y = cy; + old_cx = cx; + old_cy = cy; + canvas_coords++; + (*num_drawn_points)++; + } + } +} + +static void +foo_canvas_line_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *event) +{ + FooCanvasLine *line; + GdkPoint static_points[NUM_STATIC_POINTS]; + GdkPoint *points; + int actual_num_points_drawn; + double i2w_dx, i2w_dy; + + line = FOO_CANVAS_LINE (item); + + if (line->num_points == 0) + return; + + /* Build array of canvas pixel coordinates */ + + if (line->num_points <= NUM_STATIC_POINTS) + points = static_points; + else + points = g_new (GdkPoint, line->num_points); + + i2w_dx = 0.0; + i2w_dy = 0.0; + foo_canvas_item_i2w (item, &i2w_dx, &i2w_dy); + + item_to_canvas (item->canvas, line->coords, points, line->num_points, + &actual_num_points_drawn, i2w_dx, i2w_dy); + + if (line->stipple) + foo_canvas_set_stipple_origin (item->canvas, line->gc); + + gdk_draw_lines (drawable, line->gc, points, actual_num_points_drawn); + + if (points != static_points) + g_free (points); + + /* Draw arrowheads */ + + points = static_points; + + if (line->first_arrow) { + item_to_canvas (item->canvas, line->first_coords, points, NUM_ARROW_POINTS, + &actual_num_points_drawn, i2w_dx, i2w_dy); + gdk_draw_polygon (drawable, line->gc, TRUE, points, actual_num_points_drawn ); + } + + if (line->last_arrow) { + item_to_canvas (item->canvas, line->last_coords, points, NUM_ARROW_POINTS, + &actual_num_points_drawn, i2w_dx, i2w_dy); + gdk_draw_polygon (drawable, line->gc, TRUE, points, actual_num_points_drawn ); + } +} + +static double +foo_canvas_line_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item) +{ + FooCanvasLine *line; + double *line_points = NULL, *coords; + double static_points[2 * NUM_STATIC_POINTS]; + double poly[10]; + double best, dist; + double dx, dy; + double width; + int num_points = 0, i; + int changed_miter_to_bevel; + +#ifdef VERBOSE + g_print ("foo_canvas_line_point x, y = (%g, %g); cx, cy = (%d, %d)\n", x, y, cx, cy); +#endif + + line = FOO_CANVAS_LINE (item); + + *actual_item = item; + + best = 1.0e36; + + /* Handle smoothed lines by generating an expanded set ot points */ + + if (line->smooth && (line->num_points > 2)) { + /* FIXME */ + } else { + num_points = line->num_points; + line_points = line->coords; + } + + /* Compute a polygon for each edge of the line and test the point against it. The effective + * width of the line is adjusted so that it will be at least one pixel thick (so that zero + * pixel-wide lines can be pickedup as well). + */ + + if (line->width_pixels) + width = line->width / item->canvas->pixels_per_unit; + else + width = line->width; + + if (width < (1.0 / item->canvas->pixels_per_unit)) + width = 1.0 / item->canvas->pixels_per_unit; + + changed_miter_to_bevel = 0; + + for (i = num_points, coords = line_points; i >= 2; i--, coords += 2) { + /* If rounding is done around the first point, then compute distance between the + * point and the first point. + */ + + if (((line->cap == GDK_CAP_ROUND) && (i == num_points)) + || ((line->join == GDK_JOIN_ROUND) && (i != num_points))) { + dx = coords[0] - x; + dy = coords[1] - y; + dist = sqrt (dx * dx + dy * dy) - width / 2.0; + if (dist < FOO_CANVAS_EPSILON) { + best = 0.0; + goto done; + } else if (dist < best) + best = dist; + } + + /* Compute the polygonal shape corresponding to this edge, with two points for the + * first point of the edge and two points for the last point of the edge. + */ + + if (i == num_points) + foo_canvas_get_butt_points (coords[2], coords[3], coords[0], coords[1], + width, (line->cap == GDK_CAP_PROJECTING), + poly, poly + 1, poly + 2, poly + 3); + else if ((line->join == GDK_JOIN_MITER) && !changed_miter_to_bevel) { + poly[0] = poly[6]; + poly[1] = poly[7]; + poly[2] = poly[4]; + poly[3] = poly[5]; + } else { + foo_canvas_get_butt_points (coords[2], coords[3], coords[0], coords[1], + width, FALSE, + poly, poly + 1, poly + 2, poly + 3); + + /* If this line uses beveled joints, then check the distance to a polygon + * comprising the last two points of the previous polygon and the first two + * from this polygon; this checks the wedges that fill the mitered point. + */ + + if ((line->join == GDK_JOIN_BEVEL) || changed_miter_to_bevel) { + poly[8] = poly[0]; + poly[9] = poly[1]; + + dist = foo_canvas_polygon_to_point (poly, 5, x, y); + if (dist < FOO_CANVAS_EPSILON) { + best = 0.0; + goto done; + } else if (dist < best) + best = dist; + + changed_miter_to_bevel = FALSE; + } + } + + if (i == 2) + foo_canvas_get_butt_points (coords[0], coords[1], coords[2], coords[3], + width, (line->cap == GDK_CAP_PROJECTING), + poly + 4, poly + 5, poly + 6, poly + 7); + else if (line->join == GDK_JOIN_MITER) { + if (!foo_canvas_get_miter_points (coords[0], coords[1], + coords[2], coords[3], + coords[4], coords[5], + width, + poly + 4, poly + 5, poly + 6, poly + 7)) { + changed_miter_to_bevel = TRUE; + foo_canvas_get_butt_points (coords[0], coords[1], coords[2], coords[3], + width, FALSE, + poly + 4, poly + 5, poly + 6, poly + 7); + } + } else + foo_canvas_get_butt_points (coords[0], coords[1], coords[2], coords[3], + width, FALSE, + poly + 4, poly + 5, poly + 6, poly + 7); + + poly[8] = poly[0]; + poly[9] = poly[1]; + + dist = foo_canvas_polygon_to_point (poly, 5, x, y); + if (dist < FOO_CANVAS_EPSILON) { + best = 0.0; + goto done; + } else if (dist < best) + best = dist; + } + + /* If caps are rounded, check the distance to the cap around the final end point of the line */ + + if (line->cap == GDK_CAP_ROUND) { + dx = coords[0] - x; + dy = coords[1] - y; + dist = sqrt (dx * dx + dy * dy) - width / 2.0; + if (dist < FOO_CANVAS_EPSILON) { + best = 0.0; + goto done; + } else + best = dist; + } + + /* sometimes the FooCanvasItem::update signal will not have + been processed between deleting the arrow points and a call + to this routine -- this can cause a segfault here */ + if ((line->first_arrow && !line->first_coords) || + (line->last_arrow && !line->last_coords)) + reconfigure_arrows(line); + + /* If there are arrowheads, check the distance to them */ + + if (line->first_arrow) { + dist = foo_canvas_polygon_to_point (line->first_coords, NUM_ARROW_POINTS, x, y); + if (dist < FOO_CANVAS_EPSILON) { + best = 0.0; + goto done; + } else + best = dist; + } + + if (line->last_arrow) { + dist = foo_canvas_polygon_to_point (line->last_coords, NUM_ARROW_POINTS, x, y); + if (dist < FOO_CANVAS_EPSILON) { + best = 0.0; + goto done; + } else + best = dist; + } + +done: + + if ((line_points != static_points) && (line_points != line->coords)) + g_free (line_points); + + return best; +} + +static void +foo_canvas_line_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasLine *line; + int i; + double *coords; + + line = FOO_CANVAS_LINE (item); + + for (i = 0, coords = line->coords; i < line->num_points; i++, coords += 2) { + coords[0] += dx; + coords[1] += dy; + } + + if (line->first_arrow) + for (i = 0, coords = line->first_coords; i < NUM_ARROW_POINTS; i++, coords += 2) { + coords[0] += dx; + coords[1] += dy; + } + + if (line->last_arrow) + for (i = 0, coords = line->last_coords; i < NUM_ARROW_POINTS; i++, coords += 2) { + coords[0] += dx; + coords[1] += dy; + } +} + +static void +foo_canvas_line_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasLine *line; + + line = FOO_CANVAS_LINE (item); + + if (line->num_points == 0) { + *x1 = *y1 = *x2 = *y2 = 0.0; + return; + } + + get_bounds (line, x1, y1, x2, y2); +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.h new file mode 100644 index 0000000000..cd88f76d60 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-line.h @@ -0,0 +1,152 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ + +/* Line/curve item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#ifndef FOO_CANVAS_LINE_H +#define FOO_CANVAS_LINE_H + + +#include + + +G_BEGIN_DECLS + + +/* Line item for the canvas. This is a polyline with configurable width, cap/join styles, and arrowheads. + * If arrowheads are enabled, then three values are used to specify their shape: + * + * arrow_shape_a: Distance from tip of arrowhead to the center point. + * arrow_shape_b: Distance from tip of arrowhead to trailing point, measured along the shaft. + * arrow_shape_c: Distance of trailing point from outside edge of shaft. + * + * The following object arguments are available: + * + * name type read/write description + * ------------------------------------------------------------------------------------------ + * points FooCanvasPoints* RW Pointer to a FooCanvasPoints structure. + * This can be created by a call to + * foo_canvas_points_new() (in foo-canvas-util.h). + * X coordinates are in the even indices of the + * points->coords array, Y coordinates are in + * the odd indices. + * fill_color string W X color specification for line + * fill_color_gdk GdkColor* RW Pointer to an allocated GdkColor + * fill_stipple GdkBitmap* RW Stipple pattern for the line + * width_pixels uint R Width of the line in pixels. The line width + * will not be scaled when the canvas zoom factor changes. + * width_units double R Width of the line in canvas units. The line width + * will be scaled when the canvas zoom factor changes. + * cap_style GdkCapStyle RW Cap ("endpoint") style for the line. + * join_style GdkJoinStyle RW Join ("vertex") style for the line. + * line_style GdkLineStyle RW Line dash style + * first_arrowhead boolean RW Specifies whether to draw an arrowhead on the + * first point of the line. + * last_arrowhead boolean RW Specifies whether to draw an arrowhead on the + * last point of the line. + * smooth boolean RW Specifies whether to smooth the line using + * parabolic splines. + * spline_steps uint RW Specifies the number of steps to use when rendering curves. + * arrow_shape_a double RW First arrow shape specifier. + * arrow_shape_b double RW Second arrow shape specifier. + * arrow_shape_c double RW Third arrow shape specifier. + */ + + +#define FOO_TYPE_CANVAS_LINE (foo_canvas_line_get_type ()) +#define FOO_CANVAS_LINE(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_LINE, FooCanvasLine)) +#define FOO_CANVAS_LINE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_LINE, FooCanvasLineClass)) +#define FOO_IS_CANVAS_LINE(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_LINE)) +#define FOO_IS_CANVAS_LINE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_LINE)) +#define FOO_CANVAS_LINE_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_LINE, FooCanvasLineClass)) + + +typedef struct _FooCanvasLine FooCanvasLine; +typedef struct _FooCanvasLineClass FooCanvasLineClass; + +struct _FooCanvasLine { + FooCanvasItem item; + + double *coords; /* Array of coordinates for the line's points. X coords are in the + * even indices, Y coords are in the odd indices. If the line has + * arrowheads then the first and last points have been adjusted to + * refer to the necks of the arrowheads rather than their tips. The + * actual endpoints are stored in the first_arrow and last_arrow + * arrays, if they exist. + */ + + double *first_coords; /* Array of points describing polygon for the first arrowhead */ + double *last_coords; /* Array of points describing polygon for the last arrowhead */ + + GdkGC *gc; /* GC for drawing line */ + + GdkBitmap *stipple; /* Stipple pattern */ + + double width; /* Width of the line */ + + double shape_a; /* Distance from tip of arrowhead to center */ + double shape_b; /* Distance from tip of arrowhead to trailing point, measured along shaft */ + double shape_c; /* Distance of trailing points from outside edge of shaft */ + + GdkCapStyle cap; /* Cap style for line */ + GdkJoinStyle join; /* Join style for line */ + GdkLineStyle line_style;/* Style for the line */ + + gulong fill_pixel; /* Color for line */ + + guint32 fill_rgba; /* RGBA color for outline */ /*AA*/ + + int num_points; /* Number of points in the line */ + guint fill_color; /* Fill color, RGBA */ + + int spline_steps; /* Number of steps in each spline segment */ + + guint width_pixels : 1; /* Is the width specified in pixels or units? */ + guint first_arrow : 1; /* Draw first arrowhead? */ + guint last_arrow : 1; /* Draw last arrowhead? */ + guint smooth : 1; /* Smooth line (with parabolic splines)? */ +}; + +struct _FooCanvasLineClass { + FooCanvasItemClass parent_class; +}; + + +/* Standard Gtk function */ +GtkType foo_canvas_line_get_type (void) G_GNUC_CONST; + + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-marshal.list b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-marshal.list new file mode 100644 index 0000000000..5d3419be85 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-marshal.list @@ -0,0 +1,4 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +VOID:INT,INT,INT,INT +BOOLEAN:BOXED diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-pixbuf.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-pixbuf.c new file mode 100644 index 0000000000..6907b27dd2 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-pixbuf.c @@ -0,0 +1,864 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#undef GTK_DISABLE_DEPRECATED +#include +#include +#include +/* GNOME libraries - GdkPixbuf item for the GNOME canvas + * + * Copyright (C) 1999 The Free Software Foundation + * + * Author: Federico Mena-Quintero + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ + +#include +#include +#include +#include +#include "foo-canvas-pixbuf.h" + +/* Private part of the FooCanvasPixbuf structure */ +typedef struct { + /* Our gdk-pixbuf */ + GdkPixbuf *pixbuf, *pixbuf_scaled; + + /* Width value */ + double width; + + /* Height value */ + double height; + + /* X translation */ + double x; + + /* Y translation */ + double y; + + /* Whether dimensions are set and whether they are in pixels or units */ + guint width_set : 1; + guint width_in_pixels : 1; + guint height_set : 1; + guint height_in_pixels : 1; + guint x_in_pixels : 1; + guint y_in_pixels : 1; + + /* Whether the pixbuf has changed */ + guint need_pixbuf_update : 1; + + /* Whether the transformation or size have changed */ + guint need_xform_update : 1; + + /* Should the point method ignore transparent areas */ + guint point_ignores_alpha : 1; + + /* Anchor */ + GtkAnchorType anchor; + + /* Approximation method used for transformations */ + GdkInterpType interp_type; + +} PixbufPrivate; + +/* Object argument IDs */ +enum { + PROP_0, + PROP_PIXBUF, + PROP_WIDTH, + PROP_WIDTH_SET, + PROP_WIDTH_IN_PIXELS, + PROP_HEIGHT, + PROP_HEIGHT_SET, + PROP_HEIGHT_IN_PIXELS, + PROP_X, + PROP_X_IN_PIXELS, + PROP_Y, + PROP_Y_IN_PIXELS, + PROP_ANCHOR, + PROP_INTERP_TYPE, + PROP_POINT_IGNORES_ALPHA +}; + +static void foo_canvas_pixbuf_class_init (FooCanvasPixbufClass *class); +static void foo_canvas_pixbuf_init (FooCanvasPixbuf *cpb); +static void foo_canvas_pixbuf_destroy (GtkObject *object); +static void foo_canvas_pixbuf_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void foo_canvas_pixbuf_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); + +static void foo_canvas_pixbuf_update (FooCanvasItem *item, + double i2w_dx, double i2w_dy, + int flags); +static void foo_canvas_pixbuf_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose); +static double foo_canvas_pixbuf_point (FooCanvasItem *item, double x, double y, int cx, int cy, + FooCanvasItem **actual_item); +static void foo_canvas_pixbuf_translate (FooCanvasItem *item, double dx, double dy); +static void foo_canvas_pixbuf_bounds (FooCanvasItem *item, + double *x1, double *y1, double *x2, double *y2); + +static FooCanvasItemClass *parent_class; + + + +/** + * foo_canvas_pixbuf_get_type: + * @void: + * + * Registers the #FooCanvasPixbuf class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the #FooCanvasPixbuf class. + **/ +GtkType +foo_canvas_pixbuf_get_type (void) +{ + static GtkType canvas_pixbuf_type = 0; + + if (!canvas_pixbuf_type) { + /* FIXME: Convert to gobject style. */ + static const GtkTypeInfo canvas_pixbuf_info = { + (char *)"FooCanvasPixbuf", + sizeof (FooCanvasPixbuf), + sizeof (FooCanvasPixbufClass), + (GtkClassInitFunc) foo_canvas_pixbuf_class_init, + (GtkObjectInitFunc) foo_canvas_pixbuf_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + canvas_pixbuf_type = gtk_type_unique (foo_canvas_item_get_type (), + &canvas_pixbuf_info); + } + + return canvas_pixbuf_type; +} + +/* Class initialization function for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_class_init (FooCanvasPixbufClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + parent_class = gtk_type_class (foo_canvas_item_get_type ()); + + gobject_class->set_property = foo_canvas_pixbuf_set_property; + gobject_class->get_property = foo_canvas_pixbuf_get_property; + + g_object_class_install_property + (gobject_class, + PROP_PIXBUF, + g_param_spec_object ("pixbuf", NULL, NULL, + GDK_TYPE_PIXBUF, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH, + g_param_spec_double ("width", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_SET, + g_param_spec_boolean ("width-set", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_IN_PIXELS, + g_param_spec_boolean ("width-in-pixels", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_HEIGHT, + g_param_spec_double ("height", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_HEIGHT_SET, + g_param_spec_boolean ("height-set", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_HEIGHT_IN_PIXELS, + g_param_spec_boolean ("height-in-pixels", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_X, + g_param_spec_double ("x", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_X_IN_PIXELS, + g_param_spec_boolean ("x-in-pixels", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_Y, + g_param_spec_double ("y", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_Y_IN_PIXELS, + g_param_spec_boolean ("y-in-pixels", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_ANCHOR, + g_param_spec_enum ("anchor", NULL, NULL, + GTK_TYPE_ANCHOR_TYPE, + GTK_ANCHOR_NW, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_INTERP_TYPE, + g_param_spec_enum ("interp-type", NULL, NULL, + GDK_TYPE_INTERP_TYPE, + GDK_INTERP_BILINEAR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_POINT_IGNORES_ALPHA, + g_param_spec_boolean ("point-ignores-alpha", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + object_class->destroy = foo_canvas_pixbuf_destroy; + + item_class->update = foo_canvas_pixbuf_update; + item_class->draw = foo_canvas_pixbuf_draw; + item_class->point = foo_canvas_pixbuf_point; + item_class->translate = foo_canvas_pixbuf_translate; + item_class->bounds = foo_canvas_pixbuf_bounds; +} + +/* Object initialization function for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_init (FooCanvasPixbuf *gcp) +{ + PixbufPrivate *priv; + + priv = g_new0 (PixbufPrivate, 1); + gcp->priv = priv; + + priv->width = 0.0; + priv->height = 0.0; + priv->x = 0.0; + priv->y = 0.0; + priv->anchor = GTK_ANCHOR_NW; + priv->interp_type = GDK_INTERP_BILINEAR; + priv->point_ignores_alpha = FALSE; +} + +/* Destroy handler for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_destroy (GtkObject *object) +{ + FooCanvasItem *item; + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_PIXBUF (object)); + + item = FOO_CANVAS_ITEM (object); + gcp = (FOO_CANVAS_PIXBUF (object)); + priv = gcp->priv; + + /* remember, destroy can be run multiple times! */ + + if (priv) { + foo_canvas_item_request_redraw (item); + + if (priv->pixbuf) + g_object_unref (priv->pixbuf); + if (priv->pixbuf_scaled) + g_object_unref (priv->pixbuf_scaled); + + g_free (priv); + gcp->priv = NULL; + } + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + + + +/* Set_property handler for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + GdkPixbuf *pixbuf; + double val; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_PIXBUF (object)); + + item = FOO_CANVAS_ITEM (object); + gcp = FOO_CANVAS_PIXBUF (object); + priv = gcp->priv; + + switch (param_id) { + case PROP_PIXBUF: + if (g_value_get_object (value)) + pixbuf = GDK_PIXBUF (g_value_get_object (value)); + else + pixbuf = NULL; + if (pixbuf != priv->pixbuf) { + if (pixbuf) { + g_return_if_fail + (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB); + g_return_if_fail + (gdk_pixbuf_get_n_channels (pixbuf) == 3 + || gdk_pixbuf_get_n_channels (pixbuf) == 4); + g_return_if_fail + (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8); + + g_object_ref (pixbuf); + } + + if (priv->pixbuf) + g_object_unref (priv->pixbuf); + priv->pixbuf = pixbuf; + + if (priv->pixbuf_scaled) { + g_object_unref (priv->pixbuf_scaled); + priv->pixbuf_scaled = NULL; + } + } + + priv->need_pixbuf_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_WIDTH: + val = g_value_get_double (value); + g_return_if_fail (val >= 0.0); + priv->width = val; + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_WIDTH_SET: + priv->width_set = g_value_get_boolean (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_WIDTH_IN_PIXELS: + priv->width_in_pixels = g_value_get_boolean (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_HEIGHT: + val = g_value_get_double (value); + g_return_if_fail (val >= 0.0); + priv->height = val; + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_HEIGHT_SET: + priv->height_set = g_value_get_boolean (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_HEIGHT_IN_PIXELS: + priv->height_in_pixels = g_value_get_boolean (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_X: + priv->x = g_value_get_double (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_X_IN_PIXELS: + priv->x_in_pixels = g_value_get_boolean (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_Y: + priv->y = g_value_get_double (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_Y_IN_PIXELS: + priv->y_in_pixels = g_value_get_boolean (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_ANCHOR: + priv->anchor = g_value_get_enum (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_INTERP_TYPE: + priv->interp_type = g_value_get_enum (value); + priv->need_xform_update = TRUE; + foo_canvas_item_request_update (item); + break; + + case PROP_POINT_IGNORES_ALPHA: + priv->point_ignores_alpha = g_value_get_boolean (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +/* Get_property handler for the pixbuf canvasi item */ +static void +foo_canvas_pixbuf_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_PIXBUF (object)); + + gcp = FOO_CANVAS_PIXBUF (object); + priv = gcp->priv; + + switch (param_id) { + case PROP_PIXBUF: + g_value_set_object (value, G_OBJECT (priv->pixbuf)); + break; + + case PROP_WIDTH: + g_value_set_double (value, priv->width); + break; + + case PROP_WIDTH_SET: + g_value_set_boolean (value, priv->width_set); + break; + + case PROP_WIDTH_IN_PIXELS: + g_value_set_boolean (value, priv->width_in_pixels); + break; + + case PROP_HEIGHT: + g_value_set_double (value, priv->height); + break; + + case PROP_HEIGHT_SET: + g_value_set_boolean (value, priv->height_set); + break; + + case PROP_HEIGHT_IN_PIXELS: + g_value_set_boolean (value, priv->height_in_pixels); + break; + + case PROP_X: + g_value_set_double (value, priv->x); + break; + + case PROP_X_IN_PIXELS: + g_value_set_boolean (value, priv->x_in_pixels); + break; + + case PROP_Y: + g_value_set_double (value, priv->y); + break; + + case PROP_Y_IN_PIXELS: + g_value_set_boolean (value, priv->y_in_pixels); + break; + + case PROP_ANCHOR: + g_value_set_enum (value, priv->anchor); + break; + + case PROP_INTERP_TYPE: + g_value_set_enum (value, priv->interp_type); + break; + + case PROP_POINT_IGNORES_ALPHA: + g_value_set_boolean (value, priv->point_ignores_alpha); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + + + +/* Bounds and utilities */ + + +/* Recomputes the bounding box of a pixbuf canvas item. The horizontal and + * vertical dimensions may be specified in units or pixels, separately, so we + * have to compute the components individually for each dimension. + * + * Returns the coordinates with respect to the parent items coordinates. + */ +static void +compute_bounding_box (FooCanvasPixbuf *gcp, + double i2w_dx, double i2w_dy, + double *bbox_x0, double *bbox_y0, + double *bbox_x1, double *bbox_y1) +{ + FooCanvasItem *item; + PixbufPrivate *priv; + double x, y; + double width, height; + + item = FOO_CANVAS_ITEM (gcp); + priv = gcp->priv; + + if (!priv->pixbuf) { + *bbox_x0 = *bbox_y0 = *bbox_x1 = *bbox_y1 = 0.0; + return; + } + + if (priv->x_in_pixels) { + x = i2w_dx + priv->x / item->canvas->pixels_per_unit; + } else { + x = i2w_dx + priv->x; + } + + if (priv->y_in_pixels) { + y = i2w_dy + priv->y / item->canvas->pixels_per_unit; + } else { + y = i2w_dy + priv->y; + } + + if (priv->width_set) { + width = priv->width; + } else { + width = gdk_pixbuf_get_width (priv->pixbuf); + } + + if (priv->width_in_pixels) + width /= item->canvas->pixels_per_unit; + + if (priv->height_set) { + height = priv->height; + } else { + height = gdk_pixbuf_get_height (priv->pixbuf); + } + + if (priv->height_in_pixels) + height /= item->canvas->pixels_per_unit; + + + switch (priv->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_W: + case GTK_ANCHOR_SW: + break; + + case GTK_ANCHOR_N: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_S: + x -= width / 2.0; + break; + + case GTK_ANCHOR_NE: + case GTK_ANCHOR_E: + case GTK_ANCHOR_SE: + x -= width; + break; + + default: + break; + } + + switch (priv->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_N: + case GTK_ANCHOR_NE: + break; + + case GTK_ANCHOR_W: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_E: + y -= height / 2.0; + break; + + case GTK_ANCHOR_SW: + case GTK_ANCHOR_S: + case GTK_ANCHOR_SE: + y -= height; + break; + + default: + break; + } + + *bbox_x0 = x; + *bbox_y0 = y; + *bbox_x1 = x + width; + *bbox_y1 = y + height; +} + + + +/* Update sequence */ + +/* Update handler for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_update (FooCanvasItem *item, + double i2w_dx, double i2w_dy, + int flags) +{ + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + double bbox_x0, bbox_y0, bbox_x1, bbox_y1; + int w, h; + + gcp = FOO_CANVAS_PIXBUF (item); + priv = gcp->priv; + + if (parent_class->update) + (* parent_class->update) (item, i2w_dx, i2w_dy, flags); + + /* If we need a pixbuf update, or if the item changed visibility to + * shown, recompute the bounding box. + */ + if (priv->need_pixbuf_update || priv->need_xform_update || + (flags & FOO_CANVAS_UPDATE_DEEP)) { + + foo_canvas_item_request_redraw (item); + + compute_bounding_box (gcp, i2w_dx, i2w_dy, + &bbox_x0, &bbox_y0, + &bbox_x1, &bbox_y1); + + foo_canvas_w2c_d (item->canvas, + bbox_x0, bbox_y0, + &item->x1, &item->y1); + + foo_canvas_w2c_d (item->canvas, + bbox_x1, bbox_y1, + &item->x2, &item->y2); + + item->x1 = floor (item->x1); + item->y1 = floor (item->y1); + item->x2 = ceil (item->x2); + item->y2 = ceil (item->y2); + +#ifdef FOO_CANVAS_PIXBUF_VERBOSE + g_print ("BBox is %g %g %g %g\n", item->x1, item->y1, item->x2, item->y2); +#endif + + if (priv->pixbuf) { + w = item->x2 - item->x1; + h = item->y2 - item->y1; + + if (priv->pixbuf_scaled) + g_object_unref (priv->pixbuf_scaled); + if (gdk_pixbuf_get_width (priv->pixbuf) != w || + gdk_pixbuf_get_height (priv->pixbuf) != h) + priv->pixbuf_scaled = gdk_pixbuf_scale_simple ( + priv->pixbuf, w, h, priv->interp_type); + else + priv->pixbuf_scaled = g_object_ref (priv->pixbuf); + } + + foo_canvas_item_request_redraw (item); + + priv->need_pixbuf_update = FALSE; + priv->need_xform_update = FALSE; + } +} + + + +/* Draw handler for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose) +{ + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + GdkRectangle display_rect, draw_rect; + GdkRegion *draw_region; + int w, h; + + gcp = FOO_CANVAS_PIXBUF (item); + priv = gcp->priv; + + if (!priv->pixbuf) + return; + + /* Compute the area we need to repaint */ + + w = item->x2 - item->x1; + h = item->y2 - item->y1; + + display_rect.x = item->x1; + display_rect.y = item->y1; + display_rect.width = w; + display_rect.height = h; + draw_region = gdk_region_rectangle (&display_rect); + gdk_region_intersect (draw_region, expose->region); + if (!gdk_region_empty (draw_region)) { + gdk_region_get_clipbox (draw_region, &draw_rect); + gdk_draw_pixbuf (drawable, NULL, priv->pixbuf_scaled, + /* pixbuf 0, 0 is at pix_rect.x, pix_rect.y */ + draw_rect.x - display_rect.x, + draw_rect.y - display_rect.y, + draw_rect.x, + draw_rect.y, + draw_rect.width, + draw_rect.height, + GDK_RGB_DITHER_NORMAL, 0, 0); + } + gdk_region_destroy (draw_region); +} + + + + +/* Point handler for the pixbuf canvas item */ +static double +foo_canvas_pixbuf_point (FooCanvasItem *item, double x, double y, int cx, int cy, + FooCanvasItem **actual_item) +{ + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + double x1, y1, x2, y2; + int px, py; + double no_hit; + guchar *src; + GdkPixbuf *pixbuf; + + gcp = FOO_CANVAS_PIXBUF (item); + priv = gcp->priv; + pixbuf = priv->pixbuf; + + *actual_item = item; + + no_hit = item->canvas->pixels_per_unit * 2 + 10; + + if (!priv->pixbuf) + return no_hit; + + compute_bounding_box (gcp, 0.0, 0.0, + &x1, &y1, &x2, &y2); + + + if (x < x1 || x >= x2 || + y < y1 || y >= y2) + return no_hit; + + if (!gdk_pixbuf_get_has_alpha (pixbuf) || priv->point_ignores_alpha) + return 0.0; + + px = (x - x1) * gdk_pixbuf_get_width (pixbuf) / (x2 - x1); + py = (y - y1) * gdk_pixbuf_get_height (pixbuf) / (y2 - y1); + + src = gdk_pixbuf_get_pixels (pixbuf) + + py * gdk_pixbuf_get_rowstride (pixbuf) + + px * gdk_pixbuf_get_n_channels (pixbuf); + + if (src[3] < 128) + return no_hit; + else + return 0.0; +} + + + +static void +foo_canvas_pixbuf_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + + gcp = FOO_CANVAS_PIXBUF (item); + priv = gcp->priv; + + if (priv->x_in_pixels) { + priv->x += dx * item->canvas->pixels_per_unit; + } else { + priv->x += dx; + } + + if (priv->y_in_pixels) { + priv->y += dy * item->canvas->pixels_per_unit; + } else { + priv->y += dy; + } + + priv->need_xform_update = TRUE; +} + + + +/* Bounds handler for the pixbuf canvas item */ +static void +foo_canvas_pixbuf_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasPixbuf *gcp; + PixbufPrivate *priv; + + gcp = FOO_CANVAS_PIXBUF (item); + priv = gcp->priv; + + if (!priv->pixbuf) { + *x1 = *y1 = *x2 = *y2 = 0.0; + return; + } + + compute_bounding_box (gcp, 0.0, 0.0, + x1, y1, x2, y2); +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-pixbuf.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-pixbuf.h new file mode 100644 index 0000000000..3b3cbe3d0d --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-pixbuf.h @@ -0,0 +1,64 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* GNOME libraries - GdkPixbuf item for the GNOME canvas + * + * Copyright (C) 1999 The Free Software Foundation + * + * Author: Federico Mena-Quintero + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ + +#ifndef FOO_CANVAS_PIXBUF_H +#define FOO_CANVAS_PIXBUF_H + + +#include + +G_BEGIN_DECLS + + + +#define FOO_TYPE_CANVAS_PIXBUF (foo_canvas_pixbuf_get_type ()) +#define FOO_CANVAS_PIXBUF(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_PIXBUF, FooCanvasPixbuf)) +#define FOO_CANVAS_PIXBUF_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_PIXBUF, FooCanvasPixbufClass)) +#define FOO_IS_CANVAS_PIXBUF(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_PIXBUF)) +#define FOO_IS_CANVAS_PIXBUF_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_PIXBUF)) +#define FOO_CANVAS_PIXBUF_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_PIXBUF, FooCanvasPixbufClass)) + + +typedef struct _FooCanvasPixbuf FooCanvasPixbuf; +typedef struct _FooCanvasPixbufClass FooCanvasPixbufClass; + +struct _FooCanvasPixbuf { + FooCanvasItem item; + + /* Private data */ + gpointer priv; +}; + +struct _FooCanvasPixbufClass { + FooCanvasItemClass parent_class; +}; + + +GtkType foo_canvas_pixbuf_get_type (void) G_GNUC_CONST; + + + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.c new file mode 100644 index 0000000000..38d8205bd8 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.c @@ -0,0 +1,854 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#undef GTK_DISABLE_DEPRECATED +#include +#include +#include +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Polygon item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * Author: Federico Mena + */ + +#include +#include +#include "libfoocanvas.h" + + +#define NUM_STATIC_POINTS 256 /* Number of static points to use to avoid allocating arrays */ + + +#define GROW_BOUNDS(bx1, by1, bx2, by2, x, y) { \ + if (x < bx1) \ + bx1 = x; \ + \ + if (x > bx2) \ + bx2 = x; \ + \ + if (y < by1) \ + by1 = y; \ + \ + if (y > by2) \ + by2 = y; \ +} + + +enum { + PROP_0, + PROP_POINTS, + PROP_FILL_COLOR, + PROP_FILL_COLOR_GDK, + PROP_FILL_COLOR_RGBA, + PROP_OUTLINE_COLOR, + PROP_OUTLINE_COLOR_GDK, + PROP_OUTLINE_COLOR_RGBA, + PROP_FILL_STIPPLE, + PROP_OUTLINE_STIPPLE, + PROP_WIDTH_PIXELS, + PROP_WIDTH_UNITS +}; + + +static void foo_canvas_polygon_class_init (FooCanvasPolygonClass *class); +static void foo_canvas_polygon_init (FooCanvasPolygon *poly); +static void foo_canvas_polygon_destroy (GtkObject *object); +static void foo_canvas_polygon_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void foo_canvas_polygon_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); + +static void foo_canvas_polygon_update (FooCanvasItem *item, + double i2w_dx, double i2w_dy, + int flags); +static void foo_canvas_polygon_realize (FooCanvasItem *item); +static void foo_canvas_polygon_unrealize (FooCanvasItem *item); +static void foo_canvas_polygon_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose); +static double foo_canvas_polygon_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item); +static void foo_canvas_polygon_translate (FooCanvasItem *item, double dx, double dy); +static void foo_canvas_polygon_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2); + + +static FooCanvasItemClass *parent_class; + + +GtkType +foo_canvas_polygon_get_type (void) +{ + static GtkType polygon_type = 0; + + if (!polygon_type) { + /* FIXME: Convert to gobject style. */ + static const GtkTypeInfo polygon_info = { + (char *)"FooCanvasPolygon", + sizeof (FooCanvasPolygon), + sizeof (FooCanvasPolygonClass), + (GtkClassInitFunc) foo_canvas_polygon_class_init, + (GtkObjectInitFunc) foo_canvas_polygon_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + polygon_type = gtk_type_unique (foo_canvas_item_get_type (), &polygon_info); + } + + return polygon_type; +} + +static void +foo_canvas_polygon_class_init (FooCanvasPolygonClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + parent_class = gtk_type_class (foo_canvas_item_get_type ()); + + gobject_class->set_property = foo_canvas_polygon_set_property; + gobject_class->get_property = foo_canvas_polygon_get_property; + + g_object_class_install_property + (gobject_class, + PROP_POINTS, + g_param_spec_boxed ("points", NULL, NULL, + FOO_TYPE_CANVAS_POINTS, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR, + g_param_spec_string ("fill-color", NULL, NULL, + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_GDK, + g_param_spec_boxed ("fill-color-gdk", NULL, NULL, + GDK_TYPE_COLOR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_RGBA, + g_param_spec_uint ("fill-color-rgba", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_COLOR, + g_param_spec_string ("outline-color", NULL, NULL, + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_COLOR_GDK, + g_param_spec_boxed ("outline-color-gdk", NULL, NULL, + GDK_TYPE_COLOR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_COLOR_RGBA, + g_param_spec_uint ("outline-color-rgba", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_STIPPLE, + g_param_spec_object ("fill-stipple", NULL, NULL, + GDK_TYPE_DRAWABLE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_STIPPLE, + g_param_spec_object ("outline-stipple", NULL, NULL, + GDK_TYPE_DRAWABLE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_PIXELS, + g_param_spec_uint ("width-pixels", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_UNITS, + g_param_spec_double ("width-units", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + object_class->destroy = foo_canvas_polygon_destroy; + + item_class->update = foo_canvas_polygon_update; + item_class->realize = foo_canvas_polygon_realize; + item_class->unrealize = foo_canvas_polygon_unrealize; + item_class->draw = foo_canvas_polygon_draw; + item_class->point = foo_canvas_polygon_point; + item_class->translate = foo_canvas_polygon_translate; + item_class->bounds = foo_canvas_polygon_bounds; +} + +static void +foo_canvas_polygon_init (FooCanvasPolygon *poly) +{ + poly->width = 0.0; +} + +static void +foo_canvas_polygon_destroy (GtkObject *object) +{ + FooCanvasPolygon *poly; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_POLYGON (object)); + + poly = FOO_CANVAS_POLYGON (object); + + /* remember, destroy can be run multiple times! */ + + if (poly->coords) + g_free (poly->coords); + poly->coords = NULL; + + if (poly->fill_stipple) + g_object_unref (poly->fill_stipple); + poly->fill_stipple = NULL; + + if (poly->outline_stipple) + g_object_unref (poly->outline_stipple); + poly->outline_stipple = NULL; + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + +/* Computes the bounding box of the polygon. Assumes that the number of points in the polygon is + * not zero. + */ +static gboolean +get_bounds (FooCanvasPolygon *poly, double *bx1, double *by1, double *bx2, double *by2) +{ + double *coords; + double x1, y1, x2, y2; + double width; + int i; + + if (poly->num_points == 0) + return FALSE; + + /* Compute bounds of vertices */ + + x1 = x2 = poly->coords[0]; + y1 = y2 = poly->coords[1]; + + for (i = 1, coords = poly->coords + 2; i < poly->num_points; i++, coords += 2) { + GROW_BOUNDS (x1, y1, x2, y2, coords[0], coords[1]); + } + + /* Add outline width */ + + if (poly->width_pixels) + width = poly->width / poly->item.canvas->pixels_per_unit; + else + width = poly->width; + + width /= 2.0; + + x1 -= width; + y1 -= width; + x2 += width; + y2 += width; + + /* Done */ + + *bx1 = x1; + *by1 = y1; + *bx2 = x2; + *by2 = y2; + return TRUE; +} + +/* Computes the bounding box of the polygon, in canvas coordinates. Assumes that the number of points in the polygon is + * not zero. + */ +static gboolean +get_bounds_canvas (FooCanvasPolygon *poly, + double *bx1, double *by1, double *bx2, double *by2, + double i2w_dx, double i2w_dy) +{ + FooCanvasItem *item; + double bbox_x0, bbox_y0, bbox_x1, bbox_y1; + + item = FOO_CANVAS_ITEM (poly); + + if (!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1)) + return FALSE; + + bbox_x0 += i2w_dx; + bbox_y0 += i2w_dy; + bbox_x1 += i2w_dx; + bbox_y1 += i2w_dy; + + foo_canvas_w2c_rect_d (item->canvas, + &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1); + + /* include 1 pixel of fudge */ + *bx1 = bbox_x0 - 1; + *by1 = bbox_y0 - 1; + *bx2 = bbox_x1 + 1; + *by2 = bbox_y1 + 1; + return TRUE; +} + +/* Sets the points of the polygon item to the specified ones. If needed, it will add a point to + * close the polygon. + */ +static void +set_points (FooCanvasPolygon *poly, FooCanvasPoints *points) +{ + int duplicate; + + /* See if we need to duplicate the first point */ + + duplicate = ((points->coords[0] != points->coords[2 * points->num_points - 2]) + || (points->coords[1] != points->coords[2 * points->num_points - 1])); + + if (duplicate) + poly->num_points = points->num_points + 1; + else + poly->num_points = points->num_points; + + poly->coords = g_new (double, 2 * poly->num_points); + memcpy (poly->coords, points->coords, 2 * points->num_points * sizeof (double)); + + if (duplicate) { + poly->coords[2 * poly->num_points - 2] = poly->coords[0]; + poly->coords[2 * poly->num_points - 1] = poly->coords[1]; + } +} + +/* Convenience function to set a GC's foreground color to the specified pixel value */ +static void +set_gc_foreground (GdkGC *gc, gulong pixel) +{ + GdkColor c; + + if (!gc) + return; + + c.pixel = pixel; + gdk_gc_set_foreground (gc, &c); +} + +/* Sets the stipple pattern for the specified gc */ +static void +set_stipple (GdkGC *gc, GdkBitmap **internal_stipple, GdkBitmap *stipple, int reconfigure) +{ + if (*internal_stipple && !reconfigure) + g_object_unref (*internal_stipple); + + *internal_stipple = stipple; + if (stipple && !reconfigure) + g_object_ref (stipple); + + if (gc) { + if (stipple) { + gdk_gc_set_stipple (gc, stipple); + gdk_gc_set_fill (gc, GDK_STIPPLED); + } else + gdk_gc_set_fill (gc, GDK_SOLID); + } +} + +/* Recalculate the outline width of the polygon and set it in its GC */ +static void +set_outline_gc_width (FooCanvasPolygon *poly) +{ + int width; + + if (!poly->outline_gc) + return; + + if (poly->width_pixels) + width = (int) poly->width; + else + width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5); + + gdk_gc_set_line_attributes (poly->outline_gc, width, + GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND); +} + +static void +foo_canvas_polygon_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasPolygon *poly; + FooCanvasPoints *points; + GdkColor color = { 0, 0, 0, 0, }; + GdkColor *pcolor; + int have_pixel; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_POLYGON (object)); + + item = FOO_CANVAS_ITEM (object); + poly = FOO_CANVAS_POLYGON (object); + have_pixel = FALSE; + + switch (param_id) { + case PROP_POINTS: + points = g_value_get_boxed (value); + + if (poly->coords) { + g_free (poly->coords); + poly->coords = NULL; + } + + if (!points) + poly->num_points = 0; + else + set_points (poly, points); + + foo_canvas_item_request_update (item); + break; + + case PROP_FILL_COLOR: + case PROP_FILL_COLOR_GDK: + case PROP_FILL_COLOR_RGBA: + switch (param_id) { + case PROP_FILL_COLOR: + if (g_value_get_string (value) && + gdk_color_parse (g_value_get_string (value), &color)) + poly->fill_set = TRUE; + else + poly->fill_set = FALSE; + + poly->fill_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_FILL_COLOR_GDK: + pcolor = g_value_get_boxed (value); + poly->fill_set = pcolor != NULL; + + if (pcolor) { + GdkColormap *colormap; + + color = *pcolor; + colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + gdk_rgb_find_color (colormap, &color); + have_pixel = TRUE; + } + + poly->fill_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_FILL_COLOR_RGBA: + poly->fill_set = TRUE; + poly->fill_color = g_value_get_uint (value); + break; + } +#ifdef VERBOSE + g_print ("poly fill color = %08x\n", poly->fill_color); +#endif + if (have_pixel) + poly->fill_pixel = color.pixel; + else + poly->fill_pixel = foo_canvas_get_color_pixel (item->canvas, + poly->fill_color); + + set_gc_foreground (poly->fill_gc, poly->fill_pixel); + foo_canvas_item_request_redraw (item); + break; + + case PROP_OUTLINE_COLOR: + case PROP_OUTLINE_COLOR_GDK: + case PROP_OUTLINE_COLOR_RGBA: + switch (param_id) { + case PROP_OUTLINE_COLOR: + if (g_value_get_string (value) && + gdk_color_parse (g_value_get_string (value), &color)) + poly->outline_set = TRUE; + else + poly->outline_set = FALSE; + + poly->outline_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_OUTLINE_COLOR_GDK: + pcolor = g_value_get_boxed (value); + poly->outline_set = pcolor != NULL; + + if (pcolor) { + GdkColormap *colormap; + + color = *pcolor; + colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + gdk_rgb_find_color (colormap, &color); + have_pixel = TRUE; + } + + poly->outline_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_OUTLINE_COLOR_RGBA: + poly->outline_set = TRUE; + poly->outline_color = g_value_get_uint (value); + break; + } +#ifdef VERBOSE + g_print ("poly outline color = %08x\n", poly->outline_color); +#endif + if (have_pixel) + poly->outline_pixel = color.pixel; + else + poly->outline_pixel = foo_canvas_get_color_pixel (item->canvas, + poly->outline_color); + + set_gc_foreground (poly->outline_gc, poly->outline_pixel); + foo_canvas_item_request_redraw (item); + break; + + case PROP_FILL_STIPPLE: + set_stipple (poly->fill_gc, &poly->fill_stipple, (GdkBitmap *) g_value_get_object (value), FALSE); + foo_canvas_item_request_update (item); + break; + + case PROP_OUTLINE_STIPPLE: + set_stipple (poly->outline_gc, &poly->outline_stipple, (GdkBitmap *) g_value_get_object (value), FALSE); + foo_canvas_item_request_update (item); + break; + + case PROP_WIDTH_PIXELS: + poly->width = g_value_get_uint (value); + poly->width_pixels = TRUE; + set_outline_gc_width (poly); +#ifdef OLD_XFORM + recalc_bounds (poly); +#else + foo_canvas_item_request_update (item); +#endif + break; + + case PROP_WIDTH_UNITS: + poly->width = fabs (g_value_get_double (value)); + poly->width_pixels = FALSE; + set_outline_gc_width (poly); +#ifdef OLD_XFORM + recalc_bounds (poly); +#else + foo_canvas_item_request_update (item); +#endif + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +/* Allocates a GdkColor structure filled with the specified pixel, and puts it into the specified + * value for returning it in the get_property method. + */ +static void +get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value) +{ + GdkColor *color; + GdkColormap *colormap; + + color = g_new (GdkColor, 1); + color->pixel = pixel; + + colormap = gtk_widget_get_colormap (GTK_WIDGET (poly)); + gdk_rgb_find_color (colormap, color); + g_value_set_boxed (value, color); +} + +static void +foo_canvas_polygon_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + FooCanvasPolygon *poly; + FooCanvasPoints *points; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_POLYGON (object)); + + poly = FOO_CANVAS_POLYGON (object); + + switch (param_id) { + case PROP_POINTS: + if (poly->num_points != 0) { + points = foo_canvas_points_new (poly->num_points); + memcpy (points->coords, poly->coords, 2 * poly->num_points * sizeof (double)); + g_value_set_boxed (value, points); + } else + g_value_set_boxed (value, NULL); + break; + + case PROP_FILL_COLOR_GDK: + get_color_value (poly, poly->fill_pixel, value); + break; + + case PROP_OUTLINE_COLOR_GDK: + get_color_value (poly, poly->outline_pixel, value); + break; + + case PROP_FILL_COLOR_RGBA: + g_value_set_uint (value, poly->fill_color); + break; + + case PROP_OUTLINE_COLOR_RGBA: + g_value_set_uint (value, poly->outline_color); + break; + + case PROP_FILL_STIPPLE: + g_value_set_object (value, (GObject *) poly->fill_stipple); + break; + + case PROP_OUTLINE_STIPPLE: + g_value_set_object (value, (GObject *) poly->outline_stipple); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +static void +foo_canvas_polygon_update (FooCanvasItem *item, + double i2w_dx, double i2w_dy, + int flags) +{ + FooCanvasPolygon *poly; + double x1, y1, x2, y2; + + poly = FOO_CANVAS_POLYGON (item); + + if (parent_class->update) + (* parent_class->update) (item, i2w_dx, i2w_dy, flags); + + set_outline_gc_width (poly); + set_gc_foreground (poly->fill_gc, poly->fill_pixel); + set_gc_foreground (poly->outline_gc, poly->outline_pixel); + set_stipple (poly->fill_gc, &poly->fill_stipple, poly->fill_stipple, TRUE); + set_stipple (poly->outline_gc, &poly->outline_stipple, poly->outline_stipple, TRUE); + + if (get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy)) + foo_canvas_update_bbox (item, x1, y1, x2, y2); +} + +static void +foo_canvas_polygon_realize (FooCanvasItem *item) +{ + FooCanvasPolygon *poly; + + poly = FOO_CANVAS_POLYGON (item); + + if (parent_class->realize) + (* parent_class->realize) (item); + + poly->fill_gc = gdk_gc_new (item->canvas->layout.bin_window); + poly->outline_gc = gdk_gc_new (item->canvas->layout.bin_window); +//#warning "FIXME: Need to recalc pixel values, set colours, etc." + +#ifdef OLD_XFORM + (* FOO_CANVAS_ITEM_CLASS (item->object.klass)->update) (item, NULL, NULL, 0); +#endif +} + +static void +foo_canvas_polygon_unrealize (FooCanvasItem *item) +{ + FooCanvasPolygon *poly; + + poly = FOO_CANVAS_POLYGON (item); + + g_object_unref (poly->fill_gc); + poly->fill_gc = NULL; + g_object_unref (poly->outline_gc); + poly->outline_gc = NULL; + + if (parent_class->unrealize) + (* parent_class->unrealize) (item); +} + +/* Converts an array of world coordinates into an array of canvas pixel coordinates. Takes in the + * item->world deltas and the drawable deltas. + */ +static void +item_to_canvas (FooCanvas *canvas, double *item_coords, GdkPoint *canvas_coords, int num_points, + double i2w_dx, double i2w_dy) +{ + int i; + + for (i = 0; i < num_points; i++) { + foo_canvas_w2c (canvas, + item_coords[i*2] + i2w_dx, + item_coords[i*2+1] + i2w_dy, + &canvas_coords->x, &canvas_coords->y); + canvas_coords++; + } +} + +static void +foo_canvas_polygon_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose) +{ + FooCanvasPolygon *poly; + GdkPoint static_points[NUM_STATIC_POINTS]; + GdkPoint *points; + double i2w_dx, i2w_dy; + + poly = FOO_CANVAS_POLYGON (item); + + if (poly->num_points == 0) + return; + + /* Build array of canvas pixel coordinates */ + + if (poly->num_points <= NUM_STATIC_POINTS) + points = static_points; + else + points = g_new (GdkPoint, poly->num_points); + + i2w_dx = 0.0; + i2w_dy = 0.0; + foo_canvas_item_i2w (item, &i2w_dx, &i2w_dy); + + item_to_canvas (item->canvas, + poly->coords, points, poly->num_points, + i2w_dx, i2w_dy); + + if (poly->fill_set) { + if (poly->fill_stipple) + foo_canvas_set_stipple_origin (item->canvas, poly->fill_gc); + + gdk_draw_polygon (drawable, poly->fill_gc, TRUE, points, poly->num_points); + } + + if (poly->outline_set) { + if (poly->outline_stipple) + foo_canvas_set_stipple_origin (item->canvas, poly->outline_gc); + + gdk_draw_polygon (drawable, poly->outline_gc, FALSE, points, poly->num_points); + } + + /* Done */ + + if (points != static_points) + g_free (points); +} + +static double +foo_canvas_polygon_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item) +{ + FooCanvasPolygon *poly; + double dist; + double width; + + poly = FOO_CANVAS_POLYGON (item); + + *actual_item = item; + + dist = foo_canvas_polygon_to_point (poly->coords, poly->num_points, x, y); + + if (poly->outline_set) { + if (poly->width_pixels) + width = poly->width / item->canvas->pixels_per_unit; + else + width = poly->width; + + dist -= width / 2.0; + + if (dist < 0.0) + dist = 0.0; + } + + return dist; +} + +static void +foo_canvas_polygon_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasPolygon *poly; + int i; + double *coords; + + poly = FOO_CANVAS_POLYGON (item); + + for (i = 0, coords = poly->coords; i < poly->num_points; i++, coords += 2) { + coords[0] += dx; + coords[1] += dy; + } + +} + +static void +foo_canvas_polygon_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasPolygon *poly; + + g_return_if_fail (item != NULL); + g_return_if_fail (FOO_IS_CANVAS_POLYGON (item)); + + poly = FOO_CANVAS_POLYGON (item); + + if (poly->num_points == 0) { + *x1 = *y1 = *x2 = *y2 = 0.0; + return; + } + + get_bounds (poly, x1, y1, x2, y2); +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.h new file mode 100644 index 0000000000..fb8b8d2cb9 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-polygon.h @@ -0,0 +1,123 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Polygon item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#ifndef FOO_CANVAS_POLYGON_H +#define FOO_CANVAS_POLYGON_H + + +#include + +G_BEGIN_DECLS + + +/* Polygon item for the canvas. A polygon is a bit different from rectangles and ellipses in that + * points inside it will always be considered "inside", even if the fill color is not set. If you + * want to have a hollow polygon, use a line item instead. + * + * The following object arguments are available: + * + * name type read/write description + * ------------------------------------------------------------------------------------------ + * points FooCanvasPoints* RW Pointer to a FooCanvasPoints structure. + * This can be created by a call to + * foo_canvas_points_new() (in foo-canvas-util.h). + * X coordinates are in the even indices of the + * points->coords array, Y coordinates are in + * the odd indices. + * fill_color string W X color specification for fill color, + * or NULL pointer for no color (transparent). + * fill_color_gdk GdkColor* RW Allocated GdkColor for fill. + * outline_color string W X color specification for outline color, + * or NULL pointer for no color (transparent). + * outline_color_gdk GdkColor* RW Allocated GdkColor for outline. + * fill_stipple GdkBitmap* RW Stipple pattern for fill + * outline_stipple GdkBitmap* RW Stipple pattern for outline + * width_pixels uint RW Width of the outline in pixels. The outline will + * not be scaled when the canvas zoom factor is changed. + * width_units double RW Width of the outline in canvas units. The outline + * will be scaled when the canvas zoom factor is changed. + */ + +#define FOO_TYPE_CANVAS_POLYGON (foo_canvas_polygon_get_type ()) +#define FOO_CANVAS_POLYGON(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_POLYGON, FooCanvasPolygon)) +#define FOO_CANVAS_POLYGON_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_POLYGON, FooCanvasPolygonClass)) +#define FOO_IS_CANVAS_POLYGON(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_POLYGON)) +#define FOO_IS_CANVAS_POLYGON_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_POLYGON)) +#define FOO_CANVAS_POLYGON_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_POLYGON, FooCanvasPolygonClass)) + + +typedef struct _FooCanvasPolygon FooCanvasPolygon; +typedef struct _FooCanvasPolygonClass FooCanvasPolygonClass; + +struct _FooCanvasPolygon { + FooCanvasItem item; + + double *coords; /* Array of coordinates for the polygon's points. X coords + * are in the even indices, Y coords are in the odd indices. + */ + GdkBitmap *fill_stipple; /* Stipple for fill */ + GdkBitmap *outline_stipple; /* Stipple for outline */ + + GdkGC *fill_gc; /* GC for filling */ + GdkGC *outline_gc; /* GC for outline */ + + gulong fill_pixel; /* Color for fill */ + gulong outline_pixel; /* Color for outline */ + double width; /* Width of polygon's outline */ + + int num_points; /* Number of points in the polygon */ + guint fill_color; /* Fill color, RGBA */ + guint outline_color; /* Outline color, RGBA */ + + guint32 fill_rgba; /* RGBA color for filling */ /*AA*/ + guint32 outline_rgba; /* RGBA color for outline */ /*AA*/ + + guint fill_set : 1; /* Is fill color set? */ + guint outline_set : 1; /* Is outline color set? */ + guint width_pixels : 1; /* Is outline width specified in pixels or units? */ +}; + +struct _FooCanvasPolygonClass { + FooCanvasItemClass parent_class; +}; + + +/* Standard Gtk function */ +GtkType foo_canvas_polygon_get_type (void) G_GNUC_CONST; + + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-rect-ellipse.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-rect-ellipse.c new file mode 100644 index 0000000000..b8126fca76 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-rect-ellipse.c @@ -0,0 +1,1493 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#include +#include +#include +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Rectangle and ellipse item types for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#include +#include "foo-canvas-rect-ellipse.h" +#include "foo-canvas-util.h" +#include + +#ifdef HAVE_RENDER +#include +#include +#endif + +/* Base class for rectangle and ellipse item types */ + +#define noVERBOSE + +enum { + PROP_0, + PROP_X1, + PROP_Y1, + PROP_X2, + PROP_Y2, + PROP_FILL_COLOR, + PROP_FILL_COLOR_GDK, + PROP_FILL_COLOR_RGBA, + PROP_OUTLINE_COLOR, + PROP_OUTLINE_COLOR_GDK, + PROP_OUTLINE_COLOR_RGBA, + PROP_FILL_STIPPLE, + PROP_OUTLINE_STIPPLE, + PROP_WIDTH_PIXELS, + PROP_WIDTH_UNITS +}; + + +static void foo_canvas_re_class_init (FooCanvasREClass *class); +static void foo_canvas_re_init (FooCanvasRE *re); +static void foo_canvas_re_destroy (GtkObject *object); +static void foo_canvas_re_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void foo_canvas_re_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); + +static void foo_canvas_re_update_shared (FooCanvasItem *item, + double i2w_dx, double i2w_dy, int flags); +static void foo_canvas_re_realize (FooCanvasItem *item); +static void foo_canvas_re_unrealize (FooCanvasItem *item); +static void foo_canvas_re_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2); +static void foo_canvas_re_translate (FooCanvasItem *item, double dx, double dy); +static void foo_canvas_rect_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags); +static void foo_canvas_ellipse_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags); + +typedef struct { + /*< public >*/ + int x0, y0, x1, y1; +} Rect; + +static Rect make_rect (int x0, int y0, int x1, int y1); +static void diff_rects (Rect r1, Rect r2, int *count, Rect result[4]); + +static FooCanvasItemClass *re_parent_class; +static FooCanvasREClass *rect_parent_class; + + +GType +foo_canvas_re_get_type (void) +{ + static GType re_type = 0; + + if (!re_type) { + GTypeInfo re_info = { + sizeof (FooCanvasREClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_re_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (FooCanvasRE), + 0, /* n_preallocs */ + (GInstanceInitFunc) foo_canvas_re_init + }; + + re_type = g_type_register_static (foo_canvas_item_get_type (), + "FooCanvasRE", + &re_info, + 0); + } + + return re_type; +} + +static void +foo_canvas_re_class_init (FooCanvasREClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + re_parent_class = g_type_class_peek_parent (class); + + gobject_class->set_property = foo_canvas_re_set_property; + gobject_class->get_property = foo_canvas_re_get_property; + + g_object_class_install_property + (gobject_class, + PROP_X1, + g_param_spec_double ("x1", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_Y1, + g_param_spec_double ("y1", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_X2, + g_param_spec_double ("x2", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_Y2, + g_param_spec_double ("y2", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR, + g_param_spec_string ("fill-color", NULL, NULL, + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_GDK, + g_param_spec_boxed ("fill-color-gdk", NULL, NULL, + GDK_TYPE_COLOR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_RGBA, + g_param_spec_uint ("fill-color-rgba", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_STIPPLE, + g_param_spec_object ("fill-stipple", NULL, NULL, + GDK_TYPE_DRAWABLE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_COLOR, + g_param_spec_string ("outline-color", NULL, NULL, + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_COLOR_GDK, + g_param_spec_boxed ("outline-color-gdk", NULL, NULL, + GDK_TYPE_COLOR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_COLOR_RGBA, + g_param_spec_uint ("outline-color-rgba", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_OUTLINE_STIPPLE, + g_param_spec_object ("outline-stipple", NULL, NULL, + GDK_TYPE_DRAWABLE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_PIXELS, + g_param_spec_uint ("width-pixels", NULL, NULL, + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH_UNITS, + g_param_spec_double ("width-units", NULL, NULL, + 0.0, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + object_class->destroy = foo_canvas_re_destroy; + + item_class->realize = foo_canvas_re_realize; + item_class->unrealize = foo_canvas_re_unrealize; + item_class->translate = foo_canvas_re_translate; + item_class->bounds = foo_canvas_re_bounds; +} + +static void +foo_canvas_re_init (FooCanvasRE *re) +{ + re->x1 = 0.0; + re->y1 = 0.0; + re->x2 = 0.0; + re->y2 = 0.0; + re->width = 0.0; +} + +static void +foo_canvas_re_destroy (GtkObject *object) +{ + FooCanvasRE *re; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_RE (object)); + + re = FOO_CANVAS_RE (object); + + /* remember, destroy can be run multiple times! */ + + if (re->fill_stipple) + g_object_unref (re->fill_stipple); + re->fill_stipple = NULL; + + if (re->outline_stipple) + g_object_unref (re->outline_stipple); + re->outline_stipple = NULL; + + if (GTK_OBJECT_CLASS (re_parent_class)->destroy) + (* GTK_OBJECT_CLASS (re_parent_class)->destroy) (object); +} + +static void get_bounds (FooCanvasRE *re, double *px1, double *py1, double *px2, double *py2) +{ + FooCanvasItem *item; + double x1, y1, x2, y2; + int cx1, cy1, cx2, cy2; + double hwidth; + +#ifdef VERBOSE + g_print ("re get_bounds\n"); +#endif + item = FOO_CANVAS_ITEM (re); + + if (re->width_pixels) + hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0; + else + hwidth = re->width / 2.0; + + x1 = re->x1; + y1 = re->y1; + x2 = re->x2; + y2 = re->y2; + + foo_canvas_item_i2w (item, &x1, &y1); + foo_canvas_item_i2w (item, &x2, &y2); + foo_canvas_w2c (item->canvas, x1 - hwidth, y1 - hwidth, &cx1, &cy1); + foo_canvas_w2c (item->canvas, x2 + hwidth, y2 + hwidth, &cx2, &cy2); + *px1 = cx1; + *py1 = cy1; + *px2 = cx2; + *py2 = cy2; + + /* Some safety fudging */ + + *px1 -= 2; + *py1 -= 2; + *px2 += 2; + *py2 += 2; +} + +/* Convenience function to set a GC's foreground color to the specified pixel value */ +static void +set_gc_foreground (GdkGC *gc, gulong pixel) +{ + GdkColor c; + + if (!gc) + return; + + c.pixel = pixel; + gdk_gc_set_foreground (gc, &c); +} + +/* Sets the stipple pattern for the specified gc */ +static void +set_stipple (GdkGC *gc, GdkBitmap **internal_stipple, GdkBitmap *stipple, int reconfigure) +{ + if (*internal_stipple && !reconfigure) + g_object_unref (*internal_stipple); + + *internal_stipple = stipple; + if (stipple && !reconfigure) + g_object_ref (stipple); + + if (gc) { + if (stipple) { + gdk_gc_set_stipple (gc, stipple); + gdk_gc_set_fill (gc, GDK_STIPPLED); + } else + gdk_gc_set_fill (gc, GDK_SOLID); + } +} + +/* Recalculate the outline width of the rectangle/ellipse and set it in its GC */ +static void +set_outline_gc_width (FooCanvasRE *re) +{ + int width; + + if (!re->outline_gc) + return; + + if (re->width_pixels) + width = (int) re->width; + else + width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5); + + gdk_gc_set_line_attributes (re->outline_gc, width, + GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER); +} + +static void +foo_canvas_re_set_fill (FooCanvasRE *re, gboolean fill_set) +{ + if (re->fill_set != fill_set) { + re->fill_set = fill_set; + foo_canvas_item_request_update (FOO_CANVAS_ITEM (re)); + } +} + +static void +foo_canvas_re_set_outline (FooCanvasRE *re, gboolean outline_set) +{ + if (re->outline_set != outline_set) { + re->outline_set = outline_set; + foo_canvas_item_request_update (FOO_CANVAS_ITEM (re)); + } +} + +static void +foo_canvas_re_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasRE *re; + GdkColor color = { 0, 0, 0, 0, }; + GdkColor *pcolor; + int have_pixel; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_RE (object)); + + item = FOO_CANVAS_ITEM (object); + re = FOO_CANVAS_RE (object); + have_pixel = FALSE; + + switch (param_id) { + case PROP_X1: + re->x1 = g_value_get_double (value); + + foo_canvas_item_request_update (item); + break; + + case PROP_Y1: + re->y1 = g_value_get_double (value); + + foo_canvas_item_request_update (item); + break; + + case PROP_X2: + re->x2 = g_value_get_double (value); + + foo_canvas_item_request_update (item); + break; + + case PROP_Y2: + re->y2 = g_value_get_double (value); + + foo_canvas_item_request_update (item); + break; + + case PROP_FILL_COLOR: + case PROP_FILL_COLOR_GDK: + case PROP_FILL_COLOR_RGBA: + switch (param_id) { + case PROP_FILL_COLOR: + if (g_value_get_string (value) && + gdk_color_parse (g_value_get_string (value), &color)) + foo_canvas_re_set_fill (re, TRUE); + else + foo_canvas_re_set_fill (re, FALSE); + + re->fill_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_FILL_COLOR_GDK: + pcolor = g_value_get_boxed (value); + foo_canvas_re_set_fill (re, pcolor != NULL); + + if (pcolor) { + GdkColormap *colormap; + + color = *pcolor; + colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + gdk_rgb_find_color (colormap, &color); + have_pixel = TRUE; + } + + re->fill_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_FILL_COLOR_RGBA: + foo_canvas_re_set_fill (re, TRUE); + re->fill_color = g_value_get_uint (value); + break; + } +#ifdef VERBOSE + g_print ("re fill color = %08x\n", re->fill_color); +#endif + if (have_pixel) + re->fill_pixel = color.pixel; + else + re->fill_pixel = foo_canvas_get_color_pixel (item->canvas, re->fill_color); + + set_gc_foreground (re->fill_gc, re->fill_pixel); + + foo_canvas_item_request_redraw (item); + break; + + case PROP_OUTLINE_COLOR: + case PROP_OUTLINE_COLOR_GDK: + case PROP_OUTLINE_COLOR_RGBA: + switch (param_id) { + case PROP_OUTLINE_COLOR: + if (g_value_get_string (value) && + gdk_color_parse (g_value_get_string (value), &color)) + foo_canvas_re_set_outline (re, TRUE); + else + foo_canvas_re_set_outline (re, FALSE); + + re->outline_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_OUTLINE_COLOR_GDK: + pcolor = g_value_get_boxed (value); + foo_canvas_re_set_outline (re, pcolor != NULL); + + if (pcolor) { + GdkColormap *colormap; + + color = *pcolor; + colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + gdk_rgb_find_color (colormap, &color); + + have_pixel = TRUE; + } + + re->outline_color = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + break; + + case PROP_OUTLINE_COLOR_RGBA: + foo_canvas_re_set_outline (re, TRUE); + re->outline_color = g_value_get_uint (value); + break; + } +#ifdef VERBOSE + g_print ("re outline color %x %x %x\n", color.red, color.green, color.blue); +#endif + if (have_pixel) + re->outline_pixel = color.pixel; + else + re->outline_pixel = foo_canvas_get_color_pixel (item->canvas, + re->outline_color); + + set_gc_foreground (re->outline_gc, re->outline_pixel); + + foo_canvas_item_request_redraw (item); + break; + + case PROP_FILL_STIPPLE: + set_stipple (re->fill_gc, &re->fill_stipple, (GdkBitmap *) g_value_get_object (value), FALSE); + + break; + + case PROP_OUTLINE_STIPPLE: + set_stipple (re->outline_gc, &re->outline_stipple, (GdkBitmap *) g_value_get_object (value), FALSE); + break; + + case PROP_WIDTH_PIXELS: + re->width = g_value_get_uint (value); + re->width_pixels = TRUE; + set_outline_gc_width (re); + + foo_canvas_item_request_update (item); + break; + + case PROP_WIDTH_UNITS: + re->width = fabs (g_value_get_double (value)); + re->width_pixels = FALSE; + set_outline_gc_width (re); + + foo_canvas_item_request_update (item); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +/* Allocates a GdkColor structure filled with the specified pixel, and puts it into the specified + * value for returning it in the get_property method. + */ +static void +get_color_value (FooCanvasRE *re, gulong pixel, GValue *value) +{ + GdkColor color; + FooCanvasItem *item = (FooCanvasItem *) re; + GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + + gdk_colormap_query_color (colormap, pixel, &color); + g_value_set_boxed (value, &color); +} + +static void +foo_canvas_re_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + FooCanvasRE *re; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_RE (object)); + + re = FOO_CANVAS_RE (object); + + switch (param_id) { + case PROP_X1: + g_value_set_double (value, re->x1); + break; + + case PROP_Y1: + g_value_set_double (value, re->y1); + break; + + case PROP_X2: + g_value_set_double (value, re->x2); + break; + + case PROP_Y2: + g_value_set_double (value, re->y2); + break; + + case PROP_FILL_COLOR_GDK: + get_color_value (re, re->fill_pixel, value); + break; + + case PROP_OUTLINE_COLOR_GDK: + get_color_value (re, re->outline_pixel, value); + break; + + case PROP_FILL_COLOR_RGBA: + g_value_set_uint (value, re->fill_color); + break; + + case PROP_OUTLINE_COLOR_RGBA: + g_value_set_uint (value, re->outline_color); + break; + + case PROP_FILL_STIPPLE: + g_value_set_object (value, (GObject *) re->fill_stipple); + break; + + case PROP_OUTLINE_STIPPLE: + g_value_set_object (value, (GObject *) re->outline_stipple); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +static void +set_colors_and_stipples (FooCanvasRE *re) +{ + set_gc_foreground (re->fill_gc, re->fill_pixel); + set_gc_foreground (re->outline_gc, re->outline_pixel); + set_stipple (re->fill_gc, &re->fill_stipple, re->fill_stipple, TRUE); + set_stipple (re->outline_gc, &re->outline_stipple, re->outline_stipple, TRUE); + set_outline_gc_width (re); +} + +static void +foo_canvas_re_update_shared (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) +{ + FooCanvasRE *re; + +#ifdef VERBOSE + g_print ("foo_canvas_re_update_shared\n"); +#endif + re = FOO_CANVAS_RE (item); + + if (re_parent_class->update) + (* re_parent_class->update) (item, i2w_dx, i2w_dy, flags); + + set_colors_and_stipples (re); + +#ifdef OLD_XFORM + recalc_bounds (re); +#endif +} + +static void +foo_canvas_re_realize (FooCanvasItem *item) +{ + FooCanvasRE *re; + +#ifdef VERBOSE + g_print ("foo_canvas_re_realize\n"); +#endif + re = FOO_CANVAS_RE (item); + + if (re_parent_class->realize) + (* re_parent_class->realize) (item); + + re->fill_gc = gdk_gc_new (item->canvas->layout.bin_window); + re->fill_pixel = foo_canvas_get_color_pixel (item->canvas, re->fill_color); + re->outline_gc = gdk_gc_new (item->canvas->layout.bin_window); + re->outline_pixel = foo_canvas_get_color_pixel (item->canvas, re->outline_color); + set_colors_and_stipples (re); + +#ifdef OLD_XFORM + (* FOO_CANVAS_ITEM_CLASS (item->object.klass)->update) (item, NULL, NULL, 0); +#endif +} + +static void +foo_canvas_re_unrealize (FooCanvasItem *item) +{ + FooCanvasRE *re; + + re = FOO_CANVAS_RE (item); + + g_object_unref (re->fill_gc); + re->fill_gc = NULL; + g_object_unref (re->outline_gc); + re->outline_gc = NULL; + + if (re_parent_class->unrealize) + (* re_parent_class->unrealize) (item); +} + +static void +foo_canvas_re_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasRE *re; + +#ifdef VERBOSE + g_print ("foo_canvas_re_translate\n"); +#endif + re = FOO_CANVAS_RE (item); + + re->x1 += dx; + re->y1 += dy; + re->x2 += dx; + re->y2 += dy; +} + + +static void +foo_canvas_re_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasRE *re; + double hwidth; + +#ifdef VERBOSE + g_print ("foo_canvas_re_bounds\n"); +#endif + re = FOO_CANVAS_RE (item); + + if (re->width_pixels) + hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0; + else + hwidth = re->width / 2.0; + + *x1 = re->x1 - hwidth; + *y1 = re->y1 - hwidth; + *x2 = re->x2 + hwidth; + *y2 = re->y2 + hwidth; +} + +/* Rectangle item */ + + +static void foo_canvas_rect_class_init (FooCanvasRectClass *class); +static void foo_canvas_rect_init (FooCanvasRect *rect); +static void foo_canvas_rect_finalize (GObject *object); +static void foo_canvas_rect_realize (FooCanvasItem *item); + +static void foo_canvas_rect_draw (FooCanvasItem *item, GdkDrawable *drawable, GdkEventExpose *expose); +static double foo_canvas_rect_point (FooCanvasItem *item, double x, double y, int cx, int cy, + FooCanvasItem **actual_item); + +struct _FooCanvasRectPrivate { + Rect last_update_rect; + Rect last_outline_update_rect; + int last_outline_update_width; + +#ifdef HAVE_RENDER + gboolean use_render; + XRenderPictFormat *format; +#endif +}; + +GType +foo_canvas_rect_get_type (void) +{ + static GType rect_type = 0; + + if (!rect_type) { + GTypeInfo rect_info = { + sizeof (FooCanvasRectClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_rect_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (FooCanvasRect), + 0, /* n_preallocs */ + (GInstanceInitFunc) foo_canvas_rect_init + }; + + rect_type = g_type_register_static (foo_canvas_re_get_type (), + "FooCanvasRect", + &rect_info, + 0); + } + + return rect_type; +} + +static void +foo_canvas_rect_class_init (FooCanvasRectClass *class) +{ + FooCanvasItemClass *item_class; + + rect_parent_class = g_type_class_peek_parent (class); + + item_class = (FooCanvasItemClass *) class; + + item_class->draw = foo_canvas_rect_draw; + item_class->point = foo_canvas_rect_point; + item_class->update = foo_canvas_rect_update; + item_class->realize = foo_canvas_rect_realize; + + G_OBJECT_CLASS (class)->finalize = foo_canvas_rect_finalize; + +} + +static void +foo_canvas_rect_init (FooCanvasRect *rect) +{ + rect->priv = g_new0 (FooCanvasRectPrivate, 1); +} + +static void +foo_canvas_rect_finalize (GObject *object) +{ + FooCanvasRect *rect = FOO_CANVAS_RECT (object); + + if (rect->priv) { + g_free (rect->priv); + } + + G_OBJECT_CLASS (rect_parent_class)->finalize (object); +} + +static void +foo_canvas_rect_realize (FooCanvasItem *item) +{ +#ifdef HAVE_RENDER + FooCanvasRectPrivate *priv; + int event_base, error_base; + Display *dpy; + + priv = FOO_CANVAS_RECT (item)->priv; + + dpy = gdk_x11_drawable_get_xdisplay (GTK_WIDGET (item->canvas)->window); + priv->use_render = XRenderQueryExtension (dpy, &event_base, &error_base); + + if (priv->use_render) { + GdkVisual *gdk_visual; + Visual *visual; + + gdk_visual = gtk_widget_get_visual (GTK_WIDGET (item->canvas)); + visual = gdk_x11_visual_get_xvisual (gdk_visual); + + priv->format = XRenderFindVisualFormat (dpy, visual); + } +#endif + + if (FOO_CANVAS_ITEM_CLASS (rect_parent_class)->realize) { + (* FOO_CANVAS_ITEM_CLASS (rect_parent_class)->realize) (item); + } +} + + +static void +render_rect_alpha (FooCanvasRect *rect, + GdkDrawable *drawable, + int x, int y, + int width, int height, + guint32 rgba) +{ + GdkPixbuf *pixbuf; + guchar *data; + int rowstride, i; + guchar r, g, b, a; + FooCanvasRectPrivate *priv; + + if (width <= 0 || height <= 0 ) { + return; + } + + priv = rect->priv; + + r = (rgba >> 24) & 0xff; + g = (rgba >> 16) & 0xff; + b = (rgba >> 8) & 0xff; + a = (rgba >> 0) & 0xff; + +#ifdef HAVE_RENDER + /* Every visual is not guaranteed to have a matching + * XRenderPictFormat. So make sure that format is not null before + * trying to render using Xrender calls. + */ + if (priv->use_render && (priv->format != NULL)) { + GdkDrawable *real_drawable; + int x_offset, y_offset; + + Display *dpy; + Picture pict; + XRenderPictureAttributes attributes; + XRenderColor color; + + gdk_window_get_internal_paint_info (drawable, &real_drawable, + &x_offset, &y_offset); + + dpy = gdk_x11_drawable_get_xdisplay (real_drawable); + + pict = XRenderCreatePicture (dpy, + gdk_x11_drawable_get_xid (real_drawable), + priv->format, + 0, + &attributes); + + + /* Convert to premultiplied alpha: */ + r = r * a / 255; + g = g * a / 255; + b = b * a / 255; + + color.red = (r << 8) + r; + color.green = (g << 8) + g; + color.blue = (b << 8) + b; + color.alpha = (a << 8) + a; + + XRenderFillRectangle (dpy, + PictOpOver, + pict, + &color, + x - x_offset, y - y_offset, + width, height); + + XRenderFreePicture (dpy, pict); + + return; + } +#endif + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height); + data = gdk_pixbuf_get_pixels (pixbuf); + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + + r = (rgba >> 24) & 0xff; + g = (rgba >> 16) & 0xff; + b = (rgba >> 8) & 0xff; + a = (rgba >> 0) & 0xff; + + for (i = 0; i < width*4; ) { + data[i++] = r; + data[i++] = g; + data[i++] = b; + data[i++] = a; + } + + for (i = 1; i < height; i++) { + memcpy (data + i*rowstride, data, width*4); + } + + gdk_draw_pixbuf (drawable, NULL, pixbuf, + 0, 0, x, y, width, height, + GDK_RGB_DITHER_NONE, 0, 0); + g_object_unref (pixbuf); +} + + +static void +foo_canvas_rect_draw (FooCanvasItem *item, GdkDrawable *drawable, GdkEventExpose *expose) +{ + FooCanvasRE *re; + double x1, y1, x2, y2; + int cx1, cy1, cx2, cy2; + double i2w_dx, i2w_dy; + + re = FOO_CANVAS_RE (item); + + /* Get canvas pixel coordinates */ + i2w_dx = 0.0; + i2w_dy = 0.0; + foo_canvas_item_i2w (item, &i2w_dx, &i2w_dy); + + x1 = re->x1 + i2w_dx; + y1 = re->y1 + i2w_dy; + x2 = re->x2 + i2w_dx; + y2 = re->y2 + i2w_dy; + + foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1); + foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2); + + if (re->fill_set) { + if ((re->fill_color & 0xff) != 255) { + GdkRectangle *rectangles; + gint i, n_rectangles; + GdkRectangle draw_rect; + GdkRectangle part; + + draw_rect.x = cx1; + draw_rect.y = cy1; + draw_rect.width = cx2 - cx1 + 1; + draw_rect.height = cy2 - cy1 + 1; + + /* For alpha mode, only render the parts of the region + that are actually exposed */ + gdk_region_get_rectangles (expose->region, + &rectangles, + &n_rectangles); + + for (i = 0; i < n_rectangles; i++) { + if (gdk_rectangle_intersect (&rectangles[i], + &draw_rect, + &part)) { + render_rect_alpha (FOO_CANVAS_RECT (item), + drawable, + part.x, part.y, + part.width, part.height, + re->fill_color); + } + } + + g_free (rectangles); + } else { + if (re->fill_stipple) + foo_canvas_set_stipple_origin (item->canvas, re->fill_gc); + + gdk_draw_rectangle (drawable, + re->fill_gc, + TRUE, + cx1, cy1, + cx2 - cx1 + 1, + cy2 - cy1 + 1); + } + } + + if (re->outline_set) { + if (re->outline_stipple) + foo_canvas_set_stipple_origin (item->canvas, re->outline_gc); + + gdk_draw_rectangle (drawable, + re->outline_gc, + FALSE, + cx1, + cy1, + cx2 - cx1, + cy2 - cy1); + } +} + +static double +foo_canvas_rect_point (FooCanvasItem *item, double x, double y, int cx, int cy, FooCanvasItem **actual_item) +{ + FooCanvasRE *re; + double x1, y1, x2, y2; + double hwidth; + double dx, dy; + double tmp; + +#ifdef VERBOSE + g_print ("foo_canvas_rect_point\n"); +#endif + re = FOO_CANVAS_RE (item); + + *actual_item = item; + + /* Find the bounds for the rectangle plus its outline width */ + + x1 = re->x1; + y1 = re->y1; + x2 = re->x2; + y2 = re->y2; + + if (re->outline_set) { + if (re->width_pixels) + hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0; + else + hwidth = re->width / 2.0; + + x1 -= hwidth; + y1 -= hwidth; + x2 += hwidth; + y2 += hwidth; + } else + hwidth = 0.0; + + /* Is point inside rectangle (which can be hollow if it has no fill set)? */ + + if ((x >= x1) && (y >= y1) && (x <= x2) && (y <= y2)) { + if (re->fill_set || !re->outline_set) + return 0.0; + + dx = x - x1; + tmp = x2 - x; + if (tmp < dx) + dx = tmp; + + dy = y - y1; + tmp = y2 - y; + if (tmp < dy) + dy = tmp; + + if (dy < dx) + dx = dy; + + dx -= 2.0 * hwidth; + + if (dx < 0.0) + return 0.0; + else + return dx; + } + + /* Point is outside rectangle */ + + if (x < x1) + dx = x1 - x; + else if (x > x2) + dx = x - x2; + else + dx = 0.0; + + if (y < y1) + dy = y1 - y; + else if (y > y2) + dy = y - y2; + else + dy = 0.0; + + return sqrt (dx * dx + dy * dy); +} + +static void +request_redraw_borders (FooCanvas *canvas, + Rect *update_rect, + int width) +{ + foo_canvas_request_redraw (canvas, + update_rect->x0, update_rect->y0, + update_rect->x1, update_rect->y0 + width); + foo_canvas_request_redraw (canvas, + update_rect->x0, update_rect->y1-width, + update_rect->x1, update_rect->y1); + foo_canvas_request_redraw (canvas, + update_rect->x0, update_rect->y0, + update_rect->x0+width, update_rect->y1); + foo_canvas_request_redraw (canvas, + update_rect->x1-width, update_rect->y0, + update_rect->x1, update_rect->y1); +} + + +static void +foo_canvas_rect_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, gint flags) +{ + FooCanvasRE *re; + double x1, y1, x2, y2; + int cx1, cy1, cx2, cy2; + int repaint_rects_count, i; + int width_pixels; + int width_lt, width_rb; + Rect update_rect, repaint_rects[4]; + FooCanvasRectPrivate *priv; + + foo_canvas_re_update_shared (item, i2w_dx, i2w_dy, flags); + + re = FOO_CANVAS_RE (item); + priv = FOO_CANVAS_RECT (item)->priv; + + x1 = re->x1 + i2w_dx; + y1 = re->y1 + i2w_dy; + x2 = re->x2 + i2w_dx; + y2 = re->y2 + i2w_dy; + + foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1); + foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2); + + update_rect = make_rect (cx1, cy1, cx2+1, cy2+1); +#if 0 + foo_canvas_request_redraw (item->canvas, + update_rect.x0, update_rect.y0, + update_rect.x1, update_rect.y1); + foo_canvas_request_redraw (item->canvas, + priv->last_update_rect.x0, priv->last_update_rect.y0, + priv->last_update_rect.x1, priv->last_update_rect.y1); +#else + diff_rects (update_rect, priv->last_update_rect, + &repaint_rects_count, repaint_rects); + for (i = 0; i < repaint_rects_count; i++) { + foo_canvas_request_redraw (item->canvas, + repaint_rects[i].x0, repaint_rects[i].y0, + repaint_rects[i].x1, repaint_rects[i].y1); + } +#endif + priv->last_update_rect = update_rect; + + if (re->outline_set) { + /* Outline and bounding box */ + if (re->width_pixels) + width_pixels = (int) re->width; + else + width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5); + + width_lt = width_pixels / 2; + width_rb = (width_pixels + 1) / 2; + + cx1 -= width_lt; + cy1 -= width_lt; + cx2 += width_rb; + cy2 += width_rb; + + update_rect = make_rect (cx1, cy1, cx2, cy2); + request_redraw_borders (item->canvas, &update_rect, + (width_lt + width_rb)); + request_redraw_borders (item->canvas, &priv->last_outline_update_rect, + priv->last_outline_update_width); + priv->last_outline_update_rect = update_rect; + priv->last_outline_update_width = width_lt + width_rb; + + item->x1 = cx1; + item->y1 = cy1; + item->x2 = cx2+1; + item->y2 = cy2+1; + } else { + item->x1 = cx1; + item->y1 = cy1; + item->x2 = cx2+1; + item->y2 = cy2+1; + } +} + +/* Ellipse item */ + + +static void foo_canvas_ellipse_class_init (FooCanvasEllipseClass *class); + +static void foo_canvas_ellipse_draw (FooCanvasItem *item, GdkDrawable *drawable, GdkEventExpose *expose); +static double foo_canvas_ellipse_point (FooCanvasItem *item, double x, double y, int cx, int cy, + FooCanvasItem **actual_item); + + +GType +foo_canvas_ellipse_get_type (void) +{ + static GType ellipse_type = 0; + + if (!ellipse_type) { + GTypeInfo ellipse_info = { + sizeof (FooCanvasEllipseClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_ellipse_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (FooCanvasEllipse), + 0, /* n_preallocs */ + (GInstanceInitFunc) NULL + + }; + + ellipse_type = g_type_register_static (foo_canvas_re_get_type (), + "FooCanvasEllipse", + &ellipse_info, + 0); + } + + return ellipse_type; +} + +static void +foo_canvas_ellipse_class_init (FooCanvasEllipseClass *class) +{ + FooCanvasItemClass *item_class; + + item_class = (FooCanvasItemClass *) class; + + item_class->draw = foo_canvas_ellipse_draw; + item_class->point = foo_canvas_ellipse_point; + item_class->update = foo_canvas_ellipse_update; +} + +static void +foo_canvas_ellipse_draw (FooCanvasItem *item, GdkDrawable *drawable, GdkEventExpose *expose) +{ + FooCanvasRE *re; + int x1, y1, x2, y2; + double i2w_dx, i2w_dy; + + re = FOO_CANVAS_RE (item); + + /* Get canvas pixel coordinates */ + + i2w_dx = 0.0; + i2w_dy = 0.0; + foo_canvas_item_i2w (item, &i2w_dx, &i2w_dy); + + foo_canvas_w2c (item->canvas, + re->x1 + i2w_dx, + re->y1 + i2w_dy, + &x1, &y1); + foo_canvas_w2c (item->canvas, + re->x2 + i2w_dx, + re->y2 + i2w_dy, + &x2, &y2); + + if (re->fill_set) { + if (re->fill_stipple) + foo_canvas_set_stipple_origin (item->canvas, re->fill_gc); + + gdk_draw_arc (drawable, + re->fill_gc, + TRUE, + x1, + y1, + x2 - x1, + y2 - y1, + 0 * 64, + 360 * 64); + } + + if (re->outline_set) { + if (re->outline_stipple) + foo_canvas_set_stipple_origin (item->canvas, re->outline_gc); + + gdk_draw_arc (drawable, + re->outline_gc, + FALSE, + x1, + y1, + x2 - x1, + y2 - y1, + 0 * 64, + 360 * 64); + } +} + +static double +foo_canvas_ellipse_point (FooCanvasItem *item, double x, double y, int cx, int cy, FooCanvasItem **actual_item) +{ + FooCanvasRE *re; + double dx, dy; + double scaled_dist; + double outline_dist; + double center_dist; + double width; + double a, b; + double diamx, diamy; + + re = FOO_CANVAS_RE (item); + + *actual_item = item; + + if (re->outline_set) { + if (re->width_pixels) + width = re->width / item->canvas->pixels_per_unit; + else + width = re->width; + } else + width = 0.0; + + /* Compute the distance between the center of the ellipse and the point, with the ellipse + * considered as being scaled to a circle. + */ + + dx = x - (re->x1 + re->x2) / 2.0; + dy = y - (re->y1 + re->y2) / 2.0; + center_dist = sqrt (dx * dx + dy * dy); + + a = dx / ((re->x2 + width - re->x1) / 2.0); + b = dy / ((re->y2 + width - re->y1) / 2.0); + scaled_dist = sqrt (a * a + b * b); + + /* If the scaled distance is greater than 1, then we are outside. Compute the distance from + * the point to the edge of the circle, then scale back to the original un-scaled coordinate + * system. + */ + + if (scaled_dist > 1.0) + return (center_dist / scaled_dist) * (scaled_dist - 1.0); + + /* We are inside the outer edge of the ellipse. If it is filled, then we are "inside". + * Otherwise, do the same computation as above, but also check whether we are inside the + * outline. + */ + + if (re->fill_set) + return 0.0; + + if (scaled_dist > FOO_CANVAS_EPSILON) + outline_dist = (center_dist / scaled_dist) * (1.0 - scaled_dist) - width; + else { + /* Handle very small distance */ + + diamx = re->x2 - re->x1; + diamy = re->y2 - re->y1; + + if (diamx < diamy) + outline_dist = (diamx - width) / 2.0; + else + outline_dist = (diamy - width) / 2.0; + } + + if (outline_dist < 0.0) + return 0.0; + + return outline_dist; +} + +static void +foo_canvas_ellipse_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, gint flags) +{ + FooCanvasRE *re; + double x0, y0, x1, y1; + +#ifdef VERBOSE + g_print ("foo_canvas_sllipse_update item %x\n", item); +#endif + + foo_canvas_re_update_shared (item, i2w_dx, i2w_dy, flags); + re = FOO_CANVAS_RE (item); + + get_bounds (re, &x0, &y0, &x1, &y1); + foo_canvas_update_bbox (item, x0, y0, x1, y1); +} + +static int +rect_empty (const Rect *src) { + return (src->x1 <= src->x0 || src->y1 <= src->y0); +} + +static Rect +make_rect (int x0, int y0, int x1, int y1) +{ + Rect r; + + r.x0 = x0; + r.y0 = y0; + r.x1 = x1; + r.y1 = y1; + return r; +} + +static gboolean +rects_intersect (Rect r1, Rect r2) +{ + if (r1.x0 >= r2.x1) { + return FALSE; + } + if (r2.x0 >= r1.x1) { + return FALSE; + } + if (r1.y0 >= r2.y1) { + return FALSE; + } + if (r2.y0 >= r1.y1) { + return FALSE; + } + return TRUE; +} + +static void +diff_rects_guts (Rect ra, Rect rb, int *count, Rect result[4]) +{ + if (ra.x0 < rb.x0) { + result[(*count)++] = make_rect (ra.x0, ra.y0, rb.x0, ra.y1); + } + if (ra.y0 < rb.y0) { + result[(*count)++] = make_rect (ra.x0, ra.y0, ra.x1, rb.y0); + } + if (ra.x1 < rb.x1) { + result[(*count)++] = make_rect (ra.x1, rb.y0, rb.x1, rb.y1); + } + if (ra.y1 < rb.y1) { + result[(*count)++] = make_rect (rb.x0, ra.y1, rb.x1, rb.y1); + } +} + +static void +diff_rects (Rect r1, Rect r2, int *count, Rect result[4]) +{ + g_assert (count != NULL); + g_assert (result != NULL); + + *count = 0; + + if (rects_intersect (r1, r2)) { + diff_rects_guts (r1, r2, count, result); + diff_rects_guts (r2, r1, count, result); + } else { + if (!rect_empty (&r1)) { + result[(*count)++] = r1; + } + if (!rect_empty (&r2)) { + result[(*count)++] = r2; + } + } +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-rect-ellipse.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-rect-ellipse.h new file mode 100644 index 0000000000..5fabe35efb --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-rect-ellipse.h @@ -0,0 +1,176 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Rectangle and ellipse item types for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#ifndef FOO_CANVAS_RECT_ELLIPSE_H +#define FOO_CANVAS_RECT_ELLIPSE_H + + +#include + +G_BEGIN_DECLS + + +/* Base class for rectangle and ellipse item types. These are defined by their top-left and + * bottom-right corners. Rectangles and ellipses share the following arguments: + * + * name type read/write description + * ------------------------------------------------------------------------------------------ + * x1 double RW Leftmost coordinate of rectangle or ellipse + * y1 double RW Topmost coordinate of rectangle or ellipse + * x2 double RW Rightmost coordinate of rectangle or ellipse + * y2 double RW Bottommost coordinate of rectangle or ellipse + * fill_color string W X color specification for fill color, + * or NULL pointer for no color (transparent) + * fill_color_gdk GdkColor* RW Allocated GdkColor for fill + * outline_color string W X color specification for outline color, + * or NULL pointer for no color (transparent) + * outline_color_gdk GdkColor* RW Allocated GdkColor for outline + * fill_stipple GdkBitmap* RW Stipple pattern for fill + * outline_stipple GdkBitmap* RW Stipple pattern for outline + * width_pixels uint RW Width of the outline in pixels. The outline will + * not be scaled when the canvas zoom factor is changed. + * width_units double RW Width of the outline in canvas units. The outline + * will be scaled when the canvas zoom factor is changed. + */ + + +#define FOO_TYPE_CANVAS_RE (foo_canvas_re_get_type ()) +#define FOO_CANVAS_RE(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_RE, FooCanvasRE)) +#define FOO_CANVAS_RE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_RE, FooCanvasREClass)) +#define FOO_IS_CANVAS_RE(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_RE)) +#define FOO_IS_CANVAS_RE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_RE)) +#define FOO_CANVAS_RE_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_RE, FooCanvasREClass)) + + +typedef struct _FooCanvasRE FooCanvasRE; +typedef struct _FooCanvasREClass FooCanvasREClass; + +struct _FooCanvasRE { + FooCanvasItem item; + + GdkBitmap *fill_stipple; /* Stipple for fill */ + GdkBitmap *outline_stipple; /* Stipple for outline */ + + GdkGC *fill_gc; /* GC for filling */ + GdkGC *outline_gc; /* GC for outline */ + + gulong fill_pixel; /* Fill color */ + gulong outline_pixel; /* Outline color */ + + double x1, y1, x2, y2; /* Corners of item */ + double width; /* Outline width */ + + guint fill_color; /* Fill color, RGBA */ + guint outline_color; /* Outline color, RGBA */ + + /* Configuration flags */ + + unsigned int fill_set : 1; /* Is fill color set? */ + unsigned int outline_set : 1; /* Is outline color set? */ + unsigned int width_pixels : 1; /* Is outline width specified in pixels or units? */ +}; + +struct _FooCanvasREClass { + FooCanvasItemClass parent_class; +}; + + +/* Standard Gtk function */ +GType foo_canvas_re_get_type (void) G_GNUC_CONST; + + +/* Rectangle item. No configurable or queryable arguments are available (use those in + * FooCanvasRE). + */ + + +#define FOO_TYPE_CANVAS_RECT (foo_canvas_rect_get_type ()) +#define FOO_CANVAS_RECT(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_RECT, FooCanvasRect)) +#define FOO_CANVAS_RECT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_RECT, FooCanvasRectClass)) +#define FOO_IS_CANVAS_RECT(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_RECT)) +#define FOO_IS_CANVAS_RECT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_RECT)) +#define FOO_CANVAS_RECT_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_RECT, FooCanvasRectClass)) + + +typedef struct _FooCanvasRect FooCanvasRect; +typedef struct _FooCanvasRectPrivate FooCanvasRectPrivate; +typedef struct _FooCanvasRectClass FooCanvasRectClass; + +struct _FooCanvasRect { + FooCanvasRE re; + FooCanvasRectPrivate *priv; +}; + +struct _FooCanvasRectClass { + FooCanvasREClass parent_class; +}; + + +/* Standard Gtk function */ +GType foo_canvas_rect_get_type (void) G_GNUC_CONST; + + +/* Ellipse item. No configurable or queryable arguments are available (use those in + * FooCanvasRE). + */ + + +#define FOO_TYPE_CANVAS_ELLIPSE (foo_canvas_ellipse_get_type ()) +#define FOO_CANVAS_ELLIPSE(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ELLIPSE, FooCanvasEllipse)) +#define FOO_CANVAS_ELLIPSE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ELLIPSE, FooCanvasEllipseClass)) +#define FOO_IS_CANVAS_ELLIPSE(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_ELLIPSE)) +#define FOO_IS_CANVAS_ELLIPSE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_ELLIPSE)) +#define FOO_CANVAS_ELLIPSE_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_ELLIPSE, FooCanvasEllipseClass)) + + +typedef struct _FooCanvasEllipse FooCanvasEllipse; +typedef struct _FooCanvasEllipseClass FooCanvasEllipseClass; + +struct _FooCanvasEllipse { + FooCanvasRE re; +}; + +struct _FooCanvasEllipseClass { + FooCanvasREClass parent_class; +}; + + +/* Standard Gtk function */ +GType foo_canvas_ellipse_get_type (void) G_GNUC_CONST; + + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-text.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-text.c new file mode 100644 index 0000000000..ec7d555773 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-text.c @@ -0,0 +1,1624 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#undef GTK_DISABLE_DEPRECATED +#include +#include +#include +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Text item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas + * widget. Tk is copyrighted by the Regents of the University of California, + * Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + * Port to Pango co-done by Gergõ Érdi + */ + +#include +#include +#include "foo-canvas-text.h" + +#include "foo-canvas-util.h" +#include "foo-canvas-i18n.h" + + + +/* Object argument IDs */ +enum { + PROP_0, + + /* Text contents */ + PROP_TEXT, + PROP_MARKUP, + + /* Position */ + PROP_X, + PROP_Y, + + /* Font */ + PROP_FONT, + PROP_FONT_DESC, + PROP_FAMILY, PROP_FAMILY_SET, + + /* Style */ + PROP_ATTRIBUTES, + PROP_STYLE, PROP_STYLE_SET, + PROP_VARIANT, PROP_VARIANT_SET, + PROP_WEIGHT, PROP_WEIGHT_SET, + PROP_STRETCH, PROP_STRETCH_SET, + PROP_SIZE, PROP_SIZE_SET, + PROP_SIZE_POINTS, + PROP_STRIKETHROUGH, PROP_STRIKETHROUGH_SET, + PROP_UNDERLINE, PROP_UNDERLINE_SET, + PROP_RISE, PROP_RISE_SET, + PROP_SCALE, PROP_SCALE_SET, + + /* Clipping */ + PROP_ANCHOR, + PROP_JUSTIFICATION, + PROP_CLIP_WIDTH, + PROP_CLIP_HEIGHT, + PROP_CLIP, + PROP_WRAP_WIDTH, + PROP_X_OFFSET, + PROP_Y_OFFSET, + + /* Coloring */ + PROP_FILL_COLOR, + PROP_FILL_COLOR_GDK, + PROP_FILL_COLOR_RGBA, + PROP_FILL_STIPPLE, + + /* Rendered size accessors */ + PROP_TEXT_WIDTH, + PROP_TEXT_HEIGHT +}; + +struct _FooCanvasTextPrivate { + gint placeholder; +}; + +static void foo_canvas_text_class_init (FooCanvasTextClass *class); +static void foo_canvas_text_init (FooCanvasText *text); +static void foo_canvas_text_destroy (GtkObject *object); +static void foo_canvas_text_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void foo_canvas_text_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); + +static void foo_canvas_text_update (FooCanvasItem *item, + double i2w_dx, + double i2w_dy, + int flags); +static void foo_canvas_text_realize (FooCanvasItem *item); +static void foo_canvas_text_unrealize (FooCanvasItem *item); +static void foo_canvas_text_draw (FooCanvasItem *item, + GdkDrawable *drawable, + GdkEventExpose *expose); +static double foo_canvas_text_point (FooCanvasItem *item, + double x, + double y, + int cx, + int cy, + FooCanvasItem **actual_item); +static void foo_canvas_text_translate (FooCanvasItem *item, + double dx, + double dy); +static void foo_canvas_text_bounds (FooCanvasItem *item, + double *x1, + double *y1, + double *x2, + double *y2); + +static void foo_canvas_text_set_markup (FooCanvasText *textitem, + const gchar *markup); + +static void foo_canvas_text_set_font_desc (FooCanvasText *textitem, + PangoFontDescription *font_desc); + +static void foo_canvas_text_apply_font_desc (FooCanvasText *textitem); +static void foo_canvas_text_apply_attributes (FooCanvasText *textitem); + +static void add_attr (PangoAttrList *attr_list, + PangoAttribute *attr); + +static FooCanvasItemClass *parent_class; + + + +/** + * foo_canvas_text_get_type: + * @void: + * + * Registers the &FooCanvasText class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &FooCanvasText class. + **/ +GtkType +foo_canvas_text_get_type (void) +{ + static GtkType text_type = 0; + + if (!text_type) { + /* FIXME: Convert to gobject style. */ + static const GtkTypeInfo text_info = { + (char *)"FooCanvasText", + sizeof (FooCanvasText), + sizeof (FooCanvasTextClass), + (GtkClassInitFunc) foo_canvas_text_class_init, + (GtkObjectInitFunc) foo_canvas_text_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + text_type = gtk_type_unique (foo_canvas_item_get_type (), &text_info); + } + + return text_type; +} + +/* Class initialization function for the text item */ +static void +foo_canvas_text_class_init (FooCanvasTextClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + parent_class = gtk_type_class (foo_canvas_item_get_type ()); + + gobject_class->set_property = foo_canvas_text_set_property; + gobject_class->get_property = foo_canvas_text_get_property; + + /* Text */ + g_object_class_install_property + (gobject_class, + PROP_TEXT, + g_param_spec_string ("text", + _("Text"), + _("Text to render"), + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_MARKUP, + g_param_spec_string ("markup", + _("Markup"), + _("Marked up text to render"), + NULL, + (G_PARAM_WRITABLE))); + + /* Position */ + g_object_class_install_property + (gobject_class, + PROP_X, + g_param_spec_double ("x", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_Y, + g_param_spec_double ("y", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + + /* Font */ + g_object_class_install_property + (gobject_class, + PROP_FONT, + g_param_spec_string ("font", + _("Font"), + _("Font description as a string"), + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_FONT_DESC, + g_param_spec_boxed ("font-desc", + _("Font description"), + _("Font description as a PangoFontDescription struct"), + PANGO_TYPE_FONT_DESCRIPTION, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_FAMILY, + g_param_spec_string ("family", + _("Font family"), + _("Name of the font family, e.g. Sans, Helvetica, Times, Monospace"), + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + /* Style */ + g_object_class_install_property + (gobject_class, + PROP_ATTRIBUTES, + g_param_spec_boxed ("attributes", NULL, NULL, + PANGO_TYPE_ATTR_LIST, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_STYLE, + g_param_spec_enum ("style", + _("Font style"), + _("Font style"), + PANGO_TYPE_STYLE, + PANGO_STYLE_NORMAL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_VARIANT, + g_param_spec_enum ("variant", + _("Font variant"), + _("Font variant"), + PANGO_TYPE_VARIANT, + PANGO_VARIANT_NORMAL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_WEIGHT, + g_param_spec_int ("weight", + _("Font weight"), + _("Font weight"), + 0, + G_MAXINT, + PANGO_WEIGHT_NORMAL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + + g_object_class_install_property + (gobject_class, + PROP_STRETCH, + g_param_spec_enum ("stretch", + _("Font stretch"), + _("Font stretch"), + PANGO_TYPE_STRETCH, + PANGO_STRETCH_NORMAL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_SIZE, + g_param_spec_int ("size", + _("Font size"), + _("Font size"), + 0, + G_MAXINT, + 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_SIZE_POINTS, + g_param_spec_double ("size-points", + _("Font points"), + _("Font size in points"), + 0.0, + G_MAXDOUBLE, + 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_RISE, + g_param_spec_int ("rise", + _("Rise"), + _("Offset of text above the baseline (below the baseline if rise is negative)"), + -G_MAXINT, + G_MAXINT, + 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_STRIKETHROUGH, + g_param_spec_boolean ("strikethrough", + _("Strikethrough"), + _("Whether to strike through the text"), + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_UNDERLINE, + g_param_spec_enum ("underline", + _("Underline"), + _("Style of underline for this text"), + PANGO_TYPE_UNDERLINE, + PANGO_UNDERLINE_NONE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_SCALE, + g_param_spec_double ("scale", + _("Scale"), + _("Size of font, relative to default size"), + 0.0, + G_MAXDOUBLE, + 1.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_ANCHOR, + g_param_spec_enum ("anchor", NULL, NULL, + GTK_TYPE_ANCHOR_TYPE, + GTK_ANCHOR_CENTER, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_JUSTIFICATION, + g_param_spec_enum ("justification", NULL, NULL, + GTK_TYPE_JUSTIFICATION, + GTK_JUSTIFY_LEFT, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_CLIP_WIDTH, + g_param_spec_double ("clip-width", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_CLIP_HEIGHT, + g_param_spec_double ("clip-height", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_CLIP, + g_param_spec_boolean ("clip", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WRAP_WIDTH, + g_param_spec_double ("wrap-width", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_X_OFFSET, + g_param_spec_double ("x-offset", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_Y_OFFSET, + g_param_spec_double ("y-offset", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR, + g_param_spec_string ("fill-color", + _("Color"), + _("Text color, as string"), + NULL, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_GDK, + g_param_spec_boxed ("fill-color-gdk", + _("Color"), + _("Text color, as a GdkColor"), + GDK_TYPE_COLOR, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_COLOR_RGBA, + g_param_spec_uint ("fill-color-rgba", + _("Color"), + _("Text color, as an R/G/B/A combined integer"), + 0, G_MAXUINT, 0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_FILL_STIPPLE, + g_param_spec_object ("fill-stipple", NULL, NULL, + GDK_TYPE_DRAWABLE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_TEXT_WIDTH, + g_param_spec_double ("text-width", + _("Text width"), + _("Width of the rendered text"), + 0.0, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_TEXT_HEIGHT, + g_param_spec_double ("text-height", + _("Text height"), + _("Height of the rendered text"), + 0.0, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + /* Style props are set (explicitly applied) or not */ +#define ADD_SET_PROP(propname, propval, nick, blurb) g_object_class_install_property (gobject_class, propval, g_param_spec_boolean (propname, nick, blurb, FALSE, GSF_PARAM_STATIC | G_PARAM_READWRITE)) + + ADD_SET_PROP ("family-set", PROP_FAMILY_SET, + _("Font family set"), + _("Whether this tag affects the font family")); + + ADD_SET_PROP ("style-set", PROP_STYLE_SET, + _("Font style set"), + _("Whether this tag affects the font style")); + + ADD_SET_PROP ("variant-set", PROP_VARIANT_SET, + _("Font variant set"), + _("Whether this tag affects the font variant")); + + ADD_SET_PROP ("weight-set", PROP_WEIGHT_SET, + _("Font weight set"), + _("Whether this tag affects the font weight")); + + ADD_SET_PROP ("stretch-set", PROP_STRETCH_SET, + _("Font stretch set"), + _("Whether this tag affects the font stretch")); + + ADD_SET_PROP ("size-set", PROP_SIZE_SET, + _("Font size set"), + _("Whether this tag affects the font size")); + + ADD_SET_PROP ("rise-set", PROP_RISE_SET, + _("Rise set"), + _("Whether this tag affects the rise")); + + ADD_SET_PROP ("strikethrough-set", PROP_STRIKETHROUGH_SET, + _("Strikethrough set"), + _("Whether this tag affects strikethrough")); + + ADD_SET_PROP ("underline-set", PROP_UNDERLINE_SET, + _("Underline set"), + _("Whether this tag affects underlining")); + + ADD_SET_PROP ("scale-set", PROP_SCALE_SET, + _("Scale set"), + _("Whether this tag affects font scaling")); +#undef ADD_SET_PROP + + object_class->destroy = foo_canvas_text_destroy; + + item_class->update = foo_canvas_text_update; + item_class->realize = foo_canvas_text_realize; + item_class->unrealize = foo_canvas_text_unrealize; + item_class->draw = foo_canvas_text_draw; + item_class->point = foo_canvas_text_point; + item_class->translate = foo_canvas_text_translate; + item_class->bounds = foo_canvas_text_bounds; +} + +/* Object initialization function for the text item */ +static void +foo_canvas_text_init (FooCanvasText *text) +{ + text->x = 0.0; + text->y = 0.0; + text->anchor = GTK_ANCHOR_CENTER; + text->justification = GTK_JUSTIFY_LEFT; + text->clip_width = 0.0; + text->clip_height = 0.0; + text->xofs = 0.0; + text->yofs = 0.0; + text->layout = NULL; + + text->font_desc = NULL; + + text->underline = PANGO_UNDERLINE_NONE; + text->strikethrough = FALSE; + text->rise = 0; + + text->underline_set = FALSE; + text->strike_set = FALSE; + text->rise_set = FALSE; + + text->priv = g_new (FooCanvasTextPrivate, 1); +} + +/* Destroy handler for the text item */ +static void +foo_canvas_text_destroy (GtkObject *object) +{ + FooCanvasText *text; + + g_return_if_fail (FOO_IS_CANVAS_TEXT (object)); + + text = FOO_CANVAS_TEXT (object); + + /* remember, destroy can be run multiple times! */ + + g_free (text->text); + text->text = NULL; + + if (text->layout) + g_object_unref (G_OBJECT (text->layout)); + text->layout = NULL; + + if (text->font_desc) { + pango_font_description_free (text->font_desc); + text->font_desc = NULL; + } + + if (text->attr_list) + pango_attr_list_unref (text->attr_list); + text->attr_list = NULL; + + if (text->stipple) + g_object_unref (text->stipple); + text->stipple = NULL; + + g_free (text->priv); + text->priv = NULL; + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + +static void +get_bounds (FooCanvasText *text, double *px1, double *py1, double *px2, double *py2) +{ + FooCanvasItem *item; + double wx, wy; + + item = FOO_CANVAS_ITEM (text); + + /* Get canvas pixel coordinates for text position */ + + + wx = text->x; + wy = text->y; + foo_canvas_item_i2w (item, &wx, &wy); + foo_canvas_w2c (item->canvas, wx + text->xofs, wy + text->yofs, &text->cx, &text->cy); + + /* Get canvas pixel coordinates for clip rectangle position */ + + foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy); + text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit; + text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit; + + /* Anchor text */ + + switch (text->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_W: + case GTK_ANCHOR_SW: + break; + + case GTK_ANCHOR_N: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_S: + text->cx -= text->max_width / 2; + text->clip_cx -= text->clip_cwidth / 2; + break; + + case GTK_ANCHOR_NE: + case GTK_ANCHOR_E: + case GTK_ANCHOR_SE: + text->cx -= text->max_width; + text->clip_cx -= text->clip_cwidth; + break; + + default: + break; + } + + switch (text->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_N: + case GTK_ANCHOR_NE: + break; + + case GTK_ANCHOR_W: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_E: + text->cy -= text->height / 2; + text->clip_cy -= text->clip_cheight / 2; + break; + + case GTK_ANCHOR_SW: + case GTK_ANCHOR_S: + case GTK_ANCHOR_SE: + text->cy -= text->height; + text->clip_cy -= text->clip_cheight; + break; + + default: + break; + } + + /* Bounds */ + + if (text->clip) { + *px1 = text->clip_cx; + *py1 = text->clip_cy; + *px2 = text->clip_cx + text->clip_cwidth; + *py2 = text->clip_cy + text->clip_cheight; + } else { + *px1 = text->cx; + *py1 = text->cy; + *px2 = text->cx + text->max_width; + *py2 = text->cy + text->height; + } +} + +/* Convenience function to set the text's GC's foreground color */ +static void +set_text_gc_foreground (FooCanvasText *text) +{ + GdkColor c; + + if (!text->gc) + return; + + c.pixel = text->pixel; + gdk_gc_set_foreground (text->gc, &c); +} + +/* Sets the stipple pattern for the text */ +static void +set_stipple (FooCanvasText *text, GdkBitmap *stipple, int reconfigure) +{ + if (text->stipple && !reconfigure) + g_object_unref (text->stipple); + + text->stipple = stipple; + if (stipple && !reconfigure) + g_object_ref (stipple); + + if (text->gc) { + if (stipple) { + gdk_gc_set_stipple (text->gc, stipple); + gdk_gc_set_fill (text->gc, GDK_STIPPLED); + } else + gdk_gc_set_fill (text->gc, GDK_SOLID); + } +} + +static PangoFontMask +get_property_font_set_mask (guint prop_id) +{ + switch (prop_id) + { + case PROP_FAMILY_SET: + return PANGO_FONT_MASK_FAMILY; + case PROP_STYLE_SET: + return PANGO_FONT_MASK_STYLE; + case PROP_VARIANT_SET: + return PANGO_FONT_MASK_VARIANT; + case PROP_WEIGHT_SET: + return PANGO_FONT_MASK_WEIGHT; + case PROP_STRETCH_SET: + return PANGO_FONT_MASK_STRETCH; + case PROP_SIZE_SET: + return PANGO_FONT_MASK_SIZE; + } + + return 0; +} + +static void +ensure_font (FooCanvasText *text) +{ + if (!text->font_desc) + text->font_desc = pango_font_description_new (); +} + +/* Set_arg handler for the text item */ +static void +foo_canvas_text_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasText *text; + GdkColor color = { 0, 0, 0, 0, }; + GdkColor *pcolor; + gboolean color_changed; + int have_pixel; + PangoAlignment align; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_TEXT (object)); + + item = FOO_CANVAS_ITEM (object); + text = FOO_CANVAS_TEXT (object); + + color_changed = FALSE; + have_pixel = FALSE; + + + if (!text->layout) { + text->layout = gtk_widget_create_pango_layout (GTK_WIDGET (item->canvas), NULL); + } + + switch (param_id) { + case PROP_TEXT: + if (text->text) + g_free (text->text); + + text->text = g_value_dup_string (value); + pango_layout_set_text (text->layout, text->text, -1); + + break; + + case PROP_MARKUP: + foo_canvas_text_set_markup (text, + g_value_get_string (value)); + break; + + case PROP_X: + text->x = g_value_get_double (value); + break; + + case PROP_Y: + text->y = g_value_get_double (value); + break; + + case PROP_FONT: { + const char *font_name; + PangoFontDescription *font_desc; + + font_name = g_value_get_string (value); + if (font_name) + font_desc = pango_font_description_from_string (font_name); + else + font_desc = NULL; + + foo_canvas_text_set_font_desc (text, font_desc); + if (font_desc) + pango_font_description_free (font_desc); + + break; + } + + case PROP_FONT_DESC: + foo_canvas_text_set_font_desc (text, g_value_peek_pointer (value)); + break; + + case PROP_FAMILY: + case PROP_STYLE: + case PROP_VARIANT: + case PROP_WEIGHT: + case PROP_STRETCH: + case PROP_SIZE: + case PROP_SIZE_POINTS: + ensure_font (text); + + switch (param_id) { + case PROP_FAMILY: + pango_font_description_set_family (text->font_desc, + g_value_get_string (value)); + break; + case PROP_STYLE: + pango_font_description_set_style (text->font_desc, + g_value_get_enum (value)); + break; + case PROP_VARIANT: + pango_font_description_set_variant (text->font_desc, + g_value_get_enum (value)); + break; + case PROP_WEIGHT: + pango_font_description_set_weight (text->font_desc, + g_value_get_int (value)); + break; + case PROP_STRETCH: + pango_font_description_set_stretch (text->font_desc, + g_value_get_enum (value)); + break; + case PROP_SIZE: + /* FIXME: This is bogus! It should be pixels, not points/PANGO_SCALE! */ + pango_font_description_set_size (text->font_desc, + g_value_get_int (value)); + break; + case PROP_SIZE_POINTS: + pango_font_description_set_size (text->font_desc, + g_value_get_double (value) * PANGO_SCALE); + break; + } + + foo_canvas_text_apply_font_desc (text); + break; + + case PROP_FAMILY_SET: + case PROP_STYLE_SET: + case PROP_VARIANT_SET: + case PROP_WEIGHT_SET: + case PROP_STRETCH_SET: + case PROP_SIZE_SET: + if (!g_value_get_boolean (value) && text->font_desc) + pango_font_description_unset_fields (text->font_desc, + get_property_font_set_mask (param_id)); + break; + + case PROP_SCALE: + text->scale = g_value_get_double (value); + text->scale_set = TRUE; + + foo_canvas_text_apply_font_desc (text); + break; + + case PROP_SCALE_SET: + text->scale_set = g_value_get_boolean (value); + + foo_canvas_text_apply_font_desc (text); + break; + + case PROP_UNDERLINE: + text->underline = g_value_get_enum (value); + text->underline_set = TRUE; + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_UNDERLINE_SET: + text->underline_set = g_value_get_boolean (value); + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_STRIKETHROUGH: + text->strikethrough = g_value_get_boolean (value); + text->strike_set = TRUE; + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_STRIKETHROUGH_SET: + text->strike_set = g_value_get_boolean (value); + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_RISE: + text->rise = g_value_get_int (value); + text->rise_set = TRUE; + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_RISE_SET: + text->rise_set = TRUE; + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_ATTRIBUTES: + if (text->attr_list) + pango_attr_list_unref (text->attr_list); + + text->attr_list = g_value_peek_pointer (value); + if (text->attr_list) + pango_attr_list_ref (text->attr_list); + + foo_canvas_text_apply_attributes (text); + break; + + case PROP_ANCHOR: + text->anchor = g_value_get_enum (value); + break; + + case PROP_JUSTIFICATION: + text->justification = g_value_get_enum (value); + + switch (text->justification) { + case GTK_JUSTIFY_LEFT: + align = PANGO_ALIGN_LEFT; + break; + case GTK_JUSTIFY_CENTER: + align = PANGO_ALIGN_CENTER; + break; + case GTK_JUSTIFY_RIGHT: + align = PANGO_ALIGN_RIGHT; + break; + default: + /* GTK_JUSTIFY_FILL isn't supported yet. */ + align = PANGO_ALIGN_LEFT; + break; + } + pango_layout_set_alignment (text->layout, align); + break; + + case PROP_CLIP_WIDTH: + text->clip_width = fabs (g_value_get_double (value)); + break; + + case PROP_CLIP_HEIGHT: + text->clip_height = fabs (g_value_get_double (value)); + break; + + case PROP_CLIP: + text->clip = g_value_get_boolean (value); + break; + + case PROP_WRAP_WIDTH: { + double w = fabs (g_value_get_double (value)); + pango_layout_set_width (text->layout, + w * text->item.canvas->pixels_per_unit * PANGO_SCALE); + + break; + } + + case PROP_X_OFFSET: + text->xofs = g_value_get_double (value); + break; + + case PROP_Y_OFFSET: + text->yofs = g_value_get_double (value); + break; + + case PROP_FILL_COLOR: { + const char *color_name; + + color_name = g_value_get_string (value); + if (color_name) { + gdk_color_parse (color_name, &color); + + text->rgba = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00) | + 0xff); + color_changed = TRUE; + } + break; + } + + case PROP_FILL_COLOR_GDK: + pcolor = g_value_get_boxed (value); + if (pcolor) { + GdkColormap *colormap; + + color = *pcolor; + colormap = gtk_widget_get_colormap (GTK_WIDGET (item->canvas)); + gdk_rgb_find_color (colormap, &color); + have_pixel = TRUE; + } + + text->rgba = ((color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8| + (color.blue & 0xff00) | + 0xff); + color_changed = TRUE; + break; + + case PROP_FILL_COLOR_RGBA: + text->rgba = g_value_get_uint (value); + color_changed = TRUE; + break; + + case PROP_FILL_STIPPLE: + set_stipple (text, (GdkBitmap *)g_value_get_object (value), FALSE); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } + + if (color_changed) { + if (have_pixel) + text->pixel = color.pixel; + else + text->pixel = foo_canvas_get_color_pixel (item->canvas, text->rgba); + + set_text_gc_foreground (text); + } + + /* Calculate text dimensions */ + + if (text->layout) + pango_layout_get_pixel_size (text->layout, + &text->max_width, + &text->height); + else { + text->max_width = 0; + text->height = 0; + } + + foo_canvas_item_request_update (item); +} + +/* Get_arg handler for the text item */ +static void +foo_canvas_text_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + FooCanvasText *text; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_TEXT (object)); + + text = FOO_CANVAS_TEXT (object); + + switch (param_id) { + case PROP_TEXT: + g_value_set_string (value, text->text); + break; + + case PROP_X: + g_value_set_double (value, text->x); + break; + + case PROP_Y: + g_value_set_double (value, text->y); + break; + + case PROP_FONT: + case PROP_FONT_DESC: + case PROP_FAMILY: + case PROP_STYLE: + case PROP_VARIANT: + case PROP_WEIGHT: + case PROP_STRETCH: + case PROP_SIZE: + case PROP_SIZE_POINTS: + ensure_font (text); + + switch (param_id) { + case PROP_FONT: + { + /* FIXME GValue imposes a totally gratuitous string copy + * here, we could just hand off string ownership + */ + gchar *str; + + str = pango_font_description_to_string (text->font_desc); + g_value_set_string (value, str); + g_free (str); + + break; + } + + case PROP_FONT_DESC: + g_value_set_boxed (value, text->font_desc); + break; + + case PROP_FAMILY: + g_value_set_string (value, pango_font_description_get_family (text->font_desc)); + break; + + case PROP_STYLE: + g_value_set_enum (value, pango_font_description_get_style (text->font_desc)); + break; + + case PROP_VARIANT: + g_value_set_enum (value, pango_font_description_get_variant (text->font_desc)); + break; + + case PROP_WEIGHT: + g_value_set_int (value, pango_font_description_get_weight (text->font_desc)); + break; + + case PROP_STRETCH: + g_value_set_enum (value, pango_font_description_get_stretch (text->font_desc)); + break; + + case PROP_SIZE: + g_value_set_int (value, pango_font_description_get_size (text->font_desc)); + break; + + case PROP_SIZE_POINTS: + g_value_set_double (value, ((double)pango_font_description_get_size (text->font_desc)) / (double)PANGO_SCALE); + break; + } + break; + + case PROP_FAMILY_SET: + case PROP_STYLE_SET: + case PROP_VARIANT_SET: + case PROP_WEIGHT_SET: + case PROP_STRETCH_SET: + case PROP_SIZE_SET: + { + PangoFontMask set_mask = text->font_desc ? pango_font_description_get_set_fields (text->font_desc) : 0; + PangoFontMask test_mask = get_property_font_set_mask (param_id); + g_value_set_boolean (value, (set_mask & test_mask) != 0); + + break; + } + + case PROP_SCALE: + g_value_set_double (value, text->scale); + break; + case PROP_SCALE_SET: + g_value_set_boolean (value, text->scale_set); + break; + + case PROP_UNDERLINE: + g_value_set_enum (value, text->underline); + break; + case PROP_UNDERLINE_SET: + g_value_set_boolean (value, text->underline_set); + break; + + case PROP_STRIKETHROUGH: + g_value_set_boolean (value, text->strikethrough); + break; + case PROP_STRIKETHROUGH_SET: + g_value_set_boolean (value, text->strike_set); + break; + + case PROP_RISE: + g_value_set_int (value, text->rise); + break; + case PROP_RISE_SET: + g_value_set_boolean (value, text->rise_set); + break; + + case PROP_ATTRIBUTES: + g_value_set_boxed (value, text->attr_list); + break; + + case PROP_ANCHOR: + g_value_set_enum (value, text->anchor); + break; + + case PROP_JUSTIFICATION: + g_value_set_enum (value, text->justification); + break; + + case PROP_CLIP_WIDTH: + g_value_set_double (value, text->clip_width); + break; + + case PROP_CLIP_HEIGHT: + g_value_set_double (value, text->clip_height); + break; + + case PROP_CLIP: + g_value_set_boolean (value, text->clip); + break; + + case PROP_WRAP_WIDTH: + g_value_set_double (value, + pango_layout_get_width (text->layout) / PANGO_SCALE); + break; + + case PROP_X_OFFSET: + g_value_set_double (value, text->xofs); + break; + + case PROP_Y_OFFSET: + g_value_set_double (value, text->yofs); + break; + + case PROP_FILL_COLOR: + g_value_take_string (value, + g_strdup_printf ("#%02x%02x%02x", + text->rgba >> 24, + (text->rgba >> 16) & 0xff, + (text->rgba >> 8) & 0xff)); + break; + + case PROP_FILL_COLOR_GDK: { + FooCanvas *canvas = FOO_CANVAS_ITEM (text)->canvas; + GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (canvas)); + GdkColor color; + + gdk_colormap_query_color (colormap, text->pixel, &color); + g_value_set_boxed (value, &color); + break; + } + case PROP_FILL_COLOR_RGBA: + g_value_set_uint (value, text->rgba); + break; + + case PROP_FILL_STIPPLE: + g_value_set_object (value, text->stipple); + break; + + case PROP_TEXT_WIDTH: + g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit); + break; + + case PROP_TEXT_HEIGHT: + g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +/* */ +static void +foo_canvas_text_apply_font_desc (FooCanvasText *text) +{ + PangoFontDescription *font_desc = + pango_font_description_copy ( + GTK_WIDGET (FOO_CANVAS_ITEM (text)->canvas)->style->font_desc); + + if (text->font_desc) + pango_font_description_merge (font_desc, text->font_desc, TRUE); + + pango_layout_set_font_description (text->layout, font_desc); + pango_font_description_free (font_desc); +} + +static void +add_attr (PangoAttrList *attr_list, + PangoAttribute *attr) +{ + attr->start_index = 0; + attr->end_index = G_MAXINT; + + pango_attr_list_insert (attr_list, attr); +} + +/* */ +static void +foo_canvas_text_apply_attributes (FooCanvasText *text) +{ + PangoAttrList *attr_list; + double zoom; + + if (text->attr_list) + attr_list = pango_attr_list_copy (text->attr_list); + else + attr_list = pango_attr_list_new (); + + if (text->underline_set) + add_attr (attr_list, pango_attr_underline_new (text->underline)); + if (text->strike_set) + add_attr (attr_list, pango_attr_strikethrough_new (text->strikethrough)); + if (text->rise_set) + add_attr (attr_list, pango_attr_rise_new (text->rise)); + + zoom = text->item.canvas->pixels_per_unit; + if (fabs (zoom - 1.) > 1e-4) { + PangoAttribute *attr = pango_attr_scale_new (zoom); + attr->start_index = 0; + attr->end_index = -1; + pango_attr_list_insert_before (attr_list, attr); + } + + pango_layout_set_attributes (text->layout, attr_list); + pango_attr_list_unref (attr_list); +} + +static void +foo_canvas_text_set_font_desc (FooCanvasText *text, + PangoFontDescription *font_desc) +{ + if (text->font_desc) + pango_font_description_free (text->font_desc); + + if (font_desc) + text->font_desc = pango_font_description_copy (font_desc); + else + text->font_desc = NULL; + + foo_canvas_text_apply_font_desc (text); +} + +/* Setting the text from a Pango markup string */ +static void +foo_canvas_text_set_markup (FooCanvasText *textitem, + const gchar *markup) +{ + PangoAttrList *attr_list = NULL; + gchar *text = NULL; + GError *error = NULL; + + if (textitem->text) + g_free (textitem->text); + if (textitem->attr_list) + pango_attr_list_unref (textitem->attr_list); + + if (markup && !pango_parse_markup (markup, -1, + 0, + &attr_list, &text, NULL, + &error)) + { + g_warning ("Failed to set cell text from markup due to error parsing markup: %s", + error->message); + g_error_free (error); + return; + } + + textitem->text = text; + textitem->attr_list = attr_list; + + pango_layout_set_text (textitem->layout, text, -1); + + foo_canvas_text_apply_attributes (textitem); +} + +/* Update handler for the text item */ +static void +foo_canvas_text_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) +{ + FooCanvasText *text; + double x1, y1, x2, y2; + + text = FOO_CANVAS_TEXT (item); + + if (parent_class->update) + (* parent_class->update) (item, i2w_dx, i2w_dy, flags); + + set_text_gc_foreground (text); + set_stipple (text, text->stipple, TRUE); + get_bounds (text, &x1, &y1, &x2, &y2); + + foo_canvas_update_bbox (item, + floor (x1), floor (y1), + ceil (x2), ceil (y2)); +} + +/* Realize handler for the text item */ +static void +foo_canvas_text_realize (FooCanvasItem *item) +{ + FooCanvasText *text; + + text = FOO_CANVAS_TEXT (item); + + if (parent_class->realize) + (* parent_class->realize) (item); + + text->gc = gdk_gc_new (item->canvas->layout.bin_window); +} + +/* Unrealize handler for the text item */ +static void +foo_canvas_text_unrealize (FooCanvasItem *item) +{ + FooCanvasText *text; + + text = FOO_CANVAS_TEXT (item); + + g_object_unref (text->gc); + text->gc = NULL; + + if (parent_class->unrealize) + (* parent_class->unrealize) (item); +} + +/* Draw handler for the text item */ +static void +foo_canvas_text_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose) +{ + FooCanvasText *text; + GdkRectangle rect; + + text = FOO_CANVAS_TEXT (item); + + if (!text->text) + return; + + if (text->clip) { + rect.x = text->clip_cx; + rect.y = text->clip_cy; + rect.width = text->clip_cwidth; + rect.height = text->clip_cheight; + + gdk_gc_set_clip_rectangle (text->gc, &rect); + } + + if (text->stipple) + foo_canvas_set_stipple_origin (item->canvas, text->gc); + + + gdk_draw_layout (drawable, text->gc, text->cx, text->cy, text->layout); + + if (text->clip) + gdk_gc_set_clip_rectangle (text->gc, NULL); +} + +/* Point handler for the text item */ +static double +foo_canvas_text_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item) +{ + FooCanvasText *text; + PangoLayoutIter *iter; + int x1, y1, x2, y2; + int dx, dy; + double dist, best; + + text = FOO_CANVAS_TEXT (item); + + *actual_item = item; + + /* The idea is to build bounding rectangles for each of the lines of + * text (clipped by the clipping rectangle, if it is activated) and see + * whether the point is inside any of these. If it is, we are done. + * Otherwise, calculate the distance to the nearest rectangle. + */ + + best = 1.0e36; + + iter = pango_layout_get_iter (text->layout); + do { + PangoRectangle log_rect; + + pango_layout_iter_get_line_extents (iter, NULL, &log_rect); + + if (text->clip) { + x1 = PANGO_PIXELS (log_rect.x); + y1 = PANGO_PIXELS (log_rect.y); + x2 = PANGO_PIXELS (log_rect.x+log_rect.width); + y2 = PANGO_PIXELS (log_rect.y+log_rect.height); + + + if (x1 < text->clip_cx) + x1 = text->clip_cx; + + if (y1 < text->clip_cy) + y1 = text->clip_cy; + + if (x2 > (text->clip_cx + text->clip_width)) + x2 = text->clip_cx + text->clip_width; + + if (y2 > (text->clip_cy + text->clip_height)) + y2 = text->clip_cy + text->clip_height; + + if ((x1 >= x2) || (y1 >= y2)) + continue; + } else { + x1 = text->x; + y1 = text->y; + x2 = log_rect.width; + y2 = log_rect.height; + } + + /* Calculate distance from point to rectangle */ + + if (cx < x1) + dx = x1 - cx; + else if (cx >= x2) + dx = cx - x2 + 1; + else + dx = 0; + + if (cy < y1) + dy = y1 - cy; + else if (cy >= y2) + dy = cy - y2 + 1; + else + dy = 0; + + if ((dx == 0) && (dy == 0)) { + pango_layout_iter_free(iter); + return 0.0; + } + + dist = sqrt (dx * dx + dy * dy); + if (dist < best) + best = dist; + + } while (pango_layout_iter_next_line(iter)); + + pango_layout_iter_free(iter); + + return best / item->canvas->pixels_per_unit; +} + +static void +foo_canvas_text_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasText *text; + + text = FOO_CANVAS_TEXT (item); + + text->x += dx; + text->y += dy; +} + +/* Bounds handler for the text item */ +static void +foo_canvas_text_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasText *text; + double width, height; + + text = FOO_CANVAS_TEXT (item); + + *x1 = text->x; + *y1 = text->y; + + if (text->clip) { + width = text->clip_width; + height = text->clip_height; + } else { + width = text->max_width / item->canvas->pixels_per_unit; + height = text->height / item->canvas->pixels_per_unit; + } + + switch (text->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_W: + case GTK_ANCHOR_SW: + break; + + case GTK_ANCHOR_N: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_S: + *x1 -= width / 2.0; + break; + + case GTK_ANCHOR_NE: + case GTK_ANCHOR_E: + case GTK_ANCHOR_SE: + *x1 -= width; + break; + + default: + break; + } + + switch (text->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_N: + case GTK_ANCHOR_NE: + break; + + case GTK_ANCHOR_W: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_E: + *y1 -= height / 2.0; + break; + + case GTK_ANCHOR_SW: + case GTK_ANCHOR_S: + case GTK_ANCHOR_SE: + *y1 -= height; + break; + + default: + break; + } + + *x2 = *x1 + width; + *y2 = *y1 + height; +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-text.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-text.h new file mode 100644 index 0000000000..5538f98c8f --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-text.h @@ -0,0 +1,170 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Text item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + * Port to Pango co-done by Gergõ Érdi + */ + +#ifndef FOO_CANVAS_TEXT_H +#define FOO_CANVAS_TEXT_H + + +#include + + +G_BEGIN_DECLS + + +/* Text item for the canvas. Text items are positioned by an anchor point and an anchor direction. + * + * A clipping rectangle may be specified for the text. The rectangle is anchored at the text's anchor + * point, and is specified by clipping width and height parameters. If the clipping rectangle is + * enabled, it will clip the text. + * + * In addition, x and y offset values may be specified. These specify an offset from the anchor + * position. If used in conjunction with the clipping rectangle, these could be used to implement + * simple scrolling of the text within the clipping rectangle. + * + * Properties marked with [*] also have _set properties associated + * with them, that determine if the specified value should be used + * instead of the default (style-defined) values + * + * The following object arguments are available: + * + * name type read/write description + * ------------------------------------------------------------------------------------------ + * text string RW The string of the text label + * markup string W A Pango markup string for the text label + * + * x double RW X coordinate of anchor point + * y double RW Y coordinate of anchor point + * + * font string W A string describing the font + * font_desc PangoFontDescription* RW Pointer to a PangoFontDescriptor + * attributes PangoAttrList* RW Pointer to a Pango attribute list + * style PangoStyle RW Pango style of font to use [*] + * variant PangoVariant RW Pango variant of font to use [*] + * weight int RW Pango weight of font to use [*] + * stretch PangoStretch RW Pango stretch of font to use [*] + * size int RW Size (in pixels) of font [*] + * size_points double RW Size (in points) of font + * scale double RW Ratio to scale font [*] + * + * anchor GtkAnchorType RW Anchor side for the text + * justification GtkJustification RW Justification for multiline text + * clip_width double RW Width of clip rectangle + * clip_height double RW Height of clip rectangle + * clip boolean RW Use clipping rectangle? + * x_offset double RW Horizontal offset distance from anchor position + * y_offset double RW Vertical offset distance from anchor position + * + * text_width double R Used to query the width of the rendered text + * text_height double R Used to query the rendered height of the text + * + * fill_color string W X color specification for text + * fill_color_gdk GdkColor* RW Pointer to an allocated GdkColor + * fill_color_rgba guint RW RGBA value used for AA color. + * fill_stipple GdkBitmap* RW Stipple pattern for filling the text + */ + +#define FOO_TYPE_CANVAS_TEXT (foo_canvas_text_get_type ()) +#define FOO_CANVAS_TEXT(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_TEXT, FooCanvasText)) +#define FOO_CANVAS_TEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_TEXT, FooCanvasTextClass)) +#define FOO_IS_CANVAS_TEXT(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_TEXT)) +#define FOO_IS_CANVAS_TEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_TEXT)) +#define FOO_CANVAS_TEXT_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_TEXT, FooCanvasTextClass)) + + +typedef struct _FooCanvasText FooCanvasText; +typedef struct _FooCanvasTextClass FooCanvasTextClass; + +typedef struct _FooCanvasTextPrivate FooCanvasTextPrivate; + +struct _FooCanvasText { + FooCanvasItem item; + + PangoFontDescription *font_desc; /* Font description for text */ + PangoAttrList *attr_list; /* Attribute list of the text (caching) */ + PangoUnderline underline; + gboolean strikethrough; + int rise; + double scale; + + char *text; /* Text to display */ + GdkBitmap *stipple; /* Stipple for text */ + GdkGC *gc; /* GC for drawing text */ + PangoLayout *layout; /* The PangoLayout containing the text */ + + gulong pixel; /* Fill color */ + + double x, y; /* Position at anchor */ + + double clip_width; /* Width of optional clip rectangle */ + double clip_height; /* Height of optional clip rectangle */ + + double xofs, yofs; /* Text offset distance from anchor position */ + + GtkAnchorType anchor; /* Anchor side for text */ + GtkJustification justification; /* Justification for text */ + + int cx, cy; /* Top-left canvas coordinates for text */ + int clip_cx, clip_cy; /* Top-left canvas coordinates for clip rectangle */ + int clip_cwidth, clip_cheight; /* Size of clip rectangle in pixels */ + int max_width; /* Maximum width of text lines */ + int height; /* Rendered text height in pixels */ + + guint32 rgba; /* RGBA color for text */ /*AA*/ + + guint clip : 1; /* Use clip rectangle? */ + + guint underline_set : 1; /* Apply specified underline style? */ + guint strike_set : 1; /* Apply specified strikethrough style? */ + guint rise_set : 1; /* Apply specified ascension/descension? */ + + guint scale_set : 1; /* Apply specified font scaling ratio? */ + + FooCanvasTextPrivate *priv; +}; + +struct _FooCanvasTextClass { + FooCanvasItemClass parent_class; +}; + + +/* Standard Gtk function */ +GtkType foo_canvas_text_get_type (void) G_GNUC_CONST; + + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-util.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-util.c new file mode 100644 index 0000000000..14ae3999c1 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-util.c @@ -0,0 +1,400 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#include +#include +#include +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Miscellaneous utility functions for the FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + + +#include +#include +#include +#include "foo-canvas.h" +#include "foo-canvas-util.h" + +/* + * Ok, so some systems require magic incantations for M_PI to be defined. + * It's not important enough to worry about. + */ +#ifndef M_PI +#define M_PI 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117 +#endif + +/** + * foo_canvas_points_new: + * @num_points: The number of points to allocate space for in the array. + * + * Creates a structure that should be used to pass an array of points to + * items. + * + * Return value: A newly-created array of points. It should be filled in + * by the user. + **/ +FooCanvasPoints * +foo_canvas_points_new (int num_points) +{ + FooCanvasPoints *points; + + g_return_val_if_fail (num_points > 1, NULL); + + points = g_new (FooCanvasPoints, 1); + points->num_points = num_points; + points->coords = g_new (double, 2 * num_points); + points->ref_count = 1; + + return points; +} + +/** + * foo_canvas_points_ref: + * @points: A canvas points structure. + * + * Increases the reference count of the specified points structure. + * + * Return value: The canvas points structure itself. + **/ +FooCanvasPoints * +foo_canvas_points_ref (FooCanvasPoints *points) +{ + g_return_val_if_fail (points != NULL, NULL); + + points->ref_count += 1; + return points; +} + +/** + * foo_canvas_points_free: + * @points: A canvas points structure. + * + * Decreases the reference count of the specified points structure. If it + * reaches zero, then the structure is freed. + **/ +void +foo_canvas_points_free (FooCanvasPoints *points) +{ + g_return_if_fail (points != NULL); + + points->ref_count -= 1; + if (points->ref_count == 0) { + g_free (points->coords); + g_free (points); + } +} + +/** + * foo_canvas_get_miter_points: + * @x1: X coordinate of the first point + * @y1: Y coordinate of the first point + * @x2: X coordinate of the second (angle) point + * @y2: Y coordinate of the second (angle) point + * @x3: X coordinate of the third point + * @y3: Y coordinate of the third point + * @width: Width of the line + * @mx1: The X coordinate of the first miter point is returned here. + * @my1: The Y coordinate of the first miter point is returned here. + * @mx2: The X coordinate of the second miter point is returned here. + * @my2: The Y coordinate of the second miter point is returned here. + * + * Given three points forming an angle, computes the coordinates of the inside + * and outside points of the mitered corner formed by a line of a given width at + * that angle. + * + * Return value: FALSE if the angle is less than 11 degrees (this is the same + * threshold as X uses. If this occurs, the return points are not modified. + * Otherwise, returns TRUE. + **/ +int +foo_canvas_get_miter_points (double x1, double y1, double x2, double y2, double x3, double y3, + double width, + double *mx1, double *my1, double *mx2, double *my2) +{ + double theta1; /* angle of segment p2-p1 */ + double theta2; /* angle of segment p2-p3 */ + double theta; /* angle between line segments */ + double theta3; /* angle that bisects theta1 and theta2 and points to p1 */ + double dist; /* distance of miter points from p2 */ + double dx, dy; /* x and y offsets corresponding to dist */ + + double ELEVEN_DEGREES = 11.0 * M_PI / 180.0; + + /* Degenerate cases. */ + if ((x1 == x2 && y1 == y2) || (x2 == x3 && y2 == y3)) + return FALSE; + + theta1 = atan2 (y1 - y2, x1 - x2); + theta2 = atan2 (y3 - y2, x3 - x2); + theta = theta1 - theta2; + + /* Normalize to (-pi; pi]. */ + if (theta > M_PI) + theta -= 2.0 * M_PI; + else if (theta <= -M_PI) + theta += 2.0 * M_PI; + + if (fabs (theta) < ELEVEN_DEGREES) + return FALSE; + + dist = fabs (0.5 * width / sin (0.5 * theta)); + + theta3 = (theta1 + theta2) / 2.0; + if (sin (theta3 - theta1) > 0.0) + theta3 += M_PI; + + dx = dist * cos (theta3); + dy = dist * sin (theta3); + + *mx1 = x2 + dx; + *mx2 = x2 - dx; + *my1 = y2 + dy; + *my2 = y2 - dy; + + return TRUE; +} + +/** + * foo_canvas_get_butt_points: + * @x1: X coordinate of first point in the line + * @y1: Y cooordinate of first point in the line + * @x2: X coordinate of second point (endpoint) of the line + * @y2: Y coordinate of second point (endpoint) of the line + * @width: Width of the line + * @project: Whether the butt points should project out by width/2 distance + * @bx1: X coordinate of first butt point is returned here + * @by1: Y coordinate of first butt point is returned here + * @bx2: X coordinate of second butt point is returned here + * @by2: Y coordinate of second butt point is returned here + * + * Computes the butt points of a line segment. + **/ +void +foo_canvas_get_butt_points (double x1, double y1, double x2, double y2, + double width, int project, + double *bx1, double *by1, double *bx2, double *by2) +{ + double length; + double dx, dy; + + width *= 0.5; + dx = x2 - x1; + dy = y2 - y1; + length = sqrt (dx * dx + dy * dy); + + if (length < FOO_CANVAS_EPSILON) { + *bx1 = *bx2 = x2; + *by1 = *by2 = y2; + } else { + dx = -width * (y2 - y1) / length; + dy = width * (x2 - x1) / length; + + *bx1 = x2 + dx; + *bx2 = x2 - dx; + *by1 = y2 + dy; + *by2 = y2 - dy; + + if (project) { + *bx1 += dy; + *bx2 += dy; + *by1 -= dx; + *by2 -= dx; + } + } +} + +/** + * foo_canvas_polygon_to_point: + * @poly: Vertices of the polygon. X coordinates are in the even indices, and Y + * coordinates are in the odd indices + * @num_points: Number of points in the polygon + * @x: X coordinate of the point + * @y: Y coordinate of the point + * + * Computes the distance between a point and a polygon. + * + * Return value: The distance from the point to the polygon, or zero if the + * point is inside the polygon. + **/ +double +foo_canvas_polygon_to_point (double *poly, int num_points, double x, double y) +{ + double best; + int intersections; + int i; + double *p; + double dx, dy; + + /* Iterate through all the edges in the polygon, updating best and intersections. + * + * When computing intersections, include left X coordinate of line within its range, but not + * Y coordinate. Otherwise if the point lies exactly below a vertex we'll count it as two + * intersections. + */ + + best = 1.0e36; + intersections = 0; + + for (i = num_points, p = poly; i > 1; i--, p += 2) { + double px, py, dist; + + /* Compute the point on the current edge closest to the point and update the + * intersection count. This must be done separately for vertical edges, horizontal + * edges, and others. + */ + + if (p[2] == p[0]) { + /* Vertical edge */ + + px = p[0]; + + if (p[1] >= p[3]) { + py = MIN (p[1], y); + py = MAX (py, p[3]); + } else { + py = MIN (p[3], y); + py = MAX (py, p[1]); + } + } else if (p[3] == p[1]) { + /* Horizontal edge */ + + py = p[1]; + + if (p[0] >= p[2]) { + px = MIN (p[0], x); + px = MAX (px, p[2]); + + if ((y < py) && (x < p[0]) && (x >= p[2])) + intersections++; + } else { + px = MIN (p[2], x); + px = MAX (px, p[0]); + + if ((y < py) && (x < p[2]) && (x >= p[0])) + intersections++; + } + } else { + double m1, b1, m2, b2; + int lower; + + /* Diagonal edge. Convert the edge to a line equation (y = m1*x + b1), then + * compute a line perpendicular to this edge but passing through the point, + * (y = m2*x + b2). + */ + + m1 = (p[3] - p[1]) / (p[2] - p[0]); + b1 = p[1] - m1 * p[0]; + + m2 = -1.0 / m1; + b2 = y - m2 * x; + + px = (b2 - b1) / (m1 - m2); + py = m1 * px + b1; + + if (p[0] > p[2]) { + if (px > p[0]) { + px = p[0]; + py = p[1]; + } else if (px < p[2]) { + px = p[2]; + py = p[3]; + } + } else { + if (px > p[2]) { + px = p[2]; + py = p[3]; + } else if (px < p[0]) { + px = p[0]; + py = p[1]; + } + } + + lower = (m1 * x + b1) > y; + + if (lower && (x >= MIN (p[0], p[2])) && (x < MAX (p[0], p[2]))) + intersections++; + } + + /* Compute the distance to the closest point, and see if that is the best so far */ + + dx = x - px; + dy = y - py; + dist = sqrt (dx * dx + dy * dy); + if (dist < best) + best = dist; + } + + /* We've processed all the points. If the number of intersections is odd, the point is + * inside the polygon. + */ + + if (intersections & 0x1) + return 0.0; + else + return best; +} + +/** + * foo_canvas_item_reset_bounds: + * @item: A canvas item + * + * Resets the bounding box of a canvas item to an empty rectangle. + **/ +void +foo_canvas_item_reset_bounds (FooCanvasItem *item) +{ + item->x1 = 0.0; + item->y1 = 0.0; + item->x2 = 0.0; + item->y2 = 0.0; +} + +/** + * foo_canvas_update_bbox: + * @canvas: the canvas needing update + * @x1: Left coordinate of the new bounding box + * @y1: Top coordinate of the new bounding box + * @x2: Right coordinate of the new bounding box + * @y2: Bottom coordinate of the new bounding box + * + * Sets the bbox to the new value, requesting full repaint. + **/ +void +foo_canvas_update_bbox (FooCanvasItem *item, int x1, int y1, int x2, int y2) +{ + foo_canvas_item_request_redraw (item); + item->x1 = x1; + item->y1 = y1; + item->x2 = x2; + item->y2 = y2; + foo_canvas_item_request_redraw (item); +} + diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-util.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-util.h new file mode 100644 index 0000000000..545676e6ae --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-util.h @@ -0,0 +1,107 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Miscellaneous utility functions for the FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * Author: Federico Mena + */ + +#ifndef FOO_CANVAS_UTIL_H +#define FOO_CANVAS_UTIL_H + + +G_BEGIN_DECLS + + +/* This structure defines an array of points. X coordinates are stored in the even-numbered + * indices, and Y coordinates are stored in the odd-numbered indices. num_points indicates the + * number of points, so the array is 2*num_points elements big. + */ +typedef struct { + double *coords; + int num_points; + int ref_count; +} FooCanvasPoints; + + +/* Allocate a new FooCanvasPoints structure with enough space for the specified number of points */ +FooCanvasPoints *foo_canvas_points_new (int num_points); + +/* Increate ref count */ +FooCanvasPoints *foo_canvas_points_ref (FooCanvasPoints *points); +#define foo_canvas_points_unref foo_canvas_points_free + +/* Decrease ref count and free structure if it has reached zero */ +void foo_canvas_points_free (FooCanvasPoints *points); + +/* Given three points forming an angle, compute the coordinates of the inside and outside points of + * the mitered corner formed by a line of a given width at that angle. + * + * If the angle is less than 11 degrees, then FALSE is returned and the return points are not + * modified. Otherwise, TRUE is returned. + */ +int foo_canvas_get_miter_points (double x1, double y1, double x2, double y2, double x3, double y3, + double width, + double *mx1, double *my1, double *mx2, double *my2); + +/* Compute the butt points of a line segment. If project is FALSE, then the results are as follows: + * + * -------------------* (bx1, by1) + * | + * (x1, y1) *------------------* (x2, y2) + * | + * -------------------* (bx2, by2) + * + * that is, the line is not projected beyond (x2, y2). If project is TRUE, then the results are as + * follows: + * + * -------------------* (bx1, by1) + * (x2, y2) | + * (x1, y1) *-------------* | + * | + * -------------------* (bx2, by2) + */ +void foo_canvas_get_butt_points (double x1, double y1, double x2, double y2, + double width, int project, + double *bx1, double *by1, double *bx2, double *by2); + +/* Calculate the distance from a polygon to a point. The polygon's X coordinates are in the even + * indices of the poly array, and the Y coordinates are in the odd indices. + */ +double foo_canvas_polygon_to_point (double *poly, int num_points, double x, double y); + + +void foo_canvas_item_reset_bounds (FooCanvasItem *item); + +/* Sets the bbox to the new value, requesting full repaint. */ +void foo_canvas_update_bbox (FooCanvasItem *item, int x1, int y1, int x2, int y2); + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-widget.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-widget.c new file mode 100644 index 0000000000..51821d9556 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-widget.c @@ -0,0 +1,619 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#undef GTK_DISABLE_DEPRECATED +#include +#include +#include +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Widget item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#include +#include +#include "foo-canvas-widget.h" + +enum { + PROP_0, + PROP_WIDGET, + PROP_X, + PROP_Y, + PROP_WIDTH, + PROP_HEIGHT, + PROP_ANCHOR, + PROP_SIZE_PIXELS +}; + + +static void foo_canvas_widget_class_init (FooCanvasWidgetClass *class); +static void foo_canvas_widget_init (FooCanvasWidget *witem); +static void foo_canvas_widget_destroy (GtkObject *object); +static void foo_canvas_widget_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); +static void foo_canvas_widget_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); + +static void foo_canvas_widget_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags); +static double foo_canvas_widget_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item); +static void foo_canvas_widget_translate (FooCanvasItem *item, double dx, double dy); +static void foo_canvas_widget_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2); + +static void foo_canvas_widget_draw (FooCanvasItem *item, + GdkDrawable *drawable, + GdkEventExpose *event); +static void foo_canvas_widget_map (FooCanvasItem *item); +static void foo_canvas_widget_unmap (FooCanvasItem *item); + +static FooCanvasItemClass *parent_class; + + +GtkType +foo_canvas_widget_get_type (void) +{ + static GtkType witem_type = 0; + + if (!witem_type) { + /* FIXME: Convert to gobject style. */ + static const GtkTypeInfo witem_info = { + (char *)"FooCanvasWidget", + sizeof (FooCanvasWidget), + sizeof (FooCanvasWidgetClass), + (GtkClassInitFunc) foo_canvas_widget_class_init, + (GtkObjectInitFunc) foo_canvas_widget_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + witem_type = gtk_type_unique (foo_canvas_item_get_type (), &witem_info); + } + + return witem_type; +} + +static void +foo_canvas_widget_class_init (FooCanvasWidgetClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + parent_class = gtk_type_class (foo_canvas_item_get_type ()); + + gobject_class->set_property = foo_canvas_widget_set_property; + gobject_class->get_property = foo_canvas_widget_get_property; + + g_object_class_install_property + (gobject_class, + PROP_WIDGET, + g_param_spec_object ("widget", NULL, NULL, + GTK_TYPE_WIDGET, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_X, + g_param_spec_double ("x", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_Y, + g_param_spec_double ("y", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_WIDTH, + g_param_spec_double ("width", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_HEIGHT, + g_param_spec_double ("height", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_ANCHOR, + g_param_spec_enum ("anchor", NULL, NULL, + GTK_TYPE_ANCHOR_TYPE, + GTK_ANCHOR_NW, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_SIZE_PIXELS, + g_param_spec_boolean ("size-pixels", NULL, NULL, + FALSE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + object_class->destroy = foo_canvas_widget_destroy; + + item_class->update = foo_canvas_widget_update; + item_class->point = foo_canvas_widget_point; + item_class->translate = foo_canvas_widget_translate; + item_class->bounds = foo_canvas_widget_bounds; + item_class->draw = foo_canvas_widget_draw; + item_class->map = foo_canvas_widget_map; + item_class->unmap = foo_canvas_widget_unmap; +} + +static void +foo_canvas_widget_init (FooCanvasWidget *witem) +{ + witem->x = 0.0; + witem->y = 0.0; + witem->width = 0.0; + witem->height = 0.0; + witem->anchor = GTK_ANCHOR_NW; + witem->size_pixels = FALSE; +} + +static void +foo_canvas_widget_destroy (GtkObject *object) +{ + FooCanvasWidget *witem; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_WIDGET (object)); + + witem = FOO_CANVAS_WIDGET (object); + + if (witem->widget && !witem->in_destroy) { + gtk_signal_disconnect (GTK_OBJECT (witem->widget), witem->destroy_id); + gtk_widget_destroy (witem->widget); + witem->widget = NULL; + } + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + +static void +recalc_bounds (FooCanvasWidget *witem) +{ + FooCanvasItem *item; + double wx, wy; + + item = FOO_CANVAS_ITEM (witem); + + /* Get world coordinates */ + + wx = witem->x; + wy = witem->y; + foo_canvas_item_i2w (item, &wx, &wy); + + /* Get canvas pixel coordinates */ + + foo_canvas_w2c (item->canvas, wx, wy, &witem->cx, &witem->cy); + + /* Anchor widget item */ + + switch (witem->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_W: + case GTK_ANCHOR_SW: + break; + + case GTK_ANCHOR_N: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_S: + witem->cx -= witem->cwidth / 2; + break; + + case GTK_ANCHOR_NE: + case GTK_ANCHOR_E: + case GTK_ANCHOR_SE: + witem->cx -= witem->cwidth; + break; + + default: + break; + } + + switch (witem->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_N: + case GTK_ANCHOR_NE: + break; + + case GTK_ANCHOR_W: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_E: + witem->cy -= witem->cheight / 2; + break; + + case GTK_ANCHOR_SW: + case GTK_ANCHOR_S: + case GTK_ANCHOR_SE: + witem->cy -= witem->cheight; + break; + + default: + break; + } + + /* Bounds */ + + item->x1 = witem->cx; + item->y1 = witem->cy; + item->x2 = witem->cx + witem->cwidth; + item->y2 = witem->cy + witem->cheight; + + if (witem->widget) + gtk_layout_move (GTK_LAYOUT (item->canvas), witem->widget, + witem->cx, + witem->cy); +} + +static void +do_destroy (GtkObject *object, gpointer data) +{ + FooCanvasWidget *witem; + + witem = data; + + witem->in_destroy = TRUE; + + gtk_object_destroy (data); +} + +static void +foo_canvas_widget_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasWidget *witem; + GObject *obj; + int update; + int calc_bounds; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_WIDGET (object)); + + item = FOO_CANVAS_ITEM (object); + witem = FOO_CANVAS_WIDGET (object); + + update = FALSE; + calc_bounds = FALSE; + + switch (param_id) { + case PROP_WIDGET: + if (witem->widget) { + gtk_signal_disconnect (GTK_OBJECT (witem->widget), witem->destroy_id); + gtk_container_remove (GTK_CONTAINER (item->canvas), witem->widget); + } + + obj = g_value_get_object (value); + if (obj) { + witem->widget = GTK_WIDGET (obj); + witem->destroy_id = gtk_signal_connect (GTK_OBJECT (obj), + "destroy", + (GtkSignalFunc) do_destroy, + witem); + gtk_layout_put (GTK_LAYOUT (item->canvas), witem->widget, + witem->cx + item->canvas->zoom_xofs, + witem->cy + item->canvas->zoom_yofs); + } + + update = TRUE; + break; + + case PROP_X: + if (witem->x != g_value_get_double (value)) + { + witem->x = g_value_get_double (value); + calc_bounds = TRUE; + } + break; + + case PROP_Y: + if (witem->y != g_value_get_double (value)) + { + witem->y = g_value_get_double (value); + calc_bounds = TRUE; + } + break; + + case PROP_WIDTH: + if (witem->width != fabs (g_value_get_double (value))) + { + witem->width = fabs (g_value_get_double (value)); + update = TRUE; + } + break; + + case PROP_HEIGHT: + if (witem->height != fabs (g_value_get_double (value))) + { + witem->height = fabs (g_value_get_double (value)); + update = TRUE; + } + break; + + case PROP_ANCHOR: + if (witem->anchor != (GtkAnchorType)g_value_get_enum (value)) + { + witem->anchor = g_value_get_enum (value); + update = TRUE; + } + break; + + case PROP_SIZE_PIXELS: + if (witem->size_pixels != g_value_get_boolean (value)) + { + witem->size_pixels = g_value_get_boolean (value); + update = TRUE; + } + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } + + if (update) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->update) (item, 0, 0, 0); + + if (calc_bounds) + recalc_bounds (witem); +} + +static void +foo_canvas_widget_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + FooCanvasWidget *witem; + + g_return_if_fail (object != NULL); + g_return_if_fail (FOO_IS_CANVAS_WIDGET (object)); + + witem = FOO_CANVAS_WIDGET (object); + + switch (param_id) { + case PROP_WIDGET: + g_value_set_object (value, (GObject *) witem->widget); + break; + + case PROP_X: + g_value_set_double (value, witem->x); + break; + + case PROP_Y: + g_value_set_double (value, witem->y); + break; + + case PROP_WIDTH: + g_value_set_double (value, witem->width); + break; + + case PROP_HEIGHT: + g_value_set_double (value, witem->height); + break; + + case PROP_ANCHOR: + g_value_set_enum (value, witem->anchor); + break; + + case PROP_SIZE_PIXELS: + g_value_set_boolean (value, witem->size_pixels); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + } +} + +static void +foo_canvas_widget_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) +{ + FooCanvasWidget *witem; + + witem = FOO_CANVAS_WIDGET (item); + + if (parent_class->update) + (* parent_class->update) (item, i2w_dx, i2w_dy, flags); + + if (witem->widget) { + if (witem->size_pixels) { + witem->cwidth = (int) (witem->width + 0.5); + witem->cheight = (int) (witem->height + 0.5); + } else { + witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5); + witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5); + } + + gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight); + } else { + witem->cwidth = 0.0; + witem->cheight = 0.0; + } + + recalc_bounds (witem); +} + +static void +foo_canvas_widget_draw (FooCanvasItem *item, + GdkDrawable *drawable, + GdkEventExpose *event) +{ +#if 0 + FooCanvasWidget *witem; + + witem = FOO_CANVAS_WIDGET (item); + + if (witem->widget) + gtk_widget_queue_draw (witem->widget); +#endif +} +static void +foo_canvas_widget_map (FooCanvasItem *item) +{ + FooCanvasWidget *witem = FOO_CANVAS_WIDGET (item); + if (parent_class->map) + (* parent_class->map) (item); + if (witem->widget && GTK_WIDGET_VISIBLE (witem->widget)) + gtk_widget_map (witem->widget); +} + +static void +foo_canvas_widget_unmap (FooCanvasItem *item) +{ + FooCanvasWidget *witem = FOO_CANVAS_WIDGET (item); + if (parent_class->unmap) + (* parent_class->unmap) (item); + gtk_widget_unmap (witem->widget); +} + +static double +foo_canvas_widget_point (FooCanvasItem *item, double x, double y, + int cx, int cy, FooCanvasItem **actual_item) +{ + FooCanvasWidget *witem; + double x1, y1, x2, y2; + double dx, dy; + + witem = FOO_CANVAS_WIDGET (item); + + *actual_item = item; + + foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1); + + x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit; + y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit; + + /* Is point inside widget bounds? */ + + if ((x >= x1) && (y >= y1) && (x <= x2) && (y <= y2)) + return 0.0; + + /* Point is outside widget bounds */ + + if (x < x1) + dx = x1 - x; + else if (x > x2) + dx = x - x2; + else + dx = 0.0; + + if (y < y1) + dy = y1 - y; + else if (y > y2) + dy = y - y2; + else + dy = 0.0; + + return sqrt (dx * dx + dy * dy); +} + +static void +foo_canvas_widget_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasWidget *witem; + + witem = FOO_CANVAS_WIDGET (item); + + witem->x += dx; + witem->y += dy; +} + + +static void +foo_canvas_widget_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasWidget *witem; + + witem = FOO_CANVAS_WIDGET (item); + + *x1 = witem->x; + *y1 = witem->y; + + switch (witem->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_W: + case GTK_ANCHOR_SW: + break; + + case GTK_ANCHOR_N: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_S: + *x1 -= witem->width / 2.0; + break; + + case GTK_ANCHOR_NE: + case GTK_ANCHOR_E: + case GTK_ANCHOR_SE: + *x1 -= witem->width; + break; + + default: + break; + } + + switch (witem->anchor) { + case GTK_ANCHOR_NW: + case GTK_ANCHOR_N: + case GTK_ANCHOR_NE: + break; + + case GTK_ANCHOR_W: + case GTK_ANCHOR_CENTER: + case GTK_ANCHOR_E: + *y1 -= witem->height / 2.0; + break; + + case GTK_ANCHOR_SW: + case GTK_ANCHOR_S: + case GTK_ANCHOR_SE: + *y1 -= witem->height; + break; + + default: + break; + } + + *x2 = *x1 + witem->width; + *y2 = *y1 + witem->height; +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-widget.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-widget.h new file mode 100644 index 0000000000..98a76ef9a8 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas-widget.h @@ -0,0 +1,105 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* Widget item type for FooCanvas widget + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Author: Federico Mena + */ + +#ifndef FOO_CANVAS_WIDGET_H +#define FOO_CANVAS_WIDGET_H + + +#include + + +G_BEGIN_DECLS + + +/* Widget item for canvas. The widget is positioned with respect to an anchor point. + * The following object arguments are available: + * + * name type read/write description + * ------------------------------------------------------------------------------------------ + * widget GtkWidget* RW Pointer to the widget + * x double RW X coordinate of anchor point + * y double RW Y coordinate of anchor point + * width double RW Width of widget (see below) + * height double RW Height of widget (see below) + * anchor GtkAnchorType RW Anchor side for widget + * size_pixels boolean RW Specifies whether the widget size + * is specified in pixels or canvas units. + * If it is in pixels, then the widget will not + * be scaled when the canvas zoom factor changes. + * Otherwise, it will be scaled. + */ + + +#define FOO_TYPE_CANVAS_WIDGET (foo_canvas_widget_get_type ()) +#define FOO_CANVAS_WIDGET(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_WIDGET, FooCanvasWidget)) +#define FOO_CANVAS_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_WIDGET, FooCanvasWidgetClass)) +#define FOO_IS_CANVAS_WIDGET(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_WIDGET)) +#define FOO_IS_CANVAS_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_WIDGET)) +#define FOO_CANVAS_WIDGET_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_WIDGET, FooCanvasWidgetClass)) + + +typedef struct _FooCanvasWidget FooCanvasWidget; +typedef struct _FooCanvasWidgetClass FooCanvasWidgetClass; + +struct _FooCanvasWidget { + FooCanvasItem item; + + GtkWidget *widget; /* The child widget */ + + double x, y; /* Position at anchor */ + double width, height; /* Dimensions of widget */ + GtkAnchorType anchor; /* Anchor side for widget */ + + int cx, cy; /* Top-left canvas coordinates for widget */ + int cwidth, cheight; /* Size of widget in pixels */ + + guint destroy_id; /* Signal connection id for destruction of child widget */ + + guint size_pixels : 1; /* Is size specified in (unchanging) pixels or units (get scaled)? */ + guint in_destroy : 1; /* Is child widget being destroyed? */ +}; + +struct _FooCanvasWidgetClass { + FooCanvasItemClass parent_class; +}; + + +/* Standard Gtk function */ +GtkType foo_canvas_widget_get_type (void) G_GNUC_CONST; + + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas.c new file mode 100644 index 0000000000..c3b3f71ec5 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas.c @@ -0,0 +1,3994 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#include +#include +#include +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* + * FooCanvas widget - Tk-like canvas widget for Gnome + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas widget. Tk is + * copyrighted by the Regents of the University of California, Sun Microsystems, and other parties. + * + * + * Authors: Federico Mena + * Raph Levien + */ + +/* + * TO-DO list for the canvas: + * + * - Allow to specify whether FooCanvasImage sizes are in units or pixels (scale or don't scale). + * + * - Implement a flag for foo_canvas_item_reparent() that tells the function to keep the item + * visually in the same place, that is, to keep it in the same place with respect to the canvas + * origin. + * + * - GC put functions for items. + * + * - Widget item (finish it). + * + * - GList *foo_canvas_gimme_all_items_contained_in_this_area (FooCanvas *canvas, Rectangle area); + * + * - Retrofit all the primitive items with microtile support. + * + * - Curve support for line item. + * + * - Arc item (Havoc has it; to be integrated in FooCanvasEllipse). + * + * - Sane font handling API. + * + * - Get_arg methods for items: + * - How to fetch the outline width and know whether it is in pixels or units? + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "foo-canvas.h" +#include "foo-canvas-i18n.h" + +#include "foo-canvas-marshal.h" + +static void foo_canvas_request_update (FooCanvas *canvas); +static void group_add (FooCanvasGroup *group, + FooCanvasItem *item); +static void group_remove (FooCanvasGroup *group, + FooCanvasItem *item); +static void redraw_and_repick_if_mapped (FooCanvasItem *item); + +/*** FooCanvasItem ***/ + +/* Some convenience stuff */ +#define GCI_UPDATE_MASK (FOO_CANVAS_UPDATE_REQUESTED | FOO_CANVAS_UPDATE_DEEP) +#define GCI_EPSILON 1e-18 + +enum { + ITEM_PROP_0, + ITEM_PROP_PARENT, + ITEM_PROP_VISIBLE +}; + +enum { + ITEM_EVENT, + ITEM_LAST_SIGNAL +}; + +static void foo_canvas_item_class_init (FooCanvasItemClass *class); +static void foo_canvas_item_init (FooCanvasItem *item); +static int emit_event (FooCanvas *canvas, GdkEvent *event); + +static guint item_signals[ITEM_LAST_SIGNAL]; + +static GtkObjectClass *item_parent_class; + +static gpointer accessible_item_parent_class; +static gpointer accessible_parent_class; + + +/** + * foo_canvas_item_get_type: + * + * Registers the &FooCanvasItem class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &FooCanvasItem class. + **/ +GType +foo_canvas_item_get_type (void) +{ + static GType canvas_item_type = 0; + + if (!canvas_item_type) { + static const GTypeInfo canvas_item_info = { + sizeof (FooCanvasItemClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_item_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (FooCanvasItem), + 0, /* n_preallocs */ + (GInstanceInitFunc) foo_canvas_item_init + }; + + canvas_item_type = g_type_register_static (gtk_object_get_type (), + "FooCanvasItem", + &canvas_item_info, + 0); + } + + return canvas_item_type; +} + +/* Object initialization function for FooCanvasItem */ +static void +foo_canvas_item_init (FooCanvasItem *item) +{ + item->object.flags |= FOO_CANVAS_ITEM_VISIBLE; +} + +/** + * foo_canvas_item_new: + * @parent: The parent group for the new item. + * @type: The object type of the item. + * @first_arg_name: A list of object argument name/value pairs, NULL-terminated, + * used to configure the item. For example, "fill_color", "black", + * "width_units", 5.0, NULL. + * @Varargs: + * + * Creates a new canvas item with @parent as its parent group. The item is + * created at the top of its parent's stack, and starts up as visible. The item + * is of the specified @type, for example, it can be + * foo_canvas_rect_get_type(). The list of object arguments/value pairs is + * used to configure the item. + * + * Return value: The newly-created item. + **/ +FooCanvasItem * +foo_canvas_item_new (FooCanvasGroup *parent, GType type, const gchar *first_arg_name, ...) +{ + FooCanvasItem *item; + va_list args; + + g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL); + g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL); + + item = FOO_CANVAS_ITEM (g_object_new (type, NULL)); + + va_start (args, first_arg_name); + foo_canvas_item_construct (item, parent, first_arg_name, args); + va_end (args); + + return item; +} + + +/* Performs post-creation operations on a canvas item (adding it to its parent + * group, etc.) + */ +static void +item_post_create_setup (FooCanvasItem *item) +{ + GtkObject *obj; + + obj = GTK_OBJECT (item); + + group_add (FOO_CANVAS_GROUP (item->parent), item); + + redraw_and_repick_if_mapped (item); +} + +/* Set_property handler for canvas items */ +static void +foo_canvas_item_set_property (GObject *gobject, guint param_id, + const GValue *value, GParamSpec *pspec) +{ + FooCanvasItem *item; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (gobject)); + + item = FOO_CANVAS_ITEM (gobject); + + switch (param_id) { + case ITEM_PROP_PARENT: + if (item->parent != NULL) { + g_warning ("Cannot set `parent' argument after item has " + "already been constructed."); + } else if (g_value_get_object (value)) { + item->parent = FOO_CANVAS_ITEM (g_value_get_object (value)); + item->canvas = item->parent->canvas; + item_post_create_setup (item); + } + break; + case ITEM_PROP_VISIBLE: + if (g_value_get_boolean (value)) { + foo_canvas_item_show (item); + } else { + foo_canvas_item_hide (item); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); + break; + } +} + +/* Get_property handler for canvas items */ +static void +foo_canvas_item_get_property (GObject *gobject, guint param_id, + GValue *value, GParamSpec *pspec) +{ + FooCanvasItem *item; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (gobject)); + + item = FOO_CANVAS_ITEM (gobject); + + switch (param_id) { + case ITEM_PROP_VISIBLE: + g_value_set_boolean (value, item->object.flags & FOO_CANVAS_ITEM_VISIBLE); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); + break; + } +} + +/** + * foo_canvas_item_construct: + * @item: An unconstructed canvas item. + * @parent: The parent group for the item. + * @first_arg_name: The name of the first argument for configuring the item. + * @args: The list of arguments used to configure the item. + * + * Constructs a canvas item; meant for use only by item implementations. + **/ +void +foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent, + const gchar *first_arg_name, va_list args) +{ + g_return_if_fail (FOO_IS_CANVAS_GROUP (parent)); + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + item->parent = FOO_CANVAS_ITEM (parent); + item->canvas = item->parent->canvas; + + g_object_set_valist (G_OBJECT (item), first_arg_name, args); + + item_post_create_setup (item); +} + + +static void +redraw_and_repick_if_mapped (FooCanvasItem *item) +{ + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) { + foo_canvas_item_request_redraw (item); + item->canvas->need_repick = TRUE; + } +} + + +/* Standard object dispose function for canvas items */ +static void +foo_canvas_item_dispose (GObject *object) +{ + FooCanvasItem *item; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (object)); + + item = FOO_CANVAS_ITEM (object); + + foo_canvas_item_request_redraw (item); + + /* Make the canvas forget about us */ + + if (item == item->canvas->current_item) { + item->canvas->current_item = NULL; + item->canvas->need_repick = TRUE; + } + + if (item == item->canvas->new_current_item) { + item->canvas->new_current_item = NULL; + item->canvas->need_repick = TRUE; + } + + if (item == item->canvas->grabbed_item) { + GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (item->canvas)); + item->canvas->grabbed_item = NULL; + gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); + } + + if (item == item->canvas->focused_item) + item->canvas->focused_item = NULL; + + /* Normal destroy stuff */ + + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); + + if (item->object.flags & FOO_CANVAS_ITEM_REALIZED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unrealize) (item); + + if (item->parent) + group_remove (FOO_CANVAS_GROUP (item->parent), item); + + G_OBJECT_CLASS (item_parent_class)->dispose (object); +} + +/* Realize handler for canvas items */ +static void +foo_canvas_item_realize (FooCanvasItem *item) +{ + if (item->parent && !(item->parent->object.flags & FOO_CANVAS_ITEM_REALIZED)) + (* FOO_CANVAS_ITEM_GET_CLASS (item->parent)->realize) (item->parent); + + if (item->parent == NULL && !GTK_WIDGET_REALIZED (GTK_WIDGET (item->canvas))) + gtk_widget_realize (GTK_WIDGET (item->canvas)); + + GTK_OBJECT_SET_FLAGS (item, FOO_CANVAS_ITEM_REALIZED); + + foo_canvas_item_request_update (item); +} + +/* Unrealize handler for canvas items */ +static void +foo_canvas_item_unrealize (FooCanvasItem *item) +{ + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); + + GTK_OBJECT_UNSET_FLAGS (item, FOO_CANVAS_ITEM_REALIZED); +} + +/* Map handler for canvas items */ +static void +foo_canvas_item_map (FooCanvasItem *item) +{ + GTK_OBJECT_SET_FLAGS (item, FOO_CANVAS_ITEM_MAPPED); +} + +/* Unmap handler for canvas items */ +static void +foo_canvas_item_unmap (FooCanvasItem *item) +{ + GTK_OBJECT_UNSET_FLAGS (item, FOO_CANVAS_ITEM_MAPPED); +} + +/* Update handler for canvas items */ +static void +foo_canvas_item_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) +{ + GTK_OBJECT_UNSET_FLAGS (item, FOO_CANVAS_ITEM_NEED_UPDATE); + GTK_OBJECT_UNSET_FLAGS (item, FOO_CANVAS_ITEM_NEED_DEEP_UPDATE); +} + +/* + * This routine invokes the update method of the item + * Please notice, that we take parent to canvas pixel matrix as argument + * unlike virtual method ::update, whose argument is item 2 canvas pixel + * matrix + * + * I will try to force somewhat meaningful naming for affines (Lauris) + * General naming rule is FROM2TO, where FROM and TO are abbreviations + * So p2cpx is Parent2CanvasPixel and i2cpx is Item2CanvasPixel + * I hope that this helps to keep track of what really happens + * + */ + +static void +foo_canvas_item_invoke_update (FooCanvasItem *item, + double i2w_dx, + double i2w_dy, + int flags) +{ + int child_flags; + + child_flags = flags; + + /* apply object flags to child flags */ + child_flags &= ~FOO_CANVAS_UPDATE_REQUESTED; + + if (item->object.flags & FOO_CANVAS_ITEM_NEED_UPDATE) + child_flags |= FOO_CANVAS_UPDATE_REQUESTED; + + if (item->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE) + child_flags |= FOO_CANVAS_UPDATE_DEEP; + + if (child_flags & GCI_UPDATE_MASK) { + if (FOO_CANVAS_ITEM_GET_CLASS (item)->update) + FOO_CANVAS_ITEM_GET_CLASS (item)->update (item, i2w_dx, i2w_dy, child_flags); + } + + /* If this fail you probably forgot to chain up to + * FooCanvasItem::update from a derived class */ + g_return_if_fail (!(item->object.flags & FOO_CANVAS_ITEM_NEED_UPDATE)); +} + +/* + * This routine invokes the point method of the item. + * The arguments x, y should be in the parent item local coordinates. + */ + +static double +foo_canvas_item_invoke_point (FooCanvasItem *item, double x, double y, int cx, int cy, FooCanvasItem **actual_item) +{ + /* Calculate x & y in item local coordinates */ + + if (FOO_CANVAS_ITEM_GET_CLASS (item)->point) + return FOO_CANVAS_ITEM_GET_CLASS (item)->point (item, x, y, cx, cy, actual_item); + + return 1e18; +} + +/** + * foo_canvas_item_set: + * @item: A canvas item. + * @first_arg_name: The list of object argument name/value pairs used to configure the item. + * @Varargs: + * + * Configures a canvas item. The arguments in the item are set to the specified + * values, and the item is repainted as appropriate. + **/ +void +foo_canvas_item_set (FooCanvasItem *item, const gchar *first_arg_name, ...) +{ + va_list args; + + va_start (args, first_arg_name); + foo_canvas_item_set_valist (item, first_arg_name, args); + va_end (args); +} + + +/** + * foo_canvas_item_set_valist: + * @item: A canvas item. + * @first_arg_name: The name of the first argument used to configure the item. + * @args: The list of object argument name/value pairs used to configure the item. + * + * Configures a canvas item. The arguments in the item are set to the specified + * values, and the item is repainted as appropriate. + **/ +void +foo_canvas_item_set_valist (FooCanvasItem *item, const gchar *first_arg_name, va_list args) +{ + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + g_object_set_valist (G_OBJECT (item), first_arg_name, args); + +#if 0 + /* I commented this out, because item implementations have to schedule update/redraw */ + foo_canvas_item_request_redraw (item); +#endif + + item->canvas->need_repick = TRUE; +} + + +/** + * foo_canvas_item_move: + * @item: A canvas item. + * @dx: Horizontal offset. + * @dy: Vertical offset. + * + * Moves a canvas item by creating an affine transformation matrix for + * translation by using the specified values. This happens in item + * local coordinate system, so if you have nontrivial transform, it + * most probably does not do, what you want. + **/ +void +foo_canvas_item_move (FooCanvasItem *item, double dx, double dy) +{ + g_return_if_fail (item != NULL); + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (!FOO_CANVAS_ITEM_GET_CLASS (item)->translate) { + g_warning ("Item type %s does not implement translate method.\n", + g_type_name (GTK_OBJECT_TYPE (item))); + return; + } + + (* FOO_CANVAS_ITEM_GET_CLASS (item)->translate) (item, dx, dy); + + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + item->canvas->need_repick = TRUE; + + if (!(item->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + item->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE; + if (item->parent != NULL) + foo_canvas_item_request_update (item->parent); + else + foo_canvas_request_update (item->canvas); + } + +} + +/* Convenience function to reorder items in a group's child list. This puts the + * specified link after the "before" link. Returns TRUE if the list was changed. + */ +static gboolean +put_item_after (GList *link, GList *before) +{ + FooCanvasGroup *parent; + + if (link == before) + return FALSE; + + parent = FOO_CANVAS_GROUP (FOO_CANVAS_ITEM (link->data)->parent); + + if (before == NULL) { + if (link == parent->item_list) + return FALSE; + + link->prev->next = link->next; + + if (link->next) + link->next->prev = link->prev; + else + parent->item_list_end = link->prev; + + link->prev = before; + link->next = parent->item_list; + link->next->prev = link; + parent->item_list = link; + } else { + if ((link == parent->item_list_end) && (before == parent->item_list_end->prev)) + return FALSE; + + if (link->next) + link->next->prev = link->prev; + + if (link->prev) + link->prev->next = link->next; + else { + parent->item_list = link->next; + parent->item_list->prev = NULL; + } + + link->prev = before; + link->next = before->next; + + link->prev->next = link; + + if (link->next) + link->next->prev = link; + else + parent->item_list_end = link; + } + return TRUE; +} + + +/** + * foo_canvas_item_raise: + * @item: A canvas item. + * @positions: Number of steps to raise the item. + * + * Raises the item in its parent's stack by the specified number of positions. + * If the number of positions is greater than the distance to the top of the + * stack, then the item is put at the top. + **/ +void +foo_canvas_item_raise (FooCanvasItem *item, int positions) +{ + GList *link, *before; + FooCanvasGroup *parent; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + g_return_if_fail (positions >= 0); + + if (!item->parent || positions == 0) + return; + + parent = FOO_CANVAS_GROUP (item->parent); + link = g_list_find (parent->item_list, item); + g_assert (link != NULL); + + for (before = link; positions && before; positions--) + before = before->next; + + if (!before) + before = parent->item_list_end; + + if (put_item_after (link, before)) { + redraw_and_repick_if_mapped (item); + } +} + + +/** + * foo_canvas_item_lower: + * @item: A canvas item. + * @positions: Number of steps to lower the item. + * + * Lowers the item in its parent's stack by the specified number of positions. + * If the number of positions is greater than the distance to the bottom of the + * stack, then the item is put at the bottom. + **/ +void +foo_canvas_item_lower (FooCanvasItem *item, int positions) +{ + GList *link, *before; + FooCanvasGroup *parent; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + g_return_if_fail (positions >= 1); + + if (!item->parent || positions == 0) + return; + + parent = FOO_CANVAS_GROUP (item->parent); + link = g_list_find (parent->item_list, item); + g_assert (link != NULL); + + if (link->prev) + for (before = link->prev; positions && before; positions--) + before = before->prev; + else + before = NULL; + + if (put_item_after (link, before)) { + redraw_and_repick_if_mapped (item); + } +} + + +/** + * foo_canvas_item_raise_to_top: + * @item: A canvas item. + * + * Raises an item to the top of its parent's stack. + **/ +void +foo_canvas_item_raise_to_top (FooCanvasItem *item) +{ + GList *link; + FooCanvasGroup *parent; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (!item->parent) + return; + + parent = FOO_CANVAS_GROUP (item->parent); + link = g_list_find (parent->item_list, item); + g_assert (link != NULL); + + if (put_item_after (link, parent->item_list_end)) { + redraw_and_repick_if_mapped (item); + } +} + + +/** + * foo_canvas_item_lower_to_bottom: + * @item: A canvas item. + * + * Lowers an item to the bottom of its parent's stack. + **/ +void +foo_canvas_item_lower_to_bottom (FooCanvasItem *item) +{ + GList *link; + FooCanvasGroup *parent; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (!item->parent) + return; + + parent = FOO_CANVAS_GROUP (item->parent); + link = g_list_find (parent->item_list, item); + g_assert (link != NULL); + + if (put_item_after (link, NULL)) { + redraw_and_repick_if_mapped (item); + } +} + +/** + * foo_canvas_item_send_behind: + * @item: A canvas item. + * @behind_item: The canvas item to put item behind, or NULL + * + * Moves item to a in the position in the stacking order so that + * it is placed immediately below behind_item, or at the top if + * behind_item is NULL. + **/ +void +foo_canvas_item_send_behind (FooCanvasItem *item, + FooCanvasItem *behind_item) +{ + GList *item_list; + int item_position, behind_position; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (behind_item == NULL) { + foo_canvas_item_raise_to_top (item); + return; + } + + g_return_if_fail (FOO_IS_CANVAS_ITEM (behind_item)); + g_return_if_fail (item->parent == behind_item->parent); + + item_list = FOO_CANVAS_GROUP (item->parent)->item_list; + + item_position = g_list_index (item_list, item); + g_assert (item_position != -1); + behind_position = g_list_index (item_list, behind_item); + g_assert (behind_position != -1); + g_assert (item_position != behind_position); + + if (item_position == behind_position - 1) { + return; + } + + if (item_position < behind_position) { + foo_canvas_item_raise (item, (behind_position - 1) - item_position); + } else { + foo_canvas_item_lower (item, item_position - behind_position); + } +} + +/** + * foo_canvas_item_show: + * @item: A canvas item. + * + * Shows a canvas item. If the item was already shown, then no action is taken. + **/ +void +foo_canvas_item_show (FooCanvasItem *item) +{ + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (!(item->object.flags & FOO_CANVAS_ITEM_VISIBLE)) { + item->object.flags |= FOO_CANVAS_ITEM_VISIBLE; + + if (!(item->object.flags & FOO_CANVAS_ITEM_REALIZED)) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->realize) (item); + + if (item->parent != NULL) { + if (!(item->object.flags & FOO_CANVAS_ITEM_MAPPED) && + item->parent->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->map) (item); + } else { + if (!(item->object.flags & FOO_CANVAS_ITEM_MAPPED) && + GTK_WIDGET_MAPPED (GTK_WIDGET (item->canvas))) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->map) (item); + } + + redraw_and_repick_if_mapped (item); + } +} + + +/** + * foo_canvas_item_hide: + * @item: A canvas item. + * + * Hides a canvas item. If the item was already hidden, then no action is + * taken. + **/ +void +foo_canvas_item_hide (FooCanvasItem *item) +{ + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE) { + item->object.flags &= ~FOO_CANVAS_ITEM_VISIBLE; + + redraw_and_repick_if_mapped (item); + + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); + + /* No need to unrealize when we just want to hide */ + } +} + + +/** + * foo_canvas_item_grab: + * @item: A canvas item. + * @event_mask: Mask of events that will be sent to this item. + * @cursor: If non-NULL, the cursor that will be used while the grab is active. + * @etime: The timestamp required for grabbing the mouse, or GDK_CURRENT_TIME. + * + * Specifies that all events that match the specified event mask should be sent + * to the specified item, and also grabs the mouse by calling + * gdk_pointer_grab(). The event mask is also used when grabbing the pointer. + * If @cursor is not NULL, then that cursor is used while the grab is active. + * The @etime parameter is the timestamp required for grabbing the mouse. + * + * Return value: If an item was already grabbed, it returns %GDK_GRAB_ALREADY_GRABBED. If + * the specified item was hidden by calling foo_canvas_item_hide(), then it + * returns %GDK_GRAB_NOT_VIEWABLE. Else, it returns the result of calling + * gdk_pointer_grab(). + **/ +int +foo_canvas_item_grab (FooCanvasItem *item, guint event_mask, GdkCursor *cursor, guint32 etime) +{ + int retval; + + g_return_val_if_fail (FOO_IS_CANVAS_ITEM (item), GDK_GRAB_NOT_VIEWABLE); + g_return_val_if_fail (GTK_WIDGET_MAPPED (item->canvas), GDK_GRAB_NOT_VIEWABLE); + + if (item->canvas->grabbed_item) + return GDK_GRAB_ALREADY_GRABBED; + + if (!(item->object.flags & FOO_CANVAS_ITEM_MAPPED)) + return GDK_GRAB_NOT_VIEWABLE; + + retval = gdk_pointer_grab (item->canvas->layout.bin_window, + FALSE, + event_mask, + NULL, + cursor, + etime); + + if (retval != GDK_GRAB_SUCCESS) + return retval; + + item->canvas->grabbed_item = item; + item->canvas->grabbed_event_mask = event_mask; + item->canvas->current_item = item; /* So that events go to the grabbed item */ + + return retval; +} + + +/** + * foo_canvas_item_ungrab: + * @item: A canvas item that holds a grab. + * @etime: The timestamp for ungrabbing the mouse. + * + * Ungrabs the item, which must have been grabbed in the canvas, and ungrabs the + * mouse. + **/ +void +foo_canvas_item_ungrab (FooCanvasItem *item, guint32 etime) +{ + GdkDisplay *display; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + if (item->canvas->grabbed_item != item) + return; + + display = gtk_widget_get_display (GTK_WIDGET (item->canvas)); + item->canvas->grabbed_item = NULL; + gdk_display_pointer_ungrab (display, etime); +} + + +/** + * foo_canvas_item_w2i: + * @item: A canvas item. + * @x: X coordinate to convert (input/output value). + * @y: Y coordinate to convert (input/output value). + * + * Converts a coordinate pair from world coordinates to item-relative + * coordinates. + **/ +void +foo_canvas_item_w2i (FooCanvasItem *item, double *x, double *y) +{ + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + g_return_if_fail (x != NULL); + g_return_if_fail (y != NULL); + + item = item->parent; + while (item) { + if (FOO_IS_CANVAS_GROUP (item)) { + *x -= FOO_CANVAS_GROUP (item)->xpos; + *y -= FOO_CANVAS_GROUP (item)->ypos; + } + + item = item->parent; + } +} + + +/** + * foo_canvas_item_i2w: + * @item: A canvas item. + * @x: X coordinate to convert (input/output value). + * @y: Y coordinate to convert (input/output value). + * + * Converts a coordinate pair from item-relative coordinates to world + * coordinates. + **/ +void +foo_canvas_item_i2w (FooCanvasItem *item, double *x, double *y) +{ + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + g_return_if_fail (x != NULL); + g_return_if_fail (y != NULL); + + item = item->parent; + while (item) { + if (FOO_IS_CANVAS_GROUP (item)) { + *x += FOO_CANVAS_GROUP (item)->xpos; + *y += FOO_CANVAS_GROUP (item)->ypos; + } + + item = item->parent; + } +} + +/* Returns whether the item is an inferior of or is equal to the parent. */ +static int +is_descendant (FooCanvasItem *item, FooCanvasItem *parent) +{ + for (; item; item = item->parent) + if (item == parent) + return TRUE; + + return FALSE; +} + +/** + * foo_canvas_item_reparent: + * @item: A canvas item. + * @new_group: A canvas group. + * + * Changes the parent of the specified item to be the new group. The item keeps + * its group-relative coordinates as for its old parent, so the item may change + * its absolute position within the canvas. + **/ +void +foo_canvas_item_reparent (FooCanvasItem *item, FooCanvasGroup *new_group) +{ + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + g_return_if_fail (FOO_IS_CANVAS_GROUP (new_group)); + + /* Both items need to be in the same canvas */ + g_return_if_fail (item->canvas == FOO_CANVAS_ITEM (new_group)->canvas); + + /* The group cannot be an inferior of the item or be the item itself -- + * this also takes care of the case where the item is the root item of + * the canvas. */ + g_return_if_fail (!is_descendant (FOO_CANVAS_ITEM (new_group), item)); + + /* Everything is ok, now actually reparent the item */ + + g_object_ref (GTK_OBJECT (item)); /* protect it from the unref in group_remove */ + + foo_canvas_item_request_redraw (item); + + group_remove (FOO_CANVAS_GROUP (item->parent), item); + item->parent = FOO_CANVAS_ITEM (new_group); + group_add (new_group, item); + + /* Redraw and repick */ + + redraw_and_repick_if_mapped (item); + + g_object_unref (GTK_OBJECT (item)); +} + +/** + * foo_canvas_item_grab_focus: + * @item: A canvas item. + * + * Makes the specified item take the keyboard focus, so all keyboard events will + * be sent to it. If the canvas widget itself did not have the focus, it grabs + * it as well. + **/ +void +foo_canvas_item_grab_focus (FooCanvasItem *item) +{ + FooCanvasItem *focused_item; + GdkEvent ev; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + g_return_if_fail (GTK_WIDGET_CAN_FOCUS (GTK_WIDGET (item->canvas))); + + focused_item = item->canvas->focused_item; + + if (focused_item) { + ev.focus_change.type = GDK_FOCUS_CHANGE; + ev.focus_change.window = GTK_LAYOUT (item->canvas)->bin_window; + ev.focus_change.send_event = FALSE; + ev.focus_change.in = FALSE; + + emit_event (item->canvas, &ev); + } + + item->canvas->focused_item = item; + gtk_widget_grab_focus (GTK_WIDGET (item->canvas)); + + if (focused_item) { + ev.focus_change.type = GDK_FOCUS_CHANGE; + ev.focus_change.window = GTK_LAYOUT (item->canvas)->bin_window; + ev.focus_change.send_event = FALSE; + ev.focus_change.in = TRUE; + + emit_event (item->canvas, &ev); + } +} + + +/** + * foo_canvas_item_get_bounds: + * @item: A canvas item. + * @x1: Leftmost edge of the bounding box (return value). + * @y1: Upper edge of the bounding box (return value). + * @x2: Rightmost edge of the bounding box (return value). + * @y2: Lower edge of the bounding box (return value). + * + * Queries the bounding box of a canvas item. The bounds are returned in the + * coordinate system of the item's parent. + **/ +void +foo_canvas_item_get_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + double tx1, ty1, tx2, ty2; + + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + tx1 = ty1 = tx2 = ty2 = 0.0; + + /* Get the item's bounds in its coordinate system */ + + if (FOO_CANVAS_ITEM_GET_CLASS (item)->bounds) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->bounds) (item, &tx1, &ty1, &tx2, &ty2); + + /* Return the values */ + + if (x1) + *x1 = tx1; + + if (y1) + *y1 = ty1; + + if (x2) + *x2 = tx2; + + if (y2) + *y2 = ty2; +} + + +/** + * foo_canvas_item_request_update + * @item: A canvas item. + * + * To be used only by item implementations. Requests that the canvas queue an + * update for the specified item. + **/ +void +foo_canvas_item_request_update (FooCanvasItem *item) +{ + g_return_if_fail (!item->canvas->doing_update); + + if (item->object.flags & FOO_CANVAS_ITEM_NEED_UPDATE) + return; + + item->object.flags |= FOO_CANVAS_ITEM_NEED_UPDATE; + + if (item->parent != NULL) { + /* Recurse up the tree */ + foo_canvas_item_request_update (item->parent); + } else { + /* Have reached the top of the tree, make sure the update call gets scheduled. */ + foo_canvas_request_update (item->canvas); + } +} + +/** + * foo_canvas_item_request_update + * @item: A canvas item. + * + * Convenience function that informs a canvas that the specified item needs + * to be repainted. To be used by item implementations + **/ +void +foo_canvas_item_request_redraw (FooCanvasItem *item) +{ + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + foo_canvas_request_redraw (item->canvas, + item->x1, item->y1, + item->x2 + 1, item->y2 + 1); +} + + + +/*** FooCanvasGroup ***/ + + +enum { + GROUP_PROP_0, + GROUP_PROP_X, + GROUP_PROP_Y +}; + + +static void foo_canvas_group_class_init (FooCanvasGroupClass *class); +static void foo_canvas_group_init (FooCanvasGroup *group); +static void foo_canvas_group_set_property(GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void foo_canvas_group_get_property(GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); + +static void foo_canvas_group_destroy (GtkObject *object); + +static void foo_canvas_group_update (FooCanvasItem *item, + double i2w_dx, + double i2w_dy, + int flags); +static void foo_canvas_group_unrealize (FooCanvasItem *item); +static void foo_canvas_group_map (FooCanvasItem *item); +static void foo_canvas_group_unmap (FooCanvasItem *item); +static void foo_canvas_group_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose); +static double foo_canvas_group_point (FooCanvasItem *item, double x, double y, + int cx, int cy, + FooCanvasItem **actual_item); +static void foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy); +static void foo_canvas_group_bounds (FooCanvasItem *item, double *x1, double *y1, + double *x2, double *y2); + + +static FooCanvasItemClass *group_parent_class; + + +/** + * foo_canvas_group_get_type: + * + * Registers the &FooCanvasGroup class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &FooCanvasGroup class. + **/ +GType +foo_canvas_group_get_type (void) +{ + static GType group_type = 0; + + if (!group_type) { + static const GTypeInfo group_info = { + sizeof (FooCanvasGroupClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_group_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (FooCanvasGroup), + 0, /* n_preallocs */ + (GInstanceInitFunc) foo_canvas_group_init + + + }; + + group_type = g_type_register_static (foo_canvas_item_get_type (), + "FooCanvasGroup", + &group_info, + 0); + } + + return group_type; +} + +/* Class initialization function for FooCanvasGroupClass */ +static void +foo_canvas_group_class_init (FooCanvasGroupClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + FooCanvasItemClass *item_class; + + gobject_class = (GObjectClass *) class; + object_class = (GtkObjectClass *) class; + item_class = (FooCanvasItemClass *) class; + + group_parent_class = gtk_type_class (foo_canvas_item_get_type ()); + + gobject_class->set_property = foo_canvas_group_set_property; + gobject_class->get_property = foo_canvas_group_get_property; + + g_object_class_install_property + (gobject_class, GROUP_PROP_X, + g_param_spec_double ("x", + _("X"), + _("X"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, GROUP_PROP_Y, + g_param_spec_double ("y", + _("Y"), + _("Y"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + object_class->destroy = foo_canvas_group_destroy; + + item_class->update = foo_canvas_group_update; + item_class->unrealize = foo_canvas_group_unrealize; + item_class->map = foo_canvas_group_map; + item_class->unmap = foo_canvas_group_unmap; + item_class->draw = foo_canvas_group_draw; + item_class->point = foo_canvas_group_point; + item_class->translate = foo_canvas_group_translate; + item_class->bounds = foo_canvas_group_bounds; +} + +/* Object initialization function for FooCanvasGroup */ +static void +foo_canvas_group_init (FooCanvasGroup *group) +{ + group->xpos = 0.0; + group->ypos = 0.0; +} + +/* Set_property handler for canvas groups */ +static void +foo_canvas_group_set_property (GObject *gobject, guint param_id, + const GValue *value, GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasGroup *group; + double old; + gboolean moved; + + g_return_if_fail (FOO_IS_CANVAS_GROUP (gobject)); + + item = FOO_CANVAS_ITEM (gobject); + group = FOO_CANVAS_GROUP (gobject); + + moved = FALSE; + switch (param_id) { + case GROUP_PROP_X: + old = group->xpos; + group->xpos = g_value_get_double (value); + if (old != group->xpos) + moved = TRUE; + break; + + case GROUP_PROP_Y: + old = group->ypos; + group->ypos = g_value_get_double (value); + if (old != group->ypos) + moved = TRUE; + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); + break; + } + + if (moved) { + item->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE; + if (item->parent != NULL) + foo_canvas_item_request_update (item->parent); + else + foo_canvas_request_update (item->canvas); + } +} + +/* Get_property handler for canvas groups */ +static void +foo_canvas_group_get_property (GObject *gobject, guint param_id, + GValue *value, GParamSpec *pspec) +{ + FooCanvasItem *item; + FooCanvasGroup *group; + + g_return_if_fail (FOO_IS_CANVAS_GROUP (gobject)); + + item = FOO_CANVAS_ITEM (gobject); + group = FOO_CANVAS_GROUP (gobject); + + switch (param_id) { + case GROUP_PROP_X: + g_value_set_double (value, group->xpos); + break; + + case GROUP_PROP_Y: + g_value_set_double (value, group->ypos); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); + break; + } +} + +/* Destroy handler for canvas groups */ +static void +foo_canvas_group_destroy (GtkObject *object) +{ + FooCanvasGroup *group; + FooCanvasItem *child; + GList *list; + + g_return_if_fail (FOO_IS_CANVAS_GROUP (object)); + + group = FOO_CANVAS_GROUP (object); + + list = group->item_list; + while (list) { + child = list->data; + list = list->next; + + gtk_object_destroy (GTK_OBJECT (child)); + } + + if (GTK_OBJECT_CLASS (group_parent_class)->destroy) + (* GTK_OBJECT_CLASS (group_parent_class)->destroy) (object); +} + +/* Update handler for canvas groups */ +static void +foo_canvas_group_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) +{ + FooCanvasGroup *group; + GList *list; + FooCanvasItem *i; + double bbox_x0, bbox_y0, bbox_x1, bbox_y1; + gboolean first = TRUE; + + group = FOO_CANVAS_GROUP (item); + + (* group_parent_class->update) (item, i2w_dx, i2w_dy, flags); + + bbox_x0 = 0; + bbox_y0 = 0; + bbox_x1 = 0; + bbox_y1 = 0; + + for (list = group->item_list; list; list = list->next) { + i = list->data; + + foo_canvas_item_invoke_update (i, i2w_dx + group->xpos, i2w_dy + group->ypos, flags); + + if (first) { + first = FALSE; + bbox_x0 = i->x1; + bbox_y0 = i->y1; + bbox_x1 = i->x2; + bbox_y1 = i->y2; + } else { + bbox_x0 = MIN (bbox_x0, i->x1); + bbox_y0 = MIN (bbox_y0, i->y1); + bbox_x1 = MAX (bbox_x1, i->x2); + bbox_y1 = MAX (bbox_y1, i->y2); + } + } + item->x1 = bbox_x0; + item->y1 = bbox_y0; + item->x2 = bbox_x1; + item->y2 = bbox_y1; +} + +/* Unrealize handler for canvas groups */ +static void +foo_canvas_group_unrealize (FooCanvasItem *item) +{ + FooCanvasGroup *group; + GList *list; + FooCanvasItem *i; + + group = FOO_CANVAS_GROUP (item); + + /* Unmap group before children to avoid flash */ + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); + + for (list = group->item_list; list; list = list->next) { + i = list->data; + + if (i->object.flags & FOO_CANVAS_ITEM_REALIZED) + (* FOO_CANVAS_ITEM_GET_CLASS (i)->unrealize) (i); + } + + (* group_parent_class->unrealize) (item); +} + +/* Map handler for canvas groups */ +static void +foo_canvas_group_map (FooCanvasItem *item) +{ + FooCanvasGroup *group; + GList *list; + FooCanvasItem *i; + + group = FOO_CANVAS_GROUP (item); + + for (list = group->item_list; list; list = list->next) { + i = list->data; + + if (i->object.flags & FOO_CANVAS_ITEM_VISIBLE && + !(i->object.flags & FOO_CANVAS_ITEM_MAPPED)) { + if (!(i->object.flags & FOO_CANVAS_ITEM_REALIZED)) + (* FOO_CANVAS_ITEM_GET_CLASS (i)->realize) (i); + + (* FOO_CANVAS_ITEM_GET_CLASS (i)->map) (i); + } + } + + (* group_parent_class->map) (item); +} + +/* Unmap handler for canvas groups */ +static void +foo_canvas_group_unmap (FooCanvasItem *item) +{ + FooCanvasGroup *group; + GList *list; + FooCanvasItem *i; + + group = FOO_CANVAS_GROUP (item); + + for (list = group->item_list; list; list = list->next) { + i = list->data; + + if (i->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (i)->unmap) (i); + } + + (* group_parent_class->unmap) (item); +} + +/* Draw handler for canvas groups */ +static void +foo_canvas_group_draw (FooCanvasItem *item, GdkDrawable *drawable, + GdkEventExpose *expose) +{ + FooCanvasGroup *group; + GList *list; + FooCanvasItem *child = NULL; + + group = FOO_CANVAS_GROUP (item); + + for (list = group->item_list; list; list = list->next) { + child = list->data; + + if ((child->object.flags & FOO_CANVAS_ITEM_MAPPED) && + (FOO_CANVAS_ITEM_GET_CLASS (child)->draw)) { + GdkRectangle child_rect; + + child_rect.x = child->x1; + child_rect.y = child->y1; + child_rect.width = child->x2 - child->x1 + 1; + child_rect.height = child->y2 - child->y1 + 1; + + if (gdk_region_rect_in (expose->region, &child_rect) != GDK_OVERLAP_RECTANGLE_OUT) + (* FOO_CANVAS_ITEM_GET_CLASS (child)->draw) (child, drawable, expose); + } + } +} + +/* Point handler for canvas groups */ +static double +foo_canvas_group_point (FooCanvasItem *item, double x, double y, int cx, int cy, + FooCanvasItem **actual_item) +{ + FooCanvasGroup *group; + GList *list; + FooCanvasItem *child, *point_item; + int x1, y1, x2, y2; + double gx, gy; + double dist, best; + int has_point; + + group = FOO_CANVAS_GROUP (item); + + x1 = cx - item->canvas->close_enough; + y1 = cy - item->canvas->close_enough; + x2 = cx + item->canvas->close_enough; + y2 = cy + item->canvas->close_enough; + + best = 0.0; + *actual_item = NULL; + + gx = x - group->xpos; + gy = y - group->ypos; + + dist = 0.0; /* keep gcc happy */ + + for (list = group->item_list; list; list = list->next) { + child = list->data; + + if ((child->x1 > x2) || (child->y1 > y2) || (child->x2 < x1) || (child->y2 < y1)) + continue; + + point_item = NULL; /* cater for incomplete item implementations */ + + if ((child->object.flags & FOO_CANVAS_ITEM_MAPPED) + && FOO_CANVAS_ITEM_GET_CLASS (child)->point) { + dist = foo_canvas_item_invoke_point (child, gx, gy, cx, cy, &point_item); + has_point = TRUE; + } else + has_point = FALSE; + + if (has_point + && point_item + && ((int) (dist * item->canvas->pixels_per_unit + 0.5) + <= item->canvas->close_enough)) { + best = dist; + *actual_item = point_item; + } + } + + return best; +} + +void +foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy) +{ + FooCanvasGroup *group; + + group = FOO_CANVAS_GROUP (item); + + group->xpos += dx; + group->ypos += dy; +} + +/* Bounds handler for canvas groups */ +static void +foo_canvas_group_bounds (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2) +{ + FooCanvasGroup *group; + FooCanvasItem *child; + GList *list; + double tx1, ty1, tx2, ty2; + double minx, miny, maxx, maxy; + int set; + + group = FOO_CANVAS_GROUP (item); + + /* Get the bounds of the first visible item */ + + child = NULL; /* Unnecessary but eliminates a warning. */ + + set = FALSE; + + for (list = group->item_list; list; list = list->next) { + child = list->data; + + if (child->object.flags & FOO_CANVAS_ITEM_MAPPED) { + set = TRUE; + foo_canvas_item_get_bounds (child, &minx, &miny, &maxx, &maxy); + break; + } + } + + /* If there were no visible items, return an empty bounding box */ + + if (!set) { + *x1 = *y1 = *x2 = *y2 = 0.0; + return; + } + + /* Now we can grow the bounds using the rest of the items */ + + list = list->next; + + for (; list; list = list->next) { + child = list->data; + + if (!(child->object.flags & FOO_CANVAS_ITEM_MAPPED)) + continue; + + foo_canvas_item_get_bounds (child, &tx1, &ty1, &tx2, &ty2); + + if (tx1 < minx) + minx = tx1; + + if (ty1 < miny) + miny = ty1; + + if (tx2 > maxx) + maxx = tx2; + + if (ty2 > maxy) + maxy = ty2; + } + + /* Make the bounds be relative to our parent's coordinate system */ + + if (item->parent) { + minx += group->xpos; + miny += group->ypos; + maxx += group->xpos; + maxy += group->ypos; + } + + *x1 = minx; + *y1 = miny; + *x2 = maxx; + *y2 = maxy; +} + +/* Adds an item to a group */ +static void +group_add (FooCanvasGroup *group, FooCanvasItem *item) +{ + g_object_ref (GTK_OBJECT (item)); + gtk_object_sink (GTK_OBJECT (item)); + + if (!group->item_list) { + group->item_list = g_list_append (group->item_list, item); + group->item_list_end = group->item_list; + } else + group->item_list_end = g_list_append (group->item_list_end, item)->next; + + if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE && + group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) { + if (!(item->object.flags & FOO_CANVAS_ITEM_REALIZED)) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->realize) (item); + + if (!(item->object.flags & FOO_CANVAS_ITEM_MAPPED)) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->map) (item); + } +} + +/* Removes an item from a group */ +static void +group_remove (FooCanvasGroup *group, FooCanvasItem *item) +{ + GList *children; + + g_return_if_fail (FOO_IS_CANVAS_GROUP (group)); + g_return_if_fail (FOO_IS_CANVAS_ITEM (item)); + + for (children = group->item_list; children; children = children->next) + if (children->data == item) { + if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unmap) (item); + + if (item->object.flags & FOO_CANVAS_ITEM_REALIZED) + (* FOO_CANVAS_ITEM_GET_CLASS (item)->unrealize) (item); + + /* Unparent the child */ + + item->parent = NULL; + g_object_unref (GTK_OBJECT (item)); + + /* Remove it from the list */ + + if (children == group->item_list_end) + group->item_list_end = children->prev; + + group->item_list = g_list_remove_link (group->item_list, children); + g_list_free (children); + break; + } +} + + +/*** FooCanvas ***/ + + +enum { + DRAW_BACKGROUND, + LAST_SIGNAL +}; + +static void foo_canvas_class_init (FooCanvasClass *class); +static void foo_canvas_init (FooCanvas *canvas); +static void foo_canvas_destroy (GtkObject *object); +static void foo_canvas_map (GtkWidget *widget); +static void foo_canvas_unmap (GtkWidget *widget); +static void foo_canvas_realize (GtkWidget *widget); +static void foo_canvas_unrealize (GtkWidget *widget); +static void foo_canvas_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); +static gint foo_canvas_button (GtkWidget *widget, + GdkEventButton *event); +static gint foo_canvas_motion (GtkWidget *widget, + GdkEventMotion *event); +static gint foo_canvas_expose (GtkWidget *widget, + GdkEventExpose *event); +static gint foo_canvas_key (GtkWidget *widget, + GdkEventKey *event); +static gint foo_canvas_crossing (GtkWidget *widget, + GdkEventCrossing *event); +static gint foo_canvas_focus_in (GtkWidget *widget, + GdkEventFocus *event); +static gint foo_canvas_focus_out (GtkWidget *widget, + GdkEventFocus *event); +static void foo_canvas_request_update_real (FooCanvas *canvas); +static void foo_canvas_draw_background (FooCanvas *canvas, + int x, + int y, + int width, + int height); + + +static GtkLayoutClass *canvas_parent_class; + +static guint canvas_signals[LAST_SIGNAL]; + +/** + * foo_canvas_get_type: + * + * Registers the &FooCanvas class if necessary, and returns the type ID + * associated to it. + * + * Return value: The type ID of the &FooCanvas class. + **/ +GType +foo_canvas_get_type (void) +{ + static GType canvas_type = 0; + + if (!canvas_type) { + static const GTypeInfo canvas_info = { + sizeof (FooCanvasClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (FooCanvas), + 0, /* n_preallocs */ + (GInstanceInitFunc) foo_canvas_init + }; + + canvas_type = g_type_register_static (gtk_layout_get_type (), + "FooCanvas", + &canvas_info, + 0); + } + + return canvas_type; +} + +static void +foo_canvas_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +foo_canvas_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +foo_canvas_accessible_adjustment_changed (GtkAdjustment *adjustment, + gpointer data) +{ + AtkObject *atk_obj; + + /* The scrollbars have changed */ + atk_obj = ATK_OBJECT (data); + + g_signal_emit_by_name (atk_obj, "visible_data_changed"); +} + +static void +foo_canvas_accessible_initialize (AtkObject *obj, + gpointer data) +{ + FooCanvas *canvas; + + if (ATK_OBJECT_CLASS (accessible_parent_class)->initialize != NULL) + ATK_OBJECT_CLASS (accessible_parent_class)->initialize (obj, data); + + canvas = FOO_CANVAS (data); + g_signal_connect (canvas->layout.hadjustment, + "value_changed", + G_CALLBACK (foo_canvas_accessible_adjustment_changed), + obj); + g_signal_connect (canvas->layout.vadjustment, + "value_changed", + G_CALLBACK (foo_canvas_accessible_adjustment_changed), + obj); + + obj->role = ATK_ROLE_LAYERED_PANE; +} + +static gint +foo_canvas_accessible_get_n_children (AtkObject* obj) +{ + GtkAccessible *accessible; + GtkWidget *widget; + FooCanvas *canvas; + FooCanvasGroup *root_group; + + accessible = GTK_ACCESSIBLE (obj); + widget = accessible->widget; + if (widget == NULL) { + /* State is defunct */ + return 0; + } + + g_return_val_if_fail (FOO_IS_CANVAS (widget), 0); + + canvas = FOO_CANVAS (widget); + root_group = foo_canvas_root (canvas); + g_return_val_if_fail (root_group, 0); + return 1; +} + +static AtkObject* +foo_canvas_accessible_ref_child (AtkObject *obj, + gint i) +{ + GtkAccessible *accessible; + GtkWidget *widget; + FooCanvas *canvas; + FooCanvasGroup *root_group; + AtkObject *atk_object; + + /* Canvas only has one child, so return NULL if index is non zero */ + if (i != 0) { + return NULL; + } + + accessible = GTK_ACCESSIBLE (obj); + widget = accessible->widget; + if (widget == NULL) { + /* State is defunct */ + return NULL; + } + + canvas = FOO_CANVAS (widget); + root_group = foo_canvas_root (canvas); + g_return_val_if_fail (root_group, NULL); + atk_object = atk_gobject_accessible_for_object (G_OBJECT (root_group)); + g_object_ref (atk_object); + + g_warning ("Accessible support for FooGroup needs to be implemented"); + + return atk_object; +} + +static void +foo_canvas_accessible_class_init (AtkObjectClass *klass) +{ + accessible_parent_class = g_type_class_peek_parent (klass); + + klass->initialize = foo_canvas_accessible_initialize; + klass->get_n_children = foo_canvas_accessible_get_n_children; + klass->ref_child = foo_canvas_accessible_ref_child; +} + +static GType +foo_canvas_accessible_get_type (void) +{ + static GType type = 0; + + if (!type) { + AtkObjectFactory *factory; + GType parent_atk_type; + GTypeQuery query; + GTypeInfo tinfo = { 0 }; + + factory = atk_registry_get_factory (atk_get_default_registry(), + GTK_TYPE_WIDGET); + if (!factory) { + return G_TYPE_INVALID; + } + parent_atk_type = atk_object_factory_get_accessible_type (factory); + if (!parent_atk_type) { + return G_TYPE_INVALID; + } + g_type_query (parent_atk_type, &query); + tinfo.class_init = (GClassInitFunc) foo_canvas_accessible_class_init; + tinfo.class_size = query.class_size; + tinfo.instance_size = query.instance_size; + type = g_type_register_static (parent_atk_type, + "FooCanvasAccessibility", + &tinfo, 0); + } + return type; +} + +static AtkObject * +foo_canvas_accessible_create (GObject *for_object) +{ + GType type; + AtkObject *accessible; + FooCanvas *canvas; + + canvas = FOO_CANVAS (for_object); + g_return_val_if_fail (canvas != NULL, NULL); + + type = foo_canvas_accessible_get_type (); + + if (type == G_TYPE_INVALID) { + return atk_no_op_object_new (for_object); + } + + accessible = g_object_new (type, NULL); + atk_object_initialize (accessible, for_object); + return accessible; +} + +static GType +foo_canvas_accessible_factory_get_accessible_type (void) +{ + return foo_canvas_accessible_get_type (); +} + +static AtkObject* +foo_canvas_accessible_factory_create_accessible (GObject *obj) +{ + AtkObject *accessible; + + g_return_val_if_fail (G_IS_OBJECT (obj), NULL); + + accessible = foo_canvas_accessible_create (obj); + + return accessible; +} + +static void +foo_canvas_accessible_factory_class_init (AtkObjectFactoryClass *klass) +{ + klass->create_accessible = foo_canvas_accessible_factory_create_accessible; + klass->get_accessible_type = foo_canvas_accessible_factory_get_accessible_type; +} + +static GType +foo_canvas_accessible_factory_get_type (void) +{ + static GType type = 0; + + if (!type) { + static const GTypeInfo tinfo = { + sizeof (AtkObjectFactoryClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_accessible_factory_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (AtkObjectFactory), + 0, /* n_preallocs */ + NULL + }; + type = g_type_register_static (ATK_TYPE_OBJECT_FACTORY, + "FooCanvasAccessibilityFactory", + &tinfo, 0); + } + + return type; +} + + +/* Class initialization function for FooCanvasClass */ +static void +foo_canvas_class_init (FooCanvasClass *klass) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; + + gobject_class = (GObjectClass *)klass; + object_class = (GtkObjectClass *) klass; + widget_class = (GtkWidgetClass *) klass; + + canvas_parent_class = gtk_type_class (gtk_layout_get_type ()); + + gobject_class->set_property = foo_canvas_set_property; + gobject_class->get_property = foo_canvas_get_property; + + object_class->destroy = foo_canvas_destroy; + + widget_class->map = foo_canvas_map; + widget_class->unmap = foo_canvas_unmap; + widget_class->realize = foo_canvas_realize; + widget_class->unrealize = foo_canvas_unrealize; + widget_class->size_allocate = foo_canvas_size_allocate; + widget_class->button_press_event = foo_canvas_button; + widget_class->button_release_event = foo_canvas_button; + widget_class->motion_notify_event = foo_canvas_motion; + widget_class->expose_event = foo_canvas_expose; + widget_class->key_press_event = foo_canvas_key; + widget_class->key_release_event = foo_canvas_key; + widget_class->enter_notify_event = foo_canvas_crossing; + widget_class->leave_notify_event = foo_canvas_crossing; + widget_class->focus_in_event = foo_canvas_focus_in; + widget_class->focus_out_event = foo_canvas_focus_out; + + klass->draw_background = foo_canvas_draw_background; + klass->request_update = foo_canvas_request_update_real; + + canvas_signals[DRAW_BACKGROUND] = + g_signal_new ("draw_background", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FooCanvasClass, draw_background), + NULL, NULL, + foo_canvas_marshal_VOID__INT_INT_INT_INT, + G_TYPE_NONE, 4, + G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); + + atk_registry_set_factory_type (atk_get_default_registry (), + FOO_TYPE_CANVAS, + foo_canvas_accessible_factory_get_type ()); +} + +/* Callback used when the root item of a canvas is destroyed. The user should + * never ever do this, so we panic if this happens. + */ +static void +panic_root_destroyed (GtkObject *object, gpointer data) +{ + g_error ("Eeeek, root item %p of canvas %p was destroyed!", object, data); +} + +/* Object initialization function for FooCanvas */ +static void +foo_canvas_init (FooCanvas *canvas) +{ + GTK_WIDGET_SET_FLAGS (canvas, GTK_CAN_FOCUS); + + gtk_widget_set_redraw_on_allocate (GTK_WIDGET (canvas), FALSE); + + canvas->scroll_x1 = 0.0; + canvas->scroll_y1 = 0.0; + canvas->scroll_x2 = canvas->layout.width; + canvas->scroll_y2 = canvas->layout.height; + + canvas->pixels_per_unit = 1.0; + + canvas->pick_event.type = GDK_LEAVE_NOTIFY; + canvas->pick_event.crossing.x = 0; + canvas->pick_event.crossing.y = 0; + + gtk_layout_set_hadjustment (GTK_LAYOUT (canvas), NULL); + gtk_layout_set_vadjustment (GTK_LAYOUT (canvas), NULL); + + /* Create the root item as a special case */ + + canvas->root = FOO_CANVAS_ITEM (g_object_new (foo_canvas_group_get_type (), NULL)); + canvas->root->canvas = canvas; + + g_object_ref (GTK_OBJECT (canvas->root)); + gtk_object_sink (GTK_OBJECT (canvas->root)); + + canvas->root_destroy_id = g_signal_connect (GTK_OBJECT (canvas->root), "destroy", + (GtkSignalFunc) panic_root_destroyed, + canvas); + + canvas->need_repick = TRUE; + canvas->doing_update = FALSE; +} + +/* Convenience function to remove the idle handler of a canvas */ +static void +remove_idle (FooCanvas *canvas) +{ + if (canvas->idle_id == 0) + return; + + g_source_remove (canvas->idle_id); + canvas->idle_id = 0; +} + +/* Removes the transient state of the canvas (idle handler, grabs). */ +static void +shutdown_transients (FooCanvas *canvas) +{ + /* We turn off the need_redraw flag, since if the canvas is mapped again + * it will request a redraw anyways. We do not turn off the need_update + * flag, though, because updates are not queued when the canvas remaps + * itself. + */ + if (canvas->need_redraw) { + canvas->need_redraw = FALSE; + } + + if (canvas->grabbed_item) { + GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (canvas)); + canvas->grabbed_item = NULL; + gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); + } + + remove_idle (canvas); +} + +/* Destroy handler for FooCanvas */ +static void +foo_canvas_destroy (GtkObject *object) +{ + FooCanvas *canvas; + + g_return_if_fail (FOO_IS_CANVAS (object)); + + /* remember, destroy can be run multiple times! */ + + canvas = FOO_CANVAS (object); + + if (canvas->root_destroy_id) { + g_signal_handler_disconnect (GTK_OBJECT (canvas->root), canvas->root_destroy_id); + canvas->root_destroy_id = 0; + } + if (canvas->root) { + g_object_unref (GTK_OBJECT (canvas->root)); + canvas->root = NULL; + } + + shutdown_transients (canvas); + + if (GTK_OBJECT_CLASS (canvas_parent_class)->destroy) + (* GTK_OBJECT_CLASS (canvas_parent_class)->destroy) (object); +} + +/** + * foo_canvas_new: + * @void: + * + * Creates a new empty canvas. If you wish to use the + * &FooCanvasImage item inside this canvas, then you must push the gdk_imlib + * visual and colormap before calling this function, and they can be popped + * afterwards. + * + * Return value: A newly-created canvas. + **/ +GtkWidget * +foo_canvas_new (void) +{ + return GTK_WIDGET (g_object_new (foo_canvas_get_type (), NULL)); +} + +/* Map handler for the canvas */ +static void +foo_canvas_map (GtkWidget *widget) +{ + FooCanvas *canvas; + + g_return_if_fail (FOO_IS_CANVAS (widget)); + + /* Normal widget mapping stuff */ + + if (GTK_WIDGET_CLASS (canvas_parent_class)->map) + (* GTK_WIDGET_CLASS (canvas_parent_class)->map) (widget); + + canvas = FOO_CANVAS (widget); + + /* Map items */ + + if (canvas->root->object.flags & FOO_CANVAS_ITEM_VISIBLE && + !(canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED) && + FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->map) + (* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->map) (canvas->root); +} + +/* Unmap handler for the canvas */ +static void +foo_canvas_unmap (GtkWidget *widget) +{ + FooCanvas *canvas; + + g_return_if_fail (FOO_IS_CANVAS (widget)); + + canvas = FOO_CANVAS (widget); + + shutdown_transients (canvas); + + /* Unmap items */ + + if (FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->unmap) + (* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->unmap) (canvas->root); + + /* Normal widget unmapping stuff */ + + if (GTK_WIDGET_CLASS (canvas_parent_class)->unmap) + (* GTK_WIDGET_CLASS (canvas_parent_class)->unmap) (widget); +} + +/* Realize handler for the canvas */ +static void +foo_canvas_realize (GtkWidget *widget) +{ + FooCanvas *canvas; + + g_return_if_fail (FOO_IS_CANVAS (widget)); + + /* Normal widget realization stuff */ + + if (GTK_WIDGET_CLASS (canvas_parent_class)->realize) + (* GTK_WIDGET_CLASS (canvas_parent_class)->realize) (widget); + + canvas = FOO_CANVAS (widget); + + gdk_window_set_events (canvas->layout.bin_window, + (gdk_window_get_events (canvas->layout.bin_window) + | GDK_EXPOSURE_MASK + | GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK + | GDK_POINTER_MOTION_MASK + | GDK_KEY_PRESS_MASK + | GDK_KEY_RELEASE_MASK + | GDK_ENTER_NOTIFY_MASK + | GDK_LEAVE_NOTIFY_MASK + | GDK_FOCUS_CHANGE_MASK)); + + /* Create our own temporary pixmap gc and realize all the items */ + + canvas->pixmap_gc = gdk_gc_new (canvas->layout.bin_window); + + (* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->realize) (canvas->root); +} + +/* Unrealize handler for the canvas */ +static void +foo_canvas_unrealize (GtkWidget *widget) +{ + FooCanvas *canvas; + + g_return_if_fail (FOO_IS_CANVAS (widget)); + + canvas = FOO_CANVAS (widget); + + shutdown_transients (canvas); + + /* Unrealize items and parent widget */ + + (* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->unrealize) (canvas->root); + + g_object_unref (canvas->pixmap_gc); + canvas->pixmap_gc = NULL; + + if (GTK_WIDGET_CLASS (canvas_parent_class)->unrealize) + (* GTK_WIDGET_CLASS (canvas_parent_class)->unrealize) (widget); +} + +/* Handles scrolling of the canvas. Adjusts the scrolling and zooming offset to + * keep as much as possible of the canvas scrolling region in view. + */ +static void +scroll_to (FooCanvas *canvas, int cx, int cy, gboolean redraw) +{ + int scroll_width, scroll_height; + int right_limit, bottom_limit; + int old_zoom_xofs, old_zoom_yofs; + int changed_x = FALSE, changed_y = FALSE; + int canvas_width, canvas_height; + + canvas_width = GTK_WIDGET (canvas)->allocation.width; + canvas_height = GTK_WIDGET (canvas)->allocation.height; + + scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5); + scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5); + + right_limit = scroll_width - canvas_width; + bottom_limit = scroll_height - canvas_height; + + old_zoom_xofs = canvas->zoom_xofs; + old_zoom_yofs = canvas->zoom_yofs; + + if (right_limit < 0) { + cx = 0; + if (canvas->center_scroll_region) { + canvas->zoom_xofs = (canvas_width - scroll_width) / 2; + scroll_width = canvas_width; + } else { + canvas->zoom_xofs = 0; + } + } else if (cx < 0) { + cx = 0; + canvas->zoom_xofs = 0; + } else + canvas->zoom_xofs = 0; + + if (bottom_limit < 0) { + cy = 0; + if (canvas->center_scroll_region) { + canvas->zoom_yofs = (canvas_height - scroll_height) / 2; + scroll_height = canvas_height; + } else { + canvas->zoom_yofs = 0; + } + } else if (cy < 0) { + cy = 0; + canvas->zoom_yofs = 0; + } else if (cy > bottom_limit) { + cy = bottom_limit; + canvas->zoom_yofs = 0; + } else + canvas->zoom_yofs = 0; + + if ((canvas->zoom_xofs != old_zoom_xofs) || (canvas->zoom_yofs != old_zoom_yofs)) { + /* This can only occur, if either canvas size or widget size changes */ + /* So I think we can request full redraw here */ + /* More stuff - we have to mark root as needing fresh affine (Lauris) */ + if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE; + foo_canvas_request_update (canvas); + } + gtk_widget_queue_draw (GTK_WIDGET (canvas)); + } + + if (((int) canvas->layout.hadjustment->value) != cx) { + canvas->layout.hadjustment->value = cx; + changed_x = TRUE; + } + + if (((int) canvas->layout.vadjustment->value) != cy) { + canvas->layout.vadjustment->value = cy; + changed_y = TRUE; + } + + if ((scroll_width != (int) canvas->layout.width) || (scroll_height != (int) canvas->layout.height)) { + gtk_layout_set_size (GTK_LAYOUT (canvas), scroll_width, scroll_height); + } + + /* Signal GtkLayout that it should do a redraw. */ + if (redraw) { + if (changed_x) + g_signal_emit_by_name (GTK_OBJECT (canvas->layout.hadjustment), "value_changed"); + if (changed_y) + g_signal_emit_by_name (GTK_OBJECT (canvas->layout.vadjustment), "value_changed"); +} +} + +/* Size allocation handler for the canvas */ +static void +foo_canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation) +{ + FooCanvas *canvas; + + g_return_if_fail (FOO_IS_CANVAS (widget)); + g_return_if_fail (allocation != NULL); + + if (GTK_WIDGET_CLASS (canvas_parent_class)->size_allocate) + (* GTK_WIDGET_CLASS (canvas_parent_class)->size_allocate) (widget, allocation); + + canvas = FOO_CANVAS (widget); + + /* Recenter the view, if appropriate */ + + canvas->layout.hadjustment->page_size = allocation->width; + canvas->layout.hadjustment->page_increment = allocation->width / 2; + + canvas->layout.vadjustment->page_size = allocation->height; + canvas->layout.vadjustment->page_increment = allocation->height / 2; + + scroll_to (canvas, + canvas->layout.hadjustment->value, + canvas->layout.vadjustment->value, TRUE); + + g_signal_emit_by_name (GTK_OBJECT (canvas->layout.hadjustment), "changed"); + g_signal_emit_by_name (GTK_OBJECT (canvas->layout.vadjustment), "changed"); +} + +/* Emits an event for an item in the canvas, be it the current item, grabbed + * item, or focused item, as appropriate. + */ + +static int +emit_event (FooCanvas *canvas, GdkEvent *event) +{ + GdkEvent ev; + gint finished; + FooCanvasItem *item; + FooCanvasItem *parent; + guint mask; + + /* Could be an old pick event */ + if (!GTK_WIDGET_REALIZED (canvas)) { + return FALSE; + } + + /* Perform checks for grabbed items */ + + if (canvas->grabbed_item && + !is_descendant (canvas->current_item, canvas->grabbed_item)) { + return FALSE; + } + + if (canvas->grabbed_item) { + switch (event->type) { + case GDK_ENTER_NOTIFY: + mask = GDK_ENTER_NOTIFY_MASK; + break; + + case GDK_LEAVE_NOTIFY: + mask = GDK_LEAVE_NOTIFY_MASK; + break; + + case GDK_MOTION_NOTIFY: + mask = GDK_POINTER_MOTION_MASK; + break; + + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + mask = GDK_BUTTON_PRESS_MASK; + break; + + case GDK_BUTTON_RELEASE: + mask = GDK_BUTTON_RELEASE_MASK; + break; + + case GDK_KEY_PRESS: + mask = GDK_KEY_PRESS_MASK; + break; + + case GDK_KEY_RELEASE: + mask = GDK_KEY_RELEASE_MASK; + break; + + default: + mask = 0; + break; + } + + if (!(mask & canvas->grabbed_event_mask)) + return FALSE; + } + + /* Convert to world coordinates -- we have two cases because of diferent + * offsets of the fields in the event structures. + */ + + ev = *event; + + switch (ev.type) + { + case GDK_ENTER_NOTIFY: + case GDK_LEAVE_NOTIFY: + foo_canvas_window_to_world (canvas, + ev.crossing.x, ev.crossing.y, + &ev.crossing.x, &ev.crossing.y); + break; + + case GDK_MOTION_NOTIFY: + foo_canvas_window_to_world (canvas, + ev.motion.x, ev.motion.y, + &ev.motion.x, &ev.motion.y); + break; + + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + foo_canvas_window_to_world (canvas, + ev.motion.x, ev.motion.y, + &ev.motion.x, &ev.motion.y); + break; + + case GDK_BUTTON_RELEASE: + foo_canvas_window_to_world (canvas, + ev.motion.x, ev.motion.y, + &ev.motion.x, &ev.motion.y); + break; + + default: + break; + } + + /* Choose where we send the event */ + + item = canvas->current_item; + + if (canvas->focused_item + && ((event->type == GDK_KEY_PRESS) || + (event->type == GDK_KEY_RELEASE) || + (event->type == GDK_FOCUS_CHANGE))) + item = canvas->focused_item; + + /* The event is propagated up the hierarchy (for if someone connected to + * a group instead of a leaf event), and emission is stopped if a + * handler returns TRUE, just like for GtkWidget events. + */ + + finished = FALSE; + + while (item && !finished) { + g_object_ref (GTK_OBJECT (item)); + + g_signal_emit ( + GTK_OBJECT (item), item_signals[ITEM_EVENT], 0, + &ev, &finished); + + parent = item->parent; + g_object_unref (GTK_OBJECT (item)); + + item = parent; + } + + return finished; +} + +/* Re-picks the current item in the canvas, based on the event's coordinates. + * Also emits enter/leave events for items as appropriate. + */ +static int +pick_current_item (FooCanvas *canvas, GdkEvent *event) +{ + int button_down; + double x, y; + int cx, cy; + int retval; + + retval = FALSE; + + /* If a button is down, we'll perform enter and leave events on the + * current item, but not enter on any other item. This is more or less + * like X pointer grabbing for canvas items. + */ + button_down = canvas->state & (GDK_BUTTON1_MASK + | GDK_BUTTON2_MASK + | GDK_BUTTON3_MASK + | GDK_BUTTON4_MASK + | GDK_BUTTON5_MASK); + if (!button_down) + canvas->left_grabbed_item = FALSE; + + /* Save the event in the canvas. This is used to synthesize enter and + * leave events in case the current item changes. It is also used to + * re-pick the current item if the current one gets deleted. Also, + * synthesize an enter event. + */ + if (event != &canvas->pick_event) { + if ((event->type == GDK_MOTION_NOTIFY) || (event->type == GDK_BUTTON_RELEASE)) { + /* these fields have the same offsets in both types of events */ + + canvas->pick_event.crossing.type = GDK_ENTER_NOTIFY; + canvas->pick_event.crossing.window = event->motion.window; + canvas->pick_event.crossing.send_event = event->motion.send_event; + canvas->pick_event.crossing.subwindow = NULL; + canvas->pick_event.crossing.x = event->motion.x; + canvas->pick_event.crossing.y = event->motion.y; + canvas->pick_event.crossing.mode = GDK_CROSSING_NORMAL; + canvas->pick_event.crossing.detail = GDK_NOTIFY_NONLINEAR; + canvas->pick_event.crossing.focus = FALSE; + canvas->pick_event.crossing.state = event->motion.state; + + /* these fields don't have the same offsets in both types of events */ + + if (event->type == GDK_MOTION_NOTIFY) { + canvas->pick_event.crossing.x_root = event->motion.x_root; + canvas->pick_event.crossing.y_root = event->motion.y_root; + } else { + canvas->pick_event.crossing.x_root = event->button.x_root; + canvas->pick_event.crossing.y_root = event->button.y_root; + } + } else + canvas->pick_event = *event; + } + + /* Don't do anything else if this is a recursive call */ + + if (canvas->in_repick) + return retval; + + /* LeaveNotify means that there is no current item, so we don't look for one */ + + if (canvas->pick_event.type != GDK_LEAVE_NOTIFY) { + /* these fields don't have the same offsets in both types of events */ + + if (canvas->pick_event.type == GDK_ENTER_NOTIFY) { + x = canvas->pick_event.crossing.x; + y = canvas->pick_event.crossing.y; + } else { + x = canvas->pick_event.motion.x; + y = canvas->pick_event.motion.y; + } + + /* canvas pixel coords */ + + cx = (int) (x + 0.5); + cy = (int) (y + 0.5); + + /* world coords */ + foo_canvas_c2w (canvas, cx, cy, &x, &y); + + /* find the closest item */ + if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED) + foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, + &canvas->new_current_item); + else + canvas->new_current_item = NULL; + } else + canvas->new_current_item = NULL; + + if ((canvas->new_current_item == canvas->current_item) && !canvas->left_grabbed_item) + return retval; /* current item did not change */ + + /* Synthesize events for old and new current items */ + + if ((canvas->new_current_item != canvas->current_item) + && (canvas->current_item != NULL) + && !canvas->left_grabbed_item) { + GdkEvent new_event; + FooCanvasItem *item; + + item = canvas->current_item; + + new_event = canvas->pick_event; + new_event.type = GDK_LEAVE_NOTIFY; + + new_event.crossing.detail = GDK_NOTIFY_ANCESTOR; + new_event.crossing.subwindow = NULL; + canvas->in_repick = TRUE; + retval = emit_event (canvas, &new_event); + canvas->in_repick = FALSE; + } + + /* new_current_item may have been set to NULL during the call to emit_event() above */ + + if ((canvas->new_current_item != canvas->current_item) && button_down) { + canvas->left_grabbed_item = TRUE; + return retval; + } + + /* Handle the rest of cases */ + + canvas->left_grabbed_item = FALSE; + canvas->current_item = canvas->new_current_item; + + if (canvas->current_item != NULL) { + GdkEvent new_event; + + new_event = canvas->pick_event; + new_event.type = GDK_ENTER_NOTIFY; + new_event.crossing.detail = GDK_NOTIFY_ANCESTOR; + new_event.crossing.subwindow = NULL; + retval = emit_event (canvas, &new_event); + } + + return retval; +} + +/* Button event handler for the canvas */ +static gint +foo_canvas_button (GtkWidget *widget, GdkEventButton *event) +{ + FooCanvas *canvas; + int mask; + int retval; + + g_return_val_if_fail (FOO_IS_CANVAS (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + retval = FALSE; + + canvas = FOO_CANVAS (widget); + + /* + * dispatch normally regardless of the event's window if an item has + * has a pointer grab in effect + */ + if (!canvas->grabbed_item && event->window != canvas->layout.bin_window) + return retval; + + switch (event->button) { + case 1: + mask = GDK_BUTTON1_MASK; + break; + case 2: + mask = GDK_BUTTON2_MASK; + break; + case 3: + mask = GDK_BUTTON3_MASK; + break; + case 4: + mask = GDK_BUTTON4_MASK; + break; + case 5: + mask = GDK_BUTTON5_MASK; + break; + default: + mask = 0; + } + + switch (event->type) { + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + /* Pick the current item as if the button were not pressed, and + * then process the event. + */ + canvas->state = event->state; + pick_current_item (canvas, (GdkEvent *) event); + canvas->state ^= mask; + retval = emit_event (canvas, (GdkEvent *) event); + break; + + case GDK_BUTTON_RELEASE: + /* Process the event as if the button were pressed, then repick + * after the button has been released + */ + canvas->state = event->state; + retval = emit_event (canvas, (GdkEvent *) event); + event->state ^= mask; + canvas->state = event->state; + pick_current_item (canvas, (GdkEvent *) event); + event->state ^= mask; + break; + + default: + g_assert_not_reached (); + } + + return retval; +} + +/* Motion event handler for the canvas */ +static gint +foo_canvas_motion (GtkWidget *widget, GdkEventMotion *event) +{ + FooCanvas *canvas; + + g_return_val_if_fail (FOO_IS_CANVAS (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + canvas = FOO_CANVAS (widget); + + if (event->window != canvas->layout.bin_window) + return FALSE; + + canvas->state = event->state; + pick_current_item (canvas, (GdkEvent *) event); + return emit_event (canvas, (GdkEvent *) event); +} + +/* Key event handler for the canvas */ +static gint +foo_canvas_key (GtkWidget *widget, GdkEventKey *event) +{ + FooCanvas *canvas; + + g_return_val_if_fail (FOO_IS_CANVAS (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + canvas = FOO_CANVAS (widget); + + if (emit_event (canvas, (GdkEvent *) event)) + return TRUE; + if (event->type == GDK_KEY_RELEASE) + return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event); + else + return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event); +} + + +/* Crossing event handler for the canvas */ +static gint +foo_canvas_crossing (GtkWidget *widget, GdkEventCrossing *event) +{ + FooCanvas *canvas; + + g_return_val_if_fail (FOO_IS_CANVAS (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + canvas = FOO_CANVAS (widget); + + if (event->window != canvas->layout.bin_window) + return FALSE; + + canvas->state = event->state; + return pick_current_item (canvas, (GdkEvent *) event); +} + +/* Focus in handler for the canvas */ +static gint +foo_canvas_focus_in (GtkWidget *widget, GdkEventFocus *event) +{ + FooCanvas *canvas; + + GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); + + canvas = FOO_CANVAS (widget); + + if (canvas->focused_item) + return emit_event (canvas, (GdkEvent *) event); + else + return FALSE; +} + +/* Focus out handler for the canvas */ +static gint +foo_canvas_focus_out (GtkWidget *widget, GdkEventFocus *event) +{ + FooCanvas *canvas; + + GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); + + canvas = FOO_CANVAS (widget); + + if (canvas->focused_item) + return emit_event (canvas, (GdkEvent *) event); + else + return FALSE; +} + +/* Expose handler for the canvas */ +static gint +foo_canvas_expose (GtkWidget *widget, GdkEventExpose *event) +{ + FooCanvas *canvas; + + canvas = FOO_CANVAS (widget); + + if (!GTK_WIDGET_DRAWABLE (widget) || (event->window != canvas->layout.bin_window)) return FALSE; + +#ifdef VERBOSE + g_print ("Expose\n"); +#endif + /* If there are any outstanding items that need updating, do them now */ + if (canvas->idle_id) { + g_source_remove (canvas->idle_id); + canvas->idle_id = 0; + } + if (canvas->need_update) { + g_return_val_if_fail (!canvas->doing_update, FALSE); + + canvas->doing_update = TRUE; + foo_canvas_item_invoke_update (canvas->root, 0, 0, 0); + + g_return_val_if_fail (canvas->doing_update, FALSE); + + canvas->doing_update = FALSE; + + canvas->need_update = FALSE; + } + + /* Hmmm. Would like to queue antiexposes if the update marked + anything that is gonna get redrawn as invalid */ + + + g_signal_emit (G_OBJECT (canvas), canvas_signals[DRAW_BACKGROUND], 0, + event->area.x, event->area.y, + event->area.width, event->area.height); + + if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED) + (* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->draw) (canvas->root, + canvas->layout.bin_window, + event); + + + + /* Chain up to get exposes on child widgets */ + GTK_WIDGET_CLASS (canvas_parent_class)->expose_event (widget, event); + + return FALSE; +} + +static void +foo_canvas_draw_background (FooCanvas *canvas, + int x, int y, int width, int height) +{ + /* By default, we use the style background. */ + gdk_gc_set_foreground (canvas->pixmap_gc, + >K_WIDGET (canvas)->style->bg[GTK_STATE_NORMAL]); + gdk_draw_rectangle (canvas->layout.bin_window, + canvas->pixmap_gc, + TRUE, + x, y, + width, height); +} + +static void +do_update (FooCanvas *canvas) +{ + /* Cause the update if necessary */ + +update_again: + if (canvas->need_update) { + g_return_if_fail (!canvas->doing_update); + + canvas->doing_update = TRUE; + foo_canvas_item_invoke_update (canvas->root, 0, 0, 0); + + g_return_if_fail (canvas->doing_update); + + canvas->doing_update = FALSE; + + canvas->need_update = FALSE; + } + + /* Pick new current item */ + + while (canvas->need_repick) { + canvas->need_repick = FALSE; + pick_current_item (canvas, &canvas->pick_event); + } + + /* it is possible that during picking we emitted an event in which + the user then called some function which then requested update + of something. Without this we'd be left in a state where + need_update would have been left TRUE and the canvas would have + been left unpainted. */ + if (canvas->need_update) { + goto update_again; + } +} + +/* Idle handler for the canvas. It deals with pending updates and redraws. */ +static gint +idle_handler (gpointer data) +{ + FooCanvas *canvas; + + GDK_THREADS_ENTER (); + + canvas = FOO_CANVAS (data); + do_update (canvas); + + /* Reset idle id */ + canvas->idle_id = 0; + + GDK_THREADS_LEAVE (); + + return FALSE; +} + +/* Convenience function to add an idle handler to a canvas */ +static void +add_idle (FooCanvas *canvas) +{ + if (!canvas->idle_id) { + /* We let the update idle handler have higher priority + * than the redraw idle handler so the canvas state + * will be updated during the expose event. canvas in + * expose_event. + */ + canvas->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW - 20, + idle_handler, canvas, NULL); + } +} + +/** + * foo_canvas_root: + * @canvas: A canvas. + * + * Queries the root group of a canvas. + * + * Return value: The root group of the specified canvas. + **/ +FooCanvasGroup * +foo_canvas_root (FooCanvas *canvas) +{ + g_return_val_if_fail (FOO_IS_CANVAS (canvas), NULL); + + return FOO_CANVAS_GROUP (canvas->root); +} + + +/** + * foo_canvas_set_scroll_region: + * @canvas: A canvas. + * @x1: Leftmost limit of the scrolling region. + * @y1: Upper limit of the scrolling region. + * @x2: Rightmost limit of the scrolling region. + * @y2: Lower limit of the scrolling region. + * + * Sets the scrolling region of a canvas to the specified rectangle. The canvas + * will then be able to scroll only within this region. The view of the canvas + * is adjusted as appropriate to display as much of the new region as possible. + **/ +void +foo_canvas_set_scroll_region (FooCanvas *canvas, double x1, double y1, double x2, double y2) +{ + double wxofs, wyofs; + int xofs, yofs; + + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if ((canvas->scroll_x1 == x1) && (canvas->scroll_y1 == y1) && + (canvas->scroll_x2 == x2) && (canvas->scroll_y2 == y2)) { + return; + } + + /* + * Set the new scrolling region. If possible, do not move the visible contents of the + * canvas. + */ + + foo_canvas_c2w (canvas, + GTK_LAYOUT (canvas)->hadjustment->value + canvas->zoom_xofs, + GTK_LAYOUT (canvas)->vadjustment->value + canvas->zoom_yofs, + /*canvas->zoom_xofs, + canvas->zoom_yofs,*/ + &wxofs, &wyofs); + + canvas->scroll_x1 = x1; + canvas->scroll_y1 = y1; + canvas->scroll_x2 = x2; + canvas->scroll_y2 = y2; + + foo_canvas_w2c (canvas, wxofs, wyofs, &xofs, &yofs); + + scroll_to (canvas, xofs, yofs, TRUE); + + canvas->need_repick = TRUE; + + if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE; + foo_canvas_request_update (canvas); + } +} + + +/** + * foo_canvas_get_scroll_region: + * @canvas: A canvas. + * @x1: Leftmost limit of the scrolling region (return value). + * @y1: Upper limit of the scrolling region (return value). + * @x2: Rightmost limit of the scrolling region (return value). + * @y2: Lower limit of the scrolling region (return value). + * + * Queries the scrolling region of a canvas. + **/ +void +foo_canvas_get_scroll_region (FooCanvas *canvas, double *x1, double *y1, double *x2, double *y2) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if (x1) + *x1 = canvas->scroll_x1; + + if (y1) + *y1 = canvas->scroll_y1; + + if (x2) + *x2 = canvas->scroll_x2; + + if (y2) + *y2 = canvas->scroll_y2; +} + +void +foo_canvas_set_center_scroll_region (FooCanvas *canvas, + gboolean center_scroll_region) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + canvas->center_scroll_region = center_scroll_region != 0; + + scroll_to (canvas, + canvas->layout.hadjustment->value, + canvas->layout.vadjustment->value, TRUE); +} + + +/** + * foo_canvas_set_pixels_per_unit: + * @canvas: A canvas. + * @n: The number of pixels that correspond to one canvas unit. + * + * Sets the zooming factor of a canvas by specifying the number of pixels that + * correspond to one canvas unit. + **/ +void +foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n) +{ + GtkWidget *widget; + double cx, cy; + int x1, y1; + int center_x, center_y; + GdkWindow *window; + GdkWindowAttr attributes; + gint attributes_mask; + + g_return_if_fail (FOO_IS_CANVAS (canvas)); + g_return_if_fail (n > FOO_CANVAS_EPSILON); + + widget = GTK_WIDGET (canvas); + + center_x = widget->allocation.width / 2; + center_y = widget->allocation.height / 2; + + /* Find the coordinates of the screen center in units. */ + cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs; + cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs; + + /* Now calculate the new offset of the upper left corner. (round not truncate) */ + x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5; + y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5; + + canvas->pixels_per_unit = n; + + if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) { + canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE; + foo_canvas_request_update (canvas); + } + + /* Map a background None window over the bin_window to avoid + * scrolling the window scroll causing exposes. + */ + window = NULL; + if (GTK_WIDGET_MAPPED (widget)) { + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK; + + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + + window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, attributes_mask); + gdk_window_set_back_pixmap (window, NULL, FALSE); + gdk_window_set_user_data (window, widget); + + gdk_window_show (window); + } + + scroll_to (canvas, x1, y1, FALSE); + + /* If we created a an overlapping background None window, remove it how. + * + * TODO: We would like to temporarily set the bin_window background to + * None to avoid clearing the bin_window to the background, but gdk doesn't + * expose enought to let us do this, so we get a flash-effect here. At least + * it looks better than scroll + expose. + */ + if (window != NULL) { + gdk_window_hide (window); + gdk_window_set_user_data (window, NULL); + gdk_window_destroy (window); + } + + canvas->need_repick = TRUE; +} + +/** + * foo_canvas_scroll_to: + * @canvas: A canvas. + * @cx: Horizontal scrolling offset in canvas pixel units. + * @cy: Vertical scrolling offset in canvas pixel units. + * + * Makes a canvas scroll to the specified offsets, given in canvas pixel units. + * The canvas will adjust the view so that it is not outside the scrolling + * region. This function is typically not used, as it is better to hook + * scrollbars to the canvas layout's scrolling adjusments. + **/ +void +foo_canvas_scroll_to (FooCanvas *canvas, int cx, int cy) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + scroll_to (canvas, cx, cy, TRUE); +} + +/** + * foo_canvas_get_scroll_offsets: + * @canvas: A canvas. + * @cx: Horizontal scrolling offset (return value). + * @cy: Vertical scrolling offset (return value). + * + * Queries the scrolling offsets of a canvas. The values are returned in canvas + * pixel units. + **/ +void +foo_canvas_get_scroll_offsets (FooCanvas *canvas, int *cx, int *cy) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if (cx) + *cx = canvas->layout.hadjustment->value; + + if (cy) + *cy = canvas->layout.vadjustment->value; +} + +/** + * foo_canvas_update_now: + * @canvas: A canvas. + * + * Forces an immediate update and redraw of a canvas. If the canvas does not + * have any pending update or redraw requests, then no action is taken. This is + * typically only used by applications that need explicit control of when the + * display is updated, like games. It is not needed by normal applications. + */ +void +foo_canvas_update_now (FooCanvas *canvas) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if (!(canvas->need_update || canvas->need_redraw)) + return; + remove_idle (canvas); + do_update (canvas); +} + +/** + * foo_canvas_get_item_at: + * @canvas: A canvas. + * @x: X position in world coordinates. + * @y: Y position in world coordinates. + * + * Looks for the item that is under the specified position, which must be + * specified in world coordinates. + * + * Return value: The sought item, or NULL if no item is at the specified + * coordinates. + **/ +FooCanvasItem * +foo_canvas_get_item_at (FooCanvas *canvas, double x, double y) +{ + FooCanvasItem *item; + double dist; + int cx, cy; + + g_return_val_if_fail (FOO_IS_CANVAS (canvas), NULL); + + foo_canvas_w2c (canvas, x, y, &cx, &cy); + + dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item); + if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough) + return item; + else + return NULL; +} + +/* Queues an update of the canvas */ +static void +foo_canvas_request_update (FooCanvas *canvas) +{ + FOO_CANVAS_GET_CLASS (canvas)->request_update (canvas); +} + +static void +foo_canvas_request_update_real (FooCanvas *canvas) +{ + canvas->need_update = TRUE; + add_idle (canvas); +} + +/** + * foo_canvas_request_redraw: + * @canvas: A canvas. + * @x1: Leftmost coordinate of the rectangle to be redrawn. + * @y1: Upper coordinate of the rectangle to be redrawn. + * @x2: Rightmost coordinate of the rectangle to be redrawn, plus 1. + * @y2: Lower coordinate of the rectangle to be redrawn, plus 1. + * + * Convenience function that informs a canvas that the specified rectangle needs + * to be repainted. The rectangle includes @x1 and @y1, but not @x2 and @y2. + * To be used only by item implementations. + **/ +void +foo_canvas_request_redraw (FooCanvas *canvas, int x1, int y1, int x2, int y2) +{ + GdkRectangle bbox; + + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if (!GTK_WIDGET_DRAWABLE (canvas) || (x1 >= x2) || (y1 >= y2)) return; + + bbox.x = x1; + bbox.y = y1; + bbox.width = x2 - x1; + bbox.height = y2 - y1; + + gdk_window_invalidate_rect (canvas->layout.bin_window, + &bbox, FALSE); +} + +/** + * foo_canvas_w2c: + * @canvas: A canvas. + * @wx: World X coordinate. + * @wy: World Y coordinate. + * @cx: X pixel coordinate (return value). + * @cy: Y pixel coordinate (return value). + * + * Converts world coordinates into canvas pixel coordinates. + **/ +void +foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy) +{ + double zoom; + + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + zoom = canvas->pixels_per_unit; + + if (cx) + *cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5); + if (cy) + *cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5); +} + +/** + * foo_canvas_w2c: + * @canvas: A canvas. + * @world: rectangle in world coordinates. + * @canvas: rectangle in canvase coordinates. + * + * Converts rectangles in world coordinates into canvas pixel coordinates. + **/ +void +foo_canvas_w2c_rect_d (FooCanvas *canvas, + double *x1, double *y1, + double *x2, double *y2) +{ + foo_canvas_w2c_d (canvas, + *x1, *y1, + x1, y1); + foo_canvas_w2c_d (canvas, + *x2, *y2, + x2, y2); +} + + + +/** + * foo_canvas_w2c_d: + * @canvas: A canvas. + * @wx: World X coordinate. + * @wy: World Y coordinate. + * @cx: X pixel coordinate (return value). + * @cy: Y pixel coordinate (return value). + * + * Converts world coordinates into canvas pixel coordinates. This version + * returns coordinates in floating point coordinates, for greater precision. + **/ +void +foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy) +{ + double zoom; + + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + zoom = canvas->pixels_per_unit; + + if (cx) + *cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs; + if (cy) + *cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs; +} + + +/** + * foo_canvas_c2w: + * @canvas: A canvas. + * @cx: Canvas pixel X coordinate. + * @cy: Canvas pixel Y coordinate. + * @wx: X world coordinate (return value). + * @wy: Y world coordinate (return value). + * + * Converts canvas pixel coordinates to world coordinates. + **/ +void +foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy) +{ + double zoom; + + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + zoom = canvas->pixels_per_unit; + + if (wx) + *wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1; + if (wy) + *wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1; +} + + +/** + * foo_canvas_window_to_world: + * @canvas: A canvas. + * @winx: Window-relative X coordinate. + * @winy: Window-relative Y coordinate. + * @worldx: X world coordinate (return value). + * @worldy: Y world coordinate (return value). + * + * Converts window-relative coordinates into world coordinates. You can use + * this when you need to convert mouse coordinates into world coordinates, for + * example. + * Window coordinates are really the same as canvas coordinates now, but this + * function is here for backwards compatibility reasons. + **/ +void +foo_canvas_window_to_world (FooCanvas *canvas, double winx, double winy, + double *worldx, double *worldy) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if (worldx) + *worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs) + / canvas->pixels_per_unit); + + if (worldy) + *worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs) + / canvas->pixels_per_unit); +} + + +/** + * foo_canvas_world_to_window: + * @canvas: A canvas. + * @worldx: World X coordinate. + * @worldy: World Y coordinate. + * @winx: X window-relative coordinate. + * @winy: Y window-relative coordinate. + * + * Converts world coordinates into window-relative coordinates. + * Window coordinates are really the same as canvas coordinates now, but this + * function is here for backwards compatibility reasons. + **/ +void +foo_canvas_world_to_window (FooCanvas *canvas, double worldx, double worldy, + double *winx, double *winy) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + + if (winx) + *winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs; + + if (winy) + *winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs; +} + + + +/** + * foo_canvas_get_color: + * @canvas: A canvas. + * @spec: X color specification, or NULL for "transparent". + * @color: Returns the allocated color. + * + * Allocates a color based on the specified X color specification. As a + * convenience to item implementations, it returns TRUE if the color was + * allocated, or FALSE if the specification was NULL. A NULL color + * specification is considered as "transparent" by the canvas. + * + * Return value: TRUE if @spec is non-NULL and the color is allocated. If @spec + * is NULL, then returns FALSE. + **/ +int +foo_canvas_get_color (FooCanvas *canvas, const char *spec, GdkColor *color) +{ + GdkColormap *colormap; + + g_return_val_if_fail (FOO_IS_CANVAS (canvas), FALSE); + g_return_val_if_fail (color != NULL, FALSE); + + if (!spec) { + color->pixel = 0; + color->red = 0; + color->green = 0; + color->blue = 0; + return FALSE; + } + + gdk_color_parse (spec, color); + + colormap = gtk_widget_get_colormap (GTK_WIDGET (canvas)); + + gdk_rgb_find_color (colormap, color); + + return TRUE; +} + +/** + * foo_canvas_get_color_pixel: + * @canvas: A canvas. + * @rgba: RGBA color specification. + * + * Allocates a color from the RGBA value passed into this function. The alpha + * opacity value is discarded, since normal X colors do not support it. + * + * Return value: Allocated pixel value corresponding to the specified color. + **/ +gulong +foo_canvas_get_color_pixel (FooCanvas *canvas, guint rgba) +{ + GdkColormap *colormap; + GdkColor color; + + g_return_val_if_fail (FOO_IS_CANVAS (canvas), 0); + + color.red = ((rgba & 0xff000000) >> 16) + ((rgba & 0xff000000) >> 24); + color.green = ((rgba & 0x00ff0000) >> 8) + ((rgba & 0x00ff0000) >> 16); + color.blue = (rgba & 0x0000ff00) + ((rgba & 0x0000ff00) >> 8); + color.pixel = 0; + + colormap = gtk_widget_get_colormap (GTK_WIDGET (canvas)); + + gdk_rgb_find_color (colormap, &color); + + return color.pixel; +} + + +/* FIXME: This function is not useful anymore */ +/** + * foo_canvas_set_stipple_origin: + * @canvas: A canvas. + * @gc: GC on which to set the stipple origin. + * + * Sets the stipple origin of the specified GC as is appropriate for the canvas, + * so that it will be aligned with other stipple patterns used by canvas items. + * This is typically only needed by item implementations. + **/ +void +foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc) +{ + g_return_if_fail (FOO_IS_CANVAS (canvas)); + g_return_if_fail (GDK_IS_GC (gc)); + + gdk_gc_set_ts_origin (gc, 0, 0); +} + +static gboolean +boolean_handled_accumulator (GSignalInvocationHint *ihint, + GValue *return_accu, + const GValue *handler_return, + gpointer dummy) +{ + gboolean continue_emission; + gboolean signal_handled; + + signal_handled = g_value_get_boolean (handler_return); + g_value_set_boolean (return_accu, signal_handled); + continue_emission = !signal_handled; + + return continue_emission; +} + +static guint +foo_canvas_item_accessible_add_focus_handler (AtkComponent *component, + AtkFocusHandler handler) +{ + GSignalMatchType match_type; + guint signal_id; + + match_type = G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC; + signal_id = g_signal_lookup ("focus-event", ATK_TYPE_OBJECT); + + if (!g_signal_handler_find (component, match_type, signal_id, 0, NULL, + (gpointer) handler, NULL)) { + return g_signal_connect_closure_by_id (component, + signal_id, 0, + g_cclosure_new ( + G_CALLBACK (handler), NULL, + (GClosureNotify) NULL), + FALSE); + } + return 0; +} + +static void +foo_canvas_item_accessible_get_item_extents (FooCanvasItem *item, + GdkRectangle *rect) +{ + double bx1, bx2, by1, by2; + gint scroll_x, scroll_y; + gint x1, x2, y1, y2; + + foo_canvas_item_get_bounds (item, &bx1, &by1, &bx2, &by2); + foo_canvas_w2c_rect_d (item->canvas, &bx1, &by1, &bx2, &by2); + foo_canvas_get_scroll_offsets (item->canvas, &scroll_x, &scroll_y); + x1 = floor (bx1); + y1 = floor (by1); + x2 = ceil (bx2); + y2 = ceil (by2); + rect->x = x1 - scroll_x; + rect->y = y1 - scroll_y; + rect->width = x2 - x1; + rect->height = y2 - y1; +} + +static gboolean +foo_canvas_item_accessible_is_item_in_window (FooCanvasItem *item, + GdkRectangle *rect) +{ + GtkWidget *widget; + gboolean retval; + + widget = GTK_WIDGET (item->canvas); + if (widget->window) { + int window_width, window_height; + + gdk_window_get_geometry (widget->window, NULL, NULL, + &window_width, &window_height, NULL); + /* + * Check whether rectangles intersect + */ + if (rect->x + rect->width < 0 || + rect->y + rect->height < 0 || + rect->x > window_width || + rect->y > window_height) { + retval = FALSE; + } else { + retval = TRUE; + } + } else { + retval = FALSE; + } + return retval; +} + + +static void +foo_canvas_item_accessible_get_extents (AtkComponent *component, + gint *x, + gint *y, + gint *width, + gint *height, + AtkCoordType coord_type) +{ + AtkGObjectAccessible *atk_gobj; + GObject *obj; + FooCanvasItem *item; + gint window_x, window_y; + gint toplevel_x, toplevel_y; + GdkRectangle rect; + GdkWindow *window; + GtkWidget *canvas; + + atk_gobj = ATK_GOBJECT_ACCESSIBLE (component); + obj = atk_gobject_accessible_get_object (atk_gobj); + + if (obj == NULL) { + /* item is defunct */ + return; + } + + /* Get the CanvasItem */ + item = FOO_CANVAS_ITEM (obj); + + /* If this item has no parent canvas, something's broken */ + g_return_if_fail (GTK_IS_WIDGET (item->canvas)); + + foo_canvas_item_accessible_get_item_extents (item, &rect); + *width = rect.width; + *height = rect.height; + if (!foo_canvas_item_accessible_is_item_in_window (item, &rect)) { + *x = G_MININT; + *y = G_MININT; + return; + } + + canvas = GTK_WIDGET (item->canvas); + window = gtk_widget_get_parent_window (canvas); + gdk_window_get_origin (window, &window_x, &window_y); + *x = rect.x + window_x; + *y = rect.y + window_y; + if (coord_type == ATK_XY_WINDOW) { + window = gdk_window_get_toplevel (canvas->window); + gdk_window_get_origin (window, &toplevel_x, &toplevel_y); + *x -= toplevel_x; + *y -= toplevel_y; + } + return; +} + +static gint +foo_canvas_item_accessible_get_mdi_zorder (AtkComponent *component) +{ + AtkGObjectAccessible *atk_gobj; + GObject *g_obj; + FooCanvasItem *item; + + atk_gobj = ATK_GOBJECT_ACCESSIBLE (component); + g_obj = atk_gobject_accessible_get_object (atk_gobj); + if (g_obj == NULL) { + /* Object is defunct */ + return -1; + } + + item = FOO_CANVAS_ITEM (g_obj); + if (item->parent) { + return g_list_index (FOO_CANVAS_GROUP (item->parent)->item_list, item); + } else { + g_return_val_if_fail (item->canvas->root == item, -1); + return 0; + } +} + +static gboolean +foo_canvas_item_accessible_grab_focus (AtkComponent *component) +{ + AtkGObjectAccessible *atk_gobj; + GObject *obj; + FooCanvasItem *item; + GtkWidget *toplevel; + + atk_gobj = ATK_GOBJECT_ACCESSIBLE (component); + obj = atk_gobject_accessible_get_object (atk_gobj); + + item = FOO_CANVAS_ITEM (obj); + if (item == NULL) { + /* item is defunct */ + return FALSE; + } + + foo_canvas_item_grab_focus (item); + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (item->canvas)); + if (GTK_WIDGET_TOPLEVEL (toplevel)) { + gtk_window_present (GTK_WINDOW (toplevel)); + } + + return TRUE; +} + +static void +foo_canvas_item_accessible_remove_focus_handler (AtkComponent *component, + guint handler_id) +{ + g_signal_handler_disconnect (component, handler_id); +} + +static void +foo_canvas_item_accessible_component_interface_init (AtkComponentIface *iface) +{ + g_return_if_fail (iface != NULL); + + iface->add_focus_handler = foo_canvas_item_accessible_add_focus_handler; + iface->get_extents = foo_canvas_item_accessible_get_extents; + iface->get_mdi_zorder = foo_canvas_item_accessible_get_mdi_zorder; + iface->grab_focus = foo_canvas_item_accessible_grab_focus; + iface->remove_focus_handler = foo_canvas_item_accessible_remove_focus_handler; +} + +static gboolean +foo_canvas_item_accessible_is_item_on_screen (FooCanvasItem *item) +{ + GdkRectangle rect; + + foo_canvas_item_accessible_get_item_extents (item, &rect); + return foo_canvas_item_accessible_is_item_in_window (item, &rect); +} + +static void +foo_canvas_item_accessible_initialize (AtkObject *obj, gpointer data) +{ + if (ATK_OBJECT_CLASS (accessible_item_parent_class)->initialize != NULL) + ATK_OBJECT_CLASS (accessible_item_parent_class)->initialize (obj, data); + g_object_set_data (G_OBJECT (obj), "atk-component-layer", + GINT_TO_POINTER (ATK_LAYER_MDI)); +} + +static AtkStateSet* +foo_canvas_item_accessible_ref_state_set (AtkObject *accessible) +{ + AtkGObjectAccessible *atk_gobj; + GObject *obj; + FooCanvasItem *item; + AtkStateSet *state_set; + + state_set = ATK_OBJECT_CLASS (accessible_item_parent_class)->ref_state_set (accessible); + atk_gobj = ATK_GOBJECT_ACCESSIBLE (accessible); + obj = atk_gobject_accessible_get_object (atk_gobj); + + item = FOO_CANVAS_ITEM (obj); + if (item == NULL) { + atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT); + } else { + if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE) { + atk_state_set_add_state (state_set, ATK_STATE_VISIBLE); + + if (foo_canvas_item_accessible_is_item_on_screen (item)) { + atk_state_set_add_state (state_set, ATK_STATE_SHOWING); + } + } + if (GTK_WIDGET_CAN_FOCUS (GTK_WIDGET (item->canvas))) { + atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE); + + if (item->canvas->focused_item == item) { + atk_state_set_add_state (state_set, ATK_STATE_FOCUSED); + } + } + } + + return state_set; +} + +static void +foo_canvas_item_accessible_class_init (AtkObjectClass *klass) +{ + accessible_item_parent_class = g_type_class_peek_parent (klass); + + klass->initialize = foo_canvas_item_accessible_initialize; + klass->ref_state_set = foo_canvas_item_accessible_ref_state_set; +} + +static GType +foo_canvas_item_accessible_get_type (void) +{ + static GType type = 0; + + if (!type) { + static const GInterfaceInfo atk_component_info = { + (GInterfaceInitFunc) foo_canvas_item_accessible_component_interface_init, + (GInterfaceFinalizeFunc) NULL, + NULL + }; + AtkObjectFactory *factory; + GType parent_atk_type; + GTypeQuery query; + GTypeInfo tinfo = { 0 }; + + factory = atk_registry_get_factory (atk_get_default_registry(), + GTK_TYPE_OBJECT); + if (!factory) { + return G_TYPE_INVALID; + } + parent_atk_type = atk_object_factory_get_accessible_type (factory); + if (!parent_atk_type) { + return G_TYPE_INVALID; + } + g_type_query (parent_atk_type, &query); + tinfo.class_init = (GClassInitFunc) foo_canvas_item_accessible_class_init; + tinfo.class_size = query.class_size; + tinfo.instance_size = query.instance_size; + type = g_type_register_static (parent_atk_type, + "FooCanvasItemAccessibility", + &tinfo, 0); + + g_type_add_interface_static (type, ATK_TYPE_COMPONENT, + &atk_component_info); + + } + + return type; +} + +static AtkObject * +foo_canvas_item_accessible_create (GObject *for_object) +{ + GType type; + AtkObject *accessible; + FooCanvasItem *item; + + item = FOO_CANVAS_ITEM (for_object); + g_return_val_if_fail (item != NULL, NULL); + + type = foo_canvas_item_accessible_get_type (); + if (type == G_TYPE_INVALID) { + return atk_no_op_object_new (for_object); + } + + accessible = g_object_new (type, NULL); + atk_object_initialize (accessible, for_object); + return accessible; +} + +static GType +foo_canvas_item_accessible_factory_get_accessible_type (void) +{ + return foo_canvas_item_accessible_get_type (); +} + +static AtkObject* +foo_canvas_item_accessible_factory_create_accessible (GObject *obj) +{ + AtkObject *accessible; + + g_return_val_if_fail (G_IS_OBJECT (obj), NULL); + + accessible = foo_canvas_item_accessible_create (obj); + + return accessible; +} + +static void +foo_canvas_item_accessible_factory_class_init (AtkObjectFactoryClass *klass) +{ + klass->create_accessible = foo_canvas_item_accessible_factory_create_accessible; + klass->get_accessible_type = foo_canvas_item_accessible_factory_get_accessible_type; +} + +static GType +foo_canvas_item_accessible_factory_get_type (void) +{ + static GType type = 0; + + if (!type) { + static const GTypeInfo tinfo = { + sizeof (AtkObjectFactoryClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) foo_canvas_item_accessible_factory_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (AtkObjectFactory), + 0, /* n_preallocs */ + NULL + }; + type = g_type_register_static (ATK_TYPE_OBJECT_FACTORY, + "FooCanvasItemAccessibilityFactory", + &tinfo, 0); + } + + return type; +} + +/* Class initialization function for FooCanvasItemClass */ +static void +foo_canvas_item_class_init (FooCanvasItemClass *class) +{ + GObjectClass *gobject_class; + + gobject_class = (GObjectClass *) class; + + item_parent_class = gtk_type_class (gtk_object_get_type ()); + + gobject_class->set_property = foo_canvas_item_set_property; + gobject_class->get_property = foo_canvas_item_get_property; + + g_object_class_install_property + (gobject_class, ITEM_PROP_PARENT, + g_param_spec_object ("parent", NULL, NULL, + FOO_TYPE_CANVAS_ITEM, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, ITEM_PROP_VISIBLE, + g_param_spec_boolean ("visible", NULL, NULL, + TRUE, + GSF_PARAM_STATIC | G_PARAM_READWRITE)); + + item_signals[ITEM_EVENT] = + g_signal_new ("event", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FooCanvasItemClass, event), + boolean_handled_accumulator, NULL, + foo_canvas_marshal_BOOLEAN__BOXED, + G_TYPE_BOOLEAN, 1, + GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); + + gobject_class->dispose = foo_canvas_item_dispose; + + class->realize = foo_canvas_item_realize; + class->unrealize = foo_canvas_item_unrealize; + class->map = foo_canvas_item_map; + class->unmap = foo_canvas_item_unmap; + class->update = foo_canvas_item_update; + + atk_registry_set_factory_type (atk_get_default_registry (), + FOO_TYPE_CANVAS_ITEM, + foo_canvas_item_accessible_factory_get_type ()); +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas.h new file mode 100644 index 0000000000..73a899b7eb --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/foo-canvas.h @@ -0,0 +1,532 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ +/* FooCanvas widget - Tk-like canvas widget for Gnome + * + * FooCanvas is basically a port of the Tk toolkit's most excellent canvas + * widget. Tk is copyrighted by the Regents of the University of California, + * Sun Microsystems, and other parties. + * + * + * Authors: Federico Mena + * Raph Levien + */ + +#ifndef FOO_CANVAS_H +#define FOO_CANVAS_H + +#include +#include +#include + +G_BEGIN_DECLS + + +/* "Small" value used by canvas stuff */ +#define FOO_CANVAS_EPSILON 1e-10 + + +/* Macros for building colors that fit in a 32-bit integer. The values are in + * [0, 255]. + */ + +#define FOO_CANVAS_COLOR(r, g, b) ((((int) (r) & 0xff) << 24) \ + | (((int) (g) & 0xff) << 16) \ + | (((int) (b) & 0xff) << 8) \ + | 0xff) + +#define FOO_CANVAS_COLOR_A(r, g, b, a) ((((int) (r) & 0xff) << 24) \ + | (((int) (g) & 0xff) << 16) \ + | (((int) (b) & 0xff) << 8) \ + | ((int) (a) & 0xff)) + + +typedef struct _FooCanvas FooCanvas; +typedef struct _FooCanvasClass FooCanvasClass; +typedef struct _FooCanvasItem FooCanvasItem; +typedef struct _FooCanvasItemClass FooCanvasItemClass; +typedef struct _FooCanvasGroup FooCanvasGroup; +typedef struct _FooCanvasGroupClass FooCanvasGroupClass; + + +/* FooCanvasItem - base item class for canvas items + * + * All canvas items are derived from FooCanvasItem. The only information a + * FooCanvasItem contains is its parent canvas, its parent canvas item group, + * and its bounding box in world coordinates. + * + * Items inside a canvas are organized in a tree of FooCanvasItemGroup nodes + * and FooCanvasItem leaves. Each canvas has a single root group, which can + * be obtained with the foo_canvas_get_root() function. + * + * The abstract FooCanvasItem class does not have any configurable or + * queryable attributes. + */ + +/* Object flags for items */ +enum { + FOO_CANVAS_ITEM_REALIZED = 1 << 4, + FOO_CANVAS_ITEM_MAPPED = 1 << 5, + FOO_CANVAS_ITEM_ALWAYS_REDRAW = 1 << 6, + FOO_CANVAS_ITEM_VISIBLE = 1 << 7, + FOO_CANVAS_ITEM_NEED_UPDATE = 1 << 8, + FOO_CANVAS_ITEM_NEED_DEEP_UPDATE = 1 << 9 +}; + +/* Update flags for items */ +enum { + FOO_CANVAS_UPDATE_REQUESTED = 1 << 0, + FOO_CANVAS_UPDATE_DEEP = 1 << 1 +}; + +#define FOO_TYPE_CANVAS_ITEM (foo_canvas_item_get_type ()) +#define FOO_CANVAS_ITEM(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem)) +#define FOO_CANVAS_ITEM_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass)) +#define FOO_IS_CANVAS_ITEM(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_ITEM)) +#define FOO_IS_CANVAS_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_ITEM)) +#define FOO_CANVAS_ITEM_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass)) + + +struct _FooCanvasItem { + GtkObject object; + + /* Parent canvas for this item */ + FooCanvas *canvas; + + /* Parent canvas group for this item (a FooCanvasGroup) */ + FooCanvasItem *parent; + + /* Bounding box for this item (in canvas coordinates) */ + double x1, y1, x2, y2; +}; + +struct _FooCanvasItemClass { + GtkObjectClass parent_class; + + /* Tell the item to update itself. The flags are from the update flags + * defined above. The item should update its internal state from its + * queued state, and recompute and request its repaint area. The + * update method also recomputes the bounding box of the item. + */ + void (* update) (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags); + + /* Realize an item -- create GCs, etc. */ + void (* realize) (FooCanvasItem *item); + + /* Unrealize an item */ + void (* unrealize) (FooCanvasItem *item); + + /* Map an item - normally only need by items with their own GdkWindows */ + void (* map) (FooCanvasItem *item); + + /* Unmap an item */ + void (* unmap) (FooCanvasItem *item); + + /* Draw an item of this type. (x, y) are the upper-left canvas pixel + * coordinates of the drawable, a temporary pixmap, where things get + * drawn. (width, height) are the dimensions of the drawable. + */ + void (* draw) (FooCanvasItem *item, GdkDrawable *drawable, GdkEventExpose *expose); + + /* Calculate the distance from an item to the specified point. It also + * returns a canvas item which is the item itself in the case of the + * object being an actual leaf item, or a child in case of the object + * being a canvas group. (cx, cy) are the canvas pixel coordinates that + * correspond to the item-relative coordinates (x, y). + */ + double (* point) (FooCanvasItem *item, double x, double y, int cx, int cy, + FooCanvasItem **actual_item); + + void (* translate) (FooCanvasItem *item, double dx, double dy); + + /* Fetch the item's bounding box (need not be exactly tight). This + * should be in item-relative coordinates. + */ + void (* bounds) (FooCanvasItem *item, double *x1, double *y1, double *x2, double *y2); + + /* Signal: an event ocurred for an item of this type. The (x, y) + * coordinates are in the canvas world coordinate system. + */ + gboolean (* event) (FooCanvasItem *item, GdkEvent *event); + + /* Reserved for future expansion */ + gpointer spare_vmethods [4]; +}; + + +/* Standard Gtk function */ +GType foo_canvas_item_get_type (void) G_GNUC_CONST; + +/* Create a canvas item using the standard Gtk argument mechanism. The item is + * automatically inserted at the top of the specified canvas group. The last + * argument must be a NULL pointer. + */ +FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type, + const gchar *first_arg_name, ...); + +/* Constructors for use in derived classes and language wrappers */ +void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent, + const gchar *first_arg_name, va_list args); + +/* Configure an item using the standard Gtk argument mechanism. The last + * argument must be a NULL pointer. + */ +void foo_canvas_item_set (FooCanvasItem *item, const gchar *first_arg_name, ...); + +/* Used only for language wrappers and the like */ +void foo_canvas_item_set_valist (FooCanvasItem *item, + const gchar *first_arg_name, va_list args); + +/* Move an item by the specified amount */ +void foo_canvas_item_move (FooCanvasItem *item, double dx, double dy); + +/* Raise an item in the z-order of its parent group by the specified number of + * positions. + */ +void foo_canvas_item_raise (FooCanvasItem *item, int positions); + +/* Lower an item in the z-order of its parent group by the specified number of + * positions. + */ +void foo_canvas_item_lower (FooCanvasItem *item, int positions); + +/* Raise an item to the top of its parent group's z-order. */ +void foo_canvas_item_raise_to_top (FooCanvasItem *item); + +/* Lower an item to the bottom of its parent group's z-order */ +void foo_canvas_item_lower_to_bottom (FooCanvasItem *item); + +/* Send an item behind another item */ +void foo_canvas_item_send_behind (FooCanvasItem *item, + FooCanvasItem *behind_item); + + +/* Show an item (make it visible). If the item is already shown, it has no + * effect. + */ +void foo_canvas_item_show (FooCanvasItem *item); + +/* Hide an item (make it invisible). If the item is already invisible, it has + * no effect. + */ +void foo_canvas_item_hide (FooCanvasItem *item); + +/* Grab the mouse for the specified item. Only the events in event_mask will be + * reported. If cursor is non-NULL, it will be used during the duration of the + * grab. Time is a proper X event time parameter. Returns the same values as + * XGrabPointer(). + */ +int foo_canvas_item_grab (FooCanvasItem *item, unsigned int event_mask, + GdkCursor *cursor, guint32 etime); + +/* Ungrabs the mouse -- the specified item must be the same that was passed to + * foo_canvas_item_grab(). Time is a proper X event time parameter. + */ +void foo_canvas_item_ungrab (FooCanvasItem *item, guint32 etime); + +/* These functions convert from a coordinate system to another. "w" is world + * coordinates and "i" is item coordinates. + */ +void foo_canvas_item_w2i (FooCanvasItem *item, double *x, double *y); +void foo_canvas_item_i2w (FooCanvasItem *item, double *x, double *y); + +/* Remove the item from its parent group and make the new group its parent. The + * item will be put on top of all the items in the new group. The item's + * coordinates relative to its new parent to *not* change -- this means that the + * item could potentially move on the screen. + * + * The item and the group must be in the same canvas. An item cannot be + * reparented to a group that is the item itself or that is an inferior of the + * item. + */ +void foo_canvas_item_reparent (FooCanvasItem *item, FooCanvasGroup *new_group); + +/* Used to send all of the keystroke events to a specific item as well as + * GDK_FOCUS_CHANGE events. + */ +void foo_canvas_item_grab_focus (FooCanvasItem *item); + +/* Fetch the bounding box of the item. The bounding box may not be exactly + * tight, but the canvas items will do the best they can. The returned bounding + * box is in the coordinate system of the item's parent. + */ +void foo_canvas_item_get_bounds (FooCanvasItem *item, + double *x1, double *y1, double *x2, double *y2); + +/* Request that the update method eventually get called. This should be used + * only by item implementations. + */ +void foo_canvas_item_request_update (FooCanvasItem *item); + +/* Request a redraw of the bounding box of the canvas item */ +void foo_canvas_item_request_redraw (FooCanvasItem *item); + +/* FooCanvasGroup - a group of canvas items + * + * A group is a node in the hierarchical tree of groups/items inside a canvas. + * Groups serve to give a logical structure to the items. + * + * Consider a circuit editor application that uses the canvas for its schematic + * display. Hierarchically, there would be canvas groups that contain all the + * components needed for an "adder", for example -- this includes some logic + * gates as well as wires. You can move stuff around in a convenient way by + * doing a foo_canvas_item_move() of the hierarchical groups -- to move an + * adder, simply move the group that represents the adder. + * + * The following arguments are available: + * + * name type read/write description + * -------------------------------------------------------------------------------- + * x double RW X coordinate of group's origin + * y double RW Y coordinate of group's origin + */ + + +#define FOO_TYPE_CANVAS_GROUP (foo_canvas_group_get_type ()) +#define FOO_CANVAS_GROUP(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_GROUP, FooCanvasGroup)) +#define FOO_CANVAS_GROUP_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_GROUP, FooCanvasGroupClass)) +#define FOO_IS_CANVAS_GROUP(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS_GROUP)) +#define FOO_IS_CANVAS_GROUP_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS_GROUP)) +#define FOO_CANVAS_GROUP_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS_GROUP, FooCanvasGroupClass)) + + +struct _FooCanvasGroup { + FooCanvasItem item; + + double xpos, ypos; + + /* Children of the group */ + GList *item_list; + GList *item_list_end; +}; + +struct _FooCanvasGroupClass { + FooCanvasItemClass parent_class; +}; + + +/* Standard Gtk function */ +GType foo_canvas_group_get_type (void) G_GNUC_CONST; + + +/*** FooCanvas ***/ + + +#define FOO_TYPE_CANVAS (foo_canvas_get_type ()) +#define FOO_CANVAS(obj) (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS, FooCanvas)) +#define FOO_CANVAS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS, FooCanvasClass)) +#define FOO_IS_CANVAS(obj) (GTK_CHECK_TYPE ((obj), FOO_TYPE_CANVAS)) +#define FOO_IS_CANVAS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS)) +#define FOO_CANVAS_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS, FooCanvasClass)) + + +struct _FooCanvas { + GtkLayout layout; + + /* Root canvas group */ + FooCanvasItem *root; + + /* The item containing the mouse pointer, or NULL if none */ + FooCanvasItem *current_item; + + /* Item that is about to become current (used to track deletions and such) */ + FooCanvasItem *new_current_item; + + /* Item that holds a pointer grab, or NULL if none */ + FooCanvasItem *grabbed_item; + + /* If non-NULL, the currently focused item */ + FooCanvasItem *focused_item; + + /* GC for temporary draw pixmap */ + GdkGC *pixmap_gc; + + /* Event on which selection of current item is based */ + GdkEvent pick_event; + + /* Scrolling region */ + double scroll_x1, scroll_y1; + double scroll_x2, scroll_y2; + + /* Scaling factor to be used for display */ + double pixels_per_unit; + + /* Idle handler ID */ + guint idle_id; + + /* Signal handler ID for destruction of the root item */ + guint root_destroy_id; + + /* Internal pixel offsets when zoomed out */ + int zoom_xofs, zoom_yofs; + + /* Last known modifier state, for deferred repick when a button is down */ + int state; + + /* Event mask specified when grabbing an item */ + guint grabbed_event_mask; + + /* Tolerance distance for picking items */ + int close_enough; + + /* Whether the canvas should center the canvas in the middle of + * the window if the scroll region is smaller than the window */ + unsigned int center_scroll_region : 1; + + /* Whether items need update at next idle loop iteration */ + unsigned int need_update : 1; + + /* Are we in the midst of an update */ + unsigned int doing_update : 1; + + /* Whether the canvas needs redrawing at the next idle loop iteration */ + unsigned int need_redraw : 1; + + /* Whether current item will be repicked at next idle loop iteration */ + unsigned int need_repick : 1; + + /* For use by internal pick_current_item() function */ + unsigned int left_grabbed_item : 1; + + /* For use by internal pick_current_item() function */ + unsigned int in_repick : 1; +}; + +struct _FooCanvasClass { + GtkLayoutClass parent_class; + + /* Draw the background for the area given. + */ + void (* draw_background) (FooCanvas *canvas, + int x, int y, int width, int height); + + /* Private Virtual methods for groping the canvas inside bonobo */ + void (* request_update) (FooCanvas *canvas); + + /* Reserved for future expansion */ + gpointer spare_vmethods [4]; +}; + + +/* Standard Gtk function */ +GType foo_canvas_get_type (void) G_GNUC_CONST; + +/* Creates a new canvas. You should check that the canvas is created with the + * proper visual and colormap. Any visual will do unless you intend to insert + * gdk_imlib images into it, in which case you should use the gdk_imlib visual. + * + * You should call foo_canvas_set_scroll_region() soon after calling this + * function to set the desired scrolling limits for the canvas. + */ +GtkWidget *foo_canvas_new (void); + +/* Returns the root canvas item group of the canvas */ +FooCanvasGroup *foo_canvas_root (FooCanvas *canvas); + +/* Sets the limits of the scrolling region, in world coordinates */ +void foo_canvas_set_scroll_region (FooCanvas *canvas, + double x1, double y1, double x2, double y2); + +/* Gets the limits of the scrolling region, in world coordinates */ +void foo_canvas_get_scroll_region (FooCanvas *canvas, + double *x1, double *y1, double *x2, double *y2); + +/* Sets the number of pixels that correspond to one unit in world coordinates */ +void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n); + +/* Wether the canvas centers the scroll region if it is smaller than the window */ +void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region); + +/* Scrolls the canvas to the specified offsets, given in canvas pixel coordinates */ +void foo_canvas_scroll_to (FooCanvas *canvas, int cx, int cy); + +/* Returns the scroll offsets of the canvas in canvas pixel coordinates. You + * can specify NULL for any of the values, in which case that value will not be + * queried. + */ +void foo_canvas_get_scroll_offsets (FooCanvas *canvas, int *cx, int *cy); + +/* Requests that the canvas be repainted immediately instead of in the idle + * loop. + */ +void foo_canvas_update_now (FooCanvas *canvas); + +/* Returns the item that is at the specified position in world coordinates, or + * NULL if no item is there. + */ +FooCanvasItem *foo_canvas_get_item_at (FooCanvas *canvas, double x, double y); + +/* For use only by item type implementations. Request that the canvas + * eventually redraw the specified region, specified in canvas pixel + * coordinates. The region contains (x1, y1) but not (x2, y2). + */ +void foo_canvas_request_redraw (FooCanvas *canvas, int x1, int y1, int x2, int y2); + +/* These functions convert from a coordinate system to another. "w" is world + * coordinates, "c" is canvas pixel coordinates (pixel coordinates that are + * (0,0) for the upper-left scrolling limit and something else for the + * lower-left scrolling limit). + */ +void foo_canvas_w2c_rect_d (FooCanvas *canvas, + double *x1, double *y1, + double *x2, double *y2); +void foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy); +void foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy); +void foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy); + +/* This function takes in coordinates relative to the GTK_LAYOUT + * (canvas)->bin_window and converts them to world coordinates. + * These days canvas coordinates and window coordinates are the same, but + * these are left for backwards compat reasons. + */ +void foo_canvas_window_to_world (FooCanvas *canvas, + double winx, double winy, double *worldx, double *worldy); + +/* This is the inverse of foo_canvas_window_to_world() */ +void foo_canvas_world_to_window (FooCanvas *canvas, + double worldx, double worldy, double *winx, double *winy); + +/* Takes a string specification for a color and allocates it into the specified + * GdkColor. If the string is null, then it returns FALSE. Otherwise, it + * returns TRUE. + */ +int foo_canvas_get_color (FooCanvas *canvas, const char *spec, GdkColor *color); + +/* Allocates a color from the RGB value passed into this function. */ +gulong foo_canvas_get_color_pixel (FooCanvas *canvas, + guint rgba); + + +/* Sets the stipple origin of the specified gc so that it will be aligned with + * all the stipples used in the specified canvas. This is intended for use only + * by canvas item implementations. + */ +void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc); + +G_END_DECLS + +#endif diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/libfoocanvas.h b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/libfoocanvas.h new file mode 100644 index 0000000000..68dab634e9 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/libfoocanvas.h @@ -0,0 +1,47 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +/* + * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ + +#ifndef LIBFOOCANVAS_H +#define LIBFOOCANVAS_H + +#include +#include +#include +#include +#include +#include +#include +#include + +G_BEGIN_DECLS + +GType foo_canvas_points_get_type (void); +#define FOO_TYPE_CANVAS_POINTS foo_canvas_points_get_type() + +G_END_DECLS + +#endif /* LIBFOOCANVAS_H */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/libfoocanvastypes.c b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/libfoocanvastypes.c new file mode 100644 index 0000000000..cfa4fabe35 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/foocanvas/libfoocanvastypes.c @@ -0,0 +1,47 @@ +/* File import from foocanvas to libgoffice by import-foocanvas. Do not edit. */ + +#include +#include +#include +/* + * Copyright (C) 1999, 2000 Red Hat, Inc. + * All rights reserved. + * + * This file is part of the Gnome Library. + * + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The Gnome Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If + * not, write to the Free Software Foundation, Inc., 51 Franklin St, + * Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + @NOTATION@ + */ + +#include + +#include + +GType +foo_canvas_points_get_type (void) +{ + static GType type_canvas_points = 0; + + if (!type_canvas_points) + type_canvas_points = g_boxed_type_register_static + ("FooCanvasPoints", + (GBoxedCopyFunc) foo_canvas_points_ref, + (GBoxedFreeFunc) foo_canvas_points_unref); + + return type_canvas_points; +} diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/COPYING b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/COPYING new file mode 100644 index 0000000000..1573583b6c --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/COPYING @@ -0,0 +1,45 @@ +PCRE LICENCE +------------ + +PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + +Release 5 of PCRE is distributed under the terms of the "BSD" licence, as +specified below. The documentation for PCRE, supplied in the "doc" +directory, is distributed under the same terms as the software itself. + +Written by: Philip Hazel + +University of Cambridge Computing Service, +Cambridge, England. Phone: +44 1223 334714. + +Copyright (c) 1997-2004 University of Cambridge +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +End diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/Makefile.am b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/Makefile.am new file mode 100644 index 0000000000..5f8288d09e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/Makefile.am @@ -0,0 +1,17 @@ +noinst_LTLIBRARIES = libpcre.la +libpcre_la_SOURCES = maketables.c get.c study.c pcre.c pcreposix.c +EXTRA_DIST = COPYING + +libpcre_a_ladir = $(includedir)/libgoffice-1/goffice/cut-n-paste/pcre +libpcre_a_la_HEADERS = pcreposix.h +noinst_HEADERS = internal.h pcre.h + +AM_CPPFLAGS = \ + $(GOFFICE_DEPS_CFLAGS) \ + -I$(top_builddir)/lib/goffice-0.0.4 \ + -DSUPPORT_UTF8 \ + -DNEWLINE=10 \ + -DPOSIX_MALLOC_THRESHOLD=100 \ + -DLINK_SIZE=2 \ + -DMATCH_LIMIT=10000000 + diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/get.c b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/get.c new file mode 100644 index 0000000000..5f65177c75 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/get.c @@ -0,0 +1,378 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see below. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* + This is a library of functions to support regular expressions whose syntax + and semantics are as close as possible to those of the Perl 5 language. See + the file Tech.Notes for some information on the internals. + + Written by: Philip Hazel + + Copyright (c) 1997-2003 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + +/* This module contains some convenience functions for extracting substrings + from the subject string after a regex match has succeeded. The original idea + for these functions came from Scott Wimer. */ + + +/* Include the internals header, which itself includes Standard C headers plus + the external pcre header. */ + +#include +#include "internal.h" + + +/************************************************* +* Find number for named string * +*************************************************/ + +/* This function is used by the two extraction functions below, as well + as being generally available. + + Arguments: + code the compiled regex + stringname the name whose number is required + + Returns: the number of the named parentheses, or a negative number + (PCRE_ERROR_NOSUBSTRING) if not found + */ + +int +pcre_get_stringnumber (const pcre * code, const char *stringname) +{ + int rc; + int entrysize; + int top, bot; + uschar *nametable; + + if ((rc = pcre_fullinfo (code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0) + return rc; + if (top <= 0) + return PCRE_ERROR_NOSUBSTRING; + + if ( + (rc = + pcre_fullinfo (code, NULL, PCRE_INFO_NAMEENTRYSIZE, + &entrysize)) != 0) return rc; + if ((rc = pcre_fullinfo (code, NULL, PCRE_INFO_NAMETABLE, &nametable)) + != 0) + return rc; + + bot = 0; + while (top > bot) { + int mid = (top + bot) / 2; + uschar *entry = nametable + entrysize * mid; + int c = strcmp (stringname, (char *) (entry + 2)); + if (c == 0) + return (entry[0] << 8) + entry[1]; + if (c > 0) + bot = mid + 1; + else + top = mid; + } + + return PCRE_ERROR_NOSUBSTRING; +} + + + +/************************************************* +* Copy captured string to given buffer * +*************************************************/ + +/* This function copies a single captured substring into a given buffer. + Note that we use memcpy() rather than strncpy() in case there are binary zeros + in the string. + + Arguments: + subject the subject string that was matched + ovector pointer to the offsets table + stringcount the number of substrings that were captured + (i.e. the yield of the pcre_exec call, unless + that was zero, in which case it should be 1/3 + of the offset table size) + stringnumber the number of the required substring + buffer where to put the substring + size the size of the buffer + + Returns: if successful: + the length of the copied string, not including the zero + that is put on the end; can be zero + if not successful: + PCRE_ERROR_NOMEMORY (-6) buffer too small + PCRE_ERROR_NOSUBSTRING (-7) no such captured substring + */ + +int +pcre_copy_substring (const char *subject, int *ovector, int stringcount, + int stringnumber, char *buffer, int size) +{ + int yield; + if (stringnumber < 0 || stringnumber >= stringcount) + return PCRE_ERROR_NOSUBSTRING; + stringnumber *= 2; + yield = ovector[stringnumber + 1] - ovector[stringnumber]; + if (size < yield + 1) + return PCRE_ERROR_NOMEMORY; + memcpy (buffer, subject + ovector[stringnumber], yield); + buffer[yield] = 0; + return yield; +} + + + +/************************************************* +* Copy named captured string to given buffer * +*************************************************/ + +/* This function copies a single captured substring into a given buffer, + identifying it by name. + + Arguments: + code the compiled regex + subject the subject string that was matched + ovector pointer to the offsets table + stringcount the number of substrings that were captured + (i.e. the yield of the pcre_exec call, unless + that was zero, in which case it should be 1/3 + of the offset table size) + stringname the name of the required substring + buffer where to put the substring + size the size of the buffer + + Returns: if successful: + the length of the copied string, not including the zero + that is put on the end; can be zero + if not successful: + PCRE_ERROR_NOMEMORY (-6) buffer too small + PCRE_ERROR_NOSUBSTRING (-7) no such captured substring + */ + +int +pcre_copy_named_substring (const pcre * code, const char *subject, + int *ovector, int stringcount, + const char *stringname, char *buffer, int size) +{ + int n = pcre_get_stringnumber (code, stringname); + if (n <= 0) + return n; + return pcre_copy_substring (subject, ovector, stringcount, n, buffer, + size); +} + + + +/************************************************* +* Copy all captured strings to new store * +*************************************************/ + +/* This function gets one chunk of store and builds a list of pointers and all + of the captured substrings in it. A NULL pointer is put on the end of the list. + + Arguments: + subject the subject string that was matched + ovector pointer to the offsets table + stringcount the number of substrings that were captured + (i.e. the yield of the pcre_exec call, unless + that was zero, in which case it should be 1/3 + of the offset table size) + listptr set to point to the list of pointers + + Returns: if successful: 0 + if not successful: + PCRE_ERROR_NOMEMORY (-6) failed to get store + */ + +int +pcre_get_substring_list (const char *subject, int *ovector, + int stringcount, const char ***listptr) +{ + int i; + int size = sizeof (char *); + int double_count = stringcount * 2; + char **stringlist; + char *p; + + for (i = 0; i < double_count; i += 2) + size += sizeof (char *) + ovector[i + 1] - ovector[i] + 1; + + stringlist = (char **) (pcre_malloc) (size); + if (stringlist == NULL) + return PCRE_ERROR_NOMEMORY; + + *listptr = (const char **) stringlist; + p = (char *) (stringlist + stringcount + 1); + + for (i = 0; i < double_count; i += 2) { + int len = ovector[i + 1] - ovector[i]; + memcpy (p, subject + ovector[i], len); + *stringlist++ = p; + p += len; + *p++ = 0; + } + + *stringlist = NULL; + return 0; +} + + + +/************************************************* +* Free store obtained by get_substring_list * +*************************************************/ + +/* This function exists for the benefit of people calling PCRE from non-C + programs that can call its functions, but not free() or (pcre_free)() directly. + + Argument: the result of a previous pcre_get_substring_list() + Returns: nothing + */ + +void +pcre_free_substring_list (const char **pointer) +{ + (pcre_free) ((void *) pointer); +} + + + +/************************************************* +* Copy captured string to new store * +*************************************************/ + +/* This function copies a single captured substring into a piece of new + store + + Arguments: + subject the subject string that was matched + ovector pointer to the offsets table + stringcount the number of substrings that were captured + (i.e. the yield of the pcre_exec call, unless + that was zero, in which case it should be 1/3 + of the offset table size) + stringnumber the number of the required substring + stringptr where to put a pointer to the substring + + Returns: if successful: + the length of the string, not including the zero that + is put on the end; can be zero + if not successful: + PCRE_ERROR_NOMEMORY (-6) failed to get store + PCRE_ERROR_NOSUBSTRING (-7) substring not present + */ + +int +pcre_get_substring (const char *subject, int *ovector, int stringcount, + int stringnumber, const char **stringptr) +{ + int yield; + char *substring; + if (stringnumber < 0 || stringnumber >= stringcount) + return PCRE_ERROR_NOSUBSTRING; + stringnumber *= 2; + yield = ovector[stringnumber + 1] - ovector[stringnumber]; + substring = (char *) (pcre_malloc) (yield + 1); + if (substring == NULL) + return PCRE_ERROR_NOMEMORY; + memcpy (substring, subject + ovector[stringnumber], yield); + substring[yield] = 0; + *stringptr = substring; + return yield; +} + + + +/************************************************* +* Copy named captured string to new store * +*************************************************/ + +/* This function copies a single captured substring, identified by name, into + new store. + + Arguments: + code the compiled regex + subject the subject string that was matched + ovector pointer to the offsets table + stringcount the number of substrings that were captured + (i.e. the yield of the pcre_exec call, unless + that was zero, in which case it should be 1/3 + of the offset table size) + stringname the name of the required substring + stringptr where to put the pointer + + Returns: if successful: + the length of the copied string, not including the zero + that is put on the end; can be zero + if not successful: + PCRE_ERROR_NOMEMORY (-6) couldn't get memory + PCRE_ERROR_NOSUBSTRING (-7) no such captured substring + */ + +int +pcre_get_named_substring (const pcre * code, const char *subject, + int *ovector, int stringcount, + const char *stringname, const char **stringptr) +{ + int n = pcre_get_stringnumber (code, stringname); + if (n <= 0) + return n; + return pcre_get_substring (subject, ovector, stringcount, n, + stringptr); +} + + + + +/************************************************* +* Free store obtained by get_substring * +*************************************************/ + +/* This function exists for the benefit of people calling PCRE from non-C + programs that can call its functions, but not free() or (pcre_free)() directly. + + Argument: the result of a previous pcre_get_substring() + Returns: nothing + */ + +void +pcre_free_substring (const char *pointer) +{ + (pcre_free) ((void *) pointer); +} + +/* End of get.c */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/internal.h b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/internal.h new file mode 100644 index 0000000000..e734bf7a7e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/internal.h @@ -0,0 +1,760 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see internal.c. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + + +/* This is a library of functions to support regular expressions whose syntax + and semantics are as close as possible to those of the Perl 5 language. See + the file doc/Tech.Notes for some information on the internals. + + Written by: Philip Hazel + + Copyright (c) 1997-2004 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + +/* This header contains definitions that are shared between the different + modules, but which are not relevant to the outside. */ + +/* Get the definitions provided by running "configure" */ + + +/* Standard C headers plus the external interface definition. The only time + setjmp and stdarg are used is when NO_RECURSE is set. */ + +/* Whatever the question is, ctype.h is not the answer. */ +/* #include */ +#include +#include +#include +#include +#include +#include +#include + +#ifndef PCRE_SPY +#define PCRE_DEFINITION /* Win32 __declspec(export) trigger for .dll */ +#endif + +/* We need to have types that specify unsigned 16-bit and 32-bit integers. We + cannot determine these outside the compilation (e.g. by running a program as + part of "configure") because PCRE is often cross-compiled for use on other + systems. Instead we make use of the maximum sizes that are available at + preprocessor time in standard C environments. */ + +#if USHRT_MAX == 65535 +typedef unsigned short pcre_uint16; +#elif UINT_MAX == 65535 +typedef unsigned int pcre_uint16; +#else +#error Cannot determine a type for 16-bit unsigned integers +#endif + +#if UINT_MAX == 4294967295 +typedef unsigned int pcre_uint32; +#elif ULONG_MAX == 4294967295 +typedef unsigned long int pcre_uint32; +#else +#error Cannot determine a type for 32-bit unsigned integers +#endif + +/* All character handling must be done as unsigned characters. Otherwise there + are problems with top-bit-set characters and functions such as g_unichar_isspace(). + However, we leave the interface to the outside world as char *, because that + should make things easier for callers. We define a short type for unsigned char + to save lots of typing. I tried "uchar", but it causes problems on Digital + Unix, where it is defined in sys/types, so use "uschar" instead. */ + +typedef unsigned char uschar; + +/* Include the public PCRE header */ + +#include "pcre.h" + +/* When compiling for use with the Virtual Pascal compiler, these functions + need to have their names changed. PCRE must be compiled with the -DVPCOMPAT + option on the command line. */ + +#ifdef VPCOMPAT +#define strncmp(s1,s2,m) _strncmp(s1,s2,m) +#define memcpy(d,s,n) _memcpy(d,s,n) +#define memmove(d,s,n) _memmove(d,s,n) +#define memset(s,c,n) _memset(s,c,n) +#else /* VPCOMPAT */ + +/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(), + define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY + is set. Otherwise, include an emulating function for those systems that have + neither (there some non-Unix environments where this is the case). This assumes + that all calls to memmove are moving strings upwards in store, which is the + case in PCRE. */ + +#if ! HAVE_MEMMOVE +#undef memmove /* some systems may have a macro */ +#if HAVE_BCOPY +#define memmove(a, b, c) bcopy(b, a, c) +#else /* HAVE_BCOPY */ +void * +pcre_memmove (unsigned char *dest, const unsigned char *src, size_t n) +{ + int i; + dest += n; + src += n; + for (i = 0; i < n; ++i) + *(--dest) = *(--src); +} + +#define memmove(a, b, c) pcre_memmove(a, b, c) +#endif /* not HAVE_BCOPY */ +#endif /* not HAVE_MEMMOVE */ +#endif /* not VPCOMPAT */ + + +/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored + in big-endian order) by default. These are used, for example, to link from the + start of a subpattern to its alternatives and its end. The use of 2 bytes per + offset limits the size of the compiled regex to around 64K, which is big enough + for almost everybody. However, I received a request for an even bigger limit. + For this reason, and also to make the code easier to maintain, the storing and + loading of offsets from the byte string is now handled by the macros that are + defined here. + + The macros are controlled by the value of LINK_SIZE. This defaults to 2 in + the config.h file, but can be overridden by using -D on the command line. This + is automated on Unix systems via the "configure" command. */ + +#if LINK_SIZE == 2 + +#define PUT(a,n,d) \ + (a[n] = (d) >> 8), \ + (a[(n)+1] = (d) & 255) + +#define GET(a,n) \ + (((a)[n] << 8) | (a)[(n)+1]) + +#define MAX_PATTERN_SIZE (1 << 16) + + +#elif LINK_SIZE == 3 + +#define PUT(a,n,d) \ + (a[n] = (d) >> 16), \ + (a[(n)+1] = (d) >> 8), \ + (a[(n)+2] = (d) & 255) + +#define GET(a,n) \ + (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2]) + +#define MAX_PATTERN_SIZE (1 << 24) + + +#elif LINK_SIZE == 4 + +#define PUT(a,n,d) \ + (a[n] = (d) >> 24), \ + (a[(n)+1] = (d) >> 16), \ + (a[(n)+2] = (d) >> 8), \ + (a[(n)+3] = (d) & 255) + +#define GET(a,n) \ + (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3]) + +#define MAX_PATTERN_SIZE (1 << 30) /* Keep it positive */ + + +#else +#error LINK_SIZE must be either 2, 3, or 4 +#endif + + +/* Convenience macro defined in terms of the others */ + +#define PUTINC(a,n,d) PUT(a,n,d), a += LINK_SIZE + + +/* PCRE uses some other 2-byte quantities that do not change when the size of + offsets changes. There are used for repeat counts and for other things such as + capturing parenthesis numbers in back references. */ + +#define PUT2(a,n,d) \ + a[n] = (d) >> 8; \ + a[(n)+1] = (d) & 255 + +#define GET2(a,n) \ + (((a)[n] << 8) | (a)[(n)+1]) + +#define PUT2INC(a,n,d) PUT2(a,n,d), a += 2 + + +/* In case there is no definition of offsetof() provided - though any proper + Standard C system should have one. */ + +#ifndef offsetof +#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field)) +#endif + + +/* These are the public options that can change during matching. */ + +#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL) + +/* Private options flags start at the most significant end of the four bytes, + but skip the top bit so we can use ints for convenience without getting tangled + with negative values. The public options defined in pcre.h start at the least + significant end. Make sure they don't overlap, though now that we have expanded + to four bytes, there is plenty of space. */ + +#define PCRE_FIRSTSET 0x40000000 /* first_byte is set */ +#define PCRE_REQCHSET 0x20000000 /* req_byte is set */ +#define PCRE_STARTLINE 0x10000000 /* start after \n for multiline */ +#define PCRE_ICHANGED 0x08000000 /* i option changes within regex */ +#define PCRE_NOPARTIAL 0x04000000 /* can't use partial with this regex */ + +/* Options for the "extra" block produced by pcre_study(). */ + +#define PCRE_STUDY_MAPPED 0x01 /* a map of starting chars exists */ + +/* Masks for identifying the public options which are permitted at compile + time, run time or study time, respectively. */ + +#define PUBLIC_OPTIONS \ + (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \ + PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \ + PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT) + +#define PUBLIC_EXEC_OPTIONS \ + (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \ + PCRE_PARTIAL) + +#define PUBLIC_STUDY_OPTIONS 0 /* None defined */ + +/* Magic number to provide a small check against being handed junk. */ + +#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ + +/* Negative values for the firstchar and reqchar variables */ + +#define REQ_UNSET (-2) +#define REQ_NONE (-1) + +/* Flags added to firstbyte or reqbyte; a "non-literal" item is either a + variable-length repeat, or a anything other than literal characters. */ + +#define REQ_CASELESS 0x0100 /* indicates caselessness */ +#define REQ_VARY 0x0200 /* reqbyte followed non-literal item */ + +/* Miscellaneous definitions */ + +typedef int BOOL; + +#define FALSE 0 +#define TRUE 1 + +/* Escape items that are just an encoding of a particular data value. Note that + ESC_n is defined as yet another macro, which is set in config.h to either \n + (the default) or \r (which some people want). */ + +#ifndef ESC_e +#define ESC_e 27 +#endif + +#ifndef ESC_f +#define ESC_f '\f' +#endif + +#ifndef ESC_n +#define ESC_n NEWLINE +#endif + +#ifndef ESC_r +#define ESC_r '\r' +#endif + +/* We can't officially use ESC_t because it is a POSIX reserved identifier + (presumably because of all the others like size_t). */ + +#ifndef ESC_tee +#define ESC_tee '\t' +#endif + +/* These are escaped items that aren't just an encoding of a particular data + value such as \n. They must have non-zero values, as check_escape() returns + their negation. Also, they must appear in the same order as in the opcode + definitions below, up to ESC_z. There's a dummy for OP_ANY because it + corresponds to "." rather than an escape sequence. The final one must be + ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two + tests in the code for an escape greater than ESC_b and less than ESC_Z to + detect the types that may be repeated. These are the types that consume + characters. If any new escapes are put in between that don't consume a + character, that code will have to change. */ + +enum { ESC_A = 1, ESC_G, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, + ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_X, ESC_Z, ESC_z, ESC_E, + ESC_Q, ESC_REF +}; + +/* Flag bits and data types for the extended class (OP_XCLASS) for classes that + contain UTF-8 characters with values greater than 255. */ + +#define XCL_NOT 0x01 /* Flag: this is a negative class */ +#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ + +#define XCL_END 0 /* Marks end of individual items */ +#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ +#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ +#define XCL_PROP 3 /* Unicode property (one property code) follows */ +#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ + + +/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets + that extract substrings. Starting from 1 (i.e. after OP_END), the values up to + OP_EOD must correspond in order to the list of escapes immediately above. + Note that whenever this list is updated, the two macro definitions that follow + must also be updated to match. */ + +enum { + OP_END, /* 0 End of pattern */ + + /* Values corresponding to backslashed metacharacters */ + + OP_SOD, /* 1 Start of data: \A */ + OP_SOM, /* 2 Start of match (subject + offset): \G */ + OP_NOT_WORD_BOUNDARY, /* 3 \B */ + OP_WORD_BOUNDARY, /* 4 \b */ + OP_NOT_DIGIT, /* 5 \D */ + OP_DIGIT, /* 6 \d */ + OP_NOT_WHITESPACE, /* 7 \S */ + OP_WHITESPACE, /* 8 \s */ + OP_NOT_WORDCHAR, /* 9 \W */ + OP_WORDCHAR, /* 10 \w */ + OP_ANY, /* 11 Match any character */ + OP_ANYBYTE, /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */ + OP_NOTPROP, /* 13 \P (not Unicode property) */ + OP_PROP, /* 14 \p (Unicode property) */ + OP_EXTUNI, /* 15 \X (extended Unicode sequence */ + OP_EODN, /* 16 End of data or \n at end of data: \Z. */ + OP_EOD, /* 17 End of data: \z */ + + OP_OPT, /* 18 Set runtime options */ + OP_CIRC, /* 19 Start of line - varies with multiline switch */ + OP_DOLL, /* 20 End of line - varies with multiline switch */ + OP_CHAR, /* 21 Match one character, casefully */ + OP_CHARNC, /* 22 Match one character, caselessly */ + OP_NOT, /* 23 Match anything but the following char */ + + OP_STAR, /* 24 The maximizing and minimizing versions of */ + OP_MINSTAR, /* 25 all these opcodes must come in pairs, with */ + OP_PLUS, /* 26 the minimizing one second. */ + OP_MINPLUS, /* 27 This first set applies to single characters */ + OP_QUERY, /* 28 */ + OP_MINQUERY, /* 29 */ + OP_UPTO, /* 30 From 0 to n matches */ + OP_MINUPTO, /* 31 */ + OP_EXACT, /* 32 Exactly n matches */ + + OP_NOTSTAR, /* 33 The maximizing and minimizing versions of */ + OP_NOTMINSTAR, /* 34 all these opcodes must come in pairs, with */ + OP_NOTPLUS, /* 35 the minimizing one second. */ + OP_NOTMINPLUS, /* 36 This set applies to "not" single characters */ + OP_NOTQUERY, /* 37 */ + OP_NOTMINQUERY, /* 38 */ + OP_NOTUPTO, /* 39 From 0 to n matches */ + OP_NOTMINUPTO, /* 40 */ + OP_NOTEXACT, /* 41 Exactly n matches */ + + OP_TYPESTAR, /* 42 The maximizing and minimizing versions of */ + OP_TYPEMINSTAR, /* 43 all these opcodes must come in pairs, with */ + OP_TYPEPLUS, /* 44 the minimizing one second. These codes must */ + OP_TYPEMINPLUS, /* 45 be in exactly the same order as those above. */ + OP_TYPEQUERY, /* 46 This set applies to character types such as \d */ + OP_TYPEMINQUERY, /* 47 */ + OP_TYPEUPTO, /* 48 From 0 to n matches */ + OP_TYPEMINUPTO, /* 49 */ + OP_TYPEEXACT, /* 50 Exactly n matches */ + + OP_CRSTAR, /* 51 The maximizing and minimizing versions of */ + OP_CRMINSTAR, /* 52 all these opcodes must come in pairs, with */ + OP_CRPLUS, /* 53 the minimizing one second. These codes must */ + OP_CRMINPLUS, /* 54 be in exactly the same order as those above. */ + OP_CRQUERY, /* 55 These are for character classes and back refs */ + OP_CRMINQUERY, /* 56 */ + OP_CRRANGE, /* 57 These are different to the three sets above. */ + OP_CRMINRANGE, /* 58 */ + + OP_CLASS, /* 59 Match a character class, chars < 256 only */ + OP_NCLASS, /* 60 Same, but the bitmap was created from a negative + class - the difference is relevant only when a UTF-8 + character > 255 is encountered. */ + + OP_XCLASS, /* 61 Extended class for handling UTF-8 chars within the + class. This does both positive and negative. */ + + OP_REF, /* 62 Match a back reference */ + OP_RECURSE, /* 63 Match a numbered subpattern (possibly recursive) */ + OP_CALLOUT, /* 64 Call out to external function if provided */ + + OP_ALT, /* 65 Start of alternation */ + OP_KET, /* 66 End of group that doesn't have an unbounded repeat */ + OP_KETRMAX, /* 67 These two must remain together and in this */ + OP_KETRMIN, /* 68 order. They are for groups the repeat for ever. */ + + /* The assertions must come before ONCE and COND */ + + OP_ASSERT, /* 69 Positive lookahead */ + OP_ASSERT_NOT, /* 70 Negative lookahead */ + OP_ASSERTBACK, /* 71 Positive lookbehind */ + OP_ASSERTBACK_NOT, /* 72 Negative lookbehind */ + OP_REVERSE, /* 73 Move pointer back - used in lookbehind assertions */ + + /* ONCE and COND must come after the assertions, with ONCE first, as there's + a test for >= ONCE for a subpattern that isn't an assertion. */ + + OP_ONCE, /* 74 Once matched, don't back up into the subpattern */ + OP_COND, /* 75 Conditional group */ + OP_CREF, /* 76 Used to hold an extraction string number (cond ref) */ + + OP_BRAZERO, /* 77 These two must remain together and in this */ + OP_BRAMINZERO, /* 78 order. */ + + OP_BRANUMBER, /* 79 Used for extracting brackets whose number is greater + than can fit into an opcode. */ + + OP_BRA /* 80 This and greater values are used for brackets that + extract substrings up to EXTRACT_BASIC_MAX. After + that, use is made of OP_BRANUMBER. */ +}; + +/* WARNING WARNING WARNING: There is an implicit assumption in pcre.c and + study.c that all opcodes are less than 128 in value. This makes handling UTF-8 + character sequences easier. */ + +/* The highest extraction number before we have to start using additional + bytes. (Originally PCRE didn't have support for extraction counts highter than + this number.) The value is limited by the number of opcodes left after OP_BRA, + i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional + opcodes. */ + +#define EXTRACT_BASIC_MAX 100 + + +/* This macro defines textual names for all the opcodes. There are used only + for debugging, in pcre.c when DEBUG is defined, and also in pcretest.c. The + macro is referenced only in printint.c. */ + +#define OP_NAME_LIST \ + "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d", \ + "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte", \ + "notprop", "prop", "extuni", \ + "\\Z", "\\z", \ + "Opt", "^", "$", "char", "charnc", "not", \ + "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ + "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ + "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ + "*", "*?", "+", "+?", "?", "??", "{", "{", \ + "class", "nclass", "xclass", "Ref", "Recurse", "Callout", \ + "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not", \ + "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cond ref",\ + "Brazero", "Braminzero", "Branumber", "Bra" + + +/* This macro defines the length of fixed length operations in the compiled + regex. The lengths are used when searching for specific things, and also in the + debugging printing of a compiled regex. We use a macro so that it can be + incorporated both into pcre.c and pcretest.c without being publicly exposed. + + As things have been extended, some of these are no longer fixed lenths, but are + minima instead. For example, the length of a single-character repeat may vary + in UTF-8 mode. The code that uses this table must know about such things. */ + +#define OP_LENGTHS \ + 1, /* End */ \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \ + 1, 1, /* Any, Anybyte */ \ + 2, 2, 1, /* NOTPROP, PROP, EXTUNI */ \ + 1, 1, 2, 1, 1, /* \Z, \z, Opt, ^, $ */ \ + 2, /* Char - the minimum length */ \ + 2, /* Charnc - the minimum length */ \ + 2, /* not */ \ + /* Positive single-char repeats ** These are */ \ + 2, 2, 2, 2, 2, 2, /* *, *?, +, +?, ?, ?? ** minima in */ \ + 4, 4, 4, /* upto, minupto, exact ** UTF-8 mode */ \ + /* Negative single-char repeats - only for chars < 256 */ \ + 2, 2, 2, 2, 2, 2, /* NOT *, *?, +, +?, ?, ?? */ \ + 4, 4, 4, /* NOT upto, minupto, exact */ \ + /* Positive type repeats */ \ + 2, 2, 2, 2, 2, 2, /* Type *, *?, +, +?, ?, ?? */ \ + 4, 4, 4, /* Type upto, minupto, exact */ \ + /* Character class & ref repeats */ \ + 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ \ + 5, 5, /* CRRANGE, CRMINRANGE */ \ + 33, /* CLASS */ \ + 33, /* NCLASS */ \ + 0, /* XCLASS - variable length */ \ + 3, /* REF */ \ + 1+LINK_SIZE, /* RECURSE */ \ + 2+2*LINK_SIZE, /* CALLOUT */ \ + 1+LINK_SIZE, /* Alt */ \ + 1+LINK_SIZE, /* Ket */ \ + 1+LINK_SIZE, /* KetRmax */ \ + 1+LINK_SIZE, /* KetRmin */ \ + 1+LINK_SIZE, /* Assert */ \ + 1+LINK_SIZE, /* Assert not */ \ + 1+LINK_SIZE, /* Assert behind */ \ + 1+LINK_SIZE, /* Assert behind not */ \ + 1+LINK_SIZE, /* Reverse */ \ + 1+LINK_SIZE, /* Once */ \ + 1+LINK_SIZE, /* COND */ \ + 3, /* CREF */ \ + 1, 1, /* BRAZERO, BRAMINZERO */ \ + 3, /* BRANUMBER */ \ + 1+LINK_SIZE /* BRA */ \ + + +/* A magic value for OP_CREF to indicate the "in recursion" condition. */ + +#define CREF_RECURSE 0xffff + +/* The texts of compile-time error messages are defined as macros here so that + they can be accessed by the POSIX wrapper and converted into error codes. Yes, + I could have used error codes in the first place, but didn't feel like changing + just to accommodate the POSIX wrapper. */ + +#define ERR1 "\\ at end of pattern" +#define ERR2 "\\c at end of pattern" +#define ERR3 "unrecognized character follows \\" +#define ERR4 "numbers out of order in {} quantifier" +#define ERR5 "number too big in {} quantifier" +#define ERR6 "missing terminating ] for character class" +#define ERR7 "invalid escape sequence in character class" +#define ERR8 "range out of order in character class" +#define ERR9 "nothing to repeat" +#define ERR10 "operand of unlimited repeat could match the empty string" +#define ERR11 "internal error: unexpected repeat" +#define ERR12 "unrecognized character after (?" +#define ERR13 "POSIX named classes are supported only within a class" +#define ERR14 "missing )" +#define ERR15 "reference to non-existent subpattern" +#define ERR16 "erroffset passed as NULL" +#define ERR17 "unknown option bit(s) set" +#define ERR18 "missing ) after comment" +#define ERR19 "parentheses nested too deeply" +#define ERR20 "regular expression too large" +#define ERR21 "failed to get memory" +#define ERR22 "unmatched parentheses" +#define ERR23 "internal error: code overflow" +#define ERR24 "unrecognized character after (?<" +#define ERR25 "lookbehind assertion is not fixed length" +#define ERR26 "malformed number after (?(" +#define ERR27 "conditional group contains more than two branches" +#define ERR28 "assertion expected after (?(" +#define ERR29 "(?R or (?digits must be followed by )" +#define ERR30 "unknown POSIX class name" +#define ERR31 "POSIX collating elements are not supported" +#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support" +#define ERR33 "spare error" +#define ERR34 "character value in \\x{...} sequence is too large" +#define ERR35 "invalid condition (?(0)" +#define ERR36 "\\C not allowed in lookbehind assertion" +#define ERR37 "PCRE does not support \\L, \\l, \\N, \\U, or \\u" +#define ERR38 "number after (?C is > 255" +#define ERR39 "closing ) for (?C expected" +#define ERR40 "recursive call could loop indefinitely" +#define ERR41 "unrecognized character after (?P" +#define ERR42 "syntax error after (?P" +#define ERR43 "two named groups have the same name" +#define ERR44 "invalid UTF-8 string" +#define ERR45 "support for \\P, \\p, and \\X has not been compiled" +#define ERR46 "malformed \\P or \\p sequence" +#define ERR47 "unknown property name after \\P or \\p" + +/* The real format of the start of the pcre block; the index of names and the + code vector run on as long as necessary after the end. We store an explicit + offset to the name table so that if a regex is compiled on one host, saved, and + then run on another where the size of pointers is different, all might still + be well. For the case of compiled-on-4 and run-on-8, we include an extra + pointer that is always NULL. For future-proofing, we also include a few dummy + fields - even though you can never get this planning right! + + NOTE NOTE NOTE: + Because people can now save and re-use compiled patterns, any additions to this + structure should be made at the end, and something earlier (e.g. a new + flag in the options or one of the dummy fields) should indicate that the new + fields are present. Currently PCRE always sets the dummy fields to zero. + NOTE NOTE NOTE: + */ + +typedef struct real_pcre { + pcre_uint32 magic_number; + pcre_uint32 size; /* Total that was malloced */ + pcre_uint32 options; + pcre_uint32 dummy1; /* For future use, maybe */ + + pcre_uint16 top_bracket; + pcre_uint16 top_backref; + pcre_uint16 first_byte; + pcre_uint16 req_byte; + pcre_uint16 name_table_offset; /* Offset to name table that follows */ + pcre_uint16 name_entry_size; /* Size of any name items */ + pcre_uint16 name_count; /* Number of name items */ + pcre_uint16 dummy2; /* For future use, maybe */ + + const unsigned char *tables; /* Pointer to tables or NULL for std */ + const unsigned char *nullpad; /* NULL padding */ +} real_pcre; + +/* The format of the block used to store data from pcre_study(). The same + remark (see NOTE above) about extending this structure applies. */ + +typedef struct pcre_study_data { + pcre_uint32 size; /* Total that was malloced */ + pcre_uint32 options; + uschar start_bits[32]; +} pcre_study_data; + +/* Structure for passing "static" information around between the functions + doing the compiling, so that they are thread-safe. */ + +typedef struct compile_data { + const uschar *lcc; /* Points to lower casing table */ + const uschar *fcc; /* Points to case-flipping table */ + const uschar *cbits; /* Points to character type table */ + const uschar *ctypes; /* Points to table of type maps */ + const uschar *start_code; /* The start of the compiled code */ + const uschar *start_pattern; /* The start of the pattern */ + uschar *name_table; /* The name/number table */ + int names_found; /* Number of entries so far */ + int name_entry_size; /* Size of each entry */ + int top_backref; /* Maximum back reference */ + unsigned int backref_map; /* Bitmap of low back refs */ + int req_varyopt; /* "After variable item" flag for reqbyte */ + BOOL nopartial; /* Set TRUE if partial won't work */ +} compile_data; + +/* Structure for maintaining a chain of pointers to the currently incomplete + branches, for testing for left recursion. */ + +typedef struct branch_chain { + struct branch_chain *outer; + uschar *current; +} branch_chain; + +/* Structure for items in a linked list that represents an explicit recursive + call within the pattern. */ + +typedef struct recursion_info { + struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ + int group_num; /* Number of group that was called */ + const uschar *after_call; /* "Return value": points after the call in the expr */ + const uschar *save_start; /* Old value of md->start_match */ + int *offset_save; /* Pointer to start of saved offsets */ + int saved_max; /* Number of saved offsets */ +} recursion_info; + +/* When compiling in a mode that doesn't use recursive calls to match(), + a structure is used to remember local variables on the heap. It is defined in + pcre.c, close to the match() function, so that it is easy to keep it in step + with any changes of local variable. However, the pointer to the current frame + must be saved in some "static" place over a longjmp(). We declare the + structure here so that we can put a pointer in the match_data structure. + NOTE: This isn't used for a "normal" compilation of pcre. */ + +struct heapframe; + +/* Structure for passing "static" information around between the functions + doing the matching, so that they are thread-safe. */ + +typedef struct match_data { + unsigned long int match_call_count; /* As it says */ + unsigned long int match_limit; /* As it says */ + int *offset_vector; /* Offset vector */ + int offset_end; /* One past the end */ + int offset_max; /* The maximum usable for return data */ + const uschar *lcc; /* Points to lower casing table */ + const uschar *ctypes; /* Points to table of type maps */ + BOOL offset_overflow; /* Set if too many extractions */ + BOOL notbol; /* NOTBOL flag */ + BOOL noteol; /* NOTEOL flag */ + BOOL utf8; /* UTF8 flag */ + BOOL endonly; /* Dollar not before final \n */ + BOOL notempty; /* Empty string match not wanted */ + BOOL partial; /* PARTIAL flag */ + BOOL hitend; /* Hit the end of the subject at some point */ + const uschar *start_code; /* For use when recursing */ + const uschar *start_subject; /* Start of the subject string */ + const uschar *end_subject; /* End of the subject string */ + const uschar *start_match; /* Start of this match attempt */ + const uschar *end_match_ptr; /* Subject position at end match */ + int end_offset_top; /* Highwater mark at end of match */ + int capture_last; /* Most recent capture number */ + int start_offset; /* The start offset value */ + recursion_info *recursive; /* Linked list of recursion data */ + void *callout_data; /* To pass back to callouts */ + struct heapframe *thisframe; /* Used only when compiling for no recursion */ +} match_data; + +/* Bit definitions for entries in the pcre_ctypes table. */ + +#define ctype_space 0x01 +#define ctype_letter 0x02 +#define ctype_digit 0x04 +#define ctype_xdigit 0x08 +#define ctype_word 0x10 /* alphameric or '_' */ +#define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */ + +/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set + of bits for a class map. Some classes are built by combining these tables. */ + +#define cbit_space 0 /* [:space:] or \s */ +#define cbit_xdigit 32 /* [:xdigit:] */ +#define cbit_digit 64 /* [:digit:] or \d */ +#define cbit_upper 96 /* [:upper:] */ +#define cbit_lower 128 /* [:lower:] */ +#define cbit_word 160 /* [:word:] or \w */ +#define cbit_graph 192 /* [:graph:] */ +#define cbit_print 224 /* [:print:] */ +#define cbit_punct 256 /* [:punct:] */ +#define cbit_cntrl 288 /* [:cntrl:] */ +#define cbit_length 320 /* Length of the cbits table */ + +/* Offsets of the various tables from the base tables pointer, and + total length. */ + +#define lcc_offset 0 +#define fcc_offset 256 +#define cbits_offset 512 +#define ctypes_offset (cbits_offset + cbit_length) +#define tables_length (ctypes_offset + 256) + +/* End of internal.h */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/maketables.c b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/maketables.c new file mode 100644 index 0000000000..5f3805ddcc --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/maketables.c @@ -0,0 +1,168 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see below. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* + PCRE is a library of functions to support regular expressions whose syntax + and semantics are as close as possible to those of the Perl 5 language. + + Written by: Philip Hazel + + Copyright (c) 1997-2003 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + + +/* This file is compiled on its own as part of the PCRE library. However, + it is also included in the compilation of dftables.c, in which case the macro + DFTABLES is defined. */ + +#ifndef DFTABLES +#include +#include "internal.h" +#include +#endif + + + +/************************************************* +* Create PCRE character tables * +*************************************************/ + +/* This function builds a set of character tables for use by PCRE and returns + a pointer to them. They are build using the ctype functions, and consequently + their contents will depend upon the current locale setting. When compiled as + part of the library, the store is obtained via pcre_malloc(), but when compiled + inside dftables, use malloc(). + + Arguments: none + Returns: pointer to the contiguous block of data + */ + +const unsigned char * +pcre_maketables (void) +{ + unsigned char *yield, *p; + int i; + +#ifndef DFTABLES + yield = (unsigned char *) (pcre_malloc) (tables_length); +#else + yield = (unsigned char *) malloc (tables_length); +#endif + + if (yield == NULL) + return NULL; + p = yield; + + /* First comes the lower casing table */ + + for (i = 0; i < 256; i++) + *p++ = g_unichar_tolower (i); + + /* Next the case-flipping table */ + + for (i = 0; i < 256; i++) + *p++ = + g_unichar_islower (i) ? g_unichar_toupper (i) : + g_unichar_tolower (i); + + /* Then the character class tables. Don't try to be clever and save effort + on exclusive ones - in some locales things may be different. Note that the + table for "space" includes everything "g_unichar_isspace" gives, including VT in the + default locale. This makes it work for the POSIX class [:space:]. */ + + memset (p, 0, cbit_length); + for (i = 0; i < 256; i++) { + if (g_unichar_isdigit (i)) { + p[cbit_digit + i / 8] |= 1 << (i & 7); + p[cbit_word + i / 8] |= 1 << (i & 7); + } + if (g_unichar_isupper (i)) { + p[cbit_upper + i / 8] |= 1 << (i & 7); + p[cbit_word + i / 8] |= 1 << (i & 7); + } + if (g_unichar_islower (i)) { + p[cbit_lower + i / 8] |= 1 << (i & 7); + p[cbit_word + i / 8] |= 1 << (i & 7); + } + if (i == '_') + p[cbit_word + i / 8] |= 1 << (i & 7); + if (g_unichar_isspace (i)) + p[cbit_space + i / 8] |= 1 << (i & 7); + if (g_unichar_isxdigit (i)) + p[cbit_xdigit + i / 8] |= 1 << (i & 7); + if (g_unichar_isgraph (i)) + p[cbit_graph + i / 8] |= 1 << (i & 7); + if (g_unichar_isprint (i)) + p[cbit_print + i / 8] |= 1 << (i & 7); + if (g_unichar_ispunct (i)) + p[cbit_punct + i / 8] |= 1 << (i & 7); + if (g_unichar_iscntrl (i)) + p[cbit_cntrl + i / 8] |= 1 << (i & 7); + } + p += cbit_length; + + /* Finally, the character type table. In this, we exclude VT from the white + space chars, because Perl doesn't recognize it as such for \s and for comments + within regexes. */ + + for (i = 0; i < 256; i++) { + int x = 0; + if (i != 0x0b && g_unichar_isspace (i)) + x += ctype_space; + if (g_unichar_isalpha (i)) + x += ctype_letter; + if (g_unichar_isdigit (i)) + x += ctype_digit; + if (g_unichar_isxdigit (i)) + x += ctype_xdigit; + if (g_unichar_isalnum (i) || i == '_') + x += ctype_word; + + /* Note: strchr includes the terminating zero in the characters it considers. + In this instance, that is ok because we want binary zero to be flagged as a + meta-character, which in this sense is any character that terminates a run + of data characters. */ + + if (strchr ("*+?{^.$|()[", i) != 0) + x += ctype_meta; + *p++ = x; + } + + return yield; +} + +/* End of maketables.c */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcre.c b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcre.c new file mode 100644 index 0000000000..85589fd8e8 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcre.c @@ -0,0 +1,9345 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see below. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* + This is a library of functions to support regular expressions whose syntax + and semantics are as close as possible to those of the Perl 5 language. See + the file Tech.Notes for some information on the internals. + + Written by: Philip Hazel + + Copyright (c) 1997-2004 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + + +/* Define DEBUG to get debugging output on stdout. */ +/* #define DEBUG */ + +/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef + inline, and there are *still* stupid compilers about that don't like indented + pre-processor statements. I suppose it's only been 10 years... */ + +#ifdef DEBUG +#define DPRINTF(p) printf p +#else +#define DPRINTF(p) /*nothing */ +#endif + +/* Include the internals header, which itself includes "config.h", the Standard + C headers, and the external pcre header. */ + +#include +#include "internal.h" +#include + +/* If Unicode Property support is wanted, include a private copy of the + function that does it, and the table that translates names to numbers. */ + +#ifdef SUPPORT_UCP +#include "ucp.c" +#include "ucptypetable.c" +#endif + +/* Maximum number of items on the nested bracket stacks at compile time. This + applies to the nesting of all kinds of parentheses. It does not limit + un-nested, non-capturing parentheses. This number can be made bigger if + necessary - it is used to dimension one int and one unsigned char vector at + compile time. */ + +#define BRASTACK_SIZE 200 + + +/* Maximum number of ints of offset to save on the stack for recursive calls. + If the offset vector is bigger, malloc is used. This should be a multiple of 3, + because the offset vector is always a multiple of 3 long. */ + +#define REC_STACK_SAVE_MAX 30 + + +/* The maximum remaining length of subject we are prepared to search for a + req_byte match. */ + +#define REQ_BYTE_MAX 1000 + + +/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that + the definition is next to the definition of the opcodes in internal.h. */ + +static const uschar OP_lengths[] = { OP_LENGTHS }; + +/* Min and max values for the common repeats; for the maxima, 0 => infinity */ + +static const char rep_min[] = { 0, 0, 1, 1, 0, 0 }; +static const char rep_max[] = { 0, 0, 0, 0, 1, 1 }; + +/* Table for handling escaped characters in the range '0'-'z'. Positive returns + are simple data values; negative values are for special things like \d and so + on. Zero means further processing is needed (for things like \x), or the escape + is invalid. */ + +#if !EBCDIC /* This is the "normal" table for ASCII systems */ +static const short int escapes[] = { + 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */ + 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */ + '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E, 0, -ESC_G, /* @ - G */ + 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */ + -ESC_P, -ESC_Q, 0, -ESC_S, 0, 0, 0, -ESC_W, /* P - W */ + -ESC_X, 0, -ESC_Z, '[', '\\', ']', '^', '_', /* X - _ */ + '`', 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, /* ` - g */ + 0, 0, 0, 0, 0, 0, ESC_n, 0, /* h - o */ + -ESC_p, 0, ESC_r, -ESC_s, ESC_tee, 0, 0, -ESC_w, /* p - w */ + 0, 0, -ESC_z /* x - z */ +}; + +#else /* This is the "abnormal" table for EBCDIC systems */ +static const short int escapes[] = { + /* 48 */ 0, 0, 0, '.', '<', '(', '+', '|', + /* 50 */ '&', 0, 0, 0, 0, 0, 0, 0, + /* 58 */ 0, 0, '!', '$', '*', ')', ';', '~', + /* 60 */ '-', '/', 0, 0, 0, 0, 0, 0, + /* 68 */ 0, 0, '|', ',', '%', '_', '>', '?', + /* 70 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 78 */ 0, '`', ':', '#', '@', '\'', '=', '"', + /* 80 */ 0, 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, + /* 88 */ 0, 0, 0, '{', 0, 0, 0, 0, + /* 90 */ 0, 0, 0, 'l', 0, ESC_n, 0, -ESC_p, + /* 98 */ 0, ESC_r, 0, '}', 0, 0, 0, 0, + /* A0 */ 0, '~', -ESC_s, ESC_tee, 0, 0, -ESC_w, 0, + /* A8 */ 0, -ESC_z, 0, 0, 0, '[', 0, 0, + /* B0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* B8 */ 0, 0, 0, 0, 0, ']', '=', '-', + /* C0 */ '{', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E, 0, -ESC_G, + /* C8 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* D0 */ '}', 0, 0, 0, 0, 0, 0, -ESC_P, + /* D8 */ -ESC_Q, 0, 0, 0, 0, 0, 0, 0, + /* E0 */ '\\', 0, -ESC_S, 0, 0, 0, -ESC_W, -ESC_X, + /* E8 */ 0, -ESC_Z, 0, 0, 0, 0, 0, 0, + /* F0 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* F8 */ 0, 0, 0, 0, 0, 0, 0, 0 +}; +#endif + + +/* Tables of names of POSIX character classes and their lengths. The list is + terminated by a zero length entry. The first three must be alpha, upper, lower, + as this is assumed for handling case independence. */ + +static const char *const posix_names[] = { + "alpha", "lower", "upper", + "alnum", "ascii", "blank", "cntrl", "digit", "graph", + "print", "punct", "space", "word", "xdigit" +}; + +static const uschar posix_name_lengths[] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 +}; + +/* Table of class bit maps for each POSIX class; up to three may be combined + to form the class. The table for [:blank:] is dynamically modified to remove + the vertical space characters. */ + +static const int posix_class_maps[] = { + cbit_lower, cbit_upper, -1, /* alpha */ + cbit_lower, -1, -1, /* lower */ + cbit_upper, -1, -1, /* upper */ + cbit_digit, cbit_lower, cbit_upper, /* alnum */ + cbit_print, cbit_cntrl, -1, /* ascii */ + cbit_space, -1, -1, /* blank - a GNU extension */ + cbit_cntrl, -1, -1, /* cntrl */ + cbit_digit, -1, -1, /* digit */ + cbit_graph, -1, -1, /* graph */ + cbit_print, -1, -1, /* print */ + cbit_punct, -1, -1, /* punct */ + cbit_space, -1, -1, /* space */ + cbit_word, -1, -1, /* word - a Perl extension */ + cbit_xdigit, -1, -1 /* xdigit */ +}; + +/* Table to identify digits and hex digits. This is used when compiling + patterns. Note that the tables in chartables are dependent on the locale, and + may mark arbitrary characters as digits - but the PCRE compiling code expects + to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have + a private table here. It costs 256 bytes, but it is a lot faster than doing + character value tests (at least in some simple cases I timed), and in some + applications one wants PCRE to compile efficiently as well as match + efficiently. + + For convenience, we use the same bit definitions as in chartables: + + 0x04 decimal digit + 0x08 hexadecimal digit + + Then we can use ctype_digit and ctype_xdigit in the code. */ + +#if !EBCDIC /* This is the "normal" case, for ASCII systems */ +static const unsigned char digitab[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0- 7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8- 15 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 16- 23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 24- 31 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - ' */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ( - / */ + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 0 - 7 */ + 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 - ? */ + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, /* @ - G */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* H - O */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* P - W */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* X - _ */ + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, /* ` - g */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* h - o */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* p - w */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* x -127 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 128-135 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 136-143 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 144-151 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 152-159 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 160-167 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 168-175 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 176-183 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 184-191 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 192-199 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 200-207 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 208-215 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 216-223 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 224-231 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 232-239 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 240-247 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; /* 248-255 */ + +#else /* This is the "abnormal" case, for EBCDIC systems */ +static const unsigned char digitab[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0- 7 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8- 15 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 16- 23 10 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 24- 31 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 32- 39 20 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40- 47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48- 55 30 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 56- 63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - 71 40 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 72- | */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* & - 87 50 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88- ¬ */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - -103 60 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 104- ? */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 112-119 70 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 120- " */ + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, /* 128- g 80 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* h -143 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 144- p 90 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* q -159 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 160- x A0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* y -175 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^ -183 B0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 184-191 */ + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, /* { - G C0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* H -207 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* } - P D0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Q -223 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* \ - X E0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Y -239 */ + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 0 - 7 F0 */ + 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; /* 8 -255 */ + +static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, /* 0- 7 */ + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, /* 8- 15 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, /* 16- 23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 24- 31 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, /* 32- 39 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40- 47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48- 55 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 56- 63 */ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - 71 */ + 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, /* 72- | */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* & - 87 */ + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, /* 88- ¬ */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - -103 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, /* 104- ? */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 112-119 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 120- " */ + 0x00, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x12, /* 128- g */ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* h -143 */ + 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, /* 144- p */ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* q -159 */ + 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, /* 160- x */ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* y -175 */ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^ -183 */ + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 184-191 */ + 0x80, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x12, /* { - G */ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* H -207 */ + 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, /* } - P */ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Q -223 */ + 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, /* \ - X */ + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Y -239 */ + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, /* 0 - 7 */ + 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; /* 8 -255 */ +#endif + + +/* Definition to allow mutual recursion */ + +static BOOL +compile_regex (int, int, int *, uschar **, const uschar **, const char **, + BOOL, int, int *, int *, branch_chain *, compile_data *); + +/* Structure for building a chain of data that actually lives on the + stack, for holding the values of the subject pointer at the start of each + subpattern, so as to detect when an empty string has been matched by a + subpattern - to break infinite loops. When NO_RECURSE is set, these blocks + are on the heap, not on the stack. */ + +typedef struct eptrblock { + struct eptrblock *epb_prev; + const uschar *epb_saved_eptr; +} eptrblock; + +/* Flag bits for the match() function */ + +#define match_condassert 0x01 /* Called to check a condition assertion */ +#define match_isgroup 0x02 /* Set if start of bracketed group */ + +/* Non-error returns from the match() function. Error returns are externally + defined PCRE_ERROR_xxx codes, which are all negative. */ + +#define MATCH_MATCH 1 +#define MATCH_NOMATCH 0 + + + +/************************************************* +* Global variables * +*************************************************/ + +/* PCRE is thread-clean and doesn't use any global variables in the normal + sense. However, it calls memory allocation and free functions via the four + indirections below, and it can optionally do callouts. These values can be + changed by the caller, but are shared between all threads. However, when + compiling for Virtual Pascal, things are done differently (see pcre.in). */ + +#ifndef VPCOMPAT +#ifdef __cplusplus +extern "C" void *(*pcre_malloc) (size_t) = malloc; +extern "C" void (*pcre_free) (void *) = free; +extern "C" void *(*pcre_stack_malloc) (size_t) = malloc; +extern "C" void (*pcre_stack_free) (void *) = free; +extern "C" int (*pcre_callout) (pcre_callout_block *) = NULL; +#else +void *(*pcre_malloc) (size_t) = malloc; +void (*pcre_free) (void *) = free; +void *(*pcre_stack_malloc) (size_t) = malloc; +void (*pcre_stack_free) (void *) = free; +int (*pcre_callout) (pcre_callout_block *) = NULL; +#endif +#endif + + +/************************************************* +* Macros and tables for character handling * +*************************************************/ + +/* When UTF-8 encoding is being used, a character is no longer just a single + byte. The macros for character handling generate simple sequences when used in + byte-mode, and more complicated ones for UTF-8 characters. */ + +#ifndef SUPPORT_UTF8 +#define GETCHAR(c, eptr) c = *eptr; +#define GETCHARINC(c, eptr) c = *eptr++; +#define GETCHARINCTEST(c, eptr) c = *eptr++; +#define GETCHARLEN(c, eptr, len) c = *eptr; +#define BACKCHAR(eptr) + +#else /* SUPPORT_UTF8 */ + +/* Get the next UTF-8 character, not advancing the pointer. This is called when + we know we are in UTF-8 mode. */ + +#define GETCHAR(c, eptr) do { (c) = g_utf8_get_char (eptr); } while (0) + +/* Get the next UTF-8 character, advancing the pointer. This is called when we + know we are in UTF-8 mode. */ + +#define GETCHARINC(c, eptr) do { GETCHAR(c,eptr); (eptr) = g_utf8_next_char (eptr); } while (0) + +/* Get the next character, testing for UTF-8 mode, and advancing the pointer */ + +#define GETCHARINCTEST(c, eptr) do { GETCHAR(c,eptr); (eptr) = g_utf8_next_char (eptr); } while (0) + +/* Get the next UTF-8 character, not advancing the pointer, incrementing length + if there are extra bytes. This is called when we know we are in UTF-8 mode. */ + +#define GETCHARLEN(c, eptr, len) do { GETCHAR(c,eptr); (len) += g_utf8_skip[(uschar)(*eptr)] - 1; } while (0) + +/* If the pointer is not at the start of a character, move it back until + it is. Called only in UTF-8 mode. */ + +#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--; + +#endif + + + +/************************************************* +* Default character tables * +*************************************************/ + +/* A default set of character tables is included in the PCRE binary. Its source + is built by the maketables auxiliary program, which uses the default C ctypes + functions, and put in the file chartables.c. These tables are used by PCRE + whenever the caller of pcre_compile() does not provide an alternate set of + tables. */ + +static const unsigned char * +make_pcre_default_tables (void) +{ + static const unsigned char *res = NULL; + if (res == NULL) { + res = pcre_maketables (); + } + return res; +} + +/* #include "chartables.c" */ + + + +#ifdef SUPPORT_UTF8 +/************************************************* +* Tables for UTF-8 support * +*************************************************/ + +/* These are the breakpoints for different numbers of bytes in a UTF-8 + character. */ + + +/* These are the indicator bits and the mask for the data bits to set in the + first byte of a character, indexed by the number of additional bytes. */ + + +/* Table of the number of extra characters, indexed by the first character + masked with 0x3f. The highest number for a valid UTF-8 character is in fact + 0x3d. */ + +static const uschar utf8_table4[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 +}; + + +/************************************************* +* Convert character value to UTF-8 * +*************************************************/ + +/* This function takes an integer value in the range 0 - 0x7fffffff + and encodes it as a UTF-8 character in 0 to 6 bytes. + + Arguments: + cvalue the character value + buffer pointer to buffer for result - at least 6 bytes long + + Returns: number of characters placed in the buffer + */ + +#endif + + + +/************************************************* +* Print compiled regex * +*************************************************/ + +/* The code for doing this is held in a separate file that is also included in + pcretest.c. It defines a function called print_internals(). */ + +#ifdef DEBUG +/* #include "printint.c" */ +#endif + + + +/************************************************* +* Return version string * +*************************************************/ + +#define STRING(a) # a +#define XSTRING(s) STRING(s) + +const char * +pcre_version (void) +{ + return XSTRING (PCRE_MAJOR) "." XSTRING (PCRE_MINOR) " " + XSTRING (PCRE_DATE); +} + + + + +/************************************************* +* Flip bytes in an integer * +*************************************************/ + +/* This function is called when the magic number in a regex doesn't match in + order to flip its bytes to see if we are dealing with a pattern that was + compiled on a host of different endianness. If so, this function is used to + flip other byte values. + + Arguments: + value the number to flip + n the number of bytes to flip (assumed to be 2 or 4) + + Returns: the flipped value + */ + +static long int +byteflip (long int value, int n) +{ + if (n == 2) + return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8); + return ((value & 0x000000ff) << 24) | + ((value & 0x0000ff00) << 8) | + ((value & 0x00ff0000) >> 8) | ((value & 0xff000000) >> 24); +} + + + +/************************************************* +* Test for a byte-flipped compiled regex * +*************************************************/ + +/* This function is called from pce_exec() and also from pcre_fullinfo(). Its + job is to test whether the regex is byte-flipped - that is, it was compiled on + a system of opposite endianness. The function is called only when the native + MAGIC_NUMBER test fails. If the regex is indeed flipped, we flip all the + relevant values into a different data block, and return it. + + Arguments: + re points to the regex + study points to study data, or NULL + internal_re points to a new regex block + internal_study points to a new study block + + Returns: the new block if is is indeed a byte-flipped regex + NULL if it is not + */ + +static real_pcre * +try_flipped (const real_pcre * re, real_pcre * internal_re, + const pcre_study_data * study, + pcre_study_data * internal_study) +{ + if (byteflip (re->magic_number, sizeof (re->magic_number)) != + MAGIC_NUMBER) return NULL; + + *internal_re = *re; /* To copy other fields */ + internal_re->size = byteflip (re->size, sizeof (re->size)); + internal_re->options = byteflip (re->options, sizeof (re->options)); + internal_re->top_bracket = + byteflip (re->top_bracket, sizeof (re->top_bracket)); + internal_re->top_backref = + byteflip (re->top_backref, sizeof (re->top_backref)); + internal_re->first_byte = + byteflip (re->first_byte, sizeof (re->first_byte)); + internal_re->req_byte = byteflip (re->req_byte, sizeof (re->req_byte)); + internal_re->name_table_offset = byteflip (re->name_table_offset, + sizeof (re-> + name_table_offset)); + internal_re->name_entry_size = + byteflip (re->name_entry_size, sizeof (re->name_entry_size)); + internal_re->name_count = + byteflip (re->name_count, sizeof (re->name_count)); + + if (study != NULL) { + *internal_study = *study; /* To copy other fields */ + internal_study->size = + byteflip (study->size, sizeof (study->size)); + internal_study->options = + byteflip (study->options, sizeof (study->options)); + } + + return internal_re; +} + + + +/************************************************* +* (Obsolete) Return info about compiled pattern * +*************************************************/ + +/* This is the original "info" function. It picks potentially useful data out + of the private structure, but its interface was too rigid. It remains for + backwards compatibility. The public options are passed back in an int - though + the re->options field has been expanded to a long int, all the public options + at the low end of it, and so even on 16-bit systems this will still be OK. + Therefore, I haven't changed the API for pcre_info(). + + Arguments: + argument_re points to compiled code + optptr where to pass back the options + first_byte where to pass back the first character, + or -1 if multiline and all branches start ^, + or -2 otherwise + + Returns: number of capturing subpatterns + or negative values on error + */ + +int +pcre_info (const pcre * argument_re, int *optptr, int *first_byte) +{ + real_pcre internal_re; + const real_pcre *re = (const real_pcre *) argument_re; + if (re == NULL) + return PCRE_ERROR_NULL; + if (re->magic_number != MAGIC_NUMBER) { + re = try_flipped (re, &internal_re, NULL, NULL); + if (re == NULL) + return PCRE_ERROR_BADMAGIC; + } + if (optptr != NULL) + *optptr = (int) (re->options & PUBLIC_OPTIONS); + if (first_byte != NULL) + *first_byte = + ((re->options & PCRE_FIRSTSET) != + 0) ? re->first_byte : ((re->options & PCRE_STARTLINE) != + 0) ? -1 : -2; + return re->top_bracket; +} + + + +/************************************************* +* Return info about compiled pattern * +*************************************************/ + +/* This is a newer "info" function which has an extensible interface so + that additional items can be added compatibly. + + Arguments: + argument_re points to compiled code + extra_data points extra data, or NULL + what what information is required + where where to put the information + + Returns: 0 if data returned, negative on error + */ + +int +pcre_fullinfo (const pcre * argument_re, const pcre_extra * extra_data, + int what, void *where) +{ + real_pcre internal_re; + pcre_study_data internal_study; + const real_pcre *re = (const real_pcre *) argument_re; + const pcre_study_data *study = NULL; + + if (re == NULL || where == NULL) + return PCRE_ERROR_NULL; + + if (extra_data != NULL + && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0) + study = (const pcre_study_data *) extra_data->study_data; + + if (re->magic_number != MAGIC_NUMBER) { + re = try_flipped (re, &internal_re, study, &internal_study); + if (re == NULL) + return PCRE_ERROR_BADMAGIC; + if (study != NULL) + study = &internal_study; + } + + switch (what) { + case PCRE_INFO_OPTIONS: + *((unsigned long int *) where) = re->options & PUBLIC_OPTIONS; + break; + + case PCRE_INFO_SIZE: + *((size_t *) where) = re->size; + break; + + case PCRE_INFO_STUDYSIZE: + *((size_t *) where) = (study == NULL) ? 0 : study->size; + break; + + case PCRE_INFO_CAPTURECOUNT: + *((int *) where) = re->top_bracket; + break; + + case PCRE_INFO_BACKREFMAX: + *((int *) where) = re->top_backref; + break; + + case PCRE_INFO_FIRSTBYTE: + *((int *) where) = + ((re->options & PCRE_FIRSTSET) != 0) ? re->first_byte : + ((re->options & PCRE_STARTLINE) != 0) ? -1 : -2; + break; + + /* Make sure we pass back the pointer to the bit vector in the external + block, not the internal copy (with flipped integer fields). */ + + case PCRE_INFO_FIRSTTABLE: + *((const uschar **) where) = + (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0) ? + ((const pcre_study_data *) extra_data->study_data)-> + start_bits : NULL; + break; + + case PCRE_INFO_LASTLITERAL: + *((int *) where) = + ((re->options & PCRE_REQCHSET) != 0) ? re->req_byte : -1; + break; + + case PCRE_INFO_NAMEENTRYSIZE: + *((int *) where) = re->name_entry_size; + break; + + case PCRE_INFO_NAMECOUNT: + *((int *) where) = re->name_count; + break; + + case PCRE_INFO_NAMETABLE: + *((const uschar **) where) = + (const uschar *) re + re->name_table_offset; + break; + + case PCRE_INFO_DEFAULT_TABLES: + *((const uschar **) where) = + (const uschar *) make_pcre_default_tables (); + break; + + default: + return PCRE_ERROR_BADOPTION; + } + + return 0; +} + + + +/************************************************* +* Return info about what features are configured * +*************************************************/ + +/* This is function which has an extensible interface so that additional items + can be added compatibly. + + Arguments: + what what information is required + where where to put the information + + Returns: 0 if data returned, negative on error + */ + +int +pcre_config (int what, void *where) +{ + switch (what) { + case PCRE_CONFIG_UTF8: +#ifdef SUPPORT_UTF8 + *((int *) where) = 1; +#else + *((int *) where) = 0; +#endif + break; + + case PCRE_CONFIG_UNICODE_PROPERTIES: +#ifdef SUPPORT_UCP + *((int *) where) = 1; +#else + *((int *) where) = 0; +#endif + break; + + case PCRE_CONFIG_NEWLINE: + *((int *) where) = NEWLINE; + break; + + case PCRE_CONFIG_LINK_SIZE: + *((int *) where) = LINK_SIZE; + break; + + case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD: + *((int *) where) = POSIX_MALLOC_THRESHOLD; + break; + + case PCRE_CONFIG_MATCH_LIMIT: + *((unsigned int *) where) = MATCH_LIMIT; + break; + + case PCRE_CONFIG_STACKRECURSE: +#ifdef NO_RECURSE + *((int *) where) = 0; +#else + *((int *) where) = 1; +#endif + break; + + default: + return PCRE_ERROR_BADOPTION; + } + + return 0; +} + + + +#ifdef DEBUG +/************************************************* +* Debugging function to print chars * +*************************************************/ + +/* Print a sequence of chars in printable format, stopping at the end of the + subject if the requested. + + Arguments: + p points to characters + length number to print + is_subject TRUE if printing from within md->start_subject + md pointer to matching data block, if is_subject is TRUE + + Returns: nothing + */ + +static void +pchars (const uschar * p, int length, BOOL is_subject, match_data * md) +{ + int c; + if (is_subject && length > md->end_subject - p) + length = md->end_subject - p; + while (length-- > 0) + if (g_unichar_isprint (c = *(p++))) + printf ("%c", c); + else + printf ("\\x%02x", c); +} +#endif + + + + +/************************************************* +* Handle escapes * +*************************************************/ + +/* This function is called when a \ has been encountered. It either returns a + positive value for a simple escape such as \n, or a negative value which + encodes one of the more complicated things such as \d. When UTF-8 is enabled, + a positive value greater than 255 may be returned. On entry, ptr is pointing at + the \. On exit, it is on the final character of the escape sequence. + + Arguments: + ptrptr points to the pattern position pointer + errorptr points to the pointer to the error message + bracount number of previous extracting brackets + options the options bits + isclass TRUE if inside a character class + + Returns: zero or positive => a data character + negative => a special escape sequence + on error, errorptr is set + */ + +static int +check_escape (const uschar ** ptrptr, const char **errorptr, int bracount, + int options, BOOL isclass) +{ + const uschar *ptr = *ptrptr; + int c, i; + + /* If backslash is at the end of the pattern, it's an error. */ + + c = *(++ptr); + if (c == 0) + *errorptr = ERR1; + + /* Non-alphamerics are literals. For digits or letters, do an initial lookup in + a table. A non-zero result is something that can be returned immediately. + Otherwise further processing may be required. */ + +#if !EBCDIC /* ASCII coding */ + else if (c < '0' || c > 'z') { + } /* Not alphameric */ + else if ((i = escapes[c - '0']) != 0) + c = i; + +#else /* EBCDIC coding */ + else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) { + } /* Not alphameric */ + else if ((i = escapes[c - 0x48]) != 0) + c = i; +#endif + + /* Escapes that need further processing, or are illegal. */ + + else { + const uschar *oldptr; + switch (c) { + /* A number of Perl escapes are not handled by PCRE. We give an explicit + error. */ + + case 'l': + case 'L': + case 'N': + case 'u': + case 'U': + *errorptr = ERR37; + break; + + /* The handling of escape sequences consisting of a string of digits + starting with one that is not zero is not straightforward. By experiment, + the way Perl works seems to be as follows: + + Outside a character class, the digits are read as a decimal number. If the + number is less than 10, or if there are that many previous extracting + left brackets, then it is a back reference. Otherwise, up to three octal + digits are read to form an escaped byte. Thus \123 is likely to be octal + 123 (cf \0123, which is octal 012 followed by the literal 3). If the octal + value is greater than 377, the least significant 8 bits are taken. Inside a + character class, \ followed by a digit is always an octal number. */ + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + + if (!isclass) { + oldptr = ptr; + c -= '0'; + while ((digitab[ptr[1]] & ctype_digit) != 0) + c = c * 10 + *(++ptr) - '0'; + if (c < 10 || c <= bracount) { + c = -(ESC_REF + c); + break; + } + ptr = oldptr; /* Put the pointer back and fall through */ + } + + /* Handle an octal number following \. If the first digit is 8 or 9, Perl + generates a binary zero byte and treats the digit as a following literal. + Thus we have to pull back the pointer by one. */ + + if ((c = *ptr) >= '8') { + ptr--; + c = 0; + break; + } + + /* \0 always starts an octal number, but we may drop through to here with a + larger first octal digit. */ + + case '0': + c -= '0'; + while (i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7') + c = c * 8 + *(++ptr) - '0'; + c &= 255; /* Take least significant 8 bits */ + break; + + /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number + which can be greater than 0xff, but only if the ddd are hex digits. */ + + case 'x': +#ifdef SUPPORT_UTF8 + if (ptr[1] == '{' && (options & PCRE_UTF8) != 0) { + const uschar *pt = ptr + 2; + register int count = 0; + c = 0; + while ((digitab[*pt] & ctype_xdigit) != 0) { + int cc = *pt++; + count++; +#if !EBCDIC /* ASCII coding */ + if (cc >= 'a') + cc -= 32; /* Convert to upper case */ + c = c * 16 + cc - ((cc < 'A') ? '0' : ('A' - 10)); +#else /* EBCDIC coding */ + if (cc >= 'a' && cc <= 'z') + cc += 64; /* Convert to upper case */ + c = c * 16 + cc - ((cc >= '0') ? '0' : ('A' - 10)); +#endif + } + if (*pt == '}') { + if (c < 0 || count > 8) + *errorptr = ERR34; + ptr = pt; + break; + } + /* If the sequence of hex digits does not end with '}', then we don't + recognize this construct; fall through to the normal \x handling. */ + } +#endif + + /* Read just a single hex char */ + + c = 0; + while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0) { + int cc; /* Some compilers don't like ++ */ + cc = *(++ptr); /* in initializers */ +#if !EBCDIC /* ASCII coding */ + if (cc >= 'a') + cc -= 32; /* Convert to upper case */ + c = c * 16 + cc - ((cc < 'A') ? '0' : ('A' - 10)); +#else /* EBCDIC coding */ + if (cc <= 'z') + cc += 64; /* Convert to upper case */ + c = c * 16 + cc - ((cc >= '0') ? '0' : ('A' - 10)); +#endif + } + break; + + /* Other special escapes not starting with a digit are straightforward */ + + case 'c': + c = *(++ptr); + if (c == 0) { + *errorptr = ERR2; + return 0; + } + + /* A letter is upper-cased; then the 0x40 bit is flipped. This coding + is ASCII-specific, but then the whole concept of \cx is ASCII-specific. + (However, an EBCDIC equivalent has now been added.) */ + +#if !EBCDIC /* ASCII coding */ + if (c >= 'a' && c <= 'z') + c -= 32; + c ^= 0x40; +#else /* EBCDIC coding */ + if (c >= 'a' && c <= 'z') + c += 64; + c ^= 0xC0; +#endif + break; + + /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any + other alphameric following \ is an error if PCRE_EXTRA was set; otherwise, + for Perl compatibility, it is a literal. This code looks a bit odd, but + there used to be some cases other than the default, and there may be again + in future, so I haven't "optimized" it. */ + + default: + if ((options & PCRE_EXTRA) != 0) + switch (c) { + default: + *errorptr = ERR3; + break; + } + break; + } + } + + *ptrptr = ptr; + return c; +} + + + +#ifdef SUPPORT_UCP +/************************************************* +* Handle \P and \p * +*************************************************/ + +/* This function is called after \P or \p has been encountered, provided that + PCRE is compiled with support for Unicode properties. On entry, ptrptr is + pointing at the P or p. On exit, it is pointing at the final character of the + escape sequence. + + Argument: + ptrptr points to the pattern position pointer + negptr points to a boolean that is set TRUE for negation else FALSE + errorptr points to the pointer to the error message + + Returns: value from ucp_type_table, or -1 for an invalid type + */ + +static int +get_ucp (const uschar ** ptrptr, BOOL * negptr, const char **errorptr) +{ + int c, i, bot, top; + const uschar *ptr = *ptrptr; + char name[4]; + + c = *(++ptr); + if (c == 0) + goto ERROR_RETURN; + + *negptr = FALSE; + + /* \P or \p can be followed by a one- or two-character name in {}, optionally + preceded by ^ for negation. */ + + if (c == '{') { + if (ptr[1] == '^') { + *negptr = TRUE; + ptr++; + } + for (i = 0; i <= 2; i++) { + c = *(++ptr); + if (c == 0) + goto ERROR_RETURN; + if (c == '}') + break; + name[i] = c; + } + if (c != '}') { /* Try to distinguish error cases */ + while (*(++ptr) != 0 && *ptr != '}'); + if (*ptr == '}') + goto UNKNOWN_RETURN; + else + goto ERROR_RETURN; + } + name[i] = 0; + } + + /* Otherwise there is just one following character */ + + else { + name[0] = c; + name[1] = 0; + } + + *ptrptr = ptr; + + /* Search for a recognized property name using binary chop */ + + bot = 0; + top = sizeof (utt) / sizeof (ucp_type_table); + + while (bot < top) { + i = (bot + top) / 2; + c = strcmp (name, utt[i].name); + if (c == 0) + return utt[i].value; + if (c > 0) + bot = i + 1; + else + top = i; + } + + UNKNOWN_RETURN: + *errorptr = ERR47; + *ptrptr = ptr; + return -1; + + ERROR_RETURN: + *errorptr = ERR46; + *ptrptr = ptr; + return -1; +} +#endif + + + + +/************************************************* +* Check for counted repeat * +*************************************************/ + +/* This function is called when a '{' is encountered in a place where it might + start a quantifier. It looks ahead to see if it really is a quantifier or not. + It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd} + where the ddds are digits. + + Arguments: + p pointer to the first char after '{' + + Returns: TRUE or FALSE + */ + +static BOOL +is_counted_repeat (const uschar * p) +{ + if ((digitab[*p++] & ctype_digit) == 0) + return FALSE; + while ((digitab[*p] & ctype_digit) != 0) + p++; + if (*p == '}') + return TRUE; + + if (*p++ != ',') + return FALSE; + if (*p == '}') + return TRUE; + + if ((digitab[*p++] & ctype_digit) == 0) + return FALSE; + while ((digitab[*p] & ctype_digit) != 0) + p++; + + return (*p == '}'); +} + + + +/************************************************* +* Read repeat counts * +*************************************************/ + +/* Read an item of the form {n,m} and return the values. This is called only + after is_counted_repeat() has confirmed that a repeat-count quantifier exists, + so the syntax is guaranteed to be correct, but we need to check the values. + + Arguments: + p pointer to first char after '{' + minp pointer to int for min + maxp pointer to int for max + returned as -1 if no max + errorptr points to pointer to error message + + Returns: pointer to '}' on success; + current ptr on error, with errorptr set + */ + +static const uschar * +read_repeat_counts (const uschar * p, int *minp, int *maxp, + const char **errorptr) +{ + int min = 0; + int max = -1; + + while ((digitab[*p] & ctype_digit) != 0) + min = min * 10 + *p++ - '0'; + + if (*p == '}') + max = min; + else { + if (*(++p) != '}') { + max = 0; + while ((digitab[*p] & ctype_digit) != 0) + max = max * 10 + *p++ - '0'; + if (max < min) { + *errorptr = ERR4; + return p; + } + } + } + + /* Do paranoid checks, then fill in the required variables, and pass back the + pointer to the terminating '}'. */ + + if (min > 65535 || max > 65535) + *errorptr = ERR5; + else { + *minp = min; + *maxp = max; + } + return p; +} + + + +/************************************************* +* Find first significant op code * +*************************************************/ + +/* This is called by several functions that scan a compiled expression looking + for a fixed first character, or an anchoring op code etc. It skips over things + that do not influence this. For some calls, a change of option is important. + For some calls, it makes sense to skip negative forward and all backward + assertions, and also the \b assertion; for others it does not. + + Arguments: + code pointer to the start of the group + options pointer to external options + optbit the option bit whose changing is significant, or + zero if none are + skipassert TRUE if certain assertions are to be skipped + + Returns: pointer to the first significant opcode + */ + +static const uschar * +first_significant_code (const uschar * code, int *options, int optbit, + BOOL skipassert) +{ + for (;;) { + switch ((int) *code) { + case OP_OPT: + if (optbit > 0 + && ((int) code[1] & optbit) != + (*options & optbit)) *options = (int) code[1]; + code += 2; + break; + + case OP_ASSERT_NOT: + case OP_ASSERTBACK: + case OP_ASSERTBACK_NOT: + if (!skipassert) + return code; + do + code += GET (code, 1); + while (*code == OP_ALT); + code += OP_lengths[*code]; + break; + + case OP_WORD_BOUNDARY: + case OP_NOT_WORD_BOUNDARY: + if (!skipassert) + return code; + /* Fall through */ + + case OP_CALLOUT: + case OP_CREF: + case OP_BRANUMBER: + code += OP_lengths[*code]; + break; + + default: + return code; + } + } + /* Control never reaches here */ +} + + + + +/************************************************* +* Find the fixed length of a pattern * +*************************************************/ + +/* Scan a pattern and compute the fixed length of subject that will match it, + if the length is fixed. This is needed for dealing with backward assertions. + In UTF8 mode, the result is in characters rather than bytes. + + Arguments: + code points to the start of the pattern (the bracket) + options the compiling options + + Returns: the fixed length, or -1 if there is no fixed length, + or -2 if \C was encountered + */ + +static int +find_fixedlength (uschar * code, int options) +{ + int length = -1; + + register int branchlength = 0; + register uschar *cc = code + 1 + LINK_SIZE; + + /* Scan along the opcodes for this branch. If we get to the end of the + branch, check the length against that of the other branches. */ + + for (;;) { + int d; + register int op = *cc; + if (op >= OP_BRA) + op = OP_BRA; + + switch (op) { + case OP_BRA: + case OP_ONCE: + case OP_COND: + d = find_fixedlength (cc, options); + if (d < 0) + return d; + branchlength += d; + do + cc += GET (cc, 1); + while (*cc == OP_ALT); + cc += 1 + LINK_SIZE; + break; + + /* Reached end of a branch; if it's a ket it is the end of a nested + call. If it's ALT it is an alternation in a nested call. If it is + END it's the end of the outer call. All can be handled by the same code. */ + + case OP_ALT: + case OP_KET: + case OP_KETRMAX: + case OP_KETRMIN: + case OP_END: + if (length < 0) + length = branchlength; + else if (length != branchlength) + return -1; + if (*cc != OP_ALT) + return length; + cc += 1 + LINK_SIZE; + branchlength = 0; + break; + + /* Skip over assertive subpatterns */ + + case OP_ASSERT: + case OP_ASSERT_NOT: + case OP_ASSERTBACK: + case OP_ASSERTBACK_NOT: + do + cc += GET (cc, 1); + while (*cc == OP_ALT); + /* Fall through */ + + /* Skip over things that don't match chars */ + + case OP_REVERSE: + case OP_BRANUMBER: + case OP_CREF: + case OP_OPT: + case OP_CALLOUT: + case OP_SOD: + case OP_SOM: + case OP_EOD: + case OP_EODN: + case OP_CIRC: + case OP_DOLL: + case OP_NOT_WORD_BOUNDARY: + case OP_WORD_BOUNDARY: + cc += OP_lengths[*cc]; + break; + + /* Handle literal characters */ + + case OP_CHAR: + case OP_CHARNC: + branchlength++; + cc += 2; +#ifdef SUPPORT_UTF8 + if ((options & PCRE_UTF8) != 0) { + while ((*cc & 0xc0) == 0x80) + cc++; + } +#endif + break; + + /* Handle exact repetitions. The count is already in characters, but we + need to skip over a multibyte character in UTF8 mode. */ + + case OP_EXACT: + branchlength += GET2 (cc, 1); + cc += 4; +#ifdef SUPPORT_UTF8 + if ((options & PCRE_UTF8) != 0) { + while ((*cc & 0x80) == 0x80) + cc++; + } +#endif + break; + + case OP_TYPEEXACT: + branchlength += GET2 (cc, 1); + cc += 4; + break; + + /* Handle single-char matchers */ + + case OP_PROP: + case OP_NOTPROP: + cc++; + /* Fall through */ + + case OP_NOT_DIGIT: + case OP_DIGIT: + case OP_NOT_WHITESPACE: + case OP_WHITESPACE: + case OP_NOT_WORDCHAR: + case OP_WORDCHAR: + case OP_ANY: + branchlength++; + cc++; + break; + + /* The single-byte matcher isn't allowed */ + + case OP_ANYBYTE: + return -2; + + /* Check a class for variable quantification */ + +#ifdef SUPPORT_UTF8 + case OP_XCLASS: + cc += GET (cc, 1) - 33; + /* Fall through */ +#endif + + case OP_CLASS: + case OP_NCLASS: + cc += 33; + + switch (*cc) { + case OP_CRSTAR: + case OP_CRMINSTAR: + case OP_CRQUERY: + case OP_CRMINQUERY: + return -1; + + case OP_CRRANGE: + case OP_CRMINRANGE: + if (GET2 (cc, 1) != GET2 (cc, 3)) + return -1; + branchlength += GET2 (cc, 1); + cc += 5; + break; + + default: + branchlength++; + } + break; + + /* Anything else is variable length */ + + default: + return -1; + } + } + /* Control never gets here */ +} + + + + +/************************************************* +* Scan compiled regex for numbered bracket * +*************************************************/ + +/* This little function scans through a compiled pattern until it finds a + capturing bracket with the given number. + + Arguments: + code points to start of expression + utf8 TRUE in UTF-8 mode + number the required bracket number + + Returns: pointer to the opcode for the bracket, or NULL if not found + */ + +static const uschar * +find_bracket (const uschar * code, BOOL utf8, int number) +{ +#ifndef SUPPORT_UTF8 + utf8 = utf8; /* Stop pedantic compilers complaining */ +#endif + + for (;;) { + register int c = *code; + if (c == OP_END) + return NULL; + else if (c > OP_BRA) { + int n = c - OP_BRA; + if (n > EXTRACT_BASIC_MAX) + n = GET2 (code, 2 + LINK_SIZE); + if (n == number) + return (uschar *) code; + code += OP_lengths[OP_BRA]; + } else { + code += OP_lengths[c]; + +#ifdef SUPPORT_UTF8 + + /* In UTF-8 mode, opcodes that are followed by a character may be followed + by a multi-byte character. The length in the table is a minimum, so we have + to scan along to skip the extra bytes. All opcodes are less than 128, so we + can use relatively efficient code. */ + + if (1 /* utf8 */ ) + switch (c) { + case OP_CHAR: + case OP_CHARNC: + case OP_EXACT: + case OP_UPTO: + case OP_MINUPTO: + case OP_STAR: + case OP_MINSTAR: + case OP_PLUS: + case OP_MINPLUS: + case OP_QUERY: + case OP_MINQUERY: + while ((*code & 0xc0) == 0x80) + code++; + break; + + /* XCLASS is used for classes that cannot be represented just by a bit + map. This includes negated single high-valued characters. The length in + the table is zero; the actual length is stored in the compiled code. */ + + case OP_XCLASS: + code += GET (code, 1) + 1; + break; + } +#endif + } + } +} + + + +/************************************************* +* Scan compiled regex for recursion reference * +*************************************************/ + +/* This little function scans through a compiled pattern until it finds an + instance of OP_RECURSE. + + Arguments: + code points to start of expression + utf8 TRUE in UTF-8 mode + + Returns: pointer to the opcode for OP_RECURSE, or NULL if not found + */ + +static const uschar * +find_recurse (const uschar * code, BOOL utf8) +{ +#ifndef SUPPORT_UTF8 + utf8 = utf8; /* Stop pedantic compilers complaining */ +#endif + + for (;;) { + register int c = *code; + if (c == OP_END) + return NULL; + else if (c == OP_RECURSE) + return code; + else if (c > OP_BRA) { + code += OP_lengths[OP_BRA]; + } else { + code += OP_lengths[c]; + +#ifdef SUPPORT_UTF8 + + /* In UTF-8 mode, opcodes that are followed by a character may be followed + by a multi-byte character. The length in the table is a minimum, so we have + to scan along to skip the extra bytes. All opcodes are less than 128, so we + can use relatively efficient code. */ + + if (1 /* utf8 */ ) + switch (c) { + case OP_CHAR: + case OP_CHARNC: + case OP_EXACT: + case OP_UPTO: + case OP_MINUPTO: + case OP_STAR: + case OP_MINSTAR: + case OP_PLUS: + case OP_MINPLUS: + case OP_QUERY: + case OP_MINQUERY: + while ((*code & 0xc0) == 0x80) + code++; + break; + + /* XCLASS is used for classes that cannot be represented just by a bit + map. This includes negated single high-valued characters. The length in + the table is zero; the actual length is stored in the compiled code. */ + + case OP_XCLASS: + code += GET (code, 1) + 1; + break; + } +#endif + } + } +} + + + +/************************************************* +* Scan compiled branch for non-emptiness * +*************************************************/ + +/* This function scans through a branch of a compiled pattern to see whether it + can match the empty string or not. It is called only from could_be_empty() + below. Note that first_significant_code() skips over assertions. If we hit an + unclosed bracket, we return "empty" - this means we've struck an inner bracket + whose current branch will already have been scanned. + + Arguments: + code points to start of search + endcode points to where to stop + utf8 TRUE if in UTF8 mode + + Returns: TRUE if what is matched could be empty + */ + +static BOOL +could_be_empty_branch (const uschar * code, const uschar * endcode, + BOOL utf8) +{ + register int c; + for (code = + first_significant_code (code + 1 + LINK_SIZE, NULL, 0, TRUE); + code < endcode; + code = + first_significant_code (code + OP_lengths[c], NULL, 0, TRUE)) { + const uschar *ccode; + + c = *code; + + if (c >= OP_BRA) { + BOOL empty_branch; + if (GET (code, 1) == 0) + return TRUE; /* Hit unclosed bracket */ + + /* Scan a closed bracket */ + + empty_branch = FALSE; + do { + if (!empty_branch + && could_be_empty_branch (code, endcode, + utf8)) empty_branch = TRUE; + code += GET (code, 1); + } + while (*code == OP_ALT); + if (!empty_branch) + return FALSE; /* All branches are non-empty */ + code += 1 + LINK_SIZE; + c = *code; + } + + else + switch (c) { + /* Check for quantifiers after a class */ + +#ifdef SUPPORT_UTF8 + case OP_XCLASS: + ccode = code + GET (code, 1); + goto CHECK_CLASS_REPEAT; +#endif + + case OP_CLASS: + case OP_NCLASS: + ccode = code + 33; + +#ifdef SUPPORT_UTF8 + CHECK_CLASS_REPEAT: +#endif + + switch (*ccode) { + case OP_CRSTAR: /* These could be empty; continue */ + case OP_CRMINSTAR: + case OP_CRQUERY: + case OP_CRMINQUERY: + break; + + default: /* Non-repeat => class must match */ + case OP_CRPLUS: /* These repeats aren't empty */ + case OP_CRMINPLUS: + return FALSE; + + case OP_CRRANGE: + case OP_CRMINRANGE: + if (GET2 (ccode, 1) > 0) + return FALSE; /* Minimum > 0 */ + break; + } + break; + + /* Opcodes that must match a character */ + + case OP_PROP: + case OP_NOTPROP: + case OP_EXTUNI: + case OP_NOT_DIGIT: + case OP_DIGIT: + case OP_NOT_WHITESPACE: + case OP_WHITESPACE: + case OP_NOT_WORDCHAR: + case OP_WORDCHAR: + case OP_ANY: + case OP_ANYBYTE: + case OP_CHAR: + case OP_CHARNC: + case OP_NOT: + case OP_PLUS: + case OP_MINPLUS: + case OP_EXACT: + case OP_NOTPLUS: + case OP_NOTMINPLUS: + case OP_NOTEXACT: + case OP_TYPEPLUS: + case OP_TYPEMINPLUS: + case OP_TYPEEXACT: + return FALSE; + + /* End of branch */ + + case OP_KET: + case OP_KETRMAX: + case OP_KETRMIN: + case OP_ALT: + return TRUE; + + /* In UTF-8 mode, STAR, MINSTAR, QUERY, MINQUERY, UPTO, and MINUPTO may be + followed by a multibyte character */ + +#ifdef SUPPORT_UTF8 + case OP_STAR: + case OP_MINSTAR: + case OP_QUERY: + case OP_MINQUERY: + case OP_UPTO: + case OP_MINUPTO: + if (1 /* utf8 */ ) + while ((code[2] & 0xc0) == 0x80) + code++; + break; +#endif + } + } + + return TRUE; +} + + + +/************************************************* +* Scan compiled regex for non-emptiness * +*************************************************/ + +/* This function is called to check for left recursive calls. We want to check + the current branch of the current pattern to see if it could match the empty + string. If it could, we must look outwards for branches at other levels, + stopping when we pass beyond the bracket which is the subject of the recursion. + + Arguments: + code points to start of the recursion + endcode points to where to stop (current RECURSE item) + bcptr points to the chain of current (unclosed) branch starts + utf8 TRUE if in UTF-8 mode + + Returns: TRUE if what is matched could be empty + */ + +static BOOL +could_be_empty (const uschar * code, const uschar * endcode, + branch_chain * bcptr, BOOL utf8) +{ + while (bcptr != NULL && bcptr->current >= code) { + if (!could_be_empty_branch (bcptr->current, endcode, utf8)) + return FALSE; + bcptr = bcptr->outer; + } + return TRUE; +} + + + +/************************************************* +* Check for POSIX class syntax * +*************************************************/ + +/* This function is called when the sequence "[:" or "[." or "[=" is + encountered in a character class. It checks whether this is followed by an + optional ^ and then a sequence of letters, terminated by a matching ":]" or + ".]" or "=]". + + Argument: + ptr pointer to the initial [ + endptr where to return the end pointer + cd pointer to compile data + + Returns: TRUE or FALSE + */ + +static BOOL +check_posix_syntax (const uschar * ptr, const uschar ** endptr, + compile_data * cd) +{ + int terminator; /* Don't combine these lines; the Solaris cc */ + terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */ + if (*(++ptr) == '^') + ptr++; + while ((cd->ctypes[*ptr] & ctype_letter) != 0) + ptr++; + if (*ptr == terminator && ptr[1] == ']') { + *endptr = ptr; + return TRUE; + } + return FALSE; +} + + + + +/************************************************* +* Check POSIX class name * +*************************************************/ + +/* This function is called to check the name given in a POSIX-style class entry + such as [:alnum:]. + + Arguments: + ptr points to the first letter + len the length of the name + + Returns: a value representing the name, or -1 if unknown + */ + +static int +check_posix_name (const uschar * ptr, int len) +{ + register int yield = 0; + while (posix_name_lengths[yield] != 0) { + if (len == posix_name_lengths[yield] && + strncmp ((const char *) ptr, posix_names[yield], len) == 0) + return yield; + yield++; + } + return -1; +} + + +/************************************************* +* Adjust OP_RECURSE items in repeated group * +*************************************************/ + +/* OP_RECURSE items contain an offset from the start of the regex to the group + that is referenced. This means that groups can be replicated for fixed + repetition simply by copying (because the recursion is allowed to refer to + earlier groups that are outside the current group). However, when a group is + optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before + it, after it has been compiled. This means that any OP_RECURSE items within it + that refer to the group itself or any contained groups have to have their + offsets adjusted. That is the job of this function. Before it is called, the + partially compiled regex must be temporarily terminated with OP_END. + + Arguments: + group points to the start of the group + adjust the amount by which the group is to be moved + utf8 TRUE in UTF-8 mode + cd contains pointers to tables etc. + + Returns: nothing + */ + +static void +adjust_recurse (uschar * group, int adjust, BOOL utf8, compile_data * cd) +{ + uschar *ptr = group; + while ((ptr = (uschar *) find_recurse (ptr, utf8)) != NULL) { + int offset = GET (ptr, 1); + if (cd->start_code + offset >= group) + PUT (ptr, 1, offset + adjust); + ptr += 1 + LINK_SIZE; + } +} + + + +/************************************************* +* Insert an automatic callout point * +*************************************************/ + +/* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert + callout points before each pattern item. + + Arguments: + code current code pointer + ptr current pattern pointer + cd pointers to tables etc + + Returns: new code pointer + */ + +static uschar * +auto_callout (uschar * code, const uschar * ptr, compile_data * cd) +{ + *code++ = OP_CALLOUT; + *code++ = 255; + PUT (code, 0, ptr - cd->start_pattern); /* Pattern offset */ + PUT (code, LINK_SIZE, 0); /* Default length */ + return code + 2 * LINK_SIZE; +} + + + +/************************************************* +* Complete a callout item * +*************************************************/ + +/* A callout item contains the length of the next item in the pattern, which + we can't fill in till after we have reached the relevant point. This is used + for both automatic and manual callouts. + + Arguments: + previous_callout points to previous callout item + ptr current pattern pointer + cd pointers to tables etc + + Returns: nothing + */ + +static void +complete_callout (uschar * previous_callout, const uschar * ptr, + compile_data * cd) +{ + int length = ptr - cd->start_pattern - GET (previous_callout, 2); + PUT (previous_callout, 2 + LINK_SIZE, length); +} + + + +#ifdef SUPPORT_UCP +/************************************************* +* Get othercase range * +*************************************************/ + +/* This function is passed the start and end of a class range, in UTF-8 mode + with UCP support. It searches up the characters, looking for internal ranges of + characters in the "other" case. Each call returns the next one, updating the + start address. + + Arguments: + cptr points to starting character value; updated + d end value + ocptr where to put start of othercase range + odptr where to put end of othercase range + + Yield: TRUE when range returned; FALSE when no more + */ + +static BOOL +get_othercase_range (int *cptr, int d, int *ocptr, int *odptr) +{ + int c, chartype, othercase, next; + + for (c = *cptr; c <= d; c++) { + if (ucp_findchar (c, &chartype, &othercase) == ucp_L + && othercase != 0) + break; + } + + if (c > d) + return FALSE; + + *ocptr = othercase; + next = othercase + 1; + + for (++c; c <= d; c++) { + if (ucp_findchar (c, &chartype, &othercase) != ucp_L + || othercase != next) + break; + next++; + } + + *odptr = next - 1; + *cptr = c; + + return TRUE; +} +#endif /* SUPPORT_UCP */ + + +/************************************************* +* Compile one branch * +*************************************************/ + +/* Scan the pattern, compiling it into the code vector. If the options are + changed during the branch, the pointer is used to change the external options + bits. + + Arguments: + optionsptr pointer to the option bits + brackets points to number of extracting brackets used + codeptr points to the pointer to the current code point + ptrptr points to the current pattern pointer + errorptr points to pointer to error message + firstbyteptr set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE) + reqbyteptr set to the last literal character required, else < 0 + bcptr points to current branch chain + cd contains pointers to tables etc. + + Returns: TRUE on success + FALSE, with *errorptr set on error + */ + +static BOOL +compile_branch (int *optionsptr, int *brackets, uschar ** codeptr, + const uschar ** ptrptr, const char **errorptr, + int *firstbyteptr, int *reqbyteptr, branch_chain * bcptr, + compile_data * cd) +{ + int repeat_type, op_type; + int repeat_min = 0, repeat_max = 0; /* To please picky compilers */ + int bravalue = 0; + int greedy_default, greedy_non_default; + int firstbyte, reqbyte; + int zeroreqbyte, zerofirstbyte; + int req_caseopt, reqvary, tempreqvary; + int condcount = 0; + int options = *optionsptr; + int after_manual_callout = 0; + register int c; + register uschar *code = *codeptr; + uschar *tempcode; + BOOL inescq = FALSE; + BOOL groupsetfirstbyte = FALSE; + const uschar *ptr = *ptrptr; + const uschar *tempptr; + uschar *previous = NULL; + uschar *previous_callout = NULL; + uschar classbits[32]; + +#ifdef SUPPORT_UTF8 + BOOL class_utf8; + BOOL utf8 = (options & PCRE_UTF8) != 0; + uschar *class_utf8data; + uschar utf8_char[6]; +#else + BOOL utf8 = FALSE; +#endif + + /* Set up the default and non-default settings for greediness */ + + greedy_default = ((options & PCRE_UNGREEDY) != 0); + greedy_non_default = greedy_default ^ 1; + + /* Initialize no first byte, no required byte. REQ_UNSET means "no char + matching encountered yet". It gets changed to REQ_NONE if we hit something that + matches a non-fixed char first char; reqbyte just remains unset if we never + find one. + + When we hit a repeat whose minimum is zero, we may have to adjust these values + to take the zero repeat into account. This is implemented by setting them to + zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual + item types that can be repeated set these backoff variables appropriately. */ + + firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET; + + /* The variable req_caseopt contains either the REQ_CASELESS value or zero, + according to the current setting of the caseless flag. REQ_CASELESS is a bit + value > 255. It is added into the firstbyte or reqbyte variables to record the + case status of the value. This is used only for ASCII characters. */ + + req_caseopt = ((options & PCRE_CASELESS) != 0) ? REQ_CASELESS : 0; + + /* Switch on next character until the end of the branch */ + + for (;; ptr++) { + BOOL negate_class; + BOOL possessive_quantifier; + BOOL is_quantifier; + int class_charcount; + int class_lastchar; + int newoptions; + int recno; + int skipbytes; + int subreqbyte; + int subfirstbyte; + int mclength; + uschar mcbuffer[8]; + + /* Next byte in the pattern */ + + c = *ptr; + + /* If in \Q...\E, check for the end; if not, we have a literal */ + + if (inescq && c != 0) { + if (c == '\\' && ptr[1] == 'E') { + inescq = FALSE; + ptr++; + continue; + } else { + if (previous_callout != NULL) { + complete_callout (previous_callout, ptr, cd); + previous_callout = NULL; + } + if ((options & PCRE_AUTO_CALLOUT) != 0) { + previous_callout = code; + code = auto_callout (code, ptr, cd); + } + goto NORMAL_CHAR; + } + } + + /* Fill in length of a previous callout, except when the next thing is + a quantifier. */ + + is_quantifier = c == '*' || c == '+' || c == '?' || + (c == '{' && is_counted_repeat (ptr + 1)); + + if (!is_quantifier && previous_callout != NULL && + after_manual_callout-- <= 0) { + complete_callout (previous_callout, ptr, cd); + previous_callout = NULL; + } + + /* In extended mode, skip white space and comments */ + + if ((options & PCRE_EXTENDED) != 0) { + if ((cd->ctypes[c] & ctype_space) != 0) + continue; + if (c == '#') { + /* The space before the ; is to avoid a warning on a silly compiler + on the Macintosh. */ + while ((c = *(++ptr)) != 0 && c != NEWLINE); + if (c != 0) + continue; /* Else fall through to handle end of string */ + } + } + + /* No auto callout for quantifiers. */ + + if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier) { + previous_callout = code; + code = auto_callout (code, ptr, cd); + } + + switch (c) { + /* The branch terminates at end of string, |, or ). */ + + case 0: + case '|': + case ')': + *firstbyteptr = firstbyte; + *reqbyteptr = reqbyte; + *codeptr = code; + *ptrptr = ptr; + return TRUE; + + /* Handle single-character metacharacters. In multiline mode, ^ disables + the setting of any following char as a first character. */ + + case '^': + if ((options & PCRE_MULTILINE) != 0) { + if (firstbyte == REQ_UNSET) + firstbyte = REQ_NONE; + } + previous = NULL; + *code++ = OP_CIRC; + break; + + case '$': + previous = NULL; + *code++ = OP_DOLL; + break; + + /* There can never be a first char if '.' is first, whatever happens about + repeats. The value of reqbyte doesn't change either. */ + + case '.': + if (firstbyte == REQ_UNSET) + firstbyte = REQ_NONE; + zerofirstbyte = firstbyte; + zeroreqbyte = reqbyte; + previous = code; + *code++ = OP_ANY; + break; + + /* Character classes. If the included characters are all < 255 in value, we + build a 32-byte bitmap of the permitted characters, except in the special + case where there is only one such character. For negated classes, we build + the map as usual, then invert it at the end. However, we use a different + opcode so that data characters > 255 can be handled correctly. + + If the class contains characters outside the 0-255 range, a different + opcode is compiled. It may optionally have a bit map for characters < 256, + but those above are are explicitly listed afterwards. A flag byte tells + whether the bitmap is present, and whether this is a negated class or not. + */ + + case '[': + previous = code; + + /* PCRE supports POSIX class stuff inside a class. Perl gives an error if + they are encountered at the top level, so we'll do that too. */ + + if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && + check_posix_syntax (ptr, &tempptr, cd)) { + *errorptr = (ptr[1] == ':') ? ERR13 : ERR31; + goto FAILED; + } + + /* If the first character is '^', set the negation flag and skip it. */ + + if ((c = *(++ptr)) == '^') { + negate_class = TRUE; + c = *(++ptr); + } else { + negate_class = FALSE; + } + + /* Keep a count of chars with values < 256 so that we can optimize the case + of just a single character (as long as it's < 256). For higher valued UTF-8 + characters, we don't yet do any optimization. */ + + class_charcount = 0; + class_lastchar = -1; + +#ifdef SUPPORT_UTF8 + class_utf8 = FALSE; /* No chars >= 256 */ + class_utf8data = code + LINK_SIZE + 34; /* For UTF-8 items */ +#endif + + /* Initialize the 32-char bit map to all zeros. We have to build the + map in a temporary bit of store, in case the class contains only 1 + character (< 256), because in that case the compiled code doesn't use the + bit map. */ + + memset (classbits, 0, 32 * sizeof (uschar)); + + /* Process characters until ] is reached. By writing this as a "do" it + means that an initial ] is taken as a data character. The first pass + through the regex checked the overall syntax, so we don't need to be very + strict here. At the start of the loop, c contains the first byte of the + character. */ + + do { +#ifdef SUPPORT_UTF8 + if (utf8 && c > 127) { /* Braces are required because the */ + GETCHARLEN (c, ptr, ptr); /* macro generates multiple statements */ + } +#endif + + /* Inside \Q...\E everything is literal except \E */ + + if (inescq) { + if (c == '\\' && ptr[1] == 'E') { + inescq = FALSE; + ptr++; + continue; + } else + goto LONE_SINGLE_CHARACTER; + } + + /* Handle POSIX class names. Perl allows a negation extension of the + form [:^name:]. A square bracket that doesn't match the syntax is + treated as a literal. We also recognize the POSIX constructions + [.ch.] and [=ch=] ("collating elements") and fault them, as Perl + 5.6 and 5.8 do. */ + + if (c == '[' && + (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && + check_posix_syntax (ptr, &tempptr, cd)) { + BOOL local_negate = FALSE; + int posix_class, i; + register const uschar *cbits = cd->cbits; + + if (ptr[1] != ':') { + *errorptr = ERR31; + goto FAILED; + } + + ptr += 2; + if (*ptr == '^') { + local_negate = TRUE; + ptr++; + } + + posix_class = check_posix_name (ptr, tempptr - ptr); + if (posix_class < 0) { + *errorptr = ERR30; + goto FAILED; + } + + /* If matching is caseless, upper and lower are converted to + alpha. This relies on the fact that the class table starts with + alpha, lower, upper as the first 3 entries. */ + + if ((options & PCRE_CASELESS) != 0 && posix_class <= 2) + posix_class = 0; + + /* Or into the map we are building up to 3 of the static class + tables, or their negations. The [:blank:] class sets up the same + chars as the [:space:] class (all white space). We remove the vertical + white space chars afterwards. */ + + posix_class *= 3; + for (i = 0; i < 3; i++) { + BOOL blankclass = + strncmp ((char *) ptr, "blank", 5) == 0; + int taboffset = posix_class_maps[posix_class + i]; + if (taboffset < 0) + break; + if (local_negate) { + if (i == 0) + for (c = 0; c < 32; c++) + classbits[c] |= ~cbits[c + taboffset]; + else + for (c = 0; c < 32; c++) + classbits[c] &= ~cbits[c + taboffset]; + if (blankclass) + classbits[1] |= 0x3c; + } else { + for (c = 0; c < 32; c++) + classbits[c] |= cbits[c + taboffset]; + if (blankclass) + classbits[1] &= ~0x3c; + } + } + + ptr = tempptr + 1; + class_charcount = 10; /* Set > 1; assumes more than 1 per class */ + continue; /* End of POSIX syntax handling */ + } + + /* Backslash may introduce a single character, or it may introduce one + of the specials, which just set a flag. Escaped items are checked for + validity in the pre-compiling pass. The sequence \b is a special case. + Inside a class (and only there) it is treated as backspace. Elsewhere + it marks a word boundary. Other escapes have preset maps ready to + or into the one we are building. We assume they have more than one + character in them, so set class_charcount bigger than one. */ + + if (c == '\\') { + c = + check_escape (&ptr, errorptr, *brackets, options, + TRUE); + + if (-c == ESC_b) + c = '\b'; /* \b is backslash in a class */ + else if (-c == ESC_X) + c = 'X'; /* \X is literal X in a class */ + else if (-c == ESC_Q) { /* Handle start of quoted string */ + if (ptr[1] == '\\' && ptr[2] == 'E') { + ptr += 2; /* avoid empty string */ + } else + inescq = TRUE; + continue; + } + + if (c < 0) { + register const uschar *cbits = cd->cbits; + class_charcount += 2; /* Greater than 1 is what matters */ + switch (-c) { + case ESC_d: + for (c = 0; c < 32; c++) + classbits[c] |= cbits[c + cbit_digit]; + continue; + + case ESC_D: + for (c = 0; c < 32; c++) + classbits[c] |= ~cbits[c + cbit_digit]; + continue; + + case ESC_w: + for (c = 0; c < 32; c++) + classbits[c] |= cbits[c + cbit_word]; + continue; + + case ESC_W: + for (c = 0; c < 32; c++) + classbits[c] |= ~cbits[c + cbit_word]; + continue; + + case ESC_s: + for (c = 0; c < 32; c++) + classbits[c] |= cbits[c + cbit_space]; + classbits[1] &= ~0x08; /* Perl 5.004 onwards omits VT from \s */ + continue; + + case ESC_S: + for (c = 0; c < 32; c++) + classbits[c] |= ~cbits[c + cbit_space]; + classbits[1] |= 0x08; /* Perl 5.004 onwards omits VT from \s */ + continue; + +#ifdef SUPPORT_UCP + case ESC_p: + case ESC_P: + { + BOOL negated; + int property = + get_ucp (&ptr, &negated, errorptr); + if (property < 0) + goto FAILED; + class_utf8 = TRUE; + *class_utf8data++ = + ((-c == ESC_p) != + negated) ? XCL_PROP : XCL_NOTPROP; + *class_utf8data++ = property; + class_charcount -= 2; /* Not a < 256 character */ + } + continue; +#endif + + /* Unrecognized escapes are faulted if PCRE is running in its + strict mode. By default, for compatibility with Perl, they are + treated as literals. */ + + default: + if ((options & PCRE_EXTRA) != 0) { + *errorptr = ERR7; + goto FAILED; + } + c = *ptr; /* The final character */ + class_charcount -= 2; /* Undo the default count from above */ + } + } + + /* Fall through if we have a single character (c >= 0). This may be + > 256 in UTF-8 mode. */ + + } + + + /* End of backslash handling */ + /* A single character may be followed by '-' to form a range. However, + Perl does not permit ']' to be the end of the range. A '-' character + here is treated as a literal. */ + if (ptr[1] == '-' && ptr[2] != ']') { + int d; + ptr += 2; + +#ifdef SUPPORT_UTF8 + if (1 /* utf8 */ ) { /* Braces are required because the */ + GETCHARLEN (d, ptr, ptr); /* macro generates multiple statements */ + } else +#endif + d = *ptr; /* Not UTF-8 mode */ + + /* The second part of a range can be a single-character escape, but + not any of the other escapes. Perl 5.6 treats a hyphen as a literal + in such circumstances. */ + + if (d == '\\') { + const uschar *oldptr = ptr; + d = + check_escape (&ptr, errorptr, *brackets, + options, TRUE); + + /* \b is backslash; \X is literal X; any other special means the '-' + was literal */ + + if (d < 0) { + if (d == -ESC_b) + d = '\b'; + else if (d == -ESC_X) + d = 'X'; + else { + ptr = oldptr - 2; + goto LONE_SINGLE_CHARACTER; /* A few lines below */ + } + } + } + + /* The check that the two values are in the correct order happens in + the pre-pass. Optimize one-character ranges */ + + if (d == c) + goto LONE_SINGLE_CHARACTER; /* A few lines below */ + + /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless + matching, we have to use an XCLASS with extra data items. Caseless + matching for characters > 127 is available only if UCP support is + available. */ + +#ifdef SUPPORT_UTF8 + if (utf8 + && (d > 255 + || ((options & PCRE_CASELESS) != 0 + && d > 127))) { + class_utf8 = TRUE; + + /* With UCP support, we can find the other case equivalents of + the relevant characters. There may be several ranges. Optimize how + they fit with the basic range. */ + +#ifdef SUPPORT_UCP + if ((options & PCRE_CASELESS) != 0) { + int occ, ocd; + int cc = c; + int origd = d; + while (get_othercase_range + (&cc, origd, &occ, &ocd)) { + if (occ >= c && ocd <= d) + continue; /* Skip embedded ranges */ + + if (occ < c && ocd >= c - 1) { /* Extend the basic range *//* if there is overlap, */ + c = occ; /* noting that if occ < c */ + continue; /* we can't have ocd > d */ + } /* because a subrange is */ + if (ocd > d && occ <= d + 1) { /* always shorter than *//* the basic range. */ + d = ocd; + continue; + } + + if (occ == ocd) { + *class_utf8data++ = XCL_SINGLE; + } else { + *class_utf8data++ = XCL_RANGE; + class_utf8data += + g_unichar_to_utf8 (occ, + class_utf8data); + } + class_utf8data += + g_unichar_to_utf8 (ocd, + class_utf8data); + } + } +#endif /* SUPPORT_UCP */ + + /* Now record the original range, possibly modified for UCP caseless + overlapping ranges. */ + + *class_utf8data++ = XCL_RANGE; + class_utf8data += + g_unichar_to_utf8 (c, class_utf8data); + class_utf8data += + g_unichar_to_utf8 (d, class_utf8data); + + /* With UCP support, we are done. Without UCP support, there is no + caseless matching for UTF-8 characters > 127; we can use the bit map + for the smaller ones. */ + +#ifdef SUPPORT_UCP + continue; /* With next character in the class */ +#else + if ((options & PCRE_CASELESS) == 0 || c > 127) + continue; + + /* Adjust upper limit and fall through to set up the map */ + + d = 127; + +#endif /* SUPPORT_UCP */ + } +#endif /* SUPPORT_UTF8 */ + + /* We use the bit map for all cases when not in UTF-8 mode; else + ranges that lie entirely within 0-127 when there is UCP support; else + for partial ranges without UCP support. */ + + for (; c <= d; c++) { + classbits[c / 8] |= (1 << (c & 7)); + if ((options & PCRE_CASELESS) != 0) { + int uc = cd->fcc[c]; /* flip case */ + classbits[uc / 8] |= (1 << (uc & 7)); + } + class_charcount++; /* in case a one-char range */ + class_lastchar = c; + } + + continue; /* Go get the next char in the class */ + } + + /* Handle a lone single character - we can get here for a normal + non-escape char, or after \ that introduces a single character or for an + apparent range that isn't. */ + + LONE_SINGLE_CHARACTER: + + /* Handle a character that cannot go in the bit map */ + +#ifdef SUPPORT_UTF8 + if (utf8 + && (c > 255 + || ((options & PCRE_CASELESS) != 0 && c > 127))) { + class_utf8 = TRUE; + *class_utf8data++ = XCL_SINGLE; + class_utf8data += + g_unichar_to_utf8 (c, class_utf8data); + +#ifdef SUPPORT_UCP + if ((options & PCRE_CASELESS) != 0) { + int chartype; + int othercase; + if (ucp_findchar (c, &chartype, &othercase) >= 0 + && othercase > 0) { + *class_utf8data++ = XCL_SINGLE; + class_utf8data += + g_unichar_to_utf8 (othercase, + class_utf8data); + } + } +#endif /* SUPPORT_UCP */ + + } else +#endif /* SUPPORT_UTF8 */ + + /* Handle a single-byte character */ + { + classbits[c / 8] |= (1 << (c & 7)); + if ((options & PCRE_CASELESS) != 0) { + c = cd->fcc[c]; /* flip case */ + classbits[c / 8] |= (1 << (c & 7)); + } + class_charcount++; + class_lastchar = c; + } + } + + /* Loop until ']' reached; the check for end of string happens inside the + loop. This "while" is the end of the "do" above. */ + + while ((c = *(++ptr)) != ']' || inescq); + + /* If class_charcount is 1, we saw precisely one character whose value is + less than 256. In non-UTF-8 mode we can always optimize. In UTF-8 mode, we + can optimize the negative case only if there were no characters >= 128 + because OP_NOT and the related opcodes like OP_NOTSTAR operate on + single-bytes only. This is an historical hangover. Maybe one day we can + tidy these opcodes to handle multi-byte characters. + + The optimization throws away the bit map. We turn the item into a + 1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note + that OP_NOT does not support multibyte characters. In the positive case, it + can cause firstbyte to be set. Otherwise, there can be no first char if + this item is first, whatever repeat count may follow. In the case of + reqbyte, save the previous value for reinstating. */ + +#ifdef SUPPORT_UTF8 + if (class_charcount == 1 && + (!utf8 || + (!class_utf8 && (!negate_class || class_lastchar < 128)))) +#else + if (class_charcount == 1) +#endif + { + zeroreqbyte = reqbyte; + + /* The OP_NOT opcode works on one-byte characters only. */ + + if (negate_class) { + if (firstbyte == REQ_UNSET) + firstbyte = REQ_NONE; + zerofirstbyte = firstbyte; + *code++ = OP_NOT; + *code++ = class_lastchar; + break; + } + + /* For a single, positive character, get the value into mcbuffer, and + then we can handle this with the normal one-character code. */ + +#ifdef SUPPORT_UTF8 + if (utf8 && class_lastchar > 127) + mclength = + g_unichar_to_utf8 (class_lastchar, mcbuffer); + else +#endif + { + mcbuffer[0] = class_lastchar; + mclength = 1; + } + goto ONE_CHAR; + } + + + /* End of 1-char optimization */ + /* The general case - not the one-char optimization. If this is the first + thing in the branch, there can be no first char setting, whatever the + repeat count. Any reqbyte setting must remain unchanged after any kind of + repeat. */ + if (firstbyte == REQ_UNSET) + firstbyte = REQ_NONE; + zerofirstbyte = firstbyte; + zeroreqbyte = reqbyte; + + /* If there are characters with values > 255, we have to compile an + extended class, with its own opcode. If there are no characters < 256, + we can omit the bitmap. */ + +#ifdef SUPPORT_UTF8 + if (class_utf8) { + *class_utf8data++ = XCL_END; /* Marks the end of extra data */ + *code++ = OP_XCLASS; + code += LINK_SIZE; + *code = negate_class ? XCL_NOT : 0; + + /* If the map is required, install it, and move on to the end of + the extra data */ + + if (class_charcount > 0) { + *code++ |= XCL_MAP; + memcpy (code, classbits, 32); + code = class_utf8data; + } + + /* If the map is not required, slide down the extra data. */ + + else { + int len = class_utf8data - (code + 33); + memmove (code + 1, code + 33, len); + code += len + 1; + } + + /* Now fill in the complete length of the item */ + + PUT (previous, 1, code - previous); + break; /* End of class handling */ + } +#endif + + /* If there are no characters > 255, negate the 32-byte map if necessary, + and copy it into the code vector. If this is the first thing in the branch, + there can be no first char setting, whatever the repeat count. Any reqbyte + setting must remain unchanged after any kind of repeat. */ + + if (negate_class) { + *code++ = OP_NCLASS; + for (c = 0; c < 32; c++) + code[c] = ~classbits[c]; + } else { + *code++ = OP_CLASS; + memcpy (code, classbits, 32); + } + code += 32; + break; + + /* Various kinds of repeat; '{' is not necessarily a quantifier, but this + has been tested above. */ + + case '{': + if (!is_quantifier) + goto NORMAL_CHAR; + ptr = + read_repeat_counts (ptr + 1, &repeat_min, &repeat_max, + errorptr); + if (*errorptr != NULL) + goto FAILED; + goto REPEAT; + + case '*': + repeat_min = 0; + repeat_max = -1; + goto REPEAT; + + case '+': + repeat_min = 1; + repeat_max = -1; + goto REPEAT; + + case '?': + repeat_min = 0; + repeat_max = 1; + + REPEAT: + if (previous == NULL) { + *errorptr = ERR9; + goto FAILED; + } + + if (repeat_min == 0) { + firstbyte = zerofirstbyte; /* Adjust for zero repeat */ + reqbyte = zeroreqbyte; /* Ditto */ + } + + /* Remember whether this is a variable length repeat */ + + reqvary = (repeat_min == repeat_max) ? 0 : REQ_VARY; + + op_type = 0; /* Default single-char op codes */ + possessive_quantifier = FALSE; /* Default not possessive quantifier */ + + /* Save start of previous item, in case we have to move it up to make space + for an inserted OP_ONCE for the additional '+' extension. */ + + tempcode = previous; + + /* If the next character is '+', we have a possessive quantifier. This + implies greediness, whatever the setting of the PCRE_UNGREEDY option. + If the next character is '?' this is a minimizing repeat, by default, + but if PCRE_UNGREEDY is set, it works the other way round. We change the + repeat type to the non-default. */ + + if (ptr[1] == '+') { + repeat_type = 0; /* Force greedy */ + possessive_quantifier = TRUE; + ptr++; + } else if (ptr[1] == '?') { + repeat_type = greedy_non_default; + ptr++; + } else + repeat_type = greedy_default; + + /* If previous was a recursion, we need to wrap it inside brackets so that + it can be replicated if necessary. */ + + if (*previous == OP_RECURSE) { + memmove (previous + 1 + LINK_SIZE, previous, + 1 + LINK_SIZE); + code += 1 + LINK_SIZE; + *previous = OP_BRA; + PUT (previous, 1, code - previous); + *code = OP_KET; + PUT (code, 1, code - previous); + code += 1 + LINK_SIZE; + } + + /* If previous was a character match, abolish the item and generate a + repeat item instead. If a char item has a minumum of more than one, ensure + that it is set in reqbyte - it might not be if a sequence such as x{3} is + the first thing in a branch because the x will have gone into firstbyte + instead. */ + + if (*previous == OP_CHAR || *previous == OP_CHARNC) { + /* Deal with UTF-8 characters that take up more than one byte. It's + easier to write this out separately than try to macrify it. Use c to + hold the length of the character in bytes, plus 0x80 to flag that it's a + length rather than a small character. */ + +#ifdef SUPPORT_UTF8 + if (utf8 && (code[-1] & 0x80) != 0) { + uschar *lastchar = code - 1; + while ((*lastchar & 0xc0) == 0x80) + lastchar--; + c = code - lastchar; /* Length of UTF-8 character */ + memcpy (utf8_char, lastchar, c); /* Save the char */ + c |= 0x80; /* Flag c as a length */ + } else +#endif + + /* Handle the case of a single byte - either with no UTF8 support, or + with UTF-8 disabled, or for a UTF-8 character < 128. */ + + { + c = code[-1]; + if (repeat_min > 1) + reqbyte = c | req_caseopt | cd->req_varyopt; + } + + goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */ + } + + /* If previous was a single negated character ([^a] or similar), we use + one of the special opcodes, replacing it. The code is shared with single- + character repeats by setting opt_type to add a suitable offset into + repeat_type. OP_NOT is currently used only for single-byte chars. */ + + else if (*previous == OP_NOT) { + op_type = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */ + c = previous[1]; + goto OUTPUT_SINGLE_REPEAT; + } + + /* If previous was a character type match (\d or similar), abolish it and + create a suitable repeat item. The code is shared with single-character + repeats by setting op_type to add a suitable offset into repeat_type. Note + the the Unicode property types will be present only when SUPPORT_UCP is + defined, but we don't wrap the little bits of code here because it just + makes it horribly messy. */ + + else if (*previous < OP_EODN) { + uschar *oldcode; + int prop_type; + op_type = OP_TYPESTAR - OP_STAR; /* Use type opcodes */ + c = *previous; + + OUTPUT_SINGLE_REPEAT: + prop_type = (*previous == OP_PROP + || *previous == + OP_NOTPROP) ? previous[1] : -1; + + oldcode = code; + code = previous; /* Usually overwrite previous item */ + + /* If the maximum is zero then the minimum must also be zero; Perl allows + this case, so we do too - by simply omitting the item altogether. */ + + if (repeat_max == 0) + goto END_REPEAT; + + /* All real repeats make it impossible to handle partial matching (maybe + one day we will be able to remove this restriction). */ + + if (repeat_max != 1) + cd->nopartial = TRUE; + + /* Combine the op_type with the repeat_type */ + + repeat_type += op_type; + + /* A minimum of zero is handled either as the special case * or ?, or as + an UPTO, with the maximum given. */ + + if (repeat_min == 0) { + if (repeat_max == -1) + *code++ = OP_STAR + repeat_type; + else if (repeat_max == 1) + *code++ = OP_QUERY + repeat_type; + else { + *code++ = OP_UPTO + repeat_type; + PUT2INC (code, 0, repeat_max); + } + } + + /* A repeat minimum of 1 is optimized into some special cases. If the + maximum is unlimited, we use OP_PLUS. Otherwise, the original item it + left in place and, if the maximum is greater than 1, we use OP_UPTO with + one less than the maximum. */ + + else if (repeat_min == 1) { + if (repeat_max == -1) + *code++ = OP_PLUS + repeat_type; + else { + code = oldcode; /* leave previous item in place */ + if (repeat_max == 1) + goto END_REPEAT; + *code++ = OP_UPTO + repeat_type; + PUT2INC (code, 0, repeat_max - 1); + } + } + + /* The case {n,n} is just an EXACT, while the general case {n,m} is + handled as an EXACT followed by an UPTO. */ + + else { + *code++ = OP_EXACT + op_type; /* NB EXACT doesn't have repeat_type */ + PUT2INC (code, 0, repeat_min); + + /* If the maximum is unlimited, insert an OP_STAR. Before doing so, + we have to insert the character for the previous code. For a repeated + Unicode property match, there is an extra byte that defines the + required property. In UTF-8 mode, long characters have their length in + c, with the 0x80 bit as a flag. */ + + if (repeat_max < 0) { +#ifdef SUPPORT_UTF8 + if (utf8 && c >= 128) { + memcpy (code, utf8_char, c & 7); + code += c & 7; + } else +#endif + { + *code++ = c; + if (prop_type >= 0) + *code++ = prop_type; + } + *code++ = OP_STAR + repeat_type; + } + + /* Else insert an UPTO if the max is greater than the min, again + preceded by the character, for the previously inserted code. */ + + else if (repeat_max != repeat_min) { +#ifdef SUPPORT_UTF8 + if (utf8 && c >= 128) { + memcpy (code, utf8_char, c & 7); + code += c & 7; + } else +#endif + *code++ = c; + if (prop_type >= 0) + *code++ = prop_type; + repeat_max -= repeat_min; + *code++ = OP_UPTO + repeat_type; + PUT2INC (code, 0, repeat_max); + } + } + + /* The character or character type itself comes last in all cases. */ + +#ifdef SUPPORT_UTF8 + if (utf8 && c >= 128) { + memcpy (code, utf8_char, c & 7); + code += c & 7; + } else +#endif + *code++ = c; + + /* For a repeated Unicode property match, there is an extra byte that + defines the required property. */ + +#ifdef SUPPORT_UCP + if (prop_type >= 0) + *code++ = prop_type; +#endif + } + + /* If previous was a character class or a back reference, we put the repeat + stuff after it, but just skip the item if the repeat was {0,0}. */ + + else if (*previous == OP_CLASS || *previous == OP_NCLASS || +#ifdef SUPPORT_UTF8 + *previous == OP_XCLASS || +#endif + *previous == OP_REF) { + if (repeat_max == 0) { + code = previous; + goto END_REPEAT; + } + + /* All real repeats make it impossible to handle partial matching (maybe + one day we will be able to remove this restriction). */ + + if (repeat_max != 1) + cd->nopartial = TRUE; + + if (repeat_min == 0 && repeat_max == -1) + *code++ = OP_CRSTAR + repeat_type; + else if (repeat_min == 1 && repeat_max == -1) + *code++ = OP_CRPLUS + repeat_type; + else if (repeat_min == 0 && repeat_max == 1) + *code++ = OP_CRQUERY + repeat_type; + else { + *code++ = OP_CRRANGE + repeat_type; + PUT2INC (code, 0, repeat_min); + if (repeat_max == -1) + repeat_max = 0; /* 2-byte encoding for max */ + PUT2INC (code, 0, repeat_max); + } + } + + /* If previous was a bracket group, we may have to replicate it in certain + cases. */ + + else if (*previous >= OP_BRA || *previous == OP_ONCE || + *previous == OP_COND) { + register int i; + int ketoffset = 0; + int len = code - previous; + uschar *bralink = NULL; + + /* If the maximum repeat count is unlimited, find the end of the bracket + by scanning through from the start, and compute the offset back to it + from the current code pointer. There may be an OP_OPT setting following + the final KET, so we can't find the end just by going back from the code + pointer. */ + + if (repeat_max == -1) { + register uschar *ket = previous; + do + ket += GET (ket, 1); + while (*ket != OP_KET); + ketoffset = code - ket; + } + + /* The case of a zero minimum is special because of the need to stick + OP_BRAZERO in front of it, and because the group appears once in the + data, whereas in other cases it appears the minimum number of times. For + this reason, it is simplest to treat this case separately, as otherwise + the code gets far too messy. There are several special subcases when the + minimum is zero. */ + + if (repeat_min == 0) { + /* If the maximum is also zero, we just omit the group from the output + altogether. */ + + if (repeat_max == 0) { + code = previous; + goto END_REPEAT; + } + + /* If the maximum is 1 or unlimited, we just have to stick in the + BRAZERO and do no more at this point. However, we do need to adjust + any OP_RECURSE calls inside the group that refer to the group itself or + any internal group, because the offset is from the start of the whole + regex. Temporarily terminate the pattern while doing this. */ + + if (repeat_max <= 1) { + *code = OP_END; + adjust_recurse (previous, 1, utf8, cd); + memmove (previous + 1, previous, len); + code++; + *previous++ = OP_BRAZERO + repeat_type; + } + + /* If the maximum is greater than 1 and limited, we have to replicate + in a nested fashion, sticking OP_BRAZERO before each set of brackets. + The first one has to be handled carefully because it's the original + copy, which has to be moved up. The remainder can be handled by code + that is common with the non-zero minimum case below. We have to + adjust the value or repeat_max, since one less copy is required. Once + again, we may have to adjust any OP_RECURSE calls inside the group. */ + + else { + int offset; + *code = OP_END; + adjust_recurse (previous, 2 + LINK_SIZE, utf8, cd); + memmove (previous + 2 + LINK_SIZE, previous, len); + code += 2 + LINK_SIZE; + *previous++ = OP_BRAZERO + repeat_type; + *previous++ = OP_BRA; + + /* We chain together the bracket offset fields that have to be + filled in later when the ends of the brackets are reached. */ + + offset = + (bralink == NULL) ? 0 : previous - bralink; + bralink = previous; + PUTINC (previous, 0, offset); + } + + repeat_max--; + } + + /* If the minimum is greater than zero, replicate the group as many + times as necessary, and adjust the maximum to the number of subsequent + copies that we need. If we set a first char from the group, and didn't + set a required char, copy the latter from the former. */ + + else { + if (repeat_min > 1) { + if (groupsetfirstbyte && reqbyte < 0) + reqbyte = firstbyte; + for (i = 1; i < repeat_min; i++) { + memcpy (code, previous, len); + code += len; + } + } + if (repeat_max > 0) + repeat_max -= repeat_min; + } + + /* This code is common to both the zero and non-zero minimum cases. If + the maximum is limited, it replicates the group in a nested fashion, + remembering the bracket starts on a stack. In the case of a zero minimum, + the first one was set up above. In all cases the repeat_max now specifies + the number of additional copies needed. */ + + if (repeat_max >= 0) { + for (i = repeat_max - 1; i >= 0; i--) { + *code++ = OP_BRAZERO + repeat_type; + + /* All but the final copy start a new nesting, maintaining the + chain of brackets outstanding. */ + + if (i != 0) { + int offset; + *code++ = OP_BRA; + offset = + (bralink == NULL) ? 0 : code - bralink; + bralink = code; + PUTINC (code, 0, offset); + } + + memcpy (code, previous, len); + code += len; + } + + /* Now chain through the pending brackets, and fill in their length + fields (which are holding the chain links pro tem). */ + + while (bralink != NULL) { + int oldlinkoffset; + int offset = code - bralink + 1; + uschar *bra = code - offset; + oldlinkoffset = GET (bra, 1); + bralink = + (oldlinkoffset == + 0) ? NULL : bralink - oldlinkoffset; + *code++ = OP_KET; + PUTINC (code, 0, offset); + PUT (bra, 1, offset); + } + } + + /* If the maximum is unlimited, set a repeater in the final copy. We + can't just offset backwards from the current code point, because we + don't know if there's been an options resetting after the ket. The + correct offset was computed above. */ + + else + code[-ketoffset] = OP_KETRMAX + repeat_type; + } + + /* Else there's some kind of shambles */ + + else { + *errorptr = ERR11; + goto FAILED; + } + + /* If the character following a repeat is '+', we wrap the entire repeated + item inside OP_ONCE brackets. This is just syntactic sugar, taken from + Sun's Java package. The repeated item starts at tempcode, not at previous, + which might be the first part of a string whose (former) last char we + repeated. However, we don't support '+' after a greediness '?'. */ + + if (possessive_quantifier) { + int len = code - tempcode; + memmove (tempcode + 1 + LINK_SIZE, tempcode, len); + code += 1 + LINK_SIZE; + len += 1 + LINK_SIZE; + tempcode[0] = OP_ONCE; + *code++ = OP_KET; + PUTINC (code, 0, len); + PUT (tempcode, 1, len); + } + + /* In all case we no longer have a previous item. We also set the + "follows varying string" flag for subsequently encountered reqbytes if + it isn't already set and we have just passed a varying length item. */ + + END_REPEAT: + previous = NULL; + cd->req_varyopt |= reqvary; + break; + + + /* Start of nested bracket sub-expression, or comment or lookahead or + lookbehind or option setting or condition. First deal with special things + that can come after a bracket; all are introduced by ?, and the appearance + of any of them means that this is not a referencing group. They were + checked for validity in the first pass over the string, so we don't have to + check for syntax errors here. */ + + case '(': + newoptions = options; + skipbytes = 0; + + if (*(++ptr) == '?') { + int set, unset; + int *optset; + + switch (*(++ptr)) { + case '#': /* Comment; skip to ket */ + ptr++; + while (*ptr != ')') + ptr++; + continue; + + case ':': /* Non-extracting bracket */ + bravalue = OP_BRA; + ptr++; + break; + + case '(': + bravalue = OP_COND; /* Conditional group */ + + /* Condition to test for recursion */ + + if (ptr[1] == 'R') { + code[1 + LINK_SIZE] = OP_CREF; + PUT2 (code, 2 + LINK_SIZE, CREF_RECURSE); + skipbytes = 3; + ptr += 3; + } + + /* Condition to test for a numbered subpattern match. We know that + if a digit follows ( then there will just be digits until ) because + the syntax was checked in the first pass. */ + + else if ((digitab[ptr[1]] && ctype_digit) != 0) { + int condref; /* Don't amalgamate; some compilers */ + condref = *(++ptr) - '0'; /* grumble at autoincrement in declaration */ + while (*(++ptr) != ')') + condref = condref * 10 + *ptr - '0'; + if (condref == 0) { + *errorptr = ERR35; + goto FAILED; + } + ptr++; + code[1 + LINK_SIZE] = OP_CREF; + PUT2 (code, 2 + LINK_SIZE, condref); + skipbytes = 3; + } + /* For conditions that are assertions, we just fall through, having + set bravalue above. */ + break; + + case '=': /* Positive lookahead */ + bravalue = OP_ASSERT; + ptr++; + break; + + case '!': /* Negative lookahead */ + bravalue = OP_ASSERT_NOT; + ptr++; + break; + + case '<': /* Lookbehinds */ + switch (*(++ptr)) { + case '=': /* Positive lookbehind */ + bravalue = OP_ASSERTBACK; + ptr++; + break; + + case '!': /* Negative lookbehind */ + bravalue = OP_ASSERTBACK_NOT; + ptr++; + break; + } + break; + + case '>': /* One-time brackets */ + bravalue = OP_ONCE; + ptr++; + break; + + case 'C': /* Callout - may be followed by digits; */ + previous_callout = code; /* Save for later completion */ + after_manual_callout = 1; /* Skip one item before completing */ + *code++ = OP_CALLOUT; /* Already checked that the terminating */ + { /* closing parenthesis is present. */ + int n = 0; + while ((digitab[*(++ptr)] & ctype_digit) != 0) + n = n * 10 + *ptr - '0'; + if (n > 255) { + *errorptr = ERR38; + goto FAILED; + } + *code++ = n; + PUT (code, 0, ptr - cd->start_pattern + 1); /* Pattern offset */ + PUT (code, LINK_SIZE, 0); /* Default length */ + code += 2 * LINK_SIZE; + } + previous = NULL; + continue; + + case 'P': /* Named subpattern handling */ + if (*(++ptr) == '<') { /* Definition */ + int i, namelen; + uschar *slot = cd->name_table; + const uschar *name; /* Don't amalgamate; some compilers */ + name = ++ptr; /* grumble at autoincrement in declaration */ + + while (*ptr++ != '>'); + namelen = ptr - name - 1; + + for (i = 0; i < cd->names_found; i++) { + int crc = memcmp (name, slot + 2, namelen); + if (crc == 0) { + if (slot[2 + namelen] == 0) { + *errorptr = ERR43; + goto FAILED; + } + crc = -1; /* Current name is substring */ + } + if (crc < 0) { + memmove (slot + cd->name_entry_size, slot, + (cd->names_found - + i) * cd->name_entry_size); + break; + } + slot += cd->name_entry_size; + } + + PUT2 (slot, 0, *brackets + 1); + memcpy (slot + 2, name, namelen); + slot[2 + namelen] = 0; + cd->names_found++; + goto NUMBERED_GROUP; + } + + if (*ptr == '=' || *ptr == '>') { /* Reference or recursion */ + int i, namelen; + int type = *ptr++; + const uschar *name = ptr; + uschar *slot = cd->name_table; + + while (*ptr != ')') + ptr++; + namelen = ptr - name; + + for (i = 0; i < cd->names_found; i++) { + if (strncmp + ((char *) name, (char *) slot + 2, + namelen) == 0) + break; + slot += cd->name_entry_size; + } + if (i >= cd->names_found) { + *errorptr = ERR15; + goto FAILED; + } + + recno = GET2 (slot, 0); + + if (type == '>') + goto HANDLE_RECURSION; /* A few lines below */ + + /* Back reference */ + + previous = code; + *code++ = OP_REF; + PUT2INC (code, 0, recno); + cd->backref_map |= (recno < 32) ? (1 << recno) : 1; + if (recno > cd->top_backref) + cd->top_backref = recno; + continue; + } + + /* Should never happen */ + break; + + case 'R': /* Pattern recursion */ + ptr++; /* Same as (?0) */ + /* Fall through */ + + /* Recursion or "subroutine" call */ + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + const uschar *called; + recno = 0; + while ((digitab[*ptr] & ctype_digit) != 0) + recno = recno * 10 + *ptr++ - '0'; + + /* Come here from code above that handles a named recursion */ + + HANDLE_RECURSION: + + previous = code; + + /* Find the bracket that is being referenced. Temporarily end the + regex in case it doesn't exist. */ + + *code = OP_END; + called = (recno == 0) ? + cd->start_code : find_bracket (cd->start_code, + utf8, recno); + + if (called == NULL) { + *errorptr = ERR15; + goto FAILED; + } + + /* If the subpattern is still open, this is a recursive call. We + check to see if this is a left recursion that could loop for ever, + and diagnose that case. */ + + if (GET (called, 1) == 0 + && could_be_empty (called, code, bcptr, utf8)) { + *errorptr = ERR40; + goto FAILED; + } + + /* Insert the recursion/subroutine item */ + + *code = OP_RECURSE; + PUT (code, 1, called - cd->start_code); + code += 1 + LINK_SIZE; + } + continue; + + /* Character after (? not specially recognized */ + + default: /* Option setting */ + set = unset = 0; + optset = &set; + + while (*ptr != ')' && *ptr != ':') { + switch (*ptr++) { + case '-': + optset = &unset; + break; + + case 'i': + *optset |= PCRE_CASELESS; + break; + case 'm': + *optset |= PCRE_MULTILINE; + break; + case 's': + *optset |= PCRE_DOTALL; + break; + case 'x': + *optset |= PCRE_EXTENDED; + break; + case 'U': + *optset |= PCRE_UNGREEDY; + break; + case 'X': + *optset |= PCRE_EXTRA; + break; + } + } + + /* Set up the changed option bits, but don't change anything yet. */ + + newoptions = (options | set) & (~unset); + + /* If the options ended with ')' this is not the start of a nested + group with option changes, so the options change at this level. Compile + code to change the ims options if this setting actually changes any of + them. We also pass the new setting back so that it can be put at the + start of any following branches, and when this group ends (if we are in + a group), a resetting item can be compiled. + + Note that if this item is right at the start of the pattern, the + options will have been abstracted and made global, so there will be no + change to compile. */ + + if (*ptr == ')') { + if ((options & PCRE_IMS) != + (newoptions & PCRE_IMS)) { + *code++ = OP_OPT; + *code++ = newoptions & PCRE_IMS; + } + + /* Change options at this level, and pass them back for use + in subsequent branches. Reset the greedy defaults and the case + value for firstbyte and reqbyte. */ + + *optionsptr = options = newoptions; + greedy_default = + ((newoptions & PCRE_UNGREEDY) != 0); + greedy_non_default = greedy_default ^ 1; + req_caseopt = + ((options & PCRE_CASELESS) != + 0) ? REQ_CASELESS : 0; + + previous = NULL; /* This item can't be repeated */ + continue; /* It is complete */ + } + + /* If the options ended with ':' we are heading into a nested group + with possible change of options. Such groups are non-capturing and are + not assertions of any kind. All we need to do is skip over the ':'; + the newoptions value is handled below. */ + + bravalue = OP_BRA; + ptr++; + } + } + + /* If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become + non-capturing and behave like (?:...) brackets */ + + else if ((options & PCRE_NO_AUTO_CAPTURE) != 0) { + bravalue = OP_BRA; + } + + /* Else we have a referencing group; adjust the opcode. If the bracket + number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and + arrange for the true number to follow later, in an OP_BRANUMBER item. */ + + else { + NUMBERED_GROUP: + if (++(*brackets) > EXTRACT_BASIC_MAX) { + bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1; + code[1 + LINK_SIZE] = OP_BRANUMBER; + PUT2 (code, 2 + LINK_SIZE, *brackets); + skipbytes = 3; + } else + bravalue = OP_BRA + *brackets; + } + + /* Process nested bracketed re. Assertions may not be repeated, but other + kinds can be. We copy code into a non-register variable in order to be able + to pass its address because some compilers complain otherwise. Pass in a + new setting for the ims options if they have changed. */ + + previous = (bravalue >= OP_ONCE) ? code : NULL; + *code = bravalue; + tempcode = code; + tempreqvary = cd->req_varyopt; /* Save value before bracket */ + + if (!compile_regex (newoptions, /* The complete new option state */ + options & PCRE_IMS, /* The previous ims option state */ + brackets, /* Extracting bracket count */ + &tempcode, /* Where to put code (updated) */ + &ptr, /* Input pointer (updated) */ + errorptr, /* Where to put an error message */ + (bravalue == OP_ASSERTBACK || bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */ + skipbytes, /* Skip over OP_COND/OP_BRANUMBER */ + &subfirstbyte, /* For possible first char */ + &subreqbyte, /* For possible last char */ + bcptr, /* Current branch chain */ + cd)) /* Tables block */ + goto FAILED; + + /* At the end of compiling, code is still pointing to the start of the + group, while tempcode has been updated to point past the end of the group + and any option resetting that may follow it. The pattern pointer (ptr) + is on the bracket. */ + + /* If this is a conditional bracket, check that there are no more than + two branches in the group. */ + + else if (bravalue == OP_COND) { + uschar *tc = code; + condcount = 0; + + do { + condcount++; + tc += GET (tc, 1); + } + while (*tc != OP_KET); + + if (condcount > 2) { + *errorptr = ERR27; + goto FAILED; + } + + /* If there is just one branch, we must not make use of its firstbyte or + reqbyte, because this is equivalent to an empty second branch. */ + + if (condcount == 1) + subfirstbyte = subreqbyte = REQ_NONE; + } + + /* Handle updating of the required and first characters. Update for normal + brackets of all kinds, and conditions with two branches (see code above). + If the bracket is followed by a quantifier with zero repeat, we have to + back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the + main loop so that they can be accessed for the back off. */ + + zeroreqbyte = reqbyte; + zerofirstbyte = firstbyte; + groupsetfirstbyte = FALSE; + + if (bravalue >= OP_BRA || bravalue == OP_ONCE + || bravalue == OP_COND) { + /* If we have not yet set a firstbyte in this branch, take it from the + subpattern, remembering that it was set here so that a repeat of more + than one can replicate it as reqbyte if necessary. If the subpattern has + no firstbyte, set "none" for the whole branch. In both cases, a zero + repeat forces firstbyte to "none". */ + + if (firstbyte == REQ_UNSET) { + if (subfirstbyte >= 0) { + firstbyte = subfirstbyte; + groupsetfirstbyte = TRUE; + } else + firstbyte = REQ_NONE; + zerofirstbyte = REQ_NONE; + } + + /* If firstbyte was previously set, convert the subpattern's firstbyte + into reqbyte if there wasn't one, using the vary flag that was in + existence beforehand. */ + + else if (subfirstbyte >= 0 && subreqbyte < 0) + subreqbyte = subfirstbyte | tempreqvary; + + /* If the subpattern set a required byte (or set a first byte that isn't + really the first byte - see above), set it. */ + + if (subreqbyte >= 0) + reqbyte = subreqbyte; + } + + /* For a forward assertion, we take the reqbyte, if set. This can be + helpful if the pattern that follows the assertion doesn't set a different + char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte + for an assertion, however because it leads to incorrect effect for patterns + such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead + of a firstbyte. This is overcome by a scan at the end if there's no + firstbyte, looking for an asserted first char. */ + + else if (bravalue == OP_ASSERT && subreqbyte >= 0) + reqbyte = subreqbyte; + + /* Now update the main code pointer to the end of the group. */ + + code = tempcode; + + /* Error if hit end of pattern */ + + if (*ptr != ')') { + *errorptr = ERR14; + goto FAILED; + } + break; + + /* Check \ for being a real metacharacter; if not, fall through and handle + it as a data character at the start of a string. Escape items are checked + for validity in the pre-compiling pass. */ + + case '\\': + tempptr = ptr; + c = check_escape (&ptr, errorptr, *brackets, options, FALSE); + + /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values + are arranged to be the negation of the corresponding OP_values. For the + back references, the values are ESC_REF plus the reference number. Only + back references and those types that consume a character may be repeated. + We can test for values between ESC_b and ESC_Z for the latter; this may + have to change if any new ones are ever created. */ + + if (c < 0) { + if (-c == ESC_Q) { /* Handle start of quoted string */ + if (ptr[1] == '\\' && ptr[2] == 'E') + ptr += 2; /* avoid empty string */ + else + inescq = TRUE; + continue; + } + + /* For metasequences that actually match a character, we disable the + setting of a first character if it hasn't already been set. */ + + if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z) + firstbyte = REQ_NONE; + + /* Set values to reset to if this is followed by a zero repeat. */ + + zerofirstbyte = firstbyte; + zeroreqbyte = reqbyte; + + /* Back references are handled specially */ + + if (-c >= ESC_REF) { + int number = -c - ESC_REF; + previous = code; + *code++ = OP_REF; + PUT2INC (code, 0, number); + } + + /* So are Unicode property matches, if supported. We know that get_ucp + won't fail because it was tested in the pre-pass. */ + +#ifdef SUPPORT_UCP + else if (-c == ESC_P || -c == ESC_p) { + BOOL negated; + int value = get_ucp (&ptr, &negated, errorptr); + previous = code; + *code++ = + ((-c == ESC_p) != negated) ? OP_PROP : OP_NOTPROP; + *code++ = value; + } +#endif + + /* For the rest, we can obtain the OP value by negating the escape + value */ + + else { + previous = (-c > ESC_b && -c < ESC_Z) ? code : NULL; + *code++ = -c; + } + continue; + } + + /* We have a data character whose value is in c. In UTF-8 mode it may have + a value > 127. We set its representation in the length/buffer, and then + handle it as a data character. */ + +#ifdef SUPPORT_UTF8 + if (utf8 && c > 127) + mclength = g_unichar_to_utf8 (c, mcbuffer); + else +#endif + + { + mcbuffer[0] = c; + mclength = 1; + } + + goto ONE_CHAR; + + /* Handle a literal character. It is guaranteed not to be whitespace or # + when the extended flag is set. If we are in UTF-8 mode, it may be a + multi-byte literal character. */ + + default: + NORMAL_CHAR: + mclength = 1; + mcbuffer[0] = c; + +#ifdef SUPPORT_UTF8 + if (utf8 && (c & 0xc0) == 0xc0) { + while ((ptr[1] & 0xc0) == 0x80) + mcbuffer[mclength++] = *(++ptr); + } +#endif + + /* At this point we have the character's bytes in mcbuffer, and the length + in mclength. When not in UTF-8 mode, the length is always 1. */ + + ONE_CHAR: + previous = code; + *code++ = + ((options & PCRE_CASELESS) != 0) ? OP_CHARNC : OP_CHAR; + for (c = 0; c < mclength; c++) + *code++ = mcbuffer[c]; + + /* Set the first and required bytes appropriately. If no previous first + byte, set it from this character, but revert to none on a zero repeat. + Otherwise, leave the firstbyte value alone, and don't change it on a zero + repeat. */ + + if (firstbyte == REQ_UNSET) { + zerofirstbyte = REQ_NONE; + zeroreqbyte = reqbyte; + + /* If the character is more than one byte long, we can set firstbyte + only if it is not to be matched caselessly. */ + + if (mclength == 1 || req_caseopt == 0) { + firstbyte = mcbuffer[0] | req_caseopt; + if (mclength != 1) + reqbyte = code[-1] | cd->req_varyopt; + } else + firstbyte = reqbyte = REQ_NONE; + } + + /* firstbyte was previously set; we can set reqbyte only the length is + 1 or the matching is caseful. */ + + else { + zerofirstbyte = firstbyte; + zeroreqbyte = reqbyte; + if (mclength == 1 || req_caseopt == 0) + reqbyte = code[-1] | req_caseopt | cd->req_varyopt; + } + + break; /* End of literal character handling */ + } + } /* end of big loop */ + + /* Control never reaches here by falling through, only by a goto for all the + error states. Pass back the position in the pattern so that it can be displayed + to the user for diagnosing the error. */ + + FAILED: + *ptrptr = ptr; + return FALSE; +} + + + + +/************************************************* +* Compile sequence of alternatives * +*************************************************/ + +/* On entry, ptr is pointing past the bracket character, but on return + it points to the closing bracket, or vertical bar, or end of string. + The code variable is pointing at the byte into which the BRA operator has been + stored. If the ims options are changed at the start (for a (?ims: group) or + during any branch, we need to insert an OP_OPT item at the start of every + following branch to ensure they get set correctly at run time, and also pass + the new options into every subsequent branch compile. + + Argument: + options option bits, including any changes for this subpattern + oldims previous settings of ims option bits + brackets -> int containing the number of extracting brackets used + codeptr -> the address of the current code pointer + ptrptr -> the address of the current pattern pointer + errorptr -> pointer to error message + lookbehind TRUE if this is a lookbehind assertion + skipbytes skip this many bytes at start (for OP_COND, OP_BRANUMBER) + firstbyteptr place to put the first required character, or a negative number + reqbyteptr place to put the last required character, or a negative number + bcptr pointer to the chain of currently open branches + cd points to the data block with tables pointers etc. + + Returns: TRUE on success + */ + +static BOOL +compile_regex (int options, int oldims, int *brackets, uschar ** codeptr, + const uschar ** ptrptr, const char **errorptr, + BOOL lookbehind, int skipbytes, int *firstbyteptr, + int *reqbyteptr, branch_chain * bcptr, compile_data * cd) +{ + const uschar *ptr = *ptrptr; + uschar *code = *codeptr; + uschar *last_branch = code; + uschar *start_bracket = code; + uschar *reverse_count = NULL; + int firstbyte, reqbyte; + int branchfirstbyte, branchreqbyte; + branch_chain bc; + + bc.outer = bcptr; + bc.current = code; + + firstbyte = reqbyte = REQ_UNSET; + + /* Offset is set zero to mark that this bracket is still open */ + + PUT (code, 1, 0); + code += 1 + LINK_SIZE + skipbytes; + + /* Loop for each alternative branch */ + + for (;;) { + /* Handle a change of ims options at the start of the branch */ + + if ((options & PCRE_IMS) != oldims) { + *code++ = OP_OPT; + *code++ = options & PCRE_IMS; + } + + /* Set up dummy OP_REVERSE if lookbehind assertion */ + + if (lookbehind) { + *code++ = OP_REVERSE; + reverse_count = code; + PUTINC (code, 0, 0); + } + + /* Now compile the branch */ + + if (!compile_branch (&options, brackets, &code, &ptr, errorptr, + &branchfirstbyte, &branchreqbyte, &bc, cd)) { + *ptrptr = ptr; + return FALSE; + } + + /* If this is the first branch, the firstbyte and reqbyte values for the + branch become the values for the regex. */ + + if (*last_branch != OP_ALT) { + firstbyte = branchfirstbyte; + reqbyte = branchreqbyte; + } + + /* If this is not the first branch, the first char and reqbyte have to + match the values from all the previous branches, except that if the previous + value for reqbyte didn't have REQ_VARY set, it can still match, and we set + REQ_VARY for the regex. */ + + else { + /* If we previously had a firstbyte, but it doesn't match the new branch, + we have to abandon the firstbyte for the regex, but if there was previously + no reqbyte, it takes on the value of the old firstbyte. */ + + if (firstbyte >= 0 && firstbyte != branchfirstbyte) { + if (reqbyte < 0) + reqbyte = firstbyte; + firstbyte = REQ_NONE; + } + + /* If we (now or from before) have no firstbyte, a firstbyte from the + branch becomes a reqbyte if there isn't a branch reqbyte. */ + + if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0) + branchreqbyte = branchfirstbyte; + + /* Now ensure that the reqbytes match */ + + if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY)) + reqbyte = REQ_NONE; + else + reqbyte |= branchreqbyte; /* To "or" REQ_VARY */ + } + + /* If lookbehind, check that this branch matches a fixed-length string, + and put the length into the OP_REVERSE item. Temporarily mark the end of + the branch with OP_END. */ + + if (lookbehind) { + int length; + *code = OP_END; + length = find_fixedlength (last_branch, options); + DPRINTF (("fixed length = %d\n", length)); + if (length < 0) { + *errorptr = (length == -2) ? ERR36 : ERR25; + *ptrptr = ptr; + return FALSE; + } + PUT (reverse_count, 0, length); + } + + /* Reached end of expression, either ')' or end of pattern. Go back through + the alternative branches and reverse the chain of offsets, with the field in + the BRA item now becoming an offset to the first alternative. If there are + no alternatives, it points to the end of the group. The length in the + terminating ket is always the length of the whole bracketed item. If any of + the ims options were changed inside the group, compile a resetting op-code + following, except at the very end of the pattern. Return leaving the pointer + at the terminating char. */ + + if (*ptr != '|') { + int length = code - last_branch; + do { + int prev_length = GET (last_branch, 1); + PUT (last_branch, 1, length); + length = prev_length; + last_branch -= length; + } + while (length > 0); + + /* Fill in the ket */ + + *code = OP_KET; + PUT (code, 1, code - start_bracket); + code += 1 + LINK_SIZE; + + /* Resetting option if needed */ + + if ((options & PCRE_IMS) != oldims && *ptr == ')') { + *code++ = OP_OPT; + *code++ = oldims; + } + + /* Set values to pass back */ + + *codeptr = code; + *ptrptr = ptr; + *firstbyteptr = firstbyte; + *reqbyteptr = reqbyte; + return TRUE; + } + + /* Another branch follows; insert an "or" node. Its length field points back + to the previous branch while the bracket remains open. At the end the chain + is reversed. It's done like this so that the start of the bracket has a + zero offset until it is closed, making it possible to detect recursion. */ + + *code = OP_ALT; + PUT (code, 1, code - last_branch); + bc.current = last_branch = code; + code += 1 + LINK_SIZE; + ptr++; + } + /* Control never reaches here */ +} + + + + +/************************************************* +* Check for anchored expression * +*************************************************/ + +/* Try to find out if this is an anchored regular expression. Consider each + alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket + all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then + it's anchored. However, if this is a multiline pattern, then only OP_SOD + counts, since OP_CIRC can match in the middle. + + We can also consider a regex to be anchored if OP_SOM starts all its branches. + This is the code for \G, which means "match at start of match position, taking + into account the match offset". + + A branch is also implicitly anchored if it starts with .* and DOTALL is set, + because that will try the rest of the pattern at all possible matching points, + so there is no point trying again.... er .... + + .... except when the .* appears inside capturing parentheses, and there is a + subsequent back reference to those parentheses. We haven't enough information + to catch that case precisely. + + At first, the best we could do was to detect when .* was in capturing brackets + and the highest back reference was greater than or equal to that level. + However, by keeping a bitmap of the first 31 back references, we can catch some + of the more common cases more precisely. + + Arguments: + code points to start of expression (the bracket) + options points to the options setting + bracket_map a bitmap of which brackets we are inside while testing; this + handles up to substring 31; after that we just have to take + the less precise approach + backref_map the back reference bitmap + + Returns: TRUE or FALSE + */ + +static BOOL +is_anchored (register const uschar * code, int *options, + unsigned int bracket_map, unsigned int backref_map) +{ + do { + const uschar *scode = + first_significant_code (code + 1 + LINK_SIZE, options, + PCRE_MULTILINE, FALSE); + register int op = *scode; + + /* Capturing brackets */ + + if (op > OP_BRA) { + int new_map; + op -= OP_BRA; + if (op > EXTRACT_BASIC_MAX) + op = GET2 (scode, 2 + LINK_SIZE); + new_map = bracket_map | ((op < 32) ? (1 << op) : 1); + if (!is_anchored (scode, options, new_map, backref_map)) + return FALSE; + } + + /* Other brackets */ + + else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE + || op == OP_COND) { + if (!is_anchored (scode, options, bracket_map, backref_map)) + return FALSE; + } + + /* .* is not anchored unless DOTALL is set and it isn't in brackets that + are or may be referenced. */ + + else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) && + (*options & PCRE_DOTALL) != 0) { + if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) + return FALSE; + } + + /* Check for explicit anchoring */ + + else if (op != OP_SOD && op != OP_SOM && + ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC)) + return FALSE; + code += GET (code, 1); + } + while (*code == OP_ALT); /* Loop for each alternative */ + return TRUE; +} + + + +/************************************************* +* Check for starting with ^ or .* * +*************************************************/ + +/* This is called to find out if every branch starts with ^ or .* so that + "first char" processing can be done to speed things up in multiline + matching and for non-DOTALL patterns that start with .* (which must start at + the beginning or after \n). As in the case of is_anchored() (see above), we + have to take account of back references to capturing brackets that contain .* + because in that case we can't make the assumption. + + Arguments: + code points to start of expression (the bracket) + bracket_map a bitmap of which brackets we are inside while testing; this + handles up to substring 31; after that we just have to take + the less precise approach + backref_map the back reference bitmap + + Returns: TRUE or FALSE + */ + +static BOOL +is_startline (const uschar * code, unsigned int bracket_map, + unsigned int backref_map) +{ + do { + const uschar *scode = + first_significant_code (code + 1 + LINK_SIZE, NULL, 0, + FALSE); + register int op = *scode; + + /* Capturing brackets */ + + if (op > OP_BRA) { + int new_map; + op -= OP_BRA; + if (op > EXTRACT_BASIC_MAX) + op = GET2 (scode, 2 + LINK_SIZE); + new_map = bracket_map | ((op < 32) ? (1 << op) : 1); + if (!is_startline (scode, new_map, backref_map)) + return FALSE; + } + + /* Other brackets */ + + else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE + || op == OP_COND) {if (!is_startline (scode, bracket_map, + backref_map)) return + FALSE;} + + /* .* means "start at start or after \n" if it isn't in brackets that + may be referenced. */ + + else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR) { + if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) + return FALSE; + } + + /* Check for explicit circumflex */ + + else if (op != OP_CIRC) + return FALSE; + + /* Move on to the next alternative */ + + code += GET (code, 1); + } + while (*code == OP_ALT); /* Loop for each alternative */ + return TRUE; +} + + + +/************************************************* +* Check for asserted fixed first char * +*************************************************/ + +/* During compilation, the "first char" settings from forward assertions are + discarded, because they can cause conflicts with actual literals that follow. + However, if we end up without a first char setting for an unanchored pattern, + it is worth scanning the regex to see if there is an initial asserted first + char. If all branches start with the same asserted char, or with a bracket all + of whose alternatives start with the same asserted char (recurse ad lib), then + we return that char, otherwise -1. + + Arguments: + code points to start of expression (the bracket) + options pointer to the options (used to check casing changes) + inassert TRUE if in an assertion + + Returns: -1 or the fixed first char + */ + +static int +find_firstassertedchar (const uschar * code, int *options, BOOL inassert) +{ + register int c = -1; + do { + int d; + const uschar *scode = + first_significant_code (code + 1 + LINK_SIZE, options, + PCRE_CASELESS, TRUE); + register int op = *scode; + + if (op >= OP_BRA) + op = OP_BRA; + + switch (op) { + default: + return -1; + + case OP_BRA: + case OP_ASSERT: + case OP_ONCE: + case OP_COND: + if ( + (d = + find_firstassertedchar (scode, options, + op == OP_ASSERT)) < 0) return -1; + if (c < 0) + c = d; + else if (c != d) + return -1; + break; + + case OP_EXACT: /* Fall through */ + scode += 2; + + case OP_CHAR: + case OP_CHARNC: + case OP_PLUS: + case OP_MINPLUS: + if (!inassert) + return -1; + if (c < 0) { + c = scode[1]; + if ((*options & PCRE_CASELESS) != 0) + c |= REQ_CASELESS; + } else if (c != scode[1]) + return -1; + break; + } + + code += GET (code, 1); + } + while (*code == OP_ALT); + return c; +} + + + + +#ifdef SUPPORT_UTF8 +/************************************************* +* Validate a UTF-8 string * +*************************************************/ + +/* This function is called (optionally) at the start of compile or match, to + validate that a supposed UTF-8 string is actually valid. The early check means + that subsequent code can assume it is dealing with a valid string. The check + can be turned off for maximum performance, but then consequences of supplying + an invalid string are then undefined. + + Arguments: + string points to the string + length length of string, or -1 if the string is zero-terminated + + Returns: < 0 if the string is a valid UTF-8 string + >= 0 otherwise; the value is the offset of the bad byte + */ + +static int +valid_utf8 (const uschar * string, int length) +{ + register const uschar *p; + + if (length < 0) { + for (p = string; *p != 0; p++); + length = p - string; + } + + for (p = string; length-- > 0; p++) { + register int ab; + register int c = *p; + if (c < 128) + continue; + if ((c & 0xc0) != 0xc0) + return p - string; + ab = utf8_table4[c & 0x3f]; /* Number of additional bytes */ + if (length < ab) + return p - string; + length -= ab; + + /* Check top bits in the second byte */ + if ((*(++p) & 0xc0) != 0x80) + return p - string; + + /* Check for overlong sequences for each different length */ + switch (ab) { + /* Check for xx00 000x */ + case 1: + if ((c & 0x3e) == 0) + return p - string; + continue; /* We know there aren't any more bytes to check */ + + /* Check for 1110 0000, xx0x xxxx */ + case 2: + if (c == 0xe0 && (*p & 0x20) == 0) + return p - string; + break; + + /* Check for 1111 0000, xx00 xxxx */ + case 3: + if (c == 0xf0 && (*p & 0x30) == 0) + return p - string; + break; + + /* Check for 1111 1000, xx00 0xxx */ + case 4: + if (c == 0xf8 && (*p & 0x38) == 0) + return p - string; + break; + + /* Check for leading 0xfe or 0xff, and then for 1111 1100, xx00 00xx */ + case 5: + if (c == 0xfe || c == 0xff || (c == 0xfc && (*p & 0x3c) == 0)) + return p - string; + break; + } + + /* Check for valid bytes after the 2nd, if any; all must start 10 */ + while (--ab > 0) { + if ((*(++p) & 0xc0) != 0x80) + return p - string; + } + } + + return -1; +} +#endif + + + +/************************************************* +* Compile a Regular Expression * +*************************************************/ + +/* This function takes a string and returns a pointer to a block of store + holding a compiled version of the expression. + + Arguments: + pattern the regular expression + options various option bits + errorptr pointer to pointer to error text + erroroffset ptr offset in pattern where error was detected + tables pointer to character tables or NULL + + Returns: pointer to compiled data block, or NULL on error, + with errorptr and erroroffset set + */ + +pcre * +pcre_compile (const char *pattern, int options, const char **errorptr, + int *erroroffset, const unsigned char *tables) +{ + real_pcre *re; + int length = 1 + LINK_SIZE; /* For initial BRA plus length */ + int c, firstbyte, reqbyte; + int bracount = 0; + int branch_extra = 0; + int branch_newextra; + int item_count = -1; + int name_count = 0; + int max_name_size = 0; + int lastitemlength = 0; +#ifdef SUPPORT_UTF8 + BOOL utf8; + BOOL class_utf8; +#endif + BOOL inescq = FALSE; + unsigned int brastackptr = 0; + size_t size; + uschar *code; + const uschar *codestart; + const uschar *ptr; + compile_data compile_block; + int brastack[BRASTACK_SIZE]; + uschar bralenstack[BRASTACK_SIZE]; + + /* We can't pass back an error message if errorptr is NULL; I guess the best we + can do is just return NULL. */ + + if (errorptr == NULL) + return NULL; + *errorptr = NULL; + + /* However, we can give a message for this error */ + + if (erroroffset == NULL) { + *errorptr = ERR16; + return NULL; + } + *erroroffset = 0; + + /* Can't support UTF8 unless PCRE has been compiled to include the code. */ + +#ifdef SUPPORT_UTF8 + utf8 = (options & PCRE_UTF8) != 0; + if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 && + (*erroroffset = valid_utf8 ((uschar *) pattern, -1)) >= 0) { + *errorptr = ERR44; + return NULL; + } +#else + if ((options & PCRE_UTF8) != 0) { + *errorptr = ERR32; + return NULL; + } +#endif + + if ((options & ~PUBLIC_OPTIONS) != 0) { + *errorptr = ERR17; + return NULL; + } + + /* Set up pointers to the individual character tables */ + + if (tables == NULL) + tables = make_pcre_default_tables (); + compile_block.lcc = tables + lcc_offset; + compile_block.fcc = tables + fcc_offset; + compile_block.cbits = tables + cbits_offset; + compile_block.ctypes = tables + ctypes_offset; + + /* Maximum back reference and backref bitmap. This is updated for numeric + references during the first pass, but for named references during the actual + compile pass. The bitmap records up to 31 back references to help in deciding + whether (.*) can be treated as anchored or not. */ + + compile_block.top_backref = 0; + compile_block.backref_map = 0; + + /* Reflect pattern for debugging output */ + + DPRINTF ( + ("------------------------------------------------------------------\n")); + DPRINTF (("%s\n", pattern)); + + /* The first thing to do is to make a pass over the pattern to compute the + amount of store required to hold the compiled code. This does not have to be + perfect as long as errors are overestimates. At the same time we can detect any + flag settings right at the start, and extract them. Make an attempt to correct + for any counted white space if an "extended" flag setting appears late in the + pattern. We can't be so clever for #-comments. */ + + ptr = (const uschar *) (pattern - 1); + while ((c = *(++ptr)) != 0) { + int min, max; + int class_optcount; + int bracket_length; + int duplength; + + /* If we are inside a \Q...\E sequence, all chars are literal */ + + if (inescq) { + if ((options & PCRE_AUTO_CALLOUT) != 0) + length += 2 + 2 * LINK_SIZE; + goto NORMAL_CHAR; + } + + /* Otherwise, first check for ignored whitespace and comments */ + + if ((options & PCRE_EXTENDED) != 0) { + if ((compile_block.ctypes[c] & ctype_space) != 0) + continue; + if (c == '#') { + /* The space before the ; is to avoid a warning on a silly compiler + on the Macintosh. */ + while ((c = *(++ptr)) != 0 && c != NEWLINE); + if (c == 0) + break; + continue; + } + } + + item_count++; /* Is zero for the first non-comment item */ + + /* Allow space for auto callout before every item except quantifiers. */ + + if ((options & PCRE_AUTO_CALLOUT) != 0 && + c != '*' && c != '+' && c != '?' && + (c != '{' || !is_counted_repeat (ptr + 1))) + length += 2 + 2 * LINK_SIZE; + + switch (c) { + /* A backslashed item may be an escaped data character or it may be a + character type. */ + + case '\\': + c = check_escape (&ptr, errorptr, bracount, options, FALSE); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + + lastitemlength = 1; /* Default length of last item for repeats */ + + if (c >= 0) { /* Data character */ + length += 2; /* For a one-byte character */ + +#ifdef SUPPORT_UTF8 + if (utf8 && c > 127) { + int i; + i = g_unichar_to_utf8 (c, NULL); + length += i; + lastitemlength += i; + } +#endif + + continue; + } + + /* If \Q, enter "literal" mode */ + + if (-c == ESC_Q) { + inescq = TRUE; + continue; + } + + /* \X is supported only if Unicode property support is compiled */ + +#ifndef SUPPORT_UCP + if (-c == ESC_X) { + *errorptr = ERR45; + goto PCRE_ERROR_RETURN; + } +#endif + + /* \P and \p are for Unicode properties, but only when the support has + been compiled. Each item needs 2 bytes. */ + + else if (-c == ESC_P || -c == ESC_p) { +#ifdef SUPPORT_UCP + BOOL negated; + length += 2; + lastitemlength = 2; + if (get_ucp (&ptr, &negated, errorptr) < 0) + goto PCRE_ERROR_RETURN; + continue; +#else + *errorptr = ERR45; + goto PCRE_ERROR_RETURN; +#endif + } + + /* Other escapes need one byte */ + + length++; + + /* A back reference needs an additional 2 bytes, plus either one or 5 + bytes for a repeat. We also need to keep the value of the highest + back reference. */ + + if (c <= -ESC_REF) { + int refnum = -c - ESC_REF; + compile_block.backref_map |= + (refnum < 32) ? (1 << refnum) : 1; + if (refnum > compile_block.top_backref) + compile_block.top_backref = refnum; + length += 2; /* For single back reference */ + if (ptr[1] == '{' && is_counted_repeat (ptr + 2)) { + ptr = + read_repeat_counts (ptr + 2, &min, &max, errorptr); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + if ((min == 0 && (max == 1 || max == -1)) || + (min == 1 && max == -1)) + length++; + else + length += 5; + if (ptr[1] == '?') + ptr++; + } + } + continue; + + case '^': /* Single-byte metacharacters */ + case '.': + case '$': + length++; + lastitemlength = 1; + continue; + + case '*': /* These repeats won't be after brackets; */ + case '+': /* those are handled separately */ + case '?': + length++; + goto POSESSIVE; /* A few lines below */ + + /* This covers the cases of braced repeats after a single char, metachar, + class, or back reference. */ + + case '{': + if (!is_counted_repeat (ptr + 1)) + goto NORMAL_CHAR; + ptr = read_repeat_counts (ptr + 1, &min, &max, errorptr); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + + /* These special cases just insert one extra opcode */ + + if ((min == 0 && (max == 1 || max == -1)) || + (min == 1 && max == -1)) + length++; + + /* These cases might insert additional copies of a preceding character. */ + + else { + if (min != 1) { + length -= lastitemlength; /* Uncount the original char or metachar */ + if (min > 0) + length += 3 + lastitemlength; + } + length += lastitemlength + ((max > 0) ? 3 : 1); + } + + if (ptr[1] == '?') + ptr++; /* Needs no extra length */ + + POSESSIVE: /* Test for possessive quantifier */ + if (ptr[1] == '+') { + ptr++; + length += 2 + 2 * LINK_SIZE; /* Allow for atomic brackets */ + } + continue; + + /* An alternation contains an offset to the next branch or ket. If any ims + options changed in the previous branch(es), and/or if we are in a + lookbehind assertion, extra space will be needed at the start of the + branch. This is handled by branch_extra. */ + + case '|': + length += 1 + LINK_SIZE + branch_extra; + continue; + + /* A character class uses 33 characters provided that all the character + values are less than 256. Otherwise, it uses a bit map for low valued + characters, and individual items for others. Don't worry about character + types that aren't allowed in classes - they'll get picked up during the + compile. A character class that contains only one single-byte character + uses 2 or 3 bytes, depending on whether it is negated or not. Notice this + where we can. (In UTF-8 mode we can do this only for chars < 128.) */ + + case '[': + if (*(++ptr) == '^') { + class_optcount = 10; /* Greater than one */ + ptr++; + } else + class_optcount = 0; + +#ifdef SUPPORT_UTF8 + class_utf8 = FALSE; +#endif + + /* Written as a "do" so that an initial ']' is taken as data */ + + if (*ptr != 0) + do { + /* Inside \Q...\E everything is literal except \E */ + + if (inescq) { + if (*ptr != '\\' || ptr[1] != 'E') + goto GET_ONE_CHARACTER; + inescq = FALSE; + ptr += 1; + continue; + } + + /* Outside \Q...\E, check for escapes */ + + if (*ptr == '\\') { + c = + check_escape (&ptr, errorptr, bracount, + options, TRUE); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + + /* \b is backspace inside a class; \X is literal */ + + if (-c == ESC_b) + c = '\b'; + else if (-c == ESC_X) + c = 'X'; + + /* \Q enters quoting mode */ + + else if (-c == ESC_Q) { + inescq = TRUE; + continue; + } + + /* Handle escapes that turn into characters */ + + if (c >= 0) + goto NON_SPECIAL_CHARACTER; + + /* Escapes that are meta-things. The normal ones just affect the + bit map, but Unicode properties require an XCLASS extended item. */ + + else { + class_optcount = 10; /* \d, \s etc; make sure > 1 */ +#ifdef SUPPORT_UTF8 + if (-c == ESC_p || -c == ESC_P) { + if (!class_utf8) { + class_utf8 = TRUE; + length += LINK_SIZE + 2; + } + length += 2; + } +#endif + } + } + + /* Check the syntax for POSIX stuff. The bits we actually handle are + checked during the real compile phase. */ + + else if (*ptr == '[' + && check_posix_syntax (ptr, &ptr, + &compile_block)) { + ptr++; + class_optcount = 10; /* Make sure > 1 */ + } + + /* Anything else increments the possible optimization count. We have to + detect ranges here so that we can compute the number of extra ranges for + caseless wide characters when UCP support is available. If there are wide + characters, we are going to have to use an XCLASS, even for single + characters. */ + + else { + int d; + + GET_ONE_CHARACTER: + +#ifdef SUPPORT_UTF8 + if (1 /* utf8 */ ) { + int extra = 0; + GETCHARLEN (c, ptr, extra); + ptr += extra; + } else + c = *ptr; +#else + c = *ptr; +#endif + + /* Come here from handling \ above when it escapes to a char value */ + + NON_SPECIAL_CHARACTER: + class_optcount++; + + d = -1; + if (ptr[1] == '-') { + uschar const *hyptr = ptr++; + if (ptr[1] == '\\') { + ptr++; + d = + check_escape (&ptr, errorptr, bracount, + options, TRUE); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + if (-d == ESC_b) + d = '\b'; /* backspace */ + else if (-d == ESC_X) + d = 'X'; /* literal X in a class */ + } else if (ptr[1] != 0 && ptr[1] != ']') { + ptr++; +#ifdef SUPPORT_UTF8 + if (1 /* utf8 */ ) { + int extra = 0; + GETCHARLEN (d, ptr, extra); + ptr += extra; + } else +#endif + d = *ptr; + } + if (d < 0) + ptr = hyptr; /* go back to hyphen as data */ + } + + /* If d >= 0 we have a range. In UTF-8 mode, if the end is > 255, or > + 127 for caseless matching, we will need to use an XCLASS. */ + + if (d >= 0) { + class_optcount = 10; /* Ensure > 1 */ + if (d < c) { + *errorptr = ERR8; + goto PCRE_ERROR_RETURN; + } +#ifdef SUPPORT_UTF8 + if (utf8 + && (d > 255 + || ((options & PCRE_CASELESS) != 0 + && d > 127))) { + uschar buffer[6]; + if (!class_utf8) { /* Allow for XCLASS overhead */ + class_utf8 = TRUE; + length += LINK_SIZE + 2; + } +#ifdef SUPPORT_UCP + /* If we have UCP support, find out how many extra ranges are + needed to map the other case of characters within this range. We + have to mimic the range optimization here, because extending the + range upwards might push d over a boundary that makes is use + another byte in the UTF-8 representation. */ + + if ((options & PCRE_CASELESS) != 0) { + int occ, ocd; + int cc = c; + int origd = d; + while (get_othercase_range + (&cc, origd, &occ, &ocd)) { + if (occ >= c && ocd <= d) + continue; /* Skip embedded */ + + if (occ < c && ocd >= c - 1) { /* Extend the basic range *//* if there is overlap, */ + c = occ; /* noting that if occ < c */ + continue; /* we can't have ocd > d */ + } /* because a subrange is */ + if (ocd > d && occ <= d + 1) { /* always shorter than *//* the basic range. */ + d = ocd; + continue; + } + + /* An extra item is needed */ + + length += + 1 + g_unichar_to_utf8 (occ, + buffer) + + + ((occ == ocd) ? 0 : + g_unichar_to_utf8 (ocd, + buffer)); + } + } +#endif /* SUPPORT_UCP */ + + /* The length of the (possibly extended) range */ + + length += + 1 + g_unichar_to_utf8 (c, + buffer) + + g_unichar_to_utf8 (d, buffer); + } +#endif /* SUPPORT_UTF8 */ + + } + + /* We have a single character. There is nothing to be done unless we + are in UTF-8 mode. If the char is > 255, or 127 when caseless, we must + allow for an XCL_SINGLE item, doubled for caselessness if there is UCP + support. */ + + else { +#ifdef SUPPORT_UTF8 + if (utf8 + && (c > 255 + || ((options & PCRE_CASELESS) != 0 + && c > 127))) { + uschar buffer[6]; + class_optcount = 10; /* Ensure > 1 */ + if (!class_utf8) { /* Allow for XCLASS overhead */ + class_utf8 = TRUE; + length += LINK_SIZE + 2; + } +#ifdef SUPPORT_UCP + length += + (((options & PCRE_CASELESS) != 0) ? 2 : + 1) * (1 + + g_unichar_to_utf8 (c, buffer)); +#else /* SUPPORT_UCP */ + length += + 1 + g_unichar_to_utf8 (c, buffer); +#endif /* SUPPORT_UCP */ + } +#endif /* SUPPORT_UTF8 */ + } + } + } + while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */ + + if (*ptr == 0) { /* Missing terminating ']' */ + *errorptr = ERR6; + goto PCRE_ERROR_RETURN; + } + + /* We can optimize when there was only one optimizable character. Repeats + for positive and negated single one-byte chars are handled by the general + code. Here, we handle repeats for the class opcodes. */ + + if (class_optcount == 1) + length += 3; + else { + length += 33; + + /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier, + we also need extra for wrapping the whole thing in a sub-pattern. */ + + if (*ptr != 0 && ptr[1] == '{' + && is_counted_repeat (ptr + 2)) { + ptr = + read_repeat_counts (ptr + 2, &min, &max, errorptr); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + if ((min == 0 && (max == 1 || max == -1)) || + (min == 1 && max == -1)) + length++; + else + length += 5; + if (ptr[1] == '+') { + ptr++; + length += 2 + 2 * LINK_SIZE; + } else if (ptr[1] == '?') + ptr++; + } + } + continue; + + /* Brackets may be genuine groups or special things */ + + case '(': + branch_newextra = 0; + bracket_length = 1 + LINK_SIZE; + + /* Handle special forms of bracket, which all start (? */ + + if (ptr[1] == '?') { + int set, unset; + int *optset; + + switch (c = ptr[2]) { + /* Skip over comments entirely */ + case '#': + ptr += 3; + while (*ptr != 0 && *ptr != ')') + ptr++; + if (*ptr == 0) { + *errorptr = ERR18; + goto PCRE_ERROR_RETURN; + } + continue; + + /* Non-referencing groups and lookaheads just move the pointer on, and + then behave like a non-special bracket, except that they don't increment + the count of extracting brackets. Ditto for the "once only" bracket, + which is in Perl from version 5.005. */ + + case ':': + case '=': + case '!': + case '>': + ptr += 2; + break; + + /* (?R) specifies a recursive call to the regex, which is an extension + to provide the facility which can be obtained by (?p{perl-code}) in + Perl 5.6. In Perl 5.8 this has become (??{perl-code}). + + From PCRE 4.00, items such as (?3) specify subroutine-like "calls" to + the appropriate numbered brackets. This includes both recursive and + non-recursive calls. (?R) is now synonymous with (?0). */ + + case 'R': + ptr++; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + ptr += 2; + if (c != 'R') + while ((digitab[*(++ptr)] & ctype_digit) != 0); + if (*ptr != ')') { + *errorptr = ERR29; + goto PCRE_ERROR_RETURN; + } + length += 1 + LINK_SIZE; + + /* If this item is quantified, it will get wrapped inside brackets so + as to use the code for quantified brackets. We jump down and use the + code that handles this for real brackets. */ + + if (ptr[1] == '+' || ptr[1] == '*' || ptr[1] == '?' + || ptr[1] == '{') { + length += 2 + 2 * LINK_SIZE; /* to make bracketed */ + duplength = 5 + 3 * LINK_SIZE; + goto HANDLE_QUANTIFIED_BRACKETS; + } + continue; + + /* (?C) is an extension which provides "callout" - to provide a bit of + the functionality of the Perl (?{...}) feature. An optional number may + follow (default is zero). */ + + case 'C': + ptr += 2; + while ((digitab[*(++ptr)] & ctype_digit) != 0); + if (*ptr != ')') { + *errorptr = ERR39; + goto PCRE_ERROR_RETURN; + } + length += 2 + 2 * LINK_SIZE; + continue; + + /* Named subpatterns are an extension copied from Python */ + + case 'P': + ptr += 3; + if (*ptr == '<') { + const uschar *p; /* Don't amalgamate; some compilers */ + p = ++ptr; /* grumble at autoincrement in declaration */ + while ((compile_block.ctypes[*ptr] & ctype_word) != + 0) ptr++; + if (*ptr != '>') { + *errorptr = ERR42; + goto PCRE_ERROR_RETURN; + } + name_count++; + if (ptr - p > max_name_size) + max_name_size = (ptr - p); + break; + } + + if (*ptr == '=' || *ptr == '>') { + while ( + (compile_block. + ctypes[*(++ptr)] & ctype_word) != 0); + if (*ptr != ')') { + *errorptr = ERR42; + goto PCRE_ERROR_RETURN; + } + break; + } + + /* Unknown character after (?P */ + + *errorptr = ERR41; + goto PCRE_ERROR_RETURN; + + /* Lookbehinds are in Perl from version 5.005 */ + + case '<': + ptr += 3; + if (*ptr == '=' || *ptr == '!') { + branch_newextra = 1 + LINK_SIZE; + length += 1 + LINK_SIZE; /* For the first branch */ + break; + } + *errorptr = ERR24; + goto PCRE_ERROR_RETURN; + + /* Conditionals are in Perl from version 5.005. The bracket must either + be followed by a number (for bracket reference) or by an assertion + group, or (a PCRE extension) by 'R' for a recursion test. */ + + case '(': + if (ptr[3] == 'R' && ptr[4] == ')') { + ptr += 4; + length += 3; + } else if ((digitab[ptr[3]] & ctype_digit) != 0) { + ptr += 4; + length += 3; + while ((digitab[*ptr] & ctype_digit) != 0) + ptr++; + if (*ptr != ')') { + *errorptr = ERR26; + goto PCRE_ERROR_RETURN; + } + } else { /* An assertion must follow */ + + ptr++; /* Can treat like ':' as far as spacing is concerned */ + if (ptr[2] != '?' || + (ptr[3] != '=' && ptr[3] != '!' + && ptr[3] != '<')) { + ptr += 2; /* To get right offset in message */ + *errorptr = ERR28; + goto PCRE_ERROR_RETURN; + } + } + break; + + /* Else loop checking valid options until ) is met. Anything else is an + error. If we are without any brackets, i.e. at top level, the settings + act as if specified in the options, so massage the options immediately. + This is for backward compatibility with Perl 5.004. */ + + default: + set = unset = 0; + optset = &set; + ptr += 2; + + for (;; ptr++) { + c = *ptr; + switch (c) { + case 'i': + *optset |= PCRE_CASELESS; + continue; + + case 'm': + *optset |= PCRE_MULTILINE; + continue; + + case 's': + *optset |= PCRE_DOTALL; + continue; + + case 'x': + *optset |= PCRE_EXTENDED; + continue; + + case 'X': + *optset |= PCRE_EXTRA; + continue; + + case 'U': + *optset |= PCRE_UNGREEDY; + continue; + + case '-': + optset = &unset; + continue; + + /* A termination by ')' indicates an options-setting-only item; if + this is at the very start of the pattern (indicated by item_count + being zero), we use it to set the global options. This is helpful + when analyzing the pattern for first characters, etc. Otherwise + nothing is done here and it is handled during the compiling + process. + + [Historical note: Up to Perl 5.8, options settings at top level + were always global settings, wherever they appeared in the pattern. + That is, they were equivalent to an external setting. From 5.8 + onwards, they apply only to what follows (which is what you might + expect).] */ + + case ')': + if (item_count == 0) { + options = (options | set) & (~unset); + set = unset = 0; /* To save length */ + item_count--; /* To allow for several */ + } + + /* Fall through */ + + /* A termination by ':' indicates the start of a nested group with + the given options set. This is again handled at compile time, but + we must allow for compiled space if any of the ims options are + set. We also have to allow for resetting space at the end of + the group, which is why 4 is added to the length and not just 2. + If there are several changes of options within the same group, this + will lead to an over-estimate on the length, but this shouldn't + matter very much. We also have to allow for resetting options at + the start of any alternations, which we do by setting + branch_newextra to 2. Finally, we record whether the case-dependent + flag ever changes within the regex. This is used by the "required + character" code. */ + + case ':': + if (((set | unset) & PCRE_IMS) != 0) { + length += 4; + branch_newextra = 2; + if (((set | unset) & PCRE_CASELESS) != 0) + options |= PCRE_ICHANGED; + } + goto END_OPTIONS; + + /* Unrecognized option character */ + + default: + *errorptr = ERR12; + goto PCRE_ERROR_RETURN; + } + } + + /* If we hit a closing bracket, that's it - this is a freestanding + option-setting. We need to ensure that branch_extra is updated if + necessary. The only values branch_newextra can have here are 0 or 2. + If the value is 2, then branch_extra must either be 2 or 5, depending + on whether this is a lookbehind group or not. */ + + END_OPTIONS: + if (c == ')') { + if (branch_newextra == 2 && + (branch_extra == 0 + || branch_extra == + 1 + LINK_SIZE)) branch_extra += + branch_newextra; + continue; + } + + /* If options were terminated by ':' control comes here. Fall through + to handle the group below. */ + } + } + + /* Extracting brackets must be counted so we can process escapes in a + Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to + need an additional 3 bytes of store per extracting bracket. However, if + PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, so we + must leave the count alone (it will aways be zero). */ + + else if ((options & PCRE_NO_AUTO_CAPTURE) == 0) { + bracount++; + if (bracount > EXTRACT_BASIC_MAX) + bracket_length += 3; + } + + /* Save length for computing whole length at end if there's a repeat that + requires duplication of the group. Also save the current value of + branch_extra, and start the new group with the new value. If non-zero, this + will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */ + + if (brastackptr >= sizeof (brastack) / sizeof (int)) { + *errorptr = ERR19; + goto PCRE_ERROR_RETURN; + } + + bralenstack[brastackptr] = branch_extra; + branch_extra = branch_newextra; + + brastack[brastackptr++] = length; + length += bracket_length; + continue; + + /* Handle ket. Look for subsequent max/min; for certain sets of values we + have to replicate this bracket up to that many times. If brastackptr is + 0 this is an unmatched bracket which will generate an error, but take care + not to try to access brastack[-1] when computing the length and restoring + the branch_extra value. */ + + case ')': + length += 1 + LINK_SIZE; + if (brastackptr > 0) { + duplength = length - brastack[--brastackptr]; + branch_extra = bralenstack[brastackptr]; + } else + duplength = 0; + + /* The following code is also used when a recursion such as (?3) is + followed by a quantifier, because in that case, it has to be wrapped inside + brackets so that the quantifier works. The value of duplength must be + set before arrival. */ + + HANDLE_QUANTIFIED_BRACKETS: + + /* Leave ptr at the final char; for read_repeat_counts this happens + automatically; for the others we need an increment. */ + + if ((c = ptr[1]) == '{' && is_counted_repeat (ptr + 2)) { + ptr = read_repeat_counts (ptr + 2, &min, &max, errorptr); + if (*errorptr != NULL) + goto PCRE_ERROR_RETURN; + } else if (c == '*') { + min = 0; + max = -1; + ptr++; + } else if (c == '+') { + min = 1; + max = -1; + ptr++; + } else if (c == '?') { + min = 0; + max = 1; + ptr++; + } else { + min = 1; + max = 1; + } + + /* If the minimum is zero, we have to allow for an OP_BRAZERO before the + group, and if the maximum is greater than zero, we have to replicate + maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting + bracket set. */ + + if (min == 0) { + length++; + if (max > 0) + length += (max - 1) * (duplength + 3 + 2 * LINK_SIZE); + } + + /* When the minimum is greater than zero, we have to replicate up to + minval-1 times, with no additions required in the copies. Then, if there + is a limited maximum we have to replicate up to maxval-1 times allowing + for a BRAZERO item before each optional copy and nesting brackets for all + but one of the optional copies. */ + + else { + length += (min - 1) * duplength; + if (max > min) /* Need this test as max=-1 means no limit */ + length += (max - min) * (duplength + 3 + 2 * LINK_SIZE) + - (2 + 2 * LINK_SIZE); + } + + /* Allow space for once brackets for "possessive quantifier" */ + + if (ptr[1] == '+') { + ptr++; + length += 2 + 2 * LINK_SIZE; + } + continue; + + /* Non-special character. It won't be space or # in extended mode, so it is + always a genuine character. If we are in a \Q...\E sequence, check for the + end; if not, we have a literal. */ + + default: + NORMAL_CHAR: + + if (inescq && c == '\\' && ptr[1] == 'E') { + inescq = FALSE; + ptr++; + continue; + } + + length += 2; /* For a one-byte character */ + lastitemlength = 1; /* Default length of last item for repeats */ + + /* In UTF-8 mode, check for additional bytes. */ + +#ifdef SUPPORT_UTF8 + if (utf8 && (c & 0xc0) == 0xc0) { + while ((ptr[1] & 0xc0) == 0x80) { /* Can't flow over the end *//* because the end is marked */ + lastitemlength++; /* by a zero byte. */ + length++; + ptr++; + } + } +#endif + + continue; + } + } + + length += 2 + LINK_SIZE; /* For final KET and END */ + + if ((options & PCRE_AUTO_CALLOUT) != 0) + length += 2 + 2 * LINK_SIZE; /* For final callout */ + + if (length > MAX_PATTERN_SIZE) { + *errorptr = ERR20; + return NULL; + } + + /* Compute the size of data block needed and get it, either from malloc or + externally provided function. */ + + size = length + sizeof (real_pcre) + name_count * (max_name_size + 3); + re = (real_pcre *) (pcre_malloc) (size); + + if (re == NULL) { + *errorptr = ERR21; + return NULL; + } + + /* Put in the magic number, and save the sizes, options, and character table + pointer. NULL is used for the default character tables. The nullpad field is at + the end; it's there to help in the case when a regex compiled on a system with + 4-byte pointers is run on another with 8-byte pointers. */ + + re->magic_number = MAGIC_NUMBER; + re->size = size; + re->options = options; + re->dummy1 = re->dummy2 = 0; + re->name_table_offset = sizeof (real_pcre); + re->name_entry_size = max_name_size + 3; + re->name_count = name_count; + re->tables = (tables == make_pcre_default_tables ())? NULL : tables; + re->nullpad = NULL; + + /* The starting points of the name/number translation table and of the code are + passed around in the compile data block. */ + + compile_block.names_found = 0; + compile_block.name_entry_size = max_name_size + 3; + compile_block.name_table = (uschar *) re + re->name_table_offset; + codestart = + compile_block.name_table + re->name_entry_size * re->name_count; + compile_block.start_code = codestart; + compile_block.start_pattern = (const uschar *) pattern; + compile_block.req_varyopt = 0; + compile_block.nopartial = FALSE; + + /* Set up a starting, non-extracting bracket, then compile the expression. On + error, *errorptr will be set non-NULL, so we don't need to look at the result + of the function here. */ + + ptr = (const uschar *) pattern; + code = (uschar *) codestart; + *code = OP_BRA; + bracount = 0; + (void) compile_regex (options, options & PCRE_IMS, &bracount, &code, &ptr, + errorptr, FALSE, 0, &firstbyte, &reqbyte, NULL, + &compile_block); + re->top_bracket = bracount; + re->top_backref = compile_block.top_backref; + + if (compile_block.nopartial) + re->options |= PCRE_NOPARTIAL; + + /* If not reached end of pattern on success, there's an excess bracket. */ + + if (*errorptr == NULL && *ptr != 0) + *errorptr = ERR22; + + /* Fill in the terminating state and check for disastrous overflow, but + if debugging, leave the test till after things are printed out. */ + + *code++ = OP_END; + +#ifndef DEBUG + if (code - codestart > length) + *errorptr = ERR23; +#endif + + /* Give an error if there's back reference to a non-existent capturing + subpattern. */ + + if (re->top_backref > re->top_bracket) + *errorptr = ERR15; + + /* Failed to compile, or error while post-processing */ + + if (*errorptr != NULL) { + (pcre_free) (re); + PCRE_ERROR_RETURN: + *erroroffset = ptr - (const uschar *) pattern; + return NULL; + } + + /* If the anchored option was not passed, set the flag if we can determine that + the pattern is anchored by virtue of ^ characters or \A or anything else (such + as starting with .* when DOTALL is set). + + Otherwise, if we know what the first character has to be, save it, because that + speeds up unanchored matches no end. If not, see if we can set the + PCRE_STARTLINE flag. This is helpful for multiline matches when all branches + start with ^. and also when all branches start with .* for non-DOTALL matches. + */ + + if ((options & PCRE_ANCHORED) == 0) { + int temp_options = options; + if (is_anchored + (codestart, &temp_options, 0, + compile_block.backref_map)) re->options |= PCRE_ANCHORED; + else { + if (firstbyte < 0) + firstbyte = + find_firstassertedchar (codestart, &temp_options, + FALSE); + if (firstbyte >= 0) { /* Remove caseless flag for non-caseable chars */ + int ch = firstbyte & 255; + re->first_byte = ((firstbyte & REQ_CASELESS) != 0 && + compile_block.fcc[ch] == + ch) ? ch : firstbyte; + re->options |= PCRE_FIRSTSET; + } + else + if (is_startline (codestart, 0, compile_block.backref_map)) + re->options |= PCRE_STARTLINE; + } + } + + /* For an anchored pattern, we use the "required byte" only if it follows a + variable length item in the regex. Remove the caseless flag for non-caseable + bytes. */ + + if (reqbyte >= 0 && + ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0)) { + int ch = reqbyte & 255; + re->req_byte = ((reqbyte & REQ_CASELESS) != 0 && + compile_block.fcc[ch] == + ch) ? (reqbyte & ~REQ_CASELESS) : reqbyte; + re->options |= PCRE_REQCHSET; + } + + /* Print out the compiled data for debugging */ + +#ifdef DEBUG + + printf ("Length = %d top_bracket = %d top_backref = %d\n", + length, re->top_bracket, re->top_backref); + + if (re->options != 0) { + printf ("%s%s%s%s%s%s%s%s%s%s\n", + ((re->options & PCRE_NOPARTIAL) != 0) ? "nopartial " : "", + ((re->options & PCRE_ANCHORED) != 0) ? "anchored " : "", + ((re->options & PCRE_CASELESS) != 0) ? "caseless " : "", + ((re->options & PCRE_ICHANGED) != + 0) ? "case state changed " : "", + ((re->options & PCRE_EXTENDED) != 0) ? "extended " : "", + ((re->options & PCRE_MULTILINE) != 0) ? "multiline " : "", + ((re->options & PCRE_DOTALL) != 0) ? "dotall " : "", + ((re->options & PCRE_DOLLAR_ENDONLY) != + 0) ? "endonly " : "", + ((re->options & PCRE_EXTRA) != 0) ? "extra " : "", + ((re->options & PCRE_UNGREEDY) != 0) ? "ungreedy " : ""); + } + + if ((re->options & PCRE_FIRSTSET) != 0) { + int ch = re->first_byte & 255; + const char *caseless = + ((re->first_byte & REQ_CASELESS) == 0) ? "" : " (caseless)"; + if (g_unichar_isprint (ch)) + printf ("First char = %c%s\n", ch, caseless); + else + printf ("First char = \\x%02x%s\n", ch, caseless); + } + + if ((re->options & PCRE_REQCHSET) != 0) { + int ch = re->req_byte & 255; + const char *caseless = + ((re->req_byte & REQ_CASELESS) == 0) ? "" : " (caseless)"; + if (g_unichar_isprint (ch)) + printf ("Req char = %c%s\n", ch, caseless); + else + printf ("Req char = \\x%02x%s\n", ch, caseless); + } + + print_internals (re, stdout); + + /* This check is done here in the debugging case so that the code that + was compiled can be seen. */ + + if (code - codestart > length) { + *errorptr = ERR23; + (pcre_free) (re); + *erroroffset = ptr - (uschar *) pattern; + return NULL; + } +#endif + + return (pcre *) re; +} + + + +/************************************************* +* Match a back-reference * +*************************************************/ + +/* If a back reference hasn't been set, the length that is passed is greater + than the number of characters left in the string, so the match fails. + + Arguments: + offset index into the offset vector + eptr points into the subject + length length to be matched + md points to match data block + ims the ims flags + + Returns: TRUE if matched + */ + +static BOOL +match_ref (int offset, register const uschar * eptr, int length, + match_data * md, unsigned long int ims) +{ + const uschar *p = md->start_subject + md->offset_vector[offset]; + +#ifdef DEBUG + if (eptr >= md->end_subject) + printf ("matching subject "); + else { + printf ("matching subject "); + pchars (eptr, length, TRUE, md); + } + printf (" against backref "); + pchars (p, length, FALSE, md); + printf ("\n"); +#endif + + /* Always fail if not enough characters left */ + + if (length > md->end_subject - eptr) + return FALSE; + + /* Separate the caselesss case for speed */ + + if ((ims & PCRE_CASELESS) != 0) { + while (length-- > 0) + if (md->lcc[*p++] != md->lcc[*eptr++]) + return FALSE; + } else { + while (length-- > 0) + if (*p++ != *eptr++) + return FALSE; + } + + return TRUE; +} + + +#ifdef SUPPORT_UTF8 +/************************************************* +* Match character against an XCLASS * +*************************************************/ + +/* This function is called from within the XCLASS code below, to match a + character against an extended class which might match values > 255. + + Arguments: + c the character + data points to the flag byte of the XCLASS data + + Returns: TRUE if character matches, else FALSE + */ + +static BOOL +match_xclass (int c, const uschar * data) +{ + int t; + BOOL negated = (*data & XCL_NOT) != 0; + + /* Character values < 256 are matched against a bitmap, if one is present. If + not, we still carry on, because there may be ranges that start below 256 in the + additional data. */ + + if (c < 256) { + if ((*data & XCL_MAP) != 0 + && (data[1 + c / 8] & (1 << (c & 7))) != 0) return !negated; /* char found */ + } + + /* First skip the bit map if present. Then match against the list of Unicode + properties or large chars or ranges that end with a large char. We won't ever + encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */ + + if ((*data++ & XCL_MAP) != 0) + data += 32; + + while ((t = *data++) != XCL_END) { + int x, y; + if (t == XCL_SINGLE) { + GETCHARINC (x, data); + if (c == x) + return !negated; + } else if (t == XCL_RANGE) { + GETCHARINC (x, data); + GETCHARINC (y, data); + if (c >= x && c <= y) + return !negated; + } +#ifdef SUPPORT_UCP + else { /* XCL_PROP & XCL_NOTPROP */ + + int chartype, othercase; + int rqdtype = *data++; + int category = ucp_findchar (c, &chartype, &othercase); + if (rqdtype >= 128) { + if ((rqdtype - 128 == category) == (t == XCL_PROP)) + return !negated; + } else { + if ((rqdtype == chartype) == (t == XCL_PROP)) + return !negated; + } + } +#endif /* SUPPORT_UCP */ + } + + return negated; /* char did not match */ +} +#endif + + +/*************************************************************************** +**************************************************************************** + RECURSION IN THE match() FUNCTION + +The match() function is highly recursive. Some regular expressions can cause +it to recurse thousands of times. I was writing for Unix, so I just let it +call itself recursively. This uses the stack for saving everything that has +to be saved for a recursive call. On Unix, the stack can be large, and this +works fine. + +It turns out that on non-Unix systems there are problems with programs that +use a lot of stack. (This despite the fact that every last chip has oodles +of memory these days, and techniques for extending the stack have been known +for decades.) So.... + +There is a fudge, triggered by defining NO_RECURSE, which avoids recursive +calls by keeping local variables that need to be preserved in blocks of memory +obtained from malloc instead instead of on the stack. Macros are used to +achieve this so that the actual code doesn't look very different to what it +always used to. +**************************************************************************** +***************************************************************************/ + + +/* These versions of the macros use the stack, as normal */ + +#ifndef NO_RECURSE +#define REGISTER register +#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg) rx = match(ra,rb,rc,rd,re,rf,rg) +#define RRETURN(ra) return ra +#else + + +/* These versions of the macros manage a private stack on the heap. Note + that the rd argument of RMATCH isn't actually used. It's the md argument of + match(), which never changes. */ + +#define REGISTER + +#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg)\ + {\ + heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\ + if (setjmp(frame->Xwhere) == 0)\ + {\ + newframe->Xeptr = ra;\ + newframe->Xecode = rb;\ + newframe->Xoffset_top = rc;\ + newframe->Xims = re;\ + newframe->Xeptrb = rf;\ + newframe->Xflags = rg;\ + newframe->Xprevframe = frame;\ + frame = newframe;\ + DPRINTF(("restarting from line %d\n", __LINE__));\ + goto HEAP_RECURSE;\ + }\ + else\ + {\ + DPRINTF(("longjumped back to line %d\n", __LINE__));\ + frame = md->thisframe;\ + rx = frame->Xresult;\ + }\ + } + +#define RRETURN(ra)\ + {\ + heapframe *newframe = frame;\ + frame = newframe->Xprevframe;\ + (pcre_stack_free)(newframe);\ + if (frame != NULL)\ + {\ + frame->Xresult = ra;\ + md->thisframe = frame;\ + longjmp(frame->Xwhere, 1);\ + }\ + return ra;\ + } + + +/* Structure for remembering the local variables in a private frame */ + +typedef struct heapframe { + struct heapframe *Xprevframe; + + /* Function arguments that may change */ + + const uschar *Xeptr; + const uschar *Xecode; + int Xoffset_top; + long int Xims; + eptrblock *Xeptrb; + int Xflags; + + /* Function local variables */ + + const uschar *Xcallpat; + const uschar *Xcharptr; + const uschar *Xdata; + const uschar *Xnext; + const uschar *Xpp; + const uschar *Xprev; + const uschar *Xsaved_eptr; + + recursion_info Xnew_recursive; + + BOOL Xcur_is_word; + BOOL Xcondition; + BOOL Xminimize; + BOOL Xprev_is_word; + + unsigned long int Xoriginal_ims; + +#ifdef SUPPORT_UCP + int Xprop_type; + int Xprop_fail_result; + int Xprop_category; + int Xprop_chartype; + int Xprop_othercase; + int Xprop_test_against; + int *Xprop_test_variable; +#endif + + int Xctype; + int Xfc; + int Xfi; + int Xlength; + int Xmax; + int Xmin; + int Xnumber; + int Xoffset; + int Xop; + int Xsave_capture_last; + int Xsave_offset1, Xsave_offset2, Xsave_offset3; + int Xstacksave[REC_STACK_SAVE_MAX]; + + eptrblock Xnewptrb; + + /* Place to pass back result, and where to jump back to */ + + int Xresult; + jmp_buf Xwhere; + +} heapframe; + +#endif + + +/*************************************************************************** +***************************************************************************/ + + + +/************************************************* +* Match from current position * +*************************************************/ + +/* On entry ecode points to the first opcode, and eptr to the first character + in the subject string, while eptrb holds the value of eptr at the start of the + last bracketed group - used for breaking infinite loops matching zero-length + strings. This function is called recursively in many circumstances. Whenever it + returns a negative (error) response, the outer incarnation must also return the + same response. + + Performance note: It might be tempting to extract commonly used fields from the + md structure (e.g. utf8, end_subject) into individual variables to improve + performance. Tests using gcc on a SPARC disproved this; in the first case, it + made performance worse. + + Arguments: + eptr pointer in subject + ecode position in code + offset_top current top pointer + md pointer to "static" info for the match + ims current /i, /m, and /s options + eptrb pointer to chain of blocks containing eptr at start of + brackets - for testing for empty matches + flags can contain + match_condassert - this is an assertion condition + match_isgroup - this is the start of a bracketed group + + Returns: MATCH_MATCH if matched ) these values are >= 0 + MATCH_NOMATCH if failed to match ) + a negative PCRE_ERROR_xxx value if aborted by an error condition + (e.g. stopped by recursion limit) + */ + +static int +match (REGISTER const uschar * eptr, REGISTER const uschar * ecode, + int offset_top, match_data * md, unsigned long int ims, + eptrblock * eptrb, int flags) +{ + /* These variables do not need to be preserved over recursion in this function, + so they can be ordinary variables in all cases. Mark them with "register" + because they are used a lot in loops. */ + + register int rrc; /* Returns from recursive calls */ + register int i; /* Used for loops not involving calls to RMATCH() */ + register int c; /* Character values not kept over RMATCH() calls */ + + /* When recursion is not being used, all "local" variables that have to be + preserved over calls to RMATCH() are part of a "frame" which is obtained from + heap storage. Set up the top-level frame here; others are obtained from the + heap whenever RMATCH() does a "recursion". See the macro definitions above. */ + +#ifdef NO_RECURSE + heapframe *frame = (pcre_stack_malloc) (sizeof (heapframe)); + frame->Xprevframe = NULL; /* Marks the top level */ + + /* Copy in the original argument variables */ + + frame->Xeptr = eptr; + frame->Xecode = ecode; + frame->Xoffset_top = offset_top; + frame->Xims = ims; + frame->Xeptrb = eptrb; + frame->Xflags = flags; + + /* This is where control jumps back to to effect "recursion" */ + + HEAP_RECURSE: + + /* Macros make the argument variables come from the current frame */ + +#define eptr frame->Xeptr +#define ecode frame->Xecode +#define offset_top frame->Xoffset_top +#define ims frame->Xims +#define eptrb frame->Xeptrb +#define flags frame->Xflags + + /* Ditto for the local variables */ + +#ifdef SUPPORT_UTF8 +#define charptr frame->Xcharptr +#endif +#define callpat frame->Xcallpat +#define data frame->Xdata +#define next frame->Xnext +#define pp frame->Xpp +#define prev frame->Xprev +#define saved_eptr frame->Xsaved_eptr + +#define new_recursive frame->Xnew_recursive + +#define cur_is_word frame->Xcur_is_word +#define condition frame->Xcondition +#define minimize frame->Xminimize +#define prev_is_word frame->Xprev_is_word + +#define original_ims frame->Xoriginal_ims + +#ifdef SUPPORT_UCP +#define prop_type frame->Xprop_type +#define prop_fail_result frame->Xprop_fail_result +#define prop_category frame->Xprop_category +#define prop_chartype frame->Xprop_chartype +#define prop_othercase frame->Xprop_othercase +#define prop_test_against frame->Xprop_test_against +#define prop_test_variable frame->Xprop_test_variable +#endif + +#define ctype frame->Xctype +#define fc frame->Xfc +#define fi frame->Xfi +#define length frame->Xlength +#define max frame->Xmax +#define min frame->Xmin +#define number frame->Xnumber +#define offset frame->Xoffset +#define op frame->Xop +#define save_capture_last frame->Xsave_capture_last +#define save_offset1 frame->Xsave_offset1 +#define save_offset2 frame->Xsave_offset2 +#define save_offset3 frame->Xsave_offset3 +#define stacksave frame->Xstacksave + +#define newptrb frame->Xnewptrb + + /* When recursion is being used, local variables are allocated on the stack and + get preserved during recursion in the normal way. In this environment, fi and + i, and fc and c, can be the same variables. */ + +#else +#define fi i +#define fc c + + +#ifdef SUPPORT_UTF8 /* Many of these variables are used ony */ + const uschar *charptr; /* small blocks of the code. My normal */ +#endif /* style of coding would have declared */ + const uschar *callpat; /* them within each of those blocks. */ + const uschar *data; /* However, in order to accommodate the */ + const uschar *next; /* version of this code that uses an */ + const uschar *pp; /* external "stack" implemented on the */ + const uschar *prev; /* heap, it is easier to declare them */ + const uschar *saved_eptr; /* all here, so the declarations can */ + /* be cut out in a block. The only */ + recursion_info new_recursive; /* declarations within blocks below are */ + /* for variables that do not have to */ + BOOL cur_is_word; /* be preserved over a recursive call */ + BOOL condition; /* to RMATCH(). */ + BOOL minimize; + BOOL prev_is_word; + + unsigned long int original_ims; + +#ifdef SUPPORT_UCP + int prop_type; + int prop_fail_result; + int prop_category; + int prop_chartype; + int prop_othercase; + int prop_test_against; + int *prop_test_variable; +#endif + + int ctype; + int length; + int max; + int min; + int number; + int offset; + int op; + int save_capture_last; + int save_offset1, save_offset2, save_offset3; + int stacksave[REC_STACK_SAVE_MAX]; + + eptrblock newptrb; +#endif + + /* These statements are here to stop the compiler complaining about unitialized + variables. */ + +#ifdef SUPPORT_UCP + prop_fail_result = 0; + prop_test_against = 0; + prop_test_variable = NULL; +#endif + + /* OK, now we can get on with the real code of the function. Recursion is + specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined, + these just turn into a recursive call to match() and a "return", respectively. + However, RMATCH isn't like a function call because it's quite a complicated + macro. It has to be used in one particular way. This shouldn't, however, impact + performance when true recursion is being used. */ + + if (md->match_call_count++ >= md->match_limit) + RRETURN (PCRE_ERROR_MATCHLIMIT); + + original_ims = ims; /* Save for resetting on ')' */ + + /* At the start of a bracketed group, add the current subject pointer to the + stack of such pointers, to be re-instated at the end of the group when we hit + the closing ket. When match() is called in other circumstances, we don't add to + this stack. */ + + if ((flags & match_isgroup) != 0) { + newptrb.epb_prev = eptrb; + newptrb.epb_saved_eptr = eptr; + eptrb = &newptrb; + } + + /* Now start processing the operations. */ + + for (;;) { + op = *ecode; + minimize = FALSE; + + /* For partial matching, remember if we ever hit the end of the subject after + matching at least one subject character. */ + + if (md->partial && + eptr >= md->end_subject && + eptr > md->start_match) md->hitend = TRUE; + + /* Opening capturing bracket. If there is space in the offset vector, save + the current subject position in the working slot at the top of the vector. We + mustn't change the current values of the data slot, because they may be set + from a previous iteration of this group, and be referred to by a reference + inside the group. + + If the bracket fails to match, we need to restore this value and also the + values of the final offsets, in case they were set by a previous iteration of + the same bracket. + + If there isn't enough space in the offset vector, treat this as if it were a + non-capturing bracket. Don't worry about setting the flag for the error case + here; that is handled in the code for KET. */ + + if (op > OP_BRA) { + number = op - OP_BRA; + + /* For extended extraction brackets (large number), we have to fish out the + number from a dummy opcode at the start. */ + + if (number > EXTRACT_BASIC_MAX) + number = GET2 (ecode, 2 + LINK_SIZE); + offset = number << 1; + +#ifdef DEBUG + printf ("start bracket %d subject=", number); + pchars (eptr, 16, TRUE, md); + printf ("\n"); +#endif + + if (offset < md->offset_max) { + save_offset1 = md->offset_vector[offset]; + save_offset2 = md->offset_vector[offset + 1]; + save_offset3 = md->offset_vector[md->offset_end - number]; + save_capture_last = md->capture_last; + + DPRINTF ( + ("saving %d %d %d\n", save_offset1, save_offset2, + save_offset3)); + md->offset_vector[md->offset_end - number] = + eptr - md->start_subject; + + do { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + md->capture_last = save_capture_last; + ecode += GET (ecode, 1); + } + while (*ecode == OP_ALT); + + DPRINTF (("bracket %d failed\n", number)); + + md->offset_vector[offset] = save_offset1; + md->offset_vector[offset + 1] = save_offset2; + md->offset_vector[md->offset_end - number] = save_offset3; + + RRETURN (MATCH_NOMATCH); + } + + /* Insufficient room for saving captured contents */ + + else + op = OP_BRA; + } + + /* Other types of node can be handled by a switch */ + + switch (op) { + case OP_BRA: /* Non-capturing bracket: optimized */ + DPRINTF (("start bracket 0\n")); + do { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, + ims, eptrb, match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + ecode += GET (ecode, 1); + } + while (*ecode == OP_ALT); + DPRINTF (("bracket 0 failed\n")); + RRETURN (MATCH_NOMATCH); + + /* Conditional group: compilation checked that there are no more than + two branches. If the condition is false, skipping the first branch takes us + past the end if there is only one branch, but that's OK because that is + exactly what going to the ket would do. */ + + case OP_COND: + if (ecode[LINK_SIZE + 1] == OP_CREF) { /* Condition extract or recurse test */ + offset = GET2 (ecode, LINK_SIZE + 2) << 1; /* Doubled ref number */ + condition = (offset == CREF_RECURSE * 2) ? + (md->recursive != NULL) : + (offset < offset_top + && md->offset_vector[offset] >= 0); + RMATCH (rrc, eptr, + ecode + + (condition ? (LINK_SIZE + 4) + : (LINK_SIZE + 1 + GET (ecode, 1))), offset_top, + md, ims, eptrb, match_isgroup); + RRETURN (rrc); + } + + /* The condition is an assertion. Call match() to evaluate it - setting + the final argument TRUE causes it to stop at the end of an assertion. */ + + else { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, + ims, NULL, match_condassert | match_isgroup); + if (rrc == MATCH_MATCH) { + ecode += 1 + LINK_SIZE + GET (ecode, LINK_SIZE + 2); + while (*ecode == OP_ALT) + ecode += GET (ecode, 1); + } else if (rrc != MATCH_NOMATCH) { + RRETURN (rrc); /* Need braces because of following else */ + } else + ecode += GET (ecode, 1); + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, + ims, eptrb, match_isgroup); + RRETURN (rrc); + } + /* Control never reaches here */ + + /* Skip over conditional reference or large extraction number data if + encountered. */ + + case OP_CREF: + case OP_BRANUMBER: + ecode += 3; + break; + + /* End of the pattern. If we are in a recursion, we should restore the + offsets appropriately and continue from after the call. */ + + case OP_END: + if (md->recursive != NULL && md->recursive->group_num == 0) { + recursion_info *rec = md->recursive; + DPRINTF (("Hit the end in a (?0) recursion\n")); + md->recursive = rec->prevrec; + memmove (md->offset_vector, rec->offset_save, + rec->saved_max * sizeof (int)); + md->start_match = rec->save_start; + ims = original_ims; + ecode = rec->after_call; + break; + } + + /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty + string - backtracking will then try other alternatives, if any. */ + + if (md->notempty && eptr == md->start_match) + RRETURN (MATCH_NOMATCH); + md->end_match_ptr = eptr; /* Record where we ended */ + md->end_offset_top = offset_top; /* and how many extracts were taken */ + RRETURN (MATCH_MATCH); + + /* Change option settings */ + + case OP_OPT: + ims = ecode[1]; + ecode += 2; + DPRINTF (("ims set to %02lx\n", ims)); + break; + + /* Assertion brackets. Check the alternative branches in turn - the + matching won't pass the KET for an assertion. If any one branch matches, + the assertion is true. Lookbehind assertions have an OP_REVERSE item at the + start of each branch to move the current point backwards, so the code at + this level is identical to the lookahead case. */ + + case OP_ASSERT: + case OP_ASSERTBACK: + do { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, + ims, NULL, match_isgroup); + if (rrc == MATCH_MATCH) + break; + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + ecode += GET (ecode, 1); + } + while (*ecode == OP_ALT); + if (*ecode == OP_KET) + RRETURN (MATCH_NOMATCH); + + /* If checking an assertion for a condition, return MATCH_MATCH. */ + + if ((flags & match_condassert) != 0) + RRETURN (MATCH_MATCH); + + /* Continue from after the assertion, updating the offsets high water + mark, since extracts may have been taken during the assertion. */ + + do + ecode += GET (ecode, 1); + while (*ecode == OP_ALT); + ecode += 1 + LINK_SIZE; + offset_top = md->end_offset_top; + continue; + + /* Negative assertion: all branches must fail to match */ + + case OP_ASSERT_NOT: + case OP_ASSERTBACK_NOT: + do { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, + ims, NULL, match_isgroup); + if (rrc == MATCH_MATCH) + RRETURN (MATCH_NOMATCH); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + ecode += GET (ecode, 1); + } + while (*ecode == OP_ALT); + + if ((flags & match_condassert) != 0) + RRETURN (MATCH_MATCH); + + ecode += 1 + LINK_SIZE; + continue; + + /* Move the subject pointer back. This occurs only at the start of + each branch of a lookbehind assertion. If we are too close to the start to + move back, this match function fails. When working with UTF-8 we move + back a number of characters, not bytes. */ + + case OP_REVERSE: +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) { + c = GET (ecode, 1); + for (i = 0; i < c; i++) { + eptr--; + if (eptr < md->start_subject) + RRETURN (MATCH_NOMATCH); + BACKCHAR (eptr) + } + } else +#endif + + /* No UTF-8 support, or not in UTF-8 mode: count is byte count */ + + { + eptr -= GET (ecode, 1); + if (eptr < md->start_subject) + RRETURN (MATCH_NOMATCH); + } + + /* Skip to next op code */ + + ecode += 1 + LINK_SIZE; + break; + + /* The callout item calls an external function, if one is provided, passing + details of the match so far. This is mainly for debugging, though the + function is able to force a failure. */ + + case OP_CALLOUT: + if (pcre_callout != NULL) { + pcre_callout_block cb; + cb.version = 1; /* Version 1 of the callout block */ + cb.callout_number = ecode[1]; + cb.offset_vector = md->offset_vector; + cb.subject = (const char *) md->start_subject; + cb.subject_length = md->end_subject - md->start_subject; + cb.start_match = md->start_match - md->start_subject; + cb.current_position = eptr - md->start_subject; + cb.pattern_position = GET (ecode, 2); + cb.next_item_length = GET (ecode, 2 + LINK_SIZE); + cb.capture_top = offset_top / 2; + cb.capture_last = md->capture_last; + cb.callout_data = md->callout_data; + if ((rrc = (*pcre_callout) (&cb)) > 0) + RRETURN (MATCH_NOMATCH); + if (rrc < 0) + RRETURN (rrc); + } + ecode += 2 + 2 * LINK_SIZE; + break; + + /* Recursion either matches the current regex, or some subexpression. The + offset data is the offset to the starting bracket from the start of the + whole pattern. (This is so that it works from duplicated subpatterns.) + + If there are any capturing brackets started but not finished, we have to + save their starting points and reinstate them after the recursion. However, + we don't know how many such there are (offset_top records the completed + total) so we just have to save all the potential data. There may be up to + 65535 such values, which is too large to put on the stack, but using malloc + for small numbers seems expensive. As a compromise, the stack is used when + there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc + is used. A problem is what to do if the malloc fails ... there is no way of + returning to the top level with an error. Save the top REC_STACK_SAVE_MAX + values on the stack, and accept that the rest may be wrong. + + There are also other values that have to be saved. We use a chained + sequence of blocks that actually live on the stack. Thanks to Robin Houston + for the original version of this logic. */ + + case OP_RECURSE: + { + callpat = md->start_code + GET (ecode, 1); + new_recursive.group_num = *callpat - OP_BRA; + + /* For extended extraction brackets (large number), we have to fish out + the number from a dummy opcode at the start. */ + + if (new_recursive.group_num > EXTRACT_BASIC_MAX) + new_recursive.group_num = + GET2 (callpat, 2 + LINK_SIZE); + + /* Add to "recursing stack" */ + + new_recursive.prevrec = md->recursive; + md->recursive = &new_recursive; + + /* Find where to continue from afterwards */ + + ecode += 1 + LINK_SIZE; + new_recursive.after_call = ecode; + + /* Now save the offset data. */ + + new_recursive.saved_max = md->offset_end; + if (new_recursive.saved_max <= REC_STACK_SAVE_MAX) + new_recursive.offset_save = stacksave; + else { + new_recursive.offset_save = + (int *) (pcre_malloc) (new_recursive.saved_max * + sizeof (int)); + if (new_recursive.offset_save == NULL) + RRETURN (PCRE_ERROR_NOMEMORY); + } + + memcpy (new_recursive.offset_save, md->offset_vector, + new_recursive.saved_max * sizeof (int)); + new_recursive.save_start = md->start_match; + md->start_match = eptr; + + /* OK, now we can do the recursion. For each top-level alternative we + restore the offset and recursion data. */ + + DPRINTF ( + ("Recursing into group %d\n", + new_recursive.group_num)); + do { + RMATCH (rrc, eptr, callpat + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, match_isgroup); + if (rrc == MATCH_MATCH) { + md->recursive = new_recursive.prevrec; + if (new_recursive.offset_save != stacksave) + (pcre_free) (new_recursive.offset_save); + RRETURN (MATCH_MATCH); + } else if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + + md->recursive = &new_recursive; + memcpy (md->offset_vector, new_recursive.offset_save, + new_recursive.saved_max * sizeof (int)); + callpat += GET (callpat, 1); + } + while (*callpat == OP_ALT); + + DPRINTF (("Recursion didn't match\n")); + md->recursive = new_recursive.prevrec; + if (new_recursive.offset_save != stacksave) + (pcre_free) (new_recursive.offset_save); + RRETURN (MATCH_NOMATCH); + } + /* Control never reaches here */ + + /* "Once" brackets are like assertion brackets except that after a match, + the point in the subject string is not moved back. Thus there can never be + a move back into the brackets. Friedl calls these "atomic" subpatterns. + Check the alternative branches in turn - the matching won't pass the KET + for this kind of subpattern. If any one branch matches, we carry on as at + the end of a normal bracket, leaving the subject pointer. */ + + case OP_ONCE: + { + prev = ecode; + saved_eptr = eptr; + + do { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, match_isgroup); + if (rrc == MATCH_MATCH) + break; + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + ecode += GET (ecode, 1); + } + while (*ecode == OP_ALT); + + /* If hit the end of the group (which could be repeated), fail */ + + if (*ecode != OP_ONCE && *ecode != OP_ALT) + RRETURN (MATCH_NOMATCH); + + /* Continue as from after the assertion, updating the offsets high water + mark, since extracts may have been taken. */ + + do + ecode += GET (ecode, 1); + while (*ecode == OP_ALT); + + offset_top = md->end_offset_top; + eptr = md->end_match_ptr; + + /* For a non-repeating ket, just continue at this level. This also + happens for a repeating ket if no characters were matched in the group. + This is the forcible breaking of infinite loops as implemented in Perl + 5.005. If there is an options reset, it will get obeyed in the normal + course of events. */ + + if (*ecode == OP_KET || eptr == saved_eptr) { + ecode += 1 + LINK_SIZE; + break; + } + + /* The repeating kets try the rest of the pattern or restart from the + preceding bracket, in the appropriate order. We need to reset any options + that changed within the bracket before re-running it, so check the next + opcode. */ + + if (ecode[1 + LINK_SIZE] == OP_OPT) { + ims = (ims & ~PCRE_IMS) | ecode[4]; + DPRINTF (("ims set to %02lx at group repeat\n", ims)); + } + + if (*ecode == OP_KETRMIN) { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + RMATCH (rrc, eptr, prev, offset_top, md, ims, eptrb, + match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } else { /* OP_KETRMAX */ + + RMATCH (rrc, eptr, prev, offset_top, md, ims, eptrb, + match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } + } + RRETURN (MATCH_NOMATCH); + + /* An alternation is the end of a branch; scan along to find the end of the + bracketed group and go to there. */ + + case OP_ALT: + do + ecode += GET (ecode, 1); + while (*ecode == OP_ALT); + break; + + /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating + that it may occur zero times. It may repeat infinitely, or not at all - + i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper + repeat limits are compiled as a number of copies, with the optional ones + preceded by BRAZERO or BRAMINZERO. */ + + case OP_BRAZERO: + { + next = ecode + 1; + RMATCH (rrc, eptr, next, offset_top, md, ims, eptrb, + match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + do + next += GET (next, 1); + while (*next == OP_ALT); + ecode = next + 1 + LINK_SIZE; + } + break; + + case OP_BRAMINZERO: + { + next = ecode + 1; + do + next += GET (next, 1); + while (*next == OP_ALT); + RMATCH (rrc, eptr, next + 1 + LINK_SIZE, offset_top, md, + ims, eptrb, match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + ecode++; + } + break; + + /* End of a group, repeated or non-repeating. If we are at the end of + an assertion "group", stop matching and return MATCH_MATCH, but record the + current high water mark for use by positive assertions. Do this also + for the "once" (not-backup up) groups. */ + + case OP_KET: + case OP_KETRMIN: + case OP_KETRMAX: + { + prev = ecode - GET (ecode, 1); + saved_eptr = eptrb->epb_saved_eptr; + + /* Back up the stack of bracket start pointers. */ + + eptrb = eptrb->epb_prev; + + if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT || + *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT || + *prev == OP_ONCE) { + md->end_match_ptr = eptr; /* For ONCE */ + md->end_offset_top = offset_top; + RRETURN (MATCH_MATCH); + } + + /* In all other cases except a conditional group we have to check the + group number back at the start and if necessary complete handling an + extraction by setting the offsets and bumping the high water mark. */ + + if (*prev != OP_COND) { + number = *prev - OP_BRA; + + /* For extended extraction brackets (large number), we have to fish out + the number from a dummy opcode at the start. */ + + if (number > EXTRACT_BASIC_MAX) + number = GET2 (prev, 2 + LINK_SIZE); + offset = number << 1; + +#ifdef DEBUG + printf ("end bracket %d", number); + printf ("\n"); +#endif + + /* Test for a numbered group. This includes groups called as a result + of recursion. Note that whole-pattern recursion is coded as a recurse + into group 0, so it won't be picked up here. Instead, we catch it when + the OP_END is reached. */ + + if (number > 0) { + md->capture_last = number; + if (offset >= md->offset_max) + md->offset_overflow = TRUE; + else { + md->offset_vector[offset] = + md->offset_vector[md->offset_end - number]; + md->offset_vector[offset + 1] = + eptr - md->start_subject; + if (offset_top <= offset) + offset_top = offset + 2; + } + + /* Handle a recursively called group. Restore the offsets + appropriately and continue from after the call. */ + + if (md->recursive != NULL + && md->recursive->group_num == number) { + recursion_info *rec = md->recursive; + DPRINTF ( + ("Recursion (%d) succeeded - continuing\n", + number)); + md->recursive = rec->prevrec; + md->start_match = rec->save_start; + memcpy (md->offset_vector, rec->offset_save, + rec->saved_max * sizeof (int)); + ecode = rec->after_call; + ims = original_ims; + break; + } + } + } + + /* Reset the value of the ims flags, in case they got changed during + the group. */ + + ims = original_ims; + DPRINTF (("ims reset to %02lx\n", ims)); + + /* For a non-repeating ket, just continue at this level. This also + happens for a repeating ket if no characters were matched in the group. + This is the forcible breaking of infinite loops as implemented in Perl + 5.005. If there is an options reset, it will get obeyed in the normal + course of events. */ + + if (*ecode == OP_KET || eptr == saved_eptr) { + ecode += 1 + LINK_SIZE; + break; + } + + /* The repeating kets try the rest of the pattern or restart from the + preceding bracket, in the appropriate order. */ + + if (*ecode == OP_KETRMIN) { + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + RMATCH (rrc, eptr, prev, offset_top, md, ims, eptrb, + match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } else { /* OP_KETRMAX */ + + RMATCH (rrc, eptr, prev, offset_top, md, ims, eptrb, + match_isgroup); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + RMATCH (rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, + md, ims, eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } + } + + RRETURN (MATCH_NOMATCH); + + /* Start of subject unless notbol, or after internal newline if multiline */ + + case OP_CIRC: + if (md->notbol && eptr == md->start_subject) + RRETURN (MATCH_NOMATCH); + if ((ims & PCRE_MULTILINE) != 0) { + if (eptr != md->start_subject && eptr[-1] != NEWLINE) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + } + /* ... else fall through */ + + /* Start of subject assertion */ + + case OP_SOD: + if (eptr != md->start_subject) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + /* Start of match assertion */ + + case OP_SOM: + if (eptr != md->start_subject + md->start_offset) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + /* Assert before internal newline if multiline, or before a terminating + newline unless endonly is set, else end of subject unless noteol is set. */ + + case OP_DOLL: + if ((ims & PCRE_MULTILINE) != 0) { + if (eptr < md->end_subject) { + if (*eptr != NEWLINE) + RRETURN (MATCH_NOMATCH); + } else { + if (md->noteol) + RRETURN (MATCH_NOMATCH); + } + ecode++; + break; + } else { + if (md->noteol) + RRETURN (MATCH_NOMATCH); + if (!md->endonly) { + if (eptr < md->end_subject - 1 || + (eptr == md->end_subject - 1 && *eptr != NEWLINE)) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + } + } + /* ... else fall through */ + + /* End of subject assertion (\z) */ + + case OP_EOD: + if (eptr < md->end_subject) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + /* End of subject or ending \n assertion (\Z) */ + + case OP_EODN: + if (eptr < md->end_subject - 1 || + (eptr == md->end_subject - 1 && *eptr != NEWLINE)) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + /* Word boundary assertions */ + + case OP_NOT_WORD_BOUNDARY: + case OP_WORD_BOUNDARY: + { + + /* Find out if the previous and current characters are "word" characters. + It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to + be "non-word" characters. */ + +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) { + if (eptr == md->start_subject) + prev_is_word = FALSE; + else { + const uschar *lastptr = eptr - 1; + while ((*lastptr & 0xc0) == 0x80) + lastptr--; + GETCHAR (c, lastptr); + prev_is_word = c < 256 + && (md->ctypes[c] & ctype_word) != 0; + } + if (eptr >= md->end_subject) + cur_is_word = FALSE; + else { + GETCHAR (c, eptr); + cur_is_word = c < 256 + && (md->ctypes[c] & ctype_word) != 0; + } + } else +#endif + + /* More streamlined when not in UTF-8 mode */ + + { + prev_is_word = (eptr != md->start_subject) && + ((md->ctypes[eptr[-1]] & ctype_word) != 0); + cur_is_word = (eptr < md->end_subject) && + ((md->ctypes[*eptr] & ctype_word) != 0); + } + + /* Now see if the situation is what we want */ + + if ((*ecode++ == OP_WORD_BOUNDARY) ? + cur_is_word == prev_is_word : cur_is_word != + prev_is_word) RRETURN (MATCH_NOMATCH); + } + break; + + /* Match a single character type; inline for speed */ + + case OP_ANY: + if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject + && *eptr == NEWLINE) + RRETURN (MATCH_NOMATCH); + if (eptr++ >= md->end_subject) + RRETURN (MATCH_NOMATCH); +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) + while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) + eptr++; +#endif + ecode++; + break; + + /* Match a single byte, even in UTF-8 mode. This opcode really does match + any byte, even newline, independent of the setting of PCRE_DOTALL. */ + + case OP_ANYBYTE: + if (eptr++ >= md->end_subject) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + case OP_NOT_DIGIT: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + if ( +#ifdef SUPPORT_UTF8 + c < 256 && +#endif + (md->ctypes[c] & ctype_digit) != 0) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + case OP_DIGIT: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + if ( +#ifdef SUPPORT_UTF8 + c >= 256 || +#endif + (md->ctypes[c] & ctype_digit) == 0) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + case OP_NOT_WHITESPACE: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + if ( +#ifdef SUPPORT_UTF8 + c < 256 && +#endif + (md->ctypes[c] & ctype_space) != 0) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + case OP_WHITESPACE: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + if ( +#ifdef SUPPORT_UTF8 + c >= 256 || +#endif + (md->ctypes[c] & ctype_space) == 0) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + case OP_NOT_WORDCHAR: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + if ( +#ifdef SUPPORT_UTF8 + c < 256 && +#endif + (md->ctypes[c] & ctype_word) != 0) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + + case OP_WORDCHAR: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + if ( +#ifdef SUPPORT_UTF8 + c >= 256 || +#endif + (md->ctypes[c] & ctype_word) == 0) + RRETURN (MATCH_NOMATCH); + ecode++; + break; + +#ifdef SUPPORT_UCP + /* Check the next character by Unicode property. We will get here only + if the support is in the binary; otherwise a compile-time error occurs. */ + + case OP_PROP: + case OP_NOTPROP: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + { + int chartype, rqdtype; + int othercase; + int category = ucp_findchar (c, &chartype, &othercase); + + rqdtype = *(++ecode); + ecode++; + + if (rqdtype >= 128) { + if ((rqdtype - 128 != category) == (op == OP_PROP)) + RRETURN (MATCH_NOMATCH); + } else { + if ((rqdtype != chartype) == (op == OP_PROP)) + RRETURN (MATCH_NOMATCH); + } + } + break; + + /* Match an extended Unicode sequence. We will get here only if the support + is in the binary; otherwise a compile-time error occurs. */ + + case OP_EXTUNI: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + { + int chartype; + int othercase; + int category = ucp_findchar (c, &chartype, &othercase); + if (category == ucp_M) + RRETURN (MATCH_NOMATCH); + while (eptr < md->end_subject) { + int len = 1; + if (!1 /* md->utf8 */ ) + c = *eptr; + else { + GETCHARLEN (c, eptr, len); + } + category = ucp_findchar (c, &chartype, &othercase); + if (category != ucp_M) + break; + eptr += len; + } + } + ecode++; + break; +#endif + + + /* Match a back reference, possibly repeatedly. Look past the end of the + item to see if there is repeat information following. The code is similar + to that for character classes, but repeated for efficiency. Then obey + similar code to character type repeats - written out again for speed. + However, if the referenced string is the empty string, always treat + it as matched, any number of times (otherwise there could be infinite + loops). */ + + case OP_REF: + { + offset = GET2 (ecode, 1) << 1; /* Doubled ref number */ + ecode += 3; /* Advance past item */ + + /* If the reference is unset, set the length to be longer than the amount + of subject left; this ensures that every attempt at a match fails. We + can't just fail here, because of the possibility of quantifiers with zero + minima. */ + + length = (offset >= offset_top + || md->offset_vector[offset] < + 0) ? md->end_subject - eptr + + 1 : md->offset_vector[offset + 1] - + md->offset_vector[offset]; + + /* Set up for repetition, or handle the non-repeated case */ + + switch (*ecode) { + case OP_CRSTAR: + case OP_CRMINSTAR: + case OP_CRPLUS: + case OP_CRMINPLUS: + case OP_CRQUERY: + case OP_CRMINQUERY: + c = *ecode++ - OP_CRSTAR; + minimize = (c & 1) != 0; + min = rep_min[c]; /* Pick up values from tables; */ + max = rep_max[c]; /* zero for max => infinity */ + if (max == 0) + max = INT_MAX; + break; + + case OP_CRRANGE: + case OP_CRMINRANGE: + minimize = (*ecode == OP_CRMINRANGE); + min = GET2 (ecode, 1); + max = GET2 (ecode, 3); + if (max == 0) + max = INT_MAX; + ecode += 5; + break; + + default: /* No repeat follows */ + if (!match_ref (offset, eptr, length, md, ims)) + RRETURN (MATCH_NOMATCH); + eptr += length; + continue; /* With the main loop */ + } + + /* If the length of the reference is zero, just continue with the + main loop. */ + + if (length == 0) + continue; + + /* First, ensure the minimum number of matches are present. We get back + the length of the reference string explicitly rather than passing the + address of eptr, so that eptr can be a register variable. */ + + for (i = 1; i <= min; i++) { + if (!match_ref (offset, eptr, length, md, ims)) + RRETURN (MATCH_NOMATCH); + eptr += length; + } + + /* If min = max, continue at the same level without recursion. + They are not both allowed to be zero. */ + + if (min == max) + continue; + + /* If minimizing, keep trying and advancing the pointer */ + + if (minimize) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max + || !match_ref (offset, eptr, length, md, ims)) + RRETURN (MATCH_NOMATCH); + eptr += length; + } + /* Control never gets here */ + } + + /* If maximizing, find the longest string and work backwards */ + + else { + pp = eptr; + for (i = min; i < max; i++) { + if (!match_ref (offset, eptr, length, md, ims)) + break; + eptr += length; + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + eptr -= length; + } + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + + + + /* Match a bit-mapped character class, possibly repeatedly. This op code is + used when all the characters in the class have values in the range 0-255, + and either the matching is caseful, or the characters are in the range + 0-127 when UTF-8 processing is enabled. The only difference between + OP_CLASS and OP_NCLASS occurs when a data character outside the range is + encountered. + + First, look past the end of the item to see if there is repeat information + following. Then obey similar code to character type repeats - written out + again for speed. */ + + case OP_NCLASS: + case OP_CLASS: + { + data = ecode + 1; /* Save for matching */ + ecode += 33; /* Advance past the item */ + + switch (*ecode) { + case OP_CRSTAR: + case OP_CRMINSTAR: + case OP_CRPLUS: + case OP_CRMINPLUS: + case OP_CRQUERY: + case OP_CRMINQUERY: + c = *ecode++ - OP_CRSTAR; + minimize = (c & 1) != 0; + min = rep_min[c]; /* Pick up values from tables; */ + max = rep_max[c]; /* zero for max => infinity */ + if (max == 0) + max = INT_MAX; + break; + + case OP_CRRANGE: + case OP_CRMINRANGE: + minimize = (*ecode == OP_CRMINRANGE); + min = GET2 (ecode, 1); + max = GET2 (ecode, 3); + if (max == 0) + max = INT_MAX; + ecode += 5; + break; + + default: /* No repeat follows */ + min = max = 1; + break; + } + + /* First, ensure the minimum number of matches are present. */ + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINC (c, eptr); + if (c > 255) { + if (op == OP_CLASS) + RRETURN (MATCH_NOMATCH); + } else { + if ((data[c / 8] & (1 << (c & 7))) == 0) + RRETURN (MATCH_NOMATCH); + } + } + } else +#endif + /* Not UTF-8 mode */ + { + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + c = *eptr++; + if ((data[c / 8] & (1 << (c & 7))) == 0) + RRETURN (MATCH_NOMATCH); + } + } + + /* If max == min we can continue with the main loop without the + need to recurse. */ + + if (min == max) + continue; + + /* If minimizing, keep testing the rest of the expression and advancing + the pointer while it matches the class. */ + + if (minimize) { +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINC (c, eptr); + if (c > 255) { + if (op == OP_CLASS) + RRETURN (MATCH_NOMATCH); + } else { + if ((data[c / 8] & (1 << (c & 7))) == 0) + RRETURN (MATCH_NOMATCH); + } + } + } else +#endif + /* Not UTF-8 mode */ + { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + c = *eptr++; + if ((data[c / 8] & (1 << (c & 7))) == 0) + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + } + + /* If maximizing, find the longest possible run, then work backwards. */ + + else { + pp = eptr; + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c > 255) { + if (op == OP_CLASS) + break; + } else { + if ((data[c / 8] & (1 << (c & 7))) == 0) + break; + } + eptr += len; + } + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + BACKCHAR (eptr); + } + } else +#endif + /* Not UTF-8 mode */ + { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject) + break; + c = *eptr; + if ((data[c / 8] & (1 << (c & 7))) == 0) + break; + eptr++; + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + eptr--; + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } + } + + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + + + /* Match an extended character class. This opcode is encountered only + in UTF-8 mode, because that's the only time it is compiled. */ + +#ifdef SUPPORT_UTF8 + case OP_XCLASS: + { + data = ecode + 1 + LINK_SIZE; /* Save for matching */ + ecode += GET (ecode, 1); /* Advance past the item */ + + switch (*ecode) { + case OP_CRSTAR: + case OP_CRMINSTAR: + case OP_CRPLUS: + case OP_CRMINPLUS: + case OP_CRQUERY: + case OP_CRMINQUERY: + c = *ecode++ - OP_CRSTAR; + minimize = (c & 1) != 0; + min = rep_min[c]; /* Pick up values from tables; */ + max = rep_max[c]; /* zero for max => infinity */ + if (max == 0) + max = INT_MAX; + break; + + case OP_CRRANGE: + case OP_CRMINRANGE: + minimize = (*ecode == OP_CRMINRANGE); + min = GET2 (ecode, 1); + max = GET2 (ecode, 3); + if (max == 0) + max = INT_MAX; + ecode += 5; + break; + + default: /* No repeat follows */ + min = max = 1; + break; + } + + /* First, ensure the minimum number of matches are present. */ + + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINC (c, eptr); + if (!match_xclass (c, data)) + RRETURN (MATCH_NOMATCH); + } + + /* If max == min we can continue with the main loop without the + need to recurse. */ + + if (min == max) + continue; + + /* If minimizing, keep testing the rest of the expression and advancing + the pointer while it matches the class. */ + + if (minimize) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINC (c, eptr); + if (!match_xclass (c, data)) + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + } + + /* If maximizing, find the longest possible run, then work backwards. */ + + else { + pp = eptr; + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (!match_xclass (c, data)) + break; + eptr += len; + } + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + BACKCHAR (eptr) + } + RRETURN (MATCH_NOMATCH); + } + + /* Control never gets here */ + } +#endif /* End of XCLASS */ + + /* Match a single character, casefully */ + + case OP_CHAR: +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) { + length = 1; + ecode++; + GETCHARLEN (fc, ecode, length); + if (length > md->end_subject - eptr) + RRETURN (MATCH_NOMATCH); + while (length-- > 0) + if (*ecode++ != *eptr++) + RRETURN (MATCH_NOMATCH); + } else +#endif + + /* Non-UTF-8 mode */ + { + if (md->end_subject - eptr < 1) + RRETURN (MATCH_NOMATCH); + if (ecode[1] != *eptr++) + RRETURN (MATCH_NOMATCH); + ecode += 2; + } + break; + + /* Match a single character, caselessly */ + + case OP_CHARNC: +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) { + length = 1; + ecode++; + GETCHARLEN (fc, ecode, length); + + if (length > md->end_subject - eptr) + RRETURN (MATCH_NOMATCH); + + /* If the pattern character's value is < 128, we have only one byte, and + can use the fast lookup table. */ + + if (fc < 128) { + if (md->lcc[*ecode++] != md->lcc[*eptr++]) + RRETURN (MATCH_NOMATCH); + } + + /* Otherwise we must pick up the subject character */ + + else { + int dc; + GETCHARINC (dc, eptr); + ecode += length; + + /* If we have Unicode property support, we can use it to test the other + case of the character, if there is one. The result of ucp_findchar() is + < 0 if the char isn't found, and othercase is returned as zero if there + isn't one. */ + + if (fc != dc) { +#ifdef SUPPORT_UCP + int chartype; + int othercase; + if (ucp_findchar (fc, &chartype, &othercase) < 0 + || dc != othercase) +#endif + RRETURN (MATCH_NOMATCH); + } + } + } else +#endif /* SUPPORT_UTF8 */ + + /* Non-UTF-8 mode */ + { + if (md->end_subject - eptr < 1) + RRETURN (MATCH_NOMATCH); + if (md->lcc[ecode[1]] != md->lcc[*eptr++]) + RRETURN (MATCH_NOMATCH); + ecode += 2; + } + break; + + /* Match a single character repeatedly; different opcodes share code. */ + + case OP_EXACT: + min = max = GET2 (ecode, 1); + ecode += 3; + goto REPEATCHAR; + + case OP_UPTO: + case OP_MINUPTO: + min = 0; + max = GET2 (ecode, 1); + minimize = *ecode == OP_MINUPTO; + ecode += 3; + goto REPEATCHAR; + + case OP_STAR: + case OP_MINSTAR: + case OP_PLUS: + case OP_MINPLUS: + case OP_QUERY: + case OP_MINQUERY: + c = *ecode++ - OP_STAR; + minimize = (c & 1) != 0; + min = rep_min[c]; /* Pick up values from tables; */ + max = rep_max[c]; /* zero for max => infinity */ + if (max == 0) + max = INT_MAX; + + /* Common code for all repeated single-character matches. We can give + up quickly if there are fewer than the minimum number of characters left in + the subject. */ + + REPEATCHAR: +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) { + length = 1; + charptr = ecode; + GETCHARLEN (fc, ecode, length); + if (min * length > md->end_subject - eptr) + RRETURN (MATCH_NOMATCH); + ecode += length; + + /* Handle multibyte character matching specially here. There is + support for caseless matching if UCP support is present. */ + + if (length > 1) { + int oclength = 0; + uschar occhars[8]; + +#ifdef SUPPORT_UCP + int othercase; + int chartype; + if ((ims & PCRE_CASELESS) != 0 && + ucp_findchar (fc, &chartype, &othercase) >= 0 && + othercase > 0) + oclength = g_unichar_to_utf8 (othercase, occhars); +#endif /* SUPPORT_UCP */ + + for (i = 1; i <= min; i++) { + if (memcmp (eptr, charptr, length) == 0) + eptr += length; + /* Need braces because of following else */ + else if (oclength == 0) { + RRETURN (MATCH_NOMATCH); + } else { + if (memcmp (eptr, occhars, oclength) != 0) + RRETURN (MATCH_NOMATCH); + eptr += oclength; + } + } + + if (min == max) + continue; + + if (minimize) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + if (memcmp (eptr, charptr, length) == 0) + eptr += length; + /* Need braces because of following else */ + else if (oclength == 0) { + RRETURN (MATCH_NOMATCH); + } else { + if (memcmp (eptr, occhars, oclength) != 0) + RRETURN (MATCH_NOMATCH); + eptr += oclength; + } + } + /* Control never gets here */ + } else { + pp = eptr; + for (i = min; i < max; i++) { + if (eptr > md->end_subject - length) + break; + if (memcmp (eptr, charptr, length) == 0) + eptr += length; + else if (oclength == 0) + break; + else { + if (memcmp (eptr, occhars, oclength) != 0) + break; + eptr += oclength; + } + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + eptr -= length; + } + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + } + + /* If the length of a UTF-8 character is 1, we fall through here, and + obey the code as for non-UTF-8 characters below, though in this case the + value of fc will always be < 128. */ + } else +#endif /* SUPPORT_UTF8 */ + + /* When not in UTF-8 mode, load a single-byte character. */ + { + if (min > md->end_subject - eptr) + RRETURN (MATCH_NOMATCH); + fc = *ecode++; + } + + /* The value of fc at this point is always less than 256, though we may or + may not be in UTF-8 mode. The code is duplicated for the caseless and + caseful cases, for speed, since matching characters is likely to be quite + common. First, ensure the minimum number of matches are present. If min = + max, continue at the same level without recursing. Otherwise, if + minimizing, keep trying the rest of the expression and advancing one + matching character if failing, up to the maximum. Alternatively, if + maximizing, find the maximum number of characters and work backwards. */ + + DPRINTF ( + ("matching %c{%d,%d} against subject %.*s\n", fc, min, + max, max, eptr)); + + if ((ims & PCRE_CASELESS) != 0) { + fc = md->lcc[fc]; + for (i = 1; i <= min; i++) + if (fc != md->lcc[*eptr++]) + RRETURN (MATCH_NOMATCH); + if (min == max) + continue; + if (minimize) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject || + fc != md->lcc[*eptr++]) + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + } else { + pp = eptr; + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || fc != md->lcc[*eptr]) break; + eptr++; + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + eptr--; + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + } + + /* Caseful comparisons (includes all multi-byte characters) */ + + else { + for (i = 1; i <= min; i++) + if (fc != *eptr++) + RRETURN (MATCH_NOMATCH); + if (min == max) + continue; + if (minimize) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject + || fc != *eptr++) + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + } else { + pp = eptr; + for (i = min; i < max; i++) { + if (eptr >= md->end_subject || fc != *eptr) + break; + eptr++; + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + eptr--; + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + + /* Match a negated single one-byte character. The character we are + checking can be multibyte. */ + + case OP_NOT: + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + ecode++; + GETCHARINCTEST (c, eptr); + if ((ims & PCRE_CASELESS) != 0) { +#ifdef SUPPORT_UTF8 + if (c < 256) +#endif + c = md->lcc[c]; + if (md->lcc[*ecode++] == c) + RRETURN (MATCH_NOMATCH); + } else { + if (*ecode++ == c) + RRETURN (MATCH_NOMATCH); + } + break; + + /* Match a negated single one-byte character repeatedly. This is almost a + repeat of the code for a repeated single character, but I haven't found a + nice way of commoning these up that doesn't require a test of the + positive/negative option for each character match. Maybe that wouldn't add + very much to the time taken, but character matching *is* what this is all + about... */ + + case OP_NOTEXACT: + min = max = GET2 (ecode, 1); + ecode += 3; + goto REPEATNOTCHAR; + + case OP_NOTUPTO: + case OP_NOTMINUPTO: + min = 0; + max = GET2 (ecode, 1); + minimize = *ecode == OP_NOTMINUPTO; + ecode += 3; + goto REPEATNOTCHAR; + + case OP_NOTSTAR: + case OP_NOTMINSTAR: + case OP_NOTPLUS: + case OP_NOTMINPLUS: + case OP_NOTQUERY: + case OP_NOTMINQUERY: + c = *ecode++ - OP_NOTSTAR; + minimize = (c & 1) != 0; + min = rep_min[c]; /* Pick up values from tables; */ + max = rep_max[c]; /* zero for max => infinity */ + if (max == 0) + max = INT_MAX; + + /* Common code for all repeated single-byte matches. We can give up quickly + if there are fewer than the minimum number of bytes left in the + subject. */ + + REPEATNOTCHAR: + if (min > md->end_subject - eptr) + RRETURN (MATCH_NOMATCH); + fc = *ecode++; + + /* The code is duplicated for the caseless and caseful cases, for speed, + since matching characters is likely to be quite common. First, ensure the + minimum number of matches are present. If min = max, continue at the same + level without recursing. Otherwise, if minimizing, keep trying the rest of + the expression and advancing one matching character if failing, up to the + maximum. Alternatively, if maximizing, find the maximum number of + characters and work backwards. */ + + DPRINTF ( + ("negative matching %c{%d,%d} against subject %.*s\n", + fc, min, max, max, eptr)); + + if ((ims & PCRE_CASELESS) != 0) { + fc = md->lcc[fc]; + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + register int d; + for (i = 1; i <= min; i++) { + GETCHARINC (d, eptr); + if (d < 256) + d = md->lcc[d]; + if (fc == d) + RRETURN (MATCH_NOMATCH); + } + } else +#endif + + /* Not UTF-8 mode */ + { + for (i = 1; i <= min; i++) + if (fc == md->lcc[*eptr++]) + RRETURN (MATCH_NOMATCH); + } + + if (min == max) + continue; + + if (minimize) { +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + register int d; + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + GETCHARINC (d, eptr); + if (d < 256) + d = md->lcc[d]; + if (fi >= max || eptr >= md->end_subject + || fc == d) + RRETURN (MATCH_NOMATCH); + } + } else +#endif + /* Not UTF-8 mode */ + { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject + || fc == md->lcc[*eptr++]) + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + } + + /* Maximize case */ + + else { + pp = eptr; + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + register int d; + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (d, eptr, len); + if (d < 256) + d = md->lcc[d]; + if (fc == d) + break; + eptr += len; + } + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + BACKCHAR (eptr); + } + } else +#endif + /* Not UTF-8 mode */ + { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || fc == md->lcc[*eptr]) break; + eptr++; + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + eptr--; + } + } + + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + } + + /* Caseful comparisons */ + + else { +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + register int d; + for (i = 1; i <= min; i++) { + GETCHARINC (d, eptr); + if (fc == d) + RRETURN (MATCH_NOMATCH); + } + } else +#endif + /* Not UTF-8 mode */ + { + for (i = 1; i <= min; i++) + if (fc == *eptr++) + RRETURN (MATCH_NOMATCH); + } + + if (min == max) + continue; + + if (minimize) { +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + register int d; + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + GETCHARINC (d, eptr); + if (fi >= max || eptr >= md->end_subject + || fc == d) + RRETURN (MATCH_NOMATCH); + } + } else +#endif + /* Not UTF-8 mode */ + { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject + || fc == *eptr++) + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + } + + /* Maximize case */ + + else { + pp = eptr; + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + register int d; + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (d, eptr, len); + if (fc == d) + break; + eptr += len; + } + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + BACKCHAR (eptr); + } + } else +#endif + /* Not UTF-8 mode */ + { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject || fc == *eptr) + break; + eptr++; + } + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + eptr--; + } + } + + RRETURN (MATCH_NOMATCH); + } + } + /* Control never gets here */ + + /* Match a single character type repeatedly; several different opcodes + share code. This is very similar to the code for single characters, but we + repeat it in the interests of efficiency. */ + + case OP_TYPEEXACT: + min = max = GET2 (ecode, 1); + minimize = TRUE; + ecode += 3; + goto REPEATTYPE; + + case OP_TYPEUPTO: + case OP_TYPEMINUPTO: + min = 0; + max = GET2 (ecode, 1); + minimize = *ecode == OP_TYPEMINUPTO; + ecode += 3; + goto REPEATTYPE; + + case OP_TYPESTAR: + case OP_TYPEMINSTAR: + case OP_TYPEPLUS: + case OP_TYPEMINPLUS: + case OP_TYPEQUERY: + case OP_TYPEMINQUERY: + c = *ecode++ - OP_TYPESTAR; + minimize = (c & 1) != 0; + min = rep_min[c]; /* Pick up values from tables; */ + max = rep_max[c]; /* zero for max => infinity */ + if (max == 0) + max = INT_MAX; + + /* Common code for all repeated single character type matches. Note that + in UTF-8 mode, '.' matches a character of any length, but for the other + character types, the valid characters are all one-byte long. */ + + REPEATTYPE: + ctype = *ecode++; /* Code for the character type */ + +#ifdef SUPPORT_UCP + if (ctype == OP_PROP || ctype == OP_NOTPROP) { + prop_fail_result = ctype == OP_NOTPROP; + prop_type = *ecode++; + if (prop_type >= 128) { + prop_test_against = prop_type - 128; + prop_test_variable = &prop_category; + } else { + prop_test_against = prop_type; + prop_test_variable = &prop_chartype; + } + } else + prop_type = -1; +#endif + + /* First, ensure the minimum number of matches are present. Use inline + code for maximizing the speed, and do the type test once at the start + (i.e. keep it out of the loop). Also we can test that there are at least + the minimum number of bytes before we start. This isn't as effective in + UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that + is tidier. Also separate the UCP code, which can be the same for both UTF-8 + and single-bytes. */ + + if (min > md->end_subject - eptr) + RRETURN (MATCH_NOMATCH); + if (min > 0) { +#ifdef SUPPORT_UCP + if (prop_type > 0) { + for (i = 1; i <= min; i++) { + GETCHARINC (c, eptr); + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if ((*prop_test_variable == prop_test_against) == + prop_fail_result) RRETURN (MATCH_NOMATCH); + } + } + + /* Match extended Unicode sequences. We will get here only if the + support is in the binary; otherwise a compile-time error occurs. */ + + else if (ctype == OP_EXTUNI) { + for (i = 1; i <= min; i++) { + GETCHARINCTEST (c, eptr); + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category == ucp_M) + RRETURN (MATCH_NOMATCH); + while (eptr < md->end_subject) { + int len = 1; + if (!1 /* md->utf8 */ ) + c = *eptr; + else { + GETCHARLEN (c, eptr, len); + } + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category != ucp_M) + break; + eptr += len; + } + } + } + + else +#endif /* SUPPORT_UCP */ + + /* Handle all other cases when the coding is UTF-8 */ + +#ifdef SUPPORT_UTF8 + if (1 /* md->utf8 */ ) + switch (ctype) { + case OP_ANY: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject || + (*eptr++ == NEWLINE + && (ims & PCRE_DOTALL) == 0)) + RRETURN (MATCH_NOMATCH); + while (eptr < md->end_subject + && (*eptr & 0xc0) == 0x80) + eptr++; + } + break; + + case OP_ANYBYTE: + eptr += min; + break; + + case OP_NOT_DIGIT: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINC (c, eptr); + if (c < 128 + && (md->ctypes[c] & ctype_digit) != + 0) RRETURN (MATCH_NOMATCH); + } + break; + + case OP_DIGIT: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject || + *eptr >= 128 + || (md->ctypes[*eptr++] & ctype_digit) == + 0) RRETURN (MATCH_NOMATCH); + /* No need to skip more bytes - we know it's a 1-byte character */ + } + break; + + case OP_NOT_WHITESPACE: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject || + (*eptr < 128 + && (md->ctypes[*eptr++] & ctype_space) != + 0)) RRETURN (MATCH_NOMATCH); + while (eptr < md->end_subject + && (*eptr & 0xc0) == 0x80) + eptr++; + } + break; + + case OP_WHITESPACE: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject || + *eptr >= 128 + || (md->ctypes[*eptr++] & ctype_space) == + 0) RRETURN (MATCH_NOMATCH); + /* No need to skip more bytes - we know it's a 1-byte character */ + } + break; + + case OP_NOT_WORDCHAR: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject || + (*eptr < 128 + && (md->ctypes[*eptr++] & ctype_word) != + 0)) RRETURN (MATCH_NOMATCH); + while (eptr < md->end_subject + && (*eptr & 0xc0) == 0x80) + eptr++; + } + break; + + case OP_WORDCHAR: + for (i = 1; i <= min; i++) { + if (eptr >= md->end_subject || + *eptr >= 128 + || (md->ctypes[*eptr++] & ctype_word) == 0) + RRETURN (MATCH_NOMATCH); + /* No need to skip more bytes - we know it's a 1-byte character */ + } + break; + + default: + RRETURN (PCRE_ERROR_INTERNAL); + } + /* End switch(ctype) */ + else +#endif /* SUPPORT_UTF8 */ + + /* Code for the non-UTF-8 case for minimum matching of operators other + than OP_PROP and OP_NOTPROP. */ + + switch (ctype) { + case OP_ANY: + if ((ims & PCRE_DOTALL) == 0) { + for (i = 1; i <= min; i++) + if (*eptr++ == NEWLINE) + RRETURN (MATCH_NOMATCH); + } else + eptr += min; + break; + + case OP_ANYBYTE: + eptr += min; + break; + + case OP_NOT_DIGIT: + for (i = 1; i <= min; i++) + if ((md->ctypes[*eptr++] & ctype_digit) != 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_DIGIT: + for (i = 1; i <= min; i++) + if ((md->ctypes[*eptr++] & ctype_digit) == 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_NOT_WHITESPACE: + for (i = 1; i <= min; i++) + if ((md->ctypes[*eptr++] & ctype_space) != 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_WHITESPACE: + for (i = 1; i <= min; i++) + if ((md->ctypes[*eptr++] & ctype_space) == 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_NOT_WORDCHAR: + for (i = 1; i <= min; i++) + if ((md->ctypes[*eptr++] & ctype_word) != 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_WORDCHAR: + for (i = 1; i <= min; i++) + if ((md->ctypes[*eptr++] & ctype_word) == 0) + RRETURN (MATCH_NOMATCH); + break; + + default: + RRETURN (PCRE_ERROR_INTERNAL); + } + } + + /* If min = max, continue at the same level without recursing */ + + if (min == max) + continue; + + /* If minimizing, we have to test the rest of the pattern before each + subsequent match. Again, separate the UTF-8 case for speed, and also + separate the UCP cases. */ + + if (minimize) { +#ifdef SUPPORT_UCP + if (prop_type > 0) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINC (c, eptr); + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if ((*prop_test_variable == prop_test_against) == + prop_fail_result) RRETURN (MATCH_NOMATCH); + } + } + + /* Match extended Unicode sequences. We will get here only if the + support is in the binary; otherwise a compile-time error occurs. */ + + else if (ctype == OP_EXTUNI) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + GETCHARINCTEST (c, eptr); + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category == ucp_M) + RRETURN (MATCH_NOMATCH); + while (eptr < md->end_subject) { + int len = 1; + if (!1 /* md->utf8 */ ) + c = *eptr; + else { + GETCHARLEN (c, eptr, len); + } + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category != ucp_M) + break; + eptr += len; + } + } + } + + else +#endif /* SUPPORT_UCP */ + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + if (1 /* md->utf8 */ ) { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + + GETCHARINC (c, eptr); + switch (ctype) { + case OP_ANY: + if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) + RRETURN (MATCH_NOMATCH); + break; + + case OP_ANYBYTE: + break; + + case OP_NOT_DIGIT: + if (c < 256 + && (md->ctypes[c] & ctype_digit) != + 0) RRETURN (MATCH_NOMATCH); + break; + + case OP_DIGIT: + if (c >= 256 + || (md->ctypes[c] & ctype_digit) == 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_NOT_WHITESPACE: + if (c < 256 + && (md->ctypes[c] & ctype_space) != + 0) RRETURN (MATCH_NOMATCH); + break; + + case OP_WHITESPACE: + if (c >= 256 + || (md->ctypes[c] & ctype_space) == 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_NOT_WORDCHAR: + if (c < 256 + && (md->ctypes[c] & ctype_word) != + 0) RRETURN (MATCH_NOMATCH); + break; + + case OP_WORDCHAR: + if (c >= 256 + && (md->ctypes[c] & ctype_word) == + 0) RRETURN (MATCH_NOMATCH); + break; + + default: + RRETURN (PCRE_ERROR_INTERNAL); + } + } + } else +#endif + /* Not UTF-8 mode */ + { + for (fi = min;; fi++) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (fi >= max || eptr >= md->end_subject) + RRETURN (MATCH_NOMATCH); + c = *eptr++; + switch (ctype) { + case OP_ANY: + if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) + RRETURN (MATCH_NOMATCH); + break; + + case OP_ANYBYTE: + break; + + case OP_NOT_DIGIT: + if ((md->ctypes[c] & ctype_digit) != 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_DIGIT: + if ((md->ctypes[c] & ctype_digit) == 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_NOT_WHITESPACE: + if ((md->ctypes[c] & ctype_space) != 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_WHITESPACE: + if ((md->ctypes[c] & ctype_space) == 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_NOT_WORDCHAR: + if ((md->ctypes[c] & ctype_word) != 0) + RRETURN (MATCH_NOMATCH); + break; + + case OP_WORDCHAR: + if ((md->ctypes[c] & ctype_word) == 0) + RRETURN (MATCH_NOMATCH); + break; + + default: + RRETURN (PCRE_ERROR_INTERNAL); + } + } + } + /* Control never gets here */ + } + + /* If maximizing it is worth using inline code for speed, doing the type + test once at the start (i.e. keep it out of the loop). Again, keep the + UTF-8 and UCP stuff separate. */ + + else { + pp = eptr; /* Remember where we started */ + +#ifdef SUPPORT_UCP + if (prop_type > 0) { + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if ((*prop_test_variable == prop_test_against) == + prop_fail_result) break; + eptr += len; + } + + /* eptr is now past the end of the maximum run */ + + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + BACKCHAR (eptr); + } + } + + /* Match extended Unicode sequences. We will get here only if the + support is in the binary; otherwise a compile-time error occurs. */ + + else if (ctype == OP_EXTUNI) { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject) + break; + GETCHARINCTEST (c, eptr); + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category == ucp_M) + break; + while (eptr < md->end_subject) { + int len = 1; + if (!1 /* md->utf8 */ ) + c = *eptr; + else { + GETCHARLEN (c, eptr, len); + } + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category != ucp_M) + break; + eptr += len; + } + } + + /* eptr is now past the end of the maximum run */ + + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + for (;;) { /* Move back over one extended */ + int len = 1; + BACKCHAR (eptr); + if (!1 /* md->utf8 */ ) + c = *eptr; + else { + GETCHARLEN (c, eptr, len); + } + prop_category = + ucp_findchar (c, &prop_chartype, + &prop_othercase); + if (prop_category != ucp_M) + break; + eptr--; + } + } + } + + else +#endif /* SUPPORT_UCP */ + +#ifdef SUPPORT_UTF8 + /* UTF-8 mode */ + + if (1 /* md->utf8 */ ) { + switch (ctype) { + case OP_ANY: + + /* Special code is required for UTF8, but when the maximum is unlimited + we don't need it, so we repeat the non-UTF8 code. This is probably + worth it, because .* is quite a common idiom. */ + + if (max < INT_MAX) { + if ((ims & PCRE_DOTALL) == 0) { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || *eptr == NEWLINE) break; + eptr++; + while (eptr < md->end_subject + && (*eptr & 0xc0) == 0x80) + eptr++; + } + } else { + for (i = min; i < max; i++) { + eptr++; + while (eptr < md->end_subject + && (*eptr & 0xc0) == 0x80) + eptr++; + } + } + } + + /* Handle unlimited UTF-8 repeat */ + + else { + if ((ims & PCRE_DOTALL) == 0) { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || *eptr == NEWLINE) break; + eptr++; + } + break; + } else { + c = max - min; + if (c > md->end_subject - eptr) + c = md->end_subject - eptr; + eptr += c; + } + } + break; + + /* The byte case is the same as non-UTF8 */ + + case OP_ANYBYTE: + c = max - min; + if (c > md->end_subject - eptr) + c = md->end_subject - eptr; + eptr += c; + break; + + case OP_NOT_DIGIT: + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c < 256 + && (md->ctypes[c] & ctype_digit) != + 0) break; + eptr += len; + } + break; + + case OP_DIGIT: + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c >= 256 + || (md->ctypes[c] & ctype_digit) == 0) + break; + eptr += len; + } + break; + + case OP_NOT_WHITESPACE: + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c < 256 + && (md->ctypes[c] & ctype_space) != + 0) break; + eptr += len; + } + break; + + case OP_WHITESPACE: + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c >= 256 + || (md->ctypes[c] & ctype_space) == 0) + break; + eptr += len; + } + break; + + case OP_NOT_WORDCHAR: + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c < 256 + && (md->ctypes[c] & ctype_word) != + 0) break; + eptr += len; + } + break; + + case OP_WORDCHAR: + for (i = min; i < max; i++) { + int len = 1; + if (eptr >= md->end_subject) + break; + GETCHARLEN (c, eptr, len); + if (c >= 256 + || (md->ctypes[c] & ctype_word) == + 0) break; + eptr += len; + } + break; + + default: + RRETURN (PCRE_ERROR_INTERNAL); + } + + /* eptr is now past the end of the maximum run */ + + for (;;) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + if (eptr-- == pp) + break; /* Stop if tried at original pos */ + BACKCHAR (eptr); + } + } else +#endif + + /* Not UTF-8 mode */ + { + switch (ctype) { + case OP_ANY: + if ((ims & PCRE_DOTALL) == 0) { + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || *eptr == NEWLINE) break; + eptr++; + } + break; + } + /* For DOTALL case, fall through and treat as \C */ + + case OP_ANYBYTE: + c = max - min; + if (c > md->end_subject - eptr) + c = md->end_subject - eptr; + eptr += c; + break; + + case OP_NOT_DIGIT: + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || (md->ctypes[*eptr] & ctype_digit) != 0) + break; + eptr++; + } + break; + + case OP_DIGIT: + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || (md->ctypes[*eptr] & ctype_digit) == 0) + break; + eptr++; + } + break; + + case OP_NOT_WHITESPACE: + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || (md->ctypes[*eptr] & ctype_space) != 0) + break; + eptr++; + } + break; + + case OP_WHITESPACE: + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || (md->ctypes[*eptr] & ctype_space) == 0) + break; + eptr++; + } + break; + + case OP_NOT_WORDCHAR: + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || (md->ctypes[*eptr] & ctype_word) != 0) + break; + eptr++; + } + break; + + case OP_WORDCHAR: + for (i = min; i < max; i++) { + if (eptr >= md->end_subject + || (md->ctypes[*eptr] & ctype_word) == 0) + break; + eptr++; + } + break; + + default: + RRETURN (PCRE_ERROR_INTERNAL); + } + + /* eptr is now past the end of the maximum run */ + + while (eptr >= pp) { + RMATCH (rrc, eptr, ecode, offset_top, md, ims, + eptrb, 0); + eptr--; + if (rrc != MATCH_NOMATCH) + RRETURN (rrc); + } + } + + /* Get here if we can't make it match with any permitted repetitions */ + + RRETURN (MATCH_NOMATCH); + } + /* Control never gets here */ + + /* There's been some horrible disaster. Since all codes > OP_BRA are + for capturing brackets, and there shouldn't be any gaps between 0 and + OP_BRA, arrival here can only mean there is something seriously wrong + in the code above or the OP_xxx definitions. */ + + default: + DPRINTF (("Unknown opcode %d\n", *ecode)); + RRETURN (PCRE_ERROR_UNKNOWN_NODE); + } + + /* Do not stick any code in here without much thought; it is assumed + that "continue" in the code above comes out to here to repeat the main + loop. */ + + } /* End of main loop */ + /* Control never reaches here */ +} + + +/*************************************************************************** +**************************************************************************** + RECURSION IN THE match() FUNCTION + +Undefine all the macros that were defined above to handle this. */ + +#ifdef NO_RECURSE +#undef eptr +#undef ecode +#undef offset_top +#undef ims +#undef eptrb +#undef flags + +#undef callpat +#undef charptr +#undef data +#undef next +#undef pp +#undef prev +#undef saved_eptr + +#undef new_recursive + +#undef cur_is_word +#undef condition +#undef minimize +#undef prev_is_word + +#undef original_ims + +#undef ctype +#undef length +#undef max +#undef min +#undef number +#undef offset +#undef op +#undef save_capture_last +#undef save_offset1 +#undef save_offset2 +#undef save_offset3 +#undef stacksave + +#undef newptrb + +#endif + +/* These two are defined as macros in both cases */ + +#undef fc +#undef fi + +/*************************************************************************** +***************************************************************************/ + + + +/************************************************* +* Execute a Regular Expression * +*************************************************/ + +/* This function applies a compiled re to a subject string and picks out + portions of the string if it matches. Two elements in the vector are set for + each substring: the offsets to the start and end of the substring. + + Arguments: + argument_re points to the compiled expression + extra_data points to extra data or is NULL + subject points to the subject string + length length of subject string (may contain binary zeros) + start_offset where to start in the subject string + options option bits + offsets points to a vector of ints to be filled in with offsets + offsetcount the number of elements in the vector + + Returns: > 0 => success; value is the number of elements filled in + = 0 => success, but offsets is not big enough + -1 => failed to match + < -1 => some kind of unexpected problem + */ + +int +pcre_exec (const pcre * argument_re, const pcre_extra * extra_data, + const char *subject, int length, int start_offset, int options, + int *offsets, int offsetcount) +{ + int rc, resetcount, ocount; + int first_byte = -1; + int req_byte = -1; + int req_byte2 = -1; + unsigned long int ims = 0; + BOOL using_temporary_offsets = FALSE; + BOOL anchored; + BOOL startline; + BOOL first_byte_caseless = FALSE; + BOOL req_byte_caseless = FALSE; + match_data match_block; + const uschar *tables; + const uschar *start_bits = NULL; + const uschar *start_match = (const uschar *) subject + start_offset; + const uschar *end_subject; + const uschar *req_byte_ptr = start_match - 1; + + pcre_study_data internal_study; + const pcre_study_data *study; + + real_pcre internal_re; + const real_pcre *external_re = (const real_pcre *) argument_re; + const real_pcre *re = external_re; + + /* Plausibility checks */ + + if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) + return PCRE_ERROR_BADOPTION; + if (re == NULL || subject == NULL || + (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL; + if (offsetcount < 0) + return PCRE_ERROR_BADCOUNT; + + /* Fish out the optional data from the extra_data structure, first setting + the default values. */ + + study = NULL; + match_block.match_limit = MATCH_LIMIT; + match_block.callout_data = NULL; + + /* The table pointer is always in native byte order. */ + + tables = external_re->tables; + + if (extra_data != NULL) { + register unsigned int flags = extra_data->flags; + if ((flags & PCRE_EXTRA_STUDY_DATA) != 0) + study = (const pcre_study_data *) extra_data->study_data; + if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0) + match_block.match_limit = extra_data->match_limit; + if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0) + match_block.callout_data = extra_data->callout_data; + if ((flags & PCRE_EXTRA_TABLES) != 0) + tables = extra_data->tables; + } + + /* If the exec call supplied NULL for tables, use the inbuilt ones. This + is a feature that makes it possible to save compiled regex and re-use them + in other programs later. */ + + if (tables == NULL) + tables = make_pcre_default_tables (); + + /* Check that the first field in the block is the magic number. If it is not, + test for a regex that was compiled on a host of opposite endianness. If this is + the case, flipped values are put in internal_re and internal_study if there was + study data too. */ + + if (re->magic_number != MAGIC_NUMBER) { + re = try_flipped (re, &internal_re, study, &internal_study); + if (re == NULL) + return PCRE_ERROR_BADMAGIC; + if (study != NULL) + study = &internal_study; + } + + /* Set up other data */ + + anchored = ((re->options | options) & PCRE_ANCHORED) != 0; + startline = (re->options & PCRE_STARTLINE) != 0; + + /* The code starts after the real_pcre block and the capture name table. */ + + match_block.start_code = + (const uschar *) external_re + re->name_table_offset + + re->name_count * re->name_entry_size; + + match_block.start_subject = (const uschar *) subject; + match_block.start_offset = start_offset; + match_block.end_subject = match_block.start_subject + length; + end_subject = match_block.end_subject; + + match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; + match_block.utf8 = (re->options & PCRE_UTF8) != 0; + + match_block.notbol = (options & PCRE_NOTBOL) != 0; + match_block.noteol = (options & PCRE_NOTEOL) != 0; + match_block.notempty = (options & PCRE_NOTEMPTY) != 0; + match_block.partial = (options & PCRE_PARTIAL) != 0; + match_block.hitend = FALSE; + + match_block.recursive = NULL; /* No recursion at top level */ + + match_block.lcc = tables + lcc_offset; + match_block.ctypes = tables + ctypes_offset; + + /* Partial matching is supported only for a restricted set of regexes at the + moment. */ + + if (match_block.partial && (re->options & PCRE_NOPARTIAL) != 0) + return PCRE_ERROR_BADPARTIAL; + + /* Check a UTF-8 string if required. Unfortunately there's no way of passing + back the character offset. */ + +#ifdef SUPPORT_UTF8 + if (match_block.utf8 && (options & PCRE_NO_UTF8_CHECK) == 0) { + if (valid_utf8 ((uschar *) subject, length) >= 0) + return PCRE_ERROR_BADUTF8; + if (start_offset > 0 && start_offset < length) { + int tb = ((uschar *) subject)[start_offset]; + if (tb > 127) { + tb &= 0xc0; + if (tb != 0 && tb != 0xc0) + return PCRE_ERROR_BADUTF8_OFFSET; + } + } + } +#endif + + /* The ims options can vary during the matching as a result of the presence + of (?ims) items in the pattern. They are kept in a local variable so that + restoring at the exit of a group is easy. */ + + ims = re->options & (PCRE_CASELESS | PCRE_MULTILINE | PCRE_DOTALL); + + /* If the expression has got more back references than the offsets supplied can + hold, we get a temporary chunk of working store to use during the matching. + Otherwise, we can use the vector supplied, rounding down its size to a multiple + of 3. */ + + ocount = offsetcount - (offsetcount % 3); + + if (re->top_backref > 0 && re->top_backref >= ocount / 3) { + ocount = re->top_backref * 3 + 3; + match_block.offset_vector = + (int *) (pcre_malloc) (ocount * sizeof (int)); + if (match_block.offset_vector == NULL) + return PCRE_ERROR_NOMEMORY; + using_temporary_offsets = TRUE; + DPRINTF (("Got memory to hold back references\n")); + } else + match_block.offset_vector = offsets; + + match_block.offset_end = ocount; + match_block.offset_max = (2 * ocount) / 3; + match_block.offset_overflow = FALSE; + match_block.capture_last = -1; + + /* Compute the minimum number of offsets that we need to reset each time. Doing + this makes a huge difference to execution time when there aren't many brackets + in the pattern. */ + + resetcount = 2 + re->top_bracket * 2; + if (resetcount > offsetcount) + resetcount = ocount; + + /* Reset the working variable associated with each extraction. These should + never be used unless previously set, but they get saved and restored, and so we + initialize them to avoid reading uninitialized locations. */ + + if (match_block.offset_vector != NULL) { + register int *iptr = match_block.offset_vector + ocount; + register int *iend = iptr - resetcount / 2 + 1; + while (--iptr >= iend) + *iptr = -1; + } + + /* Set up the first character to match, if available. The first_byte value is + never set for an anchored regular expression, but the anchoring may be forced + at run time, so we have to test for anchoring. The first char may be unset for + an unanchored pattern, of course. If there's no first char and the pattern was + studied, there may be a bitmap of possible first characters. */ + + if (!anchored) { + if ((re->options & PCRE_FIRSTSET) != 0) { + first_byte = re->first_byte & 255; + if ( + (first_byte_caseless = + ((re->first_byte & REQ_CASELESS) != 0)) == TRUE) + first_byte = match_block.lcc[first_byte]; + } + else + if (!startline && study != NULL && + (study->options & PCRE_STUDY_MAPPED) != 0) + start_bits = study->start_bits; + } + + /* For anchored or unanchored matches, there may be a "last known required + character" set. */ + + if ((re->options & PCRE_REQCHSET) != 0) { + req_byte = re->req_byte & 255; + req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0; + req_byte2 = (tables + fcc_offset)[req_byte]; /* case flipped */ + } + + /* Loop for handling unanchored repeated matching attempts; for anchored regexs + the loop runs just once. */ + + do { + /* Reset the maximum number of extractions we might see. */ + + if (match_block.offset_vector != NULL) { + register int *iptr = match_block.offset_vector; + register int *iend = iptr + resetcount; + while (iptr < iend) + *iptr++ = -1; + } + + /* Advance to a unique first char if possible */ + + if (first_byte >= 0) { + if (first_byte_caseless) + while (start_match < end_subject && + match_block.lcc[*start_match] != first_byte) + start_match++; + else + while (start_match < end_subject + && *start_match != first_byte) start_match++; + } + + /* Or to just after \n for a multiline match if possible */ + + else if (startline) { + if (start_match > match_block.start_subject + start_offset) { + while (start_match < end_subject + && start_match[-1] != NEWLINE) start_match++; + } + } + + /* Or to a non-unique first char after study */ + + else if (start_bits != NULL) { + while (start_match < end_subject) { + register unsigned int c = *start_match; + if ((start_bits[c / 8] & (1 << (c & 7))) == 0) + start_match++; + else + break; + } + } +#ifdef DEBUG /* Sigh. Some compilers never learn. */ + printf (">>>> Match against: "); + pchars (start_match, end_subject - start_match, TRUE, + &match_block); + printf ("\n"); +#endif + + /* If req_byte is set, we know that that character must appear in the subject + for the match to succeed. If the first character is set, req_byte must be + later in the subject; otherwise the test starts at the match point. This + optimization can save a huge amount of backtracking in patterns with nested + unlimited repeats that aren't going to match. Writing separate code for + cased/caseless versions makes it go faster, as does using an autoincrement + and backing off on a match. + + HOWEVER: when the subject string is very, very long, searching to its end can + take a long time, and give bad performance on quite ordinary patterns. This + showed up when somebody was matching /^C/ on a 32-megabyte string... so we + don't do this when the string is sufficiently long. + + ALSO: this processing is disabled when partial matching is requested. + */ + + if (req_byte >= 0 && + end_subject - start_match < REQ_BYTE_MAX && + !match_block.partial) { + register const uschar *p = + start_match + ((first_byte >= 0) ? 1 : 0); + + /* We don't need to repeat the search if we haven't yet reached the + place we found it at last time. */ + + if (p > req_byte_ptr) { + if (req_byte_caseless) { + while (p < end_subject) { + register int pp = *p++; + if (pp == req_byte || pp == req_byte2) { + p--; + break; + } + } + } else { + while (p < end_subject) { + if (*p++ == req_byte) { + p--; + break; + } + } + } + + /* If we can't find the required character, break the matching loop */ + + if (p >= end_subject) + break; + + /* If we have found the required character, save the point where we + found it, so that we don't search again next time round the loop if + the start hasn't passed this character yet. */ + + req_byte_ptr = p; + } + } + + /* When a match occurs, substrings will be set for all internal extractions; + we just need to set up the whole thing as substring 0 before returning. If + there were too many extractions, set the return code to zero. In the case + where we had to get some local store to hold offsets for backreferences, copy + those back references that we can. In this case there need not be overflow + if certain parts of the pattern were not used. */ + + match_block.start_match = start_match; + match_block.match_call_count = 0; + + rc = + match (start_match, match_block.start_code, 2, &match_block, + ims, NULL, match_isgroup); + + if (rc == MATCH_NOMATCH) { + start_match++; +#ifdef SUPPORT_UTF8 + if (match_block.utf8) + while (start_match < end_subject + && (*start_match & 0xc0) == 0x80) + start_match++; +#endif + continue; + } + + if (rc != MATCH_MATCH) { + DPRINTF ((">>>> error: returning %d\n", rc)); + return rc; + } + + /* We have a match! Copy the offset information from temporary store if + necessary */ + + if (using_temporary_offsets) { + if (offsetcount >= 4) { + memcpy (offsets + 2, match_block.offset_vector + 2, + (offsetcount - 2) * sizeof (int)); + DPRINTF (("Copied offsets from temporary memory\n")); + } + if (match_block.end_offset_top > offsetcount) + match_block.offset_overflow = TRUE; + + DPRINTF (("Freeing temporary memory\n")); + (pcre_free) (match_block.offset_vector); + } + + rc = + match_block.offset_overflow ? 0 : match_block.end_offset_top / + 2; + + if (offsetcount < 2) + rc = 0; + else { + offsets[0] = start_match - match_block.start_subject; + offsets[1] = + match_block.end_match_ptr - match_block.start_subject; + } + + DPRINTF ((">>>> returning %d\n", rc)); + return rc; + } + + /* This "while" is the end of the "do" above */ + + while (!anchored && start_match <= end_subject); + + if (using_temporary_offsets) { + DPRINTF (("Freeing temporary memory\n")); + (pcre_free) (match_block.offset_vector); + } + + if (match_block.partial && match_block.hitend) { + DPRINTF ((">>>> returning PCRE_ERROR_PARTIAL\n")); + return PCRE_ERROR_PARTIAL; + } else { + DPRINTF ((">>>> returning PCRE_ERROR_NOMATCH\n")); + return PCRE_ERROR_NOMATCH; + } +} + +/* End of pcre.c */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcre.h b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcre.h new file mode 100644 index 0000000000..998a53e7f3 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcre.h @@ -0,0 +1,245 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see pcre.c. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* In its original form, this is the .in file that is transformed by + "configure" into pcre.h. + + Copyright (c) 1997-2004 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + +#ifndef _PCRE_H +#define _PCRE_H + +/* The file pcre.h is build by "configure". Do not edit it; instead + make changes to pcre.in. */ + +#define PCRE_MAJOR 5 +#define PCRE_MINOR 0 +#define PCRE_DATE 13-Sep-2004 + +/* Win32 uses DLL by default */ + +#ifdef _WIN32 +# ifdef PCRE_DEFINITION +# ifdef DLL_EXPORT +# define PCRE_DATA_SCOPE __declspec(dllexport) +# endif +# else +# ifndef PCRE_STATIC +# define PCRE_DATA_SCOPE extern __declspec(dllimport) +# endif +# endif +#endif +#ifndef PCRE_DATA_SCOPE +# define PCRE_DATA_SCOPE extern +#endif + +/* Have to include stdlib.h in order to ensure that size_t is defined; + it is needed here for malloc. */ + +#include + +/* Allow for C++ users */ + +#ifdef __cplusplus +extern "C" { +#endif + + /* Options */ + +#define PCRE_CASELESS 0x0001 +#define PCRE_MULTILINE 0x0002 +#define PCRE_DOTALL 0x0004 +#define PCRE_EXTENDED 0x0008 +#define PCRE_ANCHORED 0x0010 +#define PCRE_DOLLAR_ENDONLY 0x0020 +#define PCRE_EXTRA 0x0040 +#define PCRE_NOTBOL 0x0080 +#define PCRE_NOTEOL 0x0100 +#define PCRE_UNGREEDY 0x0200 +#define PCRE_NOTEMPTY 0x0400 +#define PCRE_UTF8 0x0800 +#define PCRE_NO_AUTO_CAPTURE 0x1000 +#define PCRE_NO_UTF8_CHECK 0x2000 +#define PCRE_AUTO_CALLOUT 0x4000 +#define PCRE_PARTIAL 0x8000 + + /* Exec-time and get/set-time error codes */ + +#define PCRE_ERROR_NOMATCH (-1) +#define PCRE_ERROR_NULL (-2) +#define PCRE_ERROR_BADOPTION (-3) +#define PCRE_ERROR_BADMAGIC (-4) +#define PCRE_ERROR_UNKNOWN_NODE (-5) +#define PCRE_ERROR_NOMEMORY (-6) +#define PCRE_ERROR_NOSUBSTRING (-7) +#define PCRE_ERROR_MATCHLIMIT (-8) +#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ +#define PCRE_ERROR_BADUTF8 (-10) +#define PCRE_ERROR_BADUTF8_OFFSET (-11) +#define PCRE_ERROR_PARTIAL (-12) +#define PCRE_ERROR_BADPARTIAL (-13) +#define PCRE_ERROR_INTERNAL (-14) +#define PCRE_ERROR_BADCOUNT (-15) + + /* Request types for pcre_fullinfo() */ + +#define PCRE_INFO_OPTIONS 0 +#define PCRE_INFO_SIZE 1 +#define PCRE_INFO_CAPTURECOUNT 2 +#define PCRE_INFO_BACKREFMAX 3 +#define PCRE_INFO_FIRSTBYTE 4 +#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ +#define PCRE_INFO_FIRSTTABLE 5 +#define PCRE_INFO_LASTLITERAL 6 +#define PCRE_INFO_NAMEENTRYSIZE 7 +#define PCRE_INFO_NAMECOUNT 8 +#define PCRE_INFO_NAMETABLE 9 +#define PCRE_INFO_STUDYSIZE 10 +#define PCRE_INFO_DEFAULT_TABLES 11 + + /* Request types for pcre_config() */ + +#define PCRE_CONFIG_UTF8 0 +#define PCRE_CONFIG_NEWLINE 1 +#define PCRE_CONFIG_LINK_SIZE 2 +#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 +#define PCRE_CONFIG_MATCH_LIMIT 4 +#define PCRE_CONFIG_STACKRECURSE 5 +#define PCRE_CONFIG_UNICODE_PROPERTIES 6 + + /* Bit flags for the pcre_extra structure */ + +#define PCRE_EXTRA_STUDY_DATA 0x0001 +#define PCRE_EXTRA_MATCH_LIMIT 0x0002 +#define PCRE_EXTRA_CALLOUT_DATA 0x0004 +#define PCRE_EXTRA_TABLES 0x0008 + + /* Types */ + + struct real_pcre; /* declaration; the definition is private */ + typedef struct real_pcre pcre; + + /* The structure for passing additional data to pcre_exec(). This is defined in + such as way as to be extensible. Always add new fields at the end, in order to + remain compatible. */ + + typedef struct pcre_extra { + unsigned long int flags; /* Bits for which fields are set */ + void *study_data; /* Opaque data from pcre_study() */ + unsigned long int match_limit; /* Maximum number of calls to match() */ + void *callout_data; /* Data passed back in callouts */ + const unsigned char *tables; /* Pointer to character tables */ + } pcre_extra; + + /* The structure for passing out data via the pcre_callout_function. We use a + structure so that new fields can be added on the end in future versions, + without changing the API of the function, thereby allowing old clients to work + without modification. */ + + typedef struct pcre_callout_block { + int version; /* Identifies version of block */ + /* ------------------------ Version 0 ------------------------------- */ + int callout_number; /* Number compiled into pattern */ + int *offset_vector; /* The offset vector */ + const char *subject; /* The subject being matched */ + int subject_length; /* The length of the subject */ + int start_match; /* Offset to start of this match attempt */ + int current_position; /* Where we currently are in the subject */ + int capture_top; /* Max current capture */ + int capture_last; /* Most recently closed capture */ + void *callout_data; /* Data passed in with the call */ + /* ------------------- Added for Version 1 -------------------------- */ + int pattern_position; /* Offset to next item in the pattern */ + int next_item_length; /* Length of next item in the pattern */ + /* ------------------------------------------------------------------ */ + } pcre_callout_block; + + /* Indirection for store get and free functions. These can be set to + alternative malloc/free functions if required. Special ones are used in the + non-recursive case for "frames". There is also an optional callout function + that is triggered by the (?) regex item. Some magic is required for Win32 DLL; + it is null on other OS. For Virtual Pascal, these have to be different again. + */ + +#ifndef VPCOMPAT + PCRE_DATA_SCOPE void *(*pcre_malloc) (size_t); + PCRE_DATA_SCOPE void (*pcre_free) (void *); + PCRE_DATA_SCOPE void *(*pcre_stack_malloc) (size_t); + PCRE_DATA_SCOPE void (*pcre_stack_free) (void *); + PCRE_DATA_SCOPE int (*pcre_callout) (pcre_callout_block *); +#else /* VPCOMPAT */ + extern void *pcre_malloc (size_t); + extern void pcre_free (void *); + extern void *pcre_stack_malloc (size_t); + extern void pcre_stack_free (void *); + extern int pcre_callout (pcre_callout_block *); +#endif /* VPCOMPAT */ + + /* Exported PCRE functions */ + + extern pcre *pcre_compile (const char *, int, const char **, + int *, const unsigned char *); + extern int pcre_config (int, void *); + extern int pcre_copy_named_substring (const pcre *, const char *, + int *, int, const char *, char *, + int); + extern int pcre_copy_substring (const char *, int *, int, int, char *, + int); + extern int pcre_exec (const pcre *, const pcre_extra *, const char *, + int, int, int, int *, int); + extern void pcre_free_substring (const char *); + extern void pcre_free_substring_list (const char **); + extern int pcre_fullinfo (const pcre *, const pcre_extra *, int, + void *); + extern int pcre_get_named_substring (const pcre *, const char *, + int *, int, const char *, + const char **); + extern int pcre_get_stringnumber (const pcre *, const char *); + extern int pcre_get_substring (const char *, int *, int, int, + const char **); + extern int pcre_get_substring_list (const char *, int *, int, + const char ***); + extern int pcre_info (const pcre *, int *, int *); + extern const unsigned char *pcre_maketables (void); + extern pcre_extra *pcre_study (const pcre *, int, const char **); + extern const char *pcre_version (void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif +#endif /* End of pcre.h */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcreposix.c b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcreposix.c new file mode 100644 index 0000000000..f64e51429b --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcreposix.c @@ -0,0 +1,339 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see below. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* + This is a library of functions to support regular expressions whose syntax + and semantics are as close as possible to those of the Perl 5 language. See + the file Tech.Notes for some information on the internals. + + This module is a wrapper that provides a POSIX API to the underlying PCRE + functions. + + Written by: Philip Hazel + + Copyright (c) 1997-2004 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + +#include +#include "internal.h" +#include "pcreposix.h" +#include "stdlib.h" + + + +/* Corresponding tables of PCRE error messages and POSIX error codes. */ + +static const char *const estring[] = { + ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, + ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20, + ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30, + ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40, + ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47 +}; + +static const int eint[] = { + REG_EESCAPE, /* "\\ at end of pattern" */ + REG_EESCAPE, /* "\\c at end of pattern" */ + REG_EESCAPE, /* "unrecognized character follows \\" */ + REG_BADBR, /* "numbers out of order in {} quantifier" */ + REG_BADBR, /* "number too big in {} quantifier" */ + REG_EBRACK, /* "missing terminating ] for character class" */ + REG_ECTYPE, /* "invalid escape sequence in character class" */ + REG_ERANGE, /* "range out of order in character class" */ + REG_BADRPT, /* "nothing to repeat" */ + REG_BADRPT, /* "operand of unlimited repeat could match the empty string" */ + REG_ASSERT, /* "internal error: unexpected repeat" */ + REG_BADPAT, /* "unrecognized character after (?" */ + REG_BADPAT, /* "POSIX named classes are supported only within a class" */ + REG_EPAREN, /* "missing )" */ + REG_ESUBREG, /* "reference to non-existent subpattern" */ + REG_INVARG, /* "erroffset passed as NULL" */ + REG_INVARG, /* "unknown option bit(s) set" */ + REG_EPAREN, /* "missing ) after comment" */ + REG_ESIZE, /* "parentheses nested too deeply" */ + REG_ESIZE, /* "regular expression too large" */ + REG_ESPACE, /* "failed to get memory" */ + REG_EPAREN, /* "unmatched brackets" */ + REG_ASSERT, /* "internal error: code overflow" */ + REG_BADPAT, /* "unrecognized character after (?<" */ + REG_BADPAT, /* "lookbehind assertion is not fixed length" */ + REG_BADPAT, /* "malformed number after (?(" */ + REG_BADPAT, /* "conditional group containe more than two branches" */ + REG_BADPAT, /* "assertion expected after (?(" */ + REG_BADPAT, /* "(?R or (?digits must be followed by )" */ + REG_ECTYPE, /* "unknown POSIX class name" */ + REG_BADPAT, /* "POSIX collating elements are not supported" */ + REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 support" */ + REG_BADPAT, /* "spare error" */ + REG_BADPAT, /* "character value in \x{...} sequence is too large" */ + REG_BADPAT, /* "invalid condition (?(0)" */ + REG_BADPAT, /* "\\C not allowed in lookbehind assertion" */ + REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\U, or \\u" */ + REG_BADPAT, /* "number after (?C is > 255" */ + REG_BADPAT, /* "closing ) for (?C expected" */ + REG_BADPAT, /* "recursive call could loop indefinitely" */ + REG_BADPAT, /* "unrecognized character after (?P" */ + REG_BADPAT, /* "syntax error after (?P" */ + REG_BADPAT, /* "two named groups have the same name" */ + REG_BADPAT, /* "invalid UTF-8 string" */ + REG_BADPAT, /* "support for \\P, \\p, and \\X has not been compiled" */ + REG_BADPAT, /* "malformed \\P or \\p sequence" */ + REG_BADPAT /* "unknown property name after \\P or \\p" */ +}; + +/* Table of texts corresponding to POSIX error codes */ + +static const char *const pstring[] = { + "", /* Dummy for value 0 */ + "internal error", /* REG_ASSERT */ + "invalid repeat counts in {}", /* BADBR */ + "pattern error", /* BADPAT */ + "? * + invalid", /* BADRPT */ + "unbalanced {}", /* EBRACE */ + "unbalanced []", /* EBRACK */ + "collation error - not relevant", /* ECOLLATE */ + "bad class", /* ECTYPE */ + "bad escape sequence", /* EESCAPE */ + "empty expression", /* EMPTY */ + "unbalanced ()", /* EPAREN */ + "bad range inside []", /* ERANGE */ + "expression too big", /* ESIZE */ + "failed to get memory", /* ESPACE */ + "bad back reference", /* ESUBREG */ + "bad argument", /* INVARG */ + "match failed" /* NOMATCH */ +}; + + + + +/************************************************* +* Translate PCRE text code to int * +*************************************************/ + +/* PCRE compile-time errors are given as strings defined as macros. We can just + look them up in a table to turn them into POSIX-style error codes. */ + +static int +pcre_posix_error_code (const char *s) +{ + size_t i; + for (i = 0; i < sizeof (estring) / sizeof (char *); i++) + if (strcmp (s, estring[i]) == 0) + return eint[i]; + return REG_ASSERT; +} + + + +/************************************************* +* Translate error code to string * +*************************************************/ + +size_t +go_regerror (int errcode, const GORegexp * preg, char *errbuf, + size_t errbuf_size) +{ + const char *message, *addmessage; + size_t length, addlength; + + message = (errcode >= (int) (sizeof (pstring) / sizeof (char *)))? + "unknown error code" : pstring[errcode]; + length = strlen (message) + 1; + + addmessage = " at offset "; + addlength = (preg != NULL && (int) preg->re_erroffset != -1) ? + strlen (addmessage) + 6 : 0; + + if (errbuf_size > 0) { + if (addlength > 0 && errbuf_size >= length + addlength) + sprintf (errbuf, "%s%s%-6d", message, addmessage, + (int) preg->re_erroffset); + else { + strncpy (errbuf, message, errbuf_size - 1); + errbuf[errbuf_size - 1] = 0; + } + } + + return length + addlength; +} + + + + +/************************************************* +* Free store held by a regex * +*************************************************/ + +void +go_regfree (GORegexp * preg) +{ + (pcre_free) (preg->re_pcre); +} + + + + +/************************************************* +* Compile a regular expression * +*************************************************/ + +/* + Arguments: + preg points to a structure for recording the compiled expression + pattern the pattern to compile + cflags compilation flags + + Returns: 0 on success + various non-zero codes on failure + */ + +int +go_regcomp (GORegexp * preg, const char *pattern, int cflags) +{ + const char *errorptr; + int erroffset; + int options = 0; + + if ((cflags & REG_ICASE) != 0) + options |= PCRE_CASELESS; + if ((cflags & REG_NEWLINE) != 0) + options |= PCRE_MULTILINE; + + preg->re_pcre = + pcre_compile (pattern, options | PCRE_UTF8 | PCRE_NO_UTF8_CHECK, + &errorptr, &erroffset, NULL); + preg->re_erroffset = erroffset; + + if (preg->re_pcre == NULL) + return pcre_posix_error_code (errorptr); + + preg->re_nsub = pcre_info ((const pcre *) preg->re_pcre, NULL, NULL); + return 0; +} + + + + +/************************************************* +* Match a regular expression * +*************************************************/ + +/* Unfortunately, PCRE requires 3 ints of working space for each captured + substring, so we have to get and release working store instead of just using + the POSIX structures as was done in earlier releases when PCRE needed only 2 + ints. However, if the number of possible capturing brackets is small, use a + block of store on the stack, to reduce the use of malloc/free. The threshold is + in a macro that can be changed at configure time. */ + +int +go_regexec (const GORegexp * preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags) +{ + int rc; + int options = 0; + int *ovector = NULL; + int small_ovector[POSIX_MALLOC_THRESHOLD * 3]; + BOOL allocated_ovector = FALSE; + + if ((eflags & REG_NOTBOL) != 0) + options |= PCRE_NOTBOL; + if ((eflags & REG_NOTEOL) != 0) + options |= PCRE_NOTEOL; + + ((GORegexp *) preg)->re_erroffset = (size_t) (-1); /* Only has meaning after compile */ + + if (nmatch > 0) { + if (nmatch <= POSIX_MALLOC_THRESHOLD) { + ovector = &(small_ovector[0]); + } else { + ovector = (int *) malloc (sizeof (int) * nmatch * 3); + if (ovector == NULL) + return REG_ESPACE; + allocated_ovector = TRUE; + } + } + + rc = + pcre_exec ((const pcre *) preg->re_pcre, NULL, string, + (int) strlen (string), 0, options, ovector, nmatch * 3); + + if (rc == 0) + rc = nmatch; /* All captured slots were filled in */ + + if (rc >= 0) { + size_t i; + for (i = 0; i < (size_t) rc; i++) { + pmatch[i].rm_so = ovector[i * 2]; + pmatch[i].rm_eo = ovector[i * 2 + 1]; + } + if (allocated_ovector) + free (ovector); + for (; i < nmatch; i++) + pmatch[i].rm_so = pmatch[i].rm_eo = -1; + return 0; + } + + else { + if (allocated_ovector) + free (ovector); + switch (rc) { + case PCRE_ERROR_NOMATCH: + return REG_NOMATCH; + case PCRE_ERROR_NULL: + return REG_INVARG; + case PCRE_ERROR_BADOPTION: + return REG_INVARG; + case PCRE_ERROR_BADMAGIC: + return REG_INVARG; + case PCRE_ERROR_UNKNOWN_NODE: + return REG_ASSERT; + case PCRE_ERROR_NOMEMORY: + return REG_ESPACE; + case PCRE_ERROR_MATCHLIMIT: + return REG_ESPACE; + case PCRE_ERROR_BADUTF8: + return REG_INVARG; + case PCRE_ERROR_BADUTF8_OFFSET: + return REG_INVARG; + default: + return REG_ASSERT; + } + } +} + +/* End of pcreposix.c */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcreposix.h b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcreposix.h new file mode 100644 index 0000000000..6496a869d6 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/pcreposix.h @@ -0,0 +1,123 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see pcreposix.c. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +#ifndef _PCREPOSIX_H +#define _PCREPOSIX_H + +/* This is the header for the POSIX wrapper interface to the PCRE Perl- + Compatible Regular Expression library. It defines the things POSIX says should + be there. I hope. + + Copyright (c) 1997-2004 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + +/* Have to include stdlib.h in order to ensure that size_t is defined. */ + +#include + +/* Allow for C++ users */ + +#ifdef __cplusplus +extern "C" { +#endif + + /* Options defined by POSIX. */ + +#define REG_ICASE 0x01 +#define REG_NEWLINE 0x02 +#define REG_NOTBOL 0x04 +#define REG_NOTEOL 0x08 + + /* These are not used by PCRE, but by defining them we make it easier + to slot PCRE into existing programs that make POSIX calls. */ + +#define REG_EXTENDED 0 +#define REG_NOSUB 0 + + /* Error values. Not all these are relevant or used by the wrapper. */ + + enum { + REG_OK = 0, + REG_ASSERT = 1, /* internal error ? */ + REG_BADBR, /* invalid repeat counts in {} */ + REG_BADPAT, /* pattern error */ + REG_BADRPT, /* ? * + invalid */ + REG_EBRACE, /* unbalanced {} */ + REG_EBRACK, /* unbalanced [] */ + REG_ECOLLATE, /* collation error - not relevant */ + REG_ECTYPE, /* bad class */ + REG_EESCAPE, /* bad escape sequence */ + REG_EMPTY, /* empty expression */ + REG_EPAREN, /* unbalanced () */ + REG_ERANGE, /* bad range inside [] */ + REG_ESIZE, /* expression too big */ + REG_ESPACE, /* failed to get memory */ + REG_ESUBREG, /* bad back reference */ + REG_INVARG, /* bad argument */ + REG_NOMATCH /* match failed */ + }; + + + /* The structure representing a compiled regular expression. */ + + typedef struct { + void *re_pcre; + size_t re_nsub; + size_t re_erroffset; + } GORegexp; + + /* The structure in which a captured offset is returned. */ + + typedef int go_regoff_t; + + typedef struct { + go_regoff_t rm_so; + go_regoff_t rm_eo; + } regmatch_t; + + /* The functions */ + + extern int go_regcomp (GORegexp *, const char *, int); + extern int go_regexec (const GORegexp *, const char *, size_t, + regmatch_t *, int); + extern size_t go_regerror (int, const GORegexp *, char *, size_t); + extern void go_regfree (GORegexp *); + +#ifdef __cplusplus +} /* extern "C" */ +#endif +#endif /* End of pcreposix.h */ diff --git a/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/study.c b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/study.c new file mode 100644 index 0000000000..431c308ac5 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/cut-n-paste/pcre/study.c @@ -0,0 +1,493 @@ +/* File import from pcre to goffice by import-pcre. Do not edit. */ + +/* This file has been programatically changed. */ +/* This makes the following file fall under GPL license, see below. */ + +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* + This is a library of functions to support regular expressions whose syntax + and semantics are as close as possible to those of the Perl 5 language. See + the file Tech.Notes for some information on the internals. + + Written by: Philip Hazel + + Copyright (c) 1997-2004 University of Cambridge + + ----------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ----------------------------------------------------------------------------- + */ + + +/* Include the internals header, which itself includes Standard C headers plus + the external pcre header. */ + +#include +#include "internal.h" + + + +/************************************************* +* Set a bit and maybe its alternate case * +*************************************************/ + +/* Given a character, set its bit in the table, and also the bit for the other + version of a letter if we are caseless. + + Arguments: + start_bits points to the bit map + c is the character + caseless the caseless flag + cd the block with char table pointers + + Returns: nothing + */ + +static void +set_bit (uschar * start_bits, unsigned int c, BOOL caseless, + compile_data * cd) +{ + start_bits[c / 8] |= (1 << (c & 7)); + if (caseless && (cd->ctypes[c] & ctype_letter) != 0) + start_bits[cd->fcc[c] / 8] |= (1 << (cd->fcc[c] & 7)); +} + + + +/************************************************* +* Create bitmap of starting chars * +*************************************************/ + +/* This function scans a compiled unanchored expression and attempts to build a + bitmap of the set of initial characters. If it can't, it returns FALSE. As time + goes by, we may be able to get more clever at doing this. + + Arguments: + code points to an expression + start_bits points to a 32-byte table, initialized to 0 + caseless the current state of the caseless flag + utf8 TRUE if in UTF-8 mode + cd the block with char table pointers + + Returns: TRUE if table built, FALSE otherwise + */ + +static BOOL +set_start_bits (const uschar * code, uschar * start_bits, BOOL caseless, + BOOL utf8, compile_data * cd) +{ + register int c; + + /* This next statement and the later reference to dummy are here in order to + trick the optimizer of the IBM C compiler for OS/2 into generating correct + code. Apparently IBM isn't going to fix the problem, and we would rather not + disable optimization (in this module it actually makes a big difference, and + the pcre module can use all the optimization it can get). */ + + volatile int dummy; + + do { + const uschar *tcode = code + 1 + LINK_SIZE; + BOOL try_next = TRUE; + + while (try_next) { + /* If a branch starts with a bracket or a positive lookahead assertion, + recurse to set bits from within them. That's all for this branch. */ + + if ((int) *tcode >= OP_BRA || *tcode == OP_ASSERT) { + if (!set_start_bits + (tcode, start_bits, caseless, utf8, cd)) return FALSE; + try_next = FALSE; + } + + else + switch (*tcode) { + default: + return FALSE; + + /* Skip over callout */ + + case OP_CALLOUT: + tcode += 2 + 2 * LINK_SIZE; + break; + + /* Skip over extended extraction bracket number */ + + case OP_BRANUMBER: + tcode += 3; + break; + + /* Skip over lookbehind and negative lookahead assertions */ + + case OP_ASSERT_NOT: + case OP_ASSERTBACK: + case OP_ASSERTBACK_NOT: + do + tcode += GET (tcode, 1); + while (*tcode == OP_ALT); + tcode += 1 + LINK_SIZE; + break; + + /* Skip over an option setting, changing the caseless flag */ + + case OP_OPT: + caseless = (tcode[1] & PCRE_CASELESS) != 0; + tcode += 2; + break; + + /* BRAZERO does the bracket, but carries on. */ + + case OP_BRAZERO: + case OP_BRAMINZERO: + if (!set_start_bits + (++tcode, start_bits, caseless, utf8, cd)) + return FALSE; + dummy = 1; + do + tcode += GET (tcode, 1); + while (*tcode == OP_ALT); + tcode += 1 + LINK_SIZE; + break; + + /* Single-char * or ? sets the bit and tries the next item */ + + case OP_STAR: + case OP_MINSTAR: + case OP_QUERY: + case OP_MINQUERY: + set_bit (start_bits, tcode[1], caseless, cd); + tcode += 2; +#ifdef SUPPORT_UTF8 + if (1 /* utf8 */ ) + while ((*tcode & 0xc0) == 0x80) + tcode++; +#endif + break; + + /* Single-char upto sets the bit and tries the next */ + + case OP_UPTO: + case OP_MINUPTO: + set_bit (start_bits, tcode[3], caseless, cd); + tcode += 4; +#ifdef SUPPORT_UTF8 + if (1 /* utf8 */ ) + while ((*tcode & 0xc0) == 0x80) + tcode++; +#endif + break; + + /* At least one single char sets the bit and stops */ + + case OP_EXACT: /* Fall through */ + tcode += 2; + + case OP_CHAR: + case OP_CHARNC: + case OP_PLUS: + case OP_MINPLUS: + set_bit (start_bits, tcode[1], caseless, cd); + try_next = FALSE; + break; + + /* Single character type sets the bits and stops */ + + case OP_NOT_DIGIT: + for (c = 0; c < 32; c++) + start_bits[c] |= ~cd->cbits[c + cbit_digit]; + try_next = FALSE; + break; + + case OP_DIGIT: + for (c = 0; c < 32; c++) + start_bits[c] |= cd->cbits[c + cbit_digit]; + try_next = FALSE; + break; + + case OP_NOT_WHITESPACE: + for (c = 0; c < 32; c++) + start_bits[c] |= ~cd->cbits[c + cbit_space]; + try_next = FALSE; + break; + + case OP_WHITESPACE: + for (c = 0; c < 32; c++) + start_bits[c] |= cd->cbits[c + cbit_space]; + try_next = FALSE; + break; + + case OP_NOT_WORDCHAR: + for (c = 0; c < 32; c++) + start_bits[c] |= ~cd->cbits[c + cbit_word]; + try_next = FALSE; + break; + + case OP_WORDCHAR: + for (c = 0; c < 32; c++) + start_bits[c] |= cd->cbits[c + cbit_word]; + try_next = FALSE; + break; + + /* One or more character type fudges the pointer and restarts, knowing + it will hit a single character type and stop there. */ + + case OP_TYPEPLUS: + case OP_TYPEMINPLUS: + tcode++; + break; + + case OP_TYPEEXACT: + tcode += 3; + break; + + /* Zero or more repeats of character types set the bits and then + try again. */ + + case OP_TYPEUPTO: + case OP_TYPEMINUPTO: + tcode += 2; /* Fall through */ + + case OP_TYPESTAR: + case OP_TYPEMINSTAR: + case OP_TYPEQUERY: + case OP_TYPEMINQUERY: + switch (tcode[1]) { + case OP_ANY: + return FALSE; + + case OP_NOT_DIGIT: + for (c = 0; c < 32; c++) + start_bits[c] |= ~cd->cbits[c + cbit_digit]; + break; + + case OP_DIGIT: + for (c = 0; c < 32; c++) + start_bits[c] |= cd->cbits[c + cbit_digit]; + break; + + case OP_NOT_WHITESPACE: + for (c = 0; c < 32; c++) + start_bits[c] |= ~cd->cbits[c + cbit_space]; + break; + + case OP_WHITESPACE: + for (c = 0; c < 32; c++) + start_bits[c] |= cd->cbits[c + cbit_space]; + break; + + case OP_NOT_WORDCHAR: + for (c = 0; c < 32; c++) + start_bits[c] |= ~cd->cbits[c + cbit_word]; + break; + + case OP_WORDCHAR: + for (c = 0; c < 32; c++) + start_bits[c] |= cd->cbits[c + cbit_word]; + break; + } + + tcode += 2; + break; + + /* Character class where all the information is in a bit map: set the + bits and either carry on or not, according to the repeat count. If it was + a negative class, and we are operating with UTF-8 characters, any byte + with a value >= 0xc4 is a potentially valid starter because it starts a + character with a value > 255. */ + + case OP_NCLASS: + if (1 /* utf8 */ ) { + start_bits[24] |= 0xf0; /* Bits for 0xc4 - 0xc8 */ + memset (start_bits + 25, 0xff, 7); /* Bits for 0xc9 - 0xff */ + } + /* Fall through */ + + case OP_CLASS: + { + tcode++; + + /* In UTF-8 mode, the bits in a bit map correspond to character + values, not to byte values. However, the bit map we are constructing is + for byte values. So we have to do a conversion for characters whose + value is > 127. In fact, there are only two possible starting bytes for + characters in the range 128 - 255. */ + + if (1 /* utf8 */ ) { + for (c = 0; c < 16; c++) + start_bits[c] |= tcode[c]; + for (c = 128; c < 256; c++) { + if ((tcode[c / 8] && (1 << (c & 7))) != 0) { + int d = (c >> 6) | 0xc0; /* Set bit for this starter */ + start_bits[d / 8] |= (1 << (d & 7)); /* and then skip on to the */ + c = (c & 0xc0) + 0x40 - 1; /* next relevant character. */ + } + } + } + + /* In non-UTF-8 mode, the two bit maps are completely compatible. */ + + else { + for (c = 0; c < 32; c++) + start_bits[c] |= tcode[c]; + } + + /* Advance past the bit map, and act on what follows */ + + tcode += 32; + switch (*tcode) { + case OP_CRSTAR: + case OP_CRMINSTAR: + case OP_CRQUERY: + case OP_CRMINQUERY: + tcode++; + break; + + case OP_CRRANGE: + case OP_CRMINRANGE: + if (((tcode[1] << 8) + tcode[2]) == 0) + tcode += 5; + else + try_next = FALSE; + break; + + default: + try_next = FALSE; + break; + } + } + break; /* End of bitmap class handling */ + + } /* End of switch */ + } /* End of try_next loop */ + + code += GET (code, 1); /* Advance to next branch */ + } + while (*code == OP_ALT); + return TRUE; +} + + + +/************************************************* +* Study a compiled expression * +*************************************************/ + +/* This function is handed a compiled expression that it must study to produce + information that will speed up the matching. It returns a pcre_extra block + which then gets handed back to pcre_exec(). + + Arguments: + re points to the compiled expression + options contains option bits + errorptr points to where to place error messages; + set NULL unless error + + Returns: pointer to a pcre_extra block, with study_data filled in and the + appropriate flag set; + NULL on error or if no optimization possible + */ + +pcre_extra * +pcre_study (const pcre * external_re, int options, const char **errorptr) +{ + uschar start_bits[32]; + pcre_extra *extra; + pcre_study_data *study; + const uschar *tables; + const real_pcre *re = (const real_pcre *) external_re; + uschar *code = (uschar *) re + re->name_table_offset + + (re->name_count * re->name_entry_size); + compile_data compile_block; + + *errorptr = NULL; + + if (re == NULL || re->magic_number != MAGIC_NUMBER) { + *errorptr = "argument is not a compiled regular expression"; + return NULL; + } + + if ((options & ~PUBLIC_STUDY_OPTIONS) != 0) { + *errorptr = "unknown or incorrect option bit(s) set"; + return NULL; + } + + /* For an anchored pattern, or an unanchored pattern that has a first char, or + a multiline pattern that matches only at "line starts", no further processing + at present. */ + + if ((re->options & (PCRE_ANCHORED | PCRE_FIRSTSET | PCRE_STARTLINE)) != + 0) return NULL; + + /* Set the character tables in the block that is passed around */ + + tables = re->tables; + if (tables == NULL) + (void) pcre_fullinfo (external_re, NULL, PCRE_INFO_DEFAULT_TABLES, &tables); + + compile_block.lcc = tables + lcc_offset; + compile_block.fcc = tables + fcc_offset; + compile_block.cbits = tables + cbits_offset; + compile_block.ctypes = tables + ctypes_offset; + + /* See if we can find a fixed set of initial characters for the pattern. */ + + memset (start_bits, 0, 32 * sizeof (uschar)); + if (!set_start_bits + (code, start_bits, (re->options & PCRE_CASELESS) != 0, + (re->options & PCRE_UTF8) != 0, &compile_block)) + return NULL; + + /* Get a pcre_extra block and a pcre_study_data block. The study data is put in + the latter, which is pointed to by the former, which may also get additional + data set later by the calling program. At the moment, the size of + pcre_study_data is fixed. We nevertheless save it in a field for returning via + the pcre_fullinfo() function so that if it becomes variable in the future, we + don't have to change that code. */ + + extra = (pcre_extra *) (pcre_malloc) + (sizeof (pcre_extra) + sizeof (pcre_study_data)); + + if (extra == NULL) { + *errorptr = "failed to get memory"; + return NULL; + } + + study = (pcre_study_data *) ((char *) extra + sizeof (pcre_extra)); + extra->flags = PCRE_EXTRA_STUDY_DATA; + extra->study_data = study; + + study->size = sizeof (pcre_study_data); + study->options = PCRE_STUDY_MAPPED; + memcpy (study->start_bits, start_bits, sizeof (start_bits)); + + return extra; +} + +/* End of study.c */ diff --git a/lib/goffice-0.0.4/goffice/data/Makefile.am b/lib/goffice-0.0.4/goffice/data/Makefile.am new file mode 100644 index 0000000000..6f51008d7f --- /dev/null +++ b/lib/goffice-0.0.4/goffice/data/Makefile.am @@ -0,0 +1,14 @@ +noinst_LTLIBRARIES = libgoffice-data.la + +libgoffice_data_la_SOURCES = \ + go-data.c \ + go-data-simple.c + +libgoffice_data_ladir = $(goffice_include_dir)/data +libgoffice_data_la_HEADERS = \ + goffice-data.h \ + go-data.h \ + go-data-impl.h \ + go-data-simple.h + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice/graph/go-data-impl.h b/lib/goffice-0.0.4/goffice/data/go-data-impl.h similarity index 92% rename from lib/goffice/graph/go-data-impl.h rename to lib/goffice-0.0.4/goffice/data/go-data-impl.h index 3a718bf111..e2022016e7 100644 --- a/lib/goffice/graph/go-data-impl.h +++ b/lib/goffice-0.0.4/goffice/data/go-data-impl.h @@ -15,14 +15,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DATA_IMPL_H #define GO_DATA_IMPL_H -#include -#include +#include +#include #include G_BEGIN_DECLS @@ -83,7 +83,7 @@ typedef struct { struct _GODataMatrix { GOData base; - GOMatrixSize size; /* negative if dirty, includes missing values */ + GODataMatrixSize size; /* negative if dirty, includes missing values */ double *values; /* NULL = uninitialized/unsupported, nan = missing */ double minimum, maximum; }; diff --git a/lib/goffice/graph/go-data-simple.c b/lib/goffice-0.0.4/goffice/data/go-data-simple.c similarity index 51% rename from lib/goffice/graph/go-data-simple.c rename to lib/goffice-0.0.4/goffice/data/go-data-simple.c index af2e57cdd8..759eefac24 100644 --- a/lib/goffice/graph/go-data-simple.c +++ b/lib/goffice-0.0.4/goffice/data/go-data-simple.c @@ -2,7 +2,7 @@ /* * go-data-simple.c : * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2003-2005 Jody Goldberg (jody@gnome.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,12 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include -#include +#include "go-data-simple.h" +#include "go-data-impl.h" +#include #include #include @@ -269,7 +270,8 @@ go_data_scalar_str_set_str (GODataScalarStr *str, struct _GODataVectorVal { GODataVector base; unsigned n; - double const *val; + double *val; + GDestroyNotify notify; }; typedef GODataVectorClass GODataVectorValClass; @@ -278,7 +280,9 @@ static GObjectClass *vector_val_parent_klass; static void go_data_vector_val_finalize (GObject *obj) { - /* GODataVectorVal *val = (GODataVectorVal *)obj; */ + GODataVectorVal *vec = (GODataVectorVal *)obj; + if (vec->notify && vec->val) + (*vec->notify) (vec->val); (*vector_val_parent_klass->finalize) (obj); } @@ -288,7 +292,12 @@ go_data_vector_val_dup (GOData const *src) { GODataVectorVal *dst = g_object_new (G_OBJECT_TYPE (src), NULL); GODataVectorVal const *src_val = (GODataVectorVal const *)src; - dst->val = src_val->val; + if (src_val->notify) { + dst->val = g_new (double, src_val->n); + memcpy (dst->val, src_val->val, src_val->n * sizeof (double)); + dst->notify = g_free; + } else + dst->val = src_val->val; dst->n = src_val->n; return GO_DATA (dst); } @@ -329,15 +338,90 @@ go_data_vector_val_load_values (GODataVector *vec) vec->maximum = maximum; vec->base.flags |= GO_DATA_CACHE_IS_VALID; } + static double go_data_vector_val_get_value (GODataVector *vec, unsigned i) { - return vec->values[i]; + GODataVectorVal const *val = (GODataVectorVal const *)vec; + g_return_val_if_fail (val != NULL && val->val != NULL && i < val->n, go_nan); + return val->val[i]; } + static char * go_data_vector_val_get_str (GODataVector *vec, unsigned i) { - return g_strdup_printf ("%g", vec->values[i]); + GODataVectorVal const *val = (GODataVectorVal const *)vec; + g_return_val_if_fail (val != NULL && val->val != NULL && i < val->n, NULL); + return g_strdup_printf ("%g", val->val[i]); +} + +static char * +go_data_vector_val_as_str (GOData const *dat) +{ + GODataVectorVal *vec = GO_DATA_VECTOR_VAL (dat); + GString *str; + char sep, sz[G_ASCII_DTOSTR_BUF_SIZE]; + unsigned i; + + if (vec->n ==0) + return g_strdup (""); + + sep = format_get_col_sep (); + g_snprintf (sz, sizeof (sz), "%g", vec->val[0]); + str = g_string_new (sz); + for (i = 1; i < vec->n; i++) { + g_string_append_c (str, sep); + g_snprintf (sz, sizeof (sz), "%g", vec->val[i]); + g_string_append (str, sz); + } + return g_string_free (str, FALSE); +} + +static gboolean +go_data_vector_val_from_str (GOData *dat, char const *str) +{ + GODataVectorVal *vec = GO_DATA_VECTOR_VAL (dat); + char sep, *end = (char*) str; + double val; + GArray *values; + + g_return_val_if_fail (str != NULL, TRUE); + + if (vec->notify && vec->val) + (*vec->notify) (vec->val); + + values = g_array_sized_new (FALSE, FALSE, sizeof(double), 16); + sep = 0; + vec->val = NULL; + vec->n = 0; + vec->notify = (GDestroyNotify) g_free; + while (1) { + val = g_strtod (end, &end); + g_array_append_val (values, val); + if (*end) { + if (!sep) { + /* allow the use of all possible seps */ + if ((sep = format_get_arg_sep ()) != *end) + if ((sep = format_get_col_sep ()) != *end) + sep = format_get_row_sep (); + } + if (*end != sep) { + g_array_free (values, TRUE); + return FALSE; + } + end++; + } else + break; + } + if (values->len == 0) { + g_array_free (values, TRUE); + return TRUE; + } + vec->n = values->len; + vec->val = (double*) values->data; + g_array_free (values, FALSE); + go_data_emit_changed (GO_DATA (vec)); + return TRUE; } static void @@ -350,8 +434,8 @@ go_data_vector_val_class_init (GObjectClass *gobject_klass) gobject_klass->finalize = go_data_vector_val_finalize; godata_klass->dup = go_data_vector_val_dup; godata_klass->eq = go_data_vector_val_eq; - godata_klass->as_str = NULL; - godata_klass->from_str = NULL; + godata_klass->as_str = go_data_vector_val_as_str; + godata_klass->from_str = go_data_vector_val_from_str; vector_klass->load_len = go_data_vector_val_load_len; vector_klass->load_values = go_data_vector_val_load_values; vector_klass->get_value = go_data_vector_val_get_value; @@ -363,11 +447,12 @@ GSF_CLASS (GODataVectorVal, go_data_vector_val, GO_DATA_VECTOR_TYPE) GOData * -go_data_vector_val_new (double const *val, unsigned n) +go_data_vector_val_new (double *val, unsigned n, GDestroyNotify notify) { GODataVectorVal *res = g_object_new (GO_DATA_VECTOR_VAL_TYPE, NULL); res->val = val; res->n = n; + res->notify = notify; return GO_DATA (res); } @@ -376,7 +461,8 @@ go_data_vector_val_new (double const *val, unsigned n) struct _GODataVectorStr { GODataVector base; char const * const *str; - unsigned n; + int n; + GDestroyNotify notify; GOTranslateFunc translate_func; gpointer translate_data; @@ -386,10 +472,29 @@ typedef GODataVectorClass GODataVectorStrClass; static GObjectClass *vector_str_parent_klass; +static void +cb_strings_destroy_notify (gpointer data) +{ + char **str = (char **) data; + unsigned i = 0; + while (str[i] != NULL) + g_free (str[i++]); + g_free (str); +} + static void go_data_vector_str_finalize (GObject *obj) { - /* GODataVectorStr *str = (GODataVectorStr *)obj; */ + GODataVectorStr *str = (GODataVectorStr *)obj; + if (str->notify && str->str != NULL) + (*str->notify) ((gpointer)str->str); + + if (str->translate_notify != NULL) + (*str->translate_notify) (str->translate_data); + + if (str->base.values != NULL) + g_free (str->base.values); + str->base.values = NULL; (*vector_str_parent_klass->finalize) (obj); } @@ -400,7 +505,16 @@ go_data_vector_str_dup (GOData const *src) GODataVectorStr *dst = g_object_new (G_OBJECT_TYPE (src), NULL); GODataVectorStr const *src_val = (GODataVectorStr const *)src; dst->n = src_val->n; - dst->str = src_val->str; + if (src_val->notify) { + int i; + char const * *str = g_new (char const *, src_val->n + 1); + for (i = 0; i < src_val->n; i++) + str[i] = g_strdup (src_val->str[i]); + str[src_val->n] = NULL; + dst->str = str; + dst->notify = cb_strings_destroy_notify; + } else + dst->str = src_val->str; return GO_DATA (dst); } @@ -412,21 +526,155 @@ go_data_vector_str_eq (GOData const *a, GOData const *b) return str_a->str == str_b->str && str_a->n == str_b->n; } +static char * +go_data_vector_str_as_str (GOData const *dat) +{ + GODataVectorStr *vec = GO_DATA_VECTOR_STR (dat); + GString *str; + char sep; + int i; + + sep = format_get_col_sep (); + if (vec->n ==0) + return g_strdup (""); + + str = g_string_new (""); + g_string_append_c (str, '\"'); + g_string_append (str, vec->str[0]); + g_string_append_c (str, '\"'); + for (i = 1; i < vec->n; i++) { + g_string_append_c (str, sep); + g_string_append_c (str, '\"'); + g_string_append (str, vec->str[i]); + g_string_append_c (str, '\"'); + } + return g_string_free (str, FALSE); +} + +static gboolean +go_data_vector_str_from_str (GOData *dat, char const *str) +{ + GODataVectorStr *vec = GO_DATA_VECTOR_STR (dat); + char sep, *cur = (char*) str, *end, *val; + GArray *values; + + g_return_val_if_fail (str != NULL, TRUE); + + if (vec->notify && vec->str) + (*vec->notify) ((gpointer)vec->str); + + values = g_array_sized_new (FALSE, FALSE, sizeof(char*), 16); + /* search which separator has been used */ + sep = format_get_col_sep (); + end = strchr (cur, sep); + if (end == NULL) { + sep = format_get_arg_sep (); + end = strchr (cur, sep); + if (end ==NULL) + sep = format_get_row_sep (); + } + vec->str = NULL; + vec->n = 0; + vec->notify = cb_strings_destroy_notify; + while (*cur) { + if (*cur == '\"') { + cur++; + end = strchr (cur, '\"'); + if (end == NULL) { + g_array_free (values, TRUE); + return FALSE; + } + val = g_strndup (cur, end - cur); + g_array_append_val (values, val); + if (end[1] == 0) + break; + if (end[1] != sep) { + g_array_free (values, TRUE); + return FALSE; + } + cur = end + 2; + } else { + /* the string is not quotes delimited */ + end = strchr (cur, sep); + if (end == NULL) { + if (strchr (cur, '\"')) { + /* string containg quotes are not allowed */ + g_array_free (values, TRUE); + return FALSE; + } + val = g_strdup (cur); + g_array_append_val (values, val); + break; + } + val = g_strndup (cur, end - cur); + g_array_append_val (values, val); + if (strchr (val, '\"')) { + /* string containg quotes are not allowed */ + g_array_free (values, TRUE); + return FALSE; + } + cur = end + 1; + } + } + if (values->len == 0) { + g_array_free (values, TRUE); + return TRUE; + } + vec->n = values->len; + val = NULL; + g_array_append_val (values, val); + vec->str = (char const*const*) values->data; + g_array_free (values, FALSE); + go_data_emit_changed (GO_DATA (vec)); + return TRUE; +} + static void go_data_vector_str_load_len (GODataVector *vec) { vec->base.flags |= GO_DATA_VECTOR_LEN_CACHED; + if (vec->values && vec->len != ((GODataVectorStr *)vec)->n) { + g_free (vec->values); + vec->values = NULL; + } vec->len = ((GODataVectorStr *)vec)->n; } + static void go_data_vector_str_load_values (GODataVector *vec) { + char *end; + GODataVectorStr const *strs = (GODataVectorStr const *)vec; + double minimum = DBL_MAX, maximum = -DBL_MAX; + int i = vec->len = strs->n; + + if (vec->values == NULL) + vec->values = g_new (double, strs->n); + while (i-- > 0) { + vec->values[i] = g_strtod (strs->str[i], &end); + if (*end) { + vec->values[i] = go_nan; + continue; + } + if (minimum > vec->values[i]) + minimum = vec->values[i]; + if (maximum < vec->values[i]) + maximum = vec->values[i]; + } + vec->minimum = minimum; + vec->maximum = maximum; + vec->base.flags |= GO_DATA_CACHE_IS_VALID; } + static double go_data_vector_str_get_value (GODataVector *vec, unsigned i) { - return go_nan; + char *end; + GODataVectorStr *strs = (GODataVectorStr *)vec; + double d = g_strtod (strs->str[i], &end); + return (*end)? go_nan: d; } + static char * go_data_vector_str_get_str (GODataVector *vec, unsigned i) { @@ -447,8 +695,8 @@ go_data_vector_str_class_init (GObjectClass *gobject_klass) gobject_klass->finalize = go_data_vector_str_finalize; godata_klass->dup = go_data_vector_str_dup; godata_klass->eq = go_data_vector_str_eq; - godata_klass->as_str = NULL; - godata_klass->from_str = NULL; + godata_klass->as_str = go_data_vector_str_as_str; + godata_klass->from_str = go_data_vector_str_from_str; vector_klass->load_len = go_data_vector_str_load_len; vector_klass->load_values = go_data_vector_str_load_values; vector_klass->get_value = go_data_vector_str_get_value; @@ -461,6 +709,7 @@ go_data_vector_str_init (GObject *obj) GODataVectorStr *str = (GODataVectorStr *)obj; str->str = NULL; str->n = 0; + str->notify = NULL; str->translate_func = NULL; str->translate_data = NULL; str->translate_notify = NULL; @@ -471,11 +720,12 @@ GSF_CLASS (GODataVectorStr, go_data_vector_str, GO_DATA_VECTOR_TYPE) GOData * -go_data_vector_str_new (char const * const *str, unsigned n) +go_data_vector_str_new (char const * const *str, unsigned n, GDestroyNotify notify) { GODataVectorStr *res = g_object_new (GO_DATA_VECTOR_STR_TYPE, NULL); res->str = str; res->n = n; + res->notify = notify; return GO_DATA (res); } @@ -535,3 +785,222 @@ go_data_vector_str_set_translation_domain (GODataVectorStr *vec, go_data_vector_str_set_translate_func (vec, (GOTranslateFunc)dgettext_swapped, g_strdup (domain), g_free); } +/*****************************************************************************/ + +struct _GODataMatrixVal { + GODataMatrix base; + GODataMatrixSize size; + double *val; + GDestroyNotify notify; +}; + +typedef GODataMatrixClass GODataMatrixValClass; + +static GObjectClass *matrix_val_parent_klass; + +static void +go_data_matrix_val_finalize (GObject *obj) +{ + GODataMatrixVal *mat = (GODataMatrixVal *)obj; + if (mat->notify && mat->val) + (*mat->notify) (mat->val); + + (*matrix_val_parent_klass->finalize) (obj); +} + +static GOData * +go_data_matrix_val_dup (GOData const *src) +{ + GODataMatrixVal *dst = g_object_new (G_OBJECT_TYPE (src), NULL); + GODataMatrixVal const *src_val = (GODataMatrixVal const *)src; + if (src_val->notify) { + dst->val = g_new (double, src_val->size.rows * src_val->size.columns); + memcpy (dst->val, src_val->val, src_val->size.rows * src_val->size.columns * sizeof (double)); + dst->notify = g_free; + } else + dst->val = src_val->val; + dst->size = src_val->size; + return GO_DATA (dst); +} + +static gboolean +go_data_matrix_val_eq (GOData const *a, GOData const *b) +{ + GODataMatrixVal const *val_a = (GODataMatrixVal const *)a; + GODataMatrixVal const *val_b = (GODataMatrixVal const *)b; + + /* GOData::eq is used for identity, not arithmetic */ + return val_a->val == val_b->val && + val_a->size.rows == val_b->size.rows && + val_a->size.columns == val_b->size.columns; +} + +static void +go_data_matrix_val_load_size (GODataMatrix *mat) +{ + mat->base.flags |= GO_DATA_MATRIX_SIZE_CACHED; + mat->size = ((GODataMatrixVal *)mat)->size; +} + +static void +go_data_matrix_val_load_values (GODataMatrix *mat) +{ + GODataMatrixVal const *val = (GODataMatrixVal const *)mat; + double minimum = DBL_MAX, maximum = -DBL_MAX; + int i = val->size.rows * val->size.columns; + + mat->values = (double *)val->val; + + while (i-- > 0) { + if (minimum > val->val[i]) + minimum = val->val[i]; + if (maximum < val->val[i]) + maximum = val->val[i]; + } + mat->minimum = minimum; + mat->maximum = maximum; + mat->base.flags |= GO_DATA_CACHE_IS_VALID; +} + +static double +go_data_matrix_val_get_value (GODataMatrix *mat, unsigned i, unsigned j) +{ + return mat->values[i * mat->size.columns + j]; +} + +static char * +go_data_matrix_val_get_str (GODataMatrix *mat, unsigned i, unsigned j) +{ + return g_strdup_printf ("%g", mat->values[i * mat->size.columns + j]); +} + +static char * +go_data_matrix_val_as_str (GOData const *dat) +{ + GODataMatrixVal *mat = GO_DATA_MATRIX_VAL (dat); + GString *str; + char row_sep, col_sep, sz[G_ASCII_DTOSTR_BUF_SIZE]; + int i, j; + + if (mat->size.rows == 0 || mat->size.columns == 0) + return g_strdup (""); + + col_sep = format_get_col_sep (); + row_sep = format_get_row_sep (); + g_snprintf (sz, sizeof (sz), "%g", mat->val[0]); + str = g_string_new (sz); + for (j = 1; j < mat->size.columns; j++) { + g_string_append_c (str, col_sep); + g_snprintf (sz, sizeof (sz), "%g", mat->val[j]); + g_string_append (str, sz); + } + for (i = 1; i < mat->size.rows; i++) { + g_string_append_c (str, row_sep); + g_snprintf (sz, sizeof (sz), "%g", mat->val[i * mat->size.columns]); + g_string_append (str, sz); + for (j = 1; j < mat->size.columns; j++) { + g_string_append_c (str, col_sep); + g_snprintf (sz, sizeof (sz), "%g", mat->val[i * mat->size.columns + j]); + g_string_append (str, sz); + } + } + return g_string_free (str, FALSE); +} + +static gboolean +go_data_matrix_val_from_str (GOData *dat, char const *str) +{ + GODataMatrixVal *mat = GO_DATA_MATRIX_VAL (dat); + char row_sep, col_sep, *end = (char*) str; + int i, j, columns; + double val; + GArray *values; + + g_return_val_if_fail (str != NULL, TRUE); + + values = g_array_sized_new (FALSE, FALSE, sizeof(double), 16); + col_sep = format_get_col_sep (); + row_sep = format_get_row_sep (); + i = j = columns = 0; + if (mat->notify && mat->val) + (*mat->notify) (mat->val); + mat->val = NULL; + mat->size.rows = 0; + mat->size.columns = 0; + mat->notify = g_free; + while (1) { + val = g_strtod (end, &end); + g_array_append_val (values, val); + if (*end) { + if (*end == col_sep) + j++; + else if (*end == row_sep) { + if (columns > 0) { + if (j == columns - 1) { + i++; + j = 0; + } else { + g_array_free (values, TRUE); + return FALSE; + } + } else { + columns = j + 1; + i++; + j = 0; + } + } else { + g_array_free (values, TRUE); + return FALSE; + } + end++; + } else + break; + } + if (j != columns - 1) { + g_array_free (values, TRUE); + return FALSE; + } + if (columns == 0) { + g_array_free (values, TRUE); + return TRUE; + } + mat->size.columns = columns; + mat->size.rows = i + 1; + mat->val = (double*) values->data; + g_array_free (values, FALSE); + go_data_emit_changed (GO_DATA (mat)); + return TRUE; +} + +static void +go_data_matrix_val_class_init (GObjectClass *gobject_klass) +{ + GODataClass *godata_klass = (GODataClass *) gobject_klass; + GODataMatrixClass *matrix_klass = (GODataMatrixClass *) gobject_klass; + + matrix_val_parent_klass = g_type_class_peek_parent (gobject_klass); + gobject_klass->finalize = go_data_matrix_val_finalize; + godata_klass->dup = go_data_matrix_val_dup; + godata_klass->eq = go_data_matrix_val_eq; + godata_klass->as_str = go_data_matrix_val_as_str; + godata_klass->from_str = go_data_matrix_val_from_str; + matrix_klass->load_size = go_data_matrix_val_load_size; + matrix_klass->load_values = go_data_matrix_val_load_values; + matrix_klass->get_value = go_data_matrix_val_get_value; + matrix_klass->get_str = go_data_matrix_val_get_str; +} + +GSF_CLASS (GODataMatrixVal, go_data_matrix_val, + go_data_matrix_val_class_init, NULL, + GO_DATA_MATRIX_TYPE) + +GOData * +go_data_matrix_val_new (double *val, unsigned rows, unsigned columns, GDestroyNotify notify) +{ + GODataMatrixVal *res = g_object_new (GO_DATA_MATRIX_VAL_TYPE, NULL); + res->val = val; + res->size.rows = rows; + res->size.columns = columns; + res->notify = notify; + return GO_DATA (res); +} diff --git a/lib/goffice/graph/go-data-simple.h b/lib/goffice-0.0.4/goffice/data/go-data-simple.h similarity index 78% rename from lib/goffice/graph/go-data-simple.h rename to lib/goffice-0.0.4/goffice/data/go-data-simple.h index 694848a9cc..a6518a56f8 100644 --- a/lib/goffice/graph/go-data-simple.h +++ b/lib/goffice-0.0.4/goffice/data/go-data-simple.h @@ -15,14 +15,16 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DATA_SIMPLE_H #define GO_DATA_SIMPLE_H -#include -#include +#include +#include + +G_BEGIN_DECLS #define GO_DATA_SCALAR_VAL_TYPE (go_data_scalar_val_get_type ()) #define GO_DATA_SCALAR_VAL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_DATA_SCALAR_VAL_TYPE, GODataScalarVal)) @@ -48,7 +50,7 @@ void go_data_scalar_str_set_str (GODataScalarStr *str, typedef struct _GODataVectorVal GODataVectorVal; GType go_data_vector_val_get_type (void); -GOData *go_data_vector_val_new (double const *val, unsigned n); +GOData *go_data_vector_val_new (double *val, unsigned n, GDestroyNotify notify); #define GO_DATA_VECTOR_STR_TYPE (go_data_vector_str_get_type ()) #define GO_DATA_VECTOR_STR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_DATA_VECTOR_STR_TYPE, GODataVectorStr)) @@ -56,7 +58,7 @@ GOData *go_data_vector_val_new (double const *val, unsigned n); typedef struct _GODataVectorStr GODataVectorStr; GType go_data_vector_str_get_type (void); -GOData *go_data_vector_str_new (char const * const *str, unsigned n); +GOData *go_data_vector_str_new (char const * const *str, unsigned n, GDestroyNotify notify); void go_data_vector_str_set_translate_func (GODataVectorStr *vector, GOTranslateFunc func, gpointer data, @@ -64,4 +66,14 @@ void go_data_vector_str_set_translate_func (GODataVectorStr *vector, void go_data_vector_str_set_translation_domain (GODataVectorStr *vec, char const *domain); +#define GO_DATA_MATRIX_VAL_TYPE (go_data_matrix_val_get_type ()) +#define GO_DATA_MATRIX_VAL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_DATA_MATRIX_VAL_TYPE, GODataMatrixVal)) +#define IS_GO_DATA_MATRIX_VAL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_DATA_MATRIX_VAL_TYPE)) + +typedef struct _GODataMatrixVal GODataMatrixVal; +GType go_data_matrix_val_get_type (void); +GOData *go_data_matrix_val_new (double *val, unsigned rows, unsigned columns, GDestroyNotify notify); + +G_END_DECLS + #endif /* GO_DATA_SIMPLE_H */ diff --git a/lib/goffice/graph/go-data.c b/lib/goffice-0.0.4/goffice/data/go-data.c similarity index 96% rename from lib/goffice/graph/go-data.c rename to lib/goffice-0.0.4/goffice/data/go-data.c index 33dc492117..6578491427 100644 --- a/lib/goffice/graph/go-data.c +++ b/lib/goffice-0.0.4/goffice/data/go-data.c @@ -2,7 +2,7 @@ /* * go-data.c : * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2003-2005 Jody Goldberg (jody@gnome.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,13 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include -#include +#include "go-data.h" +#include "go-data-impl.h" #include #include @@ -352,12 +352,12 @@ GSF_CLASS_ABSTRACT (GODataMatrix, go_data_matrix, go_data_matrix_class_init, NULL, GO_DATA_TYPE) -GOMatrixSize +GODataMatrixSize go_data_matrix_get_size (GODataMatrix *mat) { if (! (mat->base.flags & GO_DATA_MATRIX_SIZE_CACHED)) { GODataMatrixClass const *klass = GO_DATA_MATRIX_GET_CLASS (mat); - static GOMatrixSize null_size = {0, 0}; + static GODataMatrixSize null_size = {0, 0}; g_return_val_if_fail (klass != NULL, null_size); @@ -388,13 +388,13 @@ go_data_matrix_get_values (GODataMatrix *mat) double go_data_matrix_get_value (GODataMatrix *mat, unsigned i, unsigned j) { + g_return_val_if_fail (((int)i < mat->size.rows) && ((int)j < mat->size.columns), go_nan); if (! (mat->base.flags & GO_DATA_CACHE_IS_VALID)) { GODataMatrixClass const *klass = GO_DATA_MATRIX_GET_CLASS (mat); g_return_val_if_fail (klass != NULL, go_nan); return (*klass->get_value) (mat, i, j); } - g_return_val_if_fail (((int)i < mat->size.rows) && ((int)j < mat->size.columns), go_nan); return mat->values[i * mat->size.columns + j]; } @@ -405,6 +405,7 @@ go_data_matrix_get_str (GODataMatrix *mat, unsigned i, unsigned j) char *res; g_return_val_if_fail (klass != NULL, NULL); + g_return_val_if_fail (((int)i < mat->size.rows) && ((int)j < mat->size.columns), g_strdup ("")); res = (*klass->get_str) (mat, i, j); if (res == NULL) diff --git a/lib/goffice/graph/go-data.h b/lib/goffice-0.0.4/goffice/data/go-data.h similarity index 94% rename from lib/goffice/graph/go-data.h rename to lib/goffice-0.0.4/goffice/data/go-data.h index 41bcb9fdf0..999eca9c4e 100644 --- a/lib/goffice/graph/go-data.h +++ b/lib/goffice-0.0.4/goffice/data/go-data.h @@ -15,13 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_DATA_H #define GO_DATA_H -#include +#include #include #include @@ -73,7 +73,7 @@ void go_data_vector_get_minmax (GODataVector *vec, double *min, double *max); GType go_data_matrix_get_type (void); -GOMatrixSize go_data_matrix_get_size (GODataMatrix *mat); +GODataMatrixSize go_data_matrix_get_size (GODataMatrix *mat); double *go_data_matrix_get_values (GODataMatrix *mat); double go_data_matrix_get_value (GODataMatrix *mat, unsigned i, unsigned j); char *go_data_matrix_get_str (GODataMatrix *mat, unsigned i, unsigned j); diff --git a/lib/goffice/app/goffice-app.h b/lib/goffice-0.0.4/goffice/data/goffice-data.h similarity index 55% rename from lib/goffice/app/goffice-app.h rename to lib/goffice-0.0.4/goffice/data/goffice-data.h index 873e9833df..b13ef0d8bb 100644 --- a/lib/goffice/app/goffice-app.h +++ b/lib/goffice-0.0.4/goffice/data/goffice-data.h @@ -1,8 +1,8 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * goffice-app.h: + * goffice-data.h: * - * Copyright (C) 2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2005 Jody Goldberg (jody@gnome.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,25 +15,27 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ -#ifndef GOFFICE_APP_H -#define GOFFICE_APP_H +#ifndef GOFFICE_DATA_H +#define GOFFICE_DATA_H -#include +#include G_BEGIN_DECLS -typedef struct _GOApp GOApp; -typedef struct _GODoc GODoc; -typedef struct _GODocControl GODocControl; -typedef struct _GOPlugin GOPlugin; -typedef struct _GOPluginService GOPluginService; -typedef struct _GOPluginLoader GOPluginLoader; -typedef struct _GOErrorInfo GOErrorInfo; +/* Data */ +typedef struct _GOData GOData; +typedef struct _GODataScalar GODataScalar; +typedef struct _GODataVector GODataVector; +typedef struct _GODataMatrix GODataMatrix; +typedef struct { + int rows; /* negative if dirty, includes missing values */ + int columns; /* negative if dirty, includes missing values */ +} GODataMatrixSize; G_END_DECLS -#endif /* GOFFICE_GRAPH_H */ +#endif /* GOFFICE_DATA_H */ diff --git a/lib/goffice/drawing/Makefile.am b/lib/goffice-0.0.4/goffice/drawing/Makefile.am similarity index 78% rename from lib/goffice/drawing/Makefile.am rename to lib/goffice-0.0.4/goffice/drawing/Makefile.am index ea5c5cd8e9..24170c25f0 100644 --- a/lib/goffice/drawing/Makefile.am +++ b/lib/goffice-0.0.4/goffice/drawing/Makefile.am @@ -1,31 +1,32 @@ noinst_LTLIBRARIES = libgoffice-drawing.la -AM_CFLAGS = $(GNOME_CFLAGS) $(GSF_CFLAGS) - libgoffice_drawing_la_SOURCES = \ god-anchor.c \ - god-anchor.h \ god-default-attributes.c \ - god-default-attributes.h \ god-drawing-group.c \ - god-drawing-group.h \ god-drawing-renderer-gdk.c \ - god-drawing-renderer-gdk.h \ god-drawing-view.c \ - god-drawing-view.h \ god-drawing.c \ - god-drawing.h \ god-image-store.c \ - god-image-store.h \ god-image.c \ - god-image.h \ god-paragraph-attributes.c \ - god-paragraph-attributes.h \ god-property-table.c \ - god-property-table.h \ god-shape.c \ + god-text-model.c + +libgoffice_drawing_ladir = $(goffice_include_dir)/drawing +libgoffice_drawing_la_HEADERS = \ + god-anchor.h \ + god-default-attributes.h \ + god-drawing-group.h \ + god-drawing-renderer-gdk.h \ + god-drawing-view.h \ + god-drawing.h \ + god-image-store.h \ + god-image.h \ + god-paragraph-attributes.h \ + god-property-table.h \ god-shape.h \ - god-text-model.c \ god-text-model.h -include $(srcdir)/../goffice.mk +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice/drawing/god-anchor.c b/lib/goffice-0.0.4/goffice/drawing/god-anchor.c similarity index 96% rename from lib/goffice/drawing/god-anchor.c rename to lib/goffice-0.0.4/goffice/drawing/god-anchor.c index 0aba5d5e6f..61efa373a1 100644 --- a/lib/goffice/drawing/god-anchor.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-anchor.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-anchor.h" +#include #include #include diff --git a/lib/goffice/drawing/god-anchor.h b/lib/goffice-0.0.4/goffice/drawing/god-anchor.h similarity index 97% rename from lib/goffice/drawing/god-anchor.h rename to lib/goffice-0.0.4/goffice/drawing/god-anchor.h index 9f51824f09..71d6a2c927 100644 --- a/lib/goffice/drawing/god-anchor.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-anchor.h @@ -15,7 +15,7 @@ #include #include -#include +#include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-default-attributes.c b/lib/goffice-0.0.4/goffice/drawing/god-default-attributes.c similarity index 98% rename from lib/goffice/drawing/god-default-attributes.c rename to lib/goffice-0.0.4/goffice/drawing/god-default-attributes.c index 903988f15c..a9905d4362 100644 --- a/lib/goffice/drawing/god-default-attributes.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-default-attributes.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-default-attributes.h" +#include #include diff --git a/lib/goffice/drawing/god-default-attributes.h b/lib/goffice-0.0.4/goffice/drawing/god-default-attributes.h similarity index 98% rename from lib/goffice/drawing/god-default-attributes.h rename to lib/goffice-0.0.4/goffice/drawing/god-default-attributes.h index 5df1bcbe60..ffc228d31c 100644 --- a/lib/goffice/drawing/god-default-attributes.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-default-attributes.h @@ -14,7 +14,7 @@ #include #include -#include +#include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-drawing-group.c b/lib/goffice-0.0.4/goffice/drawing/god-drawing-group.c similarity index 95% rename from lib/goffice/drawing/god-drawing-group.c rename to lib/goffice-0.0.4/goffice/drawing/god-drawing-group.c index 008b1ec3fd..73713aa2c4 100644 --- a/lib/goffice/drawing/god-drawing-group.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing-group.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-drawing-group.h" +#include #include #include diff --git a/lib/goffice/drawing/god-drawing-group.h b/lib/goffice-0.0.4/goffice/drawing/god-drawing-group.h similarity index 97% rename from lib/goffice/drawing/god-drawing-group.h rename to lib/goffice-0.0.4/goffice/drawing/god-drawing-group.h index 7a95486d32..b902cf329b 100644 --- a/lib/goffice/drawing/god-drawing-group.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing-group.h @@ -15,7 +15,7 @@ #include #include -#include +#include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-drawing-renderer-gdk.c b/lib/goffice-0.0.4/goffice/drawing/god-drawing-renderer-gdk.c similarity index 95% rename from lib/goffice/drawing/god-drawing-renderer-gdk.c rename to lib/goffice-0.0.4/goffice/drawing/god-drawing-renderer-gdk.c index 30f3a873a4..e5d7540927 100644 --- a/lib/goffice/drawing/god-drawing-renderer-gdk.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing-renderer-gdk.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-drawing-renderer-gdk.h" +#include #include #include #include @@ -178,20 +178,25 @@ typedef struct { const GodDefaultAttributes *default_attributes; } DrawTextContext; -#ifdef PANGO_HACK static gboolean make_absolute (PangoAttribute *attr, gpointer user_data) { DrawTextContext *draw_context = user_data; +#if HAVE_PANGO18 if (attr->klass->type == PANGO_ATTR_SIZE && ! ((PangoAttrSize *) attr)->absolute) { PangoAttrSize *size_attr = (PangoAttrSize *) attr; size_attr->size = GO_PT_TO_UN ((long long) size_attr->size) / draw_context->renderer->priv->y_units_per_pixel; size_attr->absolute = TRUE; } +#else + if (attr->klass->type == PANGO_ATTR_SIZE) { + PangoAttrInt *size_attr = (PangoAttrInt *) attr; + size_attr->value = GO_PT_TO_UN ((long long) size_attr->value) / draw_context->renderer->priv->y_units_per_pixel; + } +#endif // HAVE_PANGO18 return FALSE; } -#endif static void draw_text (GodTextModel *text, @@ -210,8 +215,9 @@ draw_text (GodTextModel *text, const GodParagraphAttributes *default_para_attributes; gunichar bullet_character = 0; double bullet_indent = 0; - double bullet_size = 1.0; + double bullet_size = 0; char *bullet_family = NULL; + gboolean bullet_on = FALSE; PangoFontDescription *bullet_desc; PangoAttrIterator *attr_iterator; @@ -227,6 +233,7 @@ draw_text (GodTextModel *text, "bullet_indent", &bullet_indent, "bullet_size", &bullet_size, "bullet_family", &bullet_family, + "bullet_on", &bullet_on, NULL); } } @@ -270,6 +277,11 @@ draw_text (GodTextModel *text, "bullet_family", &bullet_family, NULL); } + if (flags & GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_ON) { + g_object_get (paragraph->para_attributes, + "bullet_on", &bullet_on, + NULL); + } } draw_context->y_ofs += space_before; @@ -302,9 +314,7 @@ draw_text (GodTextModel *text, pango_attr_list_insert_before (attributes, attr); } } -#ifdef PANGO_HACK pango_attr_list_filter (attributes, make_absolute, draw_context); -#endif pango_layout_set_attributes (layout, attributes); attr_iterator = pango_attr_list_get_iterator (attributes); bullet_desc = pango_font_description_new (); @@ -325,7 +335,8 @@ draw_text (GodTextModel *text, if (bullet_character != 0 && bullet_character != 0xe011 && bullet_size != 0 && - bullet_family != NULL) { + bullet_family != NULL && + bullet_on) { char utf8[7]; int length; layout = pango_layout_new (gdk_pango_context_get_for_screen (gdk_screen_get_default())); @@ -333,6 +344,11 @@ draw_text (GodTextModel *text, length = g_unichar_to_utf8 (bullet_character, utf8); pango_layout_set_text (layout, utf8, length); pango_layout_set_auto_dir (layout, FALSE); +#if 0 + pango_font_description_set_absolute_size (bullet_desc, + GO_PT_TO_UN ((go_unit_t) bullet_size * PANGO_SCALE) / + draw_context->renderer->priv->y_units_per_pixel); +#endif pango_font_description_set_size (bullet_desc, pango_font_description_get_size (bullet_desc) * sqrt (bullet_size)); pango_font_description_set_family (bullet_desc, bullet_family); pango_layout_set_font_description (layout, bullet_desc); @@ -349,14 +365,6 @@ draw_text (GodTextModel *text, draw_context->y_ofs += height * draw_context->renderer->priv->y_units_per_pixel / PANGO_SCALE; draw_context->y_ofs += space_after; - -#if 0 - g_print ("space before: %f\n", space_before); - g_print ("space after: %f\n", space_after); - g_print ("indent: %f\n", indent); - g_print ("x_units: %" GO_UNIT_T_FORMAT "\n", draw_context->renderer->priv->x_units_per_pixel); - g_print ("y_units: %" GO_UNIT_T_FORMAT "\n", draw_context->renderer->priv->y_units_per_pixel); -#endif } static void diff --git a/lib/goffice/drawing/god-drawing-renderer-gdk.h b/lib/goffice-0.0.4/goffice/drawing/god-drawing-renderer-gdk.h similarity index 97% rename from lib/goffice/drawing/god-drawing-renderer-gdk.h rename to lib/goffice-0.0.4/goffice/drawing/god-drawing-renderer-gdk.h index 83afda9c4c..e6c96fe516 100644 --- a/lib/goffice/drawing/god-drawing-renderer-gdk.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing-renderer-gdk.h @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include #include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-drawing-view.c b/lib/goffice-0.0.4/goffice/drawing/god-drawing-view.c similarity index 95% rename from lib/goffice/drawing/god-drawing-view.c rename to lib/goffice-0.0.4/goffice/drawing/god-drawing-view.c index 3b7c85fb14..91f81fd302 100644 --- a/lib/goffice/drawing/god-drawing-view.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing-view.c @@ -19,14 +19,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-drawing-view.h" +#include #include -#include +#include static GObjectClass *parent_class; diff --git a/lib/goffice/drawing/god-drawing-view.h b/lib/goffice-0.0.4/goffice/drawing/god-drawing-view.h similarity index 95% rename from lib/goffice/drawing/god-drawing-view.h rename to lib/goffice-0.0.4/goffice/drawing/god-drawing-view.h index 3e9ad3776c..36c08cc989 100644 --- a/lib/goffice/drawing/god-drawing-view.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing-view.h @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include #include #include diff --git a/lib/goffice/drawing/god-drawing.c b/lib/goffice-0.0.4/goffice/drawing/god-drawing.c similarity index 97% rename from lib/goffice/drawing/god-drawing.c rename to lib/goffice-0.0.4/goffice/drawing/god-drawing.c index 8f4ab6f480..8a36fbcc99 100644 --- a/lib/goffice/drawing/god-drawing.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-drawing.h" +#include #include static GObjectClass *parent_class; diff --git a/lib/goffice/drawing/god-drawing.h b/lib/goffice-0.0.4/goffice/drawing/god-drawing.h similarity index 95% rename from lib/goffice/drawing/god-drawing.h rename to lib/goffice-0.0.4/goffice/drawing/god-drawing.h index 5f1eed2dfa..6be8d05a8f 100644 --- a/lib/goffice/drawing/god-drawing.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-drawing.h @@ -14,8 +14,8 @@ #include #include -#include -#include +#include +#include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-image-store.c b/lib/goffice-0.0.4/goffice/drawing/god-image-store.c similarity index 97% rename from lib/goffice/drawing/god-image-store.c rename to lib/goffice-0.0.4/goffice/drawing/god-image-store.c index 3f002fcf44..cac6df97b8 100644 --- a/lib/goffice/drawing/god-image-store.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-image-store.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-image-store.h" +#include #include #include diff --git a/lib/goffice/drawing/god-image-store.h b/lib/goffice-0.0.4/goffice/drawing/god-image-store.h similarity index 98% rename from lib/goffice/drawing/god-image-store.h rename to lib/goffice-0.0.4/goffice/drawing/god-image-store.h index ab8e576282..70b7f23e93 100644 --- a/lib/goffice/drawing/god-image-store.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-image-store.h @@ -14,7 +14,7 @@ #include #include -#include +#include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-image.c b/lib/goffice-0.0.4/goffice/drawing/god-image.c similarity index 96% rename from lib/goffice/drawing/god-image.c rename to lib/goffice-0.0.4/goffice/drawing/god-image.c index 20a647b62c..270ef45575 100644 --- a/lib/goffice/drawing/god-image.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-image.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-image.h" +#include #include #include diff --git a/lib/goffice/drawing/god-image.h b/lib/goffice-0.0.4/goffice/drawing/god-image.h similarity index 91% rename from lib/goffice/drawing/god-image.h rename to lib/goffice-0.0.4/goffice/drawing/god-image.h index d9c641b1cf..0ff204bf3a 100644 --- a/lib/goffice/drawing/god-image.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-image.h @@ -14,9 +14,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-paragraph-attributes.c b/lib/goffice-0.0.4/goffice/drawing/god-paragraph-attributes.c similarity index 92% rename from lib/goffice/drawing/god-paragraph-attributes.c rename to lib/goffice-0.0.4/goffice/drawing/god-paragraph-attributes.c index f194f5dc48..6b48092490 100644 --- a/lib/goffice/drawing/god-paragraph-attributes.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-paragraph-attributes.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-paragraph-attributes.h" +#include #include #include @@ -41,6 +41,7 @@ struct GodParagraphAttributesPrivate_ { double bullet_indent; double bullet_size; char *bullet_family; + gboolean bullet_on; }; enum { @@ -54,6 +55,7 @@ enum { PROP_BULLET_INDENT, PROP_BULLET_SIZE, PROP_BULLET_FAMILY, + PROP_BULLET_ON, }; GodParagraphAttributes * @@ -79,6 +81,7 @@ god_paragraph_attributes_init (GObject *object) paragraph->priv->bullet_indent = 0; paragraph->priv->bullet_size = 1.0; paragraph->priv->bullet_family = NULL; + paragraph->priv->bullet_on = FALSE; paragraph->priv->flags = 0; } @@ -133,6 +136,10 @@ god_paragraph_attributes_set_property (GObject *object, guint prop_id, const GVa paragraph->priv->bullet_family = g_value_dup_string (value); paragraph->priv->flags |= GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_FAMILY; break; + case PROP_BULLET_ON: + paragraph->priv->bullet_on = g_value_get_boolean (value); + paragraph->priv->flags |= GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_ON; + break; } } @@ -169,6 +176,9 @@ god_paragraph_attributes_get_property (GObject *object, guint prop_id, GValue *v case PROP_BULLET_FAMILY: g_value_set_string (value, paragraph->priv->bullet_family); break; + case PROP_BULLET_ON: + g_value_set_boolean (value, paragraph->priv->bullet_on); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -242,6 +252,12 @@ god_paragraph_attributes_class_init (GodParagraphAttributesClass *class) _( "Bullet Family" ), NULL, G_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_BULLET_ON, + g_param_spec_boolean ("bullet_on", + _( "Bullet On" ), + _( "Bullet On" ), + FALSE, + G_PARAM_READWRITE)); } GSF_CLASS (GodParagraphAttributes, god_paragraph_attributes, diff --git a/lib/goffice/drawing/god-paragraph-attributes.h b/lib/goffice-0.0.4/goffice/drawing/god-paragraph-attributes.h similarity index 80% rename from lib/goffice/drawing/god-paragraph-attributes.h rename to lib/goffice-0.0.4/goffice/drawing/god-paragraph-attributes.h index 72a6f878de..2cb87ff1ab 100644 --- a/lib/goffice/drawing/god-paragraph-attributes.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-paragraph-attributes.h @@ -36,15 +36,16 @@ typedef struct { } GodParagraphAttributesClass; typedef enum { - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_INDENT = 1 << 0, - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_SPACE_BEFORE = 1 << 1, - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_SPACE_AFTER = 1 << 2, - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_ALIGNMENT = 1 << 3, - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_CHARACTER = 1 << 4, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_INDENT = 1 << 0, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_SPACE_BEFORE = 1 << 1, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_SPACE_AFTER = 1 << 2, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_ALIGNMENT = 1 << 3, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_CHARACTER = 1 << 4, GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_INDENT = 1 << 5, - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_SIZE = 1 << 6, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_SIZE = 1 << 6, GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_FAMILY = 1 << 7, - GOD_PARAGRAPH_ATTRIBUTES_FLAGS_ALL = ((1 << 8) - 1), + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_BULLET_ON = 1 << 8, + GOD_PARAGRAPH_ATTRIBUTES_FLAGS_ALL = ((1 << 9) - 1), } GodParagraphAttributesFlags; typedef enum { diff --git a/lib/goffice/drawing/god-property-table.c b/lib/goffice-0.0.4/goffice/drawing/god-property-table.c similarity index 99% rename from lib/goffice/drawing/god-property-table.c rename to lib/goffice-0.0.4/goffice/drawing/god-property-table.c index 8272d2cf93..26f133d325 100644 --- a/lib/goffice/drawing/god-property-table.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-property-table.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-property-table.h" +#include #include #include diff --git a/lib/goffice/drawing/god-property-table.h b/lib/goffice-0.0.4/goffice/drawing/god-property-table.h similarity index 68% rename from lib/goffice/drawing/god-property-table.h rename to lib/goffice-0.0.4/goffice/drawing/god-property-table.h index 69016ae8f6..10d61f2513 100644 --- a/lib/goffice/drawing/god-property-table.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-property-table.h @@ -15,7 +15,7 @@ #include #include -#include +#include #include G_BEGIN_DECLS @@ -38,60 +38,60 @@ typedef struct { } GodPropertyTableClass; /* Flags */ -#define GOD_PROPERTY_FLIP_H "flip_h" -#define GOD_PROPERTY_FLIP_V "flip_v" +#define GOD_PROPERTY_FLIP_H "flip-h" +#define GOD_PROPERTY_FLIP_V "flip-v" #define GOD_PROPERTY_FILLED "filled" #define GOD_PROPERTY_BACKGROUND "background" /* will be enums when we support multiple "arrow shapes */ -#define GOD_PROPERTY_ARROW_START "arrow_start" -#define GOD_PROPERTY_ARROW_END "arrow_end" +#define GOD_PROPERTY_ARROW_START "arrow-start" +#define GOD_PROPERTY_ARROW_END "arrow-end" /* Integers & Enums */ -#define GOD_PROPERTY_BLIP_ID "blip_id" -#define GOD_PROPERTY_FONT_COLOR "font_color" -#define GOD_PROPERTY_FILL_TYPE "fill_type" -#define GOD_PROPERTY_FILL_SHADE_TYPE "fill_shade_type" -#define GOD_PROPERTY_FILL_ANGLE "fill_angle" -#define GOD_PROPERTY_FILL_FOCUS "fill_focus" -#define GOD_PROPERTY_FILL_COLOR "fill_color" -#define GOD_PROPERTY_FILL_ALPHA "fill_alpha" -#define GOD_PROPERTY_FILL_PRESET "fill_preset" -#define GOD_PROPERTY_FILL_BACKGROUND "fill_background" -#define GOD_PROPERTY_FILL_BACKGROUND_ALPHA "fill_background_alpha" -#define GOD_PROPERTY_OUTLINE_COLOR "outline_color" -#define GOD_PROPERTY_OUTLINE_WIDTH "outline_width" -#define GOD_PROPERTY_OUTLINE_STYLE "outline_style" -#define GOD_PROPERTY_SCROLLBAR_VALUE "scrollbar_value" -#define GOD_PROPERTY_SCROLLBAR_MIN "scrollbar_min" -#define GOD_PROPERTY_SCROLLBAR_MAX "scrollbar_max" -#define GOD_PROPERTY_SCROLLBAR_INC "scrollbar_inc" -#define GOD_PROPERTY_SCROLLBAR_PAGE "scrollbar_page" -#define GOD_PROPERTY_BLIP_CROP_TOP "blip_crop_top" -#define GOD_PROPERTY_BLIP_CROP_BOTTOM "blip_crop_bottom" -#define GOD_PROPERTY_BLIP_CROP_LEFT "blip_crop_left" -#define GOD_PROPERTY_BLIP_CROP_RIGHT "blip_crop_right" +#define GOD_PROPERTY_BLIP_ID "blip-id" +#define GOD_PROPERTY_FONT_COLOR "font-color" +#define GOD_PROPERTY_FILL_TYPE "fill-type" +#define GOD_PROPERTY_FILL_SHADE_TYPE "fill-shade_type" +#define GOD_PROPERTY_FILL_ANGLE "fill-angle" +#define GOD_PROPERTY_FILL_FOCUS "fill-focus" +#define GOD_PROPERTY_FILL_COLOR "fill-color" +#define GOD_PROPERTY_FILL_ALPHA "fill-alpha" +#define GOD_PROPERTY_FILL_PRESET "fill-preset" +#define GOD_PROPERTY_FILL_BACKGROUND "fill-background" +#define GOD_PROPERTY_FILL_BACKGROUND_ALPHA "fill-background-alpha" +#define GOD_PROPERTY_OUTLINE_COLOR "outline-color" +#define GOD_PROPERTY_OUTLINE_WIDTH "outline-width" +#define GOD_PROPERTY_OUTLINE_STYLE "outline-style" +#define GOD_PROPERTY_SCROLLBAR_VALUE "scrollbar-value" +#define GOD_PROPERTY_SCROLLBAR_MIN "scrollbar-min" +#define GOD_PROPERTY_SCROLLBAR_MAX "scrollbar-max" +#define GOD_PROPERTY_SCROLLBAR_INC "scrollbar-inc" +#define GOD_PROPERTY_SCROLLBAR_PAGE "scrollbar-page" +#define GOD_PROPERTY_BLIP_CROP_TOP "blip-crop-top" +#define GOD_PROPERTY_BLIP_CROP_BOTTOM "blip-crop-bottom" +#define GOD_PROPERTY_BLIP_CROP_LEFT "blip-crop-left" +#define GOD_PROPERTY_BLIP_CROP_RIGHT "blip-crop-right" #define GOD_PROPERTY_LTXID "ltxid" -#define GOD_PROPERTY_DX_TEXT_LEFT "dx_text_left" -#define GOD_PROPERTY_DX_TEXT_TOP "dx_text_top" -#define GOD_PROPERTY_DX_TEXT_RIGHT "dx_text_right" -#define GOD_PROPERTY_DX_TEXT_BOTTOM "dx_text_bottom" -#define GOD_PROPERTY_FILL_RECT_LEFT "fill_rect_left" -#define GOD_PROPERTY_FILL_RECT_TOP "fill_rect_top" -#define GOD_PROPERTY_FILL_RECT_RIGHT "fill_rect_right" -#define GOD_PROPERTY_FILL_RECT_BOTTOM "fill_rect_bottom" +#define GOD_PROPERTY_DX_TEXT_LEFT "dx-text-left" +#define GOD_PROPERTY_DX_TEXT_TOP "dx-text-top" +#define GOD_PROPERTY_DX_TEXT_RIGHT "dx-text-right" +#define GOD_PROPERTY_DX_TEXT_BOTTOM "dx-text-bottom" +#define GOD_PROPERTY_FILL_RECT_LEFT "fill-rect-left" +#define GOD_PROPERTY_FILL_RECT_TOP "fill-rect-top" +#define GOD_PROPERTY_FILL_RECT_RIGHT "fill-rect-right" +#define GOD_PROPERTY_FILL_RECT_BOTTOM "fill-rect-bottom" /* Ptrs */ #define GOD_PROPERTY_ANCHOR "anchor" #define GOD_PROPERTY_TEXT "text" /* GArrays */ -#define GOD_PROPERTY_POLYGON_COORDS "polygon_coords" +#define GOD_PROPERTY_POLYGON_COORDS "polygon-coords" /* Expressions */ -#define GOD_PROPERTY_CHECKBOX_LINK "checkbox_link" -#define GOD_PROPERTY_SCROLLBAR_LINK "scrollbar_link" +#define GOD_PROPERTY_CHECKBOX_LINK "checkbox-link" +#define GOD_PROPERTY_SCROLLBAR_LINK "scrollbar-link" /* PangoAttrList */ #define GOD_PROPERTY_MARKUP "markup" diff --git a/lib/goffice/drawing/god-shape.c b/lib/goffice-0.0.4/goffice/drawing/god-shape.c similarity index 98% rename from lib/goffice/drawing/god-shape.c rename to lib/goffice-0.0.4/goffice/drawing/god-shape.c index fe3ae2935d..f3d40b0003 100644 --- a/lib/goffice/drawing/god-shape.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-shape.c @@ -19,12 +19,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-shape.h" +#include #include #include diff --git a/lib/goffice/drawing/god-shape.h b/lib/goffice-0.0.4/goffice/drawing/god-shape.h similarity index 95% rename from lib/goffice/drawing/god-shape.h rename to lib/goffice-0.0.4/goffice/drawing/god-shape.h index 271f7b88df..b7acd3b9a9 100644 --- a/lib/goffice/drawing/god-shape.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-shape.h @@ -14,9 +14,9 @@ #include #include -#include -#include -#include +#include +#include +#include G_BEGIN_DECLS diff --git a/lib/goffice/drawing/god-text-model.c b/lib/goffice-0.0.4/goffice/drawing/god-text-model.c similarity index 98% rename from lib/goffice/drawing/god-text-model.c rename to lib/goffice-0.0.4/goffice/drawing/god-text-model.c index c1fa5372bc..555f12e06c 100644 --- a/lib/goffice/drawing/god-text-model.c +++ b/lib/goffice-0.0.4/goffice/drawing/god-text-model.c @@ -19,13 +19,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include "drawing/god-text-model.h" -#include +#include +#include #include #include diff --git a/lib/goffice/drawing/god-text-model.h b/lib/goffice-0.0.4/goffice/drawing/god-text-model.h similarity index 97% rename from lib/goffice/drawing/god-text-model.h rename to lib/goffice-0.0.4/goffice/drawing/god-text-model.h index 2ef320bc2f..d9a183e208 100644 --- a/lib/goffice/drawing/god-text-model.h +++ b/lib/goffice-0.0.4/goffice/drawing/god-text-model.h @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include #include G_BEGIN_DECLS diff --git a/lib/goffice-0.0.4/goffice/glib24_26-compat.c b/lib/goffice-0.0.4/goffice/glib24_26-compat.c new file mode 100644 index 0000000000..edac66d49d --- /dev/null +++ b/lib/goffice-0.0.4/goffice/glib24_26-compat.c @@ -0,0 +1,359 @@ +#include + +#include + +static const guint16 days_in_year[2][14] = +{ /* 0, jan feb mar apr may jun jul aug sep oct nov dec */ + { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, + { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } +}; + +/* "Julian days" just means an absolute number of days, where Day 1 == + * Jan 1, Year 1 + */ +static void +g_date_update_julian (const GDate *const_d) +{ + GDate *d = (GDate *) const_d; + GDateYear year; + gint index; + + g_return_if_fail (d != NULL); + g_return_if_fail (d->dmy); + g_return_if_fail (!d->julian); + g_return_if_fail (g_date_valid_dmy (d->day, d->month, d->year)); + + /* What we actually do is: multiply years * 365 days in the year, + * add the number of years divided by 4, subtract the number of + * years divided by 100 and add the number of years divided by 400, + * which accounts for leap year stuff. Code from Steffen Beyer's + * DateCalc. + */ + + year = d->year - 1; /* we know d->year > 0 since it's valid */ + + d->julian_days = year * 365U; + d->julian_days += (year >>= 2); /* divide by 4 and add */ + d->julian_days -= (year /= 25); /* divides original # years by 100 */ + d->julian_days += year >> 2; /* divides by 4, which divides original by 400 */ + + index = g_date_is_leap_year (d->year) ? 1 : 0; + + d->julian_days += days_in_year[index][d->month] + d->day; + + g_return_if_fail (g_date_valid_julian (d->julian_days)); + + d->julian = TRUE; +} + +/** + * g_date_get_iso8601_week_of_year: + * @date: a valid #GDate + * + * Returns the week of the year, where weeks are interpreted according + * to ISO 8601. + * + * Returns: ISO 8601 week number of the year. + * + * Since: 2.6 + **/ +guint +g_date_get_iso8601_week_of_year (const GDate *d) +{ + guint j, d4, L, d1, w; + + g_return_val_if_fail (g_date_valid (d), 0); + + if (!d->julian) + g_date_update_julian (d); + g_return_val_if_fail (d->julian, 0); + + /* Formula taken from the Calendar FAQ; the formula was for the + * Julian Period which starts on 1 January 4713 BC, so we add + * 1,721,425 to the number of days before doing the formula. + */ + j = d->julian_days + 1721425; + d4 = (j + 31741 - (j % 7)) % 146097 % 36524 % 1461; + L = d4 / 1460; + d1 = ((d4 - L) % 365) + L; + w = d1 / 7 + 1; + + return w; +} + +/** ------------------------------------------------------------ **/ + +/* The following is (partly) taken from the gettext package. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. */ + +static const gchar * +guess_category_value (const gchar *category_name) +{ + const gchar *retval; + + /* The highest priority value is the `LANGUAGE' environment + variable. This is a GNU extension. */ + retval = g_getenv ("LANGUAGE"); + if ((retval != NULL) && (retval[0] != '\0')) + return retval; + + /* `LANGUAGE' is not set. So we have to proceed with the POSIX + methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some + systems this can be done by the `setlocale' function itself. */ + + /* Setting of LC_ALL overwrites all other. */ + retval = g_getenv ("LC_ALL"); + if ((retval != NULL) && (retval[0] != '\0')) + return retval; + + /* Next comes the name of the desired category. */ + retval = g_getenv (category_name); + if ((retval != NULL) && (retval[0] != '\0')) + return retval; + + /* Last possibility is the LANG environment variable. */ + retval = g_getenv ("LANG"); + if ((retval != NULL) && (retval[0] != '\0')) + return retval; + +#ifdef G_PLATFORM_WIN32 + /* g_win32_getlocale() first checks for LC_ALL, LC_MESSAGES and + * LANG, which we already did above. Oh well. The main point of + * calling g_win32_getlocale() is to get the thread's locale as used + * by Windows and the Microsoft C runtime (in the "English_United + * States" format) translated into the Unixish format. + */ + retval = g_win32_getlocale (); + if ((retval != NULL) && (retval[0] != '\0')) + return retval; +#endif + + return NULL; +} + +typedef struct _GLanguageNamesCache GLanguageNamesCache; + +struct _GLanguageNamesCache { + gchar *languages; + gchar **language_names; +}; + +static void +language_names_cache_free (gpointer data) +{ + GLanguageNamesCache *cache = data; + g_free (cache->languages); + g_strfreev (cache->language_names); + g_free (cache); +} + +static char * +unalias_lang (char *lang) +{ + return lang; +} + +/* Mask for components of locale spec. The ordering here is from + * least significant to most significant + */ +enum +{ + COMPONENT_CODESET = 1 << 0, + COMPONENT_TERRITORY = 1 << 1, + COMPONENT_MODIFIER = 1 << 2 +}; + +/* Break an X/Open style locale specification into components + */ +static guint +explode_locale (const gchar *locale, + gchar **language, + gchar **territory, + gchar **codeset, + gchar **modifier) +{ + const gchar *uscore_pos; + const gchar *at_pos; + const gchar *dot_pos; + + guint mask = 0; + + uscore_pos = strchr (locale, '_'); + dot_pos = strchr (uscore_pos ? uscore_pos : locale, '.'); + at_pos = strchr (dot_pos ? dot_pos : (uscore_pos ? uscore_pos : locale), '@'); + + if (at_pos) + { + mask |= COMPONENT_MODIFIER; + *modifier = g_strdup (at_pos); + } + else + at_pos = locale + strlen (locale); + + if (dot_pos) + { + mask |= COMPONENT_CODESET; + *codeset = g_strndup (dot_pos, at_pos - dot_pos); + } + else + dot_pos = at_pos; + + if (uscore_pos) + { + mask |= COMPONENT_TERRITORY; + *territory = g_strndup (uscore_pos, dot_pos - uscore_pos); + } + else + uscore_pos = dot_pos; + + *language = g_strndup (locale, uscore_pos - locale); + + return mask; +} + +/* + * Compute all interesting variants for a given locale name - + * by stripping off different components of the value. + * + * For simplicity, we assume that the locale is in + * X/Open format: language[_territory][.codeset][@modifier] + * + * TODO: Extend this to handle the CEN format (see the GNUlibc docs) + * as well. We could just copy the code from glibc wholesale + * but it is big, ugly, and complicated, so I'm reluctant + * to do so when this should handle 99% of the time... + */ +GSList * +_g_compute_locale_variants (const gchar *locale) +{ + GSList *retval = NULL; + + gchar *language; + gchar *territory; + gchar *codeset; + gchar *modifier; + + guint mask; + guint i; + + g_return_val_if_fail (locale != NULL, NULL); + + mask = explode_locale (locale, &language, &territory, &codeset, &modifier); + + /* Iterate through all possible combinations, from least attractive + * to most attractive. + */ + for (i = 0; i <= mask; i++) + if ((i & ~mask) == 0) + { + gchar *val = g_strconcat (language, + (i & COMPONENT_TERRITORY) ? territory : "", + (i & COMPONENT_CODESET) ? codeset : "", + (i & COMPONENT_MODIFIER) ? modifier : "", + NULL); + retval = g_slist_prepend (retval, val); + } + + g_free (language); + if (mask & COMPONENT_CODESET) + g_free (codeset); + if (mask & COMPONENT_TERRITORY) + g_free (territory); + if (mask & COMPONENT_MODIFIER) + g_free (modifier); + + return retval; +} + +/** + * g_get_language_names: + * + * Computes a list of applicable locale names, which can be used to + * e.g. construct locale-dependent filenames or search paths. The returned + * list is sorted from most desirable to least desirable and always contains + * the default locale "C". + * + * For example, if LANGUAGE=de:en_US, then the returned list is + * "de", "en_US", "en", "C". + * + * This function consults the environment variables LANGUAGE, + * LC_ALL, LC_MESSAGES and LANG + * to find the list of locales specified by the user. + * + * Return value: a %NULL-terminated array of strings owned by GLib + * that must not be modified or freed. + * + * Since: 2.6 + **/ +G_CONST_RETURN gchar * G_CONST_RETURN * +g_get_language_names (void) +{ + static GStaticPrivate cache_private = G_STATIC_PRIVATE_INIT; + GLanguageNamesCache *cache = g_static_private_get (&cache_private); + const gchar *value; + + if (!cache) + { + cache = g_new0 (GLanguageNamesCache, 1); + g_static_private_set (&cache_private, cache, language_names_cache_free); + } + + value = guess_category_value ("LC_MESSAGES"); + if (!value) + value = "C"; + + if (!(cache->languages && strcmp (cache->languages, value) == 0)) + { + gchar **languages; + gchar **alist, **a; + GSList *list, *l; + gint i; + + g_free (cache->languages); + g_strfreev (cache->language_names); + cache->languages = g_strdup (value); + + alist = g_strsplit (value, ":", 0); + list = NULL; + for (a = alist; *a; a++) + { + gchar *b = unalias_lang (*a); + list = g_slist_concat (list, _g_compute_locale_variants (b)); + } + g_strfreev (alist); + list = g_slist_append (list, g_strdup ("C")); + + cache->language_names = languages = g_new (gchar *, g_slist_length (list) + 1); + for (l = list, i = 0; l; l = l->next, i++) + languages[i] = l->data; + languages[i] = NULL; + + g_slist_free (list); + } + + return (G_CONST_RETURN gchar * G_CONST_RETURN *) cache->language_names; +} + +/** + * g_strv_length: + * @str_array: a %NULL-terminated array of strings. + * + * Returns the length of the given %NULL-terminated + * string array @str_array. + * + * Return value: length of @str_array. + * + * Since: 2.6 + **/ +guint +g_strv_length (gchar **str_array) +{ + guint i = 0; + + g_return_val_if_fail (str_array != NULL, 0); + + while (str_array[i]) + ++i; + + return i; +} diff --git a/lib/goffice-0.0.4/goffice/glib24_26-compat.h b/lib/goffice-0.0.4/goffice/glib24_26-compat.h new file mode 100644 index 0000000000..9703fe9fcb --- /dev/null +++ b/lib/goffice-0.0.4/goffice/glib24_26-compat.h @@ -0,0 +1,39 @@ +#ifndef GLIB24_26_COMPAT_H +#define GLIB24_26_COMPAT_H + +#include + +/* from glib-2.6[.6] gdate.h */ +guint g_date_get_iso8601_week_of_year (const GDate *date); + +/* from glib-2.6[.6] gutils.h */ +G_CONST_RETURN gchar* G_CONST_RETURN * g_get_language_names (void); + +#ifdef G_OS_WIN32 + +/* On Win32, the canonical directory separator is the backslash, and + * the search path separator is the semicolon. Note that also the + * (forward) slash works as directory separator. + */ +#define G_DIR_SEPARATOR '\\' +#define G_DIR_SEPARATOR_S "\\" +#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/') +#define G_SEARCHPATH_SEPARATOR ';' +#define G_SEARCHPATH_SEPARATOR_S ";" + +#else /* !G_OS_WIN32 */ + +/* Unix */ + +#define G_DIR_SEPARATOR '/' +#define G_DIR_SEPARATOR_S "/" +#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR) +#define G_SEARCHPATH_SEPARATOR ':' +#define G_SEARCHPATH_SEPARATOR_S ":" + +#endif /* !G_OS_WIN32 */ + +/* from glib-2.6[.6] gstrfuncs.h */ +guint g_strv_length (gchar **str_array); + +#endif // GLIB24_26_COMPAT_H diff --git a/lib/goffice/utils/go-locale.h b/lib/goffice-0.0.4/goffice/goffice-priv.h similarity index 68% rename from lib/goffice/utils/go-locale.h rename to lib/goffice-0.0.4/goffice/goffice-priv.h index e9e8a6b252..13aa743f9e 100644 --- a/lib/goffice/utils/go-locale.h +++ b/lib/goffice-0.0.4/goffice/goffice-priv.h @@ -1,8 +1,8 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * go-locale.h : + * goffice-priv.h : * - * Copyright (C) 2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2005 Jody Goldberg (jody@gnome.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,18 +15,20 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ -#ifndef GO_LOCALE_H -#define GO_LOCALE_H +#ifndef GOFFICE_PRIV_H +#define GOFFICE_PRIV_H #include G_BEGIN_DECLS -GList const *go_locale_languages (void); +gchar const *go_sys_data_dir (void); +gchar const *go_sys_icon_dir (void); +gchar const *go_sys_lib_dir (void); G_END_DECLS -#endif /* GO_LOCALE_H */ +#endif /* GOFFICE_PRIV_H */ diff --git a/lib/goffice/goffice.c b/lib/goffice-0.0.4/goffice/goffice.c similarity index 54% rename from lib/goffice/goffice.c rename to lib/goffice-0.0.4/goffice/goffice.c index 3e80eb545c..3d304fdb1b 100644 --- a/lib/goffice/goffice.c +++ b/lib/goffice-0.0.4/goffice/goffice.c @@ -15,15 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include -#include "plugin-service.h" -#include "command-context.h" -#include "command-context-stderr.h" +#include #include #include #include @@ -36,29 +34,73 @@ #include #include #include -#include +#include +#include +#include #include #include +#include #include -#include "gnumeric-gconf.h" -#include "str.h" -#include "mstyle.h" -int goffice_graph_debug_level = 1; +#include "goffice-paths.h" + +#include + +int goffice_graph_debug_level = 0; + +static char const *libgoffice_data_dir = GOFFICE_DATADIR; +static char const *libgoffice_icon_dir = GOFFICE_ICONDIR; +static char const *libgoffice_locale_dir = GOFFICE_LOCALEDIR; +static char const *libgoffice_lib_dir = GOFFICE_LIBDIR; + +gchar const * +go_sys_data_dir () +{ + return libgoffice_data_dir; +} + +gchar const * +go_sys_icon_dir () +{ + return libgoffice_icon_dir; +} + +gchar const * +go_sys_lib_dir () +{ + return libgoffice_lib_dir; +} void libgoffice_init (void) { - GnmCmdContext *ctx; + static gboolean initialized = FALSE; - plugin_services_init(); + if (initialized) + return; - // effective: +libgoffice_init... - go_font_init (); +#ifdef G_OS_WIN32 +{ + gchar *dir = g_win32_get_package_installation_directory (NULL, "libgoffice-1-0.dll"); + libgoffice_data_dir = g_build_filename (dir, + "share", "goffice", GOFFICE_VERSION, NULL); + libgoffice_icon_dir = g_build_filename (dir, + "share", "pixmaps", "goffice", NULL); + libgoffice_locale_dir = g_build_filename (dir, + "share", "locale", NULL); + libgoffice_lib_dir = g_build_filename (dir, + "lib", "goffice", GOFFICE_VERSION, NULL); + g_free (dir); +} +#endif + + bindtextdomain ("libgoffice", libgoffice_locale_dir); + go_fonts_init (); go_math_init (); gsf_init (); /* keep trigger happy linkers from leaving things out */ + plugin_services_init (); gog_plugin_services_init (); (void) GOG_GRAPH_TYPE; (void) GOG_CHART_TYPE; @@ -67,27 +109,30 @@ libgoffice_init (void) (void) GOG_SERIES_ELEMENT_TYPE; (void) GOG_LEGEND_TYPE; (void) GOG_AXIS_TYPE; + (void) GOG_AXIS_LINE_TYPE; (void) GOG_LABEL_TYPE; (void) GOG_GRID_TYPE; (void) GOG_GRID_LINE_TYPE; (void) GOG_ERROR_BAR_TYPE; + (void) GOG_REG_EQN_TYPE; + (void) GOG_SERIES_LINES_TYPE; (void) GO_DATA_SCALAR_VAL_TYPE; (void) GO_DATA_SCALAR_STR_TYPE; gog_themes_init (); - // -libgoffice_init - - gnm_string_init(); - mstyle_init(); - gnm_conf_init( FALSE ); - - ctx = cmd_context_stderr_new(); - plugins_init( ctx ); + number_format_init (); } void libgoffice_shutdown (void) { gog_themes_shutdown (); - go_font_shutdown (); + go_fonts_shutdown (); gog_plugin_services_shutdown (); + number_format_shutdown (); +#ifdef G_OS_WIN32 + g_free (libgoffice_data_dir); + g_free (libgoffice_icon_dir); + g_free (libgoffice_locale_dir); + g_free (libgoffice_lib_dir); +#endif } diff --git a/lib/goffice/goffice.h b/lib/goffice-0.0.4/goffice/goffice.h similarity index 85% rename from lib/goffice/goffice.h rename to lib/goffice-0.0.4/goffice/goffice.h index debd27897b..7ea321a466 100644 --- a/lib/goffice/goffice.h +++ b/lib/goffice-0.0.4/goffice/goffice.h @@ -1,8 +1,8 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * lib.h : + * goffice.h : * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2003-2005 Jody Goldberg (jody@gnome.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOFFICE_H diff --git a/lib/goffice/graph/Makefile.am b/lib/goffice-0.0.4/goffice/graph/Makefile.am similarity index 58% rename from lib/goffice/graph/Makefile.am rename to lib/goffice-0.0.4/goffice/graph/Makefile.am index 5cbef9db2f..9f64e20176 100644 --- a/lib/goffice/graph/Makefile.am +++ b/lib/goffice-0.0.4/goffice/graph/Makefile.am @@ -1,93 +1,95 @@ -SUBDIRS = plugins - -# SUBDIRS += tests -## Don't put comment on an assignment line! It can trigger an automake bug. - noinst_LTLIBRARIES = libgoffice-graph.la -AM_CFLAGS = ${GLIB_CFLAGS} ${GSF_CFLAGS} ${ART_CFLAGS} ${GLADE_CFLAGS} ${GNOME_CFLAGS} ${PRINT_CFLAGS} - libgoffice_graph_la_SOURCES = \ - goffice-graph.h \ gog-object.c \ - gog-object.h \ gog-object-xml.c \ - gog-object-xml.h \ gog-styled-object.c \ - gog-styled-object.h \ gog-outlined-object.c \ - gog-outlined-object.h \ gog-view.c \ - gog-view.h \ \ gog-graph.c \ - gog-graph.h \ - gog-graph-impl.h \ gog-chart.c \ - gog-chart.h \ - gog-chart-impl.h \ \ gog-axis.c \ - gog-axis.h \ + gog-axis-line.c \ gog-legend.c \ - gog-legend.h \ gog-label.c \ - gog-label.h \ gog-grid.c \ - gog-grid.h \ gog-grid-line.c \ - gog-grid-line.h \ \ gog-style.c \ - gog-style.h \ gog-theme.c \ - gog-theme.h \ \ gog-plot.c \ + gog-plot-engine.c \ + gog-series.c \ + gog-error-bar.c \ + gog-reg-curve.c \ + gog-series-lines.c \ + gog-data-allocator.c \ + gog-data-set.c \ + \ + gog-guru.c \ + gog-renderer.c \ + gog-renderer-pixbuf.c \ + gog-control-foocanvas.c \ + gog-renderer-gnome-print.c \ + gog-renderer-svg.c + +libgoffice_graph_ladir = $(goffice_include_dir)/graph +libgoffice_graph_la_HEADERS = \ + goffice-graph.h \ + gog-object.h \ + gog-object-xml.h \ + gog-styled-object.h \ + gog-outlined-object.h \ + gog-view.h \ + gog-graph.h \ + gog-graph-impl.h \ + gog-chart.h \ + gog-chart-impl.h \ + gog-axis.h \ + gog-axis-line.h \ + gog-axis-line-impl.h \ + gog-legend.h \ + gog-label.h \ + gog-grid.h \ + gog-grid-line.h \ + gog-style.h \ + gog-theme.h \ gog-plot.h \ gog-plot-impl.h \ gog-plot-engine.h \ - gog-plot-engine.c \ - gog-series.c \ gog-series.h \ gog-series-impl.h \ - gog-error-bar.c \ gog-error-bar.h \ - gog-data-allocator.c \ + gog-reg-curve.h \ + gog-series-lines.h \ gog-data-allocator.h \ - gog-data-set.c \ gog-data-set.h \ - \ - go-data.c \ - go-data.h \ - go-data-impl.h \ - go-data-simple.c \ - go-data-simple.h \ - \ - gog-renderer.c \ + gog-guru.h \ gog-renderer.h \ gog-renderer-impl.h \ - gog-renderer-pixbuf.c \ gog-renderer-pixbuf.h \ - gog-renderer-gnome-print.c \ + gog-control-foocanvas.h \ gog-renderer-gnome-print.h \ - gog-renderer-svg.c \ gog-renderer-svg.h -# -# gog-guru.c \ -# gog-guru.h \ -# gog-control-foocanvas.c \ -# gog-control-foocanvas.h \ -# +if WITH_CAIRO + libgoffice_graph_la_SOURCES += gog-renderer-cairo.c + libgoffice_graph_la_HEADERS += gog-renderer-cairo.h +endif -#graph_glade_DATA = \ -# gog-guru.glade \ -# gog-guru-type-selector.glade \ -# gog-style-prefs.glade \ -# gog-axis-prefs.glade \ -# gog-error-bar-prefs.glade +gladedir = $(goffice_datadir)/glade +dist_glade_DATA = \ + gog-guru.glade \ + gog-guru-type-selector.glade \ + gog-object-prefs.glade \ + gog-chart-prefs.glade \ + gog-style-prefs.glade \ + gog-axis-prefs.glade \ + gog-error-bar-prefs.glade \ + gog-reg-curve-prefs.glade \ + gog-reg-eqn-prefs.glade -# EXTRA_DIST = $(graph_glade_DATA) - -include $(srcdir)/../goffice.mk +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice/graph/README b/lib/goffice-0.0.4/goffice/graph/README similarity index 100% rename from lib/goffice/graph/README rename to lib/goffice-0.0.4/goffice/graph/README diff --git a/lib/goffice/graph/goffice-graph.h b/lib/goffice-0.0.4/goffice/graph/goffice-graph.h similarity index 79% rename from lib/goffice/graph/goffice-graph.h rename to lib/goffice-0.0.4/goffice/graph/goffice-graph.h index 6270d505ee..d275dc0a86 100644 --- a/lib/goffice/graph/goffice-graph.h +++ b/lib/goffice-0.0.4/goffice/graph/goffice-graph.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -45,9 +45,13 @@ typedef struct _GogLegend GogLegend; typedef struct _GogLabel GogLabel; typedef struct _GogStyledObject GogStyledObject; typedef struct _GogAxis GogAxis; +typedef struct _GogAxisLine GogAxisLine; typedef struct _GogGrid GogGrid; typedef struct _GogGridLine GogGridLine; typedef struct _GogErrorBar GogErrorBar; +typedef struct _GogRegCurve GogRegCurve; +typedef struct _GogRegEqn GogRegEqn; +typedef struct _GogRegCurveType GogRegCurveType; /* formating */ typedef struct _GogTheme GogTheme; @@ -57,15 +61,8 @@ typedef GSList GogSeriesElementStyleList; /* Data */ typedef struct _GogDataAllocator GogDataAllocator; typedef struct _GogDataset GogDataset; -typedef struct _GOData GOData; -typedef struct _GODataScalar GODataScalar; -typedef struct _GODataVector GODataVector; -typedef struct { - int rows; /* negative if dirty, includes missing values */ - int columns; /* negative if dirty, includes missing values */ -} GOMatrixSize; -typedef struct _GODataMatrix GODataMatrix; +/* Rendering */ typedef struct _GogRenderer GogRenderer; typedef struct { @@ -92,12 +89,13 @@ typedef enum { GOG_AXIS_Z, GOG_AXIS_CIRCULAR, GOG_AXIS_RADIAL, - GOG_AXIS_TYPES, - GOG_AXIS_PSEUDO_3D + GOG_AXIS_PSEUDO_3D, + GOG_AXIS_TYPES } GogAxisType; typedef enum { GOG_AXIS_SET_UNKNOWN = -1, GOG_AXIS_SET_NONE = 0, + GOG_AXIS_SET_X = (1 << GOG_AXIS_X), GOG_AXIS_SET_XY = (1 << GOG_AXIS_X) | (1 << GOG_AXIS_Y), GOG_AXIS_SET_XY_pseudo_3d = (1 << GOG_AXIS_X) | (1 << GOG_AXIS_Y) | (1 << GOG_AXIS_PSEUDO_3D), GOG_AXIS_SET_XYZ = (1 << GOG_AXIS_X) | (1 << GOG_AXIS_Y) | (1 << GOG_AXIS_Z), @@ -128,11 +126,15 @@ typedef enum { GOG_MS_DIM_VALUES = 1, GOG_MS_DIM_CATEGORIES = 2, GOG_MS_DIM_BUBBLES = 3, /* undocumented */ + GOG_MS_DIM_TYPES, GOG_MS_DIM_ERR_plus1, /* we made it up */ GOG_MS_DIM_ERR_minus1, /* we made it up */ GOG_MS_DIM_ERR_plus2, /* we made it up */ GOG_MS_DIM_ERR_minus2, /* we made it up */ - GOG_MS_DIM_TYPES + GOG_MS_DIM_START, /* we made it up for dropbars*/ + GOG_MS_DIM_END, /* we made it up for dropbars */ + GOG_MS_DIM_LOW, /* we made it up for hi-lo*/ + GOG_MS_DIM_HIGH, /* we made it up for hi-lo */ } GogMSDimType; typedef enum { @@ -157,9 +159,27 @@ typedef enum { GOG_POSITION_MANUAL_Y_ABS = 1 << 9, GOG_POSITION_MANUAL_X_END = 1 << 10, /* pos relative to start or end */ GOG_POSITION_MANUAL_Y_END = 1 << 11, - GOG_POSITION_ANY_MANUAL = 0xf80 + + /* modifiers for manual */ + GOG_POSITION_ANCHOR_NW = 0 << 12, + GOG_POSITION_ANCHOR_N = 1 << 12, + GOG_POSITION_ANCHOR_NE = 2 << 12, + GOG_POSITION_ANCHOR_E = 3 << 12, + GOG_POSITION_ANCHOR_SE = 4 << 12, + GOG_POSITION_ANCHOR_S = 5 << 12, + GOG_POSITION_ANCHOR_SW = 6 << 12, + GOG_POSITION_ANCHOR_W = 7 << 12, + GOG_POSITION_ANCHOR_CENTER = 8 << 12, + GOG_POSITION_ANCHOR = 0xf000, + + GOG_POSITION_ANY_MANUAL = 0xff80, + + GOG_POSITION_PADDING = 1 << 16 } GogObjectPosition; +#define GOG_POSITION_IS_SPECIAL(pos) (((pos) & GOG_POSITION_SPECIAL)&&(!((pos) & GOG_POSITION_MANUAL))) +#define GOG_POSITION_IS_PADDING(pos) (((pos) & GOG_POSITION_PADDING)&&(!((pos) & GOG_POSITION_MANUAL))) + /* #define NO_DEBUG_CHARTS */ #ifndef NO_DEBUG_CHARTS #define gog_debug(level, code) do { if (goffice_graph_debug_level > level) { code } } while (0) diff --git a/lib/goffice-0.0.4/goffice/graph/gog-axis-line-impl.h b/lib/goffice-0.0.4/goffice/graph/gog-axis-line-impl.h new file mode 100644 index 0000000000..b6e5c79705 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-axis-line-impl.h @@ -0,0 +1,75 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-axis-line-impl.h : + * + * Copyright (C) 2005 Emmanuel Pacaud (emmanuel.pacaud@univ-poitiers.fr) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_AXIS_LINE_IMPL_H +#define GOG_AXIS_LINE_IMPL_H + +#include +#include +#include +#include +#include + +G_BEGIN_DECLS + +typedef struct { + GogStyledObject base; + + GogChart *chart; + GogAxis *axis; + + GogAxisPosition position; + unsigned crossed_axis_id; + GogDatasetElement cross_location; + + struct { + gboolean tick_in, tick_out; + int size_pts; + } major, minor; + gboolean major_tick_labeled; +} GogAxisBase; + +typedef GogStyledObjectClass GogAxisBaseClass; + +#define GOG_AXIS_BASE_TYPE (gog_axis_base_get_type ()) +#define GOG_AXIS_BASE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_AXIS_BASE_TYPE, GogAxisBase)) +#define IS_GOG_AXIS_BASE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_AXIS_BASE_TYPE)) + +GType gog_axis_base_get_type (void); + +GogAxisPosition gog_axis_base_get_position (GogAxisBase *axis_base); +void gog_axis_base_set_position (GogAxisBase *axis_base, GogAxisPosition position); + +void gog_axis_base_set_label_angle (GogAxisBase *axis_base, double angle); + +typedef GogView GogAxisBaseView; +typedef GogViewClass GogAxisBaseViewClass; + +#define GOG_AXIS_BASE_VIEW_TYPE (gog_axis_base_view_get_type ()) +#define GOG_AXIS_BASE_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_AXIS_BASE_VIEW_TYPE, GogAxisBaseView)) +#define IS_GOG_AXIS_BASE_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_AXIS_BASE_VIEW_TYPE)) + +GType gog_axis_base_view_get_type (void); + +G_END_DECLS + +#endif /*GOG_AXIS_LINE_IMPL_H*/ + diff --git a/lib/goffice-0.0.4/goffice/graph/gog-axis-line.c b/lib/goffice-0.0.4/goffice/graph/gog-axis-line.c new file mode 100644 index 0000000000..a9b558e522 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-axis-line.c @@ -0,0 +1,1552 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-axis-line.c : + * + * Copyright (C) 2005 Emmanuel Pacaud (emmanuel.pacaud@univ-poitiers.fr) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +static GogViewClass *gab_view_parent_klass; +static GObjectClass *gab_parent_klass; + +enum { + AXIS_BASE_PROP_0, + AXIS_BASE_PROP_POSITION, + AXIS_BASE_PROP_MAJOR_TICK_LABELED, + AXIS_BASE_PROP_MAJOR_TICK_IN, + AXIS_BASE_PROP_MAJOR_TICK_OUT, + AXIS_BASE_PROP_MAJOR_TICK_SIZE_PTS, + AXIS_BASE_PROP_MINOR_TICK_IN, + AXIS_BASE_PROP_MINOR_TICK_OUT, + AXIS_BASE_PROP_MINOR_TICK_SIZE_PTS, + AXIS_BASE_PROP_CROSS_AXIS_ID, + AXIS_BASE_PROP_CROSS_LOCATION +}; + +static double gog_axis_base_get_cross_location (GogAxisBase *axis_base); + +static void +gog_axis_base_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + gboolean resized = FALSE; + char const *str; + GogAxisBase *axis_base = GOG_AXIS_BASE (obj); + int itmp; + unsigned position; + + switch (param_id) { + case AXIS_BASE_PROP_POSITION: + str = g_value_get_string (value); + if (str == NULL) + return; + else if (!g_ascii_strcasecmp (str, "low")) + position = GOG_AXIS_AT_LOW; + else if (!g_ascii_strcasecmp (str, "cross")) + position = GOG_AXIS_CROSS; + else if (!g_ascii_strcasecmp (str, "high")) + position = GOG_AXIS_AT_HIGH; + else + return; + resized = (position != axis_base->position); + axis_base->position = position; + break; + case AXIS_BASE_PROP_CROSS_AXIS_ID: + axis_base->crossed_axis_id = g_value_get_uint (value); + break; + + case AXIS_BASE_PROP_MAJOR_TICK_LABELED: + itmp = g_value_get_boolean (value); + if (axis_base->major_tick_labeled != itmp) { + axis_base->major_tick_labeled = itmp; + resized = TRUE; + } + break; + case AXIS_BASE_PROP_MAJOR_TICK_IN : + axis_base->major.tick_in = g_value_get_boolean (value); + break; + case AXIS_BASE_PROP_MAJOR_TICK_OUT : + itmp = g_value_get_boolean (value); + if (axis_base->major.tick_out != itmp) { + axis_base->major.tick_out = itmp; + resized = axis_base->major.size_pts > 0; + } + break; + case AXIS_BASE_PROP_MAJOR_TICK_SIZE_PTS: + itmp = g_value_get_int (value); + if (axis_base->major.size_pts != itmp) { + axis_base->major.size_pts = itmp; + resized = axis_base->major.tick_out; + } + break; + + case AXIS_BASE_PROP_MINOR_TICK_IN : + axis_base->minor.tick_in = g_value_get_boolean (value); + break; + case AXIS_BASE_PROP_MINOR_TICK_OUT : + itmp = g_value_get_boolean (value); + if (axis_base->minor.tick_out != itmp) { + axis_base->minor.tick_out = itmp; + resized = axis_base->minor.size_pts > 0; + } + break; + case AXIS_BASE_PROP_MINOR_TICK_SIZE_PTS: + itmp = g_value_get_int (value); + if (axis_base->minor.size_pts != itmp) { + axis_base->minor.size_pts = itmp; + resized = axis_base->minor.tick_out; + } + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } + + gog_object_emit_changed (GOG_OBJECT (obj), resized); +} + +static void +gog_axis_base_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (obj); + + switch (param_id) { + case AXIS_BASE_PROP_POSITION: + switch (axis_base->position) { + case GOG_AXIS_AT_LOW: + g_value_set_static_string (value, "low"); + break; + case GOG_AXIS_CROSS: + g_value_set_static_string (value, "cross"); + break; + case GOG_AXIS_AT_HIGH: + g_value_set_static_string (value, "high"); + break; + default: + g_warning ("[GogAxisBase::set_property] invalid axis position"); + break; + } + break; + case AXIS_BASE_PROP_CROSS_AXIS_ID: + g_value_set_uint (value, axis_base->crossed_axis_id); + break; + + case AXIS_BASE_PROP_MAJOR_TICK_LABELED: + g_value_set_boolean (value, axis_base->major_tick_labeled); + break; + case AXIS_BASE_PROP_MAJOR_TICK_IN: + g_value_set_boolean (value, axis_base->major.tick_in); + break; + case AXIS_BASE_PROP_MAJOR_TICK_OUT: + g_value_set_boolean (value, axis_base->major.tick_out); + break; + case AXIS_BASE_PROP_MAJOR_TICK_SIZE_PTS: + g_value_set_int (value, axis_base->major.size_pts); + break; + + case AXIS_BASE_PROP_MINOR_TICK_IN: + g_value_set_boolean (value, axis_base->minor.tick_in); + break; + case AXIS_BASE_PROP_MINOR_TICK_OUT: + g_value_set_boolean (value, axis_base->minor.tick_out); + break; + case AXIS_BASE_PROP_MINOR_TICK_SIZE_PTS: + g_value_set_int (value, axis_base->minor.size_pts); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static void +gog_axis_base_parent_changed (GogObject *child, gboolean was_set) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (child); + + if (was_set) { + if (IS_GOG_AXIS (child)) + axis_base->axis = GOG_AXIS (child); + else + axis_base->axis = GOG_AXIS (child->parent); + axis_base->chart = GOG_CHART (GOG_OBJECT (axis_base->axis)->parent); + + } else { + axis_base->axis = NULL; + axis_base->chart = NULL; + } + (GOG_OBJECT_CLASS (gab_parent_klass)->parent_changed) (child, was_set); +} + +static void +gog_axis_base_finalize (GObject *obj) +{ + gog_dataset_finalize (GOG_DATASET (obj)); + (gab_parent_klass->finalize) (obj); +} + +static GogAxisType +gog_axis_base_get_crossed_axis_type (GogAxisBase *axis_base) +{ + GogAxisType axis_type, crossed_type; + GogAxisSet axis_set; + + axis_type = gog_axis_get_atype (axis_base->axis); + axis_set = gog_chart_get_axis_set (axis_base->chart); + + crossed_type = GOG_AXIS_UNKNOWN; + switch (axis_set) { + case GOG_AXIS_SET_XY: + case GOG_AXIS_SET_XY_pseudo_3d: + if (axis_type == GOG_AXIS_X) + crossed_type = GOG_AXIS_Y; + else + crossed_type = GOG_AXIS_X; + break; + case GOG_AXIS_SET_RADAR: + if (axis_type == GOG_AXIS_RADIAL) + crossed_type = GOG_AXIS_CIRCULAR; + else + crossed_type = GOG_AXIS_RADIAL; + break; + case GOG_AXIS_SET_X: + case GOG_AXIS_SET_UNKNOWN: + break; + case GOG_AXIS_SET_XYZ: + case GOG_AXIS_SET_ALL: + case GOG_AXIS_SET_NONE: + g_message ("[GogAxisBase::get_crossed_axis_type] unimplemented for this axis set (%i)", + axis_set); + break; + } + return crossed_type; +} + +static GogAxis * +gog_axis_base_get_crossed_axis (GogAxisBase *axis_base) +{ + GogAxis *crossed_axis = NULL; + GSList *axes, *ptr; + gboolean found = FALSE; + + axes = gog_chart_get_axes (axis_base->chart, + gog_axis_base_get_crossed_axis_type (axis_base)); + g_return_val_if_fail (axes != NULL, NULL); + + for (ptr = axes; ptr != NULL && !found; ptr = ptr->next) { + crossed_axis = GOG_AXIS (ptr->data); + if (gog_object_get_id (GOG_OBJECT (crossed_axis)) == axis_base->crossed_axis_id) + found = TRUE; + } + + if (!found) + crossed_axis = GOG_AXIS (axes->data); + + g_slist_free (axes); + return crossed_axis; +} + +void +gog_axis_base_set_position (GogAxisBase *axis_base, GogAxisPosition position) +{ + GogAxis *axis; + GogChart *chart; + GSList *lines, *axes = NULL, *lptr, *aptr; + gboolean can_at_low = TRUE, can_at_high = TRUE; + + g_return_if_fail (GOG_AXIS_BASE (axis_base) != NULL); + + if (position == GOG_AXIS_AUTO) { + if (IS_GOG_AXIS (axis_base)) + axis = GOG_AXIS (axis_base); + else + axis = GOG_AXIS (gog_object_get_parent (GOG_OBJECT (axis_base))); + + chart = GOG_CHART (gog_object_get_parent (GOG_OBJECT (axis))); + if (chart != NULL) + axes = gog_chart_get_axes (chart, gog_axis_get_atype (axis)); + else + axes = g_slist_prepend (axes, axis); + + for (aptr = axes; aptr != NULL; aptr = aptr->next) { + lines = gog_object_get_children (GOG_OBJECT (aptr->data), NULL); + lines = g_slist_prepend (lines, aptr->data); + for (lptr = lines; lptr != NULL; lptr = lptr->next) { + if (lptr->data == axis_base || !IS_GOG_AXIS_BASE (lptr->data)) + continue; + position = gog_axis_base_get_position (GOG_AXIS_BASE (lptr->data)); + if (position == GOG_AXIS_AT_HIGH ) + can_at_high = FALSE; + else if (position == GOG_AXIS_AT_LOW) + can_at_low = FALSE; + } + g_slist_free (lines); + } + g_slist_free (axes); + + if (can_at_low) + position = GOG_AXIS_AT_LOW; + else if (can_at_high) + position = GOG_AXIS_AT_HIGH; + else + position = GOG_AXIS_CROSS; + } + + axis_base->position = position; +} + +typedef struct { + GogAxisBase *axis_base; + GladeXML *gui; +} AxisBasePrefs; + +static void +axis_base_pref_free (AxisBasePrefs *state) +{ + g_object_unref (state->gui); + g_free (state); +} + +static void +cb_cross_location_changed (GtkWidget *editor, AxisBasePrefs *state) +{ + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON (glade_xml_get_widget (state->gui, "axis_cross")), + TRUE); +} + +static void +cb_cross_axis_changed (GtkComboBox *combo, AxisBasePrefs *state) +{ + GtkTreeIter iter; + GValue value; + GtkTreeModel *model = gtk_combo_box_get_model (combo); + + gtk_combo_box_get_active_iter (combo, &iter); + gtk_tree_model_get_value (model, &iter, 1, &value); + state->axis_base->crossed_axis_id = g_value_get_uint (&value); + + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON (glade_xml_get_widget (state->gui, "axis_cross")), + TRUE); +} + +static void +cb_position_toggled (GtkWidget *button, GogAxisBase *axis_base) +{ + GogAxisPosition position; + char const *widget_name = gtk_widget_get_name (button); + GSList *lines, *axes, *aptr, *lptr; + + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) + return; + + if (g_ascii_strcasecmp ("axis_high", widget_name) == 0) + position = GOG_AXIS_AT_HIGH; + else if (g_ascii_strcasecmp ("axis_cross", widget_name) == 0) + position = GOG_AXIS_CROSS; + else + position = GOG_AXIS_AT_LOW; + + if (position != GOG_AXIS_CROSS) { + axes = gog_chart_get_axes (axis_base->chart, gog_axis_get_atype (axis_base->axis)); + for (aptr = axes; aptr != NULL; aptr = aptr->next) { + lines = gog_object_get_children (GOG_OBJECT (aptr->data), NULL); + lines = g_slist_prepend (lines, aptr->data); + for (lptr = lines; lptr != NULL; lptr = lptr->next) { + if (lptr->data == axis_base || !IS_GOG_AXIS_BASE (lptr->data)) + continue; + if (position == gog_axis_base_get_position (GOG_AXIS_BASE (lptr->data))) { + gog_axis_base_set_position (GOG_AXIS_BASE (lptr->data), + gog_axis_base_get_position (axis_base)); + break; + } + } + g_slist_free (lines); + } + g_slist_free (axes); + } + gog_axis_base_set_position (axis_base, position); + gog_object_emit_changed (GOG_OBJECT (axis_base), TRUE); +} + +static void +cb_tick_toggle_changed (GtkToggleButton *toggle_button, GObject *axis_base) +{ + g_object_set (axis_base, + gtk_widget_get_name (GTK_WIDGET (toggle_button)), + gtk_toggle_button_get_active (toggle_button), + NULL); +} + +static void +gog_axis_base_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + static char const *toggle_props[] = { + "major-tick-labeled", + "major-tick-out", + "major-tick-in", + "minor-tick-out", + "minor-tick-in" + }; + GogAxis *crossed_axis; + GogAxisBase *axis_base; + GladeXML *gui; + GtkListStore *store; + GtkTreeIter iter; + GtkWidget *combo, *data_editor, *container, *w; + GtkCellRenderer *cell; + GSList *axes, *ptr; + AxisBasePrefs *state; + GogAxisType crossed_axis_type; + static guint axis_base_pref_page = 0; + unsigned axis_count; + unsigned crossed_axis_id; + unsigned i; + + axis_base = GOG_AXIS_BASE (gobj); + g_return_if_fail (GOG_AXIS_BASE (axis_base) != NULL); + + gog_editor_set_store_page (editor, &axis_base_pref_page); + + if (gog_axis_get_atype (axis_base->axis) == GOG_AXIS_PSEUDO_3D) { + (GOG_OBJECT_CLASS(gab_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); + return; + } + + gui = go_libglade_new ("gog-axis-prefs.glade", "axis_base_pref_box", NULL, cc); + if (gui == NULL) { + (GOG_OBJECT_CLASS(gab_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); + return; + } + + crossed_axis_type = gog_axis_base_get_crossed_axis_type (axis_base); + if (crossed_axis_type != GOG_AXIS_UNKNOWN) { + store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_UINT); + combo = glade_xml_get_widget (gui, "cross_axis_combo"); + gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store)); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, + "text", 0, + NULL); + + axes = gog_chart_get_axes (axis_base->chart, crossed_axis_type); + axis_count = 0; + for (ptr = axes; ptr != NULL; ptr = ptr->next) { + crossed_axis = GOG_AXIS (ptr->data); + crossed_axis_id = gog_object_get_id (GOG_OBJECT (crossed_axis)); + gtk_list_store_prepend (store, &iter); + gtk_list_store_set (store, &iter, + 0, gog_object_get_name (GOG_OBJECT (crossed_axis)), + 1, crossed_axis_id, + -1); + if (axis_base->crossed_axis_id == crossed_axis_id || axis_count == 0) + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &iter); + axis_count++; + } + if (axis_count < 2) + gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE); + g_slist_free (axes); + + data_editor = gog_data_allocator_editor (dalloc, GOG_DATASET (axis_base), + GOG_AXIS_ELEM_CROSS_POINT, GOG_DATA_SCALAR); + container = glade_xml_get_widget (gui, "cross_location_alignment"); + gtk_container_add (GTK_CONTAINER (container), data_editor); + gtk_widget_show_all (container); + + state = g_new (AxisBasePrefs, 1); + state->axis_base = axis_base; + state->gui = gui; + g_signal_connect (G_OBJECT (combo), "changed", + G_CALLBACK (cb_cross_axis_changed), state); + g_signal_connect (G_OBJECT (data_editor), "changed", + G_CALLBACK (cb_cross_location_changed), state); + g_object_set_data_full (G_OBJECT (combo), + "state", state, (GDestroyNotify) axis_base_pref_free); + + w = glade_xml_get_widget (gui, "axis_low"); + if (axis_base->position == GOG_AXIS_AT_LOW) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); + g_signal_connect (G_OBJECT (w), "toggled", + G_CALLBACK (cb_position_toggled), axis_base); + w = glade_xml_get_widget (gui, "axis_cross"); + if (axis_base->position == GOG_AXIS_CROSS) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); + g_signal_connect (G_OBJECT (w), "toggled", + G_CALLBACK (cb_position_toggled), axis_base); + w = glade_xml_get_widget (gui, "axis_high"); + if (axis_base->position == GOG_AXIS_AT_HIGH) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); + g_signal_connect (G_OBJECT (w), "toggled", + G_CALLBACK (cb_position_toggled), axis_base); + } + else { + w = glade_xml_get_widget (gui, "position_box"); + gtk_widget_hide (w); + } + + for (i = 0; i < G_N_ELEMENTS (toggle_props) ; i++) { + gboolean cur_val; + + w = glade_xml_get_widget (gui, toggle_props[i]); + g_object_get (G_OBJECT (gobj), toggle_props[i], &cur_val, NULL); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), cur_val); + g_signal_connect_object (G_OBJECT (w), + "toggled", + G_CALLBACK (cb_tick_toggle_changed), axis_base, 0); + } + + if (gog_axis_is_discrete (axis_base->axis)) { + /* Hide minor tick properties */ + GtkWidget *w = glade_xml_get_widget (gui, "minor_tick_box"); + gtk_widget_hide (w); + } + + gog_editor_add_page (editor, + glade_xml_get_widget (gui, "axis_base_pref_box"), + _("Layout")); + + (GOG_OBJECT_CLASS(gab_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); +} + +static void +gog_axis_base_init_style (GogStyledObject *gso, GogStyle *style) +{ + style->interesting_fields = GOG_STYLE_LINE | GOG_STYLE_FONT; + gog_theme_fillin_style (gog_object_get_theme (GOG_OBJECT (gso)), + style, GOG_OBJECT (gso), 0, FALSE); +} + +static void +gog_axis_base_class_init (GObjectClass *gobject_klass) +{ + GogObjectClass *gog_klass = (GogObjectClass *) gobject_klass; + GogStyledObjectClass *gso_klass = (GogStyledObjectClass *) gobject_klass; + + gab_parent_klass = g_type_class_peek_parent (gobject_klass); + gobject_klass->set_property = gog_axis_base_set_property; + gobject_klass->get_property = gog_axis_base_get_property; + gobject_klass->finalize = gog_axis_base_finalize; + gog_klass->parent_changed = gog_axis_base_parent_changed; + + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_POSITION, + g_param_spec_string ("pos_str", "pos_str", + "Where to position an axis low, high, or crossing", + "low", G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MAJOR_TICK_LABELED, + g_param_spec_boolean ("major-tick-labeled", NULL, + "Show labels for major ticks", + TRUE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MAJOR_TICK_IN, + g_param_spec_boolean ("major-tick-in", NULL, + "Major tick marks inside the axis", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MAJOR_TICK_OUT, + g_param_spec_boolean ("major-tick-out", NULL, + "Major tick marks outside the axis", + TRUE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MAJOR_TICK_SIZE_PTS, + g_param_spec_int ("major-tick-size-pts", "major-tick-size-pts", + "Size of the major tick marks in pts", + 0, 20, 4, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MINOR_TICK_IN, + g_param_spec_boolean ("minor-tick-in", NULL, + "Minor tick marks inside the axis", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MINOR_TICK_OUT, + g_param_spec_boolean ("minor-tick-out", NULL, + "Minor tick marks outside the axis", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_MINOR_TICK_SIZE_PTS, + g_param_spec_int ("minor-tick-size-pts", NULL, + "Size of the minor tick marks in pts", + 0, 15, 2, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + + g_object_class_install_property (gobject_klass, AXIS_BASE_PROP_CROSS_AXIS_ID, + g_param_spec_uint ("cross_axis_id", NULL, + "Which axis to cross", + 0, G_MAXUINT, 0, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + + gog_klass->populate_editor = gog_axis_base_populate_editor; + gog_klass->view_type = gog_axis_base_view_get_type (); + gso_klass->init_style = gog_axis_base_init_style; +} + +static void +gog_axis_base_init (GogAxisBase *gab) +{ + gab->chart = NULL; + gab->axis = NULL; + + gab->position = GOG_AXIS_AT_LOW; + gab->crossed_axis_id = 0; + + gab->minor.tick_in = gab->minor.tick_out = gab->major.tick_in = FALSE; + gab->major.tick_out = TRUE; + gab->major_tick_labeled = TRUE; + gab->major.size_pts = 4; + gab->minor.size_pts = 2; +} + +static double +gog_axis_base_get_cross_location (GogAxisBase *axis_base) +{ + GOData *data; + + g_return_val_if_fail (GOG_AXIS_BASE (axis_base) != NULL, 0.); + + data = axis_base->cross_location.data; + if (data != NULL && IS_GO_DATA_SCALAR (data)) + return go_data_scalar_get_value (GO_DATA_SCALAR (data)); + + return 0.; +} + +GogAxisPosition +gog_axis_base_get_position (GogAxisBase *axis_base) +{ + g_return_val_if_fail (GOG_AXIS_BASE (axis_base) != NULL, GOG_AXIS_AT_LOW); + + return axis_base->position; +} + +GSF_CLASS_ABSTRACT (GogAxisBase, gog_axis_base, + gog_axis_base_class_init, gog_axis_base_init, + GOG_STYLED_OBJECT_TYPE); + +/************************************************************************/ + +#define POINT_MIN_DISTANCE 5 /* distance minimum between point and axis for point = TRUE, in pixels */ + +typedef enum { + GOG_AXIS_BASE_RENDER, + GOG_AXIS_BASE_POINT, + GOG_AXIS_BASE_PADDING_REQUEST +} GogAxisBaseAction; + +static gboolean +axis_line_point (double x, double y, + double xa, double ya, double wa, double ha) +{ + return go_geometry_point_to_segment (x, y, xa, ya, wa, ha) <= POINT_MIN_DISTANCE; +} + +static GogViewAllocation +axis_line_get_bbox (GogAxisBase *axis_base, GogRenderer *renderer, + double x, double y, double w, double h, + GOGeometrySide side, double start_at, gboolean draw_labels) +{ + GogAxisMap *map = NULL; + GogAxisTick *ticks; + GOGeometryAABR total_bbox, bbox; + GogStyle *style = axis_base->base.style; + GOGeometryAABR txt_aabr; + GOGeometryOBR txt_obr; + double line_width; + double axis_length, axis_angle, label_padding; + double cos_alpha, sin_alpha; + double pos; + unsigned i, tick_nbr; + gboolean is_line_visible; + double minor_tick_len, major_tick_len, tick_len; + + go_geometry_cartesian_to_polar (w, h, &axis_length, &axis_angle); + cos_alpha = side == GO_SIDE_LEFT ? - sin (axis_angle) : + sin (axis_angle); + sin_alpha = side == GO_SIDE_LEFT ? + cos (axis_angle) : - cos (axis_angle); + + is_line_visible = gog_style_is_line_visible (style); + line_width = gog_renderer_line_size (renderer, style->line.width) / 2; + + minor_tick_len = gog_renderer_pt2r (renderer, axis_base->minor.size_pts); + major_tick_len = gog_renderer_pt2r (renderer, axis_base->major.size_pts); + tick_len = axis_base->major.tick_out ? major_tick_len : + (axis_base->minor.tick_out ? minor_tick_len : 0.); + gog_renderer_get_text_OBR (renderer, "0", &txt_obr); + label_padding = txt_obr.w; + + total_bbox.x = x; total_bbox.y = y; + total_bbox.w = w; total_bbox.h = h; + + if (is_line_visible) { + double out_len, in_len; + + out_len = line_width; + if (axis_base->major.tick_out) + out_len += major_tick_len; + else if (axis_base->minor.tick_out) + out_len += minor_tick_len; + in_len = line_width; + if (axis_base->major.tick_in) + in_len += major_tick_len; + else if (axis_base->minor.tick_in) + in_len += minor_tick_len; + + bbox.x = x - out_len * cos_alpha; + bbox.y = y - out_len * sin_alpha; + bbox.w = (out_len + in_len) * cos_alpha; + bbox.h = (out_len + in_len) * sin_alpha; + go_geometry_AABR_add (&total_bbox, &bbox); + bbox.x += w; + bbox.y += h; + go_geometry_AABR_add (&total_bbox, &bbox); + } + + tick_nbr = gog_axis_get_ticks (axis_base->axis, &ticks); + + if (!draw_labels) + return total_bbox; + + map = gog_axis_map_new (axis_base->axis, 0., axis_length); + + for (i = 0; i < tick_nbr; i++) { + if (ticks[i].label != NULL) { + pos = gog_axis_map_to_view (map, ticks[i].position); + gog_renderer_get_text_OBR (renderer, ticks[i].label, &txt_obr); + txt_obr.w += label_padding; + go_geometry_calc_label_position (&txt_obr, axis_angle, tick_len, side); + txt_obr.x += x + pos * cos (axis_angle); + txt_obr.y += y + pos * sin (axis_angle); + go_geometry_OBR_to_AABR (&txt_obr, &txt_aabr); + go_geometry_AABR_add (&total_bbox, &txt_aabr); + } + } + gog_axis_map_free (map); + + return total_bbox; +} + +static void +axis_line_render (GogAxisBase *axis_base, GogRenderer *renderer, + double x, double y, double w, double h, + GOGeometrySide side, + double start_at, + gboolean draw_labels, + gboolean sharp) +{ + GogAxisMap *map = NULL; + GogAxisTick *ticks; + GogViewAllocation label_pos; + GogStyle *style = axis_base->base.style; + GOGeometryOBR txt_obr, txt_obr_old = {0., 0., 0., 0., 0.}; + ArtVpath path[3]; + double line_width; + double axis_length, axis_angle, label_padding; + double major_tick_len, minor_tick_len, tick_len; + double major_out_x = 0., major_out_y= 0., major_in_x = 0., major_in_y = 0.; + double minor_out_x = 0., minor_out_y= 0., minor_in_x = 0., minor_in_y = 0.; + double cos_alpha, sin_alpha; + double pos, pos_x, pos_y; + unsigned i, tick_nbr; + gboolean draw_major, draw_minor; + gboolean is_line_visible; + + go_geometry_cartesian_to_polar (w, h, &axis_length, &axis_angle); + cos_alpha = side == GO_SIDE_LEFT ? - sin (axis_angle) : + sin (axis_angle); + sin_alpha = side == GO_SIDE_LEFT ? + cos (axis_angle) : - cos (axis_angle); + + is_line_visible = gog_style_is_line_visible (style); + line_width = gog_renderer_line_size (renderer, style->line.width) / 2; + if (is_line_visible) + { + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[2].code = ART_END; + + path[0].x = x; + path[0].y = y; + path[1].x = path[0].x + w; + path[1].y = path[0].y + h; + if (sharp) + gog_renderer_draw_sharp_path (renderer, path); + else + gog_renderer_draw_path (renderer, path); + } + + map = gog_axis_map_new (axis_base->axis, 0., axis_length); + + draw_major = axis_base->major.tick_in || axis_base->major.tick_out; + draw_minor = axis_base->minor.tick_in || axis_base->minor.tick_out; + + minor_tick_len = gog_renderer_pt2r (renderer, axis_base->minor.size_pts) + line_width; + minor_out_x = axis_base->minor.tick_out ? - minor_tick_len * cos_alpha : 0.; + minor_out_y = axis_base->minor.tick_out ? - minor_tick_len * sin_alpha : 0.; + minor_in_x = axis_base->minor.tick_in ? minor_tick_len * cos_alpha : 0.; + minor_in_y = axis_base->minor.tick_in ? minor_tick_len * sin_alpha : 0.; + + major_tick_len = gog_renderer_pt2r (renderer, axis_base->major.size_pts) + line_width; + major_out_x = axis_base->major.tick_out ? - major_tick_len * cos_alpha : 0.; + major_out_y = axis_base->major.tick_out ? - major_tick_len * sin_alpha : 0.; + major_in_x = axis_base->major.tick_in ? major_tick_len * cos_alpha : 0.; + major_in_y = axis_base->major.tick_in ? major_tick_len * sin_alpha : 0.; + + tick_len = axis_base->major.tick_out ? major_tick_len : + (axis_base->minor.tick_out ? minor_tick_len : 0.); + gog_renderer_get_text_OBR (renderer, "0", &txt_obr); + label_padding = txt_obr.w; + + tick_nbr = gog_axis_get_ticks (axis_base->axis, &ticks); + + for (i = 0; i < tick_nbr; i++) { + if (gog_axis_map (map, ticks[i].position) < start_at) + continue; + + pos = gog_axis_map_to_view (map, ticks[i].position); + pos_x = x + pos * cos (axis_angle); + pos_y = y + pos * sin (axis_angle); + + if (is_line_visible) { + switch (ticks[i].type) { + case GOG_AXIS_TICK_MAJOR: + if (draw_major) { + path[0].x = major_out_x + pos_x; + path[1].x = major_in_x + pos_x; + path[0].y = major_out_y + pos_y; + path[1].y = major_in_y + pos_y; + if (sharp) + gog_renderer_draw_sharp_path (renderer, path); + else + gog_renderer_draw_path (renderer, path); + } + break; + + case GOG_AXIS_TICK_MINOR: + if (draw_minor) { + path[0].x = minor_out_x + pos_x; + path[1].x = minor_in_x + pos_x; + path[0].y = minor_out_y + pos_y; + path[1].y = minor_in_y + pos_y; + if (sharp) + gog_renderer_draw_sharp_path (renderer, path); + else + gog_renderer_draw_path (renderer, path); + } + break; + + default: + break; + } + } + + if (ticks[i].label != NULL && draw_labels) { + pos = gog_axis_map_to_view (map, ticks[i].position); + gog_renderer_get_text_OBR (renderer, ticks[i].label, &txt_obr); + txt_obr.w += label_padding; + go_geometry_calc_label_position (&txt_obr, axis_angle, tick_len, side); + txt_obr.x += x + pos * cos (axis_angle); + txt_obr.y += y + pos * sin (axis_angle); + if (!go_geometry_test_OBR_overlap (&txt_obr, &txt_obr_old)) { + label_pos.x = txt_obr.x; + label_pos.y = txt_obr.y; + gog_renderer_draw_text (renderer, ticks[i].label, + &label_pos, GTK_ANCHOR_CENTER, NULL); + txt_obr_old = txt_obr; + } + } + } + + gog_axis_map_free (map); +} + +static gboolean +axis_circle_point (double x, double y, double center_x, double center_y, double radius, int num_radii) +{ + + if (num_radii > 0.0) { + int i; + double x0 = center_x; + double y0 = center_y; + double x1, y1; + double angle_rad = 0; + + for (i = 1; i <= num_radii; i++) { + x1 = x0; + y1 = y0; + angle_rad = 2.0 * M_PI * (double) i / (double) num_radii; + x0 = center_x + radius * sin (angle_rad); + y0 = center_y - radius * cos (angle_rad); + if (go_geometry_point_to_segment (x, y, x0, y0, x1 - x0, y1 - y0) < POINT_MIN_DISTANCE) + return TRUE; + } + } + + return (radius - sqrt ((x - center_x) * (x - center_x) + (y - center_y) * (y - center_y))) < POINT_MIN_DISTANCE; +} + +static GogViewAllocation +axis_circle_get_bbox (GogAxisBase *axis_base, GogRenderer *renderer, + GogChartMap *c_map, gboolean draw_labels) +{ + GogAxisMap *map; + GogAxisTick *ticks; + GogViewAllocation total_bbox; + GogChartMapPolarData *parms = gog_chart_map_get_polar_parms (c_map); + GOGeometryOBR txt_obr; + GOGeometryAABR txt_aabr; + double angle, offset, position, label_padding; + double major_tick_len, minor_tick_len, tick_len, x, y; + unsigned i, tick_nbr; + gboolean draw_ticks; + + total_bbox.x = parms->cx; total_bbox.y = parms->cy; total_bbox.w = 0.; total_bbox.h = 0.; + + minor_tick_len = gog_renderer_pt2r (renderer, axis_base->minor.size_pts); + major_tick_len = gog_renderer_pt2r (renderer, axis_base->major.size_pts); + tick_len = axis_base->major.tick_out ? major_tick_len : + (axis_base->minor.tick_out ? minor_tick_len : 0.); + gog_renderer_get_text_OBR (renderer, "0", &txt_obr); + label_padding = txt_obr.w; + + draw_ticks = gog_style_is_line_visible (axis_base->base.style) && + (axis_base->major.tick_out || axis_base->minor.tick_out); + + map = gog_chart_map_get_axis_map (c_map, 1); + gog_axis_map_get_extents (map, &offset , &position); + map = gog_chart_map_get_axis_map (c_map, 0); + tick_nbr = gog_axis_get_ticks (axis_base->axis, &ticks); + for (i = 0; i < tick_nbr; i++) { + angle = gog_axis_map_to_view (map, ticks[i].position); + gog_chart_map_2D_to_view (c_map, ticks[i].position, position, &x, &y); + + if (ticks[i].label != NULL && draw_labels) { + gog_renderer_get_text_OBR (renderer, ticks[i].label, &txt_obr); + txt_obr.w += label_padding; + go_geometry_calc_label_position (&txt_obr, angle + M_PI / 2.0, tick_len, GO_SIDE_LEFT); + txt_obr.x += x; + txt_obr.y += y; + go_geometry_OBR_to_AABR (&txt_obr, &txt_aabr); + go_geometry_AABR_add (&total_bbox, &txt_aabr); + } else + if (draw_ticks) { + txt_aabr.x = x + cos (angle) * tick_len; + txt_aabr.y = y + sin (angle) * tick_len; + txt_aabr.w = txt_aabr.h = 0.; + go_geometry_AABR_add (&total_bbox, &txt_aabr); + } + } + + return total_bbox; +} + +static void +axis_circle_render (GogAxisBase *axis_base, GogRenderer *renderer, + GogChartMap *c_map, gboolean is_discrete, gboolean draw_labels) +{ + GogAxisMap *map; + GogAxisTick *ticks; + GogViewAllocation label_pos; + GogChartMapPolarData *parms = gog_chart_map_get_polar_parms (c_map); + GOGeometryOBR txt_obr, txt_obr_old = {0., 0., 0., 0., 0.}; + GOGeometryOBR txt_obr_first; + ArtVpath *cpath, path[3]; + double angle, offset, position, label_padding; + double start, stop; + double major_tick_len, minor_tick_len, tick_len; + unsigned i, step_nbr, tick_nbr; + gboolean draw_major, draw_minor; + gboolean is_line_visible; + gboolean first_label_done = FALSE; + + map = gog_chart_map_get_axis_map (c_map, 1); + gog_axis_map_get_extents (map, &offset , &position); + map = gog_chart_map_get_axis_map (c_map, 0); + + if (is_discrete) { + gog_axis_map_get_extents (map, &start, &stop); + step_nbr = go_rint (parms->th1 - parms->th0) + 1; + cpath = art_new (ArtVpath, step_nbr + 2); + for (i = 0; i <= step_nbr; i++) { + gog_chart_map_2D_to_view (c_map, i + parms->th0, + position, &cpath[i].x, &cpath[i].y); + cpath[i].code = ART_LINETO; + } + cpath[0].code = ART_MOVETO; + cpath[step_nbr + 1].code = ART_END; + gog_renderer_draw_path (renderer, cpath); + g_free (cpath); + } else { + gog_renderer_draw_arc (renderer, parms->cx, parms->cy, parms->rx, parms->ry, + -parms->th1, -parms->th0); + } + + is_line_visible = gog_style_is_line_visible (axis_base->base.style); + draw_major = axis_base->major.tick_in || axis_base->major.tick_out; + draw_minor = axis_base->minor.tick_in || axis_base->minor.tick_out; + + if (is_line_visible) { + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[2].code = ART_END; + } + + minor_tick_len = gog_renderer_pt2r (renderer, axis_base->minor.size_pts); + major_tick_len = gog_renderer_pt2r (renderer, axis_base->major.size_pts); + tick_len = axis_base->major.tick_out ? major_tick_len : + (axis_base->minor.tick_out ? minor_tick_len : 0.); + gog_renderer_get_text_OBR (renderer, "0", &txt_obr); + label_padding = txt_obr.w; + + tick_nbr = gog_axis_get_ticks (axis_base->axis, &ticks); + for (i = 0; i < tick_nbr; i++) { + angle = gog_axis_map_to_view (map, ticks[i].position); + if (is_line_visible) { + switch (ticks[i].type) { + case GOG_AXIS_TICK_MAJOR: + if (draw_major) { + gog_chart_map_2D_to_view (c_map, ticks[i].position, position, + &path[0].x, &path[0].y); + if (axis_base->major.tick_in) { + path[1].x = path[0].x - major_tick_len * cos (angle); + path[1].y = path[0].y - major_tick_len * sin (angle); + } else { + path[1].x = path[0].x; + path[1].y = path[0].y; + } + if (axis_base->major.tick_out) { + path[0].x += major_tick_len * cos (angle); + path[0].y += major_tick_len * sin (angle); + } + gog_renderer_draw_path (renderer, path); + } + break; + + case GOG_AXIS_TICK_MINOR: + if (draw_minor) { + gog_chart_map_2D_to_view (c_map, ticks[i].position, position, + &path[0].x, &path[0].y); + if (axis_base->minor.tick_in) { + path[1].x = path[0].x - minor_tick_len * cos (angle); + path[1].y = path[0].y - minor_tick_len * sin (angle); + } else { + path[1].x = path[0].x; + path[1].y = path[0].y; + } + if (axis_base->minor.tick_out) { + path[0].x += minor_tick_len * cos (angle); + path[0].y += minor_tick_len * sin (angle); + } + gog_renderer_draw_path (renderer, path); + } + break; + + default: + break; + } + } + + if (ticks[i].label != NULL && draw_labels) { + gog_chart_map_2D_to_view (c_map, ticks[i].position, position, + &label_pos.x, &label_pos.y); + gog_renderer_get_text_OBR (renderer, ticks[i].label, &txt_obr); + txt_obr.w += label_padding; + go_geometry_calc_label_position (&txt_obr, angle + M_PI / 2.0, tick_len, GO_SIDE_LEFT); + label_pos.x += txt_obr.x; + label_pos.y += txt_obr.y; + txt_obr.x = label_pos.x; + txt_obr.y = label_pos.y; + if (!first_label_done || + (!go_geometry_test_OBR_overlap (&txt_obr, &txt_obr_old) && + !go_geometry_test_OBR_overlap (&txt_obr, &txt_obr_first))) { + gog_renderer_draw_text (renderer, ticks[i].label, + &label_pos, GTK_ANCHOR_CENTER, NULL); + txt_obr_old = txt_obr; + } + if (!first_label_done) { + txt_obr_first = txt_obr; + first_label_done = TRUE; + } + } + } +} + +static gboolean +x_process (GogAxisBaseAction action, GogView *view, GogViewPadding *padding, + GogViewAllocation const *plot_area, double x, double y) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (view->model); + GogAxisType axis_type = gog_axis_get_atype (axis_base->axis); + GogChartMap *c_map; + GogAxisMap *a_map; + GogViewAllocation tmp = *plot_area; + GogViewAllocation axis_line_bbox; + double ax, ay, bx, by; + double start, stop; + + g_return_val_if_fail (axis_type == GOG_AXIS_X, FALSE); + + c_map = gog_chart_map_new (axis_base->chart, plot_area, axis_base->axis, NULL, NULL, TRUE); + a_map = gog_chart_map_get_axis_map (c_map, 0); + + gog_axis_map_get_extents (a_map, &start, &stop); + gog_chart_map_2D_to_view (c_map, start, 0, &ax, &ay); + gog_chart_map_2D_to_view (c_map, stop, 0, &bx, &by); + + gog_chart_map_free (c_map); + + switch (action) { + case GOG_AXIS_BASE_RENDER: + axis_line_render (GOG_AXIS_BASE (view->model), + view->renderer, ax, ay, bx - ax , by - ay, + GO_SIDE_RIGHT, -1., + axis_base->major_tick_labeled, TRUE); + break; + + case GOG_AXIS_BASE_PADDING_REQUEST: + axis_line_bbox = axis_line_get_bbox (GOG_AXIS_BASE (view->model), + view->renderer, ax, ay, bx - ax, by - ay, + GO_SIDE_RIGHT, -1., + axis_base->major_tick_labeled); + padding->wl = MAX (0., tmp.x - axis_line_bbox.x); + padding->ht = MAX (0., tmp.y - axis_line_bbox.y); + padding->wr = MAX (0., axis_line_bbox.x + axis_line_bbox.w - tmp.x - tmp.w); + padding->hb = MAX (0., axis_line_bbox.y + axis_line_bbox.h - tmp.y - tmp.h); + break; + + case GOG_AXIS_BASE_POINT: + return axis_line_point (x, y, ax, ay, bx - ax, by - ay); + break; + } + + return FALSE; +} + +static gboolean +xy_process (GogAxisBaseAction action, GogView *view, GogViewPadding *padding, + GogViewAllocation const *plot_area, double x, double y) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (view->model); + GogAxis *cross_axis; + GogChartMap *c_map; + GogAxisMap *a_map; + GogViewAllocation tmp = *plot_area; + GogViewAllocation axis_line_bbox; + double ax, ay, bx, by; + GogAxisType axis_type = gog_axis_get_atype (axis_base->axis); + double position; + double minimum, maximum, start, stop; + GOGeometrySide side; + + g_return_val_if_fail (axis_type == GOG_AXIS_X || + axis_type == GOG_AXIS_Y, FALSE); + + cross_axis = gog_axis_base_get_crossed_axis (axis_base); + if (axis_type == GOG_AXIS_X) { + c_map = gog_chart_map_new (axis_base->chart, plot_area, axis_base->axis, cross_axis, NULL, TRUE); + a_map = gog_chart_map_get_axis_map (c_map, 1); + } else { + c_map = gog_chart_map_new (axis_base->chart, plot_area, cross_axis, axis_base->axis, NULL, TRUE); + a_map = gog_chart_map_get_axis_map (c_map, 0); + } + + gog_axis_map_get_extents (a_map, &start, &stop); + gog_axis_map_get_bounds (a_map, &minimum, &maximum); + if (axis_base->position == GOG_AXIS_CROSS) { + position = gog_axis_base_get_cross_location (axis_base); + if (position < minimum || position > maximum) { + gog_chart_map_free (c_map); + return FALSE; + } + } else + position = axis_base->position == GOG_AXIS_AT_LOW ? start : stop; + + side = axis_base->position == GOG_AXIS_AT_LOW ? GO_SIDE_RIGHT : GO_SIDE_LEFT; + + if (axis_type == GOG_AXIS_X) { + a_map = gog_chart_map_get_axis_map (c_map, 0); + gog_axis_map_get_extents (a_map, &start, &stop); + gog_chart_map_2D_to_view (c_map, start, position, &ax, &ay); + gog_chart_map_2D_to_view (c_map, stop, position, &bx, &by); + } else { + a_map = gog_chart_map_get_axis_map (c_map, 1); + gog_axis_map_get_extents (a_map, &start, &stop); + gog_chart_map_2D_to_view (c_map, position, start, &ax, &ay); + gog_chart_map_2D_to_view (c_map, position, stop, &bx, &by); + side = (side == GO_SIDE_LEFT) ? GO_SIDE_RIGHT : GO_SIDE_LEFT; + } + gog_chart_map_free (c_map); + + switch (action) { + case GOG_AXIS_BASE_RENDER: + axis_line_render (GOG_AXIS_BASE (view->model), + view->renderer, ax, ay, bx - ax , by - ay, side, -1., + axis_base->major_tick_labeled, TRUE); + break; + + case GOG_AXIS_BASE_PADDING_REQUEST: + axis_line_bbox = axis_line_get_bbox (GOG_AXIS_BASE (view->model), + view->renderer, ax, ay, bx - ax, by - ay, side, -1., + axis_base->major_tick_labeled); + padding->wl = MAX (0., tmp.x - axis_line_bbox.x); + padding->ht = MAX (0., tmp.y - axis_line_bbox.y); + padding->wr = MAX (0., axis_line_bbox.x + axis_line_bbox.w - tmp.x - tmp.w); + padding->hb = MAX (0., axis_line_bbox.y + axis_line_bbox.h - tmp.y - tmp.h); + break; + + case GOG_AXIS_BASE_POINT: + return axis_line_point (x, y, ax, ay, bx - ax, by - ay); + break; + } + + return FALSE; +} + +static gboolean +radar_process (GogAxisBaseAction action, GogView *view, GogViewPadding *padding, + GogViewAllocation const *area, double x, double y) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (view->model); + GogAxis *cross_axis; + GogChartMap *c_map; + GogAxisMap *a_map; + GogAxisType axis_type = gog_axis_get_atype (axis_base->axis); + GogChartMapPolarData *parms; + GogViewAllocation tmp = *area; + GogViewAllocation bbox; + GOGeometrySide side; + double start, stop, minimum, maximum; + double bx, by, position; + unsigned i; + gboolean point = FALSE; + + g_return_val_if_fail (axis_type == GOG_AXIS_CIRCULAR || + axis_type == GOG_AXIS_RADIAL, FALSE); + + cross_axis = gog_axis_base_get_crossed_axis (axis_base); + + if (axis_type == GOG_AXIS_RADIAL) { + c_map = gog_chart_map_new (axis_base->chart, area, cross_axis, axis_base->axis, NULL, + action == GOG_AXIS_BASE_PADDING_REQUEST); + parms = gog_chart_map_get_polar_parms (c_map); + a_map = gog_chart_map_get_axis_map (c_map, 0); + gog_axis_map_get_bounds (a_map, &minimum, &maximum); + gog_axis_map_get_extents (a_map, &start, &stop); + if (axis_base->position == GOG_AXIS_CROSS) { + position = gog_axis_base_get_cross_location (axis_base); + if (position < minimum || position > maximum) { + gog_chart_map_free (c_map); + return FALSE; + } + } else + position = axis_base->position == GOG_AXIS_AT_LOW ? start : stop; + side = axis_base->position == GOG_AXIS_AT_LOW ? GO_SIDE_RIGHT : GO_SIDE_LEFT; + + a_map = gog_chart_map_get_axis_map (c_map, 1); + gog_axis_map_get_extents (a_map, &start, &stop); + + switch (action) { + case GOG_AXIS_BASE_RENDER: + if (gog_axis_is_discrete (cross_axis)) + for (i = parms->th0; i <= parms->th1; i++) { + gog_chart_map_2D_to_view (c_map, i, stop, &bx, &by); + axis_line_render (axis_base, view->renderer, + parms->cx, parms->cy, + bx - parms->cx, by - parms->cy, + side, 0.1, i == parms->th0 && axis_base->major_tick_labeled, + FALSE); + } else { + gog_chart_map_2D_to_view (c_map, position, stop, &bx, &by); + axis_line_render (axis_base, view->renderer, + parms->cx, parms->cy, + bx - parms->cx, by - parms->cy, + side, 0., axis_base->major_tick_labeled, + FALSE); + } + break; + case GOG_AXIS_BASE_PADDING_REQUEST: + if (gog_axis_is_discrete (cross_axis)) break; + + gog_chart_map_2D_to_view (c_map, position, stop, &bx, &by); + bbox = axis_line_get_bbox (axis_base, + view->renderer, parms->cx, parms->cy, + bx - parms->cx, by - parms->cy, side, -1., + axis_base->major_tick_labeled); + padding->wl = MAX (0., tmp.x - bbox.x); + padding->ht = MAX (0., tmp.y - bbox.y); + padding->wr = MAX (0., bbox.x + bbox.w - tmp.x - tmp.w); + padding->hb = MAX (0., bbox.y + bbox.h - tmp.y - tmp.h); + break; + case GOG_AXIS_BASE_POINT: + if (gog_axis_is_discrete (cross_axis)) + for (i = parms->th0; i <= parms->th1; i++) { + gog_chart_map_2D_to_view (c_map, i, stop, &bx, &by); + point = axis_line_point (x, y, parms->cx, parms->cy, + bx - parms->cx, by - parms->cy); + if (point) + break; + } + else { + gog_chart_map_2D_to_view (c_map, position, stop, &bx, &by); + point = axis_line_point (x, y, parms->cx, parms->cy, + bx - parms->cx, by - parms->cy); + } + break; + } + gog_chart_map_free (c_map); + } else { + c_map = gog_chart_map_new (axis_base->chart, area, axis_base->axis, cross_axis, NULL, + action == GOG_AXIS_BASE_PADDING_REQUEST); + parms = gog_chart_map_get_polar_parms (c_map); + + switch (action) { + case GOG_AXIS_BASE_RENDER: + axis_circle_render (GOG_AXIS_BASE (view->model), view->renderer, + c_map, gog_axis_is_discrete (axis_base->axis), + axis_base->major_tick_labeled); + break; + case GOG_AXIS_BASE_PADDING_REQUEST: + bbox = axis_circle_get_bbox (axis_base, view->renderer, c_map, + axis_base->major_tick_labeled); + padding->wl = MAX (0., tmp.x - bbox.x); + padding->ht = MAX (0., tmp.y - bbox.y); + padding->wr = MAX (0., bbox.x + bbox.w - tmp.x - tmp.w); + padding->hb = MAX (0., bbox.y + bbox.h - tmp.y - tmp.h); + break; + case GOG_AXIS_BASE_POINT: + point = axis_circle_point (x, y, parms->cx, parms->cy, parms->rx, parms->th1); + break; + } + gog_chart_map_free (c_map); + } + return point; +} + +static gboolean +gog_axis_base_view_info_at_point (GogView *view, double x, double y, + GogObject const *cur_selection, + GogObject **obj, char **name) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (view->model); + GogAxisSet axis_set = gog_chart_get_axis_set (axis_base->chart); + gboolean pointed = FALSE; + GogViewAllocation const *plot_area; + + /* FIXME: not nice */ + if (IS_GOG_AXIS (view->model)) + plot_area = gog_chart_view_get_plot_area (view->parent); + else + plot_area = gog_chart_view_get_plot_area (view->parent->parent); + + switch (axis_set) { + case GOG_AXIS_SET_X: + pointed = x_process (GOG_AXIS_BASE_POINT, view, NULL, plot_area, x, y); + break; + case GOG_AXIS_SET_XY: + pointed = xy_process (GOG_AXIS_BASE_POINT, view, NULL, plot_area, x, y); + break; + case GOG_AXIS_SET_XY_pseudo_3d: + if (gog_axis_get_atype (axis_base->axis) != GOG_AXIS_PSEUDO_3D) + pointed = xy_process (GOG_AXIS_BASE_POINT, view, NULL, plot_area, x, y); + break; + case GOG_AXIS_SET_RADAR: + pointed = radar_process (GOG_AXIS_BASE_POINT, view, NULL, plot_area, x, y); + break; + case GOG_AXIS_SET_UNKNOWN: + break; + default: + g_warning ("[AxisBaseView::info_at_point] not implemented for this axis set (%i)", + axis_set); + break; + } + + if (pointed) { + if (obj != NULL) + *obj = view->model; + if (name != NULL) + *name = NULL; + return TRUE; + } + + return FALSE; +} + +static void +gog_axis_base_view_padding_request (GogView *view, GogViewAllocation const *bbox, GogViewPadding *padding) +{ + GogAxisSet axis_set; + GogAxisBase *axis_base = GOG_AXIS_BASE (view->model); + GogStyle *style = axis_base->base.style; + + axis_set = gog_chart_get_axis_set (axis_base->chart); + + gog_renderer_push_style (view->renderer, style); + + switch (axis_set) { + case GOG_AXIS_SET_X: + x_process (GOG_AXIS_BASE_PADDING_REQUEST, view, padding, bbox, 0., 0.); + break; + case GOG_AXIS_SET_XY: + xy_process (GOG_AXIS_BASE_PADDING_REQUEST, view, padding, bbox, 0., 0.); + break; + case GOG_AXIS_SET_XY_pseudo_3d: + if (gog_axis_get_atype (axis_base->axis) != GOG_AXIS_PSEUDO_3D) + xy_process (GOG_AXIS_BASE_PADDING_REQUEST, view, padding, bbox, 0., 0.); + break; + case GOG_AXIS_SET_RADAR: + radar_process (GOG_AXIS_BASE_PADDING_REQUEST, view, padding, bbox, 0., 0.); + break; + case GOG_AXIS_SET_UNKNOWN: + break; + default: + g_warning ("[AxisBaseView::padding_request] not implemented for this axis set (%i)", + axis_set); + break; + } + + gog_renderer_pop_style (view->renderer); +} + +static void +gog_axis_base_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogAxisSet axis_set; + GogAxisBase *axis_base = GOG_AXIS_BASE (view->model); + GogStyle *style = axis_base->base.style; + GogViewAllocation const *plot_area; + + axis_set = gog_chart_get_axis_set (axis_base->chart); + /* FIXME: not nice */ + if (IS_GOG_AXIS (view->model)) + plot_area = gog_chart_view_get_plot_area (view->parent); + else + plot_area = gog_chart_view_get_plot_area (view->parent->parent); + + gog_renderer_push_style (view->renderer, style); + + switch (axis_set) { + case GOG_AXIS_SET_X: + x_process (GOG_AXIS_BASE_RENDER, view, NULL, plot_area, 0., 0.); + break; + case GOG_AXIS_SET_XY: + xy_process (GOG_AXIS_BASE_RENDER, view, NULL, plot_area, 0., 0.); + break; + case GOG_AXIS_SET_XY_pseudo_3d: + if (gog_axis_get_atype (axis_base->axis) != GOG_AXIS_PSEUDO_3D) + xy_process (GOG_AXIS_BASE_RENDER, view, NULL, plot_area, 0., 0.); + break; + case GOG_AXIS_SET_RADAR: + radar_process (GOG_AXIS_BASE_RENDER, view, NULL, plot_area, 0., 0.); + break; + case GOG_AXIS_SET_UNKNOWN: + break; + default: + g_warning ("[AxisBaseView::render] not implemented for this axis set (%i)", + axis_set); + break; + } + + gog_renderer_pop_style (view->renderer); +} + +static void +gog_axis_base_view_class_init (GogAxisBaseViewClass *gview_klass) +{ + GogViewClass *view_klass = (GogViewClass *) gview_klass; + + gab_view_parent_klass = g_type_class_peek_parent (gview_klass); + + view_klass->info_at_point = gog_axis_base_view_info_at_point; + view_klass->padding_request = gog_axis_base_view_padding_request; + view_klass->render = gog_axis_base_view_render; +} + +GSF_CLASS (GogAxisBaseView, gog_axis_base_view, + gog_axis_base_view_class_init, NULL, + GOG_VIEW_TYPE) + +/*****************************************************************************/ +/*****************************************************************************/ +/*****************************************************************************/ + +struct _GogAxisLine { + GogAxisBase base; +}; + +typedef GogAxisBaseClass GogAxisLineClass; + +static GObjectClass *gal_parent_klass; + +static void +gog_axis_line_class_init (GObjectClass *gobject_klass) +{ + gal_parent_klass = g_type_class_peek_parent (gobject_klass); +} + +static void +gog_axis_line_dataset_dims (GogDataset const *set, int *first, int *last) +{ + *first = GOG_AXIS_ELEM_CROSS_POINT; + *last = GOG_AXIS_ELEM_CROSS_POINT; +} + +static GogDatasetElement * +gog_axis_line_dataset_get_elem (GogDataset const *set, int dim_i) +{ + GogAxisBase *axis_base = GOG_AXIS_BASE (set); + + g_return_val_if_fail (dim_i == GOG_AXIS_ELEM_CROSS_POINT, NULL); + + return &axis_base->cross_location; +} + +static void +gog_axis_line_dim_changed (GogDataset *set, int dim_i) +{ + gog_object_emit_changed (GOG_OBJECT (set), TRUE); +} + +static void +gog_axis_line_dataset_init (GogDatasetClass *iface) +{ + iface->dims = gog_axis_line_dataset_dims; + iface->get_elem = gog_axis_line_dataset_get_elem; + iface->dim_changed = gog_axis_line_dim_changed; +} + +GSF_CLASS_FULL (GogAxisLine, gog_axis_line, + NULL, NULL, gog_axis_line_class_init, NULL, + NULL /*init*/, GOG_AXIS_BASE_TYPE, 0, + GSF_INTERFACE (gog_axis_line_dataset_init, GOG_DATASET_TYPE)) diff --git a/lib/goffice-0.0.4/goffice/graph/gog-axis-line.h b/lib/goffice-0.0.4/goffice/graph/gog-axis-line.h new file mode 100644 index 0000000000..337bcd95c0 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-axis-line.h @@ -0,0 +1,51 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-axis-line.h : + * + * Copyright (C) 2005 Emmanuel Pacaud (emmanuel.pacaud@univ-poitiers.fr) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_AXIS_BASE_H +#define GOG_AXIS_BASE_H + +#include + +G_BEGIN_DECLS + +typedef enum { + GOG_AXIS_AT_LOW, + GOG_AXIS_CROSS, + GOG_AXIS_AT_HIGH, + GOG_AXIS_AUTO +} GogAxisPosition; + +typedef enum { + GOG_AXIS_TICK_NONE, + GOG_AXIS_TICK_MAJOR, + GOG_AXIS_TICK_MINOR +} GogAxisTickTypes; + +#define GOG_AXIS_LINE_TYPE (gog_axis_line_get_type ()) +#define GOG_AXIS_LINE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_AXIS_LINE_TYPE, GogAxisLine)) +#define IS_GOG_AXIS_LINE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_AXIS_LINE_TYPE)) + +GType gog_axis_line_get_type (void); + +G_END_DECLS + +#endif /*GOG_AXIS_BASE_H*/ + diff --git a/lib/goffice/graph/gog-axis-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-axis-prefs.glade similarity index 61% rename from lib/goffice/graph/gog-axis-prefs.glade rename to lib/goffice-0.0.4/goffice/graph/gog-axis-prefs.glade index 0fbe9927dd..bb5bc6dfa0 100644 --- a/lib/goffice/graph/gog-axis-prefs.glade +++ b/lib/goffice-0.0.4/goffice/graph/gog-axis-prefs.glade @@ -3,7 +3,7 @@ - + True window2 GTK_WINDOW_TOPLEVEL @@ -16,6 +16,7 @@ False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST + True @@ -31,7 +32,7 @@ 12 - + True False 0 @@ -39,7 +40,7 @@ True - <b>Position</b> + <b>Bounds</b> False True GTK_JUSTIFY_LEFT @@ -49,6 +50,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -58,7 +63,7 @@ - + True 0.5 0.5 @@ -70,93 +75,39 @@ 0 - + True + 2 + 2 False - 6 + 6 + 12 - + True - True - _Low - True - GTK_RELIEF_NORMAL - True - False - False - True + Automatic + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 - 0 - False - False - - - - - - True - True - _High - True - GTK_RELIEF_NORMAL - True - False - False - True - axis_low - - - 0 - False - False - - - - - - True - False - 6 - - - - False - True - _Cross - True - GTK_RELIEF_NORMAL - True - False - False - True - axis_low - - - 0 - False - False - - - - - - False - True - -1 - - - 0 - False - False - - - - - 0 - False - False + 0 + 2 + 0 + 1 + fill + @@ -164,8 +115,8 @@ 0 - False - False + True + True @@ -195,6 +146,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -259,6 +214,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -271,6 +230,8 @@ True + False + True 0 @@ -308,12 +269,37 @@ False + + + + + + True + window3 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + False + 12 - + True False - 12 + 24 @@ -322,7 +308,7 @@ 0 - + True <b>Major ticks</b> False @@ -334,6 +320,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -343,7 +333,7 @@ - + True 0.5 0.5 @@ -355,30 +345,11 @@ 0 - + True False 6 - - - True - True - _Show Labels - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - True @@ -416,6 +387,25 @@ False + + + + True + True + _Show Labels + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + @@ -429,7 +419,7 @@ 0 False - False + True @@ -440,7 +430,7 @@ 0 - + True <b>Minor ticks</b> False @@ -452,6 +442,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -461,7 +455,7 @@ - + True 0.5 0.5 @@ -473,7 +467,7 @@ 0 - + True False 6 @@ -525,6 +519,218 @@ + + 0 + False + True + + + + + 0 + False + False + + + + + + True + False + 0 + + + + True + <b>Position</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 0 + 12 + 0 + + + + True + False + 6 + + + + True + True + _Low + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + True + _High + True + GTK_RELIEF_NORMAL + True + False + False + True + axis_low + + + 0 + False + False + + + + + + True + False + 12 + + + + True + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + + + + True + True + _Cross + True + GTK_RELIEF_NORMAL + True + False + False + True + axis_low + + + + + 0 + False + False + + + + + + True + False + True + + + 0 + False + False + + + + + + True + at + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 0 + 0 + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + 0 False diff --git a/lib/goffice/graph/gog-axis.c b/lib/goffice-0.0.4/goffice/graph/gog-axis.c similarity index 51% rename from lib/goffice/graph/gog-axis.c rename to lib/goffice-0.0.4/goffice/graph/gog-axis.c index ba9ec4a8bc..f9bc7c48ae 100644 --- a/lib/goffice/graph/gog-axis.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-axis.c @@ -15,12 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include +#include #include #include #include @@ -33,42 +34,38 @@ #include #include #include -#include #include #include +#include +#include #include #include -//#include -//#include -//#include -#include -#include -#include -#include + +#include +#include #include -#include -#include #include +#include +#include #include -#include +#include +#include +#include #include +/* this should be per model */ +#define PAD_HACK 4 /* pts */ + struct _GogAxis { - GogStyledObject base; + GogAxisBase base; GogAxisType type; - GogAxisPosition pos; GSList *contributors; - GogDatasetElement source [AXIS_ELEM_MAX_ENTRY]; - double auto_bound [AXIS_ELEM_MAX_ENTRY]; - struct { - gboolean tick_in, tick_out; - int size_pts; - } major, minor; - gboolean major_tick_labeled; + GogDatasetElement source [GOG_AXIS_ELEM_CROSS_POINT]; + double auto_bound [GOG_AXIS_ELEM_CROSS_POINT]; gboolean inverted; /* apply to all map type */ double min_val, max_val; @@ -86,28 +83,7 @@ struct _GogAxis { unsigned tick_nbr; }; -typedef GogStyledObjectClass GogAxisClass; - -static GType gog_axis_view_get_type (void); - -static GObjectClass *parent_klass; - -enum { - AXIS_PROP_0, - AXIS_PROP_TYPE, - AXIS_PROP_POS, - AXIS_PROP_POS_STR, - AXIS_PROP_INVERT, - AXIS_PROP_MAP, - AXIS_PROP_MAJOR_TICK_LABELED, - AXIS_PROP_MAJOR_TICK_IN, - AXIS_PROP_MAJOR_TICK_OUT, - AXIS_PROP_MAJOR_TICK_SIZE_PTS, - AXIS_PROP_MINOR_TICK_IN, - AXIS_PROP_MINOR_TICK_OUT, - AXIS_PROP_MINOR_TICK_SIZE_PTS, - AXIS_PROP_ASSIGNED_FORMAT_STR_XL -}; +/*****************************************************************************/ #define TICK_LABEL_PAD_VERT 0 #define TICK_LABEL_PAD_HORIZ 1 @@ -139,15 +115,16 @@ get_adjusted_tick_array (GogAxisTick *ticks, int allocated_size, int exact_size) } static GogAxisTick * -create_invalid_axis_ticks (double min, double max, gboolean draw_labels) { +create_invalid_axis_ticks (double min, double max) +{ GogAxisTick *ticks; ticks = g_new (GogAxisTick, 2); ticks[0].position = min; ticks[1].position = max; ticks[0].type = ticks[1].type = GOG_AXIS_TICK_MAJOR; - ticks[0].label = draw_labels ? g_strdup ("##") : NULL; - ticks[1].label = draw_labels ? g_strdup ("##") : NULL; + ticks[0].label = g_strdup ("##"); + ticks[1].label = g_strdup ("##"); return ticks; } @@ -174,9 +151,7 @@ map_discrete_init (GogAxisMap *map, double offset, double length) data = map->data; if (gog_axis_get_bounds (map->axis, &data->min, &data->max)) { - data->scale = (map->axis->center_on_ticks)? - 1.0 / (data->max - data->min - 1): - 1.0 / (data->max - data->min); + data->scale = 1.0 / (data->max - data->min); data->a = data->scale * length; data->b = offset - data->a * data->min; return TRUE; @@ -198,17 +173,25 @@ map_discrete (GogAxisMap *map, double value) } static double -map_discrete_to_canvas (GogAxisMap *map, double value, gboolean inverted) +map_discrete_to_view (GogAxisMap *map, double value) { MapData *data = map->data; - return inverted ? - ((map->axis->center_on_ticks)? - (data->min + data->max - 1 - value) * data->a + data->b : - (data->min + data->max - value) * data->a + data->b) : + return map->axis->inverted ? + (data->min + data->max - value) * data->a + data->b : value * data->a + data->b; } +static double +map_discrete_from_view (GogAxisMap *map, double value) +{ + MapData *data = map->data; + + return map->axis->inverted ? + data->min + data->max - (value - data->b) / data->a : + (value - data->b) / data->a; +} + static void map_discrete_auto_bound (GogAxis *axis, double minimum, @@ -216,32 +199,31 @@ map_discrete_auto_bound (GogAxis *axis, double *bound) { if ((maximum - minimum) > GOG_AXIS_DISCRETE_AUTO_MAX_MAJOR_TICK_NBR) - bound [AXIS_ELEM_MAJOR_TICK] = - bound [AXIS_ELEM_MINOR_TICK] = + bound [GOG_AXIS_ELEM_MAJOR_TICK] = + bound [GOG_AXIS_ELEM_MINOR_TICK] = ceil ((maximum - minimum + 1.0) / (double) GOG_AXIS_DISCRETE_AUTO_MAX_MAJOR_TICK_NBR); else - bound [AXIS_ELEM_MAJOR_TICK] = - bound [AXIS_ELEM_MINOR_TICK] = 1.; + bound [GOG_AXIS_ELEM_MAJOR_TICK] = + bound [GOG_AXIS_ELEM_MINOR_TICK] = 1.; - bound [AXIS_ELEM_CROSS_POINT] = 1.; - bound [AXIS_ELEM_MIN] = minimum; - bound [AXIS_ELEM_MAX] = maximum; + bound [GOG_AXIS_ELEM_MIN] = minimum; + bound [GOG_AXIS_ELEM_MAX] = maximum; } static void -map_discrete_calc_ticks (GogAxis *axis, - gboolean draw_labels) +map_discrete_calc_ticks (GogAxis *axis) { GogAxisTick *ticks; gboolean valid; double maximum, minimum; - int tick_nbr; - int i, count; + double tick_start, label_start; + int tick_nbr, label_nbr; + int i, j, index; int major_tick, major_label; - major_tick = rint (gog_axis_get_entry (axis, AXIS_ELEM_MAJOR_TICK, NULL)); - major_label = rint (gog_axis_get_entry (axis, AXIS_ELEM_MINOR_TICK, NULL)); + major_tick = go_rint (gog_axis_get_entry (axis, GOG_AXIS_ELEM_MAJOR_TICK, NULL)); + major_label = go_rint (gog_axis_get_entry (axis, GOG_AXIS_ELEM_MINOR_TICK, NULL)); if (major_tick < 1) major_tick = 1; if (major_label < 1) @@ -249,48 +231,44 @@ map_discrete_calc_ticks (GogAxis *axis, valid = gog_axis_get_bounds (axis, &minimum, &maximum); if (!valid) { - gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (0.0, 1.0, draw_labels)); + gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (0.0, 1.0)); return; } - tick_nbr = rint (maximum -minimum) + 1; - if (axis->center_on_ticks) - tick_nbr--; - if (tick_nbr < 1) { - gog_axis_set_ticks (axis, 0, NULL); + tick_start = axis->center_on_ticks ? + ceil (minimum / (double) major_tick) * major_tick : + ceil ((minimum - 0.5) / (double) major_tick) * major_tick + 0.5; + label_start = ceil (minimum / (double) major_label) * major_label; + tick_nbr = floor (go_add_epsilon (maximum - tick_start) / major_tick + 1.0); + label_nbr = floor (go_add_epsilon (maximum - label_start) / major_label + 1.0); + tick_nbr = CLAMP (tick_nbr, 0, GOG_AXIS_MAX_TICK_NBR); + label_nbr = CLAMP (label_nbr, 0, GOG_AXIS_MAX_TICK_NBR); + if (tick_nbr < 1 && label_nbr < 1) { + gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (0.0, 1.0)); return; } - ticks = g_new (GogAxisTick, tick_nbr); + ticks = g_new (GogAxisTick, tick_nbr + label_nbr); - count = 0; for (i = 0; i < tick_nbr; i++) { - ticks[count].position = (double) (i); - ticks[count].type = GOG_AXIS_TICK_MINOR; - ticks[count].label = NULL; - - if (i % major_tick == 0) - ticks[count].type = GOG_AXIS_TICK_MAJOR; - - /* Minimum >= .0 test is a trick to know if it's a barcol or an area/line plot */ - if (i == 0 && minimum >=.0 && !axis->center_on_ticks) - ticks[count].type = GOG_AXIS_TICK_NONE; - if ((i % major_label == 0) && draw_labels && - (i < tick_nbr - 1 || minimum >= .0)) { - if (axis->labels != NULL) { - if (i < go_data_vector_get_len (axis->labels)) - ticks[count].label = go_data_vector_get_str (axis->labels, i); - else - ticks[count].label = NULL; - } - else - ticks[count].label = g_strdup_printf ("%d", i + 1); - } - - count++; + ticks[i].position = tick_start + (double) (i) * major_tick; + ticks[i].type = GOG_AXIS_TICK_MAJOR; + ticks[i].label = NULL; } - - ticks = get_adjusted_tick_array (ticks, tick_nbr, count); - gog_axis_set_ticks (axis, count, ticks); + for (i = 0, j = tick_nbr; i < label_nbr; i++, j++) { + ticks[j].position = go_rint (label_start + (double) (i) * major_label); + index = ticks[j].position - 1; + ticks[j].type = GOG_AXIS_TICK_NONE; + if (axis->labels != NULL) { + if (index < go_data_vector_get_len (axis->labels) && index >= 0) + ticks[j].label = go_data_vector_get_str (axis->labels, index); + else + ticks[j].label = NULL; + } + else + ticks[j].label = g_strdup_printf ("%d", index + 1); + } + + gog_axis_set_ticks (axis, tick_nbr + label_nbr, ticks); } /* @@ -328,21 +306,61 @@ map_linear (GogAxisMap *map, double value) } static double -map_linear_to_canvas (GogAxisMap *map, double value, gboolean inverted) +map_linear_to_view (GogAxisMap *map, double value) { MapData *data = map->data; - return inverted ? + return map->axis->inverted ? (data->min + data->max - value) * data->a + data->b : value * data->a + data->b; } +static double +map_linear_from_view (GogAxisMap *map, double value) +{ + MapData *data = map->data; + + return map->axis->inverted ? + data->min + data->max - (value - data->b) / data->a : + (value - data->b) / data->a; +} + +static double +map_baseline (GogAxisMap *map) +{ + MapData *data = map->data; + + if (0. < data->min) + return map_linear_to_view (map, data->min); + else if (0 > data->max) + return map_linear_to_view (map, data->max); + + return map_linear_to_view (map, 0.); +} + +static void +map_bounds (GogAxisMap *map, double *minimum, double *maximum) +{ + MapData *data = map->data; + + if (minimum != NULL) *minimum = data->min; + if (maximum != NULL) *maximum = data->max; +} + static void map_linear_auto_bound (GogAxis *axis, double minimum, double maximum, double *bound) { double step, range, mant; int expon; + if (gog_axis_get_atype (axis) == GOG_AXIS_CIRCULAR) { + bound[GOG_AXIS_ELEM_MIN] = 0.0; + bound[GOG_AXIS_ELEM_MAX] = 360.0; + bound[GOG_AXIS_ELEM_MAJOR_TICK] = 30.0; + bound[GOG_AXIS_ELEM_MINOR_TICK] = 10.0; + return; + } + range = fabs (maximum - minimum); /* handle singletons */ @@ -369,52 +387,54 @@ map_linear_auto_bound (GogAxis *axis, double minimum, double maximum, double *bo /* we want the bounds to be loose so jump up a step if we get too close */ mant = frexp (minimum / step, &expon); - bound [AXIS_ELEM_MIN] = step * floor (ldexp (mant - DBL_EPSILON, expon)); + bound [GOG_AXIS_ELEM_MIN] = step * floor (ldexp (mant - DBL_EPSILON, expon)); mant = frexp (maximum / step, &expon); - bound [AXIS_ELEM_MAX] = step * ceil (ldexp (mant + DBL_EPSILON, expon)); - bound [AXIS_ELEM_MAJOR_TICK] = step; - bound [AXIS_ELEM_MINOR_TICK] = step / 5.; + bound [GOG_AXIS_ELEM_MAX] = step * ceil (ldexp (mant + DBL_EPSILON, expon)); + bound [GOG_AXIS_ELEM_MAJOR_TICK] = step; + bound [GOG_AXIS_ELEM_MINOR_TICK] = step / 5.; /* pull to zero if its nearby (do not pull both directions to 0) */ - if (bound [AXIS_ELEM_MIN] > 0 && - (bound [AXIS_ELEM_MIN] - 10. * step) < 0) - bound [AXIS_ELEM_MIN] = 0; - else if (bound [AXIS_ELEM_MAX] < 0 && - (bound [AXIS_ELEM_MAX] + 10. * step) < 0) - bound [AXIS_ELEM_MAX] = 0; + if (bound [GOG_AXIS_ELEM_MIN] > 0 && + (bound [GOG_AXIS_ELEM_MIN] - 10. * step) < 0) + bound [GOG_AXIS_ELEM_MIN] = 0; + else if (bound [GOG_AXIS_ELEM_MAX] < 0 && + (bound [GOG_AXIS_ELEM_MAX] + 10. * step) > 0) + bound [GOG_AXIS_ELEM_MAX] = 0; /* The epsilon shift can pull us away from a zero we want to * keep (eg percentage bars withno negative elements) */ - if (bound [AXIS_ELEM_MIN] < 0 && minimum >= 0.) - bound [AXIS_ELEM_MIN] = 0; - else if (bound [AXIS_ELEM_MAX] > 0 && maximum <= 0.) - bound [AXIS_ELEM_MAX] = 0; + if (bound [GOG_AXIS_ELEM_MIN] < 0 && minimum >= 0.) + bound [GOG_AXIS_ELEM_MIN] = 0; + else if (bound [GOG_AXIS_ELEM_MAX] > 0 && maximum <= 0.) + bound [GOG_AXIS_ELEM_MAX] = 0; } static void -map_linear_calc_ticks (GogAxis *axis, - gboolean draw_labels) +map_linear_calc_ticks (GogAxis *axis) { GogAxisTick *ticks; - double maximum, minimum; + double maximum, minimum, start; double tick_step; - double major_tick, minor_tick; - int tick_nbr, ratio, i; + double major_tick, minor_tick, ratio; + int tick_nbr, i; - major_tick = gog_axis_get_entry (axis, AXIS_ELEM_MAJOR_TICK, NULL); - minor_tick = gog_axis_get_entry (axis, AXIS_ELEM_MINOR_TICK, NULL); - if (minor_tick < major_tick) - tick_step = minor_tick; - else - tick_step = major_tick; - ratio = rint (major_tick / tick_step); - if (!gog_axis_get_bounds (axis, &minimum, &maximum)) { - gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (0.0, 1.0, draw_labels)); + gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (0.0, 1.0)); return; } - tick_nbr = floor (go_add_epsilon ((maximum - minimum) / tick_step + 1.0)); + major_tick = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MAJOR_TICK, NULL); + minor_tick = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MINOR_TICK, NULL); + if (major_tick <= 0.) major_tick = maximum - minimum; + if (minor_tick <= 0.) minor_tick = maximum - minimum; + if (minor_tick < major_tick) { + minor_tick = major_tick / rint (major_tick / minor_tick); + tick_step = minor_tick; + } else + tick_step = major_tick; + + start = ceil (minimum / tick_step) * tick_step; + tick_nbr = floor (go_add_epsilon ((maximum - start) / tick_step + 1.0)); if (tick_nbr < 1 || tick_nbr > GOG_AXIS_MAX_TICK_NBR) { gog_axis_set_ticks (axis, 0, NULL); return; @@ -422,21 +442,18 @@ map_linear_calc_ticks (GogAxis *axis, ticks = g_new0 (GogAxisTick, tick_nbr); for (i = 0; i < tick_nbr; i++) { - ticks[i].position = minimum + (double) i * tick_step; + ticks[i].position = start + (double) i * tick_step; if (fabs (ticks[i].position) < tick_step / 1E10) ticks[i].position = 0.0; - if (rint (fmod (i, ratio)) == 0) { + ratio = ticks[i].position / major_tick; + if (fabs (ratio - rint (ratio)) < 1E-3) { ticks[i].type = GOG_AXIS_TICK_MAJOR; - if (draw_labels) { if (axis->assigned_format == NULL || - style_format_is_general (axis->assigned_format)) + go_format_is_general (axis->assigned_format)) ticks[i].label = go_format_value (axis->format, ticks[i].position); else ticks[i].label = go_format_value (axis->assigned_format, ticks[i].position); } - else - ticks[i].label = NULL; - } else { ticks[i].type = GOG_AXIS_TICK_MINOR; ticks[i].label = NULL; @@ -500,22 +517,57 @@ map_log (GogAxisMap *map, double value) } static double -map_log_to_canvas (GogAxisMap *map, double value, gboolean inverted) +map_log_to_view (GogAxisMap *map, double value) { MapLogData *data = map->data; double result; if (value <= 0.) /* Make libart happy */ - result = inverted ? -DBL_MAX : DBL_MAX; + result = map->axis->inverted ? -DBL_MAX : DBL_MAX; else - result = inverted ? + result = map->axis->inverted ? log (value) * data->a_inv + data->b_inv : log (value) * data->a + data->b; return result; } +static double +map_log_from_view (GogAxisMap *map, double value) +{ + MapLogData *data = map->data; + + return map->axis->inverted ? + exp ((value - data->b_inv) / data->a_inv) : + exp ((value - data->b) / data->a); +} + +static gboolean +map_log_finite (double value) +{ + return go_finite (value) && value > 0.; +} + +static double +map_log_baseline (GogAxisMap *map) +{ + MapLogData *data = map->data; + + return map->axis->inverted ? + data->max * data->a_inv + data->b_inv : + data->min * data->a + data->b; +} + +static void +map_log_bounds (GogAxisMap *map, double *minimum, double *maximum) +{ + MapLogData *data = map->data; + + if (minimum != NULL) *minimum = exp (data->min); + if (maximum != NULL) *maximum = exp (data->max); +} + static void map_log_auto_bound (GogAxis *axis, double minimum, double maximum, double *bound) { @@ -534,15 +586,14 @@ map_log_auto_bound (GogAxis *axis, double minimum, double maximum, double *bound step = ceil ((maximum - minimum + 1.0) / (double) GOG_AXIS_LOG_AUTO_MAX_MAJOR_TICK_NBR); - bound [AXIS_ELEM_MIN] = pow ( 10.0, minimum); - bound [AXIS_ELEM_MAX] = pow ( 10.0, maximum); - bound [AXIS_ELEM_MAJOR_TICK] = step; - bound [AXIS_ELEM_MINOR_TICK] = 8; + bound [GOG_AXIS_ELEM_MIN] = pow ( 10.0, minimum); + bound [GOG_AXIS_ELEM_MAX] = pow ( 10.0, maximum); + bound [GOG_AXIS_ELEM_MAJOR_TICK] = step; + bound [GOG_AXIS_ELEM_MINOR_TICK] = 8; } static void -map_log_calc_ticks (GogAxis *axis, - gboolean draw_labels) +map_log_calc_ticks (GogAxis *axis) { GogAxisTick *ticks; double maximum, minimum; @@ -551,15 +602,15 @@ map_log_calc_ticks (GogAxis *axis, int tick_nbr, i, j; int count; - major_label = rint (gog_axis_get_entry (axis, AXIS_ELEM_MAJOR_TICK, NULL)); - minor_tick = rint (gog_axis_get_entry (axis, AXIS_ELEM_MINOR_TICK, NULL) + 1.0); + major_label = rint (gog_axis_get_entry (axis, GOG_AXIS_ELEM_MAJOR_TICK, NULL)); + minor_tick = rint (gog_axis_get_entry (axis, GOG_AXIS_ELEM_MINOR_TICK, NULL) + 1.0); if (!gog_axis_get_bounds (axis, &minimum, &maximum) || major_label < 1) { - gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (1.0, 10.0, draw_labels)); + gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (1.0, 10.0)); return; } if (minimum <= 0.0) { - gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (1.0, 10.0, draw_labels)); + gog_axis_set_ticks (axis, 2, create_invalid_axis_ticks (1.0, 10.0)); return; } @@ -577,10 +628,10 @@ map_log_calc_ticks (GogAxis *axis, position = pow (10.0, i + start_tick); if (position >= go_sub_epsilon (minimum) && go_sub_epsilon (position) <= maximum) { ticks[count].position = position; - if ((i) % major_label == 0 && draw_labels) { + if (i % major_label == 0) { ticks[count].type = GOG_AXIS_TICK_MAJOR; if (axis->assigned_format == NULL || - style_format_is_general (axis->assigned_format)) + go_format_is_general (axis->assigned_format)) ticks[count].label = go_format_value (axis->format, ticks[count].position); else ticks[count].label = go_format_value (axis->assigned_format, ticks[count].position); @@ -609,7 +660,9 @@ map_log_calc_ticks (GogAxis *axis, static const GogAxisMapDesc map_desc_discrete = { - map_discrete, map_discrete_to_canvas, + map_discrete, map_discrete_to_view, + map_discrete_from_view, go_finite, + map_baseline, map_bounds, map_discrete_init, NULL, map_discrete_auto_bound, map_discrete_calc_ticks, N_("Discrete"), N_("Discrete mapping") @@ -618,13 +671,17 @@ static const GogAxisMapDesc map_desc_discrete = static const GogAxisMapDesc map_descs[] = { { - map_linear, map_linear_to_canvas, + map_linear, map_linear_to_view, + map_linear_from_view, go_finite, + map_baseline, map_bounds, map_linear_init, NULL, map_linear_auto_bound, map_linear_calc_ticks, N_("Linear"), N_("Linear mapping") }, { - map_log, map_log_to_canvas, + map_log, map_log_to_view, + map_log_from_view, map_log_finite, + map_log_baseline, map_log_bounds, map_log_init, NULL, map_log_auto_bound, map_log_calc_ticks, N_("Log"), N_("Logarithm mapping") @@ -697,7 +754,7 @@ gog_axis_map_is_valid (GogAxisMap *map) * * Return a new GogAxisMap for data mapping to plot window. * offset and length are optional parameters to be used with - * gog_axis_map_to_canvas in order to translates data coordinates + * gog_axis_map_to_view in order to translates data coordinates * into canvas space. **/ @@ -741,7 +798,20 @@ gog_axis_map (GogAxisMap *map, } /** - * gog_axis_map_to_canvas : + * gog_axis_map_from_view : + * @map : #GogAxisMap + * @value : value to unmap from canvas space. + **/ + +double +gog_axis_map_from_view (GogAxisMap *map, + double value) +{ + return map->desc->map_from_view (map, value); +} + +/** + * gog_axis_map_to_view : * @map : #GogAxisMap * @value : value to map to canvas space. * @@ -750,12 +820,82 @@ gog_axis_map (GogAxisMap *map, **/ double -gog_axis_map_to_canvas (GogAxisMap *map, +gog_axis_map_to_view (GogAxisMap *map, double value) { - return map->desc->map_to_canvas (map, value, map->axis->inverted); + return map->desc->map_to_view (map, value); } +/** + * gog_axis_map_finite : + * @map : #GogAxisMap + * @value : value to test + * + * Returns TRUE if value means something in this map + **/ + +gboolean +gog_axis_map_finite (GogAxisMap *map, double value) +{ + return map->desc->map_finite (value); +} + +/** + * gog_axis_map_get_baseline : + * @map : #GogAxisMap + * + * Returns the baseline for the given map, in view coordinates, + * clipped to offset and offset+length, where offset and length + * are the parameters of gog_axis_map_new. + **/ + +double +gog_axis_map_get_baseline (GogAxisMap *map) +{ + return map->desc->map_baseline (map); +} + +/** + * gog_axis_map_get_extents: + * @map : #GogAxisMap + * @start : start for this axis + * @stop : stop for this axis + * + * Returns start and stop for the given axis map in data coordinates. If + * axis is not inverted, start = minimum and stop = maximum. If axis is invalid, + * it'll return arbitrary bounds. For example, an non inverted invalid X axis + * will have start set to 0.0 and stop set to 1.0. + * + * minimum or maximum can be NULL. + * */ + +void +gog_axis_map_get_extents (GogAxisMap *map, double *start, double *stop) +{ + if (map->axis->inverted) + return map->desc->map_bounds (map, stop, start); + else + return map->desc->map_bounds (map, start, stop); +} + +/** + * gog_axis_map_get_bounds: + * @map : #GogAxisMap + * @minimum : minimum for this axis + * @maximum : maximum for this axis + * + * Returns bounds for the given axis map in data coordinates. If axis is invalid, + * it'll return arbitrary bounds. For example, for an invalid x axis, minimum = 0.0 + * and maximum = 1.0. + * + * minimum or maximum can be NULL. + * */ + +void +gog_axis_map_get_bounds (GogAxisMap *map, double *minimum, double *maximum) +{ + return map->desc->map_bounds (map, minimum, maximum); +} /** * gog_axis_map_free : * @map : #GogAxisMap @@ -788,10 +928,10 @@ gog_axis_auto_bound (GogAxis *axis) minimum = axis->min_val; maximum = axis->max_val; - tmp = gog_axis_get_entry (axis, AXIS_ELEM_MIN, &user_defined); + tmp = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MIN, &user_defined); if (user_defined) minimum = tmp; - tmp = gog_axis_get_entry (axis, AXIS_ELEM_MAX, &user_defined); + tmp = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MAX, &user_defined); if (user_defined) maximum = tmp; if (axis->is_discrete) @@ -825,53 +965,47 @@ gog_axis_calc_ticks (GogAxis *axis) g_return_if_fail (GOG_AXIS (axis) != NULL); if (axis->is_discrete) - map_desc_discrete.calc_ticks (axis, - axis->major_tick_labeled); + map_desc_discrete.calc_ticks (axis); else if (axis->map_desc->calc_ticks) - axis->map_desc->calc_ticks (axis, - axis->major_tick_labeled); + axis->map_desc->calc_ticks (axis); + + if (axis->type == GOG_AXIS_PSEUDO_3D || axis->type == GOG_AXIS_Z) { + GSList *l = axis->contributors; + while (l) { + gog_plot_update_3d (GOG_PLOT (l->data)); + l = l->next; + } + } } +/************************************************************************/ + +typedef GogAxisBaseClass GogAxisClass; + +static GType gog_axis_view_get_type (void); + +static GObjectClass *parent_klass; + +enum { + AXIS_PROP_0, + AXIS_PROP_TYPE, + AXIS_PROP_INVERT, + AXIS_PROP_MAP, + AXIS_PROP_ASSIGNED_FORMAT_STR_XL +}; + /*****************************************************************************/ -static void -role_label_post_add (GogObject *parent, GogObject *label) -{ - GogAxis const *axis = GOG_AXIS (parent); - if (axis->pos == GOG_AXIS_AT_LOW) - label->position = (axis->type == GOG_AXIS_X) - ? (GOG_POSITION_S|GOG_POSITION_ALIGN_CENTER) - : (GOG_POSITION_W|GOG_POSITION_ALIGN_CENTER); - else - label->position = (axis->type == GOG_AXIS_X) - ? (GOG_POSITION_N|GOG_POSITION_ALIGN_CENTER) - : (GOG_POSITION_E|GOG_POSITION_ALIGN_CENTER); -} - -static gboolean -role_grid_line_can_add (GogObject const *parent, char const *type) -{ - GSList *children; - - children = gog_object_get_children (parent, - gog_object_find_role_by_name (GOG_OBJECT (parent), type)); - if (children != NULL) { - g_slist_free (children); - return FALSE; - } - - return TRUE; -} - static gboolean role_grid_line_major_can_add (GogObject const *parent) { GogAxis *axis = GOG_AXIS (parent); GogAxisType type = gog_axis_get_atype (axis); - return ((type == GOG_AXIS_X || type == GOG_AXIS_Y || type == GOG_AXIS_RADIAL) && - role_grid_line_can_add (parent, "MajorGrid")); + return ((type == GOG_AXIS_X || type == GOG_AXIS_Y || type == GOG_AXIS_RADIAL || + (type == GOG_AXIS_CIRCULAR && !gog_axis_is_discrete (axis))) && + gog_axis_get_grid_line (GOG_AXIS (parent), TRUE) == NULL); } static gboolean @@ -881,34 +1015,50 @@ role_grid_line_minor_can_add (GogObject const *parent) GogAxisType type = gog_axis_get_atype (axis); return (!gog_axis_is_discrete (GOG_AXIS (parent)) && - (type == GOG_AXIS_X || type == GOG_AXIS_Y || type == GOG_AXIS_RADIAL) && - role_grid_line_can_add (parent, "MinorGrid")); + (type == GOG_AXIS_X || type == GOG_AXIS_Y || + type == GOG_AXIS_RADIAL || type == GOG_AXIS_CIRCULAR) && + gog_axis_get_grid_line (GOG_AXIS (parent), FALSE) == NULL); } static void role_grid_line_major_post_add (GogObject *parent, GogObject *child) { - g_object_set (G_OBJECT (child), "is_minor", (gboolean)FALSE, NULL); + g_object_set (G_OBJECT (child), "is-minor", (gboolean)FALSE, NULL); } static void role_grid_line_minor_post_add (GogObject *parent, GogObject *child) { - g_object_set (G_OBJECT (child), "is_minor", (gboolean)TRUE, NULL); + g_object_set (G_OBJECT (child), "is-minor", (gboolean)TRUE, NULL); } static gboolean -gog_axis_set_pos (GogAxis *axis, GogAxisPosition pos) +role_axis_line_can_add (GogObject const *parent) { - GSList *ptr; - if (axis->pos == pos) - return FALSE; - axis->pos = pos; + GogChart *chart = GOG_AXIS_BASE (parent)->chart; + GogAxisSet axis_set = gog_chart_get_axis_set (chart); + + if (axis_set == GOG_AXIS_SET_XY || + (axis_set == GOG_AXIS_SET_RADAR && + gog_axis_get_atype (GOG_AXIS (parent)) == GOG_AXIS_RADIAL)) + return TRUE; - for (ptr = GOG_OBJECT (axis)->children ; ptr != NULL ; ptr = ptr->next) - if (IS_GOG_LABEL (ptr->data)) - role_label_post_add (GOG_OBJECT (axis), ptr->data); - return TRUE; + return FALSE; +} + +static void +role_axis_line_post_add (GogObject *parent, GogObject *child) +{ + gog_axis_base_set_position (GOG_AXIS_BASE (child), GOG_AXIS_AUTO); +} + +static gboolean +role_label_can_add (GogObject const *parent) +{ + GogAxisType type = gog_axis_get_atype (GOG_AXIS (parent)); + + return (type == GOG_AXIS_X || + type == GOG_AXIS_Y); } /** @@ -948,92 +1098,24 @@ gog_axis_set_property (GObject *obj, guint param_id, if (axis->type != itmp) { axis->type = itmp; resized = TRUE; + if (axis->type == GOG_AXIS_PSEUDO_3D) + g_object_set (obj, + "major-tick-labeled", FALSE, + "major-tick-in", FALSE, + "major-tick-out", FALSE, + "minor-tick-in", FALSE, + "minor-tick-out", FALSE, + NULL); } break; - case AXIS_PROP_POS: - resized = gog_axis_set_pos (axis, g_value_get_int (value)); - break; - case AXIS_PROP_POS_STR: { - char const *str = g_value_get_string (value); - if (str == NULL) - return; - else if (!g_ascii_strcasecmp (str, "low")) - itmp = GOG_AXIS_AT_LOW; - else if (!g_ascii_strcasecmp (str, "middle")) - itmp = GOG_AXIS_IN_MIDDLE; - else if (!g_ascii_strcasecmp (str, "high")) - itmp = GOG_AXIS_AT_HIGH; - else - return; - resized = gog_axis_set_pos (axis, itmp); - break; - } case AXIS_PROP_INVERT: axis->inverted = g_value_get_boolean (value); - calc_ticks = TRUE; + resized = calc_ticks = TRUE; break; case AXIS_PROP_MAP : gog_axis_map_set (axis, g_value_get_string (value)); request_update = TRUE; break; - - case AXIS_PROP_MAJOR_TICK_LABELED: - itmp = g_value_get_boolean (value); - if (axis->major_tick_labeled != itmp) { - axis->major_tick_labeled = itmp; - resized = TRUE; - calc_ticks = TRUE; - } - break; - case AXIS_PROP_MAJOR_TICK_IN : - itmp = g_value_get_boolean (value); - if (axis->major.tick_in != itmp) { - axis->major.tick_in = itmp; - if (itmp != axis->major.tick_out) - calc_ticks = TRUE; - } - break; - case AXIS_PROP_MAJOR_TICK_OUT : - itmp = g_value_get_boolean (value); - if (axis->major.tick_out != itmp) { - axis->major.tick_out = itmp; - resized = axis->major.size_pts > 0; - if (itmp != axis->major.tick_in) - calc_ticks = TRUE; - } - break; - case AXIS_PROP_MAJOR_TICK_SIZE_PTS: - itmp = g_value_get_int (value); - if (axis->major.size_pts != itmp) { - axis->major.size_pts = itmp; - resized = axis->major.tick_out; - } - break; - - case AXIS_PROP_MINOR_TICK_IN : - itmp = g_value_get_boolean (value); - if (axis->minor.tick_in != itmp) { - axis->minor.tick_in = itmp; - if (itmp != axis->minor.tick_out) - calc_ticks = TRUE; - } - break; - case AXIS_PROP_MINOR_TICK_OUT : - itmp = g_value_get_boolean (value); - if (axis->minor.tick_out != itmp) { - axis->minor.tick_out = itmp; - resized = axis->minor.size_pts > 0; - if (itmp != axis->minor.tick_in) - calc_ticks = TRUE; - } - break; - case AXIS_PROP_MINOR_TICK_SIZE_PTS: - itmp = g_value_get_int (value); - if (axis->minor.size_pts != itmp) { - axis->minor.size_pts = itmp; - resized = axis->minor.tick_out; - } - break; case AXIS_PROP_ASSIGNED_FORMAT_STR_XL : { char const *str = g_value_get_string (value); resized = gog_axis_set_format (axis, (str != NULL) @@ -1066,51 +1148,12 @@ gog_axis_get_property (GObject *obj, guint param_id, case AXIS_PROP_TYPE: g_value_set_int (value, axis->type); break; - case AXIS_PROP_POS: - g_value_set_int (value, axis->pos); - break; - case AXIS_PROP_POS_STR: - switch (axis->pos) { - case GOG_AXIS_AT_LOW: - g_value_set_static_string (value, "low"); - break; - case GOG_AXIS_IN_MIDDLE: - g_value_set_static_string (value, "middle"); - break; - case GOG_AXIS_AT_HIGH: - g_value_set_static_string (value, "high"); - break; - } - break; case AXIS_PROP_INVERT: g_value_set_boolean (value, axis->inverted); break; case AXIS_PROP_MAP: g_value_set_string (value, axis->map_desc->name); break; - - case AXIS_PROP_MAJOR_TICK_LABELED: - g_value_set_boolean (value, axis->major_tick_labeled); - break; - case AXIS_PROP_MAJOR_TICK_IN: - g_value_set_boolean (value, axis->major.tick_in); - break; - case AXIS_PROP_MAJOR_TICK_OUT: - g_value_set_boolean (value, axis->major.tick_out); - break; - case AXIS_PROP_MAJOR_TICK_SIZE_PTS: - g_value_set_int (value, axis->major.size_pts); - break; - - case AXIS_PROP_MINOR_TICK_IN: - g_value_set_boolean (value, axis->minor.tick_in); - break; - case AXIS_PROP_MINOR_TICK_OUT: - g_value_set_boolean (value, axis->minor.tick_out); - break; - case AXIS_PROP_MINOR_TICK_SIZE_PTS: - g_value_set_int (value, axis->minor.size_pts); - break; case AXIS_PROP_ASSIGNED_FORMAT_STR_XL : if (axis->assigned_format != NULL) g_value_take_string (value, @@ -1171,9 +1214,13 @@ gog_axis_get_entry (GogAxis const *axis, GogAxisElemType i, gboolean *user_defin *user_defined = FALSE; g_return_val_if_fail (GOG_AXIS (axis) != NULL, go_nan); - g_return_val_if_fail (i >= AXIS_ELEM_MIN && i < AXIS_ELEM_MAX_ENTRY, go_nan); + g_return_val_if_fail (i >= GOG_AXIS_ELEM_MIN && i < GOG_AXIS_ELEM_MAX_ENTRY, go_nan); + + if (i != GOG_AXIS_ELEM_CROSS_POINT) + dat = axis->source [i].data; + else + dat = GOG_AXIS_BASE (axis)->cross_location.data; - dat = axis->source [i].data; if (dat != NULL && IS_GO_DATA_SCALAR (dat)) { double tmp = go_data_scalar_get_value (GO_DATA_SCALAR (dat)); if (go_finite (tmp)) { @@ -1183,7 +1230,10 @@ gog_axis_get_entry (GogAxis const *axis, GogAxisElemType i, gboolean *user_defin } } - return axis->auto_bound [i]; + if (i != GOG_AXIS_ELEM_CROSS_POINT) + return axis->auto_bound [i]; + else + return 0.; } static void @@ -1191,8 +1241,8 @@ gog_axis_update (GogObject *obj) { GSList *ptr; GogAxis *axis = GOG_AXIS (obj); - double old_min = axis->auto_bound [AXIS_ELEM_MIN]; - double old_max = axis->auto_bound [AXIS_ELEM_MAX]; + double old_min = axis->auto_bound [GOG_AXIS_ELEM_MIN]; + double old_max = axis->auto_bound [GOG_AXIS_ELEM_MAX]; GOData *labels; GogPlotBoundInfo bounds; @@ -1226,8 +1276,8 @@ gog_axis_update (GogObject *obj) g_object_ref (labels); axis->labels = GO_DATA_VECTOR (labels); axis->plot_that_supplied_labels = GOG_PLOT (ptr->data); - axis->center_on_ticks = bounds.center_on_ticks; } + axis->center_on_ticks = bounds.center_on_ticks; if (axis->min_val > bounds.val.minima) { axis->min_val = bounds.val.minima; @@ -1252,31 +1302,19 @@ gog_axis_update (GogObject *obj) gog_axis_auto_bound (axis); if (go_finite (axis->logical_min_val) && - axis->auto_bound [AXIS_ELEM_MIN] < axis->logical_min_val) - axis->auto_bound [AXIS_ELEM_MIN] = axis->logical_min_val; + axis->auto_bound [GOG_AXIS_ELEM_MIN] < axis->logical_min_val) + axis->auto_bound [GOG_AXIS_ELEM_MIN] = axis->logical_min_val; if (go_finite (axis->logical_max_val) && - axis->auto_bound [AXIS_ELEM_MAX] > axis->logical_max_val) - axis->auto_bound [AXIS_ELEM_MAX] = axis->logical_max_val; + axis->auto_bound [GOG_AXIS_ELEM_MAX] > axis->logical_max_val) + axis->auto_bound [GOG_AXIS_ELEM_MAX] = axis->logical_max_val; gog_axis_calc_ticks (axis); - /* FIXME: there isn't an easy way to know if a discrete axis - * needs to emit a changed signal. So allways emit changed signal if - * axis is discrete */ - if (old_min != axis->auto_bound [AXIS_ELEM_MIN] || - old_max != axis->auto_bound [AXIS_ELEM_MAX] || - axis->is_discrete) + if (old_min != axis->auto_bound [GOG_AXIS_ELEM_MIN] || + old_max != axis->auto_bound [GOG_AXIS_ELEM_MAX]) gog_object_emit_changed (GOG_OBJECT (obj), TRUE); } -static void -cb_pos_changed (GtkToggleButton *toggle_button, GObject *axis) -{ - g_object_set (axis, - "pos_str", gtk_toggle_button_get_active (toggle_button) ? "low" : "high", - NULL); -} - static void cb_axis_toggle_changed (GtkToggleButton *toggle_button, GObject *axis) { @@ -1385,40 +1423,53 @@ cb_axis_fmt_assignment_toggled (GtkToggleButton *toggle_button, GtkNotebook *not } #endif -static gpointer -gog_axis_editor (GogObject *gobj, GogDataAllocator *dalloc, GnmCmdContext *cc) +static void +gog_axis_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) { static guint axis_pref_page = 0; static char const *toggle_props[] = { - "invert-axis", - "major-tick-labeled", - "major-tick-out", - "major-tick-in", - "minor-tick-out", - "minor-tick-in" + "invert-axis" }; - GtkWidget *w, *notebook; /* , *cbox; */ + GtkWidget *w; GtkTable *table; unsigned i = 0; GogAxis *axis = GOG_AXIS (gobj); GogDataset *set = GOG_DATASET (gobj); GladeXML *gui; - /* No preferences for circular axis */ - if (axis->type == GOG_AXIS_CIRCULAR) - return NULL; - - gui = gnm_glade_xml_new (cc, "gog-axis-prefs.glade", "axis_pref_box", NULL); + gui = go_libglade_new ("gog-axis-prefs.glade", "axis_pref_box", NULL, cc); if (gui == NULL) - return NULL; - notebook = gtk_notebook_new (); + return; - gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), - glade_xml_get_widget (gui, "axis_pref_box"), - gtk_label_new (_("Details"))); - gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, notebook); + /* Bounds Page */ + table = GTK_TABLE (glade_xml_get_widget (gui, "bound_table")); + if (axis->is_discrete) { + static char const * const dim_names[] = { + N_("M_inimum"), + N_("M_aximum"), + N_("Categories between _ticks"), + N_("Categories between _labels") + }; + for (i = GOG_AXIS_ELEM_MIN; i < GOG_AXIS_ELEM_CROSS_POINT ; i++) + make_dim_editor (set, table, i, dalloc, dim_names); + } else { + static char const * const dim_names[] = { + N_("M_inimum"), + N_("M_aximum"), + N_("Ma_jor ticks"), + N_("Mi_nor ticks") + }; - if (!axis->is_discrete) { + for (i = GOG_AXIS_ELEM_MIN; i < GOG_AXIS_ELEM_CROSS_POINT ; i++) + make_dim_editor (set, table, i, dalloc, dim_names); + } + gtk_widget_show_all (GTK_WIDGET (table)); + + /* Details page */ + if (!axis->is_discrete && gog_axis_get_atype (axis) != GOG_AXIS_CIRCULAR) { GtkWidget *w = glade_xml_get_widget (gui, "map_type_combo"); gog_axis_map_populate_combo (axis, GTK_COMBO_BOX (w)); g_signal_connect_object (G_OBJECT (w), @@ -1430,16 +1481,6 @@ gog_axis_editor (GogObject *gobj, GogDataAllocator *dalloc, GnmCmdContext *cc) gtk_widget_hide (w); } - w = glade_xml_get_widget (gui, "axis_low"); - if (axis->pos == GOG_AXIS_AT_LOW) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); - else - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON ( - glade_xml_get_widget (gui, "axis_high")), TRUE); - g_signal_connect_object (G_OBJECT (w), - "toggled", - G_CALLBACK (cb_pos_changed), axis, 0); - for (i = 0; i < G_N_ELEMENTS (toggle_props) ; i++) { gboolean cur_val; GtkWidget *w = glade_xml_get_widget (gui, toggle_props[i]); @@ -1450,55 +1491,22 @@ gog_axis_editor (GogObject *gobj, GogDataAllocator *dalloc, GnmCmdContext *cc) "toggled", G_CALLBACK (cb_axis_toggle_changed), axis, 0); } - if (axis->is_discrete) { - /* Hide minor tick properties */ - GtkWidget *w = glade_xml_get_widget (gui, "minor_tick_box"); - gtk_widget_hide (w); - } - /* Bounds Page */ - w = gtk_table_new (1, 2, FALSE); - table = GTK_TABLE (w); - w = gtk_label_new (_("Automatic")); - gtk_misc_set_alignment (GTK_MISC (w), 0., .5); - gtk_table_set_row_spacings (table, 6); - gtk_table_set_col_spacings (table, 12); - gtk_container_set_border_width (GTK_CONTAINER (table), 12); - gtk_table_attach (table, w, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); - if (axis->is_discrete) { - static char const * const dim_names[] = { - NULL, - NULL, - N_("Categories between _ticks"), - N_("Categories between _labels"), - N_("_Cross at category #") - }; - for (i = AXIS_ELEM_MAJOR_TICK; i < AXIS_ELEM_MAX_ENTRY ; i++) - make_dim_editor (set, table, i, dalloc, dim_names); - gtk_widget_show_all (GTK_WIDGET (table)); - gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), GTK_WIDGET (table), - gtk_label_new (_("Bounds"))); - } else { - static char const * const dim_names[] = { - N_("M_in"), - N_("M_ax"), - N_("Ma_jor Ticks"), - N_("Mi_nor Ticks"), - N_("_Cross") - }; + gog_editor_add_page (editor, + glade_xml_get_widget (gui, "axis_pref_box"), + _("Scale")); - for (i = AXIS_ELEM_MIN; i < AXIS_ELEM_MAX_ENTRY ; i++) - make_dim_editor (set, table, i, dalloc, dim_names); - gtk_widget_show_all (GTK_WIDGET (table)); - gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), GTK_WIDGET (table), - gtk_label_new (_("Bounds"))); + /* Style page */ + (GOG_OBJECT_CLASS(parent_klass)->populate_editor) (gobj, editor, dalloc, cc); - w = number_format_selector_new (); - if (axis->assigned_format != NULL && !style_format_is_general (axis->assigned_format)) - number_format_selector_set_style_format (NUMBER_FORMAT_SELECTOR (w), + /* Format page */ + if (!axis->is_discrete && gog_axis_get_atype (axis) != GOG_AXIS_PSEUDO_3D) { + w = go_format_sel_new (); + if (axis->assigned_format != NULL && !go_format_is_general (axis->assigned_format)) + go_format_sel_set_style_format (GO_FORMAT_SEL (w), axis->assigned_format); else if (axis->format != NULL) - number_format_selector_set_style_format (NUMBER_FORMAT_SELECTOR (w), + go_format_sel_set_style_format (GO_FORMAT_SEL (w), axis->format); #if 0 @@ -1512,45 +1520,49 @@ gog_axis_editor (GogObject *gobj, GogDataAllocator *dalloc, GnmCmdContext *cc) G_CALLBACK (cb_axis_fmt_assignment_toggled), notebook); gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), w, cbox); #else - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), w, - gtk_label_new (_("Format"))); + gog_editor_add_page (editor, w, _("Format")); #endif gtk_widget_show (w); g_signal_connect (G_OBJECT (w), - "number_format_changed", - G_CALLBACK (cb_axis_fmt_changed), axis); + "format_changed", G_CALLBACK (cb_axis_fmt_changed), axis); } - g_object_set_data_full (G_OBJECT (notebook), "gui", gui, + w = glade_xml_get_widget (gui, "axis_pref_box"); + g_object_set_data_full (G_OBJECT (w), "gui", gui, (GDestroyNotify)g_object_unref); - gog_style_handle_notebook (notebook, &axis_pref_page); - gtk_widget_show (GTK_WIDGET (notebook)); - return notebook; + gog_editor_set_store_page (editor, &axis_pref_page); } static void gog_axis_init_style (GogStyledObject *gso, GogStyle *style) { - style->interesting_fields = GOG_STYLE_LINE | GOG_STYLE_FONT; + if (gog_axis_get_atype (GOG_AXIS (gso)) != GOG_AXIS_PSEUDO_3D) + style->interesting_fields = GOG_STYLE_LINE | GOG_STYLE_FONT | + GOG_STYLE_TEXT_LAYOUT; + else + style->interesting_fields = 0; gog_theme_fillin_style (gog_object_get_theme (GOG_OBJECT (gso)), - style, GOG_OBJECT (gso), 0, FALSE); + style, GOG_OBJECT (gso), 0, FALSE); } static void gog_axis_class_init (GObjectClass *gobject_klass) { static GogObjectRole const roles[] = { - { N_("Label"), "GogLabel", 0, - GOG_POSITION_COMPASS, GOG_POSITION_S|GOG_POSITION_ALIGN_CENTER, GOG_OBJECT_NAME_BY_ROLE, - NULL, NULL, NULL, role_label_post_add, NULL, NULL, { -1 } }, - { N_("MinorGrid"), "GogGridLine", 0, + { N_("MajorGrid"), "GogGridLine", 0, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + role_grid_line_major_can_add, NULL, NULL, role_grid_line_major_post_add, NULL, NULL, { -1 } }, + { N_("MinorGrid"), "GogGridLine", 1, GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, role_grid_line_minor_can_add, NULL, NULL, role_grid_line_minor_post_add, NULL, NULL, { -1 } }, - { N_("MajorGrid"), "GogGridLine", 1, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - role_grid_line_major_can_add, NULL, NULL, role_grid_line_major_post_add, NULL, NULL, { -1 } } + { N_("AxisLine"), "GogAxisLine", 2, + GOG_POSITION_PADDING, GOG_POSITION_PADDING, GOG_OBJECT_NAME_BY_ROLE, + role_axis_line_can_add, NULL, NULL, role_axis_line_post_add, NULL, NULL, { -1 } }, + { N_("Label"), "GogLabel", 3, + GOG_POSITION_SPECIAL|GOG_POSITION_ANY_MANUAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + role_label_can_add, NULL, NULL, NULL, NULL, NULL, { -1 } } }; GogObjectClass *gog_klass = (GogObjectClass *) gobject_klass; @@ -1566,15 +1578,6 @@ gog_axis_class_init (GObjectClass *gobject_klass) g_param_spec_int ("type", "Type", "GogAxisType", GOG_AXIS_UNKNOWN, GOG_AXIS_TYPES, GOG_AXIS_UNKNOWN, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_klass, AXIS_PROP_POS, - g_param_spec_int ("pos", "pos", - "GogAxisPosition", - GOG_AXIS_AT_LOW, GOG_AXIS_AT_HIGH, GOG_AXIS_AT_LOW, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_klass, AXIS_PROP_POS_STR, - g_param_spec_string ("pos_str", "pos_str", - "Where to position an axis low, high, or crossing", - "low", G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_INVERT, g_param_spec_boolean ("invert-axis", NULL, "Scale from high to low rather than low to high", @@ -1583,43 +1586,15 @@ gog_axis_class_init (GObjectClass *gobject_klass) g_param_spec_string ("map-name", "MapName", "The name of the map for scaling", "linear", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_MAJOR_TICK_LABELED, - g_param_spec_boolean ("major-tick-labeled", NULL, - "Show labels for major ticks", - TRUE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_MAJOR_TICK_IN, - g_param_spec_boolean ("major-tick-in", NULL, - "Major tick marks inside the axis", - FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_MAJOR_TICK_OUT, - g_param_spec_boolean ("major-tick-out", NULL, - "Major tick marks outside the axis", - TRUE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_MAJOR_TICK_SIZE_PTS, - g_param_spec_int ("major-tick-size-pts", "major-tick-size-pts", - "Size of the major tick marks in pts", - 0, 20, 4, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - - g_object_class_install_property (gobject_klass, AXIS_PROP_MINOR_TICK_IN, - g_param_spec_boolean ("minor-tick-in", NULL, - "Minor tick marks inside the axis", - FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_MINOR_TICK_OUT, - g_param_spec_boolean ("minor-tick-out", NULL, - "Minor tick marks outside the axis", - FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - g_object_class_install_property (gobject_klass, AXIS_PROP_MINOR_TICK_SIZE_PTS, - g_param_spec_int ("minor-tick-size-pts", NULL, - "Size of the minor tick marks in pts", - 0, 15, 2, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, AXIS_PROP_ASSIGNED_FORMAT_STR_XL, g_param_spec_string ("assigned-format-string-XL", NULL, "The user assigned format to use for non-discrete axis labels (XL format)", "General", G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); + gog_klass->update = gog_axis_update; - gog_klass->editor = gog_axis_editor; + gog_klass->populate_editor = gog_axis_populate_editor; gog_klass->view_type = gog_axis_view_get_type (); style_klass->init_style = gog_axis_init_style; } @@ -1628,14 +1603,8 @@ static void gog_axis_init (GogAxis *axis) { axis->type = GOG_AXIS_UNKNOWN; - axis->pos = GOG_AXIS_AT_LOW; axis->contributors = NULL; - axis->minor.tick_in = axis->minor.tick_out = axis->major.tick_in = FALSE; - axis->major.tick_out = TRUE; - axis->major_tick_labeled = TRUE; axis->inverted = FALSE; - axis->major.size_pts = 4; - axis->minor.size_pts = 2; /* yes we want min = MAX */ axis->min_val = DBL_MAX; @@ -1656,16 +1625,19 @@ gog_axis_init (GogAxis *axis) static void gog_axis_dataset_dims (GogDataset const *set, int *first, int *last) { - *first = AXIS_ELEM_MIN; - *last = AXIS_ELEM_CROSS_POINT; + *first = GOG_AXIS_ELEM_MIN; + *last = GOG_AXIS_ELEM_CROSS_POINT; } static GogDatasetElement * gog_axis_dataset_get_elem (GogDataset const *set, int dim_i) { GogAxis *axis = GOG_AXIS (set); - if (AXIS_ELEM_MIN <= dim_i && dim_i <= AXIS_ELEM_CROSS_POINT) + if (GOG_AXIS_ELEM_MIN <= dim_i && dim_i < GOG_AXIS_ELEM_CROSS_POINT) return &axis->source[dim_i]; + if (dim_i == GOG_AXIS_ELEM_CROSS_POINT) { + return &(axis->base.cross_location); + } return NULL; } @@ -1685,8 +1657,8 @@ gog_axis_dataset_init (GogDatasetClass *iface) } GSF_CLASS_FULL (GogAxis, gog_axis, - gog_axis_class_init, gog_axis_init, - GOG_STYLED_OBJECT_TYPE, 0, + NULL, NULL, gog_axis_class_init, NULL, + gog_axis_init, GOG_AXIS_BASE_TYPE, 0, GSF_INTERFACE (gog_axis_dataset_init, GOG_DATASET_TYPE)) @@ -1697,11 +1669,17 @@ gog_axis_get_atype (GogAxis const *axis) return axis->type; } -GogAxisPosition -gog_axis_get_pos (GogAxis const *axis) +/** + * gog_axis_is_center_on_ticks : + * @axis : #GogAxis + * + * Returns TRUE if labels are centered on ticks when @axis is discrete + **/ +gboolean +gog_axis_is_center_on_ticks (GogAxis const *axis) { - g_return_val_if_fail (GOG_AXIS (axis) != NULL, GOG_AXIS_IN_MIDDLE); - return axis->pos; + g_return_val_if_fail (GOG_AXIS (axis) != NULL, FALSE); + return axis->center_on_ticks; } /** @@ -1718,6 +1696,19 @@ gog_axis_is_discrete (GogAxis const *axis) return axis->is_discrete; } +/** + * gog_axis_is_inverted : + * @axis : #GogAxis + * + * Returns TRUE if @axis is inverted. + **/ +gboolean +gog_axis_is_inverted (GogAxis const *axis) +{ + g_return_val_if_fail (GOG_AXIS (axis) != NULL, FALSE); + return axis->inverted; +} + /** * gog_axis_get_bounds : * @axis : #GogAxis @@ -1733,8 +1724,8 @@ gog_axis_get_bounds (GogAxis const *axis, double *minima, double *maxima) g_return_val_if_fail (minima != NULL, FALSE); g_return_val_if_fail (maxima != NULL, FALSE); - *minima = gog_axis_get_entry (axis, AXIS_ELEM_MIN, NULL); - *maxima = gog_axis_get_entry (axis, AXIS_ELEM_MAX, NULL); + *minima = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MIN, NULL); + *maxima = gog_axis_get_entry (axis, GOG_AXIS_ELEM_MAX, NULL); return go_finite (*minima) && go_finite (*maxima) && *minima < *maxima; } @@ -1862,10 +1853,34 @@ gog_axis_bound_changed (GogAxis *axis, GogObject *contrib) gog_object_request_update (GOG_OBJECT (axis)); } +/* gog_axis_get_grid_line: + * @axis: #GogAxis + * @major: whether to retrieve major or minor grid line. + * + * Returns a pointer to GridLine object associated to given axis, NULL + * if it doesn't exists. + **/ +GogGridLine * +gog_axis_get_grid_line (GogAxis *axis, gboolean major) +{ + GogGridLine *grid_line; + GSList *children; + + children = gog_object_get_children (GOG_OBJECT (axis), + gog_object_find_role_by_name (GOG_OBJECT (axis), + major ? "MajorGrid" : "MinorGrid")); + if (children != NULL) { + grid_line = GOG_GRID_LINE (children->data); + g_slist_free (children); + return grid_line; + } + return NULL; +} + /****************************************************************************/ -typedef GogView GogAxisView; -typedef GogViewClass GogAxisViewClass; +typedef GogAxisBaseView GogAxisView; +typedef GogAxisBaseViewClass GogAxisViewClass; #define GOG_AXIS_VIEW_TYPE (gog_axis_view_get_type ()) #define GOG_AXIS_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_AXIS_VIEW_TYPE, GogAxisView)) @@ -1873,295 +1888,117 @@ typedef GogViewClass GogAxisViewClass; static GogViewClass *aview_parent_klass; -void -gog_axis_view_padding_request (GogView *v, GogViewPadding *padding, - GogViewAllocation *bbox) +static void +gog_axis_view_padding_request (GogView *view, + GogViewAllocation const *bbox, + GogViewPadding *padding) { - GogAxis *axis = GOG_AXIS (v->model); - GogViewRequisition txt_size; - gboolean const is_horiz = axis->type == GOG_AXIS_X; - unsigned i; - double tick_major = 0., tick_minor = 0.; - double txt_max_h, txt_max_w; - double line_width = gog_renderer_line_size ( - v->renderer, axis->base.style->line.width); - - double Xl, Xr, wl, wr, xm; - gboolean label_found = FALSE; - double position; - char *label = NULL; - double padding_l, padding_r, padding_label; - gboolean is_l_valid, is_r_valid; + GogView *child; + GogAxis *axis = GOG_AXIS (view->model); + GogAxisType type = gog_axis_get_atype (axis); + GogObjectPosition pos; + GogViewAllocation tmp = *bbox; + GogViewRequisition req; + GogViewPadding label_padding, child_padding; + GSList *ptr; + double const pad_h = gog_renderer_pt2r_y (view->renderer, PAD_HACK); + double const pad_w = gog_renderer_pt2r_x (view->renderer, PAD_HACK); - GogAxisMap *map; + label_padding.wr = label_padding.wl = label_padding.ht = label_padding.hb = 0; - padding->wr = padding->wl = padding->ht = padding->hb = 0.; - - if ((axis->type != GOG_AXIS_X && axis->type != GOG_AXIS_Y)) - return; - - map = gog_axis_map_new (axis, 0., 1.); - - if (is_horiz) { - xm = bbox->w - bbox->x; - } else { - xm = bbox->h - bbox->y; - } - - - padding_l = padding_r = padding_label = 0.; - Xl = DBL_MAX; - Xr = -DBL_MAX; - wl = wr = 0.; - txt_max_w = txt_max_h = 0.; - gog_renderer_push_style (v->renderer, axis->base.style); - for (i = 0; i < axis->tick_nbr; i++) { - label = axis->ticks[i].label; - if (label != NULL) { - label_found = TRUE; - position = gog_axis_map (map, axis->ticks[i].position); - gog_renderer_measure_text (v->renderer, label, - &txt_size); - - if (txt_max_h < txt_size.h) - txt_max_h = txt_size.h; - if (txt_max_w < txt_size.w) - txt_max_w = txt_size.w; - - if (position < Xl) { - Xl = position; - wl = (is_horiz ? txt_size.w : txt_size.h) / 2.; - } - if (position > Xr) { - Xr = position; - wr = (is_horiz ? txt_size.w : txt_size.h) / 2.; - } - } - } - gog_renderer_pop_style (v->renderer); - - if (label_found) { - if (Xl != Xr) { - padding_l = (Xr * wl + Xl * (wr - xm)) / (Xr - Xl); - padding_r = xm - (((Xr - 1.0) * wl + (Xl - 1.0) * (wr - xm)) / (Xr - Xl)); - is_l_valid = padding_l > 0.; - is_r_valid = padding_r > 0.; - } else { - is_l_valid = Xl > .5; - is_r_valid = ! is_l_valid; - } - - if (!is_l_valid) { - padding_l = 0.; - if (Xr > 0.) - padding_r = MAX (xm - ((xm - wr) / Xr), 0.); - else - padding_r = 0.; - } else if (!is_r_valid) { - padding_r = 0.; - if (Xl < 1.0) - padding_l = MAX ((wl -Xl * xm) / (1 - Xl), 0.); - else - padding_l = 0.; + for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { + child = ptr->data; + pos = child->model->position; + if (IS_GOG_LABEL (child->model) && !(pos & GOG_POSITION_MANUAL)) { + gog_view_size_request (child, &req); + if (type == GOG_AXIS_X) + label_padding.hb += req.h + pad_h; + else + label_padding.wl += req.w + pad_w; } } - if (is_horiz) { - if (line_width > 0) { - if (axis->major.tick_out) - tick_major = gog_renderer_pt2r_y (v->renderer, - axis->major.size_pts); - if (axis->minor.tick_out) - tick_minor = gog_renderer_pt2r_y (v->renderer, - axis->minor.size_pts); - } - padding_label = (axis->is_discrete ? - MAX (txt_max_h, MAX (tick_minor, tick_major)): - MAX (tick_major + txt_max_h, tick_minor)) + - line_width; - } else { - if (line_width > 0) { - if (axis->major.tick_out) - tick_major = gog_renderer_pt2r_x (v->renderer, - axis->major.size_pts); - if (axis->minor.tick_out) - tick_minor = gog_renderer_pt2r_x (v->renderer, - axis->minor.size_pts); - } - padding_label = (axis->is_discrete ? - MAX (txt_max_w, MAX (tick_major, tick_minor)): - MAX (tick_major + txt_max_w, tick_minor)) + - line_width; - } + tmp.x += label_padding.wl; + tmp.w -= label_padding.wl + label_padding.wr; + tmp.y += label_padding.hb; + tmp.h -= label_padding.hb + label_padding.ht; - if (is_horiz) { - padding->wl = padding_l; - padding->wr = padding_r; - if (axis->pos == GOG_AXIS_AT_LOW) { - padding->hb = padding_label; - padding->ht = line_width; - } else { - padding->hb = line_width; - padding->ht = padding_label; - } - } else { - padding->ht = padding_r; - padding->hb = padding_l; - if (axis->pos == GOG_AXIS_AT_LOW) { - padding->wl = padding_label; - padding->wr = line_width; - } else { - padding->wl = line_width; - padding->wr = padding_label; + (aview_parent_klass->padding_request) (view, &tmp, padding); + + for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { + child = ptr->data; + if (GOG_POSITION_IS_PADDING (child->model->position)) { + gog_view_padding_request (child, &tmp, &child_padding); + padding->wr = MAX (padding->wr, child_padding.wr); + padding->wl = MAX (padding->wl, child_padding.wl); + padding->hb = MAX (padding->hb, child_padding.hb); + padding->ht = MAX (padding->ht, child_padding.ht); } } - gog_axis_map_free (map); + padding->wr += label_padding.wr; + padding->wl += label_padding.wl; + padding->ht += label_padding.ht; + padding->hb += label_padding.hb; } static void -gog_axis_view_size_request (GogView *v, GogViewRequisition *req) +gog_axis_view_size_allocate (GogView *view, GogViewAllocation const *bbox) { - gog_view_size_child_request (v, req, req); -} + GSList *ptr; + GogView *child; + GogAxis *axis = GOG_AXIS (view->model); + GogAxisType type = gog_axis_get_atype (axis); + GogViewAllocation tmp = *bbox; + GogViewAllocation const *plot_area = gog_chart_view_get_plot_area (view->parent); + GogViewAllocation child_bbox; + GogViewRequisition req; + GogObjectPosition pos; + double const pad_h = gog_renderer_pt2r_y (view->renderer, PAD_HACK); + double const pad_w = gog_renderer_pt2r_x (view->renderer, PAD_HACK); -static gboolean -overlap (GogViewAllocation const *bbox1, GogViewAllocation const *bbox2) { - return (!((MAX (bbox2->x, bbox2->x + bbox2->w) < MIN (bbox1->x, bbox1->x + bbox1->w)) || - (MAX (bbox2->y, bbox2->y + bbox2->h) < MIN (bbox1->y, bbox1->y + bbox1->h)) || - (MIN (bbox2->x, bbox2->x + bbox2->w) > MAX (bbox1->x, bbox1->x + bbox1->w)) || - (MIN (bbox2->y, bbox2->y + bbox2->h) > MAX (bbox1->y, bbox1->y + bbox1->h)))); -} - -static void -draw_axis_from_a_to_b (GogView *v, GogAxis *axis, double ax, double ay, double bx, double by, - gboolean draw_label) -{ - GogAxisMap *map = NULL; - ArtVpath path[3]; - double line_width; - double axis_length, axis_angle, label_angle; - double tick_len; - double major_out_x = 0., major_out_y= 0., major_in_x = 0., major_in_y = 0.; - double minor_out_x = 0., minor_out_y= 0., minor_in_x = 0., minor_in_y = 0.; - double cos_alpha, sin_alpha; - double pos, pos_x, pos_y, offset, label_offset; - unsigned i; - GogViewRequisition txt_size; - GogViewAllocation label_pos, label_result, label_old = {0., 0., 0., 0.}; - gboolean draw_major, draw_minor; - gboolean is_line_visible; - - axis_length = sqrt ((ax-bx)*(ax-bx)+(ay-by)*(ay-by)); - if (bx - ax != 0) { - axis_angle = atan ((double)(by-ay)/(double)(bx-ax)); - if (bx < ax) { - axis_angle += M_PI; - } - } else { - if (ay > by) { - axis_angle = - M_PI/2.0; + for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { + child = ptr->data; + pos = child->model->position; + if (IS_GOG_LABEL (child->model) && (pos & GOG_POSITION_MANUAL)) { + gog_view_size_request (child, &req); + child_bbox = gog_object_get_manual_allocation (gog_view_get_model (child), + plot_area, &req); + gog_view_size_allocate (child, &child_bbox); } else { - axis_angle = M_PI/2.0; - } - } - label_angle = fmod (axis_angle + 2.0 * M_PI, M_PI); - if (label_angle > M_PI / 2.0) - label_angle = M_PI - label_angle; - cos_alpha = cos (axis_angle + M_PI / 2.0); - sin_alpha = sin (axis_angle + M_PI / 2.0); - - is_line_visible = gog_style_is_line_visible (axis->base.style); - line_width = gog_renderer_line_size (v->renderer, axis->base.style->line.width) / 2; - if (is_line_visible) - { - path[0].code = ART_MOVETO; - path[1].code = ART_LINETO; - path[2].code = ART_END; - - path[0].x = ax; - path[0].y = ay; - path[1].x = bx; - path[1].y = by; - gog_renderer_draw_path (v->renderer, path, NULL); - - map = gog_axis_map_new (axis, 0., axis_length); - } - - draw_major = axis->major.tick_in || axis->major.tick_out; - draw_minor = axis->minor.tick_in || axis->minor.tick_out; - - tick_len = gog_renderer_pt2r_x (v->renderer, axis->minor.size_pts) + line_width; - minor_out_x = axis->minor.tick_out ? - tick_len * cos_alpha : 0.; - minor_out_y = axis->minor.tick_out ? - tick_len * sin_alpha : 0.; - minor_in_x = axis->minor.tick_in ? tick_len * cos_alpha : 0.; - minor_in_y = axis->minor.tick_in ? tick_len * sin_alpha : 0.; - tick_len = gog_renderer_pt2r_x (v->renderer, axis->major.size_pts) + line_width; - major_out_x = axis->major.tick_out ? - tick_len * cos_alpha : 0.; - major_out_y = axis->major.tick_out ? - tick_len * sin_alpha : 0.; - major_in_x = axis->major.tick_in ? tick_len * cos_alpha : 0.; - major_in_y = axis->major.tick_in ? tick_len * sin_alpha : 0.; - label_offset = gog_renderer_pt2r_x (v->renderer, TICK_LABEL_PAD_HORIZ) + - axis->major.tick_in ? tick_len : 0.; - - for (i = 0; i < axis->tick_nbr; i++) { - pos = gog_axis_map_to_canvas (map, axis->ticks[i].position); - pos_x = ax + pos * cos (axis_angle); - pos_y = ay + pos * sin (axis_angle); - - if (is_line_visible) { - switch (axis->ticks[i].type) { - case GOG_AXIS_TICK_MAJOR: - if (draw_major) { - path[0].x = major_out_x + pos_x; - path[1].x = major_in_x + pos_x; - path[0].y = major_out_y + pos_y; - path[1].y = major_in_y + pos_y; - gog_renderer_draw_path (v->renderer, path, NULL); + if (GOG_POSITION_IS_SPECIAL (pos)) { + if (IS_GOG_LABEL (child->model)) { + gog_view_size_request (child, &req); + if (type == GOG_AXIS_X) { + child_bbox.x = plot_area->x + (plot_area->w - req.w) / 2.0; + child_bbox.w = plot_area->w; + child_bbox.y = tmp.y + tmp.h - req.h; + child_bbox.h = req.h; + tmp.h -= req.h + pad_h; + } else { + child_bbox.x = tmp.x; + child_bbox.w = req.w; + child_bbox.y = plot_area->y + (plot_area->h - req.h) / 2.0; + child_bbox.h = plot_area->h; + tmp.x += req.w + pad_w; + tmp.w -= req.w + pad_w; } - break; - - case GOG_AXIS_TICK_MINOR: - if (draw_minor) { - path[0].x = minor_out_x + pos_x; - path[1].x = minor_in_x + pos_x; - path[0].y = minor_out_y + pos_y; - path[1].y = minor_in_y + pos_y; - gog_renderer_draw_path (v->renderer, path, NULL); - } - break; - - default: - break; - } - } - - if (axis->ticks[i].label != NULL && - gog_axis_map (map, axis->ticks[i].position) >= 0.1 && - draw_label) { - gog_renderer_measure_text (v->renderer, axis->ticks[i].label, &txt_size); - offset = (txt_size.h * cos (label_angle) + txt_size.w * sin (label_angle)) / 2.0 + label_offset; - label_pos.x = pos_x + offset * cos_alpha; - label_pos.y = pos_y + offset * sin_alpha; - label_pos.w = txt_size.w; - label_pos.h = txt_size.h; - if (!overlap (&label_pos, &label_old)) { - gog_renderer_draw_text (v->renderer, axis->ticks[i].label, - &label_pos, GTK_ANCHOR_CENTER, &label_result); - label_old = label_pos; + gog_view_size_allocate (child, &child_bbox); + } else { + gog_view_size_allocate (child, plot_area); + } } } } - - if (is_line_visible) - gog_axis_map_free (map); } static void -gog_axis_view_render_children (GogView *view, GogViewAllocation const *bbox) +gog_axis_view_render (GogView *view, GogViewAllocation const *bbox) { GSList *ptr; + (aview_parent_klass->render) (view, bbox); + /* Render every child except grid lines. Those are rendered * before in gog_chart_view since we don't want to render them * over axis. */ @@ -2171,283 +2008,17 @@ gog_axis_view_render_children (GogView *view, GogViewAllocation const *bbox) } } -static void -gog_axis_view_render (GogView *v, GogViewAllocation const *bbox) -{ - GtkAnchorType anchor; - GogViewAllocation const *area; - GogViewAllocation label_pos, label_result; - GogViewRequisition txt_size; - double last_label_pos = .0, last_label_size = -DBL_MAX; - ArtVpath path[3]; - GogAxis *axis = GOG_AXIS (v->model); - GogStyle *style = axis->base.style; - unsigned i; - double tick_len, label_pad, dir, center, label_spacing = 0.; - double line_width = gog_renderer_line_size (v->renderer, - style->line.width) / 2.; - double pos, offset; - double major_in = 0., major_out = 0.; - double minor_in = 0., minor_out = 0.; - gboolean draw_major, draw_minor; - gboolean is_line_visible = gog_style_is_line_visible (style); - - gog_axis_view_render_children (v, bbox); - - g_return_if_fail (axis->pos != GOG_AXIS_IN_MIDDLE); - g_return_if_fail (v->parent != NULL); - area = gog_chart_view_get_plot_area (v->parent); - g_return_if_fail (area != NULL); - - gog_renderer_push_style (v->renderer, style); - - draw_major = (axis->major.tick_in || axis->major.tick_out) && is_line_visible; - draw_minor = (axis->minor.tick_in || axis->minor.tick_out) && is_line_visible; - - path[0].code = ART_MOVETO; - path[1].code = ART_LINETO; - path[2].code = ART_END; - - switch (axis->type) { - case GOG_AXIS_X: - switch (axis->pos) { - default : - case GOG_AXIS_AT_LOW: - anchor = GTK_ANCHOR_N; - dir = 1.; - center = area->y + area->h; - break; - - case GOG_AXIS_AT_HIGH: - anchor = GTK_ANCHOR_S; - dir = -1.; - center = area->y; - break; - } - - tick_len = gog_renderer_pt2r_y (v->renderer, axis->major.size_pts); - major_out = axis->major.tick_out ? center + dir * (line_width + tick_len) : center; - major_in = axis->major.tick_in ? center - dir * (line_width + tick_len) : center; - tick_len = gog_renderer_pt2r_y (v->renderer, axis->minor.size_pts); - minor_out = axis->minor.tick_out ? center + dir * (line_width + tick_len) : center; - minor_in = axis->minor.tick_in ? center - dir * (line_width + tick_len) : center; - - if (is_line_visible) { - path[0].y = path[1].y = center; - path[0].x = area->x - line_width; - path[1].x = area->x + area->w + line_width; - gog_renderer_draw_sharp_path (v->renderer, path, NULL); - } - - if (axis->major_tick_labeled) { - label_pad = gog_renderer_pt2r_y (v->renderer, TICK_LABEL_PAD_VERT); - label_pos.y = (axis->major.tick_out && (!axis->is_discrete || axis->center_on_ticks)) - ? major_out + dir * label_pad - : center + dir * (line_width + label_pad); - label_pos.h = area->h - line_width; - label_pos.w = -1; - gog_renderer_measure_text (v->renderer, "0", &txt_size); - label_spacing = txt_size.w; - } - - if (axis->tick_nbr > 0) { - GogAxisMap *map = gog_axis_map_new (axis, area->x, area->w); - offset = (axis->is_discrete && !axis->center_on_ticks)? -0.5 : 0.0; - for (i = 0; i < axis->tick_nbr; i++) { - - if (is_line_visible) { - pos = gog_axis_map_to_canvas (map, axis->ticks[i].position + offset); - switch (axis->ticks[i].type) { - case GOG_AXIS_TICK_MAJOR: - if (draw_major) { - path[0].x = path[1].x = pos; - path[0].y = major_out; - path[1].y = major_in; - gog_renderer_draw_sharp_path - (v->renderer, path, NULL); - } - break; - - case GOG_AXIS_TICK_MINOR: - if (draw_minor) { - path[0].x = path[1].x = pos; - path[0].y = minor_out; - path[1].y = minor_in; - gog_renderer_draw_sharp_path - (v->renderer, path, NULL); - } - break; - - default: - break; - } - } - if (axis->ticks[i].label != NULL) { - label_pos.x = gog_axis_map_to_canvas (map, axis->ticks[i].position); - if (fabs (last_label_pos - label_pos.x) > last_label_size + label_spacing) { - gog_renderer_measure_text (v->renderer, axis->ticks[i].label, &txt_size); - txt_size.w /= 2.0; - if (fabs (last_label_pos - label_pos.x) > last_label_size + txt_size.w + label_spacing) { - gog_renderer_draw_text (v->renderer, axis->ticks[i].label, - &label_pos, anchor, &label_result); - last_label_pos = label_pos.x; - last_label_size = txt_size.w; - } - } - } - } - gog_axis_map_free (map); - } - - break; - - case GOG_AXIS_Y: - switch (axis->pos) { - default : - case GOG_AXIS_AT_LOW: - anchor = GTK_ANCHOR_E; - dir = -1.; - center = area->x; - break; - case GOG_AXIS_AT_HIGH: - anchor = GTK_ANCHOR_W; - dir = 1.; - center = area->x + area->w; - break; - } - - tick_len = gog_renderer_pt2r_x (v->renderer, axis->major.size_pts); - major_out = axis->major.tick_out ? center + dir * (line_width + tick_len) : center; - major_in = axis->major.tick_in ? center - dir * (line_width + tick_len) : center; - tick_len = gog_renderer_pt2r_x (v->renderer, axis->minor.size_pts); - minor_out = axis->minor.tick_out ? center + dir * (line_width + tick_len) : center; - minor_in = axis->minor.tick_in ? center - dir * (line_width + tick_len) : center; - - if (is_line_visible) { - path[0].x = path[1].x = center; - path[0].y = area->y + area->h + line_width; - path[1].y = area->y - line_width; - gog_renderer_draw_sharp_path (v->renderer, path, NULL); - } - - if (axis->major_tick_labeled) { - label_pad = gog_renderer_pt2r_x (v->renderer, TICK_LABEL_PAD_HORIZ); - label_pos.x = (axis->major.tick_out && (!axis->is_discrete || axis->center_on_ticks)) - ? major_out + dir * label_pad - : center + dir * (line_width + label_pad); - label_pos.w = area->w - line_width; - label_pos.h = -1; - } - - if (axis->tick_nbr > 0) { - GogAxisMap *map = gog_axis_map_new (axis, area->h + area->y, -area->h); - offset = (axis->is_discrete && !axis->center_on_ticks)? -0.5 : 0.0; - for (i = 0; i < axis->tick_nbr; i++) { - - if (is_line_visible) { - pos = gog_axis_map_to_canvas (map, axis->ticks[i].position + offset); - switch (axis->ticks[i].type) { - case GOG_AXIS_TICK_MAJOR: - if (draw_major) { - path[0].y = path[1].y = pos; - path[0].x = major_out; - path[1].x = major_in; - gog_renderer_draw_sharp_path - (v->renderer, path, NULL); - } - break; - - case GOG_AXIS_TICK_MINOR: - if (draw_minor) { - path[0].y = path[1].y = pos; - path[0].x = minor_out; - path[1].x = minor_in; - gog_renderer_draw_sharp_path - (v->renderer, path, NULL); - } - break; - - default: - break; - } - } - - if (axis->ticks[i].label != NULL) { - label_pos.y = gog_axis_map_to_canvas (map, axis->ticks[i].position); - if (fabs (last_label_pos - label_pos.y) > last_label_size) { - gog_renderer_measure_text (v->renderer, axis->ticks[i].label, &txt_size); - txt_size.h /= 2.0; - if (fabs (last_label_pos - label_pos.y) > last_label_size + txt_size.h) { - gog_renderer_draw_text (v->renderer, axis->ticks[i].label, - &label_pos, anchor, &label_result); - last_label_pos = label_pos.y; - last_label_size = txt_size.h; - } - } - } - } - gog_axis_map_free (map); - } - - break; - - case GOG_AXIS_CIRCULAR: - break; - - case GOG_AXIS_RADIAL: { - double center_x, center_y, radius; - unsigned i, num_radii; - double circular_min, circular_max; - GogAxis *circular_axis; - GogChart *chart; - GSList *axis_list; - - center_x = area->x + (area->w/2); - center_y = area->y + (area->h/2); - radius = v->allocation.h > v->allocation.w - ? v->allocation.w / 2.0 - : v->allocation.h / 2.0; - - g_return_if_fail (v->parent != NULL); - g_return_if_fail (v->parent->model != NULL); - g_return_if_fail (IS_GOG_CHART(v->parent->model)); - chart = GOG_CHART(v->parent->model); - axis_list = gog_chart_get_axis (chart, GOG_AXIS_CIRCULAR); - g_return_if_fail (axis_list != NULL); - g_return_if_fail (axis_list->data != NULL); - g_return_if_fail (IS_GOG_AXIS(axis_list->data)); - circular_axis = GOG_AXIS(axis_list->data); - g_slist_free (axis_list); - gog_axis_get_bounds (circular_axis, &circular_min, &circular_max); - num_radii = rint (circular_max); - - for (i = 0; i < num_radii; i++) { - double angle_rad = i * (2.0 * M_PI / num_radii); - draw_axis_from_a_to_b (v, axis, - center_x, center_y, - center_x + radius * sin (angle_rad), - center_y - radius * cos (angle_rad), - i == 0); - } - break; - } - default : - break; - } - - gog_renderer_pop_style (v->renderer); -} - static void gog_axis_view_class_init (GogAxisViewClass *gview_klass) { GogViewClass *view_klass = (GogViewClass *) gview_klass; aview_parent_klass = g_type_class_peek_parent (gview_klass); - view_klass->size_request = gog_axis_view_size_request; - view_klass->render = gog_axis_view_render; + view_klass->size_allocate = gog_axis_view_size_allocate; + view_klass->padding_request = gog_axis_view_padding_request; + view_klass->render = gog_axis_view_render; } static GSF_CLASS (GogAxisView, gog_axis_view, gog_axis_view_class_init, NULL, - GOG_VIEW_TYPE) + GOG_AXIS_BASE_VIEW_TYPE) diff --git a/lib/goffice/graph/gog-axis.h b/lib/goffice-0.0.4/goffice/graph/gog-axis.h similarity index 56% rename from lib/goffice/graph/gog-axis.h rename to lib/goffice-0.0.4/goffice/graph/gog-axis.h index c9e284e1da..1b36b33d18 100644 --- a/lib/goffice/graph/gog-axis.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-axis.h @@ -15,70 +15,35 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ + #ifndef GOG_AXIS_H #define GOG_AXIS_H +#include #include +#include #include G_BEGIN_DECLS typedef enum { - GOG_AXIS_AT_LOW = -1, - GOG_AXIS_IN_MIDDLE = 0, - GOG_AXIS_AT_HIGH = 1 -} GogAxisPosition; - -typedef enum { - AXIS_ELEM_MIN = 0, - AXIS_ELEM_MAX, - AXIS_ELEM_MAJOR_TICK, - AXIS_ELEM_MINOR_TICK, - AXIS_ELEM_CROSS_POINT, - AXIS_ELEM_MAX_ENTRY + GOG_AXIS_ELEM_MIN = 0, + GOG_AXIS_ELEM_MAX, + GOG_AXIS_ELEM_MAJOR_TICK, + GOG_AXIS_ELEM_MINOR_TICK, + GOG_AXIS_ELEM_CROSS_POINT, + GOG_AXIS_ELEM_MAX_ENTRY } GogAxisElemType; -typedef enum { - GOG_AXIS_TICK_NONE, - GOG_AXIS_TICK_MAJOR, - GOG_AXIS_TICK_MINOR -} GogAxisTickTypes; - typedef struct { double position; GogAxisTickTypes type; char *label; } GogAxisTick; -#define GOG_AXIS_TYPE (gog_axis_get_type ()) -#define GOG_AXIS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_AXIS_TYPE, GogAxis)) -#define IS_GOG_AXIS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_AXIS_TYPE)) - -GType gog_axis_get_type (void); - -GogAxisType gog_axis_get_atype (GogAxis const *axis); -GogAxisPosition gog_axis_get_pos (GogAxis const *axis); -gboolean gog_axis_is_discrete (GogAxis const *axis); -gboolean gog_axis_get_bounds (GogAxis const *axis, - double *minima, double *maxima); -unsigned gog_axis_get_ticks (GogAxis *axis, GogAxisTick **ticks); -GOData *gog_axis_get_labels (GogAxis const *axis, - GogPlot **plot_that_labeled_axis); -double gog_axis_get_entry (GogAxis const *axis, GogAxisElemType i, - gboolean *user_defined); - -void gog_axis_add_contributor (GogAxis *axis, GogObject *contrib); -void gog_axis_del_contributor (GogAxis *axis, GogObject *contrib); -GSList const *gog_axis_contributors (GogAxis *axis); -void gog_axis_clear_contributors (GogAxis *axis); -void gog_axis_bound_changed (GogAxis *axis, GogObject *contrib); - -void gog_axis_view_padding_request (GogView *v, GogViewPadding *padding, - GogViewAllocation *bbox); - typedef struct _GogAxisMapDesc GogAxisMapDesc; typedef struct { @@ -90,24 +55,61 @@ typedef struct { struct _GogAxisMapDesc { double (*map) (GogAxisMap *map, double value); - double (*map_to_canvas) (GogAxisMap *map, double value, gboolean inverted); + double (*map_to_view) (GogAxisMap *map, double value); + double (*map_from_view) (GogAxisMap *map, double value); + gboolean (*map_finite) (double value); + double (*map_baseline) (GogAxisMap *map); + void (*map_bounds) (GogAxisMap *map, double *minimum, double *maximum); gboolean (*init) (GogAxisMap *map, double offset, double length); void (*destroy) (GogAxisMap *map); void (*auto_bound) (GogAxis *axis, double minimum, double maximum, double *bound); - void (*calc_ticks) (GogAxis *axis, - gboolean draw_labels); + void (*calc_ticks) (GogAxis *axis); char const *name; char const *description; }; GogAxisMap* gog_axis_map_new (GogAxis *axis, double offset, double length); double gog_axis_map (GogAxisMap *map, double x); -double gog_axis_map_to_canvas (GogAxisMap *map, double x); +double gog_axis_map_to_view (GogAxisMap *map, double x); +double gog_axis_map_from_view (GogAxisMap *map, double x); +gboolean gog_axis_map_finite (GogAxisMap *map, double value); +double gog_axis_map_get_baseline (GogAxisMap *map); +void gog_axis_map_get_extents (GogAxisMap *map, double *start, double *stop); +void gog_axis_map_get_bounds (GogAxisMap *map, double *minimum, double *maximum); void gog_axis_map_free (GogAxisMap *map); gboolean gog_axis_map_is_valid (GogAxisMap *map); +/*****************************************************************************/ + +#define GOG_AXIS_TYPE (gog_axis_get_type ()) +#define GOG_AXIS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_AXIS_TYPE, GogAxis)) +#define IS_GOG_AXIS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_AXIS_TYPE)) + +GType gog_axis_get_type (void); + +GogAxisType gog_axis_get_atype (GogAxis const *axis); +gboolean gog_axis_is_center_on_ticks (GogAxis const *axis); +gboolean gog_axis_is_discrete (GogAxis const *axis); +gboolean gog_axis_is_inverted (GogAxis const *axis); +gboolean gog_axis_get_bounds (GogAxis const *axis, + double *minima, double *maxima); +unsigned gog_axis_get_ticks (GogAxis *axis, GogAxisTick **ticks); +GOData *gog_axis_get_labels (GogAxis const *axis, + GogPlot **plot_that_labeled_axis); + +double gog_axis_get_entry (GogAxis const *axis, GogAxisElemType i, + gboolean *user_defined); + +void gog_axis_add_contributor (GogAxis *axis, GogObject *contrib); +void gog_axis_del_contributor (GogAxis *axis, GogObject *contrib); +GSList const *gog_axis_contributors (GogAxis *axis); +void gog_axis_clear_contributors (GogAxis *axis); +void gog_axis_bound_changed (GogAxis *axis, GogObject *contrib); + +GogGridLine *gog_axis_get_grid_line (GogAxis *axis, gboolean major); + G_END_DECLS #endif /* GOG_AXIS_H */ diff --git a/lib/goffice/graph/gog-chart-impl.h b/lib/goffice-0.0.4/goffice/graph/gog-chart-impl.h similarity index 92% rename from lib/goffice/graph/gog-chart-impl.h rename to lib/goffice-0.0.4/goffice/graph/gog-chart-impl.h index 40c45492c2..4b25a8c389 100644 --- a/lib/goffice/graph/gog-chart-impl.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-chart-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -42,6 +42,9 @@ struct _GogChart { GogObject *grid; GSList *axes; GogAxisSet axis_set; + + GogViewAllocation plot_area; + gboolean is_plot_area_manual; }; typedef GogOutlinedObjectClass GogChartClass; diff --git a/lib/goffice-0.0.4/goffice/graph/gog-chart-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-chart-prefs.glade new file mode 100644 index 0000000000..f3c030f375 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-chart-prefs.glade @@ -0,0 +1,448 @@ + + + + + + + True + GogChartPrefs + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + False + 0 + + + + True + False + 6 + + + + True + <b>Plot area position</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 24 + 0 + + + + True + False + 6 + + + + True + True + _Use manual positionning + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + 4 + 3 + False + 6 + 12 + + + + True + _Y: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + y_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + _Width: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + w_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + _Height: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + h_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 3 + 4 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 2 + 3 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 3 + 4 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 100 1 10 0 + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 100 1 10 0 + + + 1 + 2 + 1 + 2 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 100 1 10 0 + + + 1 + 2 + 2 + 3 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 100 1 10 0 + + + 1 + 2 + 3 + 4 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + _X: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + x_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + 0 + True + True + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + diff --git a/lib/goffice-0.0.4/goffice/graph/gog-chart.c b/lib/goffice-0.0.4/goffice/graph/gog-chart.c new file mode 100644 index 0000000000..75ff88c5a0 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-chart.c @@ -0,0 +1,1242 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-chart.c : + * + * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#ifndef HAVE_GLIB26 +#include "goffice/glib24_26-compat.h" +#endif + +const struct { + char const *name; + GogAxisSet const axis_set; +} axis_set_desc[] = { + { "none", GOG_AXIS_SET_NONE}, + { "x", GOG_AXIS_SET_X}, + { "xy", GOG_AXIS_SET_XY}, + { "xyz", GOG_AXIS_SET_XYZ}, + { "radar", GOG_AXIS_SET_RADAR}, + { "pseudo-3d", GOG_AXIS_SET_XY_pseudo_3d} +}; + +GogAxisSet +gog_axis_set_from_str (char const *str) +{ + GogAxisSet axis_set = GOG_AXIS_SET_NONE; + unsigned i; + gboolean found = FALSE; + + if (str == NULL) + return GOG_AXIS_SET_NONE; + + for (i = 0; i < G_N_ELEMENTS (axis_set_desc); i++) + if (strcmp (axis_set_desc[i].name, str) == 0) { + axis_set = axis_set_desc[i].axis_set; + found = TRUE; + break; + } + if (!found) + g_warning ("[GogAxisSet::from_str] unknown axis set (%s)", str); + return axis_set; +} + +static void +calc_polygon_parameters (GogViewAllocation const *area, GogChartMapPolarData *data, gboolean fill_area) +{ + double edges = data->th1 - data->th0 + 1.0; + double width = 2.0 * sin (2.0 * M_PI * go_rint (edges / 4.0) / edges); + double height = 1.0 - cos (2.0 * M_PI * go_rint (edges / 2.0) / edges); + + data->rx = area->w / width; + data->ry = area->h / height; + + if (!fill_area) { + data->rx = MIN (data->rx, data->ry); + data->ry = data->rx; + } + + data->cx = area->x + area->w / 2.0; + data->cy = area->y + data->ry + (area->h - data->ry * height) / 2.0; +} + +static void +calc_circle_parameters (GogViewAllocation const *area, GogChartMapPolarData *data, gboolean fill_area) +{ + double x_min, x_max, y_min, y_max; + + if (data->th0 >= data->th1) { + x_min = y_min = -1.0; + x_max = y_max = 1.0; + } else { + double x; + if (data->th0 > 2.0 * M_PI) { + x = data->th0 - fmod (data->th0, 2.0 * M_PI); + data->th0 -= x; + data->th1 -= x; + } else if (data->th1 < - 2.0 * M_PI) { + x = data->th1 - fmod (data->th1, 2.0 * M_PI); + data->th0 -= x; + data->th1 -= x; + } + if (data->th1 - data->th0 > go_add_epsilon (2 * M_PI)) + data->th1 = data->th0 + + fmod (data->th1 - data->th0, 2.0 * M_PI); + + x_min = x_max = y_min = y_max = 0; + x = cos (-data->th0); + x_min = MIN (x_min, x); x_max = MAX (x_max, x); + x = sin (-data->th0); + y_min = MIN (y_min, x); y_max = MAX (y_max, x); + x = cos (-data->th1); + x_min = MIN (x_min, x); x_max = MAX (x_max, x); + x = sin (-data->th1); + y_min = MIN (y_min, x); y_max = MAX (y_max, x); + + if (0 > data->th0 && 0 < data->th1) + x_max = 1.0; + if (M_PI / 2.0 > data->th0 && M_PI / 2.0 < data->th1) + y_min = -1.0; + if (M_PI > data->th0 && M_PI < data->th1) + x_min = -1.0; + if (3.0 * M_PI / 2.0 > data->th0 && 3.0 * M_PI / 2.0 < data->th1) + y_max = 1.0; + } + data->rx = area->w / (x_max - x_min); + data->ry = area->h / (y_max - y_min); + if (!fill_area) { + data->rx = MIN (data->rx, data->ry); + data->ry = data->rx; + } + data->cx = -x_min * data->rx + area->x + (area->w - data->rx * (x_max - x_min)) / 2.0; + data->cy = -y_min * data->ry + area->y + (area->h - data->ry * (y_max - y_min)) / 2.0; +} + +static void +null_map_2D (GogChartMap *map, double x, double y, double *u, double *v) +{ + g_warning ("[GogChartMap::map_2D] not implemented"); +} + +typedef struct { + double a, b; +} XMapData; + +static void +x_map_2D_to_view (GogChartMap *map, double x, double y, double *u, double *v) +{ + XMapData *data = map->data; + + *u = gog_axis_map_to_view (map->axis_map[0], x); + *v = data->a * y + data->b; +} + +typedef struct { + double a[2][2]; + double b[2]; +} XYMapData; + +static void +xy_map_2D_to_view (GogChartMap *map, double x, double y, double *u, double *v) +{ + *u = gog_axis_map_to_view (map->axis_map[0], x); + *v = gog_axis_map_to_view (map->axis_map[1], y); +} + +static void +polar_map_2D_to_view (GogChartMap *map, double x, double y, double *u, double *v) +{ + GogChartMapPolarData *data = (GogChartMapPolarData *) map->data; + double r = gog_axis_map_to_view (map->axis_map[1], y); + double t = gog_axis_map_to_view (map->axis_map[0], x); + + *u = data->cx + r * data->rx * cos (t); + *v = data->cy + r * data->ry * sin (t); +} + +GogChartMapPolarData * +gog_chart_map_get_polar_parms (GogChartMap *map) +{ + return (GogChartMapPolarData *) map->data; +} + +GogChartMap * +gog_chart_map_new (GogChart *chart, GogViewAllocation const *area, + GogAxis *axis0, GogAxis *axis1, GogAxis *axis2, + gboolean fill_area) +{ + GogChartMap *map; + GogAxisSet axis_set; + + g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); + + map = g_new (GogChartMap, 1); + + g_object_ref (chart); + map->chart = chart; + map->area = *area; + map->data = NULL; + map->is_valid = FALSE; + + axis_set = gog_chart_get_axis_set (chart); + switch (axis_set) { + case GOG_AXIS_SET_X: + { + XMapData *data = g_new (XMapData, 1); + + map->axis_map[0] = gog_axis_map_new (axis0, map->area.x, map->area.w); + map->axis_map[1] = map->axis_map[2] = NULL; + + data->b = area->y + area->h; + data->a = - area->h; + + map->map_2D_to_view = x_map_2D_to_view; + map->data = data; + + map->is_valid = gog_axis_map_is_valid (map->axis_map [0]); + break; + } + case GOG_AXIS_SET_XY: + case GOG_AXIS_SET_XY_pseudo_3d: + { + map->axis_map[0] = gog_axis_map_new (axis0, map->area.x, map->area.w); + map->axis_map[1] = gog_axis_map_new (axis1, map->area.y + map->area.h, + -map->area.h); + map->axis_map[2] = NULL; + + map->data = NULL; + map->map_2D_to_view = xy_map_2D_to_view; + + map->is_valid = gog_axis_map_is_valid (map->axis_map[0]) && + gog_axis_map_is_valid (map->axis_map[1]); + break; + } + case GOG_AXIS_SET_RADAR: + { + double minimum, maximum; + GogChartMapPolarData *data = g_new (GogChartMapPolarData, 1); + + map->axis_map[0] = gog_axis_map_new (axis0, 0.0, 1.0); + gog_axis_map_get_bounds (map->axis_map[0], &minimum, &maximum); + if (gog_axis_is_discrete (axis0)) { + data->th0 = go_rint (minimum); + data->th1 = go_rint (maximum); + calc_polygon_parameters (area, data, fill_area); + gog_axis_map_free (map->axis_map[0]); + map->axis_map[0] = gog_axis_map_new (axis0, + - M_PI / 2.0, + 2.0 * M_PI * (maximum - minimum) / (maximum - minimum + 1)); + } else { + minimum *= 2.0 * M_PI / 360.0; + maximum *= 2.0 * M_PI / 360.0; + data->th0 = minimum; + data->th1 = maximum; + calc_circle_parameters (area, data, fill_area); + gog_axis_map_free (map->axis_map[0]); + map->axis_map[0] = gog_axis_map_new (axis0, -minimum, + minimum - maximum); + } + map->axis_map[1] = gog_axis_map_new (axis1, 0.0, 1.0); + map->axis_map[2] = NULL; + + map->data = data; + map->map_2D_to_view = polar_map_2D_to_view; + + map->is_valid = gog_axis_map_is_valid (map->axis_map[0]) && + gog_axis_map_is_valid (map->axis_map[1]); + break; + } + case GOG_AXIS_SET_XYZ: + case GOG_AXIS_SET_ALL: + case GOG_AXIS_SET_NONE: + case GOG_AXIS_SET_UNKNOWN: + g_warning ("[Chart::map_new] not implemented for this axis set (%i)", + axis_set); + map->map_2D_to_view = null_map_2D; + break; + } + + return map; +} + +void +gog_chart_map_2D_to_view (GogChartMap *map, double x, double y, double *u, double *v) +{ + return (map->map_2D_to_view) (map, x, y, u, v); +} + +GogAxisMap * +gog_chart_map_get_axis_map (GogChartMap *map, unsigned i) +{ + g_return_val_if_fail (map != NULL, NULL); + g_return_val_if_fail (i < 3, NULL); + + return map->axis_map[i]; +} + +gboolean +gog_chart_map_is_valid (GogChartMap *map) +{ + g_return_val_if_fail (map != NULL, FALSE); + + return map->is_valid; +} + +void +gog_chart_map_free (GogChartMap *map) +{ + int i; + + g_return_if_fail (map != NULL); + + for (i = 0; i < 3; i++) + if (map->axis_map[i] != NULL) + gog_axis_map_free (map->axis_map[i]); + + g_free (map->data); + g_object_unref (map->chart); + g_free (map); +} + +enum { + CHART_PROP_0, + CHART_PROP_CARDINALITY_VALID, + CHART_PROP_PLOT_AREA, + CHART_PROP_PLOT_AREA_IS_MANUAL +}; + +static GType gog_chart_view_get_type (void); +static GObjectClass *chart_parent_klass; + +static void +gog_chart_update (GogObject *obj) +{ + GogChart *chart = GOG_CHART (obj); + unsigned full = chart->full_cardinality; + unsigned visible = chart->visible_cardinality; + + gog_chart_get_cardinality (chart, NULL, NULL); + + if (full != chart->full_cardinality || + visible != chart->visible_cardinality) + g_object_notify (G_OBJECT (chart), "cardinality-valid"); +} + +static void +gog_chart_finalize (GObject *obj) +{ + GogChart *chart = GOG_CHART (obj); + + /* on exit the role remove routines are not called */ + g_slist_free (chart->plots); + g_slist_free (chart->axes); + + (chart_parent_klass->finalize) (obj); +} + +static void +gog_chart_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogChart *chart = GOG_CHART (obj); + char **str_doubles; + char const *str; + + switch (param_id) { + case CHART_PROP_PLOT_AREA: + str = g_value_get_string (value); + str_doubles = g_strsplit (str, " ", 4); + if (g_strv_length (str_doubles) != 4) { + g_strfreev (str_doubles); + break; + } + chart->plot_area.x = g_ascii_strtod (str_doubles[0], NULL); + chart->plot_area.y = g_ascii_strtod (str_doubles[1], NULL); + chart->plot_area.w = g_ascii_strtod (str_doubles[2], NULL); + chart->plot_area.h = g_ascii_strtod (str_doubles[3], NULL); + g_strfreev (str_doubles); + break; + case CHART_PROP_PLOT_AREA_IS_MANUAL: + chart->is_plot_area_manual = g_value_get_boolean (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } +} + +static void +gog_chart_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogChart *chart = GOG_CHART (obj); + GString *string; + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; + + switch (param_id) { + case CHART_PROP_CARDINALITY_VALID: + g_value_set_boolean (value, chart->cardinality_valid); + break; + case CHART_PROP_PLOT_AREA: + string = g_string_new (""); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), chart->plot_area.x)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), chart->plot_area.y)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), chart->plot_area.w)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), chart->plot_area.h)); + g_value_set_string (value, string->str); + g_string_free (string, TRUE); + break; + case CHART_PROP_PLOT_AREA_IS_MANUAL: + g_value_set_boolean (value, chart->is_plot_area_manual); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +typedef struct { + GtkWidget *x_spin, *y_spin, *w_spin, *h_spin; + gulong w_spin_signal, h_spin_signal; + GtkWidget *manual_toggle; + GogChart *chart; + GladeXML *gui; +} ChartPrefState; + +static void +chart_pref_state_free (ChartPrefState *state) +{ + g_object_unref (state->chart); + g_object_unref (state->gui); +} + +static void +cb_plot_area_changed (GtkWidget *spin, ChartPrefState *state) +{ + GogViewAllocation pos; + double value; + double max; + + value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (spin)) / 100.0; + + gog_chart_get_plot_area (state->chart, &pos); + if (spin == state->x_spin) { + pos.x = value; + max = 1.0 - pos.x; + g_signal_handler_block (state->w_spin, state->w_spin_signal); + gtk_spin_button_set_range (GTK_SPIN_BUTTON (state->w_spin), 0.0, max * 100.0); + if (pos.w > max) pos.w = max; + gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->w_spin), pos.w * 100.0); + g_signal_handler_unblock (state->w_spin, state->w_spin_signal); + } + else if (spin == state->y_spin) { + pos.y = value; + max = 1.0 - pos.y; + g_signal_handler_block (state->h_spin, state->h_spin_signal); + gtk_spin_button_set_range (GTK_SPIN_BUTTON (state->h_spin), 0.0, max * 100.0); + if (pos.h > max) pos.h = max; + gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->h_spin), pos.w * 100.0); + g_signal_handler_unblock (state->h_spin, state->h_spin_signal); + } + else if (spin == state->w_spin) { + pos.w = value; + } + else if (spin == state->h_spin) { + pos.h = value; + } + gog_chart_set_plot_area (state->chart, &pos); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->manual_toggle), TRUE); +} + +static void +cb_manual_toggle_changed (GtkToggleButton *button, ChartPrefState *state) +{ + gog_chart_set_plot_area (state->chart, + gtk_toggle_button_get_active (button) ? + &state->chart->plot_area : NULL); +} + +static void +gog_chart_populate_editor (GogObject *gobj, + GogEditor *editor, + G_GNUC_UNUSED GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + GogChart *chart = GOG_CHART (gobj); + GtkWidget *w; + GladeXML *gui; + ChartPrefState *state; + static guint chart_pref_page = 0; + + gui = go_libglade_new ("gog-chart-prefs.glade", "gog_chart_prefs", NULL, cc); + if (gui == NULL) + return; + + state = g_new (ChartPrefState, 1); + state->chart = chart; + state->gui = gui; + g_object_ref (G_OBJECT (gobj)); + + state->x_spin = glade_xml_get_widget (gui, "x_spin"); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->x_spin), + chart->plot_area.x * 100.0); + g_signal_connect (G_OBJECT (state->x_spin), "value-changed", + G_CALLBACK (cb_plot_area_changed), state); + + state->y_spin = glade_xml_get_widget (gui, "y_spin"); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->y_spin), + chart->plot_area.y * 100.0); + g_signal_connect (G_OBJECT (state->y_spin), "value-changed", + G_CALLBACK (cb_plot_area_changed), state); + + state->w_spin = glade_xml_get_widget (gui, "w_spin"); + gtk_spin_button_set_range (GTK_SPIN_BUTTON (state->w_spin), + 0.0, (1.0 - chart->plot_area.x) * 100.0); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->w_spin), + 100.0 * chart->plot_area.w); + state->w_spin_signal = g_signal_connect (G_OBJECT (state->w_spin), "value-changed", + G_CALLBACK (cb_plot_area_changed), state); + + state->h_spin = glade_xml_get_widget (gui, "h_spin"); + gtk_spin_button_set_range (GTK_SPIN_BUTTON (state->h_spin), + 0.0, (1.0 - chart->plot_area.y) * 100.0); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (state->h_spin), + 100.0 * chart->plot_area.h); + state->h_spin_signal = g_signal_connect (G_OBJECT (state->h_spin), "value-changed", + G_CALLBACK (cb_plot_area_changed), state); + + state->manual_toggle = glade_xml_get_widget (gui, "manual_toggle"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->manual_toggle), + chart->is_plot_area_manual); + g_signal_connect (G_OBJECT (state->manual_toggle), "toggled", + G_CALLBACK (cb_manual_toggle_changed), state); + + (GOG_OBJECT_CLASS(chart_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); + + w = glade_xml_get_widget (gui, "gog_chart_prefs"); + g_object_set_data_full (G_OBJECT (w), "state", state, + (GDestroyNotify) chart_pref_state_free); + gog_editor_add_page (editor, w, _("Plot area")); + + gog_editor_set_store_page (editor, &chart_pref_page); +} + +static void +gog_chart_children_reordered (GogObject *obj) +{ + GSList *ptr, *accum = NULL; + GogChart *chart = GOG_CHART (obj); + + for (ptr = obj->children; ptr != NULL ; ptr = ptr->next) + if (IS_GOG_PLOT (ptr->data)) + accum = g_slist_prepend (accum, ptr->data); + g_slist_free (chart->plots); + chart->plots = g_slist_reverse (accum); + + gog_chart_request_cardinality_update (chart); +} + +static void +role_plot_post_add (GogObject *parent, GogObject *plot) +{ + GogChart *chart = GOG_CHART (parent); + gboolean ok = TRUE; + + /* APPEND to keep order, there won't be that many */ + chart->plots = g_slist_append (chart->plots, plot); + gog_chart_request_cardinality_update (chart); + + if (chart->plots->next == NULL) + ok = gog_chart_axis_set_assign (chart, + gog_plot_axis_set_pref (GOG_PLOT (plot))); + ok |= gog_plot_axis_set_assign (GOG_PLOT (plot), + chart->axis_set); + + /* a quick post condition to keep us on our toes */ + g_return_if_fail (ok); +} + +static void +role_plot_pre_remove (GogObject *parent, GogObject *plot) +{ + GogChart *chart = GOG_CHART (parent); + gog_plot_axis_clear (GOG_PLOT (plot), GOG_AXIS_SET_ALL); + chart->plots = g_slist_remove (chart->plots, plot); + gog_chart_request_cardinality_update (chart); + + if (chart->plots == NULL) + gog_chart_axis_set_assign (chart, GOG_AXIS_SET_UNKNOWN); + + if (chart->grid != NULL && + chart->axis_set != GOG_AXIS_SET_XY && + chart->axis_set != GOG_AXIS_SET_X && + chart->axis_set != GOG_AXIS_SET_XY_pseudo_3d && + chart->axis_set != GOG_AXIS_SET_RADAR) { + GogObject *grid = chart->grid; /* clear_parent clears ::grid */ + gog_object_clear_parent (GOG_OBJECT (grid)); + g_object_unref (grid); + } +} + +static gboolean +role_grid_can_add (GogObject const *parent) +{ + GogChart const *chart = GOG_CHART (parent); + return chart->grid == NULL && + (chart->axis_set == GOG_AXIS_SET_XY || + chart->axis_set == GOG_AXIS_SET_X || + chart->axis_set == GOG_AXIS_SET_XY_pseudo_3d || + chart->axis_set == GOG_AXIS_SET_RADAR); +} + +static void +role_grid_post_add (GogObject *parent, GogObject *child) +{ + GogChart *chart = GOG_CHART (parent); + g_return_if_fail (chart->grid == NULL); + chart->grid = child; +} + +static void +role_grid_pre_remove (GogObject *parent, GogObject *grid) +{ + GogChart *chart = GOG_CHART (parent); + g_return_if_fail (chart->grid == grid); + chart->grid = NULL; +} + +static gboolean +axis_can_add (GogObject const *parent, GogAxisType t) +{ + GogChart *chart = GOG_CHART (parent); + if (chart->axis_set == GOG_AXIS_SET_UNKNOWN) + return FALSE; + return (chart->axis_set & (1 << t)) != 0; +} + +static gboolean +axis_can_remove (GogObject const *child) +{ + return NULL == gog_axis_contributors (GOG_AXIS (child)); +} + +static void +axis_post_add (GogObject *axis, GogAxisType t) +{ + GogChart *chart = GOG_CHART (axis->parent); + g_object_set (G_OBJECT (axis), "type", (int)t, NULL); + chart->axes = g_slist_prepend (chart->axes, axis); + + gog_axis_base_set_position (GOG_AXIS_BASE (axis), GOG_AXIS_AUTO); +} + +static void +axis_pre_remove (GogObject *parent, GogObject *axis) +{ + GogChart *chart = GOG_CHART (parent); + gog_axis_clear_contributors (GOG_AXIS (axis)); + chart->axes = g_slist_remove (chart->axes, axis); +} + +static gboolean x_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_X); } +static void x_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_X); } +static gboolean y_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_Y); } +static void y_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_Y); } +static gboolean z_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_Z); } +static void z_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_Z); } +static gboolean circular_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_CIRCULAR); } +static void circular_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_CIRCULAR); } +static gboolean radial_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_RADIAL); } +static void radial_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_RADIAL); } +static gboolean pseudo_3d_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_PSEUDO_3D); } +static void pseudo_3d_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_PSEUDO_3D); } + +static GogObjectRole const roles[] = { + { N_("Grid"), "GogGrid", 0, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + role_grid_can_add, NULL, NULL, role_grid_post_add, role_grid_pre_remove, NULL, { -1 } }, + { N_("X-Axis"), "GogAxis", 1, + GOG_POSITION_PADDING, GOG_POSITION_PADDING, GOG_OBJECT_NAME_BY_ROLE, + x_axis_can_add, axis_can_remove, NULL, x_axis_post_add, axis_pre_remove, NULL, + { GOG_AXIS_X } }, + { N_("Y-Axis"), "GogAxis", 2, + GOG_POSITION_PADDING, GOG_POSITION_PADDING, GOG_OBJECT_NAME_BY_ROLE, + y_axis_can_add, axis_can_remove, NULL, y_axis_post_add, axis_pre_remove, NULL, + { GOG_AXIS_Y } }, + { N_("Z-Axis"), "GogAxis", 3, + GOG_POSITION_PADDING, GOG_POSITION_PADDING, GOG_OBJECT_NAME_BY_ROLE, + z_axis_can_add, axis_can_remove, NULL, z_axis_post_add, axis_pre_remove, NULL, + { GOG_AXIS_Z } }, + { N_("Circular-Axis"), "GogAxis", 1, + GOG_POSITION_PADDING, GOG_POSITION_PADDING, GOG_OBJECT_NAME_BY_ROLE, + circular_axis_can_add, axis_can_remove, NULL, circular_axis_post_add, axis_pre_remove, NULL, + { GOG_AXIS_CIRCULAR } }, + { N_("Radial-Axis"), "GogAxis", 2, + GOG_POSITION_PADDING, GOG_POSITION_PADDING, GOG_OBJECT_NAME_BY_ROLE, + radial_axis_can_add, axis_can_remove, NULL, radial_axis_post_add, axis_pre_remove, NULL, + { GOG_AXIS_RADIAL } }, + { N_("Pseudo-3D-Axis"), "GogAxis", 3, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + pseudo_3d_axis_can_add, axis_can_remove, NULL, pseudo_3d_axis_post_add, axis_pre_remove, NULL, + { GOG_AXIS_PSEUDO_3D } }, + { N_("Plot"), "GogPlot", 4, /* keep the axis before the plots */ + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_TYPE, + NULL, NULL, NULL, role_plot_post_add, role_plot_pre_remove, NULL, { -1 } }, + { N_("Title"), "GogLabel", 10, + GOG_POSITION_COMPASS|GOG_POSITION_ANY_MANUAL, + GOG_POSITION_N|GOG_POSITION_ALIGN_CENTER, + GOG_OBJECT_NAME_BY_ROLE, + NULL, NULL, NULL, NULL, NULL, NULL, { -1 } }, + { N_("Legend"), "GogLegend", 11, + GOG_POSITION_COMPASS|GOG_POSITION_ANY_MANUAL, + GOG_POSITION_E|GOG_POSITION_ALIGN_CENTER, + GOG_OBJECT_NAME_BY_ROLE, + NULL, NULL, NULL, NULL, NULL, NULL, { -1 } } +}; + +static void +gog_chart_class_init (GogObjectClass *gog_klass) +{ + GObjectClass *gobject_klass = (GObjectClass *)gog_klass; + + chart_parent_klass = g_type_class_peek_parent (gog_klass); + gobject_klass->finalize = gog_chart_finalize; + gobject_klass->set_property = gog_chart_set_property; + gobject_klass->get_property = gog_chart_get_property; + + gog_klass->populate_editor = gog_chart_populate_editor; + + gog_klass->can_manual_size = TRUE; + + g_object_class_install_property (gobject_klass, CHART_PROP_CARDINALITY_VALID, + g_param_spec_boolean ("cardinality-valid", "cardinality-valid", + "Is the charts cardinality currently vaid", + FALSE, G_PARAM_READABLE)); + g_object_class_install_property (gobject_klass, CHART_PROP_PLOT_AREA, + g_param_spec_string ("plot-area", "Plot area", + "Position and size of plot area, in percentage of chart size", + "0 0 1 1", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, CHART_PROP_PLOT_AREA_IS_MANUAL, + g_param_spec_boolean ("is-plot-area-manual", "Is plot area manual", + "Is plot area manual", + FALSE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + + gog_klass->view_type = gog_chart_view_get_type (); + gog_klass->update = gog_chart_update; + gog_klass->children_reordered = gog_chart_children_reordered; + gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); +} + +static void +gog_chart_init (GogChart *chart) +{ + chart->x = 0; + chart->y = 0; + chart->cols = 0; + chart->rows = 0; + + /* start as true so that we can queue an update when it changes */ + chart->cardinality_valid = TRUE; + chart->axis_set = GOG_AXIS_SET_UNKNOWN; + + chart->is_plot_area_manual = FALSE; + chart->plot_area.x = + chart->plot_area.y = 0.0; + chart->plot_area.w = + chart->plot_area.h = 1.0; +} + +GSF_CLASS (GogChart, gog_chart, + gog_chart_class_init, gog_chart_init, + GOG_OUTLINED_OBJECT_TYPE) + +/** + * gog_chart_get_position : + * @chart : const #GogChart + * @x : + * @y : + * @cols : + * @rows : + * + * Returns TRUE if the chart has been positioned. + **/ +gboolean +gog_chart_get_position (GogChart const *chart, + unsigned *x, unsigned *y, unsigned *cols, unsigned *rows) +{ + g_return_val_if_fail (GOG_CHART (chart), FALSE); + + if (chart->cols <= 0 || chart->rows <= 0) + return FALSE; + + if (x != NULL) *x = chart->x; + if (y != NULL) *y = chart->y; + if (cols != NULL) *cols = chart->cols; + if (rows != NULL) *rows = chart->rows; + + return TRUE; +} + +/** + * gog_chart_set_position : + * @chart : #GogChart + * @x : + * @y : + * @cols : + * @rows : + * + **/ +void +gog_chart_set_position (GogChart *chart, + unsigned x, unsigned y, unsigned cols, unsigned rows) +{ + g_return_if_fail (GOG_CHART (chart) != NULL); + + if (chart->x == x && chart->y == y && + chart->cols == cols && chart->rows == rows) + return; + + chart->x = x; + chart->y = y; + chart->cols = cols; + chart->rows = rows; + + gog_graph_validate_chart_layout (GOG_GRAPH (GOG_OBJECT (chart)->parent)); + gog_object_emit_changed (GOG_OBJECT (chart), TRUE); +} + +/** + * gog_chart_get_plot_area : + * @chart : #GogChart + * @plot_area : #GogViewAllocation + * + * Stores plot area in plot_area, in fraction of chart size, and returns + * TRUE if plot area position is manual. + **/ +gboolean +gog_chart_get_plot_area (GogChart *chart, GogViewAllocation *plot_area) +{ + if (plot_area != NULL) + *plot_area = chart->plot_area; + + return chart->is_plot_area_manual; +} + +/** + * gog_chart_set_plot_area : + * @chart : #GogChart + * @plot_area : #GogViewAllocation + * + * If plot_area != NULL, sets plot area size and location, in fraction + * of chart size, and sets GogChart::is_plot_area_manual flag to TRUE. + * If plot_area == NULL, sets GogChart::is_plot_area_manual to FALSE. + **/ +void +gog_chart_set_plot_area (GogChart *chart, GogViewAllocation const *plot_area) +{ + if (plot_area == NULL) { + chart->is_plot_area_manual = FALSE; + } else { + chart->plot_area = *plot_area; + chart->is_plot_area_manual = TRUE; + } + gog_object_emit_changed (GOG_OBJECT (chart), TRUE); +} + +/* FIXME: function description here */ +void +gog_chart_get_cardinality (GogChart *chart, unsigned *full, unsigned *visible) +{ + GSList *ptr; + unsigned tmp_full, tmp_visible; + + g_return_if_fail (GOG_CHART (chart) != NULL); + + if (!chart->cardinality_valid) { + chart->cardinality_valid = TRUE; + chart->full_cardinality = chart->visible_cardinality = 0; + for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) { + gog_plot_get_cardinality (ptr->data, &tmp_full, &tmp_visible); + chart->full_cardinality += tmp_full; + chart->visible_cardinality += tmp_visible; + } + } + + if (full != NULL) + *full = chart->full_cardinality; + if (visible != NULL) + *visible = chart->visible_cardinality; +} + +void +gog_chart_request_cardinality_update (GogChart *chart) +{ + g_return_if_fail (GOG_CHART (chart) != NULL); + + if (chart->cardinality_valid) { + chart->cardinality_valid = FALSE; + gog_object_request_update (GOG_OBJECT (chart)); + } +} + +void +gog_chart_foreach_elem (GogChart *chart, gboolean only_visible, + GogEnumFunc handler, gpointer data) +{ + GSList *ptr; + + g_return_if_fail (GOG_CHART (chart) != NULL); + g_return_if_fail (chart->cardinality_valid); + + for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) + gog_plot_foreach_elem (ptr->data, only_visible, handler, data); +} + +GSList * +gog_chart_get_plots (GogChart const *chart) +{ + g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); + return chart->plots; +} + +GogAxisSet +gog_chart_get_axis_set (GogChart const *chart) +{ + g_return_val_if_fail (GOG_CHART (chart) != NULL, GOG_AXIS_SET_UNKNOWN); + return chart->axis_set; +} + +gboolean +gog_chart_axis_set_is_valid (GogChart const *chart, GogAxisSet type) +{ + GSList *ptr; + + g_return_val_if_fail (GOG_CHART (chart) != NULL, FALSE); + + for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) + if (!gog_plot_axis_set_is_valid (ptr->data, type)) + return FALSE; + return TRUE; +} + +static void +gog_chart_add_axis (GogChart *chart, GogAxisType type) +{ + unsigned i = G_N_ELEMENTS (roles); + while (i-- > 0) + if (roles[i].user.i == (int)type) { + gog_object_add_by_role (GOG_OBJECT (chart), roles + i, NULL); + return; + } + g_warning ("unknown axis type %d", type); +} + +gboolean +gog_chart_axis_set_assign (GogChart *chart, GogAxisSet axis_set) +{ + GogAxis *axis; + GSList *ptr; + GogAxisType type; + + g_return_val_if_fail (GOG_CHART (chart) != NULL, FALSE); + + if (chart->axis_set == axis_set) + return TRUE; + chart->axis_set = axis_set; + + if (axis_set == GOG_AXIS_SET_UNKNOWN) + return TRUE; + + /* Add at least 1 instance of any required axis */ + for (type = 0 ; type < GOG_AXIS_TYPES ; type++) + if ((axis_set & (1 << type))) { + GSList *tmp = gog_chart_get_axes (chart, type); + if (tmp == NULL) + gog_chart_add_axis (chart, type); + else + g_slist_free (tmp); + } + + /* link the plots */ + for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) + if (!gog_plot_axis_set_assign (ptr->data, axis_set)) + return FALSE; + + /* remove any existing axis that do not fit this scheme */ + for (ptr = GOG_OBJECT (chart)->children ; ptr != NULL ; ) { + axis = ptr->data; + ptr = ptr->next; /* list may change under us */ + if (IS_GOG_AXIS (axis)) { + type = -1; + g_object_get (G_OBJECT (axis), "type", &type, NULL); + if (type < 0 || type >= GOG_AXIS_TYPES) { + g_warning ("Invalid axis"); + continue; + } + + if (0 == (axis_set & (1 << type))) { + gog_object_clear_parent (GOG_OBJECT (axis)); + g_object_unref (axis); + } + } + } + + return TRUE; +} + +/** + * gog_chart_get_axes : + * @chart : #GogChart + * @target : #GogAxisType + * + * Return a list which the caller must free of all axis of type @target + * associated with @chart. + **/ +GSList * +gog_chart_get_axes (GogChart const *chart, GogAxisType target) +{ + GSList *ptr, *res = NULL; + GogAxis *axis; + int type; + + g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); + + for (ptr = GOG_OBJECT (chart)->children ; ptr != NULL ; ptr = ptr->next) { + axis = ptr->data; + if (IS_GOG_AXIS (axis)) { + type = -1; + g_object_get (G_OBJECT (axis), "type", &type, NULL); + if (type < 0 || type >= GOG_AXIS_TYPES) { + g_warning ("Invalid axis"); + continue; + } + if (type == target) + res = g_slist_prepend (res, axis); + } + } + + return res; +} + +/** + * gog_chart_get_grid : + * @chart : #GogChart + * + * Returns the grid associated with @chart if one exists + * otherwise NULL. + **/ +GogGrid * +gog_chart_get_grid (GogChart const *chart) +{ + g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); + return GOG_GRID (chart->grid); +} + +/*********************************************************************/ + +typedef struct { + GogOutlinedView base; + + GogViewAllocation plot_area; +} GogChartView; +typedef GogOutlinedViewClass GogChartViewClass; + +#define GOG_CHART_VIEW_TYPE (gog_chart_view_get_type ()) +#define GOG_CHART_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_CHART_VIEW_TYPE, GogChartView)) +#define IS_GOG_CHART_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_CHART_VIEW_TYPE)) + +static GogViewClass *cview_parent_klass; + +GogViewAllocation const * +gog_chart_view_get_plot_area (GogView const *view) +{ + GogChartView *chart_view = GOG_CHART_VIEW (view); + + g_return_val_if_fail ((GOG_CHART_VIEW (view) != NULL), NULL); + + return & (chart_view->plot_area); +} + +static void +gog_chart_view_size_allocate (GogView *view, GogViewAllocation const *bbox) +{ + GSList *ptr; + GogView *child; + GogChartView *chart_view = GOG_CHART_VIEW (view); + GogViewAllocation tmp, *plot_area = &chart_view->plot_area; + GogViewPadding padding; + GogChart *chart = GOG_CHART (gog_view_get_model (view)); + + (cview_parent_klass->size_allocate) (view, bbox); + + if (chart->is_plot_area_manual) { + plot_area->x = bbox->x + chart->plot_area.x * bbox->w; + plot_area->y = bbox->y + chart->plot_area.y * bbox->h; + plot_area->w = chart->plot_area.w * bbox->w; + plot_area->h = chart->plot_area.h * bbox->h; + } else + *plot_area = view->residual; + + tmp = *plot_area; + gog_view_padding_request (view, plot_area, &padding); + + if (!chart->is_plot_area_manual) { + plot_area->x += padding.wl; + plot_area->w -= padding.wl + padding.wr; + plot_area->y += padding.ht; + plot_area->h -= padding.ht + padding.hb; + } else { + tmp.x -= padding.wl; + tmp.w += padding.wl + padding.wr; + tmp.y -= padding.ht; + tmp.h += padding.ht + padding.hb; + } + + for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { + child = ptr->data; + if (GOG_POSITION_IS_PADDING (child->model->position)) { + gog_view_size_allocate (child, &tmp); + } + } + + /* by default, overlay all GOG_POSITION_SPECIAL children in residual */ + for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { + child = ptr->data; + if (GOG_POSITION_IS_SPECIAL (child->model->position)) + gog_view_size_allocate (child, plot_area); + } +} + +static void +gog_chart_view_init (GogChartView *cview) +{ +} + +static void +grid_line_render (GSList *start_ptr, GogViewAllocation const *bbox) +{ + GSList *ptr, *child_ptr; + GogView *child_view, *axis_child_view; + + /* Render minor lines first */ + for (ptr = start_ptr; ptr != NULL; ptr = ptr->next) { + child_view = ptr->data; + if (IS_GOG_AXIS (child_view->model)) { + for (child_ptr = child_view->children; child_ptr != NULL; child_ptr = child_ptr->next) { + axis_child_view = child_ptr->data; + if (IS_GOG_GRID_LINE (axis_child_view->model) && + gog_grid_line_is_minor (GOG_GRID_LINE (axis_child_view->model))) + gog_view_render (axis_child_view, bbox); + } + } + } + /* then render major lines */ + for (ptr = start_ptr; ptr != NULL; ptr = ptr->next) { + child_view = ptr->data; + if (IS_GOG_AXIS (child_view->model)) { + for (child_ptr = child_view->children; child_ptr != NULL; child_ptr = child_ptr->next) { + axis_child_view = child_ptr->data; + if (IS_GOG_GRID_LINE (axis_child_view->model) && + !gog_grid_line_is_minor (GOG_GRID_LINE (axis_child_view->model))) + gog_view_render (axis_child_view, bbox); + } + } + } +} + +static void +plot_render (GogView *view, GogViewAllocation const *bbox) +{ + GSList *ptr; + GogView *child_view; + + /* Render some plots before axes */ + for (ptr = view->children ; ptr != NULL ; ptr = ptr->next) { + child_view = ptr->data; + if (IS_GOG_PLOT (child_view->model) && + GOG_PLOT (child_view->model)->render_before_axes) + gog_view_render (ptr->data, bbox); + } +} + +static void +gog_chart_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GSList *ptr; + GogView *child_view; + gboolean grid_line_rendered = FALSE; + + cview_parent_klass->render (view, bbox); + + /* KLUDGE: render grid lines before axis */ + for (ptr = view->children ; ptr != NULL ; ptr = ptr->next) { + child_view = ptr->data; + if (!grid_line_rendered && IS_GOG_AXIS (child_view->model)) { + grid_line_render (ptr, bbox); + plot_render (view, bbox); + grid_line_rendered = TRUE; + } + if (IS_GOG_PLOT (child_view->model)) { + if (!GOG_PLOT (child_view->model)->render_before_axes) + gog_view_render (ptr->data, bbox); + } else + gog_view_render (ptr->data, bbox); + } + +} + +static void +gog_chart_view_class_init (GogChartViewClass *gview_klass) +{ + GogViewClass *view_klass = (GogViewClass *) gview_klass; + GogOutlinedViewClass *oview_klass = (GogOutlinedViewClass *) gview_klass; + + cview_parent_klass = g_type_class_peek_parent (gview_klass); + view_klass->size_allocate = gog_chart_view_size_allocate; + view_klass->clip = FALSE; + view_klass->render = gog_chart_view_render; + oview_klass->call_parent_render = FALSE; +} + +static GSF_CLASS (GogChartView, gog_chart_view, + gog_chart_view_class_init, gog_chart_view_init, + GOG_OUTLINED_VIEW_TYPE) diff --git a/lib/goffice/graph/gog-chart.h b/lib/goffice-0.0.4/goffice/graph/gog-chart.h similarity index 60% rename from lib/goffice/graph/gog-chart.h rename to lib/goffice-0.0.4/goffice/graph/gog-chart.h index fba7a5dd8d..e558f67528 100644 --- a/lib/goffice/graph/gog-chart.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-chart.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,10 +23,41 @@ #define GOG_CHART_H #include +#include #include G_BEGIN_DECLS +GogAxisSet gog_axis_set_from_str (char const *str); + +typedef struct { + double cx, cy; + double rx, ry; + double th0, th1; +} GogChartMapPolarData; + +typedef struct _GogChartMap GogChartMap; + +struct _GogChartMap { + GogChart *chart; + GogViewAllocation area; + gpointer data; + GogAxisMap *axis_map[3]; + gboolean is_valid; + + void (*map_2D_to_view) (GogChartMap *map, double x, double y, double *u, double *v); +}; + +GogChartMap *gog_chart_map_new (GogChart *chart, GogViewAllocation const *area, + GogAxis *axis0, GogAxis *axis1, GogAxis *axis2, + gboolean fill_area); +void gog_chart_map_2D_to_view (GogChartMap *map, double x, double y, double *u, double *v); +GogAxisMap *gog_chart_map_get_axis_map (GogChartMap *map, unsigned i); +gboolean gog_chart_map_is_valid (GogChartMap *map); +void gog_chart_map_free (GogChartMap *map); + +GogChartMapPolarData *gog_chart_map_get_polar_parms (GogChartMap *map); + #define GOG_CHART_TYPE (gog_chart_get_type ()) #define GOG_CHART(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_CHART_TYPE, GogChart)) #define IS_GOG_CHART(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_CHART_TYPE)) @@ -37,6 +68,8 @@ gboolean gog_chart_get_position (GogChart const *chart, unsigned *x, unsigned unsigned *cols, unsigned *rows); void gog_chart_set_position (GogChart *chart, unsigned x, unsigned y, unsigned cols, unsigned rows); +gboolean gog_chart_get_plot_area (GogChart *chart, GogViewAllocation *plot_area); +void gog_chart_set_plot_area (GogChart *chart, GogViewAllocation const *plot_area); void gog_chart_request_cardinality_update (GogChart *chart); void gog_chart_get_cardinality (GogChart *chart, @@ -45,10 +78,10 @@ void gog_chart_foreach_elem (GogChart *chart, gboolean only_visible, GogEnumFunc handler, gpointer data); GSList *gog_chart_get_plots (GogChart const *chart); -GogAxisSet gog_chart_axis_set (GogChart const *chart); +GogAxisSet gog_chart_get_axis_set (GogChart const *chart); gboolean gog_chart_axis_set_is_valid (GogChart const *chart, GogAxisSet type); gboolean gog_chart_axis_set_assign (GogChart *chart, GogAxisSet type); -GSList *gog_chart_get_axis (GogChart const *chart, GogAxisType type); +GSList *gog_chart_get_axes (GogChart const *chart, GogAxisType type); GogGrid *gog_chart_get_grid (GogChart const *chart); diff --git a/lib/goffice/graph/gog-control-foocanvas.c b/lib/goffice-0.0.4/goffice/graph/gog-control-foocanvas.c similarity index 86% rename from lib/goffice/graph/gog-control-foocanvas.c rename to lib/goffice-0.0.4/goffice/graph/gog-control-foocanvas.c index c8603deb8f..c2e0c21804 100644 --- a/lib/goffice/graph/gog-control-foocanvas.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-control-foocanvas.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include @@ -34,9 +34,7 @@ enum { CTRL_FOO_PROP_H, CTRL_FOO_PROP_W, CTRL_FOO_PROP_MODEL, - CTRL_FOO_PROP_RENDERER, - CTRL_FOO_PROP_LOGICAL_WIDTH_PTS, - CTRL_FOO_PROP_LOGICAL_HEIGHT_PTS + CTRL_FOO_PROP_RENDERER }; static GObjectClass *parent_klass; @@ -59,26 +57,28 @@ gog_control_foocanvas_set_property (GObject *gobject, guint param_id, case CTRL_FOO_PROP_MODEL: if (ctrl->renderer != NULL) g_object_unref (ctrl->renderer); +#ifdef WITH_CAIRO + ctrl->renderer = g_object_new (GOG_RENDERER_CAIRO_TYPE, + "model", g_value_get_object (value), + NULL); +#else ctrl->renderer = g_object_new (GOG_RENDERER_PIXBUF_TYPE, "model", g_value_get_object (value), NULL); +#endif break; case CTRL_FOO_PROP_RENDERER: if (ctrl->renderer != NULL) g_object_unref (ctrl->renderer); +#ifdef WITH_CAIRO + ctrl->renderer = GOG_RENDERER_CAIRO (g_value_get_object (value)); +#else ctrl->renderer = GOG_RENDERER_PIXBUF (g_value_get_object (value)); +#endif if (ctrl->renderer != NULL) g_object_ref (ctrl->renderer); break; - case CTRL_FOO_PROP_LOGICAL_WIDTH_PTS : - g_object_set_property (G_OBJECT (ctrl->renderer), - "logical_width_pts", value); - break; - case CTRL_FOO_PROP_LOGICAL_HEIGHT_PTS : - g_object_set_property (G_OBJECT (ctrl->renderer), - "logical_height_pts", value); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); return; /* NOTE : RETURN */ @@ -102,14 +102,6 @@ gog_control_foocanvas_get_property (GObject *gobject, guint param_id, case CTRL_FOO_PROP_H: g_value_set_double (value, ctrl->new_h); break; case CTRL_FOO_PROP_W: g_value_set_double (value, ctrl->new_w); break; case CTRL_FOO_PROP_RENDERER : g_value_set_object (value, ctrl->renderer); break; - case CTRL_FOO_PROP_LOGICAL_WIDTH_PTS : - g_object_get_property (G_OBJECT (ctrl->renderer), - "logical_width_pts", value); - break; - case CTRL_FOO_PROP_LOGICAL_HEIGHT_PTS : - g_object_get_property (G_OBJECT (ctrl->renderer), - "logical_height_pts", value); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, param_id, pspec); break; @@ -137,7 +129,11 @@ gog_control_foocanvas_draw (FooCanvasItem *item, GdkDrawable *drawable, GdkEventExpose *ev) { GogControlFooCanvas *ctrl = GOG_CONTROL_FOOCANVAS (item); +#ifdef WITH_CAIRO + GdkPixbuf *buffer = gog_renderer_cairo_get_pixbuf (ctrl->renderer); +#else GdkPixbuf *buffer = gog_renderer_pixbuf_get (ctrl->renderer); +#endif GdkRectangle display_rect, draw_rect; GdkRegion *draw_region; @@ -187,8 +183,13 @@ gog_control_foocanvas_update (FooCanvasItem *item, foo_canvas_w2c (item->canvas, ctrl->base.xpos, ctrl->base.ypos, &x1, &y1); foo_canvas_w2c (item->canvas, ctrl->base.xpos + ctrl->new_w, ctrl->base.ypos + ctrl->new_h, &x2, &y2); +#ifdef WITH_CAIRO + redraw = gog_renderer_cairo_update (ctrl->renderer, x2-x1, y2-y1, + item->canvas->pixels_per_unit); +#else redraw = gog_renderer_pixbuf_update (ctrl->renderer, x2-x1, y2-y1, item->canvas->pixels_per_unit); +#endif if (item->x1 != x1 || item->y1 != y1 || item->x2 != x2 || item->y2 != y2) foo_canvas_update_bbox (FOO_CANVAS_ITEM (ctrl), x1, y1, x2, y2); else if (redraw) @@ -239,18 +240,17 @@ gog_control_foocanvas_class_init (GogControlFooCanvasClass *klass) g_param_spec_object ("model", "model", "the GogObject this object displays", GOG_OBJECT_TYPE, G_PARAM_WRITABLE)); +#ifdef WITH_CAIRO + g_object_class_install_property (gobject_klass, CTRL_FOO_PROP_RENDERER, + g_param_spec_object ("renderer", "renderer", + "the GogRendererCairo being displayed", + GOG_RENDERER_CAIRO_TYPE, G_PARAM_READWRITE)); +#else g_object_class_install_property (gobject_klass, CTRL_FOO_PROP_RENDERER, g_param_spec_object ("renderer", "renderer", "the GogRendererPixbuf being displayed", GOG_RENDERER_PIXBUF_TYPE, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_klass, CTRL_FOO_PROP_LOGICAL_WIDTH_PTS, - g_param_spec_double ("logical_width_pts", "Logical Width Pts", - "Logical width of the drawing area in pts", - 0, G_MAXDOUBLE, 0, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_klass, CTRL_FOO_PROP_LOGICAL_HEIGHT_PTS, - g_param_spec_double ("logical_height_pts", "Logical Height Pts", - "Logical height of the drawing area in pts", - 0, G_MAXDOUBLE, 0, G_PARAM_READWRITE)); +#endif } static void diff --git a/lib/goffice/graph/gog-control-foocanvas.h b/lib/goffice-0.0.4/goffice/graph/gog-control-foocanvas.h similarity index 85% rename from lib/goffice/graph/gog-control-foocanvas.h rename to lib/goffice-0.0.4/goffice/graph/gog-control-foocanvas.h index 79ab7f37c5..4f1e3cee8c 100644 --- a/lib/goffice/graph/gog-control-foocanvas.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-control-foocanvas.h @@ -15,15 +15,19 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_CONTROL_FOOCANVAS_H #define GOG_CONTROL_FOOCANVAS_H #include -#include +#include +#ifdef WITH_CAIRO +#include +#else #include +#endif G_BEGIN_DECLS @@ -37,7 +41,11 @@ typedef struct { double new_h, new_w; GogGraph *model; +#ifdef WITH_CAIRO + GogRendererCairo *renderer; +#else GogRendererPixbuf *renderer; +#endif } GogControlFooCanvas; typedef FooCanvasGroupClass GogControlFooCanvasClass; diff --git a/lib/goffice/graph/gog-data-allocator.c b/lib/goffice-0.0.4/goffice/graph/gog-data-allocator.c similarity index 94% rename from lib/goffice/graph/gog-data-allocator.c rename to lib/goffice-0.0.4/goffice/graph/gog-data-allocator.c index 384fce889a..a061ae8658 100644 --- a/lib/goffice/graph/gog-data-allocator.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-data-allocator.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,7 +23,7 @@ #include #include #include -#include +#include GType gog_data_allocator_get_type (void) diff --git a/lib/goffice/graph/gog-data-allocator.h b/lib/goffice-0.0.4/goffice/graph/gog-data-allocator.h similarity index 96% rename from lib/goffice/graph/gog-data-allocator.h rename to lib/goffice-0.0.4/goffice/graph/gog-data-allocator.h index 9b4925fab5..8a791b811a 100644 --- a/lib/goffice/graph/gog-data-allocator.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-data-allocator.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ diff --git a/lib/goffice/graph/gog-data-set.c b/lib/goffice-0.0.4/goffice/graph/gog-data-set.c similarity index 71% rename from lib/goffice/graph/gog-data-set.c rename to lib/goffice-0.0.4/goffice/graph/gog-data-set.c index c1d2f9de6a..0349a437a3 100644 --- a/lib/goffice/graph/gog-data-set.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-data-set.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,7 +23,9 @@ #include #include #include -#include +#include +#include +#include GType gog_dataset_get_type (void) @@ -90,11 +92,17 @@ gog_dataset_get_dim (GogDataset const *set, int dim_i) void gog_dataset_set_dim (GogDataset *set, int dim_i, GOData *val, GError **err) { - GogDatasetClass *klass = GOG_DATASET_GET_CLASS (set); + GogDatasetClass *klass; - g_return_if_fail (klass != NULL); g_return_if_fail (val == NULL || GO_DATA (val) != NULL); + if (set == NULL || !IS_GOG_DATASET (set)) { + g_warning ("gog_dataset_set_dim called with invalid GogDataset"); + goto done; + } + + klass = GOG_DATASET_GET_CLASS (set); + /* short circuit */ if (val != gog_dataset_get_dim (set, dim_i)) { gog_dataset_set_dim_internal (set, dim_i, val, @@ -106,6 +114,7 @@ gog_dataset_set_dim (GogDataset *set, int dim_i, GOData *val, GError **err) (klass->dim_changed) (set, dim_i); } +done : /* absorb ref to orig, simplifies life cycle easier for new GODatas */ if (val != NULL) g_object_unref (val); @@ -206,3 +215,54 @@ gog_dataset_parent_changed (GogDataset *set, gboolean was_set) if (was_set) gog_object_request_update (GOG_OBJECT (set)); } + +void +gog_dataset_dup_to_simple (GogDataset const *src, GogDataset *dst) +{ + gint n, last; + GOData *src_dat, *dst_dat; + gog_dataset_dims (src, &n, &last); + for ( ; n <= last ; n++) { + src_dat = gog_dataset_get_dim (src, n); + if (src_dat == NULL) + continue; + dst_dat = NULL; + /* for scalar and vector data, try to transform to values first + if we find non finite, use strings */ + if (IS_GO_DATA_SCALAR (src_dat)) { + char const *str = go_data_scalar_get_str (GO_DATA_SCALAR (src_dat)); + char *end; + double d = g_strtod (str, &end); + dst_dat =(*end == 0)? go_data_scalar_val_new (d): + go_data_scalar_str_new (g_strdup (str), TRUE); + } else if (IS_GO_DATA_VECTOR (src_dat)) { + gboolean as_values = TRUE; + GODataVector *vec = GO_DATA_VECTOR (src_dat); + double *d = go_data_vector_get_values (vec); + int i, n = go_data_vector_get_len (vec); + for (i = 0; i < n; i++) + if (go_finite (d[i])) { + as_values = FALSE; + break; + } + if (as_values) + /* we don't need to duplicate, since this is used only for + short lived objects */ + dst_dat = go_data_vector_val_new (d, n, NULL); + else { + char **str = g_new (char*, n + 1); + str[n] = NULL; + for (i = 0; i < n; i++) + str[i] = go_data_vector_get_str (vec, i); + dst_dat = go_data_vector_str_new ((char const* const*) str, n, g_free); + } + } else if (IS_GO_DATA_MATRIX (src_dat)) { + /* only values are supported so don't care */ + GODataMatrix *mat = GO_DATA_MATRIX (src_dat); + GODataMatrixSize size = go_data_matrix_get_size (mat); + dst_dat = go_data_matrix_val_new (go_data_matrix_get_values (mat), + size.rows, size.columns, NULL); + } + gog_dataset_set_dim (dst, n, dst_dat, NULL); + } +} diff --git a/lib/goffice/graph/gog-data-set.h b/lib/goffice-0.0.4/goffice/graph/gog-data-set.h similarity index 93% rename from lib/goffice/graph/gog-data-set.h rename to lib/goffice-0.0.4/goffice/graph/gog-data-set.h index 08f13c2f0a..1e5e3ef40a 100644 --- a/lib/goffice/graph/gog-data-set.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-data-set.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,6 +23,7 @@ #define GOG_DATA_SET_H #include +#include #include G_BEGIN_DECLS @@ -64,6 +65,8 @@ GogDatasetElement *gog_dataset_get_elem (GogDataset const *set, int dim_i); void gog_dataset_set_dim_internal (GogDataset *set, int dim_i, GOData *val, GogGraph *graph); +void gog_dataset_dup_to_simple (GogDataset const *src, GogDataset *dst); + G_END_DECLS #endif /* GOG_DATA_SET_H */ diff --git a/lib/goffice/graph/gog-error-bar-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-error-bar-prefs.glade similarity index 99% rename from lib/goffice/graph/gog-error-bar-prefs.glade rename to lib/goffice-0.0.4/goffice/graph/gog-error-bar-prefs.glade index 87a3e0883d..0cb3de5697 100644 --- a/lib/goffice/graph/gog-error-bar-prefs.glade +++ b/lib/goffice-0.0.4/goffice/graph/gog-error-bar-prefs.glade @@ -2,7 +2,6 @@ - True diff --git a/lib/goffice/graph/gog-error-bar.c b/lib/goffice-0.0.4/goffice/graph/gog-error-bar.c similarity index 91% rename from lib/goffice/graph/gog-error-bar.c rename to lib/goffice-0.0.4/goffice/graph/gog-error-bar.c index ad28f6eb98..9922cccdd9 100644 --- a/lib/goffice/graph/gog-error-bar.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-error-bar.c @@ -15,13 +15,11 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -//#include -#include #include "gog-error-bar.h" #include "gog-series-impl.h" #include "gog-plot-impl.h" @@ -29,11 +27,12 @@ #include "gog-data-allocator.h" #include "gog-style.h" #include "gog-renderer.h" -#include "go-data-impl.h" -#include "go-data.h" -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -172,7 +171,7 @@ gog_error_bar_prefs (GogSeries *series, char const* property, gboolean horizontal, GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { GladeXML *gui; GtkWidget *w, *bar_prefs; @@ -201,7 +200,7 @@ gog_error_bar_prefs (GogSeries *series, } set = GOG_DATASET (series); - gui = gnm_glade_xml_new (cc, "gog-error-bar-prefs.glade", "gog_error_bar_prefs", NULL); + gui = go_libglade_new ("gog-error-bar-prefs.glade", "gog_error_bar_prefs", NULL, cc); /* Style properties */ @@ -236,39 +235,39 @@ gog_error_bar_prefs (GogSeries *series, /* Display style */ cpx = go_combo_pixmaps_new (4); - pixbuf = gnumeric_load_pixbuf ("bar-none.png"); + pixbuf = go_pixbuf_new_from_file ("bar-none.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_NONE, _("No error bar displayed")); if (horizontal) { - pixbuf = gnumeric_load_pixbuf ("bar-hplus.png"); + pixbuf = go_pixbuf_new_from_file ("bar-hplus.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_POSITIVE, _("Positive error bar displayed")); - pixbuf = gnumeric_load_pixbuf ("bar-hminus.png"); + pixbuf = go_pixbuf_new_from_file ("bar-hminus.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_NEGATIVE, _("Negative error bar displayed")); - pixbuf = gnumeric_load_pixbuf ("bar-hboth.png"); + pixbuf = go_pixbuf_new_from_file ("bar-hboth.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_BOTH, _("Full error bar displayed")); } else { - pixbuf = gnumeric_load_pixbuf ("bar-vplus.png"); + pixbuf = go_pixbuf_new_from_file ("bar-vplus.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_POSITIVE, _("Positive error bar displayed")); - pixbuf = gnumeric_load_pixbuf ("bar-vminus.png"); + pixbuf = go_pixbuf_new_from_file ("bar-vminus.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_NEGATIVE, _("Negative error bar displayed")); - pixbuf = gnumeric_load_pixbuf ("bar-vboth.png"); + pixbuf = go_pixbuf_new_from_file ("bar-vboth.png"); go_combo_pixmaps_add_element (cpx, pixbuf, GOG_ERROR_BAR_DISPLAY_BOTH, @@ -471,9 +470,7 @@ gog_error_bar_persist_sax_save (GogPersist const *gp, GsfXMLOut *output) } if (str != NULL) gsf_xml_out_add_cstr_unchecked (output, "display", str); -#ifdef GOG_WARN_TODO -#warning Why 5.0 and why 1.0 ? -#endif +//#warning Why 5.0 and why 1.0 ? if (bar->width != 5.) gsf_xml_out_add_float (output, "width", bar->width, 2); if (bar->style->line.width != 1.) @@ -491,8 +488,8 @@ gog_error_bar_persist_init (GogPersistClass *iface) } GSF_CLASS_FULL (GogErrorBar, gog_error_bar, - gog_error_bar_class_init, gog_error_bar_init, - G_TYPE_OBJECT, 0, + NULL, NULL, gog_error_bar_class_init, NULL, + gog_error_bar_init, G_TYPE_OBJECT, 0, GSF_INTERFACE (gog_error_bar_persist_init, GOG_PERSIST_TYPE)) @@ -654,24 +651,36 @@ void gog_error_bar_render (const GogErrorBar *bar, if (!start && !end) return; if (horizontal) { + if (!gog_axis_map_finite (x_map, x) || + !gog_axis_map_finite (y_map, y) || + (start && !gog_axis_map_finite (x_map, x + plus)) || + (end && !gog_axis_map_finite (x_map, x - minus))) + return; + x_start = start ? - gog_axis_map_to_canvas (x_map, x + plus) : - gog_axis_map_to_canvas (x_map, x); + gog_axis_map_to_view (x_map, x + plus) : + gog_axis_map_to_view (x_map, x); x_end = end ? - gog_axis_map_to_canvas (x_map , x - minus) : - gog_axis_map_to_canvas (x_map , x); - y_start = y_end = gog_axis_map_to_canvas (y_map, y); + gog_axis_map_to_view (x_map , x - minus) : + gog_axis_map_to_view (x_map , x); + y_start = y_end = gog_axis_map_to_view (y_map, y); } else { - x_start = x_end = gog_axis_map_to_canvas (x_map ,x); + if (!gog_axis_map_finite (x_map, x) || + !gog_axis_map_finite (y_map, y) || + (start && !gog_axis_map_finite (y_map, y + plus)) || + (end && !gog_axis_map_finite (y_map, y - minus))) + return; + + x_start = x_end = gog_axis_map_to_view (x_map ,x); y_start = start ? - gog_axis_map_to_canvas (y_map, y + plus) : - gog_axis_map_to_canvas (y_map, y); + gog_axis_map_to_view (y_map, y + plus) : + gog_axis_map_to_view (y_map, y); y_end = end ? - gog_axis_map_to_canvas (y_map, y - minus) : - gog_axis_map_to_canvas (y_map, y); + gog_axis_map_to_view (y_map, y - minus) : + gog_axis_map_to_view (y_map, y); } - x = gog_axis_map_to_canvas (x_map, x); - y = gog_axis_map_to_canvas (y_map, y); + x = gog_axis_map_to_view (x_map, x); + y = gog_axis_map_to_view (y_map, y); path[0].code = ART_MOVETO; path[1].code = ART_LINETO; @@ -726,7 +735,7 @@ void gog_error_bar_render (const GogErrorBar *bar, path[2].code = ART_END; gog_renderer_push_style (rend, bar->style); - gog_renderer_draw_sharp_path (rend, path, NULL); + gog_renderer_draw_sharp_path (rend, path); gog_renderer_pop_style (rend); } diff --git a/lib/goffice/graph/gog-error-bar.h b/lib/goffice-0.0.4/goffice/graph/gog-error-bar.h similarity index 94% rename from lib/goffice/graph/gog-error-bar.h rename to lib/goffice-0.0.4/goffice/graph/gog-error-bar.h index 83a41e5146..e17ab48fff 100644 --- a/lib/goffice/graph/gog-error-bar.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-error-bar.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -27,6 +27,8 @@ #include "gog-data-set.h" #include "gog-axis.h" +G_BEGIN_DECLS + typedef enum { GOG_ERROR_BAR_TYPE_NONE, GOG_ERROR_BAR_TYPE_ABSOLUTE, @@ -63,7 +65,7 @@ GogErrorBar *gog_error_bar_dup (GogErrorBar const *bar); #ifdef WITH_GTK gpointer gog_error_bar_prefs (GogSeries *series, char const* property, gboolean horizontal, GogDataAllocator *dalloc, - GnmCmdContext *cc); + GOCmdContext *cc); #endif gboolean gog_error_bar_get_bounds (const GogErrorBar *bar, int index, @@ -78,4 +80,6 @@ void gog_error_bar_render (const GogErrorBar *bar, GogRenderer *rend, gboolean horizontal); gboolean gog_error_bar_is_visible (GogErrorBar *bar); +G_END_DECLS + #endif diff --git a/lib/goffice/graph/gog-graph-impl.h b/lib/goffice-0.0.4/goffice/graph/gog-graph-impl.h similarity index 94% rename from lib/goffice/graph/gog-graph-impl.h rename to lib/goffice-0.0.4/goffice/graph/gog-graph-impl.h index e064a9d222..43f3f13fcf 100644 --- a/lib/goffice/graph/gog-graph-impl.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-graph-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -37,6 +37,7 @@ struct _GogGraph { GSList *data; unsigned num_cols, num_rows; + double width, height; guint idle_handler; }; diff --git a/lib/goffice/graph/gog-graph.c b/lib/goffice-0.0.4/goffice/graph/gog-graph.c similarity index 84% rename from lib/goffice/graph/gog-graph.c rename to lib/goffice-0.0.4/goffice/graph/gog-graph.c index 1ac0810293..9f7266ef02 100644 --- a/lib/goffice/graph/gog-graph.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-graph.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -26,17 +26,23 @@ #include #include #include -#include +#include +#include #include #include #include #include +#define GOG_GRAPH_DEFAULT_WIDTH GO_CM_TO_PT (12.0) +#define GOG_GRAPH_DEFAULT_HEIGHT GO_CM_TO_PT (8.0) + enum { GRAPH_PROP_0, GRAPH_PROP_THEME, - GRAPH_PROP_THEME_NAME + GRAPH_PROP_THEME_NAME, + GRAPH_PROP_WIDTH, + GRAPH_PROP_HEIGHT }; enum { @@ -62,6 +68,14 @@ gog_graph_set_property (GObject *obj, guint param_id, gog_graph_set_theme (graph, gog_theme_lookup (g_value_get_string (value))); break; + case GRAPH_PROP_WIDTH: + gog_graph_set_size (graph, g_value_get_double (value), + graph->height); + break; + case GRAPH_PROP_HEIGHT: + gog_graph_set_size (graph, graph->width, + g_value_get_double (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); return; /* NOTE : RETURN */ @@ -81,6 +95,12 @@ gog_graph_get_property (GObject *obj, guint param_id, case GRAPH_PROP_THEME_NAME : g_value_set_string (value, gog_theme_get_name (graph->theme)); break; + case GRAPH_PROP_WIDTH: + g_value_set_double (value, graph->width); + break; + case GRAPH_PROP_HEIGHT: + g_value_set_double (value, graph->height); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); break; @@ -152,10 +172,14 @@ gog_graph_class_init (GogGraphClass *klass) static GogObjectRole const roles[] = { { N_("Chart"), "GogChart", 0, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + GOG_POSITION_SPECIAL|GOG_POSITION_ANY_MANUAL, + GOG_POSITION_SPECIAL, + GOG_OBJECT_NAME_BY_ROLE, NULL, NULL, NULL, role_chart_post_add, role_chart_pre_remove, NULL }, - { N_("Title"), "GogLabel", 0, - GOG_POSITION_COMPASS, GOG_POSITION_N|GOG_POSITION_ALIGN_CENTER, GOG_OBJECT_NAME_BY_ROLE, + { N_("Title"), "GogLabel", 1, + GOG_POSITION_COMPASS|GOG_POSITION_ANY_MANUAL, + GOG_POSITION_N|GOG_POSITION_ALIGN_CENTER, + GOG_OBJECT_NAME_BY_ROLE, NULL, NULL, NULL, NULL, NULL, NULL }, }; @@ -189,12 +213,22 @@ gog_graph_class_init (GogGraphClass *klass) g_object_class_install_property (gobject_klass, GRAPH_PROP_THEME, g_param_spec_object ("theme", "Theme", - "the theme for elements of the graph", + "The theme for elements of the graph", GOG_THEME_TYPE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, GRAPH_PROP_THEME_NAME, g_param_spec_string ("theme-name", "ThemeName", - "the name of the theme for elements of the graph", + "The name of the theme for elements of the graph", "default", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, GRAPH_PROP_WIDTH, + g_param_spec_double ("width-pts", "Width", + "Logical graph width, in points", + 0.0, G_MAXDOUBLE, GOG_GRAPH_DEFAULT_WIDTH, + G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, GRAPH_PROP_HEIGHT, + g_param_spec_double ("height-pts", "Height", + "Logical graph heigth, in points", + 0.0, G_MAXDOUBLE, GOG_GRAPH_DEFAULT_HEIGHT, + G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); } static void @@ -204,6 +238,8 @@ gog_graph_init (GogGraph *graph) graph->data = NULL; graph->num_cols = graph->num_rows = 0; + graph->width = GOG_GRAPH_DEFAULT_WIDTH; + graph->height = GOG_GRAPH_DEFAULT_HEIGHT; graph->idle_handler = 0; graph->theme = gog_theme_lookup (NULL); /* default */ @@ -318,7 +354,7 @@ gog_graph_num_rows (GogGraph const *graph) GogGraph * gog_graph_dup (GogGraph const *graph) { - GogObject *res = gog_object_dup (GOG_OBJECT (graph), NULL); + GogObject *res = gog_object_dup (GOG_OBJECT (graph), NULL, NULL); return GOG_GRAPH (res); } @@ -334,9 +370,7 @@ gog_graph_set_theme (GogGraph *graph, GogTheme *theme) { g_return_if_fail (GOG_GRAPH (graph) != NULL); g_return_if_fail (GOG_THEME (theme) != NULL); -#ifdef GOG_WARN_TODO -#warning TODO -#endif +//#warning TODO } /** @@ -492,12 +526,49 @@ void gog_graph_force_update (GogGraph *graph) { /* people may try to queue an update during destruction */ - if (G_OBJECT (graph)->ref_count > 0 && graph->idle_handler != 0) { + while (G_OBJECT (graph)->ref_count > 0 && graph->idle_handler != 0) { g_source_remove (graph->idle_handler); graph->idle_handler = 0; gog_object_update (GOG_OBJECT (graph)); } } +/** + * gog_graph_get_size: + * @graph: #GogGraph + * @width: logical width in pts + * @height: logical height in pts + * + * Returns the logical size of graph, in points. + **/ +void +gog_graph_get_size (GogGraph *graph, double *width, double *height) +{ + g_return_if_fail (GOG_GRAPH (graph) != NULL); + + if (width != NULL) + *width = graph->width; + if (height != NULL) + *height = graph->height; +} +/** + * gog_graph_set_size: + * @graph: #GogGraph + * @width: logical width in pts + * @height: logical height in pts + * + * Sets the logical size of graph, given in points. + **/ +void +gog_graph_set_size (GogGraph *graph, double width, double height) +{ + g_return_if_fail (GOG_GRAPH (graph) != NULL); + + if (width != graph->width || height != graph->height) { + graph->height = height; + graph->width = width; + gog_object_emit_changed (GOG_OBJECT (graph), TRUE); + } +} /************************************************************************/ @@ -531,14 +602,14 @@ gog_graph_view_set_property (GObject *gobject, guint param_id, } static void -gog_graph_view_size_allocate (GogView *view, GogViewAllocation const *a) +gog_graph_view_size_allocate (GogView *view, GogViewAllocation const *bbox) { GSList *ptr; double h, w; unsigned x, y, rows, cols; GogView *child; GogGraph *graph = GOG_GRAPH (view->model); - GogViewAllocation tmp, res = *a; + GogViewAllocation tmp, res = *bbox; (gview_parent_klass->size_allocate) (view, &res); @@ -551,7 +622,7 @@ gog_graph_view_size_allocate (GogView *view, GogViewAllocation const *a) h = res.h / gog_graph_num_rows (graph); for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { child = ptr->data; - if (child->model->position == GOG_POSITION_SPECIAL) { + if (GOG_POSITION_IS_SPECIAL (child->model->position)) { gog_chart_get_position (GOG_CHART (child->model), &x, &y, &cols, &rows); tmp.x = x * w + res.x; diff --git a/lib/goffice/graph/gog-graph.h b/lib/goffice-0.0.4/goffice/graph/gog-graph.h similarity index 80% rename from lib/goffice/graph/gog-graph.h rename to lib/goffice-0.0.4/goffice/graph/gog-graph.h index 9f73456e4c..ecc1ec5944 100644 --- a/lib/goffice/graph/gog-graph.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-graph.h @@ -15,13 +15,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_GRAPH_H #define GOG_GRAPH_H #include +#include #include G_BEGIN_DECLS @@ -46,9 +47,12 @@ void gog_graph_set_theme (GogGraph *graph, GogTheme *theme); GSList *gog_graph_get_data (GogGraph const *graph); /* internal routines for use by series */ -GOData *gog_graph_ref_data (GogGraph *graph, GOData *dat); -void gog_graph_unref_data (GogGraph *graph, GOData *dat); +GOData *gog_graph_ref_data (GogGraph *graph, GOData *dat); +void gog_graph_unref_data (GogGraph *graph, GOData *dat); +void gog_graph_get_size (GogGraph *graph, double *width, double *height); +void gog_graph_set_size (GogGraph *graph, double width, double height); + G_END_DECLS #endif /* GOG_GRAPH_H */ diff --git a/lib/goffice/graph/gog-grid-line.c b/lib/goffice-0.0.4/goffice/graph/gog-grid-line.c similarity index 65% rename from lib/goffice/graph/gog-grid-line.c rename to lib/goffice-0.0.4/goffice/graph/gog-grid-line.c index 08b6c9c2b7..9cab897854 100644 --- a/lib/goffice/graph/gog-grid-line.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-grid-line.c @@ -15,28 +15,32 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ -#include - #include -#include -#include #include +#include +#include #include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include + +#include +#include + +#include + -//#include -#include #include #include +#include struct _GogGridLine { GogStyledObject base; @@ -46,7 +50,6 @@ struct _GogGridLine { typedef GogStyledObjectClass GogGridLineClass; - static GType gog_grid_line_view_get_type (void); static GogViewClass *gview_parent_klass; @@ -120,7 +123,7 @@ gog_grid_line_class_init (GogGridLineClass *klass) style_klass->init_style = gog_grid_line_init_style; g_object_class_install_property (gobject_klass, GRID_LINE_PROP_IS_MINOR, - g_param_spec_boolean ("is_minor", "is_minor", + g_param_spec_boolean ("is-minor", "is-minor", "Are these minor grid lines", FALSE, G_PARAM_READWRITE)); } @@ -134,7 +137,7 @@ typedef GogView GogGridLineView; typedef GogViewClass GogGridLineViewClass; #define GOG_GRID_LINE_VIEW_TYPE (gog_grid_line_view_get_type ()) -#define GOG_GRID_LINE8VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_GRID_LINE_VIEW_TYPE, GogGridLineView)) +#define GOG_GRID_LINE_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_GRID_LINE_VIEW_TYPE, GogGridLineView)) #define IS_GOG_GRID_LINE_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_GRID_LINE_VIEW_TYPE)) static void @@ -142,7 +145,7 @@ gog_grid_line_view_render (GogView *view, GogViewAllocation const *bbox) { GogGridLine *grid_line = GOG_GRID_LINE (view->model); GSList *axis_list; - GogAxis *axis, *circular_axis; + GogAxis *axis; GogChart *chart; GogView *chart_view; GogStyle *style; @@ -150,10 +153,6 @@ gog_grid_line_view_render (GogView *view, GogViewAllocation const *bbox) GogAxisMap *map = NULL; GogAxisTick *ticks; unsigned tick_nbr, i, j; - double center_x, center_y, radius; - double circular_min, circular_max; - double angle, position; - unsigned num_radii; ArtVpath path[3]; ArtVpath *c_path; GogViewAllocation const *plot_area; @@ -205,8 +204,8 @@ gog_grid_line_view_render (GogView *view, GogViewAllocation const *bbox) path[0].y = plot_area->y; path[1].y = plot_area->y + plot_area->h; path[0].x = - path[1].x = gog_axis_map_to_canvas (map, ticks[i].position); - gog_renderer_draw_sharp_path (view->renderer, path, NULL); + path[1].x = gog_axis_map_to_view (map, ticks[i].position); + gog_renderer_draw_sharp_path (view->renderer, path); } } break; @@ -217,8 +216,8 @@ gog_grid_line_view_render (GogView *view, GogViewAllocation const *bbox) path[0].x = plot_area->x; path[1].x = plot_area->x + plot_area->w; path[0].y = - path[1].y = gog_axis_map_to_canvas (map, ticks[i].position); - gog_renderer_draw_sharp_path (view->renderer, path, NULL); + path[1].y = gog_axis_map_to_view (map, ticks[i].position); + gog_renderer_draw_sharp_path (view->renderer, path); } } break; @@ -228,48 +227,92 @@ gog_grid_line_view_render (GogView *view, GogViewAllocation const *bbox) gog_axis_map_free (map); break; - case GOG_AXIS_RADIAL: - center_x = plot_area->x + (plot_area->w/2); - center_y = plot_area->y + (plot_area->h/2); - radius = plot_area->h > plot_area->w - ? plot_area->w / 2.0 - : plot_area->h / 2.0; - map = gog_axis_map_new (axis, 0., radius); - - axis_list = gog_chart_get_axis (chart, GOG_AXIS_CIRCULAR); + case GOG_AXIS_RADIAL: { + GogAxis *circular_axis; + GogChartMap *c_map; + GogChartMapPolarData *parms; + + axis_list = gog_chart_get_axes (chart, GOG_AXIS_CIRCULAR); if (axis_list == NULL) break; circular_axis = GOG_AXIS (axis_list->data); g_slist_free (axis_list); - gog_axis_get_bounds (circular_axis, &circular_min, &circular_max); - num_radii = rint (circular_max); - if (num_radii < 3) { - gog_axis_map_free (map); - break; - } - c_path = g_new (ArtVpath, num_radii + 2); - c_path[num_radii + 1].code = ART_END; - for (i = 0; i < tick_nbr; i++) { - if ((ticks[i].type == GOG_AXIS_TICK_MAJOR && !grid_line->is_minor) || - (ticks[i].type == GOG_AXIS_TICK_MINOR && grid_line->is_minor)) { - position = gog_axis_map_to_canvas (map, ticks[i].position); - c_path[0].x = center_x; - c_path[0].y = center_y - position; - c_path[0].code = ART_MOVETO; - for (j = 1; j < num_radii + 1; j++) { - angle = j * 2.0 * M_PI/(num_radii) - M_PI / 2.; - c_path[j].x = center_x + cos (angle) * position; - c_path[j].y = center_y + sin (angle) * position; - c_path[j].code = ART_LINETO; + c_map = gog_chart_map_new (GOG_CHART (chart), plot_area, + circular_axis, axis, NULL, FALSE); + parms = gog_chart_map_get_polar_parms (c_map); + + if (gog_axis_is_discrete (circular_axis)) { + unsigned step_nbr; + double start, stop; + + map = gog_chart_map_get_axis_map (c_map, 0); + gog_axis_map_get_extents (map, &start, &stop); + step_nbr = go_rint (parms->th1 - parms->th0) + 1; + c_path = art_new (ArtVpath, step_nbr + 2); + for (i = 0; i < tick_nbr; i++) { + if ((ticks[i].type == GOG_AXIS_TICK_MAJOR && !grid_line->is_minor) || + (ticks[i].type == GOG_AXIS_TICK_MINOR && grid_line->is_minor)) { + for (j = 0; j <= step_nbr; j++) { + gog_chart_map_2D_to_view (c_map, + j + parms->th0 , + ticks[i].position, + &c_path[j].x, &c_path[j].y); + c_path[j].code = ART_LINETO; + } + c_path[0].code = ART_MOVETO; + c_path[step_nbr + 1].code = ART_END; + gog_renderer_draw_path (view->renderer, c_path); + } + } + g_free (c_path); + } else { + double position; + map = gog_chart_map_get_axis_map (c_map, 1); + + for (i = 0; i < tick_nbr; i++) { + if ((ticks[i].type == GOG_AXIS_TICK_MAJOR && !grid_line->is_minor) || + (ticks[i].type == GOG_AXIS_TICK_MINOR && grid_line->is_minor)) { + position = gog_axis_map (map, ticks[i].position); + gog_renderer_draw_arc (view->renderer, parms->cx, parms->cy, + position * parms->rx, + position * parms->ry, + -parms->th1, -parms->th0); } - gog_renderer_draw_path (view->renderer, c_path, NULL); } } - - g_free (c_path); - gog_axis_map_free (map); + gog_chart_map_free (c_map); break; + } + case GOG_AXIS_CIRCULAR: { + GogAxis *radial_axis; + GogChartMap *c_map; + double start, stop; + + axis_list = gog_chart_get_axes (chart, GOG_AXIS_RADIAL); + if (axis_list == NULL) + break; + radial_axis = GOG_AXIS (axis_list->data); + g_slist_free (axis_list); + + c_map = gog_chart_map_new (GOG_CHART (chart), plot_area, + axis, radial_axis, NULL, FALSE); + map = gog_chart_map_get_axis_map (c_map, 1); + gog_axis_map_get_extents (map, &start, &stop); + + gog_chart_map_2D_to_view (c_map, 0, start, &path[0].x, &path[0].y); + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[2].code = ART_END; + for (i = 0; i < tick_nbr; i++) + if ((ticks[i].type == GOG_AXIS_TICK_MAJOR && !grid_line->is_minor) || + (ticks[i].type == GOG_AXIS_TICK_MINOR && grid_line->is_minor)) { + gog_chart_map_2D_to_view (c_map, ticks[i].position, stop, + &path[1].x, &path[1].y); + gog_renderer_draw_path (view->renderer, path); + } + gog_chart_map_free (c_map); + } default: break; @@ -279,13 +322,22 @@ gog_grid_line_view_render (GogView *view, GogViewAllocation const *bbox) gog_renderer_pop_style (view->renderer); } +static gboolean +gog_grid_line_info_at_point (GogView *view, double x, double y, + GogObject const *cur_selection, + GogObject **obj, char **name) +{ + return FALSE; +} + static void gog_grid_line_view_class_init (GogGridLineViewClass *gview_klass) { GogViewClass *view_klass = (GogViewClass *) gview_klass; gview_parent_klass = g_type_class_peek_parent (gview_klass); - view_klass->render = gog_grid_line_view_render; + view_klass->render = gog_grid_line_view_render; + view_klass->info_at_point = gog_grid_line_info_at_point; } static GSF_CLASS (GogGridLineView, gog_grid_line_view, diff --git a/lib/goffice/graph/gog-grid-line.h b/lib/goffice-0.0.4/goffice/graph/gog-grid-line.h similarity index 87% rename from lib/goffice/graph/gog-grid-line.h rename to lib/goffice-0.0.4/goffice/graph/gog-grid-line.h index 3983ab44ad..149c8a00d5 100644 --- a/lib/goffice/graph/gog-grid-line.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-grid-line.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -27,12 +27,6 @@ G_BEGIN_DECLS -//typedef enum { -// GOG_GRID_LINE_MAJOR, -// GOG_GRID_LINE_MINOR, -// GOG_GRID_LINE_TYPES -//} GogGridLineType; - #define GOG_GRID_LINE_TYPE (gog_grid_line_get_type ()) #define GOG_GRID_LINE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_GRID_LINE_TYPE, GogGridLine)) #define IS_GOG_GRID_LINE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_GRID_LINE_TYPE)) diff --git a/lib/goffice/graph/gog-grid.c b/lib/goffice-0.0.4/goffice/graph/gog-grid.c similarity index 51% rename from lib/goffice/graph/gog-grid.c rename to lib/goffice-0.0.4/goffice/graph/gog-grid.c index 7faab2b872..7aa9fbdb49 100644 --- a/lib/goffice/graph/gog-grid.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-grid.c @@ -15,20 +15,21 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include +#include #include #include #include #include #include -// #include -#include +#include + #include #include @@ -77,22 +78,88 @@ static void gog_grid_view_render (GogView *view, GogViewAllocation const *bbox) { GogGrid *grid = GOG_GRID (view->model); - ArtVpath path[6]; - - path[0].code = ART_MOVETO; - path[1].code = ART_LINETO; - path[2].code = ART_LINETO; - path[3].code = ART_LINETO; - path[4].code = ART_LINETO; - path[5].code = ART_END; - path[0].x = path[1].x = path[4].x = view->allocation.x; - path[2].x = path[3].x = path[0].x + view->allocation.w; - path[0].y = path[3].y = path[4].y = view->allocation.y; - path[1].y = path[2].y = path[0].y + view->allocation.h; - + GogChart *chart = GOG_CHART (gog_object_get_parent (view->model)); + gog_renderer_push_style (view->renderer, grid->base.style); - gog_renderer_draw_sharp_polygon (view->renderer, path, FALSE, NULL); + switch (gog_chart_get_axis_set (chart)) { + case GOG_AXIS_SET_X: + case GOG_AXIS_SET_XY: { + ArtVpath path[6]; + + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[2].code = ART_LINETO; + path[3].code = ART_LINETO; + path[4].code = ART_LINETO; + path[5].code = ART_END; + path[0].x = path[1].x = path[4].x = view->allocation.x; + path[2].x = path[3].x = path[0].x + view->allocation.w; + path[0].y = path[3].y = path[4].y = view->allocation.y; + path[1].y = path[2].y = path[0].y + view->allocation.h; + + gog_renderer_draw_sharp_polygon (view->renderer, path, FALSE); + break; + } + case GOG_AXIS_SET_RADAR: { + GogAxis *c_axis, *r_axis; + GogViewAllocation const *area = gog_chart_view_get_plot_area (view->parent); + GogChartMap *c_map; + GogAxisMap *map; + GogChartMapPolarData *parms; + GSList *axis_list; + ArtVpath *path; + double position, start, stop; + unsigned step_nbr, i; + + axis_list = gog_chart_get_axes (chart, GOG_AXIS_CIRCULAR); + if (axis_list == NULL) + break; + c_axis = GOG_AXIS (axis_list->data); + g_slist_free (axis_list); + + axis_list = gog_chart_get_axes (chart, GOG_AXIS_RADIAL); + if (axis_list == NULL) + break; + r_axis = GOG_AXIS (axis_list->data); + g_slist_free (axis_list); + + c_map = gog_chart_map_new (chart, area, c_axis, r_axis, NULL, FALSE); + parms = gog_chart_map_get_polar_parms (c_map); + map = gog_chart_map_get_axis_map (c_map, 1); + gog_axis_map_get_extents (map, &start, &position); + + if (gog_axis_is_discrete (c_axis)) { + map = gog_chart_map_get_axis_map (c_map, 0); + gog_axis_map_get_extents (map, &start, &stop); + step_nbr = go_rint (parms->th1 - parms->th0) + 1; + path = art_new (ArtVpath, step_nbr + 2); + for (i = 0; i <= step_nbr; i++) { + gog_chart_map_2D_to_view (c_map, i + parms->th0, + position, &path[i].x, &path[i].y); + path[i].code = ART_LINETO; + } + path[0].code = ART_MOVETO; + path[step_nbr + 1].code = ART_END; + gog_renderer_draw_polygon (view->renderer, path, FALSE); + g_free (path); + } else { + double a = gog_axis_map (map, position); + gog_renderer_draw_pie_wedge (view->renderer, parms->cx, parms->cy, + parms->rx * a, parms->ry * a, + -parms->th1, -parms->th0, FALSE); + } + gog_chart_map_free (c_map); + break; + } + case GOG_AXIS_SET_XYZ: + case GOG_AXIS_SET_XY_pseudo_3d: + case GOG_AXIS_SET_ALL: + case GOG_AXIS_SET_UNKNOWN: + case GOG_AXIS_SET_NONE: + break; + } gog_renderer_pop_style (view->renderer); + (gview_parent_klass->render) (view, bbox); } diff --git a/lib/goffice/graph/gog-grid.h b/lib/goffice-0.0.4/goffice/graph/gog-grid.h similarity index 94% rename from lib/goffice/graph/gog-grid.h rename to lib/goffice-0.0.4/goffice/graph/gog-grid.h index d608352b0b..48218515af 100644 --- a/lib/goffice/graph/gog-grid.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-grid.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_GRID_H diff --git a/lib/goffice/graph/gog-guru-type-selector.glade b/lib/goffice-0.0.4/goffice/graph/gog-guru-type-selector.glade similarity index 100% rename from lib/goffice/graph/gog-guru-type-selector.glade rename to lib/goffice-0.0.4/goffice/graph/gog-guru-type-selector.glade diff --git a/lib/goffice/graph/gog-guru.c b/lib/goffice-0.0.4/goffice/graph/gog-guru.c similarity index 89% rename from lib/goffice/graph/gog-guru.c rename to lib/goffice-0.0.4/goffice/graph/gog-guru.c index b77e77bd10..080e5a8be5 100644 --- a/lib/goffice/graph/gog-guru.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-guru.c @@ -17,10 +17,11 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include +#include #include #include @@ -28,21 +29,24 @@ #include #include #include +#include #include #include #include #include +#include #include -#include #include -#include -#include -#include +#include +#include +#include #include #include #include +#include +#include #include #include #include @@ -66,7 +70,7 @@ struct _GraphGuruState { GogChart *chart; GogPlot *plot; - GnmCmdContext *cc; + GOCmdContext *cc; GogDataAllocator *dalloc; GClosure *register_closure; @@ -124,6 +128,8 @@ struct _GraphGuruTypeSelector { GogPlotType *current_type; FooCanvasGroup const *current_family_item; FooCanvasItem const *current_minor_item; + + int max_priority_so_far; }; enum { @@ -143,6 +149,7 @@ enum { #define BORDER 5 #define PLOT_TYPE_KEY "plot_type" +#define REG_CURVE_TYPE_KEY "reg_curve_type" #define FIRST_MINOR_TYPE "first_minor_type" #define ROLE_KEY "role" #define STATE_KEY "plot_type" @@ -161,7 +168,7 @@ get_pixbuf (char const *image_file) cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); - pixbuf = gnumeric_load_pixbuf (image_file); + pixbuf = go_pixbuf_new_from_file (image_file); g_hash_table_insert (cache, (gpointer)image_file, pixbuf); return pixbuf; @@ -215,14 +222,17 @@ graph_typeselect_minor (GraphGuruTypeSelector *typesel, FooCanvasItem *item) g_return_if_fail (plot != NULL); - if (s->plot != NULL) { - GogObject *obj = GOG_OBJECT (s->plot); + if (s->chart != NULL) { + GogObject *obj = GOG_OBJECT (s->chart); gog_object_clear_parent (obj); g_object_unref (obj); + s->chart = GOG_CHART (gog_object_add_by_name ( + GOG_OBJECT (s->graph), "Chart", NULL)); } gog_object_add_by_name (GOG_OBJECT (s->chart), "Plot", GOG_OBJECT (s->plot = plot)); + gog_plot_guru_helper (plot); #if 0 if (s->original_plot != NULL && !gog_plot_make_similar (s->plot, s->original_plot)) @@ -350,10 +360,8 @@ cb_typesel_sample_plot_resize (FooCanvas *canvas, * active when sample button is not depressed */ if (typesel->sample_graph_item != NULL) foo_canvas_item_set (typesel->sample_graph_item, - "w", (double)alloc->width * 2., - "h", (double)alloc->height * 2., - "logical_width_pts", (2. * 72. * (double)alloc->width) / 96., - "logical_height_pts", (2. * 72. * (double)alloc->height) / 96., + "w", (double)alloc->width, + "h", (double)alloc->height, NULL); } @@ -363,7 +371,6 @@ cb_sample_pressed (GraphGuruTypeSelector *typesel) if (typesel->current_family_item == NULL) return; - foo_canvas_set_pixels_per_unit (FOO_CANVAS (typesel->canvas), .5); /* 50% zoom */ if (typesel->sample_graph_item == NULL) { GtkAllocation *size = >K_WIDGET (typesel->canvas)->allocation; typesel->sample_graph_item = foo_canvas_item_new (typesel->graph_group, @@ -387,7 +394,6 @@ cb_sample_released (GraphGuruTypeSelector *typesel) if (typesel->current_family_item == NULL) return; - foo_canvas_set_pixels_per_unit (FOO_CANVAS (typesel->canvas), 1.); foo_canvas_item_hide (FOO_CANVAS_ITEM (typesel->graph_group)); foo_canvas_item_show (FOO_CANVAS_ITEM (typesel->current_family_item)); foo_canvas_item_show (FOO_CANVAS_ITEM (typesel->selector)); @@ -468,6 +474,12 @@ cb_plot_families_init (char const *id, GogPlotFamily *family, PLOT_FAMILY_TYPE_CANVAS_GROUP, group, -1); + if (typesel->max_priority_so_far < family->priority) { + typesel->max_priority_so_far = family->priority; + gtk_tree_selection_select_iter ( + gtk_tree_view_get_selection (typesel->list_view), &iter); + } + closure.typesel = typesel; closure.group = group; closure.current_type = NULL; @@ -528,12 +540,13 @@ cb_graph_guru_delete_item (GraphGuruState *s) GtkTreeIter iter; GogObject *obj = s->prop_object; - /* select the parent before we delete */ + /* store parent iter */ gtk_tree_model_iter_parent (GTK_TREE_MODEL (s->prop_model), &iter, &s->prop_iter); - gtk_tree_selection_select_iter (s->prop_selection, &iter); gog_object_clear_parent (obj); g_object_unref (obj); + /* then select the parent after we delete */ + gtk_tree_selection_select_iter (s->prop_selection, &iter); } } @@ -614,6 +627,7 @@ cb_graph_guru_add_plot (GtkWidget *w, GraphGuruState *s) GogPlot *plot = gog_plot_new_by_type (type); gog_object_add_by_name (GOG_OBJECT (s->prop_object), "Plot", GOG_OBJECT (plot)); + gog_plot_guru_helper (plot); /* as a convenience add a series to the newly created plot */ gog_object_add_by_name (GOG_OBJECT (plot), "Series", NULL); } @@ -625,10 +639,17 @@ cb_plot_family_menu_create (char const *id, GogPlotFamily *family, GtkWidget *w, *menu; GSList *ptr, *types = NULL; GogPlotType *type; + GogAxisSet axis_set; if (g_hash_table_size (family->types) <= 0) return; + axis_set = gog_chart_get_axis_set (GOG_CHART (closure->state->prop_object)); + + if (axis_set != GOG_AXIS_SET_UNKNOWN && + family->axis_set != axis_set) + return; + menu = gtk_image_menu_item_new_with_label (_(family->name)); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu), gtk_image_new_from_pixbuf ( @@ -675,6 +696,47 @@ plot_type_menu_create (GraphGuruState *s) return NULL; } +static void +cb_graph_guru_add_reg_curve (GtkWidget *w, GraphGuruState *s) +{ + GogRegCurveType *type = g_object_get_data (G_OBJECT (w), REG_CURVE_TYPE_KEY); + GogRegCurve *curve = gog_reg_curve_new_by_type (type); + gog_object_add_by_name (GOG_OBJECT (s->prop_object), + "Regression curve", GOG_OBJECT (curve)); +} + +static void +cb_reg_curve_type_menu_create (char const *id, GogRegCurveType *type, + struct type_menu_create *closure) +{ + GtkWidget *menu; + + menu = gtk_menu_item_new_with_label (_(type->name)); + g_object_set_data (G_OBJECT (menu), REG_CURVE_TYPE_KEY, type); + g_signal_connect (G_OBJECT (menu), + "activate", + G_CALLBACK (cb_graph_guru_add_reg_curve), closure->state); + gtk_menu_shell_append (GTK_MENU_SHELL (closure->menu), menu); + closure->non_blank = TRUE; +} + +static GtkWidget * +reg_curve_type_menu_create (GraphGuruState *s) +{ + struct type_menu_create closure; + closure.state = s; + closure.menu = gtk_menu_new (); + closure.non_blank = FALSE; + + g_hash_table_foreach ((GHashTable *)gog_reg_curve_types (), + (GHFunc) cb_reg_curve_type_menu_create, &closure); + + if (closure.non_blank) + return closure.menu; + gtk_object_destroy (GTK_OBJECT (closure.menu)); + return NULL; +} + static void cb_attr_tree_selection_change (GraphGuruState *s) { @@ -684,7 +746,7 @@ cb_attr_tree_selection_change (GraphGuruState *s) gboolean dec_ok = FALSE; GtkTreeModel *model; GogObject *obj = NULL; - GtkWidget *w, *editor, *notebook; + GtkWidget *w, *notebook; GtkTreePath *path; if (gtk_tree_selection_get_selected (s->prop_selection, &model, &s->prop_iter)) @@ -695,9 +757,11 @@ cb_attr_tree_selection_change (GraphGuruState *s) if (s->prop_object == obj) return; - path = gtk_tree_model_get_path (GTK_TREE_MODEL (s->prop_model), &s->prop_iter); - gtk_tree_view_scroll_to_cell (s->prop_view, path, NULL, FALSE, 0, 0); - gtk_tree_path_free (path); + if (obj) { + path = gtk_tree_model_get_path (GTK_TREE_MODEL (s->prop_model), &s->prop_iter); + gtk_tree_view_scroll_to_cell (s->prop_view, path, NULL, FALSE, 0, 0); + gtk_tree_path_free (path); + } /* remove the old prop page */ s->prop_object = obj; @@ -718,7 +782,14 @@ cb_attr_tree_selection_change (GraphGuruState *s) role = ptr->data; /* somewhat hackish, but I do not see a need * for anything more general yet */ - if (strcmp (role->id, "Plot")) { + if (!strcmp (role->id, "Regression curve")) { + GtkWidget *submenu = reg_curve_type_menu_create (s); + if (submenu != NULL) { + tmp = gtk_menu_item_new_with_label (_(role->id)); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (tmp), submenu); + } else + continue; + } else if (strcmp (role->id, "Plot")) { tmp = gtk_menu_item_new_with_label (_(role->id)); g_object_set_data (G_OBJECT (tmp), ROLE_KEY, (gpointer)role); @@ -773,19 +844,9 @@ cb_attr_tree_selection_change (GraphGuruState *s) gog_object_can_reorder (obj, &inc_ok, &dec_ok); /* create a prefs page for the graph obj */ - editor = gog_object_get_editor (obj, s->dalloc, s->cc); - if (GTK_IS_NOTEBOOK (editor)) { - notebook = editor; - } else { - notebook = gtk_notebook_new (); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); - if (editor == NULL) - editor = gtk_label_new (NULL); /* dummy widget for empty page */ - gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), editor, NULL); - gtk_widget_show (editor); - } - gtk_container_add (s->prop_container, notebook); + notebook = gog_object_get_editor (obj, s->dalloc, s->cc); gtk_widget_show (notebook); + gtk_container_add (s->prop_container, notebook); } gtk_widget_set_sensitive (s->delete_button, delete_ok); @@ -963,7 +1024,7 @@ cb_canvas_select_item (FooCanvas *canvas, GdkEventButton *event, { GogView *view; GogRenderer *rend; - double x, y; + double x, y, item_x, item_y; g_return_val_if_fail (FOO_IS_CANVAS (canvas), FALSE); @@ -972,10 +1033,14 @@ cb_canvas_select_item (FooCanvas *canvas, GdkEventButton *event, g_object_get (G_OBJECT (s->sample_graph_item), "renderer", &rend, NULL); g_object_get (G_OBJECT (rend), "view", &view, NULL); + g_object_unref (G_OBJECT (rend)); foo_canvas_window_to_world (canvas, event->x, event->y, &x, &y); + g_object_get (G_OBJECT(s->sample_graph_item), "x", &item_x, "y", &item_y, NULL); gog_view_info_at_point (view, - x * canvas->pixels_per_unit, y * canvas->pixels_per_unit, + (x - item_x) * canvas->pixels_per_unit, + (y - item_y) * canvas->pixels_per_unit, s->prop_object, &s->search_target, NULL); + g_object_unref (G_OBJECT (view)); if (s->search_target == NULL) return FALSE; @@ -987,15 +1052,31 @@ cb_canvas_select_item (FooCanvas *canvas, GdkEventButton *event, static void cb_sample_plot_resize (FooCanvas *canvas, - GtkAllocation *alloc, GraphGuruState *s) + GtkAllocation *alloc, GraphGuruState *state) { - /* Use 96dpi and zoom */ - double zoom = 1. / canvas->pixels_per_unit; - foo_canvas_item_set (s->sample_graph_item, - "w", (double)alloc->width * zoom, - "h", (double)alloc->height * zoom, - "logical_width_pts", (72. * zoom * (double)alloc->width) / 96., - "logical_height_pts", (72. * zoom * (double)alloc->height) / 96., + double aspect_ratio; + double width, height, x, y; + + gog_graph_get_size (state->graph, &width, &height); + aspect_ratio = width / height; + + if (alloc->width > alloc->height * aspect_ratio) { + height = alloc->height; + width = height * aspect_ratio; + x = (alloc->width - width) / 2.0; + y = 0.0; + } else { + width = alloc->width; + height = width / aspect_ratio; + x = 0.0; + y = (alloc->height - height) / 2.0; + } + + foo_canvas_item_set (state->sample_graph_item, + "w", width, + "h", height, + "x", x, + "y", y, NULL); } @@ -1034,7 +1115,6 @@ graph_guru_init_format_page (GraphGuruState *s) /* Load up the sample view and make it fill the entire canvas */ w = glade_xml_get_widget (s->gui, "sample_canvas"); - foo_canvas_set_pixels_per_unit (FOO_CANVAS (w), .5); /* 50% zoom */ s->sample_graph_item = foo_canvas_item_new ( foo_canvas_root (FOO_CANVAS (w)), GOG_CONTROL_FOOCANVAS_TYPE, "model", s->graph, @@ -1209,7 +1289,7 @@ graph_guru_type_selector_new (GraphGuruState *s) GtkWidget *selector; GladeXML *gui; - gui = gnm_glade_xml_new (s->cc, "gog-guru-type-selector.glade", "type_selector", NULL); + gui = go_libglade_new ("gog-guru-type-selector.glade", "type_selector", NULL, s->cc); typesel = g_new0 (GraphGuruTypeSelector, 1); typesel->state = s; @@ -1217,6 +1297,7 @@ graph_guru_type_selector_new (GraphGuruState *s) typesel->current_minor_item = NULL; typesel->current_type = NULL; typesel->sample_graph_item = NULL; + typesel->max_priority_so_far = -1; selector = glade_xml_get_widget (gui, "type_selector"); @@ -1225,6 +1306,9 @@ graph_guru_type_selector_new (GraphGuruState *s) GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (typesel->model), + PLOT_FAMILY_TYPE_NAME, GTK_SORT_ASCENDING); + typesel->list_view = GTK_TREE_VIEW (glade_xml_get_widget (gui, "type_treeview")); gtk_tree_view_set_model (typesel->list_view, GTK_TREE_MODEL (typesel->model)); gtk_tree_view_append_column (typesel->list_view, @@ -1237,11 +1321,7 @@ graph_guru_type_selector_new (GraphGuruState *s) gtk_cell_renderer_text_new (), "text", PLOT_FAMILY_TYPE_NAME, NULL)); - selection = gtk_tree_view_get_selection (typesel->list_view); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); - g_signal_connect_swapped (selection, - "changed", - G_CALLBACK (cb_selection_changed), typesel); + /* Setup an canvas to display the sample image & the sample plot. */ typesel->canvas = foo_canvas_new (); @@ -1270,6 +1350,12 @@ graph_guru_type_selector_new (GraphGuruState *s) g_hash_table_foreach ((GHashTable *)gog_plot_families (), (GHFunc) cb_plot_families_init, typesel); + selection = gtk_tree_view_get_selection (typesel->list_view); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); + g_signal_connect_swapped (selection, + "changed", + G_CALLBACK (cb_selection_changed), typesel); + /* The alpha blended selection box */ typesel->selector = foo_canvas_item_new ( foo_canvas_root (FOO_CANVAS (typesel->canvas)), @@ -1302,7 +1388,7 @@ graph_guru_type_selector_new (GraphGuruState *s) static gboolean graph_guru_init (GraphGuruState *s) { - s->gui = gnm_glade_xml_new (s->cc, "gog-guru.glade", NULL, NULL); + s->gui = go_libglade_new ("gog-guru.glade", NULL, NULL, s->cc); if (s->gui == NULL) return TRUE; @@ -1314,9 +1400,10 @@ graph_guru_init (GraphGuruState *s) s->button_navigate = graph_guru_init_button (s, "button_navigate"); s->button_ok = graph_guru_init_ok_button (s); - gnumeric_init_help_button ( - glade_xml_get_widget (s->gui, "help_button"), - "sect-graphics-plots"); +//#warning FIXME move the docs down to libgoffice + go_gtk_help_button_init (glade_xml_get_widget (s->gui, "help_button"), + go_sys_data_dir (), "gnumeric", + "sect-graphics-plots"); return FALSE; } @@ -1331,7 +1418,7 @@ graph_guru_init (GraphGuruState *s) */ GtkWidget * gog_guru (GogGraph *graph, GogDataAllocator *dalloc, - GnmCmdContext *cc, GtkWindow *toplevel, + GOCmdContext *cc, GtkWindow *toplevel, GClosure *closure) { int page = (graph != NULL) ? 1 : 0; @@ -1382,7 +1469,7 @@ gog_guru (GogGraph *graph, GogDataAllocator *dalloc, /* a candidate for merging into attach guru */ g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) graph_guru_state_destroy); - gnumeric_non_modal_dialog (toplevel, GTK_WINDOW (state->dialog)); + go_gtk_nonmodal_dialog (toplevel, GTK_WINDOW (state->dialog)); gtk_widget_show (GTK_WIDGET (state->dialog)); return state->dialog; diff --git a/lib/goffice/graph/gog-guru.glade b/lib/goffice-0.0.4/goffice/graph/gog-guru.glade similarity index 100% rename from lib/goffice/graph/gog-guru.glade rename to lib/goffice-0.0.4/goffice/graph/gog-guru.glade diff --git a/lib/goffice/graph/gog-guru.h b/lib/goffice-0.0.4/goffice/graph/gog-guru.h similarity index 88% rename from lib/goffice/graph/gog-guru.h rename to lib/goffice-0.0.4/goffice/graph/gog-guru.h index 6c4116d008..05d6a022a1 100644 --- a/lib/goffice/graph/gog-guru.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-guru.h @@ -15,14 +15,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_GURU_H #define GOG_GURU_H #include -#include +#include #include G_BEGIN_DECLS @@ -32,7 +32,7 @@ G_BEGIN_DECLS /* typedef void (*GogGuruRegister) (GogGraph *graph, gpointer user); */ GtkWidget *gog_guru (GogGraph *graph, GogDataAllocator *dalloc, - GnmCmdContext *cc, GtkWindow *toplevel, + GOCmdContext *cc, GtkWindow *toplevel, GClosure *closure); G_END_DECLS diff --git a/lib/goffice-0.0.4/goffice/graph/gog-label.c b/lib/goffice-0.0.4/goffice/graph/gog-label.c new file mode 100644 index 0000000000..c45623b921 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-label.c @@ -0,0 +1,501 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-label.c + * + * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +static GType gog_text_view_get_type (void); + +enum { + TEXT_PROP_0, + TEXT_PROP_ALLOW_MARKUP +}; + +typedef struct { + GogOutlinedObject base; + + gboolean allow_markup; +} GogText; + +typedef struct { + GogOutlinedObjectClass base; + + char *(*get_str) (GogText *text); +} GogTextClass; + +#define GOG_TEXT_TYPE (gog_text_get_type ()) +#define GOG_TEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_TEXT_TYPE, GogText)) +#define IS_GOG_TEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_TEXT_TYPE)) +#define GOG_TEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_TEXT_TYPE, GogTextClass)) + +static GType gog_text_get_type (void); + +static GObjectClass *text_parent_klass; + +static void +gog_text_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogText *text = GOG_TEXT (obj); + + switch (param_id) { + case TEXT_PROP_ALLOW_MARKUP : + text->allow_markup = g_value_get_boolean (value); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } + gog_object_emit_changed (GOG_OBJECT (obj), FALSE); +} + +static void +gog_text_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogText *text = GOG_TEXT (obj); + + switch (param_id) { + case TEXT_PROP_ALLOW_MARKUP : + g_value_set_boolean (value, text->allow_markup); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static void +gog_text_init_style (GogStyledObject *gso, GogStyle *style) +{ + GogObject *parent; + + style->interesting_fields = GOG_STYLE_OUTLINE | GOG_STYLE_FILL | + GOG_STYLE_FONT | GOG_STYLE_TEXT_LAYOUT; + gog_theme_fillin_style (gog_object_get_theme (GOG_OBJECT (gso)), + style, GOG_OBJECT (gso), 0, FALSE); + + /* Kludge for default Y axis title orientation. This should have be done + * in GogTheme, but it's not possible without breaking graph persistence + * compatibility */ + parent = gog_object_get_parent (GOG_OBJECT (gso)); + if (IS_GOG_AXIS (parent) && + gog_axis_get_atype (GOG_AXIS (parent)) == GOG_AXIS_Y && + style->text_layout.auto_angle) + style->text_layout.angle = 90.0; +} + +static void +gog_text_class_init (GogTextClass *klass) +{ + GObjectClass *gobject_klass = (GObjectClass *) klass; + GogObjectClass *gog_klass = (GogObjectClass *) klass; + GogStyledObjectClass *style_klass = (GogStyledObjectClass *) klass; + + text_parent_klass = g_type_class_peek_parent (klass); + gobject_klass->set_property = gog_text_set_property; + gobject_klass->get_property = gog_text_get_property; + + g_object_class_install_property (gobject_klass, TEXT_PROP_ALLOW_MARKUP, + g_param_spec_boolean ("allow-markup", "Allow markup", + "Support basic html-ish markup", + TRUE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + + gog_klass->view_type = gog_text_view_get_type (); + style_klass->init_style = gog_text_init_style; +} + +static void +gog_text_init (GogText *text) +{ + text->allow_markup = FALSE; +} + +static char * +gog_text_get_str (GogText *text) +{ + GogTextClass *klass; + + g_return_val_if_fail (GOG_TEXT (text) != NULL, NULL); + + klass = GOG_TEXT_GET_CLASS (text); + + if (klass->get_str != NULL) + return (*klass->get_str) (text); + + return NULL; +} + +GSF_CLASS_ABSTRACT (GogText, gog_text, + gog_text_class_init, gog_text_init, + GOG_OUTLINED_OBJECT_TYPE); + +/************************************************************************/ + +struct _GogLabel { + GogText base; + + GogDatasetElement text; +}; + +typedef GogTextClass GogLabelClass; + +static GObjectClass *label_parent_klass; + +static void +gog_label_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + static guint label_pref_page = 0; + GtkWidget *hbox = gtk_hbox_new (FALSE, 12); + GtkWidget *alignment = gtk_alignment_new (0, 0, 1, 0); + + gtk_container_set_border_width (GTK_CONTAINER (alignment), 12); + gtk_box_pack_start (GTK_BOX (hbox), + gtk_label_new_with_mnemonic (_("_Text:")), FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + gog_data_allocator_editor (dalloc, GOG_DATASET (gobj), 0, GOG_DATA_SCALAR), + TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (alignment), hbox); + gtk_widget_show_all (alignment); + + gog_editor_add_page (editor, alignment, _("Data")); + + (GOG_OBJECT_CLASS(label_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); + gog_editor_set_store_page (editor, &label_pref_page); +} + +static char * +gog_label_get_str (GogText *text) +{ + GogLabel *label = GOG_LABEL (text); + + g_return_val_if_fail (GOG_LABEL (label) != NULL, NULL); + + if (label->text.data != NULL) + return g_strdup (go_data_scalar_get_str (GO_DATA_SCALAR (label->text.data))); + + return NULL; +} + +static void +gog_label_finalize (GObject *obj) +{ + gog_dataset_finalize (GOG_DATASET (obj)); + (*label_parent_klass->finalize) (obj); +} + +static void +gog_label_class_init (GogLabelClass *klass) +{ + GObjectClass *gobject_klass = (GObjectClass *) klass; + GogObjectClass *gog_klass = (GogObjectClass *) klass; + GogTextClass *got_klass = (GogTextClass *) klass; + + label_parent_klass = g_type_class_peek_parent (klass); + gobject_klass->finalize = gog_label_finalize; + gog_klass->populate_editor = gog_label_populate_editor; + got_klass->get_str = gog_label_get_str; +} + +static void +gog_label_dims (GogDataset const *set, int *first, int *last) +{ + *first = *last = 0; +} + +static GogDatasetElement * +gog_label_get_elem (GogDataset const *set, int dim_i) +{ + GogLabel *label = GOG_LABEL (set); + return &label->text; +} + +static void +gog_label_dim_changed (GogDataset *set, int dim_i) +{ + gog_object_emit_changed (GOG_OBJECT (set), TRUE); +} + +static void +gog_label_dataset_init (GogDatasetClass *iface) +{ + iface->dims = gog_label_dims; + iface->get_elem = gog_label_get_elem; + iface->dim_changed = gog_label_dim_changed; +} + +GSF_CLASS_FULL (GogLabel, gog_label, + NULL, NULL, gog_label_class_init, NULL, + NULL, GOG_TEXT_TYPE, 0, + GSF_INTERFACE (gog_label_dataset_init, GOG_DATASET_TYPE)) + +/************************************************************************/ + +enum { + REG_EQN_PROP_0, + REG_EQN_SHOW_EQ, + REG_EQN_SHOW_R2 +}; + +struct _GogRegEqn { + GogLabel base; + gboolean show_eq, show_r2; +}; + +typedef GogTextClass GogRegEqnClass; + +static GObjectClass *reg_eqn_parent_klass; + +static void +cb_text_visibility_changed (GtkToggleButton *button, GogObject *gobj) +{ + char const* property = (char const*) g_object_get_data (G_OBJECT (button), "prop"); + g_object_set (G_OBJECT (gobj), property, gtk_toggle_button_get_active (button), NULL); + gog_object_emit_changed (gobj, TRUE); +} + +static void +gog_reg_eqn_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogRegEqn *reg_eqn = GOG_REG_EQN (obj); + + switch (param_id) { + case REG_EQN_SHOW_EQ: + reg_eqn->show_eq = g_value_get_boolean (value); + break; + case REG_EQN_SHOW_R2: + reg_eqn->show_r2 = g_value_get_boolean (value); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; + } +} + +static void +gog_reg_eqn_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogRegEqn *reg_eqn = GOG_REG_EQN (obj); + + switch (param_id) { + case REG_EQN_SHOW_EQ: + g_value_set_boolean (value, reg_eqn->show_eq); + break; + case REG_EQN_SHOW_R2: + g_value_set_boolean (value, reg_eqn->show_r2); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; + } +} + +static void +gog_reg_eqn_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + GtkWidget *w; + GladeXML *gui; + GogRegEqn *reg_eqn = GOG_REG_EQN (gobj); + + gui = go_libglade_new ("gog-reg-eqn-prefs.glade", "reg-eqn-prefs", NULL, cc); + if (gui == NULL) + return; + + gog_editor_add_page (editor, + glade_xml_get_widget (gui, "reg-eqn-prefs"), + _("Details")); + + w = glade_xml_get_widget (gui, "show_eq"); + g_object_set_data (G_OBJECT (w), "prop", (void*) "show-eq"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), reg_eqn->show_eq); + g_signal_connect (w, "toggled", G_CALLBACK (cb_text_visibility_changed), gobj); + + w = glade_xml_get_widget (gui, "show_r2"); + g_object_set_data (G_OBJECT (w), "prop", (void*) "show-r2"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), reg_eqn->show_r2); + g_signal_connect (w, "toggled", G_CALLBACK (cb_text_visibility_changed), gobj); + + (GOG_OBJECT_CLASS(reg_eqn_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); +} + +static char const * +gog_reg_eqn_type_name (GogObject const *gobj) +{ + return N_("Regression Equation"); +} + +static char * +gog_reg_eqn_get_str (GogText *text) +{ + GogRegCurve *reg_curve = GOG_REG_CURVE ((GOG_OBJECT (text))->parent); + GogRegEqn *reg_eqn = GOG_REG_EQN (text); + + if (!reg_eqn->show_r2) + return reg_eqn->show_eq ? + g_strdup (gog_reg_curve_get_equation (reg_curve)) : + NULL; + else + return reg_eqn->show_eq ? + g_strdup_printf ("%s\r\nR² = %g", + gog_reg_curve_get_equation (reg_curve), + gog_reg_curve_get_R2 (reg_curve)) : + g_strdup_printf ("R² = %g", gog_reg_curve_get_R2 (reg_curve)); +} + +static void +gog_reg_eqn_class_init (GogObjectClass *gog_klass) +{ + GObjectClass *gobject_klass = (GObjectClass *)gog_klass; + GogTextClass *got_klass = (GogTextClass *) gog_klass; + + reg_eqn_parent_klass = g_type_class_peek_parent (gog_klass); + + gobject_klass->set_property = gog_reg_eqn_set_property; + gobject_klass->get_property = gog_reg_eqn_get_property; + gog_klass->populate_editor = gog_reg_eqn_populate_editor; + gog_klass->type_name = gog_reg_eqn_type_name; + got_klass->get_str = gog_reg_eqn_get_str; + + g_object_class_install_property (gobject_klass, REG_EQN_SHOW_EQ, + g_param_spec_boolean ("show-eq", NULL, + "Show the equation on the graph", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, REG_EQN_SHOW_R2, + g_param_spec_boolean ("show-r2", NULL, + "Show the correlation coefficient on the graph", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); +} + +static void +gog_reg_eqn_init (GogRegEqn *reg_eqn) +{ + reg_eqn->show_eq = TRUE; + reg_eqn->show_r2 = TRUE; +} + +GSF_CLASS (GogRegEqn, gog_reg_eqn, + gog_reg_eqn_class_init, gog_reg_eqn_init, + GOG_TEXT_TYPE) + +/************************************************************************/ + +typedef GogOutlinedView GogTextView; +typedef GogOutlinedViewClass GogTextViewClass; + +#define GOG_LABEL_VIEW_TYPE (gog_label_view_get_type ()) +#define GOG_LABEL_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_LABEL_VIEW_TYPE, GogLabelView)) +#define IS_GOG_LABEL_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_LABEL_VIEW_TYPE)) + +static GogViewClass *text_view_parent_klass; + +static void +gog_text_view_size_request (GogView *v, GogViewRequisition *req) +{ + GogText *text = GOG_TEXT (v->model); + char *str = gog_text_get_str (text); + GOGeometryAABR aabr; + + req->w = req->h = 0.; + if (str != NULL) { + gog_renderer_push_style (v->renderer, text->base.base.style); + gog_renderer_get_text_AABR (v->renderer, str, &aabr); + gog_renderer_pop_style (v->renderer); + req->w = aabr.w; + req->h = aabr.h; + g_free (str); + } + text_view_parent_klass->size_request (v, req); +} + +static void +gog_text_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogText *text = GOG_TEXT (view->model); + GogOutlinedObject *goo = GOG_OUTLINED_OBJECT (text); + GogStyle *style = text->base.base.style; + char *str = gog_text_get_str (text); + + gog_renderer_push_style (view->renderer, style); + if (str != NULL) { + double outline = gog_renderer_line_size (view->renderer, + goo->base.style->outline.width); + if (style->fill.type != GOG_FILL_STYLE_NONE || outline > 0.) { + GogViewAllocation rect; + GOGeometryAABR aabr; + double pad_x = gog_renderer_pt2r_x (view->renderer, goo->padding_pts); + double pad_y = gog_renderer_pt2r_y (view->renderer, goo->padding_pts); + + gog_renderer_get_text_AABR (view->renderer, str, &aabr); + rect = view->allocation; + rect.w = aabr.w + 2. * outline + pad_x; + rect.h = aabr.h + 2. * outline + pad_y; + gog_renderer_draw_sharp_rectangle (view->renderer, &rect); + } + gog_renderer_draw_text (view->renderer, str, + &view->residual, GTK_ANCHOR_NW, NULL); + g_free (str); + } + gog_renderer_pop_style (view->renderer); +} + +static void +gog_text_view_class_init (GogTextViewClass *gview_klass) +{ + GogViewClass *view_klass = (GogViewClass *) gview_klass; + + text_view_parent_klass = g_type_class_peek_parent (gview_klass); + view_klass->size_request = gog_text_view_size_request; + view_klass->render = gog_text_view_render; +} + +GSF_CLASS (GogTextView, gog_text_view, + gog_text_view_class_init, NULL, + GOG_OUTLINED_VIEW_TYPE) diff --git a/lib/goffice/graph/gog-label.h b/lib/goffice-0.0.4/goffice/graph/gog-label.h similarity index 74% rename from lib/goffice/graph/gog-label.h rename to lib/goffice-0.0.4/goffice/graph/gog-label.h index 86a78f2901..f81dc7ca53 100644 --- a/lib/goffice/graph/gog-label.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-label.h @@ -3,6 +3,7 @@ * gog-label.h : * * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_LABEL_H @@ -32,6 +33,12 @@ G_BEGIN_DECLS GType gog_label_get_type (void); +#define GOG_REG_EQN_TYPE (gog_reg_eqn_get_type ()) +#define GOG_REG_EQN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_REG_EQN_TYPE, GogRegEqn)) +#define IS_GOG_REG_EQN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_REG_EQN_TYPE)) + +GType gog_reg_eqn_get_type (void); + G_END_DECLS #endif /* GOG_LABEL_H */ diff --git a/lib/goffice/graph/gog-legend.c b/lib/goffice-0.0.4/goffice/graph/gog-legend.c similarity index 89% rename from lib/goffice/graph/gog-legend.c rename to lib/goffice-0.0.4/goffice/graph/gog-legend.c index c950ee5186..edb5f06963 100644 --- a/lib/goffice/graph/gog-legend.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-legend.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -153,15 +153,16 @@ gog_legend_update (GogObject *obj) gog_object_emit_changed (obj, TRUE); } -static gpointer -gog_legend_editor (GogObject *gobj, GogDataAllocator *dalloc, GnmCmdContext *cc) +static void +gog_legend_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) { static guint legend_pref_page = 0; - GtkWidget *notebook = gtk_notebook_new (); - gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, notebook); - gog_style_handle_notebook (notebook, &legend_pref_page); - return notebook; + (GOG_OBJECT_CLASS(parent_klass)->populate_editor) (gobj, editor, dalloc, cc); + gog_editor_set_store_page (editor, &legend_pref_page); } static void @@ -186,14 +187,15 @@ gog_legend_class_init (GogLegendClass *klass) GogStyledObjectClass *style_klass = (GogStyledObjectClass *) klass; parent_klass = g_type_class_peek_parent (klass); + gobject_klass->set_property = gog_legend_set_property; gobject_klass->get_property = gog_legend_get_property; - gog_klass->parent_changed = gog_legend_parent_changed; gog_klass->update = gog_legend_update; - gog_klass->editor = gog_legend_editor; + gog_klass->populate_editor = gog_legend_populate_editor; gog_klass->view_type = gog_legend_view_get_type (); style_klass->init_style = gog_legend_init_style; + gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); g_object_class_install_property (gobject_klass, LEGEND_SWATCH_SIZE_PTS, @@ -235,21 +237,23 @@ typedef struct { GogView const *view; GogViewRequisition maximum; gboolean uses_lines; + GogStyle* legend_style; } size_closure; static void cb_size_elements (unsigned i, GogStyle const *style, char const *name, size_closure *dat) { - GogViewRequisition req; - gog_renderer_push_style (dat->view->renderer, style); - gog_renderer_measure_text (dat->view->renderer, name, &req); + GOGeometryAABR aabr; + + gog_renderer_push_style (dat->view->renderer, dat->legend_style); + gog_renderer_get_text_AABR (dat->view->renderer, name, &aabr); gog_renderer_pop_style (dat->view->renderer); - if (dat->maximum.w < req.w) - dat->maximum.w = req.w; - if (dat->maximum.h < req.h) - dat->maximum.h = req.h; + if (dat->maximum.w < aabr.w) + dat->maximum.w = aabr.w; + if (dat->maximum.h < aabr.h) + dat->maximum.h = aabr.h; if (!dat->uses_lines && (style->interesting_fields & GOG_STYLE_LINE)) dat->uses_lines = TRUE; } @@ -263,13 +267,12 @@ gog_legend_view_size_request (GogView *v, GogViewRequisition *avail) GogLegend *l = GOG_LEGEND (v->model); unsigned n, mult = 1; -#ifdef GOG_WARN_TODO -#warning TODO : make this smarter (multiple columns and shrinking text) -#endif +//#warning TODO : make this smarter (multiple columns and shrinking text) dat.view = v; dat.maximum.w = 0.; dat.maximum.h = gog_renderer_pt2r_y (v->renderer, l->swatch_size_pts); dat.uses_lines = FALSE; + dat.legend_style = GOG_STYLED_OBJECT (l)->style; gog_chart_foreach_elem (chart, TRUE, (GogEnumFunc) cb_size_elements, &dat); ((GogLegendView *)v)->line_height = dat.maximum.h; @@ -306,7 +309,9 @@ cb_render_elements (unsigned i, GogStyle const *base_style, char const *name, GogViewAllocation swatch = dat->swatch; GogView const *v = dat->view; GogStyle *style = NULL; - GogViewAllocation pos; + GogViewAllocation pos, rectangle; + GogStyledObject *obj = GOG_STYLED_OBJECT (dat->view->model); + GogStyle *legend_style = obj->style; swatch.y += i * dat->step; /* Allow for floating point inaccuracy */ @@ -316,8 +321,8 @@ cb_render_elements (unsigned i, GogStyle const *base_style, char const *name, if (base_style->interesting_fields & GOG_STYLE_LINE) { /* line and marker */ style = (GogStyle *)base_style; gog_renderer_push_style (v->renderer, style); - dat->line_path[0].y = dat->line_path[1].y = swatch.y + swatch.h / 2.; - gog_renderer_draw_sharp_path (v->renderer, dat->line_path, NULL); + dat->line_path[0].y = dat->line_path[1].y = swatch.y + dat->step / 2.; + gog_renderer_draw_sharp_path (v->renderer, dat->line_path); gog_renderer_draw_marker (v->renderer, (dat->line_path[0].x + dat->line_path[1].x) / 2., dat->line_path[0].y); @@ -326,12 +331,17 @@ cb_render_elements (unsigned i, GogStyle const *base_style, char const *name, style->outline.width = 0; /* hairline */ style->outline.color = RGBA_BLACK; + rectangle = swatch; + rectangle.y += (dat->step - swatch.h) / 2.0; + gog_renderer_push_style (v->renderer, style); - gog_renderer_draw_sharp_rectangle (v->renderer, &swatch, NULL); + gog_renderer_draw_sharp_rectangle (v->renderer, &rectangle); } pos.x = swatch.x + dat->label_offset; pos.y = swatch.y; pos.h = pos.w = -1; + gog_renderer_pop_style (v->renderer); + gog_renderer_push_style (v->renderer, legend_style); gog_renderer_draw_text (v->renderer, name, &pos, GTK_ANCHOR_NW, NULL); gog_renderer_pop_style (v->renderer); diff --git a/lib/goffice/graph/gog-legend.h b/lib/goffice-0.0.4/goffice/graph/gog-legend.h similarity index 94% rename from lib/goffice/graph/gog-legend.h rename to lib/goffice-0.0.4/goffice/graph/gog-legend.h index 00585e35fa..c9e0394851 100644 --- a/lib/goffice/graph/gog-legend.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-legend.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_LEGEND_H diff --git a/lib/goffice-0.0.4/goffice/graph/gog-object-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-object-prefs.glade new file mode 100644 index 0000000000..960a249b95 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-object-prefs.glade @@ -0,0 +1,689 @@ + + + + + + + GogObjectPrefs + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + False + 12 + + + + True + True + _Use manual positionning + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + False + 24 + + + + True + False + 6 + + + + True + <b>Manual position</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 24 + 0 + + + + True + False + 6 + + + + True + 3 + 3 + False + 6 + 12 + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + _Y: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + y_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 -10000 10000 1 10 10 + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 -10000 10000 1 10 10 + + + 1 + 2 + 1 + 2 + fill + + + + + + + True + _X: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + x_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Anchor: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + + False + True + + + 1 + 3 + 2 + 3 + fill + fill + + + + + 0 + False + False + + + + + + True + 2 + 3 + False + 6 + 12 + + + + True + _Height: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + height_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + _Width: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + width_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 10000 1 10 10 + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 10000 1 10 10 + + + 1 + 2 + 1 + 2 + fill + + + + + + 0 + False + False + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + + True + False + 6 + + + + True + <b>Automatic position</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 24 + 0 + + + + True + False + 6 + + + + True + False + 12 + + + + True + _Position: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + + False + True + + + 0 + False + False + + + + + 0 + True + True + + + + + + True + False + 12 + + + + True + _Alignment: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + + False + True + + + 0 + False + False + + + + + 0 + True + True + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + 0 + False + False + + + + + + + diff --git a/lib/goffice/graph/gog-object-xml.c b/lib/goffice-0.0.4/goffice/graph/gog-object-xml.c similarity index 97% rename from lib/goffice/graph/gog-object-xml.c rename to lib/goffice-0.0.4/goffice/graph/gog-object-xml.c index c46de9c804..893e76d84a 100644 --- a/lib/goffice/graph/gog-object-xml.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-object-xml.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,8 +23,9 @@ #include #include #include +#include #include -#include +#include #include #include /* for the xml utils */ @@ -368,7 +369,7 @@ gog_dataset_sax_save (GogDataset const *set, GsfXMLOut *output) continue; gsf_xml_out_start_element (output, "dimension"); - snprintf (buffer, sizeof buffer, "%d", i); + g_snprintf (buffer, sizeof buffer, "%d", i); gsf_xml_out_add_cstr (output, "id", buffer); gsf_xml_out_add_cstr (output, "type", G_OBJECT_TYPE_NAME (dat)); @@ -400,7 +401,7 @@ gog_dataset_dom_save (GogDataset *set, xmlNode *parent) (xmlChar const *) ("dimension"), tmp); g_free (tmp); - snprintf (buffer, sizeof buffer, "%d", i); + g_snprintf (buffer, sizeof buffer, "%d", i); xmlSetProp (child, (xmlChar const *) "id", buffer); xmlSetProp (child, (xmlChar const *) "type", G_OBJECT_TYPE_NAME (dat)); @@ -492,11 +493,17 @@ gog_object_new_from_xml (GogObject *parent, xmlNode *node) GType type = g_type_from_name (type_name); if (type == 0) { GogPlot *plot = gog_plot_new_by_name (type_name); - res = GOG_OBJECT (plot); + if (plot) + res = GOG_OBJECT (plot); + else { + GogRegCurve *curve = gog_reg_curve_new_by_name (type_name); + res = GOG_OBJECT (curve); + } } else res = g_object_new (type, NULL); xmlFree (type_name); explicitly_typed_role = TRUE; + g_return_val_if_fail (res != NULL, NULL); } role = xmlGetProp (node, (xmlChar const *) "role"); if (role == NULL) { diff --git a/lib/goffice/graph/gog-object-xml.h b/lib/goffice-0.0.4/goffice/graph/gog-object-xml.h similarity index 97% rename from lib/goffice/graph/gog-object-xml.h rename to lib/goffice-0.0.4/goffice/graph/gog-object-xml.h index c5b4245462..556737fde8 100644 --- a/lib/goffice/graph/gog-object-xml.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-object-xml.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_OBJECT_XML_H diff --git a/lib/goffice-0.0.4/goffice/graph/gog-object.c b/lib/goffice-0.0.4/goffice/graph/gog-object.c new file mode 100644 index 0000000000..f42c545c72 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-object.c @@ -0,0 +1,1663 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-object.c : + * + * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include +#include /* for gog_graph_request_update */ +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifndef HAVE_GLIB26 +#include "goffice/glib24_26-compat.h" +#endif + +GogEditor * +gog_editor_new (void) +{ + GogEditor *editor = g_new (GogEditor, 1); + + editor->store_page = NULL; + editor->pages = NULL; + + return editor; +} + +void +gog_editor_add_page (GogEditor *editor, gpointer widget, char const *label) +{ + GogEditorPage *page; + + g_return_if_fail (editor != NULL); + page = g_new (GogEditorPage, 1); + + page->widget = widget; + page->label = label; + + editor->pages = g_slist_prepend (editor->pages, page); +} + +void +gog_editor_set_store_page (GogEditor *editor, unsigned *store_page) +{ + g_return_if_fail (editor != NULL); + + editor->store_page = store_page; +} + +static void +cb_switch_page (G_GNUC_UNUSED GtkNotebook *n, G_GNUC_UNUSED GtkNotebookPage *p, + guint page_num, guint *store_page) +{ + *store_page = page_num; +} + +gpointer +gog_editor_get_notebook (GogEditor *editor) +{ + GtkWidget *notebook; + GogEditorPage *page; + GSList *ptr; + unsigned page_count = 0; + + notebook = gtk_notebook_new (); + if (editor->pages != NULL) { + for (ptr = editor->pages; ptr != NULL; ptr = ptr->next) { + page = (GogEditorPage *) ptr->data; + gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), + GTK_WIDGET (page->widget), + gtk_label_new (page->label)); + gtk_widget_show (page->widget); + page_count ++; + } + } else { + /* Display a blank page */ + GtkWidget *label = gtk_label_new (NULL); + gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), + label, NULL); + gtk_widget_show (label); + page_count = 1; + } + + if (page_count == 1) + gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); + + if (editor->store_page != NULL) { + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), *editor->store_page); + g_signal_connect (G_OBJECT (notebook), + "switch_page", + G_CALLBACK (cb_switch_page), editor->store_page); + } else + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); + + return notebook; +} + +void +gog_editor_free (GogEditor *editor) +{ + g_slist_foreach (editor->pages, (GFunc) g_free, NULL); + g_slist_free (editor->pages); + + g_free (editor); +} + +typedef struct { + char const *label; + char const *value; + unsigned const flags; +} GogPositionFlagDesc; + +static GogPositionFlagDesc const position_compass[] = { + {N_("Top"), "top", GOG_POSITION_N}, + {N_("Top right"), "top-righ", GOG_POSITION_N|GOG_POSITION_E}, + {N_("Right"), "right", GOG_POSITION_E}, + {N_("Bottom right"), "bottom-righ", GOG_POSITION_E|GOG_POSITION_S}, + {N_("Bottom"), "bottom", GOG_POSITION_S}, + {N_("Bottom left"), "bottom-left", GOG_POSITION_S|GOG_POSITION_W}, + {N_("Left"), "left", GOG_POSITION_W}, + {N_("Top left"), "top-left", GOG_POSITION_W|GOG_POSITION_N} +}; + +static GogPositionFlagDesc const position_alignment[] = { + {N_("Fill"), "fill", GOG_POSITION_ALIGN_FILL}, + {N_("Start"), "start", GOG_POSITION_ALIGN_START}, + {N_("End"), "end", GOG_POSITION_ALIGN_END}, + {N_("Center"), "center", GOG_POSITION_ALIGN_CENTER} +}; + +static GogPositionFlagDesc const position_anchor[] = { + {N_("Top left"), "top-left", GOG_POSITION_ANCHOR_NW}, + {N_("Top"), "top", GOG_POSITION_ANCHOR_N}, + {N_("Top right"), "top-right", GOG_POSITION_ANCHOR_NE}, + {N_("Left"), "left", GOG_POSITION_ANCHOR_W}, + {N_("Center"), "center", GOG_POSITION_ANCHOR_CENTER}, + {N_("Right"), "right", GOG_POSITION_ANCHOR_E}, + {N_("Bottom left"), "bottom-left", GOG_POSITION_ANCHOR_SW}, + {N_("Bottom"), "bottom", GOG_POSITION_ANCHOR_S}, + {N_("Bottom right"), "bottom-right", GOG_POSITION_ANCHOR_SE} +}; + +enum { + OBJECT_PROP_0, + OBJECT_PROP_ID, + OBJECT_PROP_POSITION, + OBJECT_PROP_POSITION_COMPASS, + OBJECT_PROP_POSITION_ALIGNMENT, + OBJECT_PROP_POSITION_IS_MANUAL, + OBJECT_PROP_POSITION_ANCHOR, +}; + +enum { + CHILD_ADDED, + CHILD_REMOVED, + CHILD_NAME_CHANGED, + CHILDREN_REORDERED, + NAME_CHANGED, + CHANGED, + LAST_SIGNAL +}; +static gulong gog_object_signals [LAST_SIGNAL] = { 0, }; + +static GObjectClass *parent_klass; + +static void gog_object_set_id (GogObject *obj, unsigned id); + +static void +gog_object_finalize (GObject *gobj) +{ + GogObject *obj = GOG_OBJECT (gobj); + + g_free (obj->user_name); obj->user_name = NULL; + g_free (obj->auto_name); obj->auto_name = NULL; + + g_slist_foreach (obj->children, (GFunc) g_object_unref, NULL); + g_slist_free (obj->children); + obj->children = NULL; + + (parent_klass->finalize) (gobj); +} + +static void +gog_object_parent_changed (GogObject *child, gboolean was_set) +{ + GSList *ptr = child->children; + for (; ptr != NULL ; ptr = ptr->next) { + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (ptr->data); + (*klass->parent_changed) (ptr->data, was_set); + } + + if (IS_GOG_DATASET (child)) + gog_dataset_parent_changed (GOG_DATASET (child), was_set); +} + +static void +gog_object_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogObject *gobj = GOG_OBJECT (obj); + char const *str; + char **str_doubles; + unsigned id; + + switch (param_id) { + case OBJECT_PROP_ID: + id = g_value_get_uint (value); + gog_object_set_id (gobj, id); + break; + case OBJECT_PROP_POSITION: + str = g_value_get_string (value); + str_doubles = g_strsplit (str, " ", 4); + if (g_strv_length (str_doubles) != 4) { + g_strfreev (str_doubles); + break; + } + gobj->manual_position.x = g_ascii_strtod (str_doubles[0], NULL); + gobj->manual_position.y = g_ascii_strtod (str_doubles[1], NULL); + gobj->manual_position.w = g_ascii_strtod (str_doubles[2], NULL); + gobj->manual_position.h = g_ascii_strtod (str_doubles[3], NULL); + g_strfreev (str_doubles); + break; + case OBJECT_PROP_POSITION_COMPASS: + str = g_value_get_string (value); + if (str == NULL) + break; + for (id = 0; id < G_N_ELEMENTS (position_compass); id++) + if (strcmp (str, position_compass[id].value) == 0) + break; + if (id < G_N_ELEMENTS (position_compass)) + gog_object_set_position_flags (gobj, + position_compass[id].flags, + GOG_POSITION_COMPASS); + break; + case OBJECT_PROP_POSITION_ALIGNMENT: + str = g_value_get_string (value); + if (str == NULL) + break; + for (id = 0; id < G_N_ELEMENTS (position_alignment); id++) + if (strcmp (str, position_alignment[id].value) == 0) + break; + if (id < G_N_ELEMENTS (position_alignment)) + gog_object_set_position_flags (gobj, + position_alignment[id].flags, + GOG_POSITION_ALIGNMENT); + break; + case OBJECT_PROP_POSITION_IS_MANUAL: + gog_object_set_position_flags (gobj, + g_value_get_boolean (value) ? GOG_POSITION_MANUAL : 0, + GOG_POSITION_MANUAL); + break; + case OBJECT_PROP_POSITION_ANCHOR: + str = g_value_get_string (value); + if (str == NULL) + break; + for (id = 0; id < G_N_ELEMENTS (position_anchor); id++) + if (strcmp (str, position_anchor[id].value) == 0) + break; + if (id < G_N_ELEMENTS (position_anchor)) + gog_object_set_position_flags (gobj, + position_anchor[id].flags, + GOG_POSITION_ANCHOR); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } +} + +static void +gog_object_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogObject *gobj = GOG_OBJECT (obj); + GogObjectPosition flags; + GString *string; + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; + unsigned i; + + switch (param_id) { + case OBJECT_PROP_ID: + g_value_set_uint (value, GOG_OBJECT (obj)->id); + break; + case OBJECT_PROP_POSITION: + string = g_string_new (""); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), gobj->manual_position.x)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), gobj->manual_position.y)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), gobj->manual_position.w)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), gobj->manual_position.h)); + g_value_set_string (value, string->str); + g_string_free (string, TRUE); + break; + case OBJECT_PROP_POSITION_COMPASS: + flags = gog_object_get_position_flags (GOG_OBJECT (obj), GOG_POSITION_COMPASS); + for (i = 0; i < G_N_ELEMENTS (position_compass); i++) + if (position_compass[i].flags == flags) { + g_value_set_string (value, position_compass[i].value); + break; + } + break; + case OBJECT_PROP_POSITION_ALIGNMENT: + flags = gog_object_get_position_flags (GOG_OBJECT (obj), GOG_POSITION_ALIGNMENT); + for (i = 0; i < G_N_ELEMENTS (position_alignment); i++) + if (position_alignment[i].flags == flags) { + g_value_set_string (value, position_alignment[i].value); + break; + } + break; + case OBJECT_PROP_POSITION_IS_MANUAL: + g_value_set_boolean (value, (gobj->position & GOG_POSITION_MANUAL) != 0); + break; + case OBJECT_PROP_POSITION_ANCHOR: + flags = gog_object_get_position_flags (GOG_OBJECT (obj), GOG_POSITION_ANCHOR); + for (i = 0; i < G_N_ELEMENTS (position_anchor); i++) + if (position_anchor[i].flags == flags) { + g_value_set_string (value, position_anchor[i].value); + break; + } + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +typedef struct { + GtkWidget *x_spin, *y_spin, *w_spin, *h_spin; + GtkWidget *manual_toggle; + GogObject *gobj; + GladeXML *gui; +} ObjectPrefState; + +static void +object_pref_state_free (ObjectPrefState *state) +{ + g_object_unref (state->gobj); + g_object_unref (state->gui); +} + + +static void +cb_compass_changed (GtkComboBox *combo, ObjectPrefState *state) +{ + GogObjectPosition position = position_compass[gtk_combo_box_get_active (combo)].flags; + + gog_object_set_position_flags (state->gobj, position, GOG_POSITION_COMPASS); +} + +static void +cb_alignment_changed (GtkComboBox *combo, ObjectPrefState *state) +{ + GogObjectPosition position = position_alignment[gtk_combo_box_get_active (combo)].flags; + + gog_object_set_position_flags (state->gobj, position, GOG_POSITION_ALIGNMENT); +} + +static void +cb_position_changed (GtkWidget *spin, ObjectPrefState *state) +{ + GogViewAllocation pos; + double value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (spin)) / 100.0; + + gog_object_get_manual_position (state->gobj, &pos); + if (spin == state->x_spin) + pos.x = value; + else if (spin == state->y_spin) + pos.y = value; + else if (spin == state->w_spin) + pos.w = value; + else if (spin == state->h_spin) + pos.h = value; + gog_object_set_manual_position (state->gobj, &pos); + if (state->manual_toggle != NULL) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->manual_toggle), TRUE); +} + +static void +cb_manual_position_changed (GtkToggleButton *button, ObjectPrefState *state) +{ + gog_object_set_position_flags (state->gobj, + gtk_toggle_button_get_active (button) ? GOG_POSITION_MANUAL : 0, + GOG_POSITION_MANUAL); +} + +static void +cb_anchor_changed (GtkComboBox *combo, ObjectPrefState *state) +{ + GogObjectPosition position = position_anchor[gtk_combo_box_get_active (combo)].flags; + + gog_object_set_position_flags (state->gobj, position, GOG_POSITION_ANCHOR); + if (state->manual_toggle != NULL) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->manual_toggle), TRUE); +} + +static void +gog_object_populate_editor (GogObject *gobj, + GogEditor *editor, + G_GNUC_UNUSED GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + GtkWidget *w; + GtkSizeGroup *widget_size_group, *label_size_group; + GladeXML *gui; + GogObjectClass *gog_klass; + GogObjectPosition allowable_positions, flags; + ObjectPrefState *state; + unsigned i; + + if (gobj->role == NULL) + return; + + gog_klass = GOG_OBJECT_GET_CLASS (gobj); + + allowable_positions = gobj->role->allowable_positions; + if (!(allowable_positions & (GOG_POSITION_MANUAL | GOG_POSITION_COMPASS))) + return; + + gui = go_libglade_new ("gog-object-prefs.glade", "gog_object_prefs", NULL, cc); + if (gui == NULL) + return; + + state = g_new (ObjectPrefState, 1); + state->gobj = gobj; + state->gui = gui; + state->manual_toggle = NULL; + g_object_ref (G_OBJECT (gobj)); + + widget_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + label_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + + if (allowable_positions & GOG_POSITION_COMPASS) { + w = glade_xml_get_widget (gui, "position_combo"); + gtk_size_group_add_widget (widget_size_group, w); + flags = gog_object_get_position_flags (gobj, GOG_POSITION_COMPASS); + for (i = 0; i < G_N_ELEMENTS (position_compass); i++) { + gtk_combo_box_append_text (GTK_COMBO_BOX (w), _(position_compass[i].label)); + if (position_compass[i].flags == flags) + gtk_combo_box_set_active (GTK_COMBO_BOX (w), i); + } + g_signal_connect (G_OBJECT (w), "changed", G_CALLBACK (cb_compass_changed), state); + w = glade_xml_get_widget (gui, "position_label"); + gtk_size_group_add_widget (label_size_group, w); + } else { + w = glade_xml_get_widget (gui, "compass_position"); + gtk_widget_hide (w); + } + + + if (allowable_positions & GOG_POSITION_COMPASS) { + w = glade_xml_get_widget (gui, "alignment_combo"); + gtk_size_group_add_widget (widget_size_group, w); + flags = gog_object_get_position_flags (gobj, GOG_POSITION_ALIGNMENT); + for (i = 0; i < G_N_ELEMENTS (position_alignment); i++) { + gtk_combo_box_append_text (GTK_COMBO_BOX (w), _(position_alignment[i].label)); + if (position_alignment[i].flags == flags) + gtk_combo_box_set_active (GTK_COMBO_BOX (w), i); + } + g_signal_connect (G_OBJECT (w), "changed", G_CALLBACK (cb_alignment_changed), state); + w = glade_xml_get_widget (gui, "alignment_label"); + gtk_size_group_add_widget (label_size_group, w); + } else { + w = glade_xml_get_widget (gui, "compass_alignment"); + gtk_widget_hide (w); + } + + if (!(allowable_positions & GOG_POSITION_COMPASS)) { + w =glade_xml_get_widget (gui, "automatic_position_box"); + gtk_widget_hide (w); + } + + g_object_unref (G_OBJECT (widget_size_group)); + g_object_unref (G_OBJECT (label_size_group)); + + widget_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + label_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + + if (allowable_positions & GOG_POSITION_MANUAL) { + w = glade_xml_get_widget (gui, "x_label"); + gtk_size_group_add_widget (label_size_group, w); + w = glade_xml_get_widget (gui, "x_spin"); + gtk_size_group_add_widget (widget_size_group, w); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), gobj->manual_position.x * 100.0); + g_signal_connect (G_OBJECT (w), "value-changed", G_CALLBACK (cb_position_changed), state); + state->x_spin = w; + + w = glade_xml_get_widget (gui, "y_label"); + gtk_size_group_add_widget (label_size_group, w); + w = glade_xml_get_widget (gui, "y_spin"); + gtk_size_group_add_widget (widget_size_group, w); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), gobj->manual_position.y * 100.0); + g_signal_connect (G_OBJECT (w), "value-changed", G_CALLBACK (cb_position_changed), state); + state->y_spin = w; + + w = glade_xml_get_widget (gui, "anchor_label"); + gtk_size_group_add_widget (label_size_group, w); + w = glade_xml_get_widget (gui, "anchor_combo"); + flags = gog_object_get_position_flags (gobj, GOG_POSITION_ANCHOR); + for (i = 0; i < G_N_ELEMENTS (position_anchor); i++) { + gtk_combo_box_append_text (GTK_COMBO_BOX (w), _(position_anchor[i].label)); + if (i == 0 || position_anchor[i].flags == flags) + gtk_combo_box_set_active (GTK_COMBO_BOX (w), i); + } + g_signal_connect (G_OBJECT (w), "changed", G_CALLBACK (cb_anchor_changed), state); + gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (w), 3); + + if (gog_klass->can_manual_size) { + w = glade_xml_get_widget (gui, "width_label"); + gtk_size_group_add_widget (label_size_group, w); + w = glade_xml_get_widget (gui, "width_spin"); + gtk_size_group_add_widget (widget_size_group, w); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), gobj->manual_position.w * 100.0); + g_signal_connect (G_OBJECT (w), "value-changed", + G_CALLBACK (cb_position_changed), state); + state->w_spin = w; + + w = glade_xml_get_widget (gui, "height_label"); + gtk_size_group_add_widget (label_size_group, w); + w = glade_xml_get_widget (gui, "height_spin"); + gtk_size_group_add_widget (widget_size_group, w); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), gobj->manual_position.h * 100.0); + g_signal_connect (G_OBJECT (w), "value-changed", + G_CALLBACK (cb_position_changed), state); + state->h_spin = w; + } else { + w = glade_xml_get_widget (gui, "manual_sizes"); + gtk_widget_hide (w); + } + } + + g_object_unref (G_OBJECT (widget_size_group)); + g_object_unref (G_OBJECT (label_size_group)); + + w = glade_xml_get_widget (gui, "manual_position_button"); + if ((allowable_positions & GOG_POSITION_MANUAL) && + ((allowable_positions & (GOG_POSITION_COMPASS | GOG_POSITION_ALIGNMENT)) || + (allowable_positions & GOG_POSITION_SPECIAL))) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), + gog_object_get_position_flags (gobj, GOG_POSITION_MANUAL) != 0); + g_signal_connect (G_OBJECT (w), "toggled", G_CALLBACK (cb_manual_position_changed), state); + state->manual_toggle = w; + } else { + gtk_widget_hide (w); + } + + w = glade_xml_get_widget (gui, "gog_object_prefs"); + g_object_set_data_full (G_OBJECT (w), "state", state, + (GDestroyNotify) object_pref_state_free); + gog_editor_add_page (editor, w, _("Position")); +} + +static void +gog_object_base_init (GogObjectClass *klass) +{ + klass->roles_allocated = FALSE; + /* klass->roles might be non-NULL; in that case, it points to + the roles hash of the superclass. */ +} + +static void +gog_object_base_finalize (GogObjectClass *klass) +{ + if (klass->roles_allocated) + g_hash_table_destroy (klass->roles); +} + +static void +gog_object_class_init (GObjectClass *klass) +{ + GogObjectClass *gog_klass = (GogObjectClass *)klass; + parent_klass = g_type_class_peek_parent (klass); + + klass->finalize = gog_object_finalize; + klass->set_property = gog_object_set_property; + klass->get_property = gog_object_get_property; + + gog_klass->parent_changed = gog_object_parent_changed; + gog_klass->populate_editor = gog_object_populate_editor; + + gog_klass->can_manual_size = FALSE; + gog_klass->use_parent_as_proxy = FALSE; + + g_object_class_install_property (klass, OBJECT_PROP_ID, + g_param_spec_uint ("id", "id", "Object ID", + 0, G_MAXINT, 0, + G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (klass, OBJECT_PROP_POSITION, + g_param_spec_string ("position", "Position", + "Position and size of object, in percentage of parent size", + "0 0 1 1", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (klass, OBJECT_PROP_POSITION_COMPASS, + g_param_spec_string ("compass", "Compass", + "Compass auto position flags", + "top", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (klass, OBJECT_PROP_POSITION_ALIGNMENT, + g_param_spec_string ("alignment", "Alignment", + "Alignment flag", + "fill", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (klass, OBJECT_PROP_POSITION_IS_MANUAL, + g_param_spec_boolean ("is-position-manual", "Is position manual", + "Is position manual", + FALSE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (klass, OBJECT_PROP_POSITION_ANCHOR, + g_param_spec_string ("anchor", "Anchor", + "Anchor for manual position", + "top-left", G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + + gog_object_signals [CHILD_ADDED] = g_signal_new ("child-added", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GogObjectClass, child_added), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_OBJECT); + gog_object_signals [CHILD_REMOVED] = g_signal_new ("child-removed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GogObjectClass, child_removed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_OBJECT); + gog_object_signals [CHILD_NAME_CHANGED] = g_signal_new ("child-name-changed", + G_TYPE_FROM_CLASS (gog_klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GogObjectClass, child_name_changed), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, G_TYPE_OBJECT); + gog_object_signals [CHILDREN_REORDERED] = g_signal_new ("children-reordered", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GogObjectClass, children_reordered), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + gog_object_signals [NAME_CHANGED] = g_signal_new ("name-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GogObjectClass, name_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + gog_object_signals [CHANGED] = g_signal_new ("changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GogObjectClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN); +} + +static void +gog_object_init (GogObject *obj) +{ + obj->children = NULL; + obj->user_name = NULL; + obj->auto_name = NULL; + obj->id = 0; + obj->needs_update = FALSE; + obj->being_updated = FALSE; + obj->manual_position.x = + obj->manual_position.y = 0.0; + obj->manual_position.w = + obj->manual_position.h = 1.0; +} + +GSF_CLASS_FULL (GogObject, gog_object, + gog_object_base_init, gog_object_base_finalize, + gog_object_class_init, NULL, gog_object_init, + G_TYPE_OBJECT, 0, {}) + +static gboolean +gog_object_is_same_type (GogObject *obj_a, GogObject *obj_b) +{ + g_return_val_if_fail (obj_a->role != NULL, FALSE); + g_return_val_if_fail (obj_b->role != NULL, FALSE); + + if (obj_a->role->naming_conv != obj_b->role->naming_conv) + return FALSE; + + if (obj_a->role->naming_conv == GOG_OBJECT_NAME_BY_ROLE) + return (obj_a->role == obj_b->role); + + return (G_OBJECT_TYPE (obj_a) == G_OBJECT_TYPE (obj_b)); +} + +static void +gog_object_generate_name (GogObject *obj) +{ + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); + char const *type_name; + + g_return_if_fail (klass != NULL); + g_return_if_fail (obj->role != NULL); + + switch (obj->role->naming_conv) { + default : + case GOG_OBJECT_NAME_MANUALLY : + g_warning ("Role %s should not be autogenerating names", + obj->role->id); + + case GOG_OBJECT_NAME_BY_ROLE : + g_return_if_fail (obj->role != NULL); + type_name = _(obj->role->id); + break; + + case GOG_OBJECT_NAME_BY_TYPE : + g_return_if_fail (klass->type_name != NULL); + type_name = _((*klass->type_name) (obj)); + break; + } + + if (type_name == NULL) + type_name = "BROKEN"; + + g_free (obj->auto_name); + obj->auto_name = g_strdup_printf ("%s%d", type_name, obj->id); +} + +unsigned +gog_object_get_id (GogObject const *obj) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, 0); + g_return_val_if_fail (obj != 0, 0); + + return obj->id; +} + +static void +gog_object_generate_id (GogObject *obj) +{ + GSList *ptr; + unsigned id_max = 0; + GogObject *child; + + obj->id = 0; + + if (obj->parent == NULL) + return; + + for (ptr = obj->parent->children; ptr != NULL ; ptr = ptr->next) { + child = GOG_OBJECT (ptr->data); + if (gog_object_is_same_type (obj, child)) + id_max = MAX (child->id, id_max); + } + obj->id = id_max + 1; + + gog_object_generate_name (obj); +} + +static void +gog_object_set_id (GogObject *obj, unsigned id) +{ + gboolean found = FALSE; + GSList *ptr; + GogObject *child; + + g_return_if_fail (GOG_OBJECT (obj) != NULL); + + if (id == 0) + return gog_object_generate_id (obj); + + g_return_if_fail (GOG_OBJECT (obj)->parent != NULL); + + for (ptr = obj->parent->children; ptr != NULL && !found; ptr = ptr->next) { + child = GOG_OBJECT (ptr->data); + found = child->id == id && + gog_object_is_same_type (obj, child) && + ptr->data != obj; + } + + if (found) { + g_warning ("id %u already exists", id); + gog_object_generate_id (obj); + return; + } + + if (id == obj->id) + return; + + obj->id = id; + gog_object_generate_name (obj); +} + +static void +dataset_dup (GogDataset const *src, GogDataset *dst) +{ + gint n, last; + gog_dataset_dims (src, &n, &last); + for ( ; n <= last ; n++) + gog_dataset_set_dim (dst, n, + go_data_dup (gog_dataset_get_dim (src, n)), + NULL); +} + +/** + * gog_object_dup : + * @src : #GogObject + * @new_parent : #GogObject the parent tree for the object (can be NULL) + * @datadup : a function to duplicate the data (a default one is used if NULL) + * + * Create a deep copy of @obj using @new_parent as its parent. + **/ + +GogObject * +gog_object_dup (GogObject const *src, GogObject *new_parent, GogDataDuplicator datadup) +{ + gint n; + GParamSpec **props; + GogObject *dst = NULL; + GSList *ptr; + GValue val = { 0 }; + + if (src == NULL) + return NULL; + + g_return_val_if_fail (GOG_OBJECT (src) != NULL, NULL); + + if (src->role == NULL || src->explicitly_typed_role) + dst = g_object_new (G_OBJECT_TYPE (src), NULL); + if (new_parent) + dst = gog_object_add_by_role (new_parent, src->role, dst); + + dst->position = src->position; + /* properties */ + props = g_object_class_list_properties (G_OBJECT_GET_CLASS (src), &n); + while (n-- > 0) + if (props[n]->flags & GOG_PARAM_PERSISTENT) { + g_value_init (&val, props[n]->value_type); + g_object_get_property (G_OBJECT (src), props[n]->name, &val); + g_object_set_property (G_OBJECT (dst), props[n]->name, &val); + g_value_unset (&val); + } + g_free (props); + + if (IS_GOG_DATASET (src)) { /* convenience to save data */ + if (datadup) + datadup (GOG_DATASET (src), GOG_DATASET (dst)); + else + dataset_dup (GOG_DATASET (src), GOG_DATASET (dst)); + } + + for (ptr = src->children; ptr != NULL ; ptr = ptr->next) + /* children added directly to new parent, no need to use the + * function result */ + gog_object_dup (ptr->data, dst, datadup); + + return dst; +} + +/** + * gog_object_get_parent : + * @obj : a #GogObject + * + * Returns @obj's parent, potentially NULL if it has not been added to a + * heirarchy yet. does not change ref-count in any way. + **/ +GogObject * +gog_object_get_parent (GogObject const *obj) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); + return obj->parent; +} + +/** + * gog_object_get_parent_typed : + * @obj : a #GogObject + * @type : a #GType + * + * Returns @obj's parent of type @type, potentially NULL if it has not been + * added to a heirarchy yet or none of the parents are of type @type. + **/ +GogObject * +gog_object_get_parent_typed (GogObject const *obj, GType t) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); + + for (; obj != NULL ; obj = obj->parent) + if (G_TYPE_CHECK_INSTANCE_TYPE (obj, t)) + return GOG_OBJECT (obj); /* const cast */ + return NULL; +} + +/** + * gog_object_get_graph : + * @obj : const * #GogObject + * + * Returns the parent graph. + **/ +GogGraph * +gog_object_get_graph (GogObject const *obj) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); + + for (; obj != NULL ; obj = obj->parent) + if (IS_GOG_GRAPH (obj)) + return GOG_GRAPH (obj); + return NULL; +} + +GogTheme * +gog_object_get_theme (GogObject const *obj) +{ + GogGraph *graph = gog_object_get_graph (obj); + + return (graph != NULL) ? gog_graph_get_theme (graph) : NULL; +} + +/** + * gog_object_get_name : + * @obj : a #GogObject + * + * No need to free the result + **/ +char const * +gog_object_get_name (GogObject const *obj) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); + return (obj->user_name != NULL && *obj->user_name != '\0') ? obj->user_name : obj->auto_name; +} + +/** + * gog_object_set_name : + * @obj : #GogObject + * @name : + * @err : #GError + * + * Assign the new name and signals that it has changed. + * NOTE : it _absorbs_ @name rather than copying it, and generates a new name + * if @name == NULL + **/ +void +gog_object_set_name (GogObject *obj, char *name, GError **err) +{ + GogObject *tmp; + + g_return_if_fail (GOG_OBJECT (obj) != NULL); + + if (obj->user_name == name) + return; + g_free (obj->user_name); + obj->user_name = name; + + g_signal_emit (G_OBJECT (obj), + gog_object_signals [NAME_CHANGED], 0); + + for (tmp = obj; tmp != NULL ; tmp = tmp->parent) + g_signal_emit (G_OBJECT (tmp), + gog_object_signals [CHILD_NAME_CHANGED], 0, obj); +} + +/** + * gog_object_get_children : + * @obj : a #GogObject + * @filter : an optional #GogObjectRole to use as a filter + * + * The list needs to be Freed + **/ +GSList * +gog_object_get_children (GogObject const *obj, GogObjectRole const *filter) +{ + GSList *ptr, *res = NULL; + + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); + + if (filter == NULL) + return g_slist_copy (obj->children); + + for (ptr = obj->children ; ptr != NULL ; ptr = ptr->next) + if (GOG_OBJECT (ptr->data)->role == filter) + res = g_slist_prepend (res, ptr->data); + return g_slist_reverse (res); +} + +/** + * gog_object_get_child_by_role : + * @obj : a #GogObject + * @role : a #GogObjectRole to use as a filter + * + * A convenience routine to handle a unique child + * Returns NULL and spews an error if there is more than one. + **/ +GogObject * +gog_object_get_child_by_role (GogObject const *obj, GogObjectRole const *role) +{ + GogObject *res = NULL; + GSList *children = gog_object_get_children (obj, role); + + if (children != NULL && children->next == NULL) + res = children->data; + g_slist_free (children); + return res; +} + +/** + * gog_object_is_deletable : + * @obj : a #GogObject + * + * Can the specified @obj be deleted ? + **/ +gboolean +gog_object_is_deletable (GogObject const *obj) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, FALSE); + + if (IS_GOG_GRAPH (obj)) + return FALSE; + + return obj->role == NULL || obj->role->can_remove == NULL || + (obj->role->can_remove) (obj); +} + +struct possible_add_closure { + GSList *res; + GogObject const *parent; +}; + +static void +cb_collect_possible_additions (char const *name, GogObjectRole const *role, + struct possible_add_closure *data) +{ + if (role->can_add == NULL || (role->can_add) (data->parent)) + data->res = g_slist_prepend (data->res, (gpointer)role); +} + +static int +gog_object_position_cmp (GogObjectPosition pos) +{ + if (pos & GOG_POSITION_COMPASS) + return 0; + if (GOG_POSITION_IS_SPECIAL (pos) || + GOG_POSITION_IS_PADDING (pos)) + return 2; + return 1; /* GOG_POSITION_MANUAL */ +} + +static int +gog_role_cmp (GogObjectRole const *a, GogObjectRole const *b) +{ + int index_a = gog_object_position_cmp (a->allowable_positions); + int index_b = gog_object_position_cmp (b->allowable_positions); + + if (b->priority != a->priority) + return b->priority - a->priority; + + /* intentionally reverse to put SPECIAL at the top */ + if (index_a < index_b) + return 1; + else if (index_a > index_b) + return -1; + return 0; +} + +static int +gog_role_cmp_full (GogObjectRole const *a, GogObjectRole const *b) +{ + int res = gog_role_cmp (a, b); + if (res != 0) + return res; + return g_utf8_collate (a->id, b->id); +} + +/** + * gog_object_possible_additions : + * @parent : a #GogObject + * + * returns a list of GogObjectRoles that could be added + * + * The resulting list needs to be freed + **/ +GSList * +gog_object_possible_additions (GogObject const *parent) +{ + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (parent); + g_return_val_if_fail (klass != NULL, NULL); + + if (klass->roles != NULL) { + struct possible_add_closure data; + data.res = NULL; + data.parent = parent; + + g_hash_table_foreach (klass->roles, + (GHFunc) cb_collect_possible_additions, &data); + + return g_slist_sort (data.res, (GCompareFunc) gog_role_cmp_full); + } + + return NULL; +} + +/** + * gog_object_can_reorder : + * @obj : #GogObject + * @inc_ok : possibly NULL pointer. + * @dec_ok : possibly NULL pointer. + * + * If @obj can move forward or backward in its parents child list + **/ +void +gog_object_can_reorder (GogObject const *obj, gboolean *inc_ok, gboolean *dec_ok) +{ + GogObject const *parent; + GSList *ptr; + + g_return_if_fail (GOG_OBJECT (obj) != NULL); + + if (inc_ok != NULL) + *inc_ok = FALSE; + if (dec_ok != NULL) + *dec_ok = FALSE; + + if (obj->parent == NULL || gog_object_get_graph (obj) == NULL) + return; + parent = obj->parent; + ptr = parent->children; + + g_return_if_fail (ptr != NULL); + + /* find a pointer to the previous sibling */ + if (ptr->data != obj) { + while (ptr->next != NULL && ptr->next->data != obj) + ptr = ptr->next; + + g_return_if_fail (ptr->next != NULL); + + if (inc_ok != NULL && + !gog_role_cmp (((GogObject *)ptr->data)->role, obj->role)) + *inc_ok = TRUE; + + ptr = ptr->next; + } + + /* ptr now points at @obj */ + if (dec_ok != NULL && ptr->next != NULL && + !gog_role_cmp (obj->role, ((GogObject *)ptr->next->data)->role)) + *dec_ok = TRUE; +} + +/** + * gog_object_reorder : + * @obj : #GogObject + * @inc : + * @goto_max : + * + * Returns the object just before @obj in the new ordering. + **/ +GogObject * +gog_object_reorder (GogObject const *obj, gboolean inc, gboolean goto_max) +{ + GogObject *parent, *obj_follows; + GSList **ptr, *tmp; + + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); + + if (obj->parent == NULL || gog_object_get_graph (obj) == NULL) + return NULL; + parent = obj->parent; + + if (inc) + parent->children = g_slist_reverse (parent->children); + + for (ptr = &parent->children; *ptr != NULL && (*ptr)->data != obj ;) + ptr = &(*ptr)->next; + + g_return_val_if_fail (*ptr != NULL, NULL); + g_return_val_if_fail ((*ptr)->next != NULL, NULL); + + tmp = *ptr; + *ptr = tmp->next; + ptr = &(*ptr)->next; + + while (goto_max && *ptr != NULL && + !gog_role_cmp (obj->role, ((GogObject *)((*ptr)->data))->role)) + ptr = &(*ptr)->next; + + tmp->next = *ptr; + *ptr = tmp; + + if (inc) + parent->children = g_slist_reverse (parent->children); + + if (parent->children->data != obj) { + for (tmp = parent->children ; tmp->next->data != obj ; ) + tmp = tmp->next; + obj_follows = tmp->data; + } else + obj_follows = NULL; + + /* Pass the sibling that precedes obj, or NULL if is the head */ + g_signal_emit (G_OBJECT (parent), + gog_object_signals [CHILDREN_REORDERED], 0); + gog_object_emit_changed (parent, TRUE); + + return obj_follows; +} + +/** + * gog_object_get_editor : + * @obj : #GogObject + * @dalloc : #GogDataAllocator + * @cc : #GOCmdContext + * + **/ + +gpointer +gog_object_get_editor (GogObject *obj, GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + GtkWidget *notebook; + GogEditor *editor; + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); + + g_return_val_if_fail (klass != NULL, NULL); + + editor = gog_editor_new (); + if (klass->populate_editor) { + /* If there are pending updates do them before creating the editor + * to avoid expensive widget changes later */ + gog_graph_force_update (gog_object_get_graph (obj)); + (*klass->populate_editor) (obj, editor, dalloc, cc); + } + + notebook = gog_editor_get_notebook (editor); + + gog_editor_free (editor); + + return notebook; +} + +/** + * gog_object_new_view : + * @obj : a #GogObject + * @data : + **/ +GogView * +gog_object_new_view (GogObject const *obj, GogView *parent) +{ + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); + + g_return_val_if_fail (klass != NULL, NULL); + + if (klass->view_type != 0) + /* set model before parent */ + return g_object_new (klass->view_type, + "model", obj, + "parent", parent, + NULL); + + return NULL; +} + +void +gog_object_update (GogObject *obj) +{ + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); + GSList *ptr; + + g_return_if_fail (klass != NULL); + + ptr = obj->children; /* depth first */ + for (; ptr != NULL ; ptr = ptr->next) + gog_object_update (ptr->data); + + if (obj->needs_update) { + obj->needs_update = FALSE; + obj->being_updated = TRUE; + gog_debug (0, g_warning ("updating %s (%p)", G_OBJECT_TYPE_NAME (obj), obj);); + if (klass->update != NULL) + (*klass->update) (obj); + obj->being_updated = FALSE; + } +} + +gboolean +gog_object_request_update (GogObject *obj) +{ + GogGraph *graph; + g_return_val_if_fail (GOG_OBJECT (obj), FALSE); + g_return_val_if_fail (!obj->being_updated, FALSE); + + if (obj->needs_update) + return FALSE; + + graph = gog_object_get_graph (obj); + if (graph == NULL) /* we are not linked into a graph yet */ + return FALSE; + + gog_graph_request_update (graph); + obj->needs_update = TRUE; + + return TRUE; +} + +void +gog_object_emit_changed (GogObject *obj, gboolean resize) +{ + GogObjectClass *gog_klass; + + g_return_if_fail (GOG_OBJECT (obj)); + + gog_klass = GOG_OBJECT_GET_CLASS (obj); + + if (gog_klass->use_parent_as_proxy) { + obj = obj->parent; + if (obj != NULL) { + g_return_if_fail (IS_GOG_OBJECT (obj)); + gog_object_emit_changed (obj, resize); + } + return; + } + g_signal_emit (G_OBJECT (obj), + gog_object_signals [CHANGED], 0, resize); +} + +/******************************************************************************/ + +/** + * gog_object_clear_parent : + * @obj : #GogObject + * + * Does _not_ unref the child, which in effect adds a ref by freeing up the ref + * previously associated with the parent. + **/ +gboolean +gog_object_clear_parent (GogObject *obj) +{ + GogObjectClass *klass; + GogObject *parent; + + g_return_val_if_fail (GOG_OBJECT (obj), FALSE); + g_return_val_if_fail (obj->parent != NULL, FALSE); + g_return_val_if_fail (gog_object_is_deletable (obj), FALSE); + + klass = GOG_OBJECT_GET_CLASS (obj); + parent = obj->parent; + g_signal_emit (G_OBJECT (parent), + gog_object_signals [CHILD_REMOVED], 0, obj); + (*klass->parent_changed) (obj, FALSE); + + if (obj->role != NULL && obj->role->pre_remove != NULL) + (obj->role->pre_remove) (parent, obj); + + parent->children = g_slist_remove (parent->children, obj); + obj->parent = NULL; + + if (obj->role != NULL && obj->role->post_remove != NULL) + (obj->role->post_remove) (parent, obj); + + obj->role = NULL; + + return TRUE; +} + +/** + * gog_object_set_parent : + * @child : #GogObject. + * @parent : #GogObject. + * @id : optionally %NULL. + * @role : a static string that can be sent to @parent::add + * + * Absorbs a ref to @child + **/ +gboolean +gog_object_set_parent (GogObject *child, GogObject *parent, + GogObjectRole const *role, unsigned id) +{ + GogObjectClass *klass; + GSList **step; + + g_return_val_if_fail (GOG_OBJECT (child), FALSE); + g_return_val_if_fail (child->parent == NULL, FALSE); + g_return_val_if_fail (role != NULL, FALSE); + + klass = GOG_OBJECT_GET_CLASS (child); + child->parent = parent; + child->role = role; + child->position = role->default_position; + + /* Insert sorted based on hokey little ordering */ + step = &parent->children; + while (*step != NULL && + gog_role_cmp_full (GOG_OBJECT ((*step)->data)->role, role) >= 0) + step = &((*step)->next); + *step = g_slist_prepend (*step, child); + + if (id != 0) + gog_object_set_id (child, id); + else + gog_object_generate_id (child); + + if (role->post_add != NULL) + (role->post_add) (parent, child); + (*klass->parent_changed) (child, TRUE); + + g_signal_emit (G_OBJECT (parent), + gog_object_signals [CHILD_ADDED], 0, child); + + return TRUE; +} + +GogObject * +gog_object_add_by_role (GogObject *parent, GogObjectRole const *role, GogObject *child) +{ + GType is_a; + gboolean const explicitly_typed_role = (child != NULL); + + g_return_val_if_fail (role != NULL, NULL); + g_return_val_if_fail (GOG_OBJECT (parent) != NULL, NULL); + + is_a = g_type_from_name (role->is_a_typename); + + g_return_val_if_fail (is_a != 0, NULL); + + if (child == NULL) + child = (role->allocate) + ? (role->allocate) (parent) + : g_object_new (is_a, NULL); + + g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (child, is_a), NULL); + child->explicitly_typed_role = explicitly_typed_role; + if (gog_object_set_parent (child, parent, role, 0)) + return child; + g_object_unref (child); + return NULL; +} + +/** + * gog_object_add_by_name : + * @parent : #GogObject + * @role : + * @child : optionally null #GogObject + * + * Returns a newly created child of @parent in @role. If @child is provided, + * it is assumed to be an unaffiliated object that will be assigned in @role. + * On failure return NULL. + **/ +GogObject * +gog_object_add_by_name (GogObject *parent, + char const *role, GogObject *child) +{ + return gog_object_add_by_role (parent, + gog_object_find_role_by_name (parent, role), child); +} + +/** + * gog_object_get_position_flags : + * @obj : #GogObject + * @mask : #GogObjectPosition + * + * Retrieve position flags of GogObject @obj, masked by @mask. + */ +GogObjectPosition +gog_object_get_position_flags (GogObject const *obj, GogObjectPosition mask) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, GOG_POSITION_SPECIAL & mask); + return obj->position & mask; +} + +/** + * gog_object_set_position_flags : + * @obj : #GogObject + * @flags : #GogObjectPosition + * @mask : #GogObjectPosition + * + * Attempts to set the position flags of @obj to @flags. + * Returns TRUE the new flags are permitted. + **/ +gboolean +gog_object_set_position_flags (GogObject *obj, GogObjectPosition flags, GogObjectPosition mask) +{ + g_return_val_if_fail (GOG_OBJECT (obj) != NULL, FALSE); + + if (obj->role == NULL) + return FALSE; + + if ((obj->position & mask) == flags) + return TRUE; + + if ((flags & obj->role->allowable_positions) != + (flags & (GOG_POSITION_COMPASS | GOG_POSITION_ANY_MANUAL))) { + g_warning ("[GogObject::set_position_flags] Invalid flags (%s)", + gog_object_get_name (obj)); + return FALSE; + } + obj->position = (obj->position & ~mask) | (flags & mask); + gog_object_emit_changed (obj, TRUE); + return TRUE; +} + +/** + * gog_object_get_manual_position: + * @obj : #GogObject + * + * returns manual position of this object, in points. + **/ +void +gog_object_get_manual_position (GogObject *gobj, GogViewAllocation *pos) +{ + g_return_if_fail (GOG_OBJECT (gobj) != NULL); + + if (pos != NULL) + *pos = gobj->manual_position; +} + +/** + * gog_object_set_manual_position: + * @obj : #GogObject + * @pos : #GogViewAllocation + * + * set manual position of given object, in points. + **/ +void +gog_object_set_manual_position (GogObject *gobj, GogViewAllocation const *pos) +{ + g_return_if_fail (GOG_OBJECT (gobj) != NULL); + + if (gobj->manual_position.x == pos->x && + gobj->manual_position.y == pos->y && + gobj->manual_position.w == pos->w && + gobj->manual_position.h == pos->h) + return; + + gobj->manual_position = *pos; + gog_object_emit_changed (gobj, TRUE); +} + +/** + * gog_object_get_manual_allocation: + * @gobj : #GogObject + * @parent_allocation : #GogViewAllocation + * @requisition : #GogViewRequisition + * + * Returns manual allocation of a GogObject given its parent allocation + * and its size request. + **/ +GogViewAllocation +gog_object_get_manual_allocation (GogObject *gobj, + GogViewAllocation const *parent_allocation, + GogViewRequisition const *requisition) +{ + GogViewAllocation pos; + unsigned anchor; + + pos.x = parent_allocation->x + gobj->manual_position.x * parent_allocation->w; + pos.y = parent_allocation->y + gobj->manual_position.y * parent_allocation->h; + + if (GOG_OBJECT_GET_CLASS (gobj)->can_manual_size) { + pos.w = gobj->manual_position.w * parent_allocation->w; + pos.h = gobj->manual_position.h * parent_allocation->h; + } else { + pos.w = requisition->w; + pos.h = requisition->h; + } + + anchor = gog_object_get_position_flags (gobj, GOG_POSITION_ANCHOR); + + switch (anchor) { + case GOG_POSITION_ANCHOR_N: + case GOG_POSITION_ANCHOR_CENTER: + case GOG_POSITION_ANCHOR_S: + pos.x -= pos.w / 2.0; + break; + case GOG_POSITION_ANCHOR_SE: + case GOG_POSITION_ANCHOR_E: + case GOG_POSITION_ANCHOR_NE: + pos.x -= pos.w; + break; + default: + break; + } + switch (anchor) { + case GOG_POSITION_ANCHOR_E: + case GOG_POSITION_ANCHOR_CENTER: + case GOG_POSITION_ANCHOR_W: + pos.y -= pos.h / 2.0; + break; + case GOG_POSITION_ANCHOR_SE: + case GOG_POSITION_ANCHOR_S: + case GOG_POSITION_ANCHOR_SW: + pos.y -= pos.h; + break; + default: + break; + } + + return pos; +} + +GogObjectRole const * +gog_object_find_role_by_name (GogObject const *obj, char const *role) +{ + GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); + + g_return_val_if_fail (klass != NULL, NULL); + + return g_hash_table_lookup (klass->roles, role); +} + +static void +cb_copy_hash_table (gpointer key, gpointer value, GHashTable *hash_table) +{ + g_hash_table_insert (hash_table, key, value); +} + +static void +gog_object_allocate_roles (GogObjectClass *klass) +{ + GHashTable *roles = g_hash_table_new (g_str_hash, g_str_equal); + + if (klass->roles != NULL) + g_hash_table_foreach (klass->roles, + (GHFunc) cb_copy_hash_table, roles); + klass->roles = roles; + klass->roles_allocated = TRUE; +} + +void +gog_object_register_roles (GogObjectClass *klass, + GogObjectRole const *roles, unsigned n_roles) +{ + unsigned i; + + if (!klass->roles_allocated) + gog_object_allocate_roles (klass); + + for (i = 0 ; i < n_roles ; i++) { + g_return_if_fail (g_hash_table_lookup (klass->roles, + (gpointer )roles[i].id) == NULL); + g_hash_table_replace (klass->roles, + (gpointer )roles[i].id, (gpointer) (roles + i)); + } +} diff --git a/lib/goffice/graph/gog-object.h b/lib/goffice-0.0.4/goffice/graph/gog-object.h similarity index 73% rename from lib/goffice/graph/gog-object.h rename to lib/goffice-0.0.4/goffice/graph/gog-object.h index c1e5a445cf..3db7c4643a 100644 --- a/lib/goffice/graph/gog-object.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-object.h @@ -15,19 +15,35 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_OBJECT_H #define GOG_OBJECT_H #include +#include #include -#include /* for GnmCmdContext */ #include G_BEGIN_DECLS +typedef struct { + char const *label; /* label for notebook page */ + gpointer widget; /* GtkWidget* */ +} GogEditorPage; + +typedef struct { + unsigned *store_page; /* pointer to a place for storing last edited page */ + GSList *pages; /* GogEditorPage */ +} GogEditor; + +GogEditor *gog_editor_new (void); +void gog_editor_add_page (GogEditor *editor, gpointer widget, char const *label); +void gog_editor_set_store_page (GogEditor *editor, unsigned *store_page); +gpointer gog_editor_get_notebook (GogEditor *editor); +void gog_editor_free (GogEditor *editor); + typedef enum { GOG_OBJECT_NAME_BY_ROLE = 1, GOG_OBJECT_NAME_BY_TYPE = 2, @@ -60,15 +76,17 @@ struct _GogObjectRole { struct _GogObject { GObject base; - char *user_name; /* user assigned, NULL will fall back to id */ - char *id; /* system generated */ + unsigned id; + char *user_name; /* user assigned, NULL will fall back to system generated */ + char *auto_name; /* system generated, in current locale */ + GogObjectRole const *role; GogObject *parent; GSList *children; GogObjectPosition position; - GogViewAllocation *manual_position; + GogViewAllocation manual_position; unsigned needs_update : 1; unsigned being_updated : 1; @@ -82,13 +100,17 @@ typedef struct { GType view_type; unsigned use_parent_as_proxy : 1; /* when we change, pretend it was our parent */ + unsigned can_manual_size : 1; + unsigned roles_allocated : 1; /* Virtuals */ void (*update) (GogObject *obj); void (*parent_changed) (GogObject *obj, gboolean was_set); char const *(*type_name) (GogObject const *obj); - gpointer (*editor) (GogObject *obj, - GogDataAllocator *dalloc, GnmCmdContext *cc); + void (*populate_editor) (GogObject *obj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc); /* signals */ void (*changed) (GogObject *obj, gboolean size); @@ -112,18 +134,20 @@ typedef struct { GType gog_object_get_type (void); -GogObject *gog_object_dup (GogObject const *obj, GogObject *new_parent); +typedef void (*GogDataDuplicator) (GogDataset const *src, GogDataset *dst); + +GogObject *gog_object_dup (GogObject const *obj, GogObject *new_parent, GogDataDuplicator dup); GogObject *gog_object_get_parent (GogObject const *obj); GogObject *gog_object_get_parent_typed (GogObject const *obj, GType t); GogGraph *gog_object_get_graph (GogObject const *obj); GogTheme *gog_object_get_theme (GogObject const *obj); -char const *gog_object_get_id (GogObject const *obj); +unsigned gog_object_get_id (GogObject const *obj); char const *gog_object_get_name (GogObject const *obj); void gog_object_set_name (GogObject *obj, char *name, GError **err); GSList *gog_object_get_children (GogObject const *obj, GogObjectRole const *filter); GogObject *gog_object_get_child_by_role(GogObject const *obj, GogObjectRole const *role); gpointer gog_object_get_editor (GogObject *obj, - GogDataAllocator *dalloc, GnmCmdContext *cc); + GogDataAllocator *dalloc, GOCmdContext *cc); GogView *gog_object_new_view (GogObject const *obj, GogView *view); gboolean gog_object_is_deletable (GogObject const *obj); GSList *gog_object_possible_additions (GogObject const *obj); @@ -135,8 +159,15 @@ void gog_object_can_reorder (GogObject const *obj, gboolean *inc_ok, gboolean *dec_ok); GogObject *gog_object_reorder (GogObject const *obj, gboolean inc, gboolean goto_max); -GogObjectPosition gog_object_get_pos (GogObject const *obj); -gboolean gog_object_set_pos (GogObject *obj, GogObjectPosition p); + +GogObjectPosition gog_object_get_position_flags (GogObject const *obj, GogObjectPosition mask); +gboolean gog_object_set_position_flags (GogObject *obj, GogObjectPosition p, GogObjectPosition mask); +void gog_object_get_manual_position (GogObject *obj, GogViewAllocation *pos); +void gog_object_set_manual_position (GogObject *obj, GogViewAllocation const *pos); + +GogViewAllocation gog_object_get_manual_allocation (GogObject *gobj, + GogViewAllocation const *parent_allocation, + GogViewRequisition const *requisition); GogObjectRole const *gog_object_find_role_by_name (GogObject const *obj, char const *role); @@ -147,7 +178,7 @@ gboolean gog_object_request_update (GogObject *obj); void gog_object_emit_changed (GogObject *obj, gboolean size); gboolean gog_object_clear_parent (GogObject *obj); gboolean gog_object_set_parent (GogObject *child, GogObject *parent, - GogObjectRole const *role, char *name); + GogObjectRole const *role, unsigned id); void gog_object_register_roles (GogObjectClass *klass, GogObjectRole const *roles, unsigned n_roles); diff --git a/lib/goffice/graph/gog-outlined-object.c b/lib/goffice-0.0.4/goffice/graph/gog-outlined-object.c similarity index 98% rename from lib/goffice/graph/gog-outlined-object.c rename to lib/goffice-0.0.4/goffice/graph/gog-outlined-object.c index 86a254fdb7..4f7b055512 100644 --- a/lib/goffice/graph/gog-outlined-object.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-outlined-object.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -146,7 +146,7 @@ gog_outlined_view_render (GogView *view, GogViewAllocation const *bbox) GogStyledObject *sobj = GOG_STYLED_OBJECT (view->model); gog_renderer_push_style (view->renderer, sobj->style); - gog_renderer_draw_sharp_rectangle (view->renderer, &view->allocation, NULL); + gog_renderer_draw_sharp_rectangle (view->renderer, &view->allocation); gog_renderer_pop_style (view->renderer); if (klass->call_parent_render) diff --git a/lib/goffice/graph/gog-outlined-object.h b/lib/goffice-0.0.4/goffice/graph/gog-outlined-object.h similarity index 96% rename from lib/goffice/graph/gog-outlined-object.h rename to lib/goffice-0.0.4/goffice/graph/gog-outlined-object.h index 2398761c5c..7d32f6fd54 100644 --- a/lib/goffice/graph/gog-outlined-object.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-outlined-object.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_OUTLINED_OBJECT_H diff --git a/lib/goffice/graph/gog-plot-engine.c b/lib/goffice-0.0.4/goffice/graph/gog-plot-engine.c similarity index 57% rename from lib/goffice/graph/gog-plot-engine.c rename to lib/goffice-0.0.4/goffice/graph/gog-plot-engine.c index cdefb55535..113c7e9c4d 100644 --- a/lib/goffice/graph/gog-plot-engine.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-plot-engine.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,11 +23,15 @@ #include #include #include +#include +#include +#include +#include +#include +#include + #include -#include - #include - #include static GSList *refd_plugins; @@ -35,8 +39,6 @@ static GSList *refd_plugins; /***************************************************************************/ /* Support plot engines in plugins */ -#include - #define GOG_PLOT_ENGINE_SERVICE_TYPE (gog_plot_engine_service_get_type ()) #define GOG_PLOT_ENGINE_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_PLOT_ENGINE_SERVICE_TYPE, GogPlotEngineService)) #define IS_GOG_PLOT_ENGINE_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_PLOT_ENGINE_SERVICE_TYPE)) @@ -49,7 +51,7 @@ typedef PluginServiceGObjectLoaderClass GogPlotEngineServiceClass; static GHashTable *pending_engines = NULL; static char * -gog_plot_engine_service_get_description (GnmPluginService *service) +gog_plot_engine_service_get_description (GOPluginService *service) { return g_strdup (_("Plot Engine")); } @@ -57,7 +59,7 @@ gog_plot_engine_service_get_description (GnmPluginService *service) static void gog_plot_engine_service_class_init (PluginServiceGObjectLoaderClass *gobj_loader_class) { - GnmPluginServiceClass *ps_class = GPS_CLASS (gobj_loader_class); + GOPluginServiceClass *ps_class = GPS_CLASS (gobj_loader_class); ps_class->get_description = gog_plot_engine_service_get_description; @@ -67,7 +69,7 @@ gog_plot_engine_service_class_init (PluginServiceGObjectLoaderClass *gobj_loader GSF_CLASS (GogPlotEngineService, gog_plot_engine_service, gog_plot_engine_service_class_init, NULL, - GNM_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE) + GO_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE) GogPlot * gog_plot_new_by_name (char const *id) @@ -76,11 +78,11 @@ gog_plot_new_by_name (char const *id) if (type == 0) { ErrorInfo *err = NULL; - GnmPluginService *service = + GOPluginService *service = pending_engines ? g_hash_table_lookup (pending_engines, id) : NULL; - GnmPlugin *plugin; + GOPlugin *plugin; if (!service || !service->is_active) return NULL; @@ -103,7 +105,7 @@ gog_plot_new_by_name (char const *id) plugin = plugin_service_get_plugin (service); refd_plugins = g_slist_prepend (refd_plugins, plugin); g_object_ref (plugin); - gnm_plugin_use_ref (plugin); + go_plugin_use_ref (plugin); } return g_object_new (type, NULL); @@ -137,11 +139,13 @@ cb_pending_plot_types_load (char const *path, G_GNUC_UNUSED gpointer ignored) { xmlNode *ptr, *prop; - xmlDoc *doc = xmlParseFile (path); + xmlDoc *doc = go_xml_parse_file (path); GogPlotFamily *family = NULL; GogPlotType *type; - int col, row; + int col, row, priority; xmlChar *name, *image_file, *description, *engine; + xmlChar *axis_set_str; + GogAxisSet axis_set; g_return_if_fail (doc != NULL && doc->xmlRootNode != NULL); @@ -150,7 +154,15 @@ cb_pending_plot_types_load (char const *path, if (!xmlIsBlankNode (ptr) && ptr->name && !strcmp (ptr->name, "Family")) { name = xmlGetProp (ptr, "_name"); image_file = xmlGetProp (ptr, "sample_image_file"); - family = gog_plot_family_register (name, image_file); + if (!xml_node_get_int (ptr, "priority", &priority)) + priority = 0; + axis_set_str = xmlGetProp (ptr, "axis_set"); + axis_set = gog_axis_set_from_str (axis_set_str); + if (axis_set_str != NULL) + xmlFree (axis_set_str); + else + g_warning ("[GogPlotTypeService::plot_types_load] missing axis set type"); + family = gog_plot_family_register (name, image_file, priority, axis_set); if (family != NULL) service->families = g_slist_prepend (service->families, family); if (name != NULL) xmlFree (name); @@ -188,8 +200,9 @@ cb_pending_plot_types_load (char const *path, } if (type->properties == NULL) - type->properties = g_hash_table_new_full (g_str_hash, g_str_equal, - xmlFree, xmlFree); + type->properties = + g_hash_table_new_full (g_str_hash, g_str_equal, + xmlFree, xmlFree); g_hash_table_replace (type->properties, prop_name, xmlNodeGetContent (prop)); } @@ -217,7 +230,7 @@ pending_plot_types_load (void) } static void -gog_plot_type_service_read_xml (GnmPluginService *service, xmlNode *tree, ErrorInfo **ret_error) +gog_plot_type_service_read_xml (GOPluginService *service, xmlNode *tree, ErrorInfo **ret_error) { char *path; xmlNode *ptr; @@ -226,7 +239,7 @@ gog_plot_type_service_read_xml (GnmPluginService *service, xmlNode *tree, ErrorI if (0 == xmlStrcmp (ptr->name, "file") && NULL != (path = xmlNodeGetContent (ptr))) { if (!g_path_is_absolute (path)) { - char const *dir = gnm_plugin_get_dir_name ( + char const *dir = go_plugin_get_dir_name ( plugin_service_get_plugin (service)); char *tmp = g_build_filename (dir, path, NULL); g_free (path); @@ -241,7 +254,7 @@ gog_plot_type_service_read_xml (GnmPluginService *service, xmlNode *tree, ErrorI } static char * -gog_plot_type_service_get_description (GnmPluginService *service) +gog_plot_type_service_get_description (GOPluginService *service) { return g_strdup (_("Plot Type")); } @@ -277,7 +290,7 @@ gog_plot_type_service_init (GObject *obj) static void gog_plot_type_service_class_init (GObjectClass *gobject_klass) { - GnmPluginServiceClass *ps_class = GPS_CLASS (gobject_klass); + GOPluginServiceClass *ps_class = GPS_CLASS (gobject_klass); plot_type_parent_klass = g_type_class_peek_parent (gobject_klass); gobject_klass->finalize = gog_plot_type_service_finalize; @@ -287,7 +300,7 @@ gog_plot_type_service_class_init (GObjectClass *gobject_klass) GSF_CLASS (GogPlotTypeService, gog_plot_type_service, gog_plot_type_service_class_init, gog_plot_type_service_init, - GNM_PLUGIN_SERVICE_SIMPLE_TYPE) + GO_PLUGIN_SERVICE_SIMPLE_TYPE) /***************************************************************************/ /* Use a plugin service to define themes */ @@ -302,7 +315,7 @@ typedef PluginServiceSimple GogThemeService; typedef PluginServiceSimpleClass GogThemeServiceClass; static void -gog_theme_service_read_xml (GnmPluginService *service, xmlNode *tree, ErrorInfo **ret_error) +gog_theme_service_read_xml (GOPluginService *service, xmlNode *tree, ErrorInfo **ret_error) { char *path; xmlNode *ptr; @@ -311,7 +324,7 @@ gog_theme_service_read_xml (GnmPluginService *service, xmlNode *tree, ErrorInfo if (0 == xmlStrcmp (ptr->name, "file") && NULL != (path = xmlNodeGetContent (ptr))) { if (!g_path_is_absolute (path)) { - char const *dir = gnm_plugin_get_dir_name ( + char const *dir = go_plugin_get_dir_name ( plugin_service_get_plugin (service)); char *tmp = g_build_filename (dir, path, NULL); g_free (path); @@ -323,13 +336,13 @@ gog_theme_service_read_xml (GnmPluginService *service, xmlNode *tree, ErrorInfo } static char * -gog_theme_service_get_description (GnmPluginService *service) +gog_theme_service_get_description (GOPluginService *service) { return g_strdup (_("Chart Theme")); } static void -gog_theme_service_class_init (GnmPluginServiceClass *ps_class) +gog_theme_service_class_init (GOPluginServiceClass *ps_class) { ps_class->read_xml = gog_theme_service_read_xml; ps_class->get_description = gog_theme_service_get_description; @@ -337,7 +350,201 @@ gog_theme_service_class_init (GnmPluginServiceClass *ps_class) GSF_CLASS (GogThemeService, gog_theme_service, gog_theme_service_class_init, NULL, - GNM_PLUGIN_SERVICE_SIMPLE_TYPE) + GO_PLUGIN_SERVICE_SIMPLE_TYPE) + +/***************************************************************************/ +/* Support regression curves engines in plugins */ + +#define GOG_REG_CURVE_ENGINE_SERVICE_TYPE (gog_reg_curve_engine_service_get_type ()) +#define GOG_REG_CURVE_ENGINE_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_REG_CURVE_ENGINE_SERVICE_TYPE, GogRegCurveEngineService)) +#define IS_GOG_REG_CURVE_ENGINE_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_REG_CURVE_ENGINE_SERVICE_TYPE)) + +static GType gog_reg_curve_engine_service_get_type (void); + +typedef PluginServiceGObjectLoader GogRegCurveEngineService; +typedef PluginServiceGObjectLoaderClass GogRegCurveEngineServiceClass; + +static GHashTable *pending_reg_curves_engines = NULL; + +static char * +gog_reg_curve_engine_service_get_description (GOPluginService *service) +{ + return g_strdup (_("Regression Curve Engine")); +} + +static void +gog_reg_curve_engine_service_class_init (PluginServiceGObjectLoaderClass *gobj_loader_class) +{ + GOPluginServiceClass *ps_class = GPS_CLASS (gobj_loader_class); + + ps_class->get_description = gog_reg_curve_engine_service_get_description; + + gobj_loader_class->pending = + pending_reg_curves_engines = g_hash_table_new (g_str_hash, g_str_equal); +} + +GSF_CLASS (GogRegCurveEngineService, gog_reg_curve_engine_service, + gog_reg_curve_engine_service_class_init, NULL, + GO_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE) + +GogRegCurve * +gog_reg_curve_new_by_name (char const *id) +{ + GType type = g_type_from_name (id); + + if (type == 0) { + ErrorInfo *err = NULL; + GOPluginService *service = + pending_reg_curves_engines + ? g_hash_table_lookup (pending_reg_curves_engines, id) + : NULL; + GOPlugin *plugin; + + if (!service || !service->is_active) + return NULL; + + g_return_val_if_fail (!service->is_loaded, NULL); + + plugin_service_load (service, &err); + type = g_type_from_name (id); + + if (err != NULL) { + error_info_print (err); + error_info_free (err); + } + + g_return_val_if_fail (type != 0, NULL); + + /* + * The plugin defined a gtype so it must not be unloaded. + */ + plugin = plugin_service_get_plugin (service); + refd_plugins = g_slist_prepend (refd_plugins, plugin); + g_object_ref (plugin); + go_plugin_use_ref (plugin); + } + + return g_object_new (type, NULL); +} +/***************************************************************************/ +/* Use a plugin service to define regression curves types */ + +#define GOG_REG_CURVE_SERVICE_TYPE (gog_reg_curve_service_get_type ()) +#define GOG_REG_CURVE_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_REG_CURVE_SERVICE_TYPE, GogRegCurveService)) +#define IS_GOG_REG_CURVE_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_REG_CURVE_SERVICE_TYPE)) + +GType gog_reg_curve_service_get_type (void); + +typedef struct { + PluginServiceSimple base; + + GSList *types; +} GogRegCurveService; +typedef PluginServiceSimpleClass GogRegCurveServiceClass; + +static GHashTable *pending_reg_curve_type_files = NULL; +static GHashTable *reg_curves_types = NULL; + +static void +cb_pending_reg_curve_types_load (char const *path, + GogRegCurveService *service, + G_GNUC_UNUSED gpointer ignored) +{ + xmlNode *ptr, *prop; + xmlDoc *doc = go_xml_parse_file (path); + GogRegCurveType *type; + + g_return_if_fail (doc != NULL && doc->xmlRootNode != NULL); + + for (ptr = doc->xmlRootNode->xmlChildrenNode; ptr ; ptr = ptr->next) + if (!xmlIsBlankNode (ptr) && ptr->name && !strcmp (ptr->name, "Type")) { + type = g_new0 (GogRegCurveType, 1); + type->name = xmlGetProp (ptr, "_name"); + type->description = xmlGetProp (ptr, "_description"); + type->engine = xmlGetProp (ptr, "engine"); + service->types = g_slist_prepend (service->types, type); + g_hash_table_insert (reg_curves_types, type->name, type); + for (prop = ptr->xmlChildrenNode ; prop != NULL ; prop = prop->next) + if (!xmlIsBlankNode (prop) && + prop->name && !strcmp (prop->name, "property")) { + xmlChar *prop_name = xmlGetProp (prop, "name"); + + if (prop_name == NULL) { + g_warning ("missing name for property entry"); + continue; + } + + if (type->properties == NULL) + type->properties = g_hash_table_new_full (g_str_hash, g_str_equal, + xmlFree, xmlFree); + g_hash_table_replace (type->properties, + prop_name, xmlNodeGetContent (prop)); + } + } + + xmlFreeDoc (doc); +} + +static void +pending_reg_curves_types_load (void) +{ + if (pending_reg_curve_type_files != NULL) { + GHashTable *tmp = pending_reg_curve_type_files; + pending_reg_curve_type_files = NULL; + g_hash_table_foreach (tmp, + (GHFunc) cb_pending_reg_curve_types_load, NULL); + g_hash_table_destroy (tmp); + } +} + +static void +gog_reg_curve_service_read_xml (GOPluginService *service, xmlNode *tree, ErrorInfo **ret_error) +{ + char *path; + xmlNode *ptr; + + for (ptr = tree->xmlChildrenNode; ptr != NULL; ptr = ptr->next) + if (0 == xmlStrcmp (ptr->name, "file") && + NULL != (path = xmlNodeGetContent (ptr))) { + if (!g_path_is_absolute (path)) { + char const *dir = go_plugin_get_dir_name ( + plugin_service_get_plugin (service)); + char *tmp = g_build_filename (dir, path, NULL); + g_free (path); + path = tmp; + } + if (pending_reg_curve_type_files == NULL) + pending_reg_curve_type_files = g_hash_table_new_full ( + g_str_hash, g_str_equal, g_free, g_object_unref); + g_object_ref (service); + g_hash_table_replace (pending_reg_curve_type_files, path, service); + } +} + +static char * +gog_reg_curve_service_get_description (GOPluginService *service) +{ + return g_strdup (_("Regression Curve Type")); +} + +static void +gog_reg_curve_service_init (GObject *obj) +{ + GogRegCurveService *service = GOG_REG_CURVE_SERVICE (obj); + + service->types = NULL; +} + +static void +gog_reg_curve_service_class_init (GOPluginServiceClass *ps_class) +{ + ps_class->read_xml = gog_reg_curve_service_read_xml; + ps_class->get_description = gog_reg_curve_service_get_description; +} + +GSF_CLASS (GogRegCurveService, gog_reg_curve_service, + gog_reg_curve_service_class_init, gog_reg_curve_service_init, + GO_PLUGIN_SERVICE_SIMPLE_TYPE) /***************************************************************************/ @@ -347,12 +554,14 @@ gog_plugin_services_init (void) plugin_service_define ("plot_engine", &gog_plot_engine_service_get_type); plugin_service_define ("plot_type", &gog_plot_type_service_get_type); plugin_service_define ("chart_theme", &gog_theme_service_get_type); + plugin_service_define ("regcurve_engine", &gog_reg_curve_engine_service_get_type); + plugin_service_define ("regcurve_type", &gog_reg_curve_service_get_type); } void gog_plugin_services_shutdown (void) { - g_slist_foreach (refd_plugins, (GFunc)gnm_plugin_use_unref, NULL); + g_slist_foreach (refd_plugins, (GFunc)go_plugin_use_unref, NULL); g_slist_foreach (refd_plugins, (GFunc)g_object_unref, NULL); g_slist_free (refd_plugins); } @@ -399,6 +608,7 @@ gog_plot_families (void) pending_plot_types_load (); return plot_families; } + GogPlotFamily * gog_plot_family_by_name (char const *name) { @@ -408,7 +618,8 @@ gog_plot_family_by_name (char const *name) } GogPlotFamily * -gog_plot_family_register (char const *name, char const *sample_image_file) +gog_plot_family_register (char const *name, char const *sample_image_file, + int priority, GogAxisSet axis_set) { GogPlotFamily *res; @@ -419,10 +630,13 @@ gog_plot_family_register (char const *name, char const *sample_image_file) g_return_val_if_fail (g_hash_table_lookup (plot_families, name) == NULL, NULL); res = g_new0 (GogPlotFamily, 1); - res->name = g_strdup (name); - res->sample_image_file = g_strdup (sample_image_file); + res->name = g_strdup (name); + res->sample_image_file = g_strdup (sample_image_file); + res->priority = priority; + res->axis_set = axis_set; res->types = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) gog_plot_type_free); + g_hash_table_insert (plot_families, res->name, res); return res; @@ -451,3 +665,30 @@ gog_plot_type_register (GogPlotFamily *family, int col, int row, return res; } +/***************************************************************************/ + +static void +gog_reg_curve_type_free (GogRegCurveType *type) +{ + g_free (type->name); + g_free (type->description); + g_free (type->engine); + g_free (type); +} + +static void +create_reg_curve_types (void) +{ + if (!reg_curves_types) + reg_curves_types = g_hash_table_new_full + (g_str_hash, g_str_equal, + NULL, (GDestroyNotify) gog_reg_curve_type_free); +} + +GHashTable const * +gog_reg_curve_types (void) +{ + create_reg_curve_types (); + pending_reg_curves_types_load (); + return reg_curves_types; +} diff --git a/lib/goffice/graph/gog-plot-engine.h b/lib/goffice-0.0.4/goffice/graph/gog-plot-engine.h similarity index 78% rename from lib/goffice/graph/gog-plot-engine.h rename to lib/goffice-0.0.4/goffice/graph/gog-plot-engine.h index 02249586aa..658ff3d986 100644 --- a/lib/goffice/graph/gog-plot-engine.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-plot-engine.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_PLOT_ENGINE_H @@ -27,18 +27,21 @@ G_BEGIN_DECLS struct _GogPlotType { - GogPlotFamily *family; - char *engine; + GogPlotFamily *family; + char *engine; - char *name, *sample_image_file; - char *description; /* untranslated */ - int col, row; + char *name, *sample_image_file; + char *description; /* untranslated */ + int col, row; - GHashTable *properties; + GHashTable *properties; }; struct _GogPlotFamily { char *name, *sample_image_file; + int priority; + + GogAxisSet axis_set; GHashTable *types; }; @@ -46,11 +49,23 @@ struct _GogPlotFamily { /* GogPlotFamily hashed by name */ GHashTable const *gog_plot_families (void); GogPlotFamily *gog_plot_family_by_name (char const *name); -GogPlotFamily *gog_plot_family_register (char const *name, char const *sample_image_file); +GogPlotFamily *gog_plot_family_register (char const *name, char const *sample_image_file, + int priority, GogAxisSet axis_set); GogPlotType *gog_plot_type_register (GogPlotFamily *famlily, int col, int row, char const *name, char const *sample_image_file, char const *description, char const *engine); +struct _GogRegCurveType { + char *engine; + + char *name; + char *description; /* untranslated */ + + GHashTable *properties; +}; + +GHashTable const *gog_reg_curve_types (void); + void gog_plugin_services_init (void); void gog_plugin_services_shutdown (void); diff --git a/lib/goffice/graph/gog-plot-impl.h b/lib/goffice-0.0.4/goffice/graph/gog-plot-impl.h similarity index 86% rename from lib/goffice/graph/gog-plot-impl.h rename to lib/goffice-0.0.4/goffice/graph/gog-plot-impl.h index 91a575ca76..5b2d2064b2 100644 --- a/lib/goffice/graph/gog-plot-impl.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-plot-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -39,13 +39,15 @@ struct _GogPlotDesc { struct _GogPlot { GogObject base; - GogChart *chart; /* potentially NULL */ GSList *series; unsigned full_cardinality, visible_cardinality; gboolean cardinality_valid; unsigned index_num; gboolean vary_style_by_element; + gboolean render_before_axes; + gchar *plot_group; + char *guru_hints; GogAxis *axis[GOG_AXIS_TYPES]; @@ -60,18 +62,20 @@ typedef struct { GogPlotDesc desc; GType series_type; + GogAxisSet axis_set; + /* Virtuals */ - GogAxisSet (*axis_set_pref) (GogPlot const *plot); - gboolean (*axis_set_is_valid) (GogPlot const *plot, GogAxisSet type); - gboolean (*axis_set_assign) (GogPlot *plot, GogAxisSet type); GOData *(*axis_get_bounds) (GogPlot *plot, GogAxisType axis, GogPlotBoundInfo *bounds); gboolean (*supports_vary_style_by_element) (GogPlot const *plot); - void (*foreach_elem) (GogPlot *plot, gboolean only_visible, - GogEnumFunc handler, gpointer data); + void (*foreach_elem) (GogPlot *plot, gboolean only_visible, + GogEnumFunc handler, gpointer data); + + void (*update_3d) (GogPlot *plot); + void (*guru_helper) (GogPlot *plot, char const *hint); } GogPlotClass; #define GOG_PLOT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GOG_PLOT_TYPE, GogPlotClass)) diff --git a/lib/goffice/graph/gog-plot.c b/lib/goffice-0.0.4/goffice/graph/gog-plot.c similarity index 60% rename from lib/goffice/graph/gog-plot.c rename to lib/goffice-0.0.4/goffice/graph/gog-plot.c index 7aff92dd58..8194d384a1 100644 --- a/lib/goffice/graph/gog-plot.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-plot.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -29,21 +29,40 @@ #include #include #include -#include +#include #include #include +#include +#include +#include +#include +#include +#include + #include +#include + +#ifndef HAVE_GLIB26 +#include "goffice/glib24_26-compat.h" +#endif #define GOG_PLOT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_PLOT_TYPE, GogPlotClass)) enum { PLOT_PROP_0, - PLOT_PROP_VARY_STYLE_BY_ELEMENT + PLOT_PROP_VARY_STYLE_BY_ELEMENT, + PLOT_PROP_AXIS_X, + PLOT_PROP_AXIS_Y, + PLOT_PROP_GROUP, + PLOT_PROP_GURU_HINTS }; static GObjectClass *plot_parent_klass; +static gboolean gog_plot_set_axis_by_id (GogPlot *plot, GogAxisType type, unsigned id); +static unsigned gog_plot_get_axis_id (GogPlot const *plot, GogAxisType type); + static void gog_plot_finalize (GObject *obj) { @@ -52,6 +71,10 @@ gog_plot_finalize (GObject *obj) g_slist_free (plot->series); /* GogObject does the unref */ gog_plot_axis_clear (plot, GOG_AXIS_SET_ALL); /* just in case */ + if (plot->plot_group) + g_free (plot->plot_group); + if (plot->guru_hints != NULL) + g_free (plot->guru_hints); (*plot_parent_klass->finalize) (obj); } @@ -121,6 +144,117 @@ role_series_pre_remove (GogObject *parent, GogObject *series) gog_plot_request_cardinality_update (plot); } +typedef struct { + GogPlot *plot; + GogAxisType type; +} PlotPrefState; + +static void +cb_axis_changed (GtkComboBox *combo, PlotPrefState *state) +{ + GtkTreeIter iter; + GValue value; + GtkTreeModel *model = gtk_combo_box_get_model (combo); + + memset (&value, 0, sizeof (GValue)); + gtk_combo_box_get_active_iter (combo, &iter); + gtk_tree_model_get_value (model, &iter, 1, &value); + gog_plot_set_axis_by_id (state->plot, state->type, g_value_get_uint (&value)); +} + +static void +gog_plot_populate_editor (GogObject *obj, + GogEditor *editor, + G_GNUC_UNUSED GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + static const char *axis_labels[7] = { + N_("X axis:"), + N_("Y axis:"), + N_("Z axis:"), + N_("Circular axis:"), + N_("Radial axis:"), + N_("Type axis:"), + N_("Pseudo 3D axis:") + }; + + GtkWidget *table, *combo; + GogAxisType type; + GogPlot *plot = GOG_PLOT (obj); + unsigned count = 0, axis_count; + GSList *axes, *ptr; + GogChart *chart = GOG_CHART (gog_object_get_parent (obj)); + GogAxis *axis; + GtkListStore *store; + GtkTreeIter iter; + GtkCellRenderer *cell; + PlotPrefState *state; + + g_return_if_fail (chart != NULL); + + if (gog_chart_get_axis_set (chart) != GOG_AXIS_SET_XY) { + (GOG_OBJECT_CLASS(plot_parent_klass)->populate_editor) (obj, editor, dalloc, cc); + return; + } + + table = gtk_table_new (0, 1, FALSE); + for (type = 0 ; type < GOG_AXIS_TYPES ; type++) { + if (plot->axis[type] != NULL) { + count++; + gtk_table_resize (GTK_TABLE (table), count, 1); + gtk_table_attach (GTK_TABLE (table), gtk_label_new (_(axis_labels[type])), + 0, 1, count - 1, count, 0, 0, 0, 0); + + store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_UINT); + combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store)); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, + "text", 0, + NULL); + + axes = gog_chart_get_axes (chart, type); + axis_count = 0; + for (ptr = axes; ptr != NULL; ptr = ptr->next) { + axis = GOG_AXIS (ptr->data); + gtk_list_store_prepend (store, &iter); + gtk_list_store_set (store, &iter, + 0, gog_object_get_name (GOG_OBJECT (axis)), + 1, gog_object_get_id (GOG_OBJECT (axis)), + -1); + if (axis == plot->axis[type]) + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &iter); + axis_count++; + } + if (axis_count < 2) + gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE); + g_slist_free (axes); + gtk_table_attach (GTK_TABLE (table), combo, + 1, 2, count - 1, count, 0, 0, 0, 0); + state = g_new (PlotPrefState, 1); + state->plot = plot; + state->type = type; + g_signal_connect (G_OBJECT (combo), "changed", + G_CALLBACK (cb_axis_changed), state); + g_object_set_data_full (G_OBJECT (combo), + "state", state, (GDestroyNotify) g_free); + } + } + + if (count > 0) { + gtk_table_set_col_spacings (GTK_TABLE (table), 12); + gtk_table_set_row_spacings (GTK_TABLE (table), 6); + gtk_container_set_border_width (GTK_CONTAINER (table), 12); + gtk_widget_show_all (table); + gog_editor_add_page (editor, table, _("Axes")); + } + else + g_object_unref (G_OBJECT (table)); + + (GOG_OBJECT_CLASS(plot_parent_klass)->populate_editor) (obj, editor, dalloc, cc); +} + static void gog_plot_set_property (GObject *obj, guint param_id, GValue const *value, GParamSpec *pspec) @@ -137,6 +271,24 @@ gog_plot_set_property (GObject *obj, guint param_id, gog_plot_request_cardinality_update (plot); } break; + case PLOT_PROP_AXIS_X: + gog_plot_set_axis_by_id (plot, GOG_AXIS_X, g_value_get_uint (value)); + break; + case PLOT_PROP_AXIS_Y: + gog_plot_set_axis_by_id (plot, GOG_AXIS_Y, g_value_get_uint (value)); + break; + case PLOT_PROP_GROUP: { + char const *group = g_value_get_string (value); + if (plot->plot_group) + g_free (plot->plot_group); + plot->plot_group = (group)? g_strdup (g_value_get_string (value)): NULL; + break; + } + case PLOT_PROP_GURU_HINTS: + if (plot->guru_hints != NULL) + g_free (plot->guru_hints); + plot->guru_hints = g_strdup (g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); return; /* NOTE : RETURN */ @@ -154,6 +306,18 @@ gog_plot_get_property (GObject *obj, guint param_id, plot->vary_style_by_element && gog_plot_supports_vary_style_by_element (plot)); break; + case PLOT_PROP_AXIS_X: + g_value_set_uint (value, gog_plot_get_axis_id (plot, GOG_AXIS_X)); + break; + case PLOT_PROP_AXIS_Y: + g_value_set_uint (value, gog_plot_get_axis_id (plot, GOG_AXIS_Y)); + break; + case PLOT_PROP_GROUP: + g_value_set_string (value, plot->plot_group); + break; + case PLOT_PROP_GURU_HINTS: + g_value_set_string (value, plot->guru_hints); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); break; @@ -186,19 +350,42 @@ gog_plot_class_init (GogObjectClass *gog_klass) role_series_post_add, role_series_pre_remove, NULL }, }; GObjectClass *gobject_klass = (GObjectClass *) gog_klass; + GogPlotClass *plot_klass = (GogPlotClass *) gog_klass; plot_parent_klass = g_type_class_peek_parent (gog_klass); gobject_klass->finalize = gog_plot_finalize; gobject_klass->set_property = gog_plot_set_property; gobject_klass->get_property = gog_plot_get_property; + gog_klass->populate_editor = gog_plot_populate_editor; + plot_klass->axis_set = GOG_AXIS_SET_NONE; + plot_klass->guru_helper = NULL; + g_object_class_install_property (gobject_klass, PLOT_PROP_VARY_STYLE_BY_ELEMENT, - g_param_spec_boolean ("vary_style_by_element", "vary_style_by_element", + g_param_spec_boolean ("vary-style-by-element", "vary-style-by-element", "Use a different style for each segments", FALSE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT|GOG_PARAM_FORCE_SAVE)); + g_object_class_install_property (gobject_klass, PLOT_PROP_AXIS_X, + g_param_spec_uint ("x_axis", "x_axis", "Reference to X axis", + 0, G_MAXINT, 0, + G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, PLOT_PROP_AXIS_Y, + g_param_spec_uint ("y_axis", "y_axis", "Reference to Y axis", + 0, G_MAXINT, 0, + G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, PLOT_PROP_GROUP, + g_param_spec_string ("plot-group", _("Plot group"), + _("Name of plot group if any"), + NULL, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, PLOT_PROP_GURU_HINTS, + g_param_spec_string ("guru-hints", _("Guru hints"), + _("Semicolon separated list of hints for automatic addition of objects in" + "guru dialog"), + NULL, G_PARAM_READWRITE)); gog_klass->children_reordered = gog_plot_children_reordered; gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); + GOG_PLOT_CLASS (gog_klass)->update_3d = NULL; } static void @@ -208,6 +395,9 @@ gog_plot_init (GogPlot *plot, GogPlotClass const *derived_plot_klass) plot->desc = derived_plot_klass->desc; /* start as true so that we can queue an update when it changes */ plot->cardinality_valid = TRUE; + plot->render_before_axes = FALSE; + plot->plot_group = NULL; + plot->guru_hints = NULL; } GSF_CLASS_ABSTRACT (GogPlot, gog_plot, @@ -251,7 +441,11 @@ gog_plot_make_similar (GogPlot *dst, GogPlot const *src) GogSeries * gog_plot_new_series (GogPlot *plot) { - GogObject *res = gog_object_add_by_name (GOG_OBJECT (plot), "Series", NULL); + GogObject *res; + + g_return_val_if_fail (GOG_PLOT (plot) != NULL, NULL); + + res = gog_object_add_by_name (GOG_OBJECT (plot), "Series", NULL); return res ? GOG_SERIES (res) : NULL; } GogPlotDesc const * @@ -344,7 +538,8 @@ gog_plot_foreach_elem (GogPlot *plot, gboolean only_visible, GList *overrides; g_return_if_fail (GOG_PLOT (plot) != NULL); - g_return_if_fail (plot->cardinality_valid); + if (!plot->cardinality_valid) + gog_plot_get_cardinality (plot, NULL, NULL); if (klass->foreach_elem) { klass->foreach_elem (plot, only_visible, func, data); @@ -438,7 +633,7 @@ gog_plot_get_axis_bounds (GogPlot *plot, GogAxisType axis, bounds->logical.maxima = go_nan; bounds->logical.minima = go_nan; bounds->is_discrete = FALSE; - bounds->center_on_ticks = FALSE; + bounds->center_on_ticks = TRUE; if (klass->axis_get_bounds == NULL) return NULL; return (klass->axis_get_bounds) (plot, axis, bounds); @@ -461,21 +656,51 @@ gog_plot_axis_set_pref (GogPlot const *plot) { GogPlotClass *klass = GOG_PLOT_GET_CLASS (plot); - g_return_val_if_fail (klass != NULL, FALSE); - if (klass->axis_set_pref != NULL) - return (klass->axis_set_pref) (plot); - return GOG_AXIS_SET_NONE; + g_return_val_if_fail (klass != NULL, GOG_AXIS_SET_UNKNOWN); + return klass->axis_set; } gboolean -gog_plot_axis_set_is_valid (GogPlot const *plot, GogAxisSet type) +gog_plot_axis_set_is_valid (GogPlot const *plot, GogAxisSet axis_set) { GogPlotClass *klass = GOG_PLOT_GET_CLASS (plot); g_return_val_if_fail (klass != NULL, FALSE); - if (klass->axis_set_is_valid != NULL) - return (klass->axis_set_is_valid) (plot, type); - return type == GOG_AXIS_SET_NONE; + return (axis_set == klass->axis_set); +} + +static gboolean +gog_plot_set_axis_by_id (GogPlot *plot, GogAxisType type, unsigned id) +{ + GogChart const *chart; + GogAxis *axis; + GSList *axes, *ptr; + gboolean found = FALSE; + + if (id == 0) + return FALSE; + + g_return_val_if_fail (GOG_PLOT (plot) != NULL, FALSE); + g_return_val_if_fail (GOG_OBJECT (plot)->parent != NULL, FALSE); + + chart = gog_plot_get_chart (plot); + g_return_val_if_fail (GOG_CHART (chart) != NULL, FALSE); + + axes = gog_chart_get_axes (chart, type); + g_return_val_if_fail (axes != NULL, FALSE); + + for (ptr = axes; ptr != NULL && !found; ptr = ptr->next) { + axis = GOG_AXIS (ptr->data); + if (gog_object_get_id (GOG_OBJECT (axis)) == id) { + if (plot->axis[type] != NULL) + gog_axis_del_contributor (plot->axis[type], GOG_OBJECT (plot)); + plot->axis[type] = axis; + gog_axis_add_contributor (axis, GOG_OBJECT (plot)); + found = TRUE; + } + } + g_slist_free (axes); + return found; } gboolean @@ -495,7 +720,7 @@ gog_plot_axis_set_assign (GogPlot *plot, GogAxisSet axis_set) plot->axis[type] = NULL; } } else if (axis_set & (1 << type)) { - GSList *axes = gog_chart_get_axis (chart, type); + GSList *axes = gog_chart_get_axes (chart, type); if (axes != NULL) { gog_axis_add_contributor (axes->data, GOG_OBJECT (plot)); plot->axis[type] = axes->data; @@ -504,10 +729,7 @@ gog_plot_axis_set_assign (GogPlot *plot, GogAxisSet axis_set) } } - if (klass->axis_set_assign == NULL) - return axis_set == GOG_AXIS_SET_NONE; - - return (klass->axis_set_assign) (plot, axis_set); + return (axis_set == klass->axis_set); } /** @@ -531,6 +753,14 @@ gog_plot_axis_clear (GogPlot *plot, GogAxisSet filter) } } +static unsigned +gog_plot_get_axis_id (GogPlot const *plot, GogAxisType type) +{ + GogAxis *axis = gog_plot_get_axis (plot, type); + + return axis != NULL ? gog_object_get_id (GOG_OBJECT (axis)) : 0; +} + GogAxis * gog_plot_get_axis (GogPlot const *plot, GogAxisType type) { @@ -540,6 +770,68 @@ gog_plot_get_axis (GogPlot const *plot, GogAxisType type) return plot->axis[type]; } +void +gog_plot_update_3d (GogPlot *plot) +{ + GogPlotClass *klass = GOG_PLOT_GET_CLASS (plot); + g_return_if_fail (GOG_PLOT (plot) != NULL); + + if (klass->update_3d) + klass->update_3d (plot); +} + +static void +gog_plot_guru_helper_add_grid_line (GogPlot *plot, gboolean major) +{ + GogAxisType type; + + for (type = 0; type < GOG_AXIS_TYPES; type++) { + if (((type & (GOG_AXIS_X | + GOG_AXIS_Y | + GOG_AXIS_CIRCULAR | + GOG_AXIS_RADIAL)) != 0) && + plot->axis[type] != NULL && + gog_axis_get_grid_line (plot->axis[type], major) == NULL) + { + gog_object_add_by_name (GOG_OBJECT (plot->axis[type]), + major ? "MajorGrid": "MinorGrid", NULL); + } + } +} + +void +gog_plot_guru_helper (GogPlot *plot) +{ + GogPlotClass *klass; + char **hints; + char *hint; + unsigned i; + + g_return_if_fail (GOG_PLOT (plot) != NULL); + klass = GOG_PLOT_GET_CLASS (plot); + + if (plot->guru_hints == NULL) + return; + + hints = g_strsplit (plot->guru_hints, ";", 0); + + for (i = 0; i < g_strv_length (hints); i++) { + hint = g_strstrip (hints[i]); + if (strcmp (hints[i], "backplane") == 0) { + GogChart *chart = GOG_CHART (gog_object_get_parent (GOG_OBJECT (plot))); + if (chart != NULL && gog_chart_get_grid (chart) == NULL) + gog_object_add_by_name (GOG_OBJECT (chart), "Grid", NULL); + } else if (strcmp (hints[i], "major-grid") == 0) { + gog_plot_guru_helper_add_grid_line (plot, TRUE); + } else if (strcmp (hints[i], "minor-grid") == 0) { + gog_plot_guru_helper_add_grid_line (plot, FALSE); + } else if (klass->guru_helper) + klass->guru_helper (plot, hint); + } + + g_strfreev (hints); +} + /****************************************************************************/ /* a placeholder. It seems likely that we will want this eventually */ GSF_CLASS_ABSTRACT (GogPlotView, gog_plot_view, diff --git a/lib/goffice/graph/gog-plot.h b/lib/goffice-0.0.4/goffice/graph/gog-plot.h similarity index 92% rename from lib/goffice/graph/gog-plot.h rename to lib/goffice-0.0.4/goffice/graph/gog-plot.h index 36086fae5a..3ff293c115 100644 --- a/lib/goffice/graph/gog-plot.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-plot.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_PLOT_H @@ -23,6 +23,7 @@ #include #include +#include #include G_BEGIN_DECLS @@ -65,6 +66,10 @@ gboolean gog_plot_axis_set_assign (GogPlot *plot, GogAxisSet type); void gog_plot_axis_clear (GogPlot *plot, GogAxisSet filter); GogAxis *gog_plot_get_axis (GogPlot const *plot, GogAxisType type); +void gog_plot_update_3d (GogPlot *plot); + +void gog_plot_guru_helper (GogPlot *plot); + G_END_DECLS #endif /* GOG_PLOT_H */ diff --git a/lib/goffice-0.0.4/goffice/graph/gog-reg-curve-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-reg-curve-prefs.glade new file mode 100644 index 0000000000..18fed44d3b --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-reg-curve-prefs.glade @@ -0,0 +1,112 @@ + + + + + + + True + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + 3 + 2 + False + 6 + 12 + + + + True + Low bound: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 5 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + High bound: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 5 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + True + Skip invalid data + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + 2 + 2 + 3 + fill + + + + + + + + diff --git a/lib/goffice-0.0.4/goffice/graph/gog-reg-curve.c b/lib/goffice-0.0.4/goffice/graph/gog-reg-curve.c new file mode 100644 index 0000000000..210cec69ba --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-reg-curve.c @@ -0,0 +1,369 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-reg-curve.c : + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GOG_REG_CURVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_REG_CURVE_TYPE, GogRegCurveClass)) + +static GObjectClass *reg_curve_parent_klass; + +static GType gog_reg_curve_view_get_type (void); + +enum { + REG_CURVE_PROP_0, + REG_CURVE_PROP_SKIP_INVALID, +}; + +static void +gog_reg_curve_init_style (GogStyledObject *gso, GogStyle *style) +{ + style->interesting_fields = GOG_STYLE_LINE; + gog_theme_fillin_style (gog_object_get_theme (GOG_OBJECT (gso)), + style, GOG_OBJECT (gso), 0, FALSE); +} + +static void +skip_invalid_toggled_cb (GtkToggleButton* btn, GObject *obj) +{ + g_object_set (obj, "skip-invalid", gtk_toggle_button_get_active (btn), NULL); +} + +static void +gog_reg_curve_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + GtkWidget *w; + GtkTable *table; + GladeXML *gui; + GogDataset *set = GOG_DATASET (gobj); + + gui = go_libglade_new ("gog-reg-curve-prefs.glade", "reg-curve-prefs", NULL, cc); + if (gui == NULL) + return; + + gog_editor_add_page (editor, + glade_xml_get_widget (gui, "reg-curve-prefs"), + _("Details")); + + table = GTK_TABLE (glade_xml_get_widget (gui, "reg-curve-prefs")); + w = GTK_WIDGET (gog_data_allocator_editor (dalloc, set, 0, GOG_DATA_SCALAR)); + gtk_widget_show (w); + gtk_table_attach (table, w, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); + w = GTK_WIDGET (gog_data_allocator_editor (dalloc, set, 1, GOG_DATA_SCALAR)); + gtk_widget_show (w); + gtk_table_attach (table, w, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); + w = glade_xml_get_widget (gui, "skip-invalid"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), + (GOG_REG_CURVE (gobj))->skip_invalid); + g_signal_connect (G_OBJECT (w), "toggled", + G_CALLBACK (skip_invalid_toggled_cb), gobj); + + + (GOG_OBJECT_CLASS(reg_curve_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); +} + +static void +gog_reg_curve_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogRegCurve *rc = GOG_REG_CURVE (obj); + switch (param_id) { + case REG_CURVE_PROP_SKIP_INVALID: + g_value_set_boolean (value, rc->skip_invalid); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static void +gog_reg_curve_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogRegCurve *rc = GOG_REG_CURVE (obj); + switch (param_id) { + case REG_CURVE_PROP_SKIP_INVALID: + rc->skip_invalid = g_value_get_boolean (value); + gog_object_request_update (GOG_OBJECT (obj)); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } +} + +static void +gog_reg_curve_finalize (GObject *obj) +{ + GogRegCurve *rc = GOG_REG_CURVE (obj); + if (rc->bounds != NULL) { + gog_dataset_finalize (GOG_DATASET (obj)); + g_free (rc->bounds); + rc->bounds = NULL; + } + (*reg_curve_parent_klass->finalize) (obj); +} + +static char const * +gog_reg_curve_type_name (GogObject const *gobj) +{ + return N_("Regression Curve"); +} + +static void +gog_reg_curve_class_init (GogObjectClass *gog_klass) +{ + static GogObjectRole const roles[] = { + { N_("Equation"), "GogRegEqn", 0, + GOG_POSITION_ANY_MANUAL, GOG_POSITION_MANUAL, GOG_OBJECT_NAME_BY_ROLE, + NULL, NULL, NULL, NULL, NULL, NULL }, + }; + GObjectClass *gobject_klass = (GObjectClass *) gog_klass; + GogStyledObjectClass *style_klass = (GogStyledObjectClass *) gog_klass; + GogRegCurveClass *reg_curve_klass = (GogRegCurveClass *) gog_klass; + reg_curve_parent_klass = g_type_class_peek_parent (gog_klass); + + gobject_klass->get_property = gog_reg_curve_get_property; + gobject_klass->set_property = gog_reg_curve_set_property; + gobject_klass->finalize = gog_reg_curve_finalize; + gog_klass->populate_editor = gog_reg_curve_populate_editor; + style_klass->init_style = gog_reg_curve_init_style; + gog_klass->type_name = gog_reg_curve_type_name; + gog_klass->view_type = gog_reg_curve_view_get_type (); + gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); + + reg_curve_klass->get_value_at = NULL; + reg_curve_klass->get_equation = NULL; + reg_curve_klass->get_R2 = NULL; + + g_object_class_install_property (gobject_klass, REG_CURVE_PROP_SKIP_INVALID, + g_param_spec_boolean ("skip-invalid", "skip-invalid", + "Skip invalid data", FALSE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); +} + +static void +gog_reg_curve_init (GogRegCurve *reg_curve) +{ + reg_curve->ninterp = 100; + reg_curve->bounds = g_new0 (GogDatasetElement, 2); +} + +static void +gog_reg_curve_dataset_dims (GogDataset const *set, int *first, int *last) +{ + *first = 0; + *last = 1; +} + +static GogDatasetElement * +gog_reg_curve_dataset_get_elem (GogDataset const *set, int dim_i) +{ + GogRegCurve const *rc = GOG_REG_CURVE (set); + g_return_val_if_fail (2 > dim_i, NULL); + g_return_val_if_fail (dim_i >= 0, NULL); + return rc->bounds + dim_i; +} + +static void +gog_reg_curve_dataset_dim_changed (GogDataset *set, int dim_i) +{ + gog_object_request_update (GOG_OBJECT (set)); +} + +static void +gog_reg_curve_dataset_init (GogDatasetClass *iface) +{ + iface->get_elem = gog_reg_curve_dataset_get_elem; + iface->dims = gog_reg_curve_dataset_dims; + iface->dim_changed = gog_reg_curve_dataset_dim_changed; +} + +GSF_CLASS_FULL (GogRegCurve, gog_reg_curve, + NULL, NULL, gog_reg_curve_class_init, NULL, + gog_reg_curve_init, GOG_STYLED_OBJECT_TYPE, G_TYPE_FLAG_ABSTRACT, + GSF_INTERFACE (gog_reg_curve_dataset_init, GOG_DATASET_TYPE)) + +GogRegCurve * +gog_reg_curve_new_by_type (GogRegCurveType const *type) +{ + GogRegCurve *res; + + g_return_val_if_fail (type != NULL, NULL); + + res = gog_reg_curve_new_by_name (type->engine); + if (res != NULL && type->properties != NULL) + g_hash_table_foreach (type->properties, + (GHFunc) gog_object_set_arg, res); + return res; +} + +static double +gog_reg_curve_get_value_at (GogRegCurve *reg_curve, double x) +{ + return (GOG_REG_CURVE_GET_CLASS (reg_curve))->get_value_at (reg_curve, x); +} + +gchar const* +gog_reg_curve_get_equation (GogRegCurve *reg_curve) +{ + return (GOG_REG_CURVE_GET_CLASS (reg_curve))->get_equation (reg_curve); +} + +double +gog_reg_curve_get_R2 (GogRegCurve *reg_curve) +{ + return (GOG_REG_CURVE_GET_CLASS (reg_curve))->get_R2 (reg_curve); +} + +void +gog_reg_curve_get_bounds (GogRegCurve *reg_curve, double *xmin, double *xmax) +{ + if (reg_curve->bounds[0].data) { + *xmin = go_data_scalar_get_value ( + GO_DATA_SCALAR (reg_curve->bounds[0].data)); + if (*xmin == go_nan || !go_finite (*xmin)) + *xmin = -DBL_MAX; + } else + *xmin = -DBL_MAX; + if (reg_curve->bounds[1].data) { + *xmax = go_data_scalar_get_value ( + GO_DATA_SCALAR (reg_curve->bounds[1].data)); + if (*xmax == go_nan || !go_finite (*xmax)) + *xmax = DBL_MAX; + } else + *xmax = DBL_MAX; +} + +/****************************************************************************/ + +typedef GogView GogRegCurveView; +typedef GogViewClass GogRegCurveViewClass; + +#define GOG_REG_CURVE_VIEW_TYPE (gog_reg_curve_view_get_type ()) +#define GOG_REG_CURVE_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_REG_CURVE_VIEW_TYPE, GogRegCurveView)) +#define IS_GOG_REG_CURVE_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_REG_CURVE_VIEW_TYPE)) + +static GogViewClass *reg_curve_view_parent_klass; + +static void +gog_reg_curve_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogRegCurve *rc = GOG_REG_CURVE (view->model); + GogSeries *series = GOG_SERIES ((GOG_OBJECT (rc))->parent); + GogPlot *plot = series->plot; + GogAxisMap *x_map, *y_map; + double buf, *x, *y; + GogStyle *style; + ArtBpath *path; + int i; + GSList *ptr; + + x_map = gog_axis_map_new (plot->axis[0], + view->residual.x , view->residual.w); + y_map = gog_axis_map_new (plot->axis[1], + view->residual.y + view->residual.h, + -view->residual.h); + + if (!(gog_axis_map_is_valid (x_map) && + gog_axis_map_is_valid (y_map))) { + gog_axis_map_free (x_map); + gog_axis_map_free (y_map); + return; + } + + gog_renderer_push_clip (view->renderer, + gog_renderer_get_rectangle_vpath (&view->residual)); + + x = g_new (double, rc->ninterp + 3); + y = g_new (double, rc->ninterp + 3); + gog_axis_get_bounds (plot->axis[0], x, x + rc->ninterp + 1); + x[0] = gog_axis_map_to_view (x_map, x[0]); + x[rc->ninterp + 1] = gog_axis_map_to_view (x_map, x[rc->ninterp + 1]); + buf = (x[rc->ninterp + 1] - x[0]) / (rc->ninterp + 1); + for (i = 1; i <= rc->ninterp; i++) + x[i] = x[0] + i * buf; + + for (i = 0; i <= rc->ninterp + 1; i++) + y[i] = gog_axis_map_to_view (y_map, + gog_reg_curve_get_value_at (rc, gog_axis_map_from_view (x_map, x[i]))); + + path = go_line_build_bpath (x, y, rc->ninterp + 2); + style = GOG_STYLED_OBJECT (rc)->style; + gog_renderer_push_style (view->renderer, style); + gog_renderer_draw_bezier_path (view->renderer, path); + + gog_renderer_pop_style (view->renderer); + g_free (x); + g_free (y); + art_free (path); + gog_axis_map_free (x_map); + gog_axis_map_free (y_map); + + gog_renderer_pop_clip (view->renderer); + + for (ptr = view->children ; ptr != NULL ; ptr = ptr->next) + gog_view_render (ptr->data, bbox); +} + +static void +gog_reg_curve_view_size_allocate (GogView *view, GogViewAllocation const *allocation) +{ + GSList *ptr; + + for (ptr = view->children; ptr != NULL; ptr = ptr->next) + gog_view_size_allocate (GOG_VIEW (ptr->data), allocation); + (reg_curve_view_parent_klass->size_allocate) (view, allocation); +} + +static void +gog_reg_curve_view_class_init (GogRegCurveViewClass *gview_klass) +{ + GogViewClass *view_klass = (GogViewClass *) gview_klass; + reg_curve_view_parent_klass = g_type_class_peek_parent (gview_klass); + + view_klass->render = gog_reg_curve_view_render; + view_klass->size_allocate = gog_reg_curve_view_size_allocate; +} + +static GSF_CLASS (GogRegCurveView, gog_reg_curve_view, + gog_reg_curve_view_class_init, NULL, + GOG_VIEW_TYPE) diff --git a/lib/goffice-0.0.4/goffice/graph/gog-reg-curve.h b/lib/goffice-0.0.4/goffice/graph/gog-reg-curve.h new file mode 100644 index 0000000000..aa514d0878 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-reg-curve.h @@ -0,0 +1,59 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-reg-curve.h : + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_REG_CURVE_H +#define GOG_REG_CURVE_H + +#include +#include + +struct _GogRegCurve { + GogStyledObject base; + + GogSeries *series; + gboolean weighted; + GODataVector *weights; + GogDatasetElement *bounds; + gboolean skip_invalid; /* do not take into account invalid data */ + int ninterp; /* how many points to use for display the curve as a vpath */ +}; + +typedef struct { + GogStyledObjectClass base; + + double (*get_value_at) (GogRegCurve *reg_curve, double x); + gchar const* (*get_equation) (GogRegCurve *reg_curve); + double (*get_R2) (GogRegCurve *reg_curve); +} GogRegCurveClass; + +#define GOG_REG_CURVE_TYPE (gog_reg_curve_get_type ()) +#define GOG_REG_CURVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_REG_CURVE_TYPE, GogRegCurve)) +#define IS_GOG_REG_CURVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_REG_CURVE_TYPE)) + +GType gog_reg_curve_get_type (void); + +GogRegCurve *gog_reg_curve_new_by_name (char const *id); +GogRegCurve *gog_reg_curve_new_by_type (GogRegCurveType const *type); +gchar const *gog_reg_curve_get_equation (GogRegCurve *reg_curve); +double gog_reg_curve_get_R2 (GogRegCurve *reg_curve); +void gog_reg_curve_get_bounds (GogRegCurve *reg_curve, double *xmin, double *xmax); + +#endif /* GOG_REG_CURVE_H */ diff --git a/lib/goffice-0.0.4/goffice/graph/gog-reg-eqn-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-reg-eqn-prefs.glade new file mode 100644 index 0000000000..886f0e4116 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-reg-eqn-prefs.glade @@ -0,0 +1,69 @@ + + + + + + + True + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + False + 6 + + + + True + True + Display _equation + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + True + Display _regression coefficient R² + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + + diff --git a/lib/goffice-0.0.4/goffice/graph/gog-renderer-cairo.c b/lib/goffice-0.0.4/goffice/graph/gog-renderer-cairo.c new file mode 100644 index 0000000000..1ba32961e9 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-cairo.c @@ -0,0 +1,753 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-renderer-cairo.c : + * + * Copyright (C) 2005 Emmanuel Pacaud (emmanuel.pacaud@univ-poitiers.fr) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +/* TODO: + * + * - implement stretched image texture + * - fix alpha channel of source image for texture + * - fix font size + * - implement mutiline text + * - cache font properties + * - implement rendering of marker with cairo + * (that will fix grayish outline bug) + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#define DOUBLE_RGBA_R(x) (double)UINT_RGBA_R(x)/255.0 +#define DOUBLE_RGBA_G(x) (double)UINT_RGBA_G(x)/255.0 +#define DOUBLE_RGBA_B(x) (double)UINT_RGBA_B(x)/255.0 +#define DOUBLE_RGBA_A(x) (double)UINT_RGBA_A(x)/255.0 + +#define GO_COLOR_TO_CAIRO(x) DOUBLE_RGBA_R(x),DOUBLE_RGBA_G(x),DOUBLE_RGBA_B(x),DOUBLE_RGBA_A(x) + +struct _GogRendererCairo { + GogRenderer base; + + int w, h; + + cairo_t *cairo; + GdkPixbuf *pixbuf; + + cairo_surface_t *marker_surface; + GdkPixbuf *marker_pixbuf; +}; + +typedef GogRendererClass GogRendererCairoClass; + +static GObjectClass *parent_klass; + +static void +gog_renderer_cairo_finalize (GObject *obj) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (obj); + cairo_surface_t *surface; + + if (crend->cairo != NULL){ + surface = cairo_get_target (crend->cairo); + cairo_surface_destroy (surface); + cairo_destroy (crend->cairo); + crend->cairo = NULL; + } + if (crend->pixbuf != NULL) { + g_object_unref (crend->pixbuf); + crend->pixbuf = NULL; + } + if (crend->marker_surface != NULL) { + cairo_surface_destroy (crend->marker_surface); + g_object_unref (crend->marker_pixbuf); + crend->marker_surface = NULL; + crend->marker_pixbuf = NULL; + } + + (*parent_klass->finalize) (obj); +} + +static void +gog_renderer_cairo_clip_push (GogRenderer *rend, GogRendererClip *clip) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + double x, y; + + /* Rounding clipping area trigger cairo fast clip */ + x = floor (clip->area.x + 0.5); + y = floor (clip->area.y + 0.5); + + cairo_save (crend->cairo); + cairo_rectangle (crend->cairo, x, y, + floor (clip->area.x + clip->area.w + 0.5) - x, + floor (clip->area.y + clip->area.h + 0.5) - y); + cairo_clip (crend->cairo); +} + +static void +gog_renderer_cairo_clip_pop (GogRenderer *rend, GogRendererClip *clip) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + + cairo_restore (crend->cairo); +} + +static double +grc_line_size (GogRenderer const *rend, double width) +{ + if (go_sub_epsilon (width) <= 0.) /* cheesy version of hairline */ + return 1.; + + width *= rend->scale; + if (width <= 1.) + return width; + + return floor (width); +} + +static double +gog_renderer_cairo_line_size (GogRenderer const *rend, double width) +{ + double size = grc_line_size (rend, width); + + if (size < 1.0) + return ceil (size); + + return size; +} + +static void +gog_renderer_cairo_sharp_path (GogRenderer *rend, ArtVpath *path, double line_width) +{ + ArtVpath *iter = path; + + if (((int) (rint (line_width)) % 2 == 0) && line_width > 1.0) + while (iter->code != ART_END) { + iter->x = floor (iter->x + .5); + iter->y = floor (iter->y + .5); + iter++; + } + else + while (iter->code != ART_END) { + iter->x = floor (iter->x) + .5; + iter->y = floor (iter->y) + .5; + iter++; + } +} + +static void +grc_path (cairo_t *cr, ArtVpath *vpath, ArtBpath *bpath) +{ + if (vpath) + while (vpath->code != ART_END) { + switch (vpath->code) { + case ART_MOVETO_OPEN: + case ART_MOVETO: + cairo_move_to (cr, vpath->x, vpath->y); + break; + case ART_LINETO: + cairo_line_to (cr, vpath->x, vpath->y); + break; + default: + break; + } + vpath++; + } + else + while (bpath->code != ART_END) { + switch (bpath->code) { + case ART_MOVETO_OPEN: + case ART_MOVETO: + cairo_move_to (cr, bpath->x3, bpath->y3); + break; + case ART_LINETO: + cairo_line_to (cr, bpath->x3, bpath->y3); + break; + case ART_CURVETO: + cairo_curve_to (cr, + bpath->x1, bpath->y1, + bpath->x2, bpath->y2, + bpath->x3, bpath->y3); + break; + default: + break; + } + bpath++; + } +} + +/* Red and blue are inverted in a pixbuf compared to cairo */ +static void +grc_invert_pixbuf_RB (unsigned char *pixels, int width, int height, int rowstride) +{ + int i,j; + unsigned char a; + + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + a = pixels[0]; + pixels[0] = pixels[2]; + pixels[2] = a; + pixels += 4; + } + pixels += rowstride - width * 4; + } +} + +static void +grc_draw_path (GogRenderer *rend, ArtVpath const *vpath, ArtBpath const*bpath) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + GogStyle const *style = rend->cur_style; + cairo_t *cr = crend->cairo; + double width = grc_line_size (rend, style->line.width); + + g_return_if_fail (bpath != NULL || vpath != NULL); + + cairo_set_line_width (cr, width); + if (rend->line_dash != NULL) + cairo_set_dash (cr, + rend->line_dash->dash, + rend->line_dash->n_dash, + rend->line_dash->offset); + grc_path (cr, (ArtVpath *) vpath, (ArtBpath *) bpath); + cairo_set_source_rgba (cr, GO_COLOR_TO_CAIRO (style->line.color)); + cairo_stroke (cr); +} + +static void +gog_renderer_cairo_draw_path (GogRenderer *rend, ArtVpath const *path) +{ + grc_draw_path (rend, path, NULL); +} + +static void +gog_renderer_cairo_draw_bezier_path (GogRenderer *rend, ArtBpath const *path) +{ + grc_draw_path (rend, NULL, path); +} + +static void +grc_draw_polygon (GogRenderer *rend, ArtVpath const *vpath, + ArtBpath const *bpath, gboolean narrow) +{ + struct { unsigned x0i, y0i, x1i, y1i; } const grad_i[GO_GRADIENT_MAX] = { + {0, 0, 0, 1}, + {0, 1, 0, 0}, + {0, 0, 0, 2}, + {0, 2, 0, 1}, + {0, 0, 1, 0}, + {1, 0, 0, 0}, + {0, 0, 2, 0}, + {2, 0, 1, 0}, + {0, 0, 1, 1}, + {1, 1, 0, 0}, + {0, 0, 2, 2}, + {2, 2, 1, 1}, + {1, 0, 0, 1}, + {0, 1, 1, 0}, + {1, 0, 2, 2}, + {2, 2, 0, 1} + }; + + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + GogStyle const *style = rend->cur_style; + cairo_t *cr = crend->cairo; + cairo_pattern_t *cr_pattern = NULL; + cairo_surface_t *cr_surface = NULL; + GdkPixbuf *pixbuf = NULL; + GOColor color; + double width = grc_line_size (rend, style->line.width); + double x[3], y[3]; + int i, j, w, h, rowstride; + guint8 const *pattern; + unsigned char *pixels, *iter; + + g_return_if_fail (bpath != NULL || vpath != NULL); + + narrow = narrow || (style->outline.dash_type == GO_LINE_NONE); + + if (narrow && style->fill.type == GOG_FILL_STYLE_NONE) + return; + + cairo_set_line_width (cr, width); + grc_path (cr, (ArtVpath *) vpath, (ArtBpath *) bpath); + + switch (style->fill.type) { + case GOG_FILL_STYLE_PATTERN: + if (go_pattern_is_solid (&style->fill.pattern, &color)) + cairo_set_source_rgba (cr, GO_COLOR_TO_CAIRO (color)); + else { + GOColor fore = style->fill.pattern.fore; + GOColor back = style->fill.pattern.back; + int rowstride; + + pattern = go_pattern_get_pattern (&style->fill.pattern); + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 8, 8); + iter = gdk_pixbuf_get_pixels (pixbuf); + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + cr_surface = cairo_image_surface_create_for_data ( iter, + CAIRO_FORMAT_ARGB32, 8, 8, rowstride); + for (i = 0; i < 8; i++) { + for (j = 0; j < 8; j++) { + color = pattern[i] & (1 << j) ? fore : back; + iter[0] = UINT_RGBA_B (color); + iter[1] = UINT_RGBA_G (color); + iter[2] = UINT_RGBA_R (color); + iter[3] = UINT_RGBA_A (color); + iter += 4; + } + iter += rowstride - 32; + } + cr_pattern = cairo_pattern_create_for_surface (cr_surface); + cairo_pattern_set_extend (cr_pattern, CAIRO_EXTEND_REPEAT); + cairo_set_source (cr, cr_pattern); + } + break; + + case GOG_FILL_STYLE_GRADIENT: + cairo_fill_extents (cr, &x[0], &y[0], &x[1], &y[1]); + x[2] = (x[1] - x[0]) / 2.0 + x[1]; + y[2] = (y[1] - y[0]) / 2.0 + y[1]; + cr_pattern = cairo_pattern_create_linear ( + x[grad_i[style->fill.gradient.dir].x0i], + y[grad_i[style->fill.gradient.dir].y0i], + x[grad_i[style->fill.gradient.dir].x1i], + y[grad_i[style->fill.gradient.dir].y1i]); + cairo_pattern_set_extend (cr_pattern, CAIRO_EXTEND_REFLECT); + cairo_pattern_add_color_stop_rgba (cr_pattern, 0, + GO_COLOR_TO_CAIRO (style->fill.pattern.back)); + cairo_pattern_add_color_stop_rgba (cr_pattern, 1, + GO_COLOR_TO_CAIRO (style->fill.pattern.fore)); + cairo_set_source (cr, cr_pattern); + break; + + case GOG_FILL_STYLE_IMAGE: + if (style->fill.image.image == NULL) { + cairo_set_source_rgba (cr, 1, 1, 1, 1); + break; + } + pixbuf = gdk_pixbuf_add_alpha (style->fill.image.image, FALSE, 0, 0, 0); + pixels = gdk_pixbuf_get_pixels (pixbuf); + h = gdk_pixbuf_get_height (pixbuf); + w = gdk_pixbuf_get_width (pixbuf); + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + cr_surface = cairo_image_surface_create_for_data (pixels, + CAIRO_FORMAT_ARGB32, w, h, rowstride); + grc_invert_pixbuf_RB (pixels, w, h, rowstride); + cr_pattern = cairo_pattern_create_for_surface (cr_surface); + cairo_pattern_set_extend (cr_pattern, CAIRO_EXTEND_REPEAT); + cairo_set_source (cr, cr_pattern); + break; + + case GOG_FILL_STYLE_NONE: + break; /* impossible */ + } + + if (style->fill.type != GOG_FILL_STYLE_NONE) { + if (!narrow) + cairo_fill_preserve (cr); + else + cairo_fill (cr); + } + + if (!narrow) { + cairo_set_source_rgba (cr, GO_COLOR_TO_CAIRO (style->outline.color)); + if (rend->outline_dash != NULL) + cairo_set_dash (cr, + rend->outline_dash->dash, + rend->outline_dash->n_dash, + rend->outline_dash->offset); + cairo_stroke (cr); + } + + if (cr_pattern != NULL) + cairo_pattern_destroy (cr_pattern); + if (cr_surface != NULL) + cairo_surface_destroy (cr_surface); + if (pixbuf) + g_object_unref (pixbuf); +} + +static void +gog_renderer_cairo_draw_polygon (GogRenderer *rend, ArtVpath const *path, + gboolean narrow) +{ + grc_draw_polygon (rend, path, NULL, narrow); +} + +static void +gog_renderer_cairo_draw_bezier_polygon (GogRenderer *rend, ArtBpath const *path, + gboolean narrow) +{ + grc_draw_polygon (rend, NULL, path, narrow); +} + +static void +gog_renderer_cairo_draw_text (GogRenderer *rend, char const *text, + GogViewAllocation const *pos, GtkAnchorType anchor, + GogViewAllocation *result) +{ + GogRendererCairo *crend = (GogRendererCairo *) rend; + GogStyle const *style = rend->cur_style; + PangoFontDescription const *fd = style->font.font->desc; + PangoWeight weight; + cairo_t *cr = crend->cairo; + cairo_text_extents_t text_extents; + cairo_font_extents_t font_extents; + cairo_font_slant_t slant; + GOGeometryOBR obr; + GOGeometryAABR aabr; + char const *family; + double size; + + family = pango_font_description_get_family (fd); + size = pango_font_description_get_size (fd) / PANGO_SCALE; + weight = pango_font_description_get_weight (fd); + switch (pango_font_description_get_style (fd)) { + case (PANGO_STYLE_NORMAL): slant = CAIRO_FONT_SLANT_NORMAL; break; + case (PANGO_STYLE_OBLIQUE): slant = CAIRO_FONT_SLANT_OBLIQUE; break; + case (PANGO_STYLE_ITALIC): slant = CAIRO_FONT_SLANT_ITALIC; break; + } +/* g_message ("family: %s, size: %g", family, size);*/ + /* FIXME: calculate dpi */ + size *= 96.0 * rend->scale * rend->zoom / 72.0; + cairo_select_font_face (cr, family, slant, + weight > PANGO_WEIGHT_SEMIBOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, size); + cairo_text_extents (cr, text, &text_extents); + cairo_font_extents (cr, &font_extents); + + obr.w = text_extents.width; + obr.h = font_extents.ascent + font_extents.descent; + obr.alpha = rend->cur_style->text_layout.angle * M_PI / 180.0; + obr.x = pos->x; + obr.y = pos->y; + go_geometry_OBR_to_AABR (&obr, &aabr); + + switch (anchor) { + case GTK_ANCHOR_NW: case GTK_ANCHOR_W: case GTK_ANCHOR_SW: + obr.x += aabr.w / 2.0; + break; + case GTK_ANCHOR_NE : case GTK_ANCHOR_SE : case GTK_ANCHOR_E : + obr.x -= aabr.w / 2.0; + break; + default : break; + } + if (obr.x <= 0) + obr.x = 0; + + switch (anchor) { + case GTK_ANCHOR_NW: case GTK_ANCHOR_N: case GTK_ANCHOR_NE: + obr.y += aabr.h / 2.0; + break; + case GTK_ANCHOR_SE : case GTK_ANCHOR_S : case GTK_ANCHOR_SW : + obr.y -= aabr.h / 2.0; + break; + default : break; + } + if (obr.y <= 0) + obr.y = 0; + + cairo_save (cr); + cairo_set_source_rgba (cr, GO_COLOR_TO_CAIRO (style->font.color)); + cairo_move_to (cr, obr.x, obr.y); + cairo_rotate (cr, -obr.alpha); + cairo_rel_move_to (cr, - obr.w / 2.0, + obr.h / 2.0 - font_extents.descent); + cairo_show_text (cr, text); + cairo_restore (cr); + + if (result != NULL) { + result->x = aabr.x; + result->y = aabr.y; + result->w = aabr.w; + result->h = aabr.h; + } +} + +static void +gog_renderer_cairo_get_text_OBR (GogRenderer *rend, + char const *text, GOGeometryOBR *obr) +{ + GogRendererCairo *crend = (GogRendererCairo *) rend; + GogStyle const *style = rend->cur_style; + PangoFontDescription const *fd = style->font.font->desc; + PangoWeight weight; + cairo_t *cr = crend->cairo; + cairo_text_extents_t text_extents; + cairo_font_extents_t font_extents; + cairo_font_slant_t slant; + char const *family; + double size; + + family = pango_font_description_get_family (fd); + /* FIXME: calculate dpi */ + size = pango_font_description_get_size (fd) / PANGO_SCALE / 72.0 * 96.0 * rend->scale * rend->zoom; + weight = pango_font_description_get_weight (fd); + switch (pango_font_description_get_style (fd)) { + case (PANGO_STYLE_NORMAL): slant = CAIRO_FONT_SLANT_NORMAL; break; + case (PANGO_STYLE_OBLIQUE): slant = CAIRO_FONT_SLANT_OBLIQUE; break; + case (PANGO_STYLE_ITALIC): slant = CAIRO_FONT_SLANT_ITALIC; break; + } + cairo_select_font_face (cr, family, slant, + weight > PANGO_WEIGHT_SEMIBOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, size); + cairo_text_extents (cr, text, &text_extents); + cairo_font_extents (cr, &font_extents); + + obr->w = text_extents.width; + obr->h = font_extents.ascent + font_extents.descent; +} + +static cairo_surface_t * +grc_get_marker_surface (GogRenderer *rend) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + GogStyle const *style = rend->cur_style; + GdkPixbuf *pixbuf, *marker_pixbuf; + cairo_surface_t *surface; + unsigned char *pixels; + int height, width, rowstride; + + if (crend->marker_surface != NULL) + return crend->marker_surface; + + marker_pixbuf = go_marker_get_pixbuf (style->marker.mark, rend->scale); + if (marker_pixbuf == NULL) + return NULL; + + pixbuf = gdk_pixbuf_copy (go_marker_get_pixbuf (style->marker.mark, rend->scale)); + pixels = gdk_pixbuf_get_pixels (pixbuf); + height = gdk_pixbuf_get_height (pixbuf); + width = gdk_pixbuf_get_width (pixbuf); + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + surface = cairo_image_surface_create_for_data (pixels, + CAIRO_FORMAT_ARGB32, width, height, rowstride); + grc_invert_pixbuf_RB (pixels, width, height, rowstride); + + crend->marker_pixbuf = pixbuf; + crend->marker_surface = surface; + + return surface; +} + +static void +gog_renderer_cairo_draw_marker (GogRenderer *rend, double x, double y) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + cairo_surface_t *surface; + double width, height; + + surface = grc_get_marker_surface (rend); + if (surface == NULL) + return; + width = cairo_image_surface_get_width (surface); + height = cairo_image_surface_get_height (surface); + cairo_set_source_surface (crend->cairo, surface, + floor (floor (x + .5) - width / 2.0), + floor (floor (y + .5) - height / 2.0)); + cairo_paint (crend->cairo); +} + +static void +gog_renderer_cairo_push_style (GogRenderer *rend, GogStyle const *style) +{ +} + +static void +gog_renderer_cairo_pop_style (GogRenderer *rend) +{ + GogRendererCairo *crend = GOG_RENDERER_CAIRO (rend); + + if (crend->marker_surface != NULL) { + cairo_surface_destroy (crend->marker_surface); + g_object_unref (crend->marker_pixbuf); + crend->marker_surface = NULL; + crend->marker_pixbuf = NULL; + } +} + +static void +gog_renderer_cairo_class_init (GogRendererClass *rend_klass) +{ + GObjectClass *gobject_klass = (GObjectClass *) rend_klass; + + parent_klass = g_type_class_peek_parent (rend_klass); + gobject_klass->finalize = gog_renderer_cairo_finalize; + rend_klass->push_style = gog_renderer_cairo_push_style; + rend_klass->pop_style = gog_renderer_cairo_pop_style; + rend_klass->clip_push = gog_renderer_cairo_clip_push; + rend_klass->clip_pop = gog_renderer_cairo_clip_pop; + rend_klass->sharp_path = gog_renderer_cairo_sharp_path; + rend_klass->draw_path = gog_renderer_cairo_draw_path; + rend_klass->draw_polygon = gog_renderer_cairo_draw_polygon; + rend_klass->draw_bezier_path = gog_renderer_cairo_draw_bezier_path; + rend_klass->draw_bezier_polygon = gog_renderer_cairo_draw_bezier_polygon; + rend_klass->draw_text = gog_renderer_cairo_draw_text; + rend_klass->draw_marker = gog_renderer_cairo_draw_marker; + rend_klass->get_text_OBR = gog_renderer_cairo_get_text_OBR; + rend_klass->line_size = gog_renderer_cairo_line_size; +} + +static void +gog_renderer_cairo_init (GogRendererCairo *crend) +{ + crend->cairo = NULL; + crend->pixbuf = NULL; + crend->marker_surface = NULL; + crend->marker_pixbuf = NULL; + crend->w = crend->h = 0; +} + +GSF_CLASS (GogRendererCairo, gog_renderer_cairo, + gog_renderer_cairo_class_init, gog_renderer_cairo_init, + GOG_RENDERER_TYPE) + +GdkPixbuf * +gog_renderer_cairo_get_pixbuf (GogRendererCairo *crend) +{ + g_return_val_if_fail (crend != NULL, NULL); + + return crend->pixbuf; +} + +static gboolean +grc_cairo_setup (GogRendererCairo *crend, int w, int h) +{ + cairo_surface_t *surface; + + if (w == crend->w && h == crend->h) + return (w != 0 && h!= 0); + + if (crend->cairo != NULL) { + surface = cairo_get_target (crend->cairo); + cairo_surface_destroy (surface); + cairo_destroy (crend->cairo); + crend->cairo = NULL; + } + if (crend->pixbuf != NULL) { + g_object_unref (crend->pixbuf); + crend->pixbuf = NULL; + } + crend->w = w; + crend->h = h; + + if (w ==0 || h == 0) + return FALSE; + + crend->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, crend->w, crend->h); + if (crend->pixbuf == NULL) { + g_warning ("GogRendererCairo::cairo_setup: chart is too large"); + return FALSE; + } + + surface = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels (crend->pixbuf), + CAIRO_FORMAT_ARGB32, + crend->w, crend->h, + gdk_pixbuf_get_rowstride (crend->pixbuf)); + crend->cairo = cairo_create (surface); + cairo_set_line_join (crend->cairo, CAIRO_LINE_JOIN_ROUND); + cairo_set_line_cap (crend->cairo, CAIRO_LINE_CAP_ROUND); + + return TRUE; +} + +/** + * gog_renderer_update : + * @prend : + * @w : + * @h : + * + * Returns TRUE if the size actually changed. + **/ +gboolean +gog_renderer_cairo_update (GogRendererCairo *crend, int w, int h, double zoom) +{ + GogGraph *graph; + GogView *view; + GogViewAllocation allocation; + gboolean redraw = TRUE; + gboolean size_changed; + + g_return_val_if_fail (crend != NULL, FALSE); + g_return_val_if_fail (crend->base.view != NULL, FALSE); + + size_changed = crend->w != w || crend->h != h; + + view = crend->base.view; + graph = GOG_GRAPH (view->model); + gog_graph_force_update (graph); + allocation.x = allocation.y = 0.; + allocation.w = w; + allocation.h = h; + if (!grc_cairo_setup (crend, w, h)) + return redraw; + + if (size_changed) { + crend->base.scale_x = w / graph->width; + crend->base.scale_y = h / graph->height; + crend->base.scale = MIN (crend->base.scale_x, crend->base.scale_y); + crend->base.zoom = zoom; + + /* make sure we dont try to queue an update while updating */ + crend->base.needs_update = TRUE; + + /* scale just changed need to recalculate sizes */ + gog_renderer_invalidate_size_requests (&crend->base); + gog_view_size_allocate (view, &allocation); + } else + if (w != view->allocation.w || h != view->allocation.h) + gog_view_size_allocate (view, &allocation); + else + redraw = gog_view_update_sizes (view); + + redraw |= crend->base.needs_update; + crend->base.needs_update = FALSE; + + if (redraw) { + cairo_rectangle (crend->cairo, 0, 0, w, h); + cairo_set_source_rgba (crend->cairo, 1, 1, 1, 0); + cairo_fill (crend->cairo); + + gog_view_render (view, NULL); + + grc_invert_pixbuf_RB (gdk_pixbuf_get_pixels (crend->pixbuf), w, h, + gdk_pixbuf_get_rowstride (crend->pixbuf)); + } + + return redraw; +} diff --git a/lib/goffice/graph/gog-renderer-gnome-print.c b/lib/goffice-0.0.4/goffice/graph/gog-renderer-gnome-print.c similarity index 74% rename from lib/goffice/graph/gog-renderer-gnome-print.c rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-gnome-print.c index f327a07a29..f78fad915f 100644 --- a/lib/goffice/graph/gog-renderer-gnome-print.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-gnome-print.c @@ -15,13 +15,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -/* is only needed for gnm_font_find_closest_from_weight_slant */ -#include +#include #include #include #include @@ -39,9 +38,7 @@ #include #include -#ifdef HAVE_GNOME_PRINT_PANGO_CREATE_LAYOUT #include -#endif #define GOG_RENDERER_GNOME_PRINT_TYPE (gog_renderer_gnome_print_get_type ()) #define GOG_RENDERER_GNOME_PRINT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RENDERER_GNOME_PRINT_TYPE, GogRendererGnomePrint)) @@ -55,6 +52,8 @@ struct _GogRendererGnomePrint { GPtrArray *fonts; GnomePrintContext *gp_context; PangoLayout *layout; + + GogViewAllocation bbox; }; typedef GogRendererClass GogRendererGnomePrintClass; @@ -80,11 +79,10 @@ gog_renderer_gnome_print_finalize (GObject *obj) if (prend->fonts != NULL) { int i; - GnomeFont *font; for (i = prend->fonts->len; i-- > 0 ; ) { - font = g_ptr_array_index (prend->fonts, i); - if (font != NULL) - gnome_font_unref (font); + PangoFontDescription *fd = g_ptr_array_index (prend->fonts, i); + if (fd != NULL) + pango_font_description_free (fd); } g_ptr_array_free (prend->fonts, TRUE); @@ -94,49 +92,22 @@ gog_renderer_gnome_print_finalize (GObject *obj) (*parent_klass->finalize) (obj); } -/* - * print_make_rectangle_path - * @pc print context - * @left left side x coordinate - * @bottom bottom side y coordinate - * @right right side x coordinate - * @top top side y coordinate - * - * Make a rectangular path. - * */ - -static void -print_make_rectangle_path (GnomePrintContext *pc, - double left, double bottom, - double right, double top) -{ - g_return_if_fail (pc != NULL); - - gnome_print_newpath (pc); - gnome_print_moveto (pc, left, bottom); - gnome_print_lineto (pc, left, top); - gnome_print_lineto (pc, right, top); - gnome_print_lineto (pc, right, bottom); - gnome_print_closepath (pc); -} - -static GnomeFont * +static PangoFontDescription * get_font (GogRendererGnomePrint *prend, GOFont const *gf) { - GnomeFont *res = NULL; + PangoFontDescription *res = NULL; if (gf->font_index < (int)prend->fonts->len) res = g_ptr_array_index (prend->fonts, gf->font_index); else - g_ptr_array_set_size (prend->fonts, gf->font_index+1); + g_ptr_array_set_size (prend->fonts, gf->font_index + 1); if (res == NULL) { - PangoFontDescription *desc = gf->desc; - res = gnm_font_find_closest_from_weight_slant ( - pango_font_description_get_family (desc), - pango_font_description_get_weight (desc) >= PANGO_WEIGHT_BOLD ? GNOME_FONT_BOLD : GNOME_FONT_REGULAR, - pango_font_description_get_style (desc) != PANGO_STYLE_NORMAL, - prend->base.zoom * pango_font_description_get_size (desc) / PANGO_SCALE); + res = pango_font_description_copy (gf->desc); + /* FIXME: Why do we do this? */ + pango_font_description_set_size (res, + prend->base.zoom * + pango_font_description_get_size (res)); g_ptr_array_index (prend->fonts, gf->font_index) = res; } @@ -154,27 +125,6 @@ set_color (GogRendererGnomePrint *prend, GOColor color) gnome_print_setopacity (prend->gp_context, a); } -static void -gog_renderer_gnome_print_clip_push (GogRenderer *rend, GogRendererClip *clip) -{ - GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); - - gnome_print_gsave (prend->gp_context); - print_make_rectangle_path (prend->gp_context, - clip->area.x, -clip->area.y, - clip->area.w + clip->area.x, - -clip->area.h - clip->area.y); - gnome_print_clip (prend->gp_context); -} - -static void -gog_renderer_gnome_print_clip_pop (GogRenderer *rend, GogRendererClip *clip) -{ - GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); - - gnome_print_grestore (prend->gp_context); -} - static void draw_path (GogRendererGnomePrint *prend, ArtVpath const *path) { @@ -196,16 +146,23 @@ draw_path (GogRendererGnomePrint *prend, ArtVpath const *path) } static void -setup_clip (GogRendererGnomePrint *prend, GogViewAllocation const *bound) +gog_renderer_gnome_print_push_clip (GogRenderer *rend, GogRendererClip *clip) { + GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); + gnome_print_gsave (prend->gp_context); - gnome_print_moveto (prend->gp_context, bound->x, -bound->y); - gnome_print_lineto (prend->gp_context, bound->x + bound->w, -bound->y); - gnome_print_lineto (prend->gp_context, bound->x + bound->w, -bound->y - bound->h); - gnome_print_lineto (prend->gp_context, bound->x, -bound->y - bound->h); + draw_path (prend, clip->path); gnome_print_clip (prend->gp_context); } +static void +gog_renderer_gnome_print_pop_clip (GogRenderer *rend, GogRendererClip *clip) +{ + GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); + + gnome_print_grestore (prend->gp_context); +} + static void set_dash (GogRendererGnomePrint *prend, ArtVpathDash *dash) { @@ -217,8 +174,7 @@ set_dash (GogRendererGnomePrint *prend, ArtVpathDash *dash) } static void -gog_renderer_gnome_print_draw_path (GogRenderer *renderer, ArtVpath const *path, - GogViewAllocation const *bound) +gog_renderer_gnome_print_draw_path (GogRenderer *renderer, ArtVpath const *path) { GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (renderer); GogStyle const *style = renderer->cur_style; @@ -231,20 +187,14 @@ gog_renderer_gnome_print_draw_path (GogRenderer *renderer, ArtVpath const *path, gnome_print_setlinewidth (prend->gp_context, gog_renderer_line_size (renderer, style->line.width)); - if (bound != NULL) - setup_clip (prend, bound); - if (style->line.dash_type != GO_LINE_SOLID && renderer->cur_clip != NULL) { - ArtVpath *clipped = go_line_clip_vpath (path, &renderer->cur_clip->area); + ArtVpath *clipped = go_line_clip_vpath (path, &prend->bbox); draw_path (prend, clipped); g_free (clipped); } else draw_path (prend, path); gnome_print_stroke (prend->gp_context); - - if (bound != NULL) - gnome_print_grestore (prend->gp_context); } static void @@ -263,7 +213,7 @@ print_image (GogRendererGnomePrint *prend, GdkPixbuf *image, int w, int h) #define PIXBUF_SIZE 1024 static void gog_renderer_gnome_print_draw_polygon (GogRenderer *renderer, ArtVpath const *path, - gboolean narrow, GogViewAllocation const *bound) + gboolean narrow) { GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (renderer); GogStyle const *style = renderer->cur_style; @@ -276,14 +226,12 @@ gog_renderer_gnome_print_draw_polygon (GogRenderer *renderer, ArtVpath const *pa ArtGradientLinear gradient; ArtGradientStop stops[2]; - if (bound != NULL) - setup_clip (prend, bound); - if (style->fill.type != GOG_FILL_STYLE_NONE || with_outline) { if (style->outline.dash_type != GO_LINE_SOLID && renderer->cur_clip != NULL) { - ArtVpath *clipped = go_line_clip_vpath (path, &renderer->cur_clip->area); + ArtVpath *clipped = go_line_clip_vpath (path, &prend->bbox); draw_path (prend, clipped); g_free (clipped); + draw_path (prend, path); } else draw_path (prend, path); gnome_print_closepath (prend->gp_context); @@ -434,8 +382,60 @@ gog_renderer_gnome_print_draw_polygon (GogRenderer *renderer, ArtVpath const *pa gog_renderer_line_size (renderer, style->outline.width)); gnome_print_stroke (prend->gp_context); } - if (bound != NULL) - gnome_print_grestore (prend->gp_context); +} + +static void +draw_bezier_path (GogRendererGnomePrint *prend, ArtBpath const *path) +{ + gnome_print_newpath (prend->gp_context); + for ( ; path->code != ART_END ; path++) + switch (path->code) { + case ART_MOVETO_OPEN : + case ART_MOVETO : + gnome_print_moveto (prend->gp_context, + path->x3, -path->y3); + break; + case ART_LINETO : + gnome_print_lineto (prend->gp_context, + path->x3, -path->y3); + break; + case ART_CURVETO : + gnome_print_curveto (prend->gp_context, + path->x1, -path->y1, + path->x2, -path->y2, + path->x3, -path->y3); + break; + default : + break; + } +} + +static void +gog_renderer_gnome_print_draw_bezier_path (GogRenderer *rend, ArtBpath const *path) +{ + GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); + GogStyle const *style = rend->cur_style; + + if (style->line.dash_type == GO_LINE_NONE) + return; + + set_color (prend, style->line.color); + set_dash (prend, rend->line_dash); + gnome_print_setlinewidth (prend->gp_context, + gog_renderer_line_size (rend, style->line.width)); + + draw_bezier_path (prend, path); + + gnome_print_stroke (prend->gp_context); +} + +static void +gog_renderer_gnome_print_draw_bezier_polygon (GogRenderer *rend, ArtBpath const *path, + gboolean narrow) +{ + ArtVpath *vpath = art_bez_path_to_vec (path, .1); + gog_renderer_gnome_print_draw_polygon (rend, vpath, narrow); + art_free (vpath); } static void @@ -444,97 +444,80 @@ gog_renderer_gnome_print_draw_text (GogRenderer *rend, char const *text, GogViewAllocation *result) { GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); - GnomeFont *gfont = get_font (prend, rend->cur_style->font.font); + PangoFontDescription *pango_font = get_font (prend, rend->cur_style->font.font); if (text[0]) { - double x, y, w, h; -#ifdef HAVE_GNOME_PRINT_PANGO_CREATE_LAYOUT + GOColor fore_color = rend->cur_style->font.color; + GOGeometryOBR obr; + GOGeometryAABR aabr; int iw, ih; - const double dummy_dpi = 300; /* FIXME: What exactly is this? */ - PangoFontDescription *pango_font = /* FIXME: can i get the pango font directly ? */ - gnome_font_get_pango_description (gfont, dummy_dpi); pango_layout_set_font_description (prend->layout, pango_font); pango_layout_set_text (prend->layout, text, -1); pango_layout_get_size (prend->layout, &iw, &ih); - w = iw / (double)PANGO_SCALE; - h = ih / (double)PANGO_SCALE; -#else - /* This code will die when we require libgnomeprint 2.8 */ - double font_ascent = gnome_font_get_ascender (gfont); - w = gnome_font_get_width_utf8 (gfont, text); - h = font_ascent + gnome_font_get_descender (gfont); -#endif - x = pos->x; - switch (anchor) { - case GTK_ANCHOR_CENTER : case GTK_ANCHOR_N : case GTK_ANCHOR_S : - x -= w / 2.0; - break; - case GTK_ANCHOR_NE : case GTK_ANCHOR_SE : case GTK_ANCHOR_E : - x -= w; - break; - default : break; - } - if (x <= 0) - x = 0; - - y = pos->y; - switch (anchor) { - case GTK_ANCHOR_CENTER : case GTK_ANCHOR_E : case GTK_ANCHOR_W : - y -= h / 2.0; - break; - case GTK_ANCHOR_SE : case GTK_ANCHOR_S : case GTK_ANCHOR_SW : - y -= h; - break; - default : break; - } - if (y <= 0) - y = 0; - -#ifdef GOG_WARN_TODO -#warning "add clipping" -#endif + obr.w = iw / (double)PANGO_SCALE; + obr.h = ih / (double)PANGO_SCALE; + obr.alpha = rend->cur_style->text_layout.angle * M_PI / 180.0; + obr.x = pos->x; + obr.y = pos->y; + go_geometry_OBR_to_AABR (&obr, &aabr); -#ifdef HAVE_GNOME_PRINT_PANGO_CREATE_LAYOUT - gnome_print_moveto (prend->gp_context,x, -y); + switch (anchor) { + case GTK_ANCHOR_NW: case GTK_ANCHOR_W: case GTK_ANCHOR_SW: + obr.x += aabr.w / 2.0; + break; + case GTK_ANCHOR_NE : case GTK_ANCHOR_SE : case GTK_ANCHOR_E : + obr.x -= aabr.w / 2.0; + break; + default : break; + } + if (obr.x <= 0) + obr.x = 0; + + switch (anchor) { + case GTK_ANCHOR_NW: case GTK_ANCHOR_N: case GTK_ANCHOR_NE: + obr.y += aabr.h / 2.0; + break; + case GTK_ANCHOR_SE : case GTK_ANCHOR_S : case GTK_ANCHOR_SW : + obr.y -= aabr.h / 2.0; + break; + default : break; + } + if (obr.y <= 0) + obr.y = 0; + + gnome_print_gsave (prend->gp_context); + gnome_print_setrgbcolor (prend->gp_context, + UINT_RGBA_R (fore_color) / 255., + UINT_RGBA_G (fore_color) / 255., + UINT_RGBA_B (fore_color) / 255.); + gnome_print_moveto (prend->gp_context, + obr.x - (obr.w / 2.0) * cos (obr.alpha) - (obr.h / 2.0) * sin (obr.alpha), + -obr.y - (obr.w / 2.0) * sin (obr.alpha) + (obr.h / 2.0) * cos (obr.alpha)); + gnome_print_rotate (prend->gp_context, rend->cur_style->text_layout.angle); gnome_print_pango_layout (prend->gp_context, prend->layout); - pango_font_description_free (pango_font); -#else - /* This code will die when we require libgnomeprint 2.8 */ - gnome_print_setfont (prend->gp_context, gfont); - gnome_print_moveto (prend->gp_context, x, -y - font_ascent); - gnome_print_show (prend->gp_context, text); -#endif + gnome_print_grestore (prend->gp_context); if (result != NULL) { - result->x = x; - result->y = y; - result->w = w; - result->h = h; + result->x = aabr.x; + result->y = aabr.y; + result->w = aabr.w; + result->h = aabr.h; } } } static void -gog_renderer_gnome_print_measure_text (GogRenderer *rend, - char const *text, GogViewRequisition *size) +gog_renderer_gnome_print_get_text_OBR (GogRenderer *rend, char const *text, GOGeometryOBR *obr) { GogRendererGnomePrint *prend = GOG_RENDERER_GNOME_PRINT (rend); - GnomeFont *gfont = get_font (prend, rend->cur_style->font.font); -#ifdef HAVE_GNOME_PRINT_PANGO_CREATE_LAYOUT + PangoFontDescription *pango_font = get_font (prend, rend->cur_style->font.font); int iw, ih; - const double dummy_dpi = 300; /* FIXME: What exactly is this? */ - PangoFontDescription *pango_font = /* FIXME: can i get the pango font directly ? */ - gnome_font_get_pango_description (gfont, dummy_dpi); pango_layout_set_font_description (prend->layout, pango_font); pango_layout_set_text (prend->layout, text, -1); pango_layout_get_size (prend->layout, &iw, &ih); - size->w = iw / (double)PANGO_SCALE; - size->h = ih / (double)PANGO_SCALE; -#else - size->w = gnome_font_get_width_utf8 (gfont, text); - size->h = gnome_font_get_ascender (gfont) - gnome_font_get_descender (gfont); -#endif + obr->w = iw / (double)PANGO_SCALE; + obr->h = ih / (double)PANGO_SCALE; } static void @@ -592,13 +575,15 @@ gog_renderer_gnome_print_class_init (GogRendererClass *rend_klass) parent_klass = g_type_class_peek_parent (rend_klass); gobject_klass->finalize = gog_renderer_gnome_print_finalize; - rend_klass->clip_push = gog_renderer_gnome_print_clip_push; - rend_klass->clip_pop = gog_renderer_gnome_print_clip_pop; + rend_klass->push_clip = gog_renderer_gnome_print_push_clip; + rend_klass->pop_clip = gog_renderer_gnome_print_pop_clip; rend_klass->draw_path = gog_renderer_gnome_print_draw_path; rend_klass->draw_polygon = gog_renderer_gnome_print_draw_polygon; + rend_klass->draw_bezier_path = gog_renderer_gnome_print_draw_bezier_path; + rend_klass->draw_bezier_polygon = gog_renderer_gnome_print_draw_bezier_polygon; rend_klass->draw_text = gog_renderer_gnome_print_draw_text; rend_klass->draw_marker = gog_renderer_gnome_print_draw_marker; - rend_klass->measure_text = gog_renderer_gnome_print_measure_text; + rend_klass->get_text_OBR = gog_renderer_gnome_print_get_text_OBR; } static void @@ -606,6 +591,10 @@ gog_renderer_gnome_print_init (GogRendererGnomePrint *prend) { prend->gp_context = NULL; prend->fonts = g_ptr_array_new (); + prend->bbox.x = + prend->bbox.y = 0.0; + prend->bbox.w = + prend->bbox.h = 1.0; } static GSF_CLASS (GogRendererGnomePrint, gog_renderer_gnome_print, @@ -623,17 +612,17 @@ gog_graph_print_to_gnome_print (GogGraph *graph, "model", graph, "zoom", 1., NULL); + + gog_graph_force_update (graph); + prend->gp_context = g_object_ref (gp_context); -#ifdef HAVE_GNOME_PRINT_PANGO_CREATE_LAYOUT prend->layout = gnome_print_pango_create_layout (prend->gp_context); -#else - prend->layout = 0; -#endif allocation.x = 0.; allocation.y = 0.; allocation.w = width; allocation.h = height; gog_view_size_allocate (prend->base.view, &allocation); + prend->bbox = allocation; /* FIXME FIXME FIXME this is a workaround for a bug in libgnomeprint * where line with width == 1.0 don't scale properly before an other diff --git a/lib/goffice/graph/gog-renderer-gnome-print.h b/lib/goffice-0.0.4/goffice/graph/gog-renderer-gnome-print.h similarity index 92% rename from lib/goffice/graph/gog-renderer-gnome-print.h rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-gnome-print.h index c684faf0a4..6568b4aa75 100644 --- a/lib/goffice/graph/gog-renderer-gnome-print.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-gnome-print.h @@ -15,14 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_RENDERER_GNOME_PRINT_H #define GOG_RENDERER_GNOME_PRINT_H #include -#include #include G_BEGIN_DECLS diff --git a/lib/goffice/graph/gog-renderer-impl.h b/lib/goffice-0.0.4/goffice/graph/gog-renderer-impl.h similarity index 82% rename from lib/goffice/graph/gog-renderer-impl.h rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-impl.h index 8e54d0732f..8aacd17684 100644 --- a/lib/goffice/graph/gog-renderer-impl.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -30,8 +30,8 @@ G_BEGIN_DECLS typedef struct { - GogViewAllocation area; - gpointer data; + ArtVpath *path; + gpointer data; } GogRendererClip; struct _GogRenderer { @@ -39,8 +39,6 @@ struct _GogRenderer { GogGraph *model; GogView *view; - double logical_width_pts; - double logical_height_pts; float scale, scale_x, scale_y; float zoom; @@ -62,25 +60,27 @@ typedef struct { /* Virtuals */ void (*font_removed) (GogRenderer *renderer, GOFont const *font); + void (*push_style) (GogRenderer *renderer, GogStyle const *style); void (*pop_style) (GogRenderer *renderer); - void (*clip_push) (GogRenderer *renderer, GogRendererClip *clip); - void (*clip_pop) (GogRenderer *renderer, GogRendererClip *clip); + void (*push_clip) (GogRenderer *renderer, GogRendererClip *clip); + void (*pop_clip) (GogRenderer *renderer, GogRendererClip *clip); void (*sharp_path) (GogRenderer *renderer, ArtVpath *path, double line_width); - void (*draw_path) (GogRenderer *renderer, ArtVpath const *path, - GogViewAllocation const *bound); - void (*draw_polygon) (GogRenderer *renderer, ArtVpath const *path, gboolean narrow, - GogViewAllocation const *bound); + void (*draw_path) (GogRenderer *renderer, ArtVpath const *path); + void (*draw_polygon) (GogRenderer *renderer, ArtVpath const *path, gboolean narrow); + + void (*draw_bezier_path) (GogRenderer *renderer, ArtBpath const *path); + void (*draw_bezier_polygon) (GogRenderer *renderer, ArtBpath const *path, gboolean narrow); + void (*draw_text) (GogRenderer *rend, char const *text, GogViewAllocation const *pos, GtkAnchorType anchor, GogViewAllocation *result); void (*draw_marker) (GogRenderer *rend, double x, double y); - void (*measure_text) (GogRenderer *rend, - char const *text, GogViewRequisition *size); + void (*get_text_OBR) (GogRenderer *rend, char const *text, GOGeometryOBR *obr); double (*line_size) (GogRenderer const *rend, double width); diff --git a/lib/goffice/graph/gog-renderer-pixbuf.c b/lib/goffice-0.0.4/goffice/graph/gog-renderer-pixbuf.c similarity index 58% rename from lib/goffice/graph/gog-renderer-pixbuf.c rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-pixbuf.c index 534a96a867..d787d8993e 100644 --- a/lib/goffice/graph/gog-renderer-pixbuf.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-pixbuf.c @@ -15,11 +15,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include +#include #include #include #include @@ -35,8 +36,6 @@ #include #include #include -//#include -#include #include @@ -45,6 +44,8 @@ struct _GogRendererPixbuf { int w, h; int x_offset, y_offset; + double dpi_x, dpi_y; + GdkPixbuf *buffer; guchar *pixels; /* from pixbuf */ int rowstride; @@ -73,10 +74,6 @@ gog_renderer_pixbuf_finalize (GObject *obj) } if (prend->pango_context != NULL) { -#ifdef HAVE_PANGO_CONTEXT_GET_FONT_MAP - /* See http://bugzilla.gnome.org/show_bug.cgi?id=143542 */ - go_pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (pango_context_get_font_map (prend->pango_context))); -#endif g_object_unref (prend->pango_context); prend->pango_context = NULL; } @@ -86,54 +83,78 @@ gog_renderer_pixbuf_finalize (GObject *obj) typedef struct { - GdkPixbuf *buffer; - double x_offset; - double y_offset; + GdkPixbuf *buffer; + double x_offset; + double y_offset; + ArtSVP *svp; } ClipData; static void -gog_renderer_pixbuf_clip_push (GogRenderer *rend, GogRendererClip *clip) +gog_renderer_pixbuf_push_clip (GogRenderer *rend, GogRendererClip *clip) { - ClipData *clip_data; - GdkRectangle graph_rect, clip_rect, res_rect; GogRendererPixbuf *prend = GOG_RENDERER_PIXBUF (rend); + ClipData *clip_data; + ArtVpath *path = clip->path; + int i; + gboolean is_rectangle; + + for (i = 0; i < 6; i++) + if (path[i].code == ART_END) + break; + + is_rectangle = i == 5 && + path[5].code == ART_END && + path[0].x == path[3].x && + path[0].x == path[4].x && + path[1].x == path[2].x && + path[0].y == path[1].y && + path[0].y == path[4].y && + path[2].y == path[3].y; clip->data = g_new (ClipData, 1); clip_data = (ClipData *) clip->data; - clip_data->x_offset = prend->x_offset; clip_data->y_offset = prend->y_offset; clip_data->buffer = NULL; + clip_data->svp = NULL; - graph_rect.x = graph_rect.y = 0; - graph_rect.width = gdk_pixbuf_get_width (prend->buffer); - graph_rect.height = gdk_pixbuf_get_height (prend->buffer); + if (is_rectangle) { + GdkRectangle graph_rect, clip_rect, res_rect; - clip_rect.x = floor (clip->area.x - prend->x_offset + 0.5); - clip_rect.y = floor (clip->area.y - prend->y_offset + 0.5); - clip_rect.width = floor (clip->area.x - prend->x_offset + clip->area.w + 0.5) - clip_rect.x; - clip_rect.height = floor (clip->area.y -prend->y_offset + clip->area.h + 0.5) - clip_rect.y; + graph_rect.x = graph_rect.y = 0; + graph_rect.width = gdk_pixbuf_get_width (prend->buffer); + graph_rect.height = gdk_pixbuf_get_height (prend->buffer); - if (gdk_rectangle_intersect (&graph_rect, &clip_rect, &res_rect)) { - clip_data->buffer = prend->buffer; - prend->buffer = gdk_pixbuf_new_subpixbuf (clip_data->buffer, - res_rect.x, res_rect.y, - res_rect.width, res_rect.height); - prend->x_offset += res_rect.x; - prend->y_offset += res_rect.y; + clip_rect.x = floor (path[0].x - prend->x_offset + 0.5); + clip_rect.y = floor (path[0].y - prend->y_offset + 0.5); + clip_rect.width = floor (path[1].x - prend->x_offset + 0.5) - clip_rect.x; + clip_rect.height = floor (path[2].y -prend->y_offset + 0.5) - clip_rect.y; + + if (gdk_rectangle_intersect (&graph_rect, &clip_rect, &res_rect)) { + clip_data->buffer = prend->buffer; + prend->buffer = gdk_pixbuf_new_subpixbuf (clip_data->buffer, + res_rect.x, res_rect.y, + res_rect.width, res_rect.height); + prend->x_offset += res_rect.x; + prend->y_offset += res_rect.y; + } + + if (prend->buffer == NULL) + g_warning ("Pixbuf renderer: invalid clipping region"); + + prend->pixels = gdk_pixbuf_get_pixels (prend->buffer); + prend->w = gdk_pixbuf_get_width (prend->buffer); + prend->h = gdk_pixbuf_get_height (prend->buffer); + prend->rowstride = gdk_pixbuf_get_rowstride (prend->buffer); + } else { + /* We cheat and assume new clip area is included + * in previous one */ + clip_data->svp = art_svp_from_vpath (path); } - - if (prend->buffer == NULL) - g_warning ("Pixbuf renderer: invalid clipping region"); - - prend->pixels = gdk_pixbuf_get_pixels (prend->buffer); - prend->w = gdk_pixbuf_get_width (prend->buffer); - prend->h = gdk_pixbuf_get_height (prend->buffer); - prend->rowstride = gdk_pixbuf_get_rowstride (prend->buffer); } static void -gog_renderer_pixbuf_clip_pop (GogRenderer *rend, GogRendererClip *clip) +gog_renderer_pixbuf_pop_clip (GogRenderer *rend, GogRendererClip *clip) { GogRendererPixbuf *prend = GOG_RENDERER_PIXBUF (rend); ClipData *clip_data = clip->data; @@ -142,35 +163,42 @@ gog_renderer_pixbuf_clip_pop (GogRenderer *rend, GogRendererClip *clip) if (prend->buffer != NULL) g_object_unref (prend->buffer); prend->buffer = clip_data->buffer; + prend->pixels = gdk_pixbuf_get_pixels (prend->buffer); + prend->w = gdk_pixbuf_get_width (prend->buffer); + prend->h = gdk_pixbuf_get_height (prend->buffer); + prend->rowstride = gdk_pixbuf_get_rowstride (prend->buffer); + prend->x_offset = clip_data->x_offset; + prend->y_offset = clip_data->y_offset; } - prend->pixels = gdk_pixbuf_get_pixels (prend->buffer); - prend->w = gdk_pixbuf_get_width (prend->buffer); - prend->h = gdk_pixbuf_get_height (prend->buffer); - prend->rowstride = gdk_pixbuf_get_rowstride (prend->buffer); - prend->x_offset = clip_data->x_offset; - prend->y_offset = clip_data->y_offset; + if (clip_data->svp != NULL) + art_free (clip_data->svp); g_free (clip->data); clip->data = NULL; } -static ArtSVP * -clip_path (GogViewAllocation const *bound) +static void +gog_renderer_pixbuf_do_clip (GogRenderer *rend, ArtSVP **svp) { - ArtVpath path[6]; - path[0].code = ART_MOVETO; - path[1].code = ART_LINETO; - path[2].code = ART_LINETO; - path[3].code = ART_LINETO; - path[4].code = ART_LINETO; - path[5].code = ART_END; - path[0].x = path[1].x = path[4].x = bound->x; - path[2].x = path[3].x = path[0].x + bound->w; - path[0].y = path[3].y = path[4].y = bound->y; - path[1].y = path[2].y = path[0].y + bound->h; - return art_svp_from_vpath ((ArtVpath *)path); + ClipData *clip_data; + ArtSVP *svp1; + + g_return_if_fail (*svp != NULL); + + if (rend->cur_clip == NULL) + return; + + clip_data = rend->cur_clip->data; + + if (clip_data->svp == NULL) + return; + + svp1 = art_svp_intersect (*svp, clip_data->svp); + art_free (*svp); + *svp = svp1; } + static double line_size (GogRenderer const *rend, double width) { @@ -215,51 +243,100 @@ gog_renderer_pixbuf_sharp_path (GogRenderer *rend, ArtVpath *path, double line_w } static void -gog_renderer_pixbuf_draw_path (GogRenderer *rend, ArtVpath const *path, - GogViewAllocation const *bound) +gog_renderer_pixbuf_draw_path (GogRenderer *rend, ArtVpath const *path) { GogRendererPixbuf *prend = GOG_RENDERER_PIXBUF (rend); + GogViewAllocation area; GogStyle const *style = rend->cur_style; double width = line_size (rend, style->line.width); ArtSVP *svp; - ArtVpath *dashed_path; + ArtVpath *dashed_path, short_path[3]; + double offset, dash_length = 0., dx, dy, n; + int i; + + if (path[0].code == ART_END) /* this should not happen! */ + return; + short_path[0].code = ART_MOVETO; + short_path[1].code = ART_LINETO; + short_path[2].code = ART_END; switch (style->line.dash_type) { case GO_LINE_NONE: return; case GO_LINE_SOLID: - svp = art_svp_vpath_stroke ((ArtVpath *) path, - ART_PATH_STROKE_JOIN_MITER, - ART_PATH_STROKE_CAP_BUTT, - width, 4, 0.5); + i = 1; /* assumiong that path[0].code is not ART_LINETO */ + while (path[i].code != ART_END) { + if (path[i].code == ART_LINETO) { + short_path[0].x = path [i - 1].x; + short_path[0].y = path [i - 1].y; + short_path[1].x = path [i].x; + short_path[1].y = path [i].y; + svp = art_svp_vpath_stroke ((ArtVpath *) short_path, + ART_PATH_STROKE_JOIN_MITER, + ART_PATH_STROKE_CAP_ROUND, + width, 4, 0.5); + gog_renderer_pixbuf_do_clip (rend, &svp); + go_color_render_svp (style->line.color, svp, + prend->x_offset, + prend->y_offset, + prend->w + prend->x_offset, + prend->h + prend->y_offset, + prend->pixels, prend->rowstride); + art_svp_free (svp); + } + i++; + } break; default: - dashed_path = go_line_dash_vpath (path, rend->line_dash, - rend->cur_clip != NULL ? &rend->cur_clip->area : NULL); - if (dashed_path == NULL) - return; - svp = art_svp_vpath_stroke (dashed_path, - ART_PATH_STROKE_JOIN_MITER, - ART_PATH_STROKE_CAP_BUTT, - width, 4, 0.5); - g_free (dashed_path); + offset = rend->line_dash->offset; + for (i = 0; i < rend->line_dash->n_dash; i++) + dash_length += rend->line_dash->dash[i]; + i = 1; /* assuming that path[0].code is not ART_LINETO */ + while (path[i].code != ART_END) { + if (path[i].code == ART_LINETO) { + short_path[0].x = path [i - 1].x; + short_path[0].y = path [i - 1].y; + short_path[1].x = path [i].x; + short_path[1].y = path [i].y; + dx = short_path[1].x - short_path[0].x; + dy = short_path[1].y - short_path[0].y; + area.x = prend->x_offset; + area.y = prend->y_offset; + area.w = prend->w; + area.h = prend->h; + dashed_path = go_line_dash_vpath (short_path, rend->line_dash, &area); + dx = sqrt (dx * dx + dy * dy); + n = floor (dx / dash_length); + rend->line_dash->offset += dx - n * dash_length; + if (dashed_path != NULL) { + svp = art_svp_vpath_stroke (dashed_path, + ART_PATH_STROKE_JOIN_MITER, + ART_PATH_STROKE_CAP_ROUND, + width, 4, 0.5); + g_free (dashed_path); + + gog_renderer_pixbuf_do_clip (rend, &svp); + go_color_render_svp (style->line.color, svp, + prend->x_offset, + prend->y_offset, + prend->w + prend->x_offset, + prend->h + prend->y_offset, + prend->pixels, prend->rowstride); + art_svp_free (svp); + } + } + i++; + } + rend->line_dash->offset = offset; } - - if (bound != NULL) { - ArtSVP *orig = svp; - ArtSVP *clip = clip_path (bound); - svp = art_svp_intersect (clip, orig); - art_svp_free (clip); - art_svp_free (orig); - } - - go_color_render_svp (style->line.color, svp, - prend->x_offset, - prend->y_offset, - prend->w + prend->x_offset, - prend->h + prend->y_offset, - prend->pixels, prend->rowstride); - art_svp_free (svp); +} + +static void +gog_renderer_pixbuf_draw_bezier_path (GogRenderer *rend, ArtBpath const *path) +{ + ArtVpath *vpath = art_bez_path_to_vec (path, .1); + gog_renderer_pixbuf_draw_path (rend, vpath); + art_free (vpath); } static ArtRender * @@ -275,14 +352,14 @@ gog_art_renderer_new (GogRendererPixbuf *prend) } static void -gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, - gboolean narrow, GogViewAllocation const *bound) +gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, gboolean narrow) { GogRendererPixbuf *prend = GOG_RENDERER_PIXBUF (rend); GogStyle const *style = rend->cur_style; + GogViewAllocation area; ArtVpath *dashed_path; ArtRender *render; - ArtSVP *fill, *outline = NULL; + ArtSVP *outline = NULL; ArtDRect bbox; ArtGradientLinear gradient; ArtGradientStop stops[2]; @@ -301,8 +378,11 @@ gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, width, 4, 0.5); break; default: - dashed_path = go_line_dash_vpath (path, rend->outline_dash, - rend->cur_clip != NULL ? &rend->cur_clip->area : NULL); + area.x = prend->x_offset; + area.y = prend->y_offset; + area.w = prend->w; + area.h = prend->h; + dashed_path = go_line_dash_vpath (path, rend->outline_dash, &area); if (dashed_path != NULL) { outline = art_svp_vpath_stroke (dashed_path, ART_PATH_STROKE_JOIN_MITER, @@ -311,31 +391,19 @@ gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, g_free (dashed_path); } } - if (bound != NULL && outline != NULL) { - ArtSVP *orig = outline; - ArtSVP *clip = clip_path (bound); - outline = art_svp_intersect (clip, orig); - art_svp_free (clip); - art_svp_free (orig); - } } if (style->fill.type != GOG_FILL_STYLE_NONE) { - fill = art_svp_from_vpath ((ArtVpath *)path); - if (bound != NULL) { - ArtSVP *orig = fill; - ArtSVP *clip = clip_path (bound); - fill = art_svp_intersect (clip, orig); - art_svp_free (clip); - art_svp_free (orig); - } -#if 0 /* art_svp_minus is not implemented */ - if (outline != NULL) { - ArtSVP *tmp = art_svp_minus (fill, outline); - art_svp_free (fill); - fill = tmp; - } -#endif + ArtSVP *svp1, *svp2, *fill; + ArtVpath *path1; + path1 = art_vpath_perturb ((ArtVpath *)path); + svp1 = art_svp_from_vpath (path1); + art_free (path1); + svp2 = art_svp_uncross (svp1); + fill = art_svp_rewind_uncrossed (svp2, ART_WIND_RULE_NONZERO); + art_svp_free (svp1); + art_svp_free (svp2); + gog_renderer_pixbuf_do_clip (rend, &fill); switch (style->fill.type) { case GOG_FILL_STYLE_PATTERN: @@ -429,13 +497,13 @@ gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, &dest_rect, ©_rect)) gdk_pixbuf_copy_area (image, - copy_rect.x - image_rect.x, - copy_rect.y - image_rect.y, - copy_rect.width, - copy_rect.height, - prend->buffer, - copy_rect.x, - copy_rect.y); + copy_rect.x - image_rect.x, + copy_rect.y - image_rect.y, + copy_rect.width, + copy_rect.height, + prend->buffer, + copy_rect.x, + copy_rect.y); image_rect.y += image_rect.height; } image_rect.x +=image_rect.width; @@ -456,6 +524,7 @@ gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, } if (outline != NULL) { + gog_renderer_pixbuf_do_clip (rend, &outline); go_color_render_svp (style->outline.color, outline, prend->x_offset, prend->y_offset, @@ -466,6 +535,62 @@ gog_renderer_pixbuf_draw_polygon (GogRenderer *rend, ArtVpath const *path, } } +static void +gog_renderer_pixbuf_draw_bezier_polygon (GogRenderer *rend, ArtBpath const *path, + gboolean narrow) +{ + ArtVpath *vpath = art_bez_path_to_vec (path, .1); + gog_renderer_pixbuf_draw_polygon (rend, vpath, narrow); + art_free (vpath); +} + +static void +get_rotated_layout_bounds (PangoLayout *layout, + PangoRectangle *rect) +{ + PangoContext *context = pango_layout_get_context (layout); + const PangoMatrix *matrix = pango_context_get_matrix (context); + gdouble x_min = 0, x_max = 0, y_min = 0, y_max = 0; /* quiet gcc */ + PangoRectangle logical_rect; + gint i, j; + + pango_layout_get_extents (layout, NULL, &logical_rect); + + for (i = 0; i < 2; i++) + { + gdouble x = (i == 0) ? logical_rect.x : logical_rect.x + logical_rect.width; + for (j = 0; j < 2; j++) + { + gdouble y = (j == 0) ? logical_rect.y : logical_rect.y + logical_rect.height; + + gdouble xt = (x * matrix->xx + y * matrix->xy) / PANGO_SCALE + matrix->x0; + gdouble yt = (x * matrix->yx + y * matrix->yy) / PANGO_SCALE + matrix->y0; + + if (i == 0 && j == 0) + { + x_min = x_max = xt; + y_min = y_max = yt; + } + else + { + if (xt < x_min) + x_min = xt; + if (yt < y_min) + y_min = yt; + if (xt > x_max) + x_max = xt; + if (yt > y_max) + y_max = yt; + } + } + } + + rect->x = floor (x_min); + rect->width = ceil (x_max) - rect->x; + rect->y = floor (y_min); + rect->height = floor (y_max) - rect->y; +} + static PangoContext * gog_renderer_pixbuf_get_pango_context (GogRendererPixbuf *prend) { @@ -475,10 +600,19 @@ gog_renderer_pixbuf_get_pango_context (GogRendererPixbuf *prend) return prend->pango_context; font_map = PANGO_FT2_FONT_MAP (pango_ft2_font_map_new ()); - pango_ft2_font_map_set_resolution (font_map, - gnm_app_display_dpi_get (TRUE), - gnm_app_display_dpi_get (FALSE)); - prend->pango_context = pango_ft2_font_map_create_context (font_map); + pango_ft2_font_map_set_resolution (font_map, prend->dpi_x, prend->dpi_y); + + prend->pango_context = pango_ft2_font_map_create_context (font_map); + /* Workaround for bug #143542 (PangoFT2Fontmap leak), + * see also bug #148997 (Text layer rendering leaks font file descriptor): + * + * Calling pango_ft2_font_map_substitute_changed() causes the + * font_map cache to be flushed, thereby removing the circular + * reference that causes the leak. + */ + g_object_weak_ref (G_OBJECT (prend->pango_context), + (GWeakNotify) pango_ft2_font_map_substitute_changed, + font_map); g_object_unref (font_map); return prend->pango_context; @@ -487,25 +621,26 @@ gog_renderer_pixbuf_get_pango_context (GogRendererPixbuf *prend) static PangoLayout * gog_renderer_pixbuf_get_pango_layout (GogRendererPixbuf *prend) { + GogRenderer *rend = GOG_RENDERER (prend); + GogStyle const *style = prend->base.cur_style; PangoContext *context; PangoAttribute *attr; PangoAttrList *attrs = NULL; - PangoFontDescription const *fd = prend->base.cur_style->font.font->desc; - - // +jsled: testing font display issues. - if (0) - { - char *pfdStr; - pfdStr = pango_font_description_to_string( fd ); - printf( "pfd=[%s]\n", pfdStr ); - g_free( pfdStr ); - } - // -jsled + PangoFontDescription const *fd = style->font.font->desc; + PangoMatrix matrix = PANGO_MATRIX_INIT; if (prend->pango_layout != NULL) return prend->pango_layout; context = gog_renderer_pixbuf_get_pango_context (prend); + switch (go_geometry_get_rotation_type (rend->cur_style->text_layout.angle * M_PI / 180.0)) { + case GO_ROTATE_FREE: + pango_matrix_rotate (&matrix, rend->cur_style->text_layout.angle); + pango_context_set_matrix (context, &matrix); + break; + default: + pango_context_set_matrix (context, NULL); + } prend->pango_layout = pango_layout_new (context); @@ -539,32 +674,67 @@ gog_renderer_pixbuf_draw_text (GogRenderer *rend, char const *text, PangoRectangle rect; PangoLayout *layout; guint8 r, g, b, a, alpha, *dst, *src; - int h, w, i, x, y; + int h, w, i, x, y, interrow, intercol, rotation_type; + int ft_x, ft_y, ft_w, ft_h, offset; GogStyle const *style = rend->cur_style; + PangoMatrix matrix, old_matrix; + + rotation_type = go_geometry_get_rotation_type (rend->cur_style->text_layout.angle * M_PI / 180); layout = gog_renderer_pixbuf_get_pango_layout ((GogRendererPixbuf *) rend); pango_layout_set_text (layout, text, -1); - pango_layout_get_extents (layout, NULL, &rect); - rect.x = PANGO_PIXELS (rect.x); - rect.y = PANGO_PIXELS (rect.y); + + switch (rotation_type) { + case GO_ROTATE_FREE: + get_rotated_layout_bounds (layout, &rect); + matrix = *pango_context_get_matrix (pango_layout_get_context (layout)); + old_matrix = matrix; + matrix.x0 = -rect.x; + matrix.y0 = -rect.y; + pango_context_set_matrix (pango_layout_get_context (layout), &matrix); + rect.width *= PANGO_SCALE; + rect.height *= PANGO_SCALE; + rect.x = rect.y = 0; + break; + default: + pango_layout_get_extents (layout, NULL, &rect); + rect.x = PANGO_PIXELS (rect.x); + rect.y = PANGO_PIXELS (rect.y); + } + + ft_x = rect.x; + ft_y = rect.y; + switch (rotation_type) { + case GO_ROTATE_CLOCKWISE: + case GO_ROTATE_COUNTERCLOCKWISE: + x = rect.x; + rect.x = rect.y; + rect.y = x; + w = rect.width; + rect.width = rect.height; + rect.height = w; + break; + default: + break; + } + x = (int)((pos->x - prend->x_offset) * PANGO_SCALE); y = (int)((pos->y - prend->y_offset) * PANGO_SCALE); + switch (anchor) { - case GTK_ANCHOR_CENTER : case GTK_ANCHOR_N : case GTK_ANCHOR_S : - x -= rect.width / 2; - break; - case GTK_ANCHOR_NE : case GTK_ANCHOR_SE : case GTK_ANCHOR_E : - x -= rect.width; - break; - default : break; + case GTK_ANCHOR_CENTER : case GTK_ANCHOR_N : case GTK_ANCHOR_S : + x -= rect.width / 2; + break; + case GTK_ANCHOR_NE : case GTK_ANCHOR_SE : case GTK_ANCHOR_E : + x -= rect.width; + break; + default : break; } x = (x > 0) ? (x + PANGO_SCALE / 2) / PANGO_SCALE : 0; w = (rect.width + PANGO_SCALE / 2) / PANGO_SCALE; -/* Makes rendering inconsitent with gnome-print and svg renderer */ -/* if (w > pos->w && pos->w >= 0)*/ -/* w = pos->w;*/ - if ((x + w) > prend->w) - w = prend->w - x; + offset = rotation_type == GO_ROTATE_NONE ? rect.x : 0.0; + if ((x + w + offset) > prend->w) + w = prend->w - x - offset; switch (anchor) { case GTK_ANCHOR_CENTER : case GTK_ANCHOR_E : case GTK_ANCHOR_W : @@ -577,11 +747,9 @@ gog_renderer_pixbuf_draw_text (GogRenderer *rend, char const *text, } y = (y > 0) ? (y + PANGO_SCALE / 2) / PANGO_SCALE : 0; h = (rect.height + PANGO_SCALE / 2) / PANGO_SCALE; -/* Makes rendering inconsitent with gnome-print and svg renderer */ -/* if (h > pos->h && pos->h >= 0)*/ -/* h = pos->h;*/ - if ((y + h) > prend->h) - h = prend->h - y; + offset = rotation_type == GO_ROTATE_CLOCKWISE ? rect.y : 0.0; + if ((y + h + offset) > prend->h) + h = prend->h - y - offset; if (result != NULL) { result->x = x; @@ -590,18 +758,32 @@ gog_renderer_pixbuf_draw_text (GogRenderer *rend, char const *text, result->h = h; } - if (w <= 0 || h <= 0) + if (w <= 0 || h <= 0) { + if (rotation_type == GO_ROTATE_FREE) + pango_context_set_matrix (pango_layout_get_context (layout), &old_matrix); return; + } - ft_bitmap.rows = h; - ft_bitmap.width = w; - ft_bitmap.pitch = (w+3) & ~3; + switch (rotation_type) { + case GO_ROTATE_CLOCKWISE: + case GO_ROTATE_COUNTERCLOCKWISE: + ft_h = w; + ft_w = h; + break; + default: + ft_h = h; + ft_w = w; + } + + ft_bitmap.rows = ft_h; + ft_bitmap.width = ft_w; + ft_bitmap.pitch = (ft_w + 3) & ~3; ft_bitmap.buffer = g_malloc0 (ft_bitmap.rows * ft_bitmap.pitch); ft_bitmap.num_grays = 256; ft_bitmap.pixel_mode = ft_pixel_mode_grays; ft_bitmap.palette_mode = 0; ft_bitmap.palette = NULL; - pango_ft2_render_layout (&ft_bitmap, layout, -rect.x, -rect.y); + pango_ft2_render_layout (&ft_bitmap, layout, -ft_x, -ft_y); r = UINT_RGBA_R (style->font.color); g = UINT_RGBA_G (style->font.color); @@ -612,12 +794,40 @@ gog_renderer_pixbuf_draw_text (GogRenderer *rend, char const *text, * slow, and I do not feel like leaping through 20 different data * structures to composite 1 byte images, onto rgba */ dst = prend->pixels; - dst += (y * prend->rowstride); - dst += (x + rect.x)* 4; src = ft_bitmap.buffer; - while (h--) { - for (i = w; i-- > 0 ; dst += 4, src++) { + switch (go_geometry_get_rotation_type (rend->cur_style->text_layout.angle * M_PI / 180.0)) { + case GO_ROTATE_FREE: + case GO_ROTATE_NONE: + intercol = 4; + interrow = prend->rowstride - w * 4; + dst += y * prend->rowstride; + dst += (x + ft_x) * 4; + break; + case GO_ROTATE_COUNTERCLOCKWISE: + intercol = - prend->rowstride; + interrow = 4 + h * prend->rowstride; + dst += (y + h - 1) * prend->rowstride; + dst += x * 4; + break; + case GO_ROTATE_CLOCKWISE: + intercol = prend->rowstride; + interrow = - 4 - h * prend->rowstride; + dst += (y + ft_x) * prend->rowstride; + dst += (x + w - 1)* 4; + break; + case GO_ROTATE_UPSIDEDOWN: + intercol = -4; + interrow = - prend->rowstride + w * 4; + dst += (y + h - 1) * prend->rowstride; + dst += (x + w - 1)* 4; + break; + default: + intercol = interrow = 0; /* never reached; silence gcc */ + } + + while (ft_h--) { + for (i = ft_w; i-- > 0 ; dst += intercol, src++) { /* FIXME: Do the libart thing instead of divide by 255 */ alpha = (a * (*src)) / 255; dst[0] = (dst[0] * (255 - alpha) + r * alpha) / 255; @@ -625,11 +835,28 @@ gog_renderer_pixbuf_draw_text (GogRenderer *rend, char const *text, dst[2] = (dst[2] * (255 - alpha) + b * alpha) / 255; dst[3] = (dst[3] * (255 - alpha) + a * alpha) / 255; } - dst += prend->rowstride - w*4; - src += ft_bitmap.pitch - w; + dst += interrow; + src += ft_bitmap.pitch - ft_w; } - g_free (ft_bitmap.buffer); + + if (rotation_type == GO_ROTATE_FREE) + pango_context_set_matrix (pango_layout_get_context (layout), &old_matrix); +} + +static void +gog_renderer_pixbuf_get_text_OBR (GogRenderer *rend, + char const *text, GOGeometryOBR *obr) +{ + PangoRectangle logical; + PangoLayout *layout; + + layout = gog_renderer_pixbuf_get_pango_layout ((GogRendererPixbuf *) rend); + pango_layout_set_text (layout, text, -1); + pango_layout_get_extents (layout, NULL, &logical); + + obr->w = ((double) logical.width + (double) PANGO_SCALE / 2.0) / (double) PANGO_SCALE; + obr->h = ((double) logical.height + (double) PANGO_SCALE / 2.0) /(double) PANGO_SCALE; } static void @@ -662,21 +889,6 @@ gog_renderer_pixbuf_draw_marker (GogRenderer *rend, double x, double y) 255); } -static void -gog_renderer_pixbuf_measure_text (GogRenderer *rend, - char const *text, GogViewRequisition *size) -{ - PangoRectangle logical; - PangoLayout *layout; - - layout = gog_renderer_pixbuf_get_pango_layout ((GogRendererPixbuf *) rend); - pango_layout_set_text (layout, text, -1); - pango_layout_get_pixel_extents (layout, NULL, &logical); - - size->w = logical.width; - size->h = logical.height; -} - static void gog_renderer_pixbuf_pop_style (GogRenderer *rend) { @@ -710,14 +922,16 @@ gog_renderer_pixbuf_class_init (GogRendererClass *rend_klass) gobject_klass->finalize = gog_renderer_pixbuf_finalize; rend_klass->push_style = gog_renderer_pixbuf_push_style; rend_klass->pop_style = gog_renderer_pixbuf_pop_style; - rend_klass->clip_push = gog_renderer_pixbuf_clip_push; - rend_klass->clip_pop = gog_renderer_pixbuf_clip_pop; + rend_klass->push_clip = gog_renderer_pixbuf_push_clip; + rend_klass->pop_clip = gog_renderer_pixbuf_pop_clip; rend_klass->sharp_path = gog_renderer_pixbuf_sharp_path; rend_klass->draw_path = gog_renderer_pixbuf_draw_path; rend_klass->draw_polygon = gog_renderer_pixbuf_draw_polygon; + rend_klass->draw_bezier_path = gog_renderer_pixbuf_draw_bezier_path; + rend_klass->draw_bezier_polygon = gog_renderer_pixbuf_draw_bezier_polygon; rend_klass->draw_text = gog_renderer_pixbuf_draw_text; rend_klass->draw_marker = gog_renderer_pixbuf_draw_marker; - rend_klass->measure_text = gog_renderer_pixbuf_measure_text; + rend_klass->get_text_OBR = gog_renderer_pixbuf_get_text_OBR; rend_klass->line_size = gog_renderer_pixbuf_line_size; } @@ -726,6 +940,7 @@ gog_renderer_pixbuf_init (GogRendererPixbuf *prend) { prend->buffer = NULL; prend->w = prend->h = 1; /* just in case */ + prend->dpi_x = prend->dpi_y = 96.; /* arbitrary just in case */ prend->x_offset = prend->y_offset = 0; prend->pango_layout = NULL; prend->pango_context = NULL; @@ -805,26 +1020,27 @@ gog_renderer_pixbuf_update (GogRendererPixbuf *prend, int w, int h, double zoom) gboolean redraw = TRUE; GogView *view; GogViewAllocation allocation; + GogGraph *graph; g_return_val_if_fail (prend != NULL, FALSE); g_return_val_if_fail (prend->base.view != NULL, FALSE); view = prend->base.view; + graph = GOG_GRAPH (view->model); + gog_graph_force_update (graph); allocation.x = allocation.y = 0.; allocation.w = w; allocation.h = h; if (prend->w != w || prend->h != h) { - double dpi_x, dpi_y; - prend->w = w; prend->h = h; - prend->base.scale_x = w / prend->base.logical_width_pts; - prend->base.scale_y = h / prend->base.logical_height_pts; + prend->base.scale_x = w / graph->width; + prend->base.scale_y = h / graph->height; prend->base.scale = MIN (prend->base.scale_x, prend->base.scale_y); prend->base.zoom = zoom; - dpi_x = gog_renderer_pt2r_x (&prend->base, GO_IN_TO_PT ((double)1.)) + prend->dpi_x = gog_renderer_pt2r_x (&prend->base, GO_IN_TO_PT ((double)1.)) / zoom; - dpi_y = gog_renderer_pt2r_y (&prend->base, GO_IN_TO_PT ((double)1.)) + prend->dpi_y = gog_renderer_pt2r_y (&prend->base, GO_IN_TO_PT ((double)1.)) / zoom; if (prend->buffer != NULL) { @@ -860,6 +1076,8 @@ gog_renderer_pixbuf_update (GogRendererPixbuf *prend, int w, int h, double zoom) if (redraw) { if (prend->buffer == NULL) { + if (prend->w == 0 || prend->h == 0) + return FALSE; prend->buffer = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, prend->w, prend->h); if (prend->buffer == NULL) { diff --git a/lib/goffice/graph/gog-renderer-pixbuf.h b/lib/goffice-0.0.4/goffice/graph/gog-renderer-pixbuf.h similarity index 95% rename from lib/goffice/graph/gog-renderer-pixbuf.h rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-pixbuf.h index 1386eea2b8..9b62590b0e 100644 --- a/lib/goffice/graph/gog-renderer-pixbuf.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-pixbuf.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_RENDERER_PIXBUF_H diff --git a/lib/goffice/graph/gog-renderer-svg.c b/lib/goffice-0.0.4/goffice/graph/gog-renderer-svg.c similarity index 58% rename from lib/goffice/graph/gog-renderer-svg.c rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-svg.c index b192fb5f52..6e2bb5a71e 100644 --- a/lib/goffice/graph/gog-renderer-svg.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-svg.c @@ -15,11 +15,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include +#include #include #include #include @@ -65,6 +66,15 @@ static GObjectClass *parent_klass; static GType gog_renderer_svg_get_type (void); +static void +set_double_prop (xmlNodePtr node, const char *name, double value) +{ + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; + + g_ascii_dtostr (buffer, sizeof (buffer), value); + xmlNewProp (node, CC2XML(name), CC2XML(buffer)); +} + static void gog_renderer_svg_finalize (GObject *obj) { @@ -79,155 +89,101 @@ gog_renderer_svg_finalize (GObject *obj) } static void -gog_renderer_svg_clip_push (GogRenderer *rend, GogRendererClip *clip) +draw_path (ArtVpath const *path, GString *string) { - GogRendererSvg *prend = GOG_RENDERER_SVG (rend); - char *buf; - xmlNodePtr child; - xmlNodePtr node; - char *old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL)); - - prend->clip_counter++; + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; - setlocale (LC_NUMERIC, "C"); - node = xmlNewDocNode (prend->doc, NULL, CC2XML("clipPath"), NULL); - xmlAddChild (prend->defs, node); - buf = g_strdup_printf ("clip%i", prend->clip_counter); - xmlNewProp (node, CC2XML("id"), CC2XML(buf)); - g_free (buf); - child = xmlNewDocNode (prend->doc, NULL, CC2XML("rect"), NULL); - xmlAddChild (node, child); - buf = g_strdup_printf ("%g", clip->area.x); - xmlNewProp (child, CC2XML("x"), CC2XML(buf)); - g_free (buf); - buf = g_strdup_printf ("%g", clip->area.y); - xmlNewProp (child, CC2XML("y"), CC2XML(buf)); - g_free (buf); - buf = g_strdup_printf ("%g", clip->area.w); - xmlNewProp (child, CC2XML("width"), CC2XML(buf)); - g_free (buf); - buf = g_strdup_printf ("%g", clip->area.h); - xmlNewProp (child, CC2XML("height"), CC2XML(buf)); - g_free (buf); - - node = xmlNewDocNode (prend->doc, NULL, CC2XML("g"), NULL); - xmlAddChild (prend->current_node, node); - buf = g_strdup_printf ("url(#clip%i)", prend->clip_counter); - xmlNewProp (node, CC2XML ("clip-path"), CC2XML (buf)); - g_free (buf); - setlocale (LC_NUMERIC, old_num_locale); - g_free (old_num_locale); - - prend->current_node = node; -} - -static void -gog_renderer_svg_clip_pop (GogRenderer *rend, GogRendererClip *clip) -{ - GogRendererSvg *prend = GOG_RENDERER_SVG (rend); - - prend->current_node = prend->current_node->parent; -} - -static void -draw_path (GogRendererSvg *prend, ArtVpath const *path, GString *string) -{ for ( ; path->code != ART_END ; path++) switch (path->code) { case ART_MOVETO_OPEN : case ART_MOVETO : - g_string_append_printf (string, "M%g %g", path->x, path->y); + g_string_append_c (string, 'M'); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y)); break; case ART_LINETO : - g_string_append_printf (string, "L%g %g", path->x, path->y); + g_string_append_c (string, 'L'); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y)); break; default : break; } } +static void +gog_renderer_svg_push_clip (GogRenderer *rend, GogRendererClip *clip) +{ + GogRendererSvg *prend = GOG_RENDERER_SVG (rend); + char *buf; + xmlNodePtr child; + xmlNodePtr node; + GString *string; + + prend->clip_counter++; + + node = xmlNewDocNode (prend->doc, NULL, CC2XML("clipPath"), NULL); + xmlAddChild (prend->defs, node); + + buf = g_strdup_printf ("clip%i", prend->clip_counter); + xmlNewProp (node, CC2XML("id"), CC2XML(buf)); + g_free (buf); + + child = xmlNewChild (node, NULL, CC2XML ("path"), NULL); + string = g_string_new (""); + draw_path (clip->path, string); + xmlNewProp (child, CC2XML ("d"), CC2XML (string->str)); + g_string_free (string, TRUE); + + node = xmlNewDocNode (prend->doc, NULL, CC2XML("g"), NULL); + xmlAddChild (prend->current_node, node); + + buf = g_strdup_printf ("url(#clip%i)", prend->clip_counter); + xmlNewProp (node, CC2XML ("clip-path"), CC2XML (buf)); + g_free (buf); + + prend->current_node = node; +} + +static void +gog_renderer_svg_pop_clip (GogRenderer *rend, GogRendererClip *clip) +{ + GogRendererSvg *prend = GOG_RENDERER_SVG (rend); + + prend->current_node = prend->current_node->parent; +} + static void stroke_dasharray (xmlNodePtr node, ArtVpathDash *dash) { GString *string; + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; int i; if (dash == NULL || dash->n_dash < 1) return; string = g_string_new (""); - for (i = 0; i < dash->n_dash; i++) - g_string_append_printf (string, i == 0 ? "%g" : " %g", dash->dash[i]); + for (i = 0; i < dash->n_dash; i++) { + if (i != 0) g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), dash->dash[i])); + } xmlNewProp (node, CC2XML ("stroke-dasharray"), CC2XML (string->str)); g_string_free (string, TRUE); } -static void -gog_renderer_svg_draw_path (GogRenderer *renderer, ArtVpath const *path, - GogViewAllocation const *bound) -{ - GogRendererSvg *prend = GOG_RENDERER_SVG (renderer); - GogStyle const *style = renderer->cur_style; - xmlNodePtr node; - GString *string; - char *buf; - int opacity; - char *old_num_locale; - - if (style->line.dash_type == GO_LINE_NONE) - return; - - node = xmlNewDocNode (prend->doc, NULL, "path", NULL); - old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL)); - - setlocale (LC_NUMERIC, "C"); - xmlAddChild (prend->current_node, node); - string = g_string_new (""); - draw_path (prend, path, string); - xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); - g_string_free (string, TRUE); - xmlNewProp (node, CC2XML ("fill"), CC2XML ("none")); - buf = g_strdup_printf ("%g", gog_renderer_line_size (renderer, style->line.width)); - xmlNewProp (node, CC2XML ("stroke-width"), CC2XML (buf)); - g_free (buf); - /* TODO: clip dashed lines to prevent possible rsvg crash */ - stroke_dasharray (node, renderer->line_dash); - buf = g_strdup_printf ("#%06x", style->line.color >> 8); - xmlNewProp (node, CC2XML ("stroke"), CC2XML (buf)); - g_free (buf); - opacity = style->line.color & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (node, CC2XML ("stroke-opacity"), CC2XML (buf)); - g_free (buf); - } - setlocale (LC_NUMERIC, old_num_locale); - g_free (old_num_locale); -} +#define SVG_PATTERN_SCALE 2.0 static void -gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, - gboolean narrow, GogViewAllocation const *bound) +fill_properties (GogRenderer *renderer, xmlNodePtr node, gboolean narrow) { GogRendererSvg *prend = GOG_RENDERER_SVG (renderer); GogStyle const *style = renderer->cur_style; gboolean with_outline = (!narrow && style->outline.dash_type != GO_LINE_NONE); - xmlNodePtr node; char *buf, *name, *id; int opacity; - char *old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL)); - - setlocale (LC_NUMERIC, "C"); - if (style->fill.type != GOG_FILL_STYLE_NONE || with_outline) { - GString *string = g_string_new (""); - node = xmlNewDocNode (prend->doc, NULL, "path", NULL); - xmlAddChild (prend->current_node, node); - draw_path (prend, path, string); - g_string_append (string, "z"); - xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); - g_string_free (string, TRUE); - } else - return; if (style->fill.type != GOG_FILL_STYLE_NONE) { @@ -239,14 +195,67 @@ gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, xmlNewProp (node, CC2XML ("fill"), CC2XML (buf)); g_free (buf); opacity = color & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (node, CC2XML ("fill-opacity"), CC2XML (buf)); + if (opacity != 255) + set_double_prop (node, "fill-opacity", (double) opacity / 255.0); + } else { + xmlNodePtr child, pat_node; + id = g_strdup (go_pattern_as_str (style->fill.pattern.pattern)); + name = (char *) g_hash_table_lookup (prend->table, id); + + if (!name) { + double height, width; + char *svg_path = go_pattern_get_svg_path (&style->fill.pattern, + &width, &height); + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; + + if (svg_path == NULL) { + g_free (id); + break; + } + + name = g_strdup (id); + g_hash_table_insert (prend->table, id, name); + pat_node = xmlNewChild (prend->defs, NULL, CC2XML ("pattern"), NULL); + xmlSetProp (pat_node, CC2XML ("x"), CC2XML ("0")); + xmlSetProp (pat_node, CC2XML ("y"), CC2XML ("0")); + set_double_prop (pat_node, "width", width * SVG_PATTERN_SCALE); + set_double_prop (pat_node, "height", height * SVG_PATTERN_SCALE); + xmlSetProp (pat_node, CC2XML ("id"), CC2XML (name)); + xmlSetProp (pat_node, CC2XML ("patternUnits"), CC2XML ("userSpaceOnUse")); + + child = xmlNewChild (pat_node, NULL, CC2XML ("rect"), NULL); + xmlSetProp (child, CC2XML ("x"), CC2XML ("-0.1")); + xmlSetProp (child, CC2XML ("y"), CC2XML ("-0.1")); + set_double_prop (child, "width", width * SVG_PATTERN_SCALE + 0.2); + set_double_prop (child, "height", height * SVG_PATTERN_SCALE + 0.2); + g_ascii_dtostr (buffer, sizeof (buffer), + (double) (style->fill.pattern.back & 0xff) / 255.0); + buf = g_strdup_printf ("stroke:none;fill:#%06x;fill-opacity:%s;", + style->fill.pattern.back >> 8, buffer); + xmlSetProp (child, CC2XML ("style"), CC2XML (buf)); g_free (buf); + + child = xmlNewChild (pat_node, NULL, CC2XML ("path"), NULL); + xmlSetProp (child, CC2XML ("d"), CC2XML (svg_path)); + g_ascii_dtostr (buffer, sizeof (buffer), + (double) (style->fill.pattern.fore & 0xff) / 255.0); + buf = g_strdup_printf ("stroke:none;fill:#%06x;fill-opacity:%s;", + style->fill.pattern.fore >> 8, buffer); + xmlSetProp (child, CC2XML ("style"), CC2XML (buf)); + g_free (buf); + buf = g_strdup_printf ("scale(%g)", SVG_PATTERN_SCALE); + xmlSetProp (child, CC2XML ("transform"), CC2XML (buf)); + g_free (buf); + g_free (svg_path); + } else { + g_free (id); } + buf = g_strdup_printf ("url(#%s)", name); + xmlSetProp (node, CC2XML ("fill"), CC2XML (buf)); + g_free (buf); } break; - } + } case GOG_FILL_STYLE_GRADIENT: id = g_strdup_printf ("g_%x_%x_%x", style->fill.gradient.dir, @@ -302,18 +311,11 @@ gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, break; } xmlNewProp (child, CC2XML ("spreadMethod"), CC2XML (buf)); - buf = g_strdup_printf ("%g", x1); - xmlNewProp (child, CC2XML ("x1"), CC2XML (buf)); - g_free (buf); - buf = g_strdup_printf ("%g", y1); - xmlNewProp (child, CC2XML ("y1"), CC2XML (buf)); - g_free (buf); - buf = g_strdup_printf ("%g", x2); - xmlNewProp (child, CC2XML ("x2"), CC2XML (buf)); - g_free (buf); - buf = g_strdup_printf ("%g", y2); - xmlNewProp (child, CC2XML ("y2"), CC2XML (buf)); - g_free (buf); + set_double_prop (child, "x1", x1); + set_double_prop (child, "y1", y1); + set_double_prop (child, "x2", x2); + set_double_prop (child, "y2", y2); + stop = xmlNewDocNode (prend->doc, NULL, CC2XML ("stop"), NULL); xmlAddChild (child, stop); xmlNewProp (stop, CC2XML ("offset"), CC2XML ("0")); @@ -321,11 +323,9 @@ gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, xmlNewProp (stop, CC2XML ("stop-color"), CC2XML (buf)); g_free (buf); opacity = start & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (stop, CC2XML ("stop-opacity"), CC2XML (buf)); - g_free (buf); - } + if (opacity != 255) + set_double_prop (stop, "stop-opacity", (double) opacity / 255.0); + stop = xmlNewDocNode (prend->doc, NULL, CC2XML ("stop"), NULL); xmlAddChild (child, stop); xmlNewProp (stop, CC2XML ("offset"), CC2XML ("1")); @@ -333,11 +333,8 @@ gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, xmlNewProp (stop, CC2XML ("stop-color"), CC2XML (buf)); g_free (buf); opacity = end & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (stop, CC2XML ("stop-opacity"), CC2XML (buf)); - g_free (buf); - } + if (opacity != 255) + set_double_prop (stop, "stop-opacity", (double) opacity / 255.0); buf = g_strdup_printf ("url(#%s)", name); } else { buf = g_strdup_printf ("url(#%s)", name); @@ -360,22 +357,168 @@ gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, if (with_outline) { /* TODO: clip dashed lines to prevent possible rsvg crash */ stroke_dasharray (node, renderer->outline_dash); - buf = g_strdup_printf ("%g", gog_renderer_line_size (renderer, style->outline.width)); - xmlNewProp (node, CC2XML ("stroke-width"), CC2XML (buf)); - g_free (buf); + set_double_prop (node, "stroke-width", gog_renderer_line_size (renderer, style->outline.width)); buf = g_strdup_printf ("#%06x", style->outline.color >> 8); xmlNewProp (node, CC2XML ("stroke"), CC2XML (buf)); g_free (buf); opacity = style->outline.color & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (node, CC2XML ("stroke-opacity"), CC2XML (buf)); - g_free (buf); - } + if (opacity != 255) + set_double_prop (node, "stroke-opacity", (double) opacity / 255.0); } else xmlNewProp (node, CC2XML ("stroke"), CC2XML ("none")); - setlocale (LC_NUMERIC, old_num_locale); - g_free (old_num_locale); +} + +static void +gog_renderer_svg_draw_path (GogRenderer *renderer, ArtVpath const *path) +{ + GogRendererSvg *prend = GOG_RENDERER_SVG (renderer); + GogStyle const *style = renderer->cur_style; + xmlNodePtr node; + GString *string; + char *buf; + int opacity; + + if (style->line.dash_type == GO_LINE_NONE) + return; + + node = xmlNewDocNode (prend->doc, NULL, "path", NULL); + + xmlAddChild (prend->current_node, node); + + string = g_string_new (""); + draw_path (path, string); + xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); + g_string_free (string, TRUE); + + xmlNewProp (node, CC2XML ("fill"), CC2XML ("none")); + + set_double_prop (node, "stroke-width", gog_renderer_line_size (renderer, style->line.width)); + stroke_dasharray (node, renderer->line_dash); + + buf = g_strdup_printf ("#%06x", style->line.color >> 8); + xmlNewProp (node, CC2XML ("stroke"), CC2XML (buf)); + g_free (buf); + + opacity = style->line.color & 0xff; + if (opacity != 255) + set_double_prop (node, "stroke-opacity", (double) opacity / 255.0); +} + +static void +gog_renderer_svg_draw_polygon (GogRenderer *renderer, ArtVpath const *path, + gboolean narrow) +{ + GogRendererSvg *prend = GOG_RENDERER_SVG (renderer); + GogStyle const *style = renderer->cur_style; + gboolean with_outline = (!narrow && style->outline.dash_type != GO_LINE_NONE); + xmlNodePtr node; + + if (style->fill.type != GOG_FILL_STYLE_NONE || with_outline) { + GString *string = g_string_new (""); + node = xmlNewDocNode (prend->doc, NULL, "path", NULL); + xmlAddChild (prend->current_node, node); + draw_path (path, string); + g_string_append_c (string, 'z'); + xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); + g_string_free (string, TRUE); + } else + return; + + fill_properties (renderer, node, narrow); +} + +static void +draw_bezier_path (ArtBpath const *path, GString *string) +{ + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; + + for ( ; path->code != ART_END ; path++) + switch (path->code) { + case ART_MOVETO_OPEN : + case ART_MOVETO : + g_string_append_c (string, 'M'); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x3)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y3)); + break; + case ART_LINETO : + g_string_append_c (string, 'L'); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x3)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y3)); + break; + case ART_CURVETO : + g_string_append_c (string, 'C'); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x1)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y1)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x2)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y2)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->x3)); + g_string_append_c (string, ' '); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), path->y3)); + break; + default : + break; + } +} + +static void +gog_renderer_svg_draw_bezier_path (GogRenderer *rend, ArtBpath const *path) +{ + GogRendererSvg *prend = GOG_RENDERER_SVG (rend); + GogStyle const *style = rend->cur_style; + xmlNodePtr node; + GString *string; + char *buf; + int opacity; + + if (style->line.dash_type == GO_LINE_NONE) + return; + + node = xmlNewDocNode (prend->doc, NULL, "path", NULL); + + xmlAddChild (prend->current_node, node); + string = g_string_new (""); + draw_bezier_path (path, string); + + xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); + g_string_free (string, TRUE); + xmlNewProp (node, CC2XML ("fill"), CC2XML ("none")); + set_double_prop (node, "stroke-width", gog_renderer_line_size (rend, style->line.width)); + stroke_dasharray (node, rend->line_dash); + buf = g_strdup_printf ("#%06x", style->line.color >> 8); + xmlNewProp (node, CC2XML ("stroke"), CC2XML (buf)); + g_free (buf); + opacity = style->line.color & 0xff; + if (opacity != 255) + set_double_prop (node, "stroke-opacity", (double) opacity / 255.0); +} + +static void +gog_renderer_svg_draw_bezier_polygon (GogRenderer *renderer, ArtBpath const *path, + gboolean narrow) +{ + GogRendererSvg *prend = GOG_RENDERER_SVG (renderer); + GogStyle const *style = renderer->cur_style; + gboolean with_outline = (!narrow && style->outline.dash_type != GO_LINE_NONE); + xmlNodePtr node; + + if (style->fill.type != GOG_FILL_STYLE_NONE || with_outline) { + GString *string = g_string_new (""); + node = xmlNewDocNode (prend->doc, NULL, "path", NULL); + xmlAddChild (prend->current_node, node); + draw_bezier_path (path, string); + g_string_append_c (string, 'z'); + xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); + g_string_free (string, TRUE); + } else + return; + + fill_properties (renderer, node, narrow); } static void @@ -391,9 +534,7 @@ gog_renderer_svg_draw_marker (GogRenderer *rend, double x, double y) GString *string; char *buf; int opacity; - char *old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL)); - setlocale (LC_NUMERIC, "C"); g_return_if_fail (marker != NULL); go_marker_get_paths (marker, &outline_path_raw, &fill_path_raw); @@ -413,8 +554,8 @@ gog_renderer_svg_draw_marker (GogRenderer *rend, double x, double y) node = xmlNewDocNode (prend->doc, NULL, "path", NULL); xmlAddChild (prend->current_node, node); string = g_string_new (""); - draw_path (prend, fill_path, string); - g_string_append (string, "z"); + draw_path (fill_path, string); + g_string_append_c (string, 'z'); xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); g_string_free (string, TRUE); buf = g_strdup_printf ("#%06x", marker->fill_color >> 8); @@ -422,38 +563,29 @@ gog_renderer_svg_draw_marker (GogRenderer *rend, double x, double y) g_free (buf); xmlNewProp (node, CC2XML ("stroke"), CC2XML ("none")); opacity = marker->fill_color & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (node, CC2XML ("fill-opacity"), CC2XML (buf)); - g_free (buf); - } + if (opacity != 255) + set_double_prop (node, "fill-opacity", (double) opacity / 255.0); node = xmlNewDocNode (prend->doc, NULL, "path", NULL); xmlAddChild (prend->current_node, node); string = g_string_new (""); - draw_path (prend, outline_path, string); - g_string_append (string, "z"); + draw_path (outline_path, string); + g_string_append_c (string, 'z'); xmlNewProp (node, CC2XML ("d"), CC2XML (string->str)); g_string_free (string, TRUE); xmlNewProp (node, CC2XML ("fill"), CC2XML ("none")); xmlNewProp (node, CC2XML ("stroke-linecap"), CC2XML ("round")); - buf = g_strdup_printf ("%g", gog_renderer_line_size (rend, go_marker_get_outline_width (marker))); - xmlNewProp (node, CC2XML ("stroke-width"), CC2XML (buf)); - g_free (buf); + set_double_prop (node, "stroke-width", + gog_renderer_line_size (rend, go_marker_get_outline_width (marker))); buf = g_strdup_printf ("#%06x", marker->outline_color >> 8); xmlNewProp (node, CC2XML ("stroke"), CC2XML (buf)); g_free (buf); opacity = marker->outline_color & 0xff; - if (opacity != 255) { - buf = g_strdup_printf ("%g", (double) opacity / 255.); - xmlNewProp (node, CC2XML ("stroke-opacity"), CC2XML (buf)); - g_free (buf); - } + if (opacity != 255) + set_double_prop (node, "stroke-opacity", (double) opacity / 255.0); g_free (outline_path); g_free (fill_path); - setlocale (LC_NUMERIC, old_num_locale); - g_free (old_num_locale); } static PangoLayout * @@ -489,15 +621,15 @@ make_layout (GogRenderer *rend, char const *text) } static void -gog_renderer_svg_measure_text (GogRenderer *rend, - char const *text, GogViewRequisition *size) +gog_renderer_svg_get_text_OBR (GogRenderer *rend, char const *text, GOGeometryOBR *obr) { PangoRectangle rect; PangoLayout *layout = make_layout (rend, text); + pango_layout_get_pixel_extents (layout, NULL, &rect); g_object_unref (layout); - size->w = gog_renderer_pt2r (rend, rect.width); - size->h = gog_renderer_pt2r (rend, rect.height); + obr->w = gog_renderer_pt2r (rend, rect.width); + obr->h = gog_renderer_pt2r (rend, rect.height); } static void @@ -506,56 +638,71 @@ gog_renderer_svg_draw_text (GogRenderer *rend, char const *text, GogViewAllocation *result) { GogRendererSvg *prend = GOG_RENDERER_SVG (rend); - xmlNodePtr node; - char *buf; - double x, y; - int baseline; - char *old_num_locale; + GogStyle const *style = rend->cur_style; PangoRectangle rect; - PangoLayout* layout = make_layout (rend, "lp"); - PangoFontDescription const *fd = rend->cur_style->font.font->desc; + PangoLayout* layout = make_layout (rend, text); + PangoFontDescription const *fd = style->font.font->desc; PangoLayoutIter* iter =pango_layout_get_iter(layout); - pango_layout_get_pixel_extents (layout, NULL, &rect); - x = pos->x; - /* adjust to the base line */ - y = pos->y; - baseline = pango_layout_iter_get_baseline(iter); - pango_layout_iter_get_run_extents(iter, NULL, &rect); - y += gog_renderer_pt2r(rend, (baseline - rect.y) / PANGO_SCALE); + GOGeometryOBR obr; + GOGeometryAABR aabr; + GString *string; + xmlNodePtr node; + char buffer[G_ASCII_DTOSTR_BUF_SIZE]; + char *buf; + double y_offset; + int baseline; + + baseline = pango_layout_iter_get_baseline (iter); + pango_layout_iter_get_run_extents (iter, NULL, &rect); pango_layout_iter_free(iter); g_object_unref (layout); + obr.w = gog_renderer_pt2r (rend, rect.width / PANGO_SCALE); + obr.h = gog_renderer_pt2r (rend, rect.height / PANGO_SCALE); + obr.alpha = rend->cur_style->text_layout.angle * M_PI / 180.0; + obr.x = pos->x; + obr.y = pos->y; + go_geometry_OBR_to_AABR (&obr, &aabr); + y_offset = gog_renderer_pt2r(rend, (baseline - rect.y) / PANGO_SCALE) - obr.h / 2.0; switch (anchor) { - case GTK_ANCHOR_CENTER : case GTK_ANCHOR_E : case GTK_ANCHOR_W : - y -= gog_renderer_pt2r(rend, (double) (rect.height / 2) / PANGO_SCALE); - break; - case GTK_ANCHOR_SE : case GTK_ANCHOR_S : case GTK_ANCHOR_SW : - y -= gog_renderer_pt2r(rend, (double)rect.height / PANGO_SCALE); - break; - default : - break; + case GTK_ANCHOR_NW: case GTK_ANCHOR_W: case GTK_ANCHOR_SW: + obr.x += aabr.w / 2.0; + break; + case GTK_ANCHOR_NE: case GTK_ANCHOR_E: case GTK_ANCHOR_SE: + obr.x -= aabr.w / 2.0; + default: + break; } - + + switch (anchor) { + case GTK_ANCHOR_NW: case GTK_ANCHOR_N: case GTK_ANCHOR_NE: + obr.y += aabr.h / 2.0; + break; + case GTK_ANCHOR_SW: case GTK_ANCHOR_S: case GTK_ANCHOR_SE: + obr.y -= aabr.h / 2.0; + default: + break; + } + node = xmlNewDocNode (prend->doc, NULL, "text", NULL); xmlNodeSetContent (node, CC2XML (text)); - old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL)); - setlocale (LC_NUMERIC, "C"); xmlAddChild (prend->current_node, node); - buf = g_strdup_printf ("%g", x); - xmlNewProp (node, CC2XML ("x"), CC2XML (buf)); + set_double_prop (node, "x", obr.x); + set_double_prop (node, "y", obr.y + y_offset); + xmlNewProp (node, CC2XML ("text-anchor"), CC2XML ("middle")); + string = g_string_new ("rotate("); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), -rend->cur_style->text_layout.angle)); + g_string_append_c (string, ','); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), obr.x)); + g_string_append_c (string, ','); + g_string_append (string, g_ascii_dtostr (buffer, sizeof (buffer), obr.y)); + g_string_append_c (string, ')'); + xmlNewProp (node, CC2XML ("transform"), CC2XML (string->str)); + g_string_free (string, TRUE); + + buf = g_strdup_printf ("#%06x", style->font.color >> 8); + xmlNewProp (node, CC2XML ("fill"), CC2XML (buf)); g_free (buf); - buf = g_strdup_printf ("%g", y); - xmlNewProp (node, CC2XML ("y"), CC2XML (buf)); - g_free (buf); - switch (anchor) { - case GTK_ANCHOR_CENTER : case GTK_ANCHOR_N : case GTK_ANCHOR_S : - xmlNewProp (node, CC2XML ("text-anchor"), CC2XML ("middle")); - break; - case GTK_ANCHOR_NE : case GTK_ANCHOR_SE : case GTK_ANCHOR_E : - xmlNewProp (node, CC2XML ("text-anchor"), CC2XML ("end")); - break; - default : break; - } xmlNewProp (node, CC2XML ("font-family"), CC2XML (pango_font_description_get_family (fd))); buf = g_strdup_printf ("%d", (int)(rint (gog_renderer_pt2r(rend, pango_font_description_get_size (fd) / PANGO_SCALE)))); xmlNewProp (node, CC2XML ("font-size"), CC2XML (buf)); @@ -580,8 +727,6 @@ gog_renderer_svg_draw_text (GogRenderer *rend, char const *text, break; default: break; } - setlocale (LC_NUMERIC, old_num_locale); - g_free (old_num_locale); } static void @@ -591,13 +736,15 @@ gog_renderer_svg_class_init (GogRendererClass *rend_klass) parent_klass = g_type_class_peek_parent (rend_klass); gobject_klass->finalize = gog_renderer_svg_finalize; - rend_klass->clip_push = gog_renderer_svg_clip_push; - rend_klass->clip_pop = gog_renderer_svg_clip_pop; + rend_klass->push_clip = gog_renderer_svg_push_clip; + rend_klass->pop_clip = gog_renderer_svg_pop_clip; rend_klass->draw_path = gog_renderer_svg_draw_path; rend_klass->draw_polygon = gog_renderer_svg_draw_polygon; + rend_klass->draw_bezier_path = gog_renderer_svg_draw_bezier_path; + rend_klass->draw_bezier_polygon = gog_renderer_svg_draw_bezier_polygon; rend_klass->draw_text = gog_renderer_svg_draw_text; rend_klass->draw_marker = gog_renderer_svg_draw_marker; - rend_klass->measure_text = gog_renderer_svg_measure_text; + rend_klass->get_text_OBR = gog_renderer_svg_get_text_OBR; } static GSF_CLASS (GogRendererSvg, gog_renderer_svg, @@ -623,9 +770,8 @@ gog_graph_export_to_svg (GogGraph *graph, GsfOutput *output, GogRendererSvg *prend; xmlNsPtr namespace; gboolean success = TRUE; - char *buf; - char *old_num_locale = g_strdup (setlocale (LC_NUMERIC, NULL)); - setlocale (LC_NUMERIC, "C"); + + gog_graph_force_update (graph); prend = g_object_new (GOG_RENDERER_SVG_TYPE, "model", graph, @@ -649,14 +795,8 @@ gog_graph_export_to_svg (GogGraph *graph, GsfOutput *output, namespace = xmlNewNs (prend->doc->children, CC2XML ("http://www.w3.org/1999/xlink"), CC2XML ("xlink")); - buf = g_strdup_printf ("%g", width); - xmlNewProp (prend->doc->children, CC2XML ("width"), CC2XML (buf)); - g_free (buf); - buf = g_strdup_printf ("%g", height); - xmlNewProp (prend->doc->children, CC2XML ("height"), CC2XML (buf)); - g_free (buf); - setlocale (LC_NUMERIC, old_num_locale); - g_free (old_num_locale); + set_double_prop (prend->doc->children, "width", width); + set_double_prop (prend->doc->children, "height", height); prend->clip_counter = 0; allocation.x = 0.; diff --git a/lib/goffice/graph/gog-renderer-svg.h b/lib/goffice-0.0.4/goffice/graph/gog-renderer-svg.h similarity index 93% rename from lib/goffice/graph/gog-renderer-svg.h rename to lib/goffice-0.0.4/goffice/graph/gog-renderer-svg.h index 37163cce4b..4641204952 100644 --- a/lib/goffice/graph/gog-renderer-svg.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer-svg.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_RENDERER_SVG_H diff --git a/lib/goffice/graph/gog-renderer.c b/lib/goffice-0.0.4/goffice/graph/gog-renderer.c similarity index 66% rename from lib/goffice/graph/gog-renderer.c rename to lib/goffice-0.0.4/goffice/graph/gog-renderer.c index 89a02d303c..2e930be482 100644 --- a/lib/goffice/graph/gog-renderer.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -29,7 +29,6 @@ #include #include -#include /* We need to define an hair line width for the svg and gnome_print renderer. * 0.24 pt is the dot size of a 300 dpi printer, if the plot is printed at scale 1:1 */ @@ -39,8 +38,6 @@ enum { RENDERER_PROP_0, RENDERER_PROP_MODEL, RENDERER_PROP_VIEW, - RENDERER_PROP_LOGICAL_WIDTH_PTS, - RENDERER_PROP_LOGICAL_HEIGHT_PTS, RENDERER_PROP_ZOOM }; enum { @@ -105,13 +102,6 @@ gog_renderer_set_property (GObject *obj, guint param_id, NULL); gog_renderer_request_update (rend); break; - case RENDERER_PROP_LOGICAL_WIDTH_PTS: - rend->logical_width_pts = g_value_get_double (value); - break; - - case RENDERER_PROP_LOGICAL_HEIGHT_PTS: - rend->logical_height_pts = g_value_get_double (value); - break; case RENDERER_PROP_ZOOM: rend->zoom = g_value_get_double (value); @@ -135,12 +125,6 @@ gog_renderer_get_property (GObject *obj, guint param_id, case RENDERER_PROP_VIEW: g_value_set_object (value, rend->view); break; - case RENDERER_PROP_LOGICAL_WIDTH_PTS: - g_value_set_double (value, rend->logical_width_pts); - break; - case RENDERER_PROP_LOGICAL_HEIGHT_PTS: - g_value_set_double (value, rend->logical_height_pts); - break; case RENDERER_PROP_ZOOM: g_value_set_double (value, rend->zoom); break; @@ -233,37 +217,38 @@ gog_renderer_pop_style (GogRenderer *rend) } /** - * gog_renderer_clip_push : - * @rend : #GogRenderer - * @region: #GogViewAllocation + * gog_renderer_push_clip : + * @rend : #GogRenderer + * @clip_path : #ArtVpath array * - * region defines the current clipping region. + * Defines the current clipping region. **/ void -gog_renderer_clip_push (GogRenderer *rend, GogViewAllocation const *region) +gog_renderer_push_clip (GogRenderer *rend, ArtVpath *clip_path) { GogRendererClip *clip; GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); g_return_if_fail (klass != NULL); + g_return_if_fail (clip_path != NULL); clip = g_new (GogRendererClip, 1); - clip->area = *region; + clip->path = clip_path; rend->clip_stack = g_slist_prepend (rend->clip_stack, clip); rend->cur_clip = clip; - (klass->clip_push) (rend, clip); + (klass->push_clip) (rend, clip); } /** - * gog_renderer_clip_pop : + * gog_renderer_pop_clip : * @rend : #GogRenderer * * End the current clipping. **/ void -gog_renderer_clip_pop (GogRenderer *rend) +gog_renderer_pop_clip (GogRenderer *rend) { GogRendererClip *clip; GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); @@ -273,8 +258,9 @@ gog_renderer_clip_pop (GogRenderer *rend) clip = (GogRendererClip *) rend->clip_stack->data; - (klass->clip_pop) (rend, clip); + (klass->pop_clip) (rend, clip); + g_free (clip->path); g_free (clip); rend->clip_stack = g_slist_delete_link (rend->clip_stack, rend->clip_stack); @@ -285,17 +271,174 @@ gog_renderer_clip_pop (GogRenderer *rend) } /** - * gog_renderer_draw_sharp_polygon : + * gog_renderer_get_rectangle_vpath : + * @x : upper left corner + * @y : upper left corner + * @width : rectangle width + * @height : rectangle height + * + * a utility routine to build a rectangle path. + **/ +ArtVpath * +gog_renderer_get_rectangle_vpath (GogViewAllocation const *rect) +{ + ArtVpath *path; + + path = g_new (ArtVpath, 6); + + path[0].x = path[3].x = path[4].x = rect->x; + path[1].x = path[2].x = rect->x + rect->w; + path[0].y = path[1].y = path[4].y = rect->y; + path[2].y = path[3].y = rect->y + rect->h; + path[0].code = ART_MOVETO; + path[1].code = path[2].code = path[3].code = path[4].code = ART_LINETO; + path[5].code = ART_END; + + return path; +} + +/** + * gog_renderer_get_ring_wedge_vpath : + * @x : center x coordinate + * @y : center y coordinate + * @width : x radius + * @height : y radius + * @th0 : start arc angle + * @th1 : stop arc angle + * + * a utility routine to build a ring wedge path. + **/ +ArtBpath * +gog_renderer_get_ring_wedge_bpath (double cx, double cy, + double rx_out, double ry_out, + double rx_in, double ry_in, + double th0, double th1) +{ + ArtBpath *path; + double th_arc, th_out, th_in, th_delta, t; + int i, n_segs; + gboolean fill = rx_in >= 0.0 && ry_in >= 0.0; + gboolean draw_in, ellipse = FALSE; + + if (rx_out <= 0.0 || ry_out <= 0.0 || rx_out < rx_in || ry_out < ry_in) + return NULL; + + draw_in = fill && (rx_in > rx_out / 1E6) && (ry_in > ry_out / 1E6); + + if (th1 < th0) { t = th1; th1 = th0; th0 = t; } + if (go_add_epsilon (th1 - th0) >= 2 * M_PI) { + ellipse = TRUE; + th1 = th0 + 2 * M_PI; + } + + th_arc = th1 - th0; + n_segs = ceil (fabs (th_arc / (M_PI * 0.5 + 0.001))); + + path = g_new (ArtBpath, (1 + n_segs) * (draw_in ? 2 : 1) + (fill ? (draw_in ? 2 : 3) : 1)); + + path[0].x3 = cx + rx_out * cos (th1); + path[0].y3 = cy + ry_out * sin (th1); + path[0].code = ART_MOVETO; + + if (fill && !ellipse) { + path[n_segs + 1].x3 = cx + rx_in * cos (th0); + path[n_segs + 1].y3 = cy + ry_in * sin (th0); + path[n_segs + 1].code = ART_LINETO; + if (draw_in) { + /* Ring wedge */ + path[2 * n_segs + 2].x3 = path[0].x3; + path[2 * n_segs + 2].y3 = path[0].y3; + path[2 * n_segs + 2].code = ART_LINETO; + path[2 * n_segs + 3].code = ART_END; + } else { + /* Pie wedge */ + path[n_segs + 1].x3 = cx; + path[n_segs + 1].y3 = cy; + path[n_segs + 1].code = ART_LINETO; + path[n_segs + 2].x3 = path[0].x3; + path[n_segs + 2].y3 = path[0].y3; + path[n_segs + 2].code = ART_LINETO; + path[n_segs + 3].code = ART_END; + } + } else + /* Arc */ + path[n_segs + 1].code = ART_END; + + th_delta = th_arc / n_segs; + t = - (8.0 / 3.0) * sin (th_delta * 0.25) * sin (th_delta * 0.25) / sin (th_delta * 0.5); + th_out = th1; + th_in = th0; + for (i = 1; i <= n_segs; i++) { + path[i].x1 = cx + rx_out * (cos (th_out) - t * sin (th_out)); + path[i].y1 = cy + ry_out * (sin (th_out) + t * cos (th_out)); + path[i].x3 = cx + rx_out * cos (th_out - th_delta); + path[i].y3 = cy + ry_out * sin (th_out - th_delta); + path[i].x2 = path[i].x3 + rx_out * t * sin (th_out - th_delta); + path[i].y2 = path[i].y3 - ry_out * t * cos (th_out - th_delta); + path[i].code = ART_CURVETO; + th_out -= th_delta; + if (draw_in) { + path[i+n_segs+1].x1 = cx + rx_in * (cos (th_in) - t * sin (th_in)); + path[i+n_segs+1].y1 = cy + ry_in * (sin (th_in) + t * cos (th_in)); + path[i+n_segs+1].x3 = cx + rx_in * cos (th_in + th_delta); + path[i+n_segs+1].y3 = cy + ry_in * sin (th_in + th_delta); + path[i+n_segs+1].x2 = path[i+n_segs+1].x3 + rx_in * t * sin (th_in + th_delta); + path[i+n_segs+1].y2 = path[i+n_segs+1].y3 - ry_in * t * cos (th_in + th_delta); + path[i+n_segs+1].code = ART_CURVETO; + th_in += th_delta; + } + } + return path; +} + +/** + * gog_renderer_draw_ring_wedge : + * @renderer : #GogRenderer + * @cx : center x coordinate + * @cy : center y coordinate + * @rx : x radius + * @ry : y radius + * @th0 : start arc angle + * @th1 : stop arc angle + * + * a utility routine to draw an arc. + **/ + +void +gog_renderer_draw_ring_wedge (GogRenderer *rend, double cx, double cy, + double rx_out, double ry_out, + double rx_in, double ry_in, + double th0, double th1, + gboolean narrow) +{ + GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); + ArtBpath *path; + + g_return_if_fail (klass != NULL); + g_return_if_fail (rend->cur_style != NULL); + + path = gog_renderer_get_ring_wedge_bpath (cx, cy, rx_out, ry_out, rx_in, ry_in, th0, th1); + if (path == NULL) + return; + + if (rx_in >= 0.0 && ry_in >= 0.0) + (klass->draw_bezier_polygon) (rend, path, narrow); + else + (klass->draw_bezier_path) (rend, path); + + g_free (path); +} + +/** + * gog_renderer_draw_sharp_path : * @rend : #GogRenderer * @path : #ArtVpath - * @bound : #GogViewAllocation optional clip * * Draws @path using the outline elements of the current style, * trying to make line with sharp edge. **/ void -gog_renderer_draw_sharp_path (GogRenderer *rend, ArtVpath *path, - GogViewAllocation const *bound) +gog_renderer_draw_sharp_path (GogRenderer *rend, ArtVpath *path) { GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); @@ -307,27 +450,25 @@ gog_renderer_draw_sharp_path (GogRenderer *rend, ArtVpath *path, gog_renderer_line_size (rend, rend->cur_style->line.width)); } - (klass->draw_path) (rend, path, bound); + (klass->draw_path) (rend, path); } /** - * gog_renderer_draw_polygon : + * gog_renderer_draw_path : * @rend : #GogRenderer * @path : #ArtVpath - * @bound : #GogViewAllocation optional clip * * Draws @path using the outline elements of the current style. **/ void -gog_renderer_draw_path (GogRenderer *rend, ArtVpath const *path, - GogViewAllocation const *bound) +gog_renderer_draw_path (GogRenderer *rend, ArtVpath const *path) { GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); g_return_if_fail (klass != NULL); g_return_if_fail (rend->cur_style != NULL); - (klass->draw_path) (rend, path, bound); + (klass->draw_path) (rend, path); } /** @@ -335,15 +476,13 @@ gog_renderer_draw_path (GogRenderer *rend, ArtVpath const *path, * @rend : #GogRenderer * @path : #ArtVpath * @narrow : if TRUE skip any outline the current style specifies. - * @bound : #GogViewAllocation optional clip * * Draws @path and fills it with the fill elements of the current style, * trying to draw line with sharp edge. * If @narrow is false it alos outlines it using the outline elements. **/ void -gog_renderer_draw_sharp_polygon (GogRenderer *rend, ArtVpath *path, gboolean narrow, - GogViewAllocation const *bound) +gog_renderer_draw_sharp_polygon (GogRenderer *rend, ArtVpath *path, gboolean narrow) { GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); @@ -355,7 +494,7 @@ gog_renderer_draw_sharp_polygon (GogRenderer *rend, ArtVpath *path, gboolean nar gog_renderer_line_size (rend, rend->cur_style->outline.width)); } - (klass->draw_polygon) (rend, path, narrow, bound); + (klass->draw_polygon) (rend, path, narrow); } /** @@ -363,21 +502,38 @@ gog_renderer_draw_sharp_polygon (GogRenderer *rend, ArtVpath *path, gboolean nar * @rend : #GogRenderer * @path : #ArtVpath * @narrow : if TRUE skip any outline the current style specifies. - * @bound : #GogViewAllocation optional clip * * Draws @path and fills it with the fill elements of the current style. * If @narrow is false it alos outlines it using the outline elements. **/ void -gog_renderer_draw_polygon (GogRenderer *rend, ArtVpath const *path, gboolean narrow, - GogViewAllocation const *bound) +gog_renderer_draw_polygon (GogRenderer *rend, ArtVpath const *path, gboolean narrow) { GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); g_return_if_fail (klass != NULL); g_return_if_fail (rend->cur_style != NULL); - (klass->draw_polygon) (rend, path, narrow, bound); + (klass->draw_polygon) (rend, path, narrow); +} + + +/** + * gog_renderer_draw_bezier_path : + * @rend : #GogRenderer + * @path : #ArtBpath + * + * Draws @path using the outline elements of the current style. + **/ +void +gog_renderer_draw_bezier_path (GogRenderer *rend, ArtBpath const *path) +{ + GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); + + g_return_if_fail (klass != NULL); + g_return_if_fail (rend->cur_style != NULL); + + (klass->draw_bezier_path) (rend, path); } /** @@ -433,34 +589,52 @@ gog_renderer_draw_marker (GogRenderer *rend, double x, double y) } /** - * gog_renderer_measure_text : + * gog_renderer_get_text_OBR : * @rend : #GogRenderer * @text : the string to draw - * @size : #GogViewRequisition to store the size of @text. + * @obr : #GOGeometryOBR to store the Object Bounding Rectangle of @text. **/ void -gog_renderer_measure_text (GogRenderer *rend, - char const *text, GogViewRequisition *size) +gog_renderer_get_text_OBR (GogRenderer *rend, char const *text, GOGeometryOBR *obr) { GogRendererClass *klass = GOG_RENDERER_GET_CLASS (rend); g_return_if_fail (klass != NULL); g_return_if_fail (rend->cur_style != NULL); g_return_if_fail (text != NULL); + g_return_if_fail (obr != NULL); + obr->x = obr->y = 0; if (*text == '\0') { /* Make sure invisible things don't skew size */ - size->w = size->h = 0; + obr->w = obr->h = 0; return; } - (klass->measure_text) (rend, text, size); + (klass->get_text_OBR) (rend, text, obr); /* Make sure invisible things don't skew size */ - if (size->w == 0) - size->h = 0; - else if (size->h == 0) - size->w = 0; + if (obr->w == 0) + obr->h = 0; + else if (obr->h == 0) + obr->w = 0; + + obr->alpha = rend->cur_style->text_layout.angle * M_PI / 180.0; +} + +/** + * gog_renderer_get_text_AABR : + * @rend : #GogRenderer + * @text : the string to draw + * @aabr : #GOGeometryAABR to store the Axis Aligned Bounding Rectangle of @text. + **/ +void +gog_renderer_get_text_AABR (GogRenderer *rend, char const *text, GOGeometryAABR *aabr) +{ + GOGeometryOBR obr; + + gog_renderer_get_text_OBR (rend, text, &obr); + go_geometry_OBR_to_AABR (&obr, aabr); } static void @@ -498,14 +672,6 @@ gog_renderer_class_init (GogRendererClass *renderer_klass) g_param_spec_object ("view", "view", "the GogView this renderer is displaying", GOG_VIEW_TYPE, G_PARAM_READABLE)); - g_object_class_install_property (gobject_klass, RENDERER_PROP_LOGICAL_WIDTH_PTS, - g_param_spec_double ("logical_width_pts", "Logical Width Pts", - "Logical width of the drawing area in pts", - 0, G_MAXDOUBLE, 0, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_klass, RENDERER_PROP_LOGICAL_HEIGHT_PTS, - g_param_spec_double ("logical_height_pts", "Logical Height Pts", - "Logical height of the drawing area in pts", - 0, G_MAXDOUBLE, 0, G_PARAM_READWRITE)); g_object_class_install_property (gobject_klass, RENDERER_PROP_ZOOM, g_param_spec_double ("zoom", "zoom Height Pts", "global scale factor", @@ -533,8 +699,6 @@ gog_renderer_init (GogRenderer *rend) rend->cur_style = NULL; rend->style_stack = NULL; rend->zoom = rend->scale = rend->scale_x = rend->scale_y = 1.; - rend->logical_width_pts = GO_CM_TO_PT ((double)12); - rend->logical_height_pts = GO_CM_TO_PT ((double)8); rend->font_watcher = g_cclosure_new_swap (G_CALLBACK (cb_font_removed), rend, NULL); go_font_cache_register (rend->font_watcher); @@ -548,13 +712,11 @@ GSF_CLASS (GogRenderer, gog_renderer, * gog_renderer_draw_rectangle : * @renderer : #GogRenderer * @rect : #GogViewAllocation - * @bound : #GogViewAllocation optional clip * * A utility routine to build a vpath in @rect. **/ static void -draw_rectangle (GogRenderer *rend, GogViewAllocation const *rect, - GogViewAllocation const *bound, gboolean sharp) +draw_rectangle (GogRenderer *rend, GogViewAllocation const *rect, gboolean sharp) { gboolean const narrow = (rect->w < 3.) || (rect->h < 3.); double o, o_2; @@ -577,23 +739,21 @@ draw_rectangle (GogRenderer *rend, GogViewAllocation const *rect, path[1].y = path[2].y = path[0].y + rect->h - o; if (sharp) - gog_renderer_draw_sharp_polygon (rend, path, narrow, bound); + gog_renderer_draw_sharp_polygon (rend, path, narrow); else - gog_renderer_draw_polygon (rend, path, narrow, bound); + gog_renderer_draw_polygon (rend, path, narrow); } void -gog_renderer_draw_sharp_rectangle (GogRenderer *rend, GogViewAllocation const *rect, - GogViewAllocation const *bound) +gog_renderer_draw_sharp_rectangle (GogRenderer *rend, GogViewAllocation const *rect) { - draw_rectangle (rend, rect, bound, TRUE); + draw_rectangle (rend, rect, TRUE); } void -gog_renderer_draw_rectangle (GogRenderer *rend, GogViewAllocation const *rect, - GogViewAllocation const *bound) +gog_renderer_draw_rectangle (GogRenderer *rend, GogViewAllocation const *rect) { - draw_rectangle (rend, rect, bound, FALSE); + draw_rectangle (rend, rect, FALSE); } double @@ -626,4 +786,3 @@ gog_renderer_pt2r (GogRenderer const *rend, double d) { return d * rend->scale; } - diff --git a/lib/goffice/graph/gog-renderer.h b/lib/goffice-0.0.4/goffice/graph/gog-renderer.h similarity index 59% rename from lib/goffice/graph/gog-renderer.h rename to lib/goffice-0.0.4/goffice/graph/gog-renderer.h index cc78e0dd81..89542ad29e 100644 --- a/lib/goffice/graph/gog-renderer.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-renderer.h @@ -15,17 +15,20 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_RENDERER_H #define GOG_RENDERER_H #include +#include #include #include #include +G_BEGIN_DECLS + #define GOG_RENDERER_TYPE (gog_renderer_get_type ()) #define GOG_RENDERER(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GOG_RENDERER_TYPE, GogRenderer)) #define IS_GOG_RENDERER(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GOG_RENDERER_TYPE)) @@ -38,29 +41,40 @@ void gog_renderer_request_update (GogRenderer *r); void gog_renderer_push_style (GogRenderer *r, GogStyle const *style); void gog_renderer_pop_style (GogRenderer *r); -void gog_renderer_clip_push (GogRenderer *r, GogViewAllocation const *region); -void gog_renderer_clip_pop (GogRenderer *r); +void gog_renderer_push_clip (GogRenderer *r, ArtVpath *path); +void gog_renderer_pop_clip (GogRenderer *r); -void gog_renderer_draw_sharp_path (GogRenderer *r, ArtVpath *path, - GogViewAllocation const *bound); -void gog_renderer_draw_sharp_polygon (GogRenderer *r, ArtVpath *path, - gboolean narrow, GogViewAllocation const *bound); -void gog_renderer_draw_sharp_rectangle (GogRenderer *r, GogViewAllocation const *rect, - GogViewAllocation const *bound); +ArtVpath * gog_renderer_get_rectangle_vpath (GogViewAllocation const *rect); +ArtBpath * gog_renderer_get_ring_wedge_bpath (double cx, double cy, + double rx_out, double ry_out, + double rx_in, double ry_in, + double th0, double th1); -void gog_renderer_draw_path (GogRenderer *r, ArtVpath const *path, - GogViewAllocation const *bound); -void gog_renderer_draw_polygon (GogRenderer *r, ArtVpath const *path, - gboolean narrow, GogViewAllocation const *bound); -void gog_renderer_draw_rectangle (GogRenderer *r, GogViewAllocation const *rect, - GogViewAllocation const *bound); +void gog_renderer_draw_sharp_path (GogRenderer *r, ArtVpath *path); +void gog_renderer_draw_sharp_polygon (GogRenderer *r, ArtVpath *path, gboolean narrow); +void gog_renderer_draw_sharp_rectangle (GogRenderer *r, GogViewAllocation const *rect); + +void gog_renderer_draw_ring_wedge (GogRenderer *r, double cx, double cy, + double rx_out, double ry_out, + double rx_in, double ry_in, + double th0, double th1, gboolean narrow); +void gog_renderer_draw_path (GogRenderer *r, ArtVpath const *path); +void gog_renderer_draw_polygon (GogRenderer *r, ArtVpath const *path, gboolean narrow); +void gog_renderer_draw_rectangle (GogRenderer *r, GogViewAllocation const *rect); +void gog_renderer_draw_bezier_path (GogRenderer *r, ArtBpath const *path); void gog_renderer_draw_text (GogRenderer *rend, char const *text, GogViewAllocation const *pos, GtkAnchorType anchor, GogViewAllocation *result); void gog_renderer_draw_marker (GogRenderer *rend, double x, double y); -void gog_renderer_measure_text (GogRenderer *rend, - char const *text, GogViewRequisition *size); + +void gog_renderer_get_text_OBR (GogRenderer *rend, char const *text, GOGeometryOBR *obr); +void gog_renderer_get_text_AABR (GogRenderer *rend, char const *text, GOGeometryAABR *aabr); + +#define gog_renderer_draw_arc(r,cx,cy,rx,ry,th0,th1) \ + gog_renderer_draw_ring_wedge (r,cx,cy,rx,ry,-1.,-1.,th0,th1,FALSE) +#define gog_renderer_draw_pie_wedge(r,cx,cy,rx,ry,th0,th1,narrow) \ + gog_renderer_draw_ring_wedge (r,cx,cy,rx,ry,0.,0.,th0,th1,narrow) /* measurement */ double gog_renderer_line_size (GogRenderer const *r, double width); @@ -68,4 +82,6 @@ double gog_renderer_pt2r_x (GogRenderer const *r, double d); double gog_renderer_pt2r_y (GogRenderer const *r, double d); double gog_renderer_pt2r (GogRenderer const *r, double d); +G_END_DECLS + #endif /* GOG_RENDERER_H */ diff --git a/lib/goffice/graph/gog-series-impl.h b/lib/goffice-0.0.4/goffice/graph/gog-series-impl.h similarity index 91% rename from lib/goffice/graph/gog-series-impl.h rename to lib/goffice-0.0.4/goffice/graph/gog-series-impl.h index 55b4fd2e9b..a6133fda9c 100644 --- a/lib/goffice/graph/gog-series-impl.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-series-impl.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -42,7 +42,9 @@ typedef struct { GogStyledObjectClass base; /* Virtuals */ - gpointer (*gse_editor) (GogObject *gobj, GnmCmdContext *cc); + gpointer (*gse_populate_editor) (GogObject *gobj, + GogEditor *editor, + GOCmdContext *cc); } GogSeriesElementClass; #define GOG_SERIES_ELEMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_SERIES_ELEMENT_TYPE, GogSeriesElementClass)) @@ -54,6 +56,8 @@ typedef enum { GOG_SERIES_ERRORS } GogSeriesPriority; +#define GOG_SERIES_ACCEPT_REGRESSION_CURVE 1 + struct _GogSeriesDimDesc { char const *name; GogSeriesPriority priority; @@ -75,6 +79,7 @@ struct _GogSeries { unsigned manual_index : 1; unsigned is_valid : 1; unsigned needs_recalc : 1; + unsigned acceptable_children : 1; GogPlot *plot; GogDatasetElement *values; @@ -90,7 +95,6 @@ typedef struct { /* Virtuals */ void (*dim_changed) (GogSeries *series, int dim_i); - void (*populate_editor) (GogSeries *series, GtkNotebook* book, GogDataAllocator *dalloc, GnmCmdContext *cc); } GogSeriesClass; #define GOG_SERIES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GOG_SERIES_TYPE, GogSeriesClass)) diff --git a/lib/goffice-0.0.4/goffice/graph/gog-series-lines.c b/lib/goffice-0.0.4/goffice/graph/gog-series-lines.c new file mode 100644 index 0000000000..ee004db6f8 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-series-lines.c @@ -0,0 +1,99 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-series-lines.c : + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * 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 Library 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "gog-series-lines.h" + +#include +#include + +static void +gog_series_lines_init_style (GogStyledObject *gso, GogStyle *style) +{ + GogStyle *parent_style = gog_styled_object_get_style ( + GOG_STYLED_OBJECT (gog_object_get_parent (GOG_OBJECT (gso)))); + GogPlot *plot = GOG_PLOT (GOG_SERIES ( + gog_object_get_parent (GOG_OBJECT (gso)))->plot); + char const *plot_name = G_OBJECT_TYPE_NAME (plot); + style->interesting_fields = + (parent_style->interesting_fields & GOG_STYLE_MARKER || + (!strcmp (plot_name, "GogBarColPlot") && strcmp (plot_name, "GogDropBarPlot")))? + GOG_STYLE_LINE: + GOG_STYLE_LINE | GOG_STYLE_MARKER; + gog_theme_fillin_style (gog_object_get_theme (GOG_OBJECT (gso)), + style, GOG_OBJECT (gso), 0, FALSE); +} + +static void +gog_series_lines_update (GogObject *obj) +{ + gog_object_request_update (obj->parent); +} + +static void +gog_series_lines_changed (GogObject *obj, gboolean size) +{ + gog_object_emit_changed (obj->parent, size); +} + +static void +gog_series_lines_class_init (GogObjectClass *klass) +{ + GogStyledObjectClass *style_klass = (GogStyledObjectClass *) klass; + + klass->update = gog_series_lines_update; + klass->changed = gog_series_lines_changed; + style_klass->init_style = gog_series_lines_init_style; +} + +GSF_CLASS (GogSeriesLines, gog_series_lines, + gog_series_lines_class_init, NULL, + GOG_STYLED_OBJECT_TYPE) + +void +gog_series_lines_render (GogSeriesLines *lines, GogRenderer *rend, GogViewAllocation const *bbox, ArtVpath *path, gboolean invert) +{ + int i = 0; + GogStyle *style = gog_styled_object_get_style (GOG_STYLED_OBJECT (lines)); + + if (invert) { + style = gog_style_dup (style); + style->line.color ^= 0xffffff00; + style->marker.mark->outline_color ^= 0xffffff00; + style->marker.mark->fill_color ^= 0xffffff00; + } + gog_renderer_push_style (rend, style); + gog_renderer_draw_sharp_path (rend, path); + if ((style->interesting_fields & GOG_STYLE_MARKER) != 0) + while (path[i].code != ART_END) { + gog_renderer_draw_marker (rend, path[i].x, path[i].y); + i++; + } + gog_renderer_pop_style (rend); + if (invert) + g_object_unref (style); +} diff --git a/lib/goffice-0.0.4/goffice/graph/gog-series-lines.h b/lib/goffice-0.0.4/goffice/graph/gog-series-lines.h new file mode 100644 index 0000000000..feb793de17 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/graph/gog-series-lines.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-series-lines.h : + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * 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 Library 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. + */ + +#ifndef GOG_SERIES_LINES_H +#define GOG_SERIES_LINES_H + +#include +#include +#include + +typedef GogStyledObject GogSeriesLines; +typedef GogStyledObjectClass GogSeriesLinesClass; + +#define GOG_SERIES_LINES_TYPE (gog_series_lines_get_type ()) +#define GOG_SERIES_LINES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_SERIES_LINES_TYPE, GogSeriesLines)) +#define IS_GOG_SERIES_LINES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_SERIES_LINES_TYPE)) + +GType gog_series_lines_get_type (void); +void gog_series_lines_register_type (GTypeModule *module); +void gog_series_lines_render (GogSeriesLines *lines, GogRenderer *rend, GogViewAllocation const *bbox, ArtVpath *path, gboolean invert); + + #endif /* GOG_SERIES_LINES_H */ diff --git a/lib/goffice/graph/gog-series.c b/lib/goffice-0.0.4/goffice/graph/gog-series.c similarity index 88% rename from lib/goffice/graph/gog-series.c rename to lib/goffice-0.0.4/goffice/graph/gog-series.c index 533172bc9c..0d30c4f9ff 100644 --- a/lib/goffice/graph/gog-series.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-series.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -25,13 +25,12 @@ #include #include #include -#include #include +#include +#include #include #include -//#include -#include #include #include #include @@ -124,46 +123,44 @@ cb_index_changed (GtkSpinButton *spin_button, GogSeriesElement *element) g_object_set (element, "index", (int) index, NULL); } -static gpointer -gog_series_element_editor (GogObject *gobj, +static void +gog_series_element_populate_editor (GogObject *gobj, + GogEditor *editor, GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { static guint series_element_pref_page = 1; - GtkWidget *w, *vbox, *spin_button = NULL; - gpointer gse_editor = NULL; + GtkWidget *w, *gse_vbox = NULL, *spin_button = NULL, *vbox; GogSeriesElementClass *klass = GOG_SERIES_ELEMENT_GET_CLASS (gobj); - if (klass->gse_editor) - gse_editor = (*klass->gse_editor) (gobj, cc); + if (klass->gse_populate_editor) + gse_vbox = (*klass->gse_populate_editor) (gobj, editor, cc); - if (gse_editor == NULL) - return gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, NULL); + (GOG_OBJECT_CLASS(gse_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); - vbox = gtk_vbox_new (FALSE, 6); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); w = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (w), gtk_label_new (_("Index:")), FALSE, FALSE, 0); spin_button = gtk_spin_button_new_with_range (0, G_MAXINT, 1); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), GOG_SERIES_ELEMENT(gobj)->index); g_signal_connect (G_OBJECT (spin_button), "value_changed", G_CALLBACK (cb_index_changed), gobj); - gtk_box_pack_start(GTK_BOX (w), spin_button, FALSE, FALSE, 0); + if (gse_vbox == NULL) { + vbox = gtk_vbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); + } else + vbox = gse_vbox; gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (gse_editor), FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (vbox), w, 0); gtk_widget_show_all (vbox); - w = gtk_notebook_new (); - gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, w); - gtk_notebook_append_page (GTK_NOTEBOOK (w), vbox, - gtk_label_new (_("Settings"))); - gog_style_handle_notebook (w, &series_element_pref_page); - return w; + if (gse_vbox == NULL) + gog_editor_add_page (editor, vbox, _("Settings")); + + gog_editor_set_store_page (editor, &series_element_pref_page); } static void @@ -191,7 +188,7 @@ gog_series_element_class_init (GogSeriesElementClass *klass) gobject_klass->set_property = gog_series_element_set_property; gobject_klass->get_property = gog_series_element_get_property; - gog_klass->editor = gog_series_element_editor; + gog_klass->populate_editor = gog_series_element_populate_editor; style_klass->init_style = gog_series_element_init_style; gog_klass->use_parent_as_proxy = TRUE; @@ -207,6 +204,25 @@ GSF_CLASS (GogSeriesElement, gog_series_element, gog_series_element_class_init, NULL /*gog_series_element_init*/, GOG_STYLED_OBJECT_TYPE) +/*****************************************************************************/ + +static gboolean +regression_curve_can_add (GogObject const *parent) +{ + GogSeries *series = GOG_SERIES (parent); + return (series->acceptable_children & GOG_SERIES_ACCEPT_REGRESSION_CURVE) != 0; +} + +static void +regression_curve_post_add (GogObject *parent, GogObject *child) +{ + gog_object_request_update (child); +} + +static void +regression_curve_pre_remove (GogObject *parent, GogObject *child) +{ +} /*****************************************************************************/ @@ -330,7 +346,7 @@ make_dim_editor (GtkTable *table, unsigned row, GtkWidget *editor, gtk_label_set_mnemonic_widget (GTK_LABEL (label), editor); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); - gnm_setup_label_atk (label, editor); + go_atk_setup_label (label, editor); return row + 1; } @@ -343,10 +359,11 @@ cb_show_in_legend (GtkToggleButton *b, GObject *series) NULL); } -static gpointer -gog_series_editor (GogObject *gobj, +static void +gog_series_populate_editor (GogObject *gobj, + GogEditor *editor, GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { static guint series_pref_page = 1; GtkWidget *w; @@ -356,10 +373,9 @@ gog_series_editor (GogObject *gobj, GogSeries *series = GOG_SERIES (gobj); GogDataset *set = GOG_DATASET (gobj); GogSeriesDesc const *desc; - GogSeriesClass *klass = GOG_SERIES_GET_CLASS (gobj); GogDataType data_type; - g_return_val_if_fail (series->plot != NULL, NULL); + g_return_if_fail (series->plot != NULL); /* Are there any shared dimensions */ desc = &series->plot->desc.series; @@ -418,16 +434,11 @@ gog_series_editor (GogObject *gobj, 0, 2, row, row+1, GTK_FILL, 0, 0, 0); gtk_widget_show_all (GTK_WIDGET (table)); - w = gtk_notebook_new (); + gog_editor_add_page (editor, GTK_WIDGET (table), _("Data")); - if (klass->populate_editor != NULL) - (klass->populate_editor) (GOG_SERIES (set), GTK_NOTEBOOK (w), dalloc, cc); + (GOG_OBJECT_CLASS(series_parent_klass)->populate_editor) (gobj, editor, dalloc, cc); - gtk_notebook_prepend_page (GTK_NOTEBOOK (w), GTK_WIDGET (table), - gtk_label_new (_("Data"))); - gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, w); - gog_style_handle_notebook (w, &series_pref_page); - return w; + gog_editor_set_store_page (editor, &series_pref_page); } static void @@ -456,7 +467,16 @@ gog_series_class_init (GogSeriesClass *klass) role_series_element_allocate, role_series_element_post_add, role_series_element_pre_remove, NULL }, + { N_("Regression curve"), "GogRegCurve", 1, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_TYPE, + regression_curve_can_add, + NULL, + NULL, + regression_curve_post_add, + regression_curve_pre_remove, + NULL }, }; + GObjectClass *gobject_klass = (GObjectClass *) klass; GogObjectClass *gog_klass = (GogObjectClass *) klass; GogStyledObjectClass *style_klass = (GogStyledObjectClass *) klass; @@ -466,7 +486,7 @@ gog_series_class_init (GogSeriesClass *klass) gobject_klass->set_property = gog_series_set_property; gobject_klass->get_property = gog_series_get_property; - gog_klass->editor = gog_series_editor; + gog_klass->populate_editor = gog_series_populate_editor; gog_klass->update = gog_series_update; style_klass->init_style = gog_series_init_style; /* series do not have views, so just forward signals from the plot */ @@ -489,6 +509,7 @@ gog_series_init (GogSeries *series) series->plot = NULL; series->values = NULL; series->index = -1; + series->acceptable_children = 0; } static void @@ -551,12 +572,22 @@ static void gog_series_dataset_dim_changed (GogDataset *set, int dim_i) { GogSeries *series = GOG_SERIES (set); + if (dim_i >= 0) { GogSeriesClass *klass = GOG_SERIES_GET_CLASS (set); + GogPlot *plot = GOG_PLOT (GOG_OBJECT (set)->parent); + /* FIXME: we probaly need a signal which will be connected + * to axis and legend objects and let them check if resize + * is really needed (similar to child-name-changed + * connected to legend). For now, let resize for every label + * change */ + gboolean resize = plot != NULL ? + plot->desc.series.dim[dim_i].val_type == GOG_DIM_LABEL : + FALSE; if (!series->needs_recalc) { series->needs_recalc = TRUE; - gog_object_emit_changed (GOG_OBJECT (set), FALSE); + gog_object_emit_changed (GOG_OBJECT (set), resize); } if (klass->dim_changed != NULL) (klass->dim_changed) (GOG_SERIES (set), dim_i); @@ -580,8 +611,8 @@ gog_series_dataset_init (GogDatasetClass *iface) } GSF_CLASS_FULL (GogSeries, gog_series, - gog_series_class_init, gog_series_init, - GOG_STYLED_OBJECT_TYPE, 0, + NULL, NULL, gog_series_class_init, NULL, + gog_series_init, GOG_STYLED_OBJECT_TYPE, 0, GSF_INTERFACE (gog_series_dataset_init, GOG_DATASET_TYPE)) /** @@ -797,5 +828,5 @@ gog_series_get_element (GogSeries const *series, int index) return element; } - return FALSE; + return NULL; } diff --git a/lib/goffice/graph/gog-series.h b/lib/goffice-0.0.4/goffice/graph/gog-series.h similarity index 95% rename from lib/goffice/graph/gog-series.h rename to lib/goffice-0.0.4/goffice/graph/gog-series.h index 5af2ab08f5..dd4e80e359 100644 --- a/lib/goffice/graph/gog-series.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-series.h @@ -15,13 +15,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_SERIES_H #define GOG_SERIES_H #include +#include #include #include diff --git a/lib/goffice/graph/gog-style-prefs.glade b/lib/goffice-0.0.4/goffice/graph/gog-style-prefs.glade similarity index 77% rename from lib/goffice/graph/gog-style-prefs.glade rename to lib/goffice-0.0.4/goffice/graph/gog-style-prefs.glade index d81fc4b03f..80f2332bae 100644 --- a/lib/goffice/graph/gog-style-prefs.glade +++ b/lib/goffice-0.0.4/goffice/graph/gog-style-prefs.glade @@ -15,6 +15,7 @@ False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST + True @@ -23,6 +24,410 @@ False 24 + + + True + False + 0 + + + + True + <b>Outline</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 0 + 18 + 0 + + + + True + 3 + 3 + False + 6 + 12 + + + + True + _Size: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + outline_size_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 30 0.1 1 1 + + + 1 + 2 + 2 + 3 + + + + + + + True + pts + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 2 + 3 + fill + + + + + + + True + Co_lor: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + St_yle: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + + True + False + 0 + + + + True + <b>Line</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 0 + 18 + 0 + + + + True + 3 + 3 + False + 6 + 12 + + + + True + Co_lor: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + _Size: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + line_size_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + 1 + 1 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 30 0.1 1 1 + + + 1 + 2 + 2 + 3 + + + + + + + True + pts + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 2 + 3 + 2 + 3 + fill + + + + + + + True + St_yle: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + + 0 + False + False + + + + + 0 + False + False + + + True @@ -42,6 +447,10 @@ 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -88,6 +497,10 @@ 0 0 fill_type_menu + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -103,6 +516,8 @@ Pattern Gradient Image + False + True 0 @@ -151,6 +566,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 False @@ -171,6 +590,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 tab @@ -199,6 +622,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -223,6 +650,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -247,6 +678,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -277,6 +712,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 tab @@ -305,6 +744,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -329,6 +772,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -354,6 +801,10 @@ Image 0 0 fill_gradient_type + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -378,6 +829,10 @@ Image 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 2 @@ -406,6 +861,8 @@ Image True 2 Colors Brightness + False + True @@ -438,6 +895,10 @@ Brightness 0 0 fill_gradient_brightness + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -492,6 +953,10 @@ Brightness 0 0 fill_gradient_brightness + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -529,6 +994,10 @@ Brightness 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 tab @@ -558,6 +1027,10 @@ Brightness 0 0 fill_image_fit + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -574,6 +1047,8 @@ Brightness True stretched wallpaper + False + True 1 @@ -640,6 +1115,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -675,6 +1154,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -721,6 +1204,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -758,6 +1245,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 tab @@ -782,372 +1273,8 @@ wallpaper 0 - False - False - - - - - - True - False - 0 - - - - True - <b>Outline</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 0 - 18 - 0 - - - - True - 3 - 3 - False - 6 - 12 - - - - True - _Size: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - outline_size_spin - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - 1 - 1 - True - GTK_UPDATE_ALWAYS - False - False - 0 0 30 0.1 1 1 - - - 1 - 2 - 2 - 3 - - - - - - - True - pts - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 2 - 3 - 2 - 3 - fill - - - - - - - True - Co_lor: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - St_yle: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - - 0 - False - False - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - <b>Line</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 0 - 18 - 0 - - - - True - 3 - 3 - False - 6 - 12 - - - - True - Co_lor: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - _Size: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - line_size_spin - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - 1 - 1 - True - GTK_UPDATE_ALWAYS - False - False - 0 0 30 0.1 1 1 - - - 1 - 2 - 2 - 3 - - - - - - - True - pts - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 2 - 3 - 2 - 3 - fill - - - - - - - True - St_yle: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - - 0 - False - False - - - - - 0 - False - False + True + True @@ -1170,6 +1297,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -1212,6 +1343,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -1237,6 +1372,10 @@ wallpaper 0 0 marker_size_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -1282,6 +1421,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 2 @@ -1305,6 +1448,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -1329,6 +1476,10 @@ wallpaper 0.5 0 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -1359,4 +1510,192 @@ wallpaper + + True + + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + False + 12 + + + + True + False + 0 + + + + True + False + 12 + + + + True + Co_lor: + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + + + + True + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + 12 + True + False + 12 + + + + True + False + 6 + + + + True + _Angle: + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + angle_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + 1 + 0 + True + GTK_UPDATE_ALWAYS + False + False + 0 -180 180 15 45 0 + + + 0 + False + False + + + + + + True + degrees + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + False + False + + + + + + diff --git a/lib/goffice/graph/gog-style.c b/lib/goffice-0.0.4/goffice/graph/gog-style.c similarity index 88% rename from lib/goffice/graph/gog-style.c rename to lib/goffice-0.0.4/goffice/graph/gog-style.c index 1715ad09af..889aeae559 100644 --- a/lib/goffice/graph/gog-style.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-style.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -28,12 +28,12 @@ #include #include -#include -#include -#include +#include +#include +#include +#include +#include -// #include -#include #include #include #include @@ -44,14 +44,11 @@ #include #include #include -#include -#include #include #include #include #include - #include #define HSCALE 100 @@ -72,6 +69,8 @@ static GObjectClass *parent_klass; typedef struct { GladeXML *gui; + GladeXML *font_gui; + GladeXML *text_layout_gui; GogStyle *style; GogStyle *default_style; GObject *object_with_style; @@ -115,6 +114,7 @@ set_style (StylePrefState const *state) static GtkWidget * create_go_combo_color (StylePrefState *state, GOColor initial_val, GOColor default_val, + GladeXML *gui, char const *group, char const *label_name, GCallback func) { @@ -125,7 +125,7 @@ create_go_combo_color (StylePrefState *state, go_combo_color_set_instant_apply (GO_COMBO_COLOR (w), FALSE); go_combo_color_set_allow_alpha (GO_COMBO_COLOR (w), TRUE); gtk_label_set_mnemonic_widget ( - GTK_LABEL (glade_xml_get_widget (state->gui, label_name)), w); + GTK_LABEL (glade_xml_get_widget (gui, label_name)), w); go_combo_color_set_color (GO_COMBO_COLOR (w), initial_val); g_signal_connect (G_OBJECT (w), "color_changed", @@ -149,9 +149,12 @@ gog_style_set_image_preview (GdkPixbuf *pix, StylePrefState *state) g_object_ref (state->fill.image.image); } + if (pix == NULL) + return; + w = glade_xml_get_widget (state->gui, "fill_image_sample"); - scaled = gnm_pixbuf_intelligent_scale (pix, HSCALE, VSCALE); + scaled = go_pixbuf_intelligent_scale (pix, HSCALE, VSCALE); gtk_image_set_from_pixbuf (GTK_IMAGE (w), scaled); g_object_unref (scaled); @@ -234,6 +237,7 @@ outline_init (StylePrefState *state, gboolean enable) /* Color */ w = create_go_combo_color (state, style->outline.color, default_style->outline.color, + state->gui, "outline_color", "outline_color_label", G_CALLBACK (cb_outline_color_changed)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, 0, 0, 0, 0); @@ -314,6 +318,7 @@ line_init (StylePrefState *state, gboolean enable) /* Colour */ w = create_go_combo_color (state, style->line.color, default_style->line.color, + state->gui, "line_color", "line_color_label", G_CALLBACK (cb_line_color_changed)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, 0, 0, 0, 0); @@ -410,6 +415,7 @@ fill_pattern_init (StylePrefState *state) state->fill.pattern.fore = w = create_go_combo_color (state, style->fill.pattern.fore, default_style->fill.pattern.fore, + state->gui, "pattern_foreground", "fill_pattern_foreground_label", G_CALLBACK (cb_fg_color_changed)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, 0, 0, 0, 0); @@ -417,6 +423,7 @@ fill_pattern_init (StylePrefState *state) state->fill.pattern.back = w = create_go_combo_color (state, style->fill.pattern.back, default_style->fill.pattern.back, + state->gui, "pattern_background", "fill_pattern_background_label", G_CALLBACK (cb_bg_color_changed)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 2, 3, 0, 0, 0, 0); @@ -556,6 +563,7 @@ fill_gradient_init (StylePrefState *state) state->fill.gradient.start = w = create_go_combo_color (state, style->fill.pattern.back, default_style->fill.pattern.back, + state->gui, "gradient_start", "fill_gradient_start_label", G_CALLBACK (cb_fill_gradient_start_color)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 2, 3, 0, 0, 0, 0); @@ -564,6 +572,7 @@ fill_gradient_init (StylePrefState *state) state->fill.gradient.end = w = create_go_combo_color (state, style->fill.pattern.fore, default_style->fill.pattern.fore, + state->gui, "gradient_end", "fill_gradient_end_label", G_CALLBACK (cb_fill_gradient_end_color)); gtk_table_attach (GTK_TABLE (table), w, 3, 4, 2, 3, 0, 0, 0, 0); @@ -614,9 +623,8 @@ cb_image_file_select (GtkWidget *cc, StylePrefState *state) filename = style->fill.image.filename; old_uri = filename ? go_filename_to_uri (filename) : NULL; - printf( "cb_image_file_select .. gui_image_file_select\n" ); - //uri = gui_image_file_select (NULL, old_uri); - uri = "http://localhost/"; + uri = go_gtk_select_image (GTK_WINDOW (gtk_widget_get_toplevel (cc)), + old_uri); g_free (old_uri); if (uri == NULL) return; @@ -626,9 +634,7 @@ cb_image_file_select (GtkWidget *cc, StylePrefState *state) g_warning ("Sorry -- cannot handle URIs here right now."); return; } -#ifdef GOG_WARN_TODO -#warning "Handle URIs here." -#endif +//#warning "Handle URIs here." gog_style_set_fill_image_filename (style, filename); @@ -820,6 +826,7 @@ marker_init (StylePrefState *state, gboolean enable) w = create_go_combo_color (state, go_marker_get_fill_color (style->marker.mark), go_marker_get_fill_color (default_style->marker.mark), + state->gui, "pattern_foreground", "marker_fill_label", G_CALLBACK (cb_marker_fill_color_changed)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, 0, 0, 0, 0); @@ -827,6 +834,7 @@ marker_init (StylePrefState *state, gboolean enable) w = create_go_combo_color (state, go_marker_get_outline_color (style->marker.mark), go_marker_get_outline_color (default_style->marker.mark), + state->gui, "pattern_foreground", "marker_outline_label", G_CALLBACK (cb_marker_outline_color_changed)); gtk_table_attach (GTK_TABLE (table), w, 1, 2, 2, 3, 0, 0, 0, 0); @@ -843,55 +851,107 @@ marker_init (StylePrefState *state, gboolean enable) /************************************************************************/ -#if 0 //unused static void -cb_font_changed (FontSelector *fs, G_GNUC_UNUSED gpointer mstyle, +cb_font_changed (GOFontSel *fs, PangoAttrList *list, StylePrefState *state) { - GogStyle *style = state->style; - PangoFontDescription *new_font = pango_font_description_copy (style->font.font->desc); - - // --jsled - //font_selector_get_pango (fs, new_font); - gog_style_set_font (style, new_font); + PangoAttrIterator *iter = pango_attr_list_get_iterator (list); + PangoFontDescription *desc = pango_font_description_new (); + GSList *extra_attrs; + const GOFont *font = go_font_new_by_desc (desc); + pango_attr_iterator_get_font (iter, desc, NULL, &extra_attrs); +//#warning "we should do something for extra attributes" + g_slist_foreach (extra_attrs, (GFunc)pango_attribute_destroy, NULL); + g_slist_free (extra_attrs); + pango_attr_iterator_destroy (iter); + gog_style_set_font (state->style, font); set_style (state); } -#endif // 0 -- unused static void -font_init (StylePrefState *state, guint32 enable, gpointer optional_notebook) +cb_font_color_changed (G_GNUC_UNUSED GOComboColor *cc, GOColor color, + G_GNUC_UNUSED gboolean is_custom, + G_GNUC_UNUSED gboolean by_user, + gboolean is_auto, StylePrefState *state) { GogStyle *style = state->style; - GtkWidget *box; + + style->font.color = color; + set_style (state); +} + +static void +font_init (StylePrefState *state, guint32 enable, GogEditor *editor, GOCmdContext *cc) +{ + GogStyle *style = state->style; + GtkWidget *w, *box; + GladeXML *gui; if (!enable) return; g_return_if_fail (style->font.font != NULL); - g_return_if_fail (GTK_NOTEBOOK (optional_notebook) != NULL); - box = gtk_vbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (box), 12); + gui = go_libglade_new ("gog-style-prefs.glade", "gog_style_font_prefs", NULL, cc); + if (gui == NULL) + return; -#if 0 - w = gtk_check_button_new_with_label (_("Automatic")); - gtk_box_pack_start (GTK_BOX (box), w, FALSE, TRUE, 0); -#endif - gtk_widget_show_all (box); + state->font_gui = gui; - /* --jsled - w = font_selector_new (); - font_selector_set_from_pango (FONT_SELECTOR (w), style->font.font->desc); + w = create_go_combo_color (state, + style->font.color, + style->font.color, + gui, + "pattern_foreground", "font_color_label", + G_CALLBACK (cb_font_color_changed)); + box = glade_xml_get_widget (gui, "color_box"); + gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); + gtk_widget_show (w); + + w = go_font_sel_new (); + go_font_sel_set_font (GO_FONT_SEL (w), style->font.font); g_signal_connect (G_OBJECT (w), "font_changed", G_CALLBACK (cb_font_changed), state); - gtk_box_pack_end (GTK_BOX (box), w, TRUE, TRUE, 0); gtk_widget_show (w); - */ - gtk_notebook_prepend_page (GTK_NOTEBOOK (optional_notebook), box, - gtk_label_new (_("Font"))); - gtk_widget_show (GTK_WIDGET (optional_notebook)); + box = glade_xml_get_widget (gui, "gog_style_font_prefs"); + gtk_box_pack_end (GTK_BOX (box), w, TRUE, TRUE, 0); + + gog_editor_add_page (editor, box, _("Font")); +} + +/************************************************************************/ + +static void +cb_angle_changed (GtkSpinButton *spin, StylePrefState *state) +{ + gog_style_set_text_angle (state->style, gtk_spin_button_get_value (spin)); + set_style (state); +} + +static void +text_layout_init (StylePrefState *state, guint32 enable, GogEditor *editor, GOCmdContext *cc) +{ + GogStyle *style = state->style; + GtkWidget *w; + GladeXML *gui; + + if (!enable) + return; + + gui = go_libglade_new ("gog-style-prefs.glade", "gog_style_text_layout_prefs", NULL, cc); + if (gui == NULL) + return; + + state->text_layout_gui = gui; + + w = glade_xml_get_widget (gui, "angle_spin"); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), style->text_layout.angle); + g_signal_connect (G_OBJECT (w), "value-changed", G_CALLBACK (cb_angle_changed), state); + + w = glade_xml_get_widget (gui, "gog_style_text_layout_prefs"); + gog_editor_add_page (editor, w, _("Text")); } /************************************************************************/ @@ -915,6 +975,8 @@ gog_style_pref_state_free (StylePrefState *state) g_object_unref (state->style); g_object_unref (state->default_style); g_object_unref (state->gui); + if (state->font_gui != NULL) + g_object_unref (state->font_gui); if (state->fill.gradient.timer != 0) { g_source_remove (state->fill.gradient.timer); state->fill.gradient.timer = 0; @@ -924,43 +986,50 @@ gog_style_pref_state_free (StylePrefState *state) g_free (state); } -static gpointer -style_editor (GogStyle *style, - GogStyle *default_style, - GnmCmdContext *cc, - gpointer optional_notebook, - GObject *object_with_style, - gboolean watch_for_external_change) +void +gog_style_populate_editor (GogStyle *style, + GogEditor *editor, + GogStyle *default_style, + GOCmdContext *cc, + GObject *object_with_style, + gboolean watch_for_external_change) { GogStyleFlag enable; GtkWidget *w; GladeXML *gui; StylePrefState *state; - g_return_val_if_fail (style != NULL, NULL); - g_return_val_if_fail (default_style != NULL, NULL); + g_return_if_fail (style != NULL); + g_return_if_fail (default_style != NULL); enable = style->interesting_fields; - gui = gnm_glade_xml_new (cc, "gog-style-prefs.glade", "gog_style_prefs", NULL); + gui = go_libglade_new ("gog-style-prefs.glade", "gog_style_prefs", NULL, cc); if (gui == NULL) - return NULL; + return; g_object_ref (style); g_object_ref (default_style); state = g_new0 (StylePrefState, 1); state->gui = gui; + state->font_gui = NULL; state->style = style; state->default_style = default_style; state->object_with_style = object_with_style; state->enable_edit = FALSE; - outline_init (state, enable & GOG_STYLE_OUTLINE); - line_init (state, enable & GOG_STYLE_LINE); - fill_init (state, enable & GOG_STYLE_FILL); - marker_init (state, enable & GOG_STYLE_MARKER); - font_init (state, enable & GOG_STYLE_FONT, optional_notebook); + w = glade_xml_get_widget (gui, "gog_style_prefs"); + g_object_set_data_full (G_OBJECT (w), + "state", state, (GDestroyNotify) gog_style_pref_state_free); + gog_editor_add_page (editor, w, _("Style")); + + outline_init (state, enable & GOG_STYLE_OUTLINE); + line_init (state, enable & GOG_STYLE_LINE); + fill_init (state, enable & GOG_STYLE_FILL); + marker_init (state, enable & GOG_STYLE_MARKER); + font_init (state, enable & GOG_STYLE_FONT, editor, cc); + text_layout_init (state, enable & GOG_STYLE_TEXT_LAYOUT, editor, cc); state->enable_edit = TRUE; @@ -971,41 +1040,24 @@ style_editor (GogStyle *style, g_object_weak_ref (G_OBJECT (object_with_style), (GWeakNotify) cb_parent_is_gone, state); } - - w = glade_xml_get_widget (gui, "gog_style_prefs"); - g_object_set_data_full (G_OBJECT (w), - "state", state, (GDestroyNotify) gog_style_pref_state_free); - - if (optional_notebook != NULL) { - gtk_notebook_prepend_page (GTK_NOTEBOOK (optional_notebook), w, - gtk_label_new (_("Style"))); - return GTK_WIDGET (optional_notebook); - } - return w; } gpointer -gog_style_editor (GogStyle *style, +gog_style_get_editor (GogStyle *style, GogStyle *default_style, - GnmCmdContext *cc, - gpointer optional_notebook, + GOCmdContext *cc, GObject *object_with_style) { - return style_editor (style, default_style, cc, optional_notebook, - object_with_style, FALSE); -} + GtkWidget *notebook; + GogEditor *editor = gog_editor_new (); -gpointer -gog_styled_object_editor (GogStyledObject *gso, GnmCmdContext *cc, gpointer optional_notebook) -{ - GogStyle *style = gog_style_dup (gog_styled_object_get_style (gso)); - GogStyle *default_style = gog_styled_object_get_auto_style (gso); - gpointer editor = style_editor (style, default_style, cc, - optional_notebook, G_OBJECT (gso), TRUE); - g_object_unref (style); - g_object_unref (default_style); + gog_style_populate_editor (style, editor, default_style, cc, + object_with_style, FALSE); - return editor; + notebook = gog_editor_get_notebook (editor); + gog_editor_free (editor); + gtk_widget_show (notebook); + return notebook; } /*****************************************************************************/ @@ -1069,6 +1121,8 @@ gog_style_assign (GogStyle *dst, GogStyle const *src) if (GOG_FILL_STYLE_IMAGE == dst->fill.type) dst->fill.image.filename = g_strdup (dst->fill.image.filename); + dst->text_layout = src->text_layout; + dst->interesting_fields = src->interesting_fields; dst->disable_theming = src->disable_theming; } @@ -1111,6 +1165,8 @@ gog_style_apply_theme (GogStyle *dst, GogStyle const *src) if (dst->marker.auto_fill_color) go_marker_set_fill_color (dst->marker.mark, go_marker_get_fill_color (src->marker.mark)); + if (dst->text_layout.auto_angle) + dst->text_layout.angle = src->text_layout.angle; #if 0 /* Fonts are not themed until we have some sort of auto mechanism @@ -1167,6 +1223,7 @@ gog_style_init (GogStyle *style) go_pattern_set_solid (&style->fill.pattern, RGBA_BLACK); style->font.font = go_font_new_by_index (0); style->font.color = RGBA_BLACK; + style->text_layout.angle = 0.0; } static struct { @@ -1589,7 +1646,7 @@ gog_style_font_load (xmlNode *node, GogStyle *style) desc = pango_font_description_from_string (str); if (desc != NULL) - gog_style_set_font (style, desc); + gog_style_set_font_desc (style, desc); xmlFree (str); } if (bool_prop (node, "auto-scale", &tmp)) @@ -1626,6 +1683,39 @@ gog_style_font_sax_save (GsfXMLOut *output, GogStyle const *style) gsf_xml_out_end_element (output); } +static void +gog_style_text_layout_load (xmlNode *node, GogStyle *style) +{ + char *str; + + str = xmlGetProp (node, "angle"); + if (str != NULL) { + gog_style_set_text_angle (style, g_strtod (str, NULL)); + xmlFree (str); + } +} + +static void +gog_style_text_layout_dom_save (xmlNode *parent, GogStyle const *style) +{ + gchar *str; + xmlNode *node = xmlNewDocNode (parent->doc, NULL, "text_layout", NULL); + + str = g_strdup_printf ("%g", style->text_layout.angle); + xmlSetProp (node, (xmlChar const *) "angle", str); + g_free (str); + + xmlAddChild (parent, node); +} + +static void +gog_style_text_layout_sax_save (GsfXMLOut *output, GogStyle const *style) +{ + gsf_xml_out_start_element (output, "text_layout"); + gsf_xml_out_add_float (output, "angle", style->text_layout.angle, 1); + gsf_xml_out_end_element (output); +} + static gboolean gog_style_persist_dom_load (GogPersist *gp, xmlNode *node) { @@ -1646,6 +1736,8 @@ gog_style_persist_dom_load (GogPersist *gp, xmlNode *node) gog_style_marker_load (ptr, style); else if (strcmp (ptr->name, "font") == 0) gog_style_font_load (ptr, style); + else if (strcmp (ptr->name, "text_layout") == 0) + gog_style_text_layout_load (ptr, style); } return TRUE; } @@ -1668,6 +1760,8 @@ gog_style_persist_dom_save (GogPersist const *gp, xmlNode *parent) gog_style_marker_dom_save (parent, style); if (style->interesting_fields & GOG_STYLE_FONT) gog_style_font_dom_save (parent, style); + if (style->interesting_fields & GOG_STYLE_TEXT_LAYOUT) + gog_style_text_layout_dom_save (parent, style); } static void @@ -1688,6 +1782,8 @@ gog_style_persist_sax_save (GogPersist const *gp, GsfXMLOut *output) gog_style_marker_sax_save (output, style); if (style->interesting_fields & GOG_STYLE_FONT) gog_style_font_sax_save (output, style); + if (style->interesting_fields & GOG_STYLE_TEXT_LAYOUT) + gog_style_text_layout_sax_save (output, style); } static void @@ -1699,8 +1795,8 @@ gog_style_persist_init (GogPersistClass *iface) } GSF_CLASS_FULL (GogStyle, gog_style, - gog_style_class_init, gog_style_init, - G_TYPE_OBJECT, 0, + NULL, NULL, gog_style_class_init, NULL, + gog_style_init, G_TYPE_OBJECT, 0, GSF_INTERFACE (gog_style_persist_init, GOG_PERSIST_TYPE)) gboolean @@ -1712,15 +1808,14 @@ gog_style_is_different_size (GogStyle const *a, GogStyle const *b) a->outline.width != b->outline.width || a->line.width != b->line.width || a->fill.type != b->fill.type || + a->text_layout.angle != b->text_layout.angle || !go_font_eq (a->font.font, b->font.font); } gboolean gog_style_is_marker_visible (GogStyle const *style) { -#ifdef GOG_WARN_TODO -#warning TODO : make this smarter -#endif +//#warning TODO : make this smarter return (style->interesting_fields & GOG_STYLE_MARKER) && go_marker_get_shape (style->marker.mark) != GO_MARKER_NONE; } @@ -1728,9 +1823,7 @@ gog_style_is_marker_visible (GogStyle const *style) gboolean gog_style_is_outline_visible (GogStyle const *style) { -#ifdef GOG_WARN_TODO -#warning TODO : make this smarter -#endif +//#warning TODO : make this smarter return UINT_RGBA_A (style->outline.color) > 0 && style->outline.dash_type != GO_LINE_NONE; } @@ -1738,10 +1831,7 @@ gog_style_is_outline_visible (GogStyle const *style) gboolean gog_style_is_line_visible (GogStyle const *style) { -#ifdef GOG_WARN_TODO -#warning TODO : make this smarter -#endif - +//#warning TODO : make this smarter return UINT_RGBA_A (style->line.color) > 0 && style->line.dash_type != GO_LINE_NONE; } @@ -1762,7 +1852,8 @@ gog_style_force_auto (GogStyle *style) style->line.auto_color = style->fill.auto_fore = style->fill.auto_back = - style->font.auto_scale = TRUE; + style->font.auto_scale = + style->text_layout.auto_angle = TRUE; } /** @@ -1786,7 +1877,7 @@ gog_style_set_marker (GogStyle *style, GOMarker *marker) } void -gog_style_set_font (GogStyle *style, PangoFontDescription *desc) +gog_style_set_font_desc (GogStyle *style, PangoFontDescription *desc) { GOFont const *font; @@ -1799,6 +1890,17 @@ gog_style_set_font (GogStyle *style, PangoFontDescription *desc) } } +void +gog_style_set_font (GogStyle *style, GOFont const *font) +{ + g_return_if_fail (GOG_STYLE (style) != NULL); + + if (font != NULL) { + go_font_unref (style->font.font); + style->font.font = font; + } +} + void gog_style_set_fill_brightness (GogStyle *style, float brightness) { @@ -1836,21 +1938,19 @@ gog_style_set_fill_image_filename (GogStyle *style, char *filename) style->fill.image.image = gdk_pixbuf_new_from_file (filename, NULL); } -static void -cb_switch_page (G_GNUC_UNUSED GtkNotebook *n, G_GNUC_UNUSED GtkNotebookPage *p, - guint page_num, guint *store_page) -{ - *store_page = page_num; -} - +/** + * gog_style_set_text_angle: + * @style : #GogStyle + * @angle : text rotation in degrees + * + * Set text rotation angle in degrees. Valid values are in the range + * [-180.0° , 180.0°]. + **/ void -gog_style_handle_notebook (gpointer notebook, guint *page) +gog_style_set_text_angle (GogStyle *style, double angle) { - g_return_if_fail (GTK_NOTEBOOK (notebook) != NULL); - g_return_if_fail (page != NULL); + g_return_if_fail (GOG_STYLE (style) != NULL); - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), *page); - g_signal_connect (G_OBJECT (notebook), - "switch_page", - G_CALLBACK (cb_switch_page), page); + style->text_layout.angle = CLAMP (angle, -180.0, 180.0); + style->text_layout.auto_angle = FALSE; } diff --git a/lib/goffice/graph/gog-style.h b/lib/goffice-0.0.4/goffice/graph/gog-style.h similarity index 80% rename from lib/goffice/graph/gog-style.h rename to lib/goffice-0.0.4/goffice/graph/gog-style.h index b11048ab07..fda62ee4ee 100644 --- a/lib/goffice/graph/gog-style.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-style.h @@ -15,25 +15,21 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_GRAPH_STYLE_H #define GO_GRAPH_STYLE_H +#include #include #include #include +#include #include #include #include #include -#include /* for GnmCmdContext */ - -// +jsled -#include -#include -// -jsled G_BEGIN_DECLS @@ -49,6 +45,7 @@ typedef enum { GOG_STYLE_LINE = 1 << 2, GOG_STYLE_MARKER = 1 << 3, GOG_STYLE_FONT = 1 << 4, + GOG_STYLE_TEXT_LAYOUT = 1 << 5, GOG_STYLE_ALL = 0x1F } GogStyleFlag; @@ -110,21 +107,28 @@ struct _GogStyle { } fill; GogStyleMark marker; struct { - GOColor color; - GOFont const *font; - gboolean auto_scale; + GOColor color; + GOFont const *font; + gboolean auto_scale; } font; + struct { + double angle; + gboolean auto_angle; + } text_layout; }; GogStyle *gog_style_new (void); GogStyle *gog_style_dup (GogStyle const *style); void gog_style_assign (GogStyle *dst, GogStyle const *src); void gog_style_apply_theme (GogStyle *dst, GogStyle const *src); -void gog_style_set_marker (GogStyle *style, GOMarker *marker); -void gog_style_set_font (GogStyle *style, - PangoFontDescription *desc); + +void gog_style_set_marker (GogStyle *style, GOMarker *marker); +void gog_style_set_font_desc (GogStyle *style, + PangoFontDescription *desc); +void gog_style_set_font (GogStyle *style, GOFont const *font); void gog_style_set_fill_brightness (GogStyle *style, float brightness); void gog_style_set_fill_image_filename (GogStyle *style, char *filename); +void gog_style_set_text_angle (GogStyle *style, double angle); gboolean gog_style_is_different_size (GogStyle const *a, GogStyle const *b); gboolean gog_style_is_marker_visible (GogStyle const *style); @@ -132,17 +136,16 @@ gboolean gog_style_is_line_visible (GogStyle const *style); gboolean gog_style_is_outline_visible (GogStyle const *style); void gog_style_force_auto (GogStyle *style); -gpointer gog_style_editor (GogStyle *style, +void gog_style_populate_editor (GogStyle *style, + GogEditor *editor, GogStyle *default_style, - GnmCmdContext *cc, - gpointer optional_notebook, + GOCmdContext *cc, + GObject *object_with_style, + gboolean watch_for_external_change); +gpointer gog_style_get_editor (GogStyle *style, + GogStyle *default_style, + GOCmdContext *cc, GObject *object_with_style); -gpointer gog_styled_object_editor (GogStyledObject *gso, - GnmCmdContext *cc, - gpointer optional_notebook); - -/* move this to the widget utils dir when we get one */ -void gog_style_handle_notebook (gpointer notebook, guint *page); G_END_DECLS diff --git a/lib/goffice/graph/gog-styled-object.c b/lib/goffice-0.0.4/goffice/graph/gog-styled-object.c similarity index 88% rename from lib/goffice/graph/gog-styled-object.c rename to lib/goffice-0.0.4/goffice/graph/gog-styled-object.c index d14ec87e12..212b9a422a 100644 --- a/lib/goffice/graph/gog-styled-object.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-styled-object.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -96,11 +96,23 @@ gog_styled_object_finalize (GObject *obj) (*parent_klass->finalize) (obj); } -static gpointer -styled_object_editor (GogObject *gobj, GogDataAllocator *dalloc, - GnmCmdContext *cc) +static void +styled_object_populate_editor (GogObject *gobj, + GogEditor *editor, + GogDataAllocator *dalloc, + GOCmdContext *cc) { - return gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, NULL); + GogStyledObject *gso = GOG_STYLED_OBJECT (gobj); + GogStyle *style = gog_style_dup (gog_styled_object_get_style (gso)); + + if (style->interesting_fields != 0) { + GogStyle *default_style = gog_styled_object_get_auto_style (gso); + gog_style_populate_editor (style, editor, default_style, cc, G_OBJECT (gso), TRUE); + g_object_unref (default_style); + } + g_object_unref (style); + + (GOG_OBJECT_CLASS(parent_klass)->populate_editor) (gobj, editor, dalloc, cc); } static void @@ -140,10 +152,11 @@ gog_styled_object_class_init (GogObjectClass *gog_klass) 1, G_TYPE_OBJECT); parent_klass = g_type_class_peek_parent (gog_klass); + gobject_klass->set_property = gog_styled_object_set_property; gobject_klass->get_property = gog_styled_object_get_property; gobject_klass->finalize = gog_styled_object_finalize; - gog_klass->editor = styled_object_editor; + gog_klass->populate_editor = styled_object_populate_editor; gog_klass->parent_changed = gog_styled_object_parent_changed; style_klass->init_style = gog_styled_object_init_style; diff --git a/lib/goffice/graph/gog-styled-object.h b/lib/goffice-0.0.4/goffice/graph/gog-styled-object.h similarity index 92% rename from lib/goffice/graph/gog-styled-object.h rename to lib/goffice-0.0.4/goffice/graph/gog-styled-object.h index 88bc22b0a4..5cacf6287a 100644 --- a/lib/goffice/graph/gog-styled-object.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-styled-object.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_STYLED_OBJECT_H @@ -48,7 +48,7 @@ typedef struct { #define GOG_STYLED_OBJECT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_STYLED_OBJECT_TYPE, GogStyledObjectClass)) GType gog_styled_object_get_type (void); -gboolean gog_styled_object_set_style (GogStyledObject *gso, GogStyle *style); +gboolean gog_styled_object_set_style (GogStyledObject *gso, GogStyle *style); GogStyle *gog_styled_object_get_style (GogStyledObject *gso); GogStyle *gog_styled_object_get_auto_style (GogStyledObject *gso); void gog_styled_object_style_changed (GogStyledObject *gso); diff --git a/lib/goffice/graph/gog-theme.c b/lib/goffice-0.0.4/goffice/graph/gog-theme.c similarity index 90% rename from lib/goffice/graph/gog-theme.c rename to lib/goffice-0.0.4/goffice/graph/gog-theme.c index e78fc26060..966be8b8a4 100644 --- a/lib/goffice/graph/gog-theme.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-theme.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -148,10 +148,7 @@ gog_theme_find_element (GogTheme *theme, GogObject *obj) g_return_val_if_fail (theme != NULL, NULL); if (theme->load_from_file != NULL) { -#ifdef GOG_WARN_TODO -#warning TODO parse some xml -#endif - +//#warning TODO parse some xml } /* 1) have we seen this specific role before */ @@ -239,10 +236,7 @@ gog_theme_fillin_style (GogTheme *theme, GogStyle *style, else gog_style_apply_theme (style, elem->style); -#ifdef GOG_WARN_TODO -#warning we should handle the applicability here not in the map -#endif - +//#warning we should handle the applicability here not in the map if (ind >= 0 && elem->map) (elem->map) (style, ind); } @@ -497,6 +491,12 @@ gog_themes_init (void) style->line.color = RGBA_BLACK; gog_theme_add_element (theme, style, NULL, "GogAxis", NULL); + /* AxisLine */ + style = gog_style_new (); + style->line.width = 0; /* hairline */ + style->line.color = RGBA_BLACK; + gog_theme_add_element (theme, style, NULL, "GogAxisLine", NULL); + /* Grid */ style = gog_style_new (); style->fill.type = GOG_FILL_STYLE_PATTERN; @@ -536,6 +536,37 @@ gog_themes_init (void) go_pattern_set_solid (&style->fill.pattern, RGBA_WHITE); gog_theme_add_element (theme, style, NULL, "GogLabel", NULL); + /* regression curves */ + style = gog_style_new (); + style->line.dash_type = GO_LINE_SOLID; + style->line.width = 1; + style->line.color = RGBA_BLACK; + gog_theme_add_element (theme, style, + NULL, "GogRegCurve", NULL); + + /* regression curves */ + style = gog_style_new (); + style->line.dash_type = GO_LINE_SOLID; + style->line.width = 1; + style->line.color = RGBA_BLACK; + gog_theme_add_element (theme, style, + NULL, "GogRegCurve", NULL); + + /* regression equations */ + style = gog_style_new (); + style->outline.dash_type = GO_LINE_SOLID; + style->outline.width = 0; /* hairline */ + style->outline.color = RGBA_BLACK; + style->fill.type = GOG_FILL_STYLE_PATTERN; + go_pattern_set_solid (&style->fill.pattern, 0); + gog_theme_add_element (theme, style, + NULL, "GogRegEqn", NULL); + + /* series lines */ + style = gog_style_new (); + gog_theme_add_element (theme, style, + map_area_series_solid_default, "GogSeriesLines", NULL); + /* Guppi */ theme = gog_theme_new (N_("Guppi")); gog_theme_register (theme, FALSE); @@ -575,6 +606,13 @@ gog_themes_init (void) style->line.width = 0.; /* hairline */ style->line.color = RGBA_GREY (0x20); gog_theme_add_element (theme, style, NULL, "GogAxis", NULL); + + /* AxisLine */ + style = gog_style_new (); + style->line.dash_type = GO_LINE_SOLID; + style->line.width = 0.; /* hairline */ + style->line.color = RGBA_GREY (0x20); + gog_theme_add_element (theme, style, NULL, "GogAxisLine", NULL); /* Grid */ style = gog_style_new (); @@ -616,6 +654,27 @@ gog_themes_init (void) style->fill.type = GOG_FILL_STYLE_NONE; go_pattern_set_solid (&style->fill.pattern, RGBA_WHITE); gog_theme_add_element (theme, style, NULL, "GogLabel", NULL); + + /* regression curves */ + style = gog_style_new (); + style->line.dash_type = GO_LINE_SOLID; + style->line.width = 1; + style->line.color = RGBA_BLACK; + gog_theme_add_element (theme, style, + NULL, "GogRegCurve", NULL); + + /* regression equations */ + style = gog_style_new (); + style->outline.dash_type = GO_LINE_SOLID; + style->outline.width = 0; /* hairline */ + style->outline.color = RGBA_BLACK; + gog_theme_add_element (theme, style, + NULL, "GogRegEqn", NULL); + + /* series lines */ + style = gog_style_new (); + gog_theme_add_element (theme, style, + NULL, "GogSeriesLines", NULL); } void @@ -628,4 +687,3 @@ gog_themes_shutdown (void) for (ptr = themes; ptr != NULL ; ptr = ptr->next) g_object_unref (ptr->data); } - diff --git a/lib/goffice/graph/gog-theme.h b/lib/goffice-0.0.4/goffice/graph/gog-theme.h similarity index 95% rename from lib/goffice/graph/gog-theme.h rename to lib/goffice-0.0.4/goffice/graph/gog-theme.h index 1d7bd84864..2e51bca288 100644 --- a/lib/goffice/graph/gog-theme.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-theme.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_THEME_H diff --git a/lib/goffice/graph/gog-view.c b/lib/goffice-0.0.4/goffice/graph/gog-view.c similarity index 88% rename from lib/goffice/graph/gog-view.c rename to lib/goffice-0.0.4/goffice/graph/gog-view.c index 71b16d739e..52a4f29e19 100644 --- a/lib/goffice/graph/gog-view.c +++ b/lib/goffice-0.0.4/goffice/graph/gog-view.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -189,6 +189,25 @@ gog_view_finalize (GObject *obj) (*parent_klass->finalize) (obj); } +static void +gog_view_padding_request_real (GogView *view, GogViewAllocation const *bbox, GogViewPadding *padding) +{ + GSList *ptr; + GogView *child; + GogViewPadding child_padding; + + for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { + child = ptr->data; + if (GOG_POSITION_IS_PADDING (child->model->position)) { + gog_view_padding_request (child, bbox, &child_padding); + padding->wr = MAX (padding->wr, child_padding.wr); + padding->wl = MAX (padding->wl, child_padding.wl); + padding->hb = MAX (padding->hb, child_padding.hb); + padding->ht = MAX (padding->ht, child_padding.ht); + } + } +} + static void gog_view_size_request_real (GogView *view, GogViewRequisition *req) { @@ -211,11 +230,10 @@ gog_view_size_allocate_real (GogView *view, GogViewAllocation const *allocation) pos = child->model->position; if (pos & GOG_POSITION_MANUAL) { - /* position relative to the entire region */ - tmp = available; - /* add some flags to control interpretation of manual - * eg abs/percentage from start/end */ - g_warning ("manual is not supported yet"); + gog_view_size_request (child, &req); + tmp = gog_object_get_manual_allocation (gog_view_get_model (child), + &available, &req); + gog_view_size_allocate (child, &tmp); } else if (pos & GOG_POSITION_COMPASS) { gboolean vertical = TRUE; @@ -291,10 +309,12 @@ gog_view_size_allocate_real (GogView *view, GogViewAllocation const *allocation) } gog_view_size_allocate (child, &tmp); - } else if (pos != GOG_POSITION_SPECIAL) - g_warning ("unexpected position %x for child %p of %p", + } else if (!(GOG_POSITION_IS_SPECIAL (pos)) && + !(GOG_POSITION_IS_PADDING (pos))) + g_warning ("[GogView::size_allocate_real] unexpected position %x for child %p of %p", pos, child, view); } + view->residual = res; } @@ -315,6 +335,7 @@ gog_view_class_init (GogViewClass *view_klass) parent_klass = g_type_class_peek_parent (view_klass); gobject_klass->set_property = gog_view_set_property; gobject_klass->finalize = gog_view_finalize; + view_klass->padding_request = gog_view_padding_request_real; view_klass->size_request = gog_view_size_request_real; view_klass->size_allocate = gog_view_size_allocate_real; view_klass->render = gog_view_render_real; @@ -323,11 +344,13 @@ gog_view_class_init (GogViewClass *view_klass) g_object_class_install_property (gobject_klass, GOG_VIEW_PROP_PARENT, g_param_spec_object ("parent", "parent", "the GogView parent", - GOG_VIEW_TYPE, G_PARAM_WRITABLE)); + GOG_VIEW_TYPE, + GSF_PARAM_STATIC | G_PARAM_WRITABLE)); g_object_class_install_property (gobject_klass, GOG_VIEW_PROP_MODEL, g_param_spec_object ("model", "model", "the GogObject this view displays", - GOG_OBJECT_TYPE, G_PARAM_WRITABLE)); + GOG_OBJECT_TYPE, + GSF_PARAM_STATIC | G_PARAM_WRITABLE)); } static void @@ -396,6 +419,22 @@ gog_view_queue_resize (GogView *view) #endif } +void +gog_view_padding_request (GogView *view, GogViewAllocation const *bbox, GogViewPadding *padding) +{ + GogViewClass *klass = GOG_VIEW_GET_CLASS (view); + + g_return_if_fail (klass != NULL); + g_return_if_fail (padding != NULL); + g_return_if_fail (bbox != NULL); + + padding->wl = padding->wr = padding->ht = padding->hb = 0.; + + if (klass->padding_request != NULL) + (klass->padding_request) (view, bbox, padding); +} + + /** * gog_view_size_request : * @view : a #GogView @@ -484,9 +523,10 @@ gog_view_render (GogView *view, GogViewAllocation const *bbox) return; if (klass->clip) { - gog_renderer_clip_push (view->renderer, &view->allocation); + gog_renderer_push_clip (view->renderer, + gog_renderer_get_rectangle_vpath (&view->allocation)); klass->render (view, bbox); - gog_renderer_clip_pop (view->renderer); + gog_renderer_pop_clip (view->renderer); } else klass->render (view, bbox); @@ -510,7 +550,7 @@ gog_view_info_at_point (GogView *view, double x, double y, GogObject const *cur_selection, GogObject **obj, char **name) { - GSList *ptr; + GSList *ptr, *list; GogViewClass *klass = GOG_VIEW_GET_CLASS (view); g_return_val_if_fail (klass != NULL, FALSE); @@ -523,9 +563,12 @@ gog_view_info_at_point (GogView *view, double x, double y, y >= (view->allocation.y + view->allocation.h)) return FALSE; - for (ptr = view->children; ptr != NULL ; ptr = ptr->next) + /* walk the list in reverse */ + list = g_slist_reverse (g_slist_copy (view->children)); + for (ptr = list; ptr != NULL ; ptr = ptr->next) if (gog_view_info_at_point (ptr->data, x, y, cur_selection, obj, name)) return TRUE; + g_slist_free (list); if (klass->info_at_point != NULL) return (klass->info_at_point) (view, x, y, cur_selection, obj, name); @@ -585,8 +628,8 @@ gog_view_size_child_request (GogView *view, } else if (res->w < req.w) res->w = req.w; - } else if (pos != GOG_POSITION_SPECIAL) - g_warning ("unexpected position %x for child %p of %p", + } else if (!(GOG_POSITION_IS_SPECIAL (pos))) + g_warning ("[GogView::size_child_request] unexpected position %x for child %p of %p", pos, child, view); } g_slist_free (list); @@ -597,7 +640,7 @@ gog_view_size_child_request (GogView *view, * @container : #GogView * @target_model : #GogObject * - * Find the GogView contained in @container that icorresponds to @model. + * Find the GogView contained in @container that corresponds to @model. * Returns NULL on error **/ GogView * diff --git a/lib/goffice/graph/gog-view.h b/lib/goffice-0.0.4/goffice/graph/gog-view.h similarity index 86% rename from lib/goffice/graph/gog-view.h rename to lib/goffice-0.0.4/goffice/graph/gog-view.h index 2cfe8205e4..6379af0586 100644 --- a/lib/goffice/graph/gog-view.h +++ b/lib/goffice-0.0.4/goffice/graph/gog-view.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GOG_VIEW_H @@ -45,12 +45,13 @@ struct _GogView { typedef struct { GObjectClass base; - gboolean clip; + unsigned clip : 1; /* Automaticaly clip to object bounding box */ /* Virtuals */ void (*state_init) (GogView *); - void (*size_request) (GogView *, GogViewRequisition *r); - void (*size_allocate) (GogView *, GogViewAllocation const *a); + void (*padding_request) (GogView *, GogViewAllocation const *bbox, GogViewPadding *padding); + void (*size_request) (GogView *, GogViewRequisition *req); + void (*size_allocate) (GogView *, GogViewAllocation const *bbox); void (*render) (GogView *, GogViewAllocation const *bbox); gboolean (*info_at_point) (GogView *, double x, double y, GogObject const *cur_selection, @@ -70,6 +71,7 @@ GogObject *gog_view_get_model (GogView const *view); void gog_view_render (GogView *v, GogViewAllocation const *bbox); void gog_view_queue_redraw (GogView *v); void gog_view_queue_resize (GogView *v); +void gog_view_padding_request (GogView *v, GogViewAllocation const *bbox, GogViewPadding *padding); void gog_view_size_request (GogView *v, GogViewRequisition *req); void gog_view_size_allocate (GogView *v, GogViewAllocation const *a); gboolean gog_view_update_sizes (GogView *v); diff --git a/lib/goffice-0.0.4/goffice/gtk/Makefile.am b/lib/goffice-0.0.4/goffice/gtk/Makefile.am new file mode 100644 index 0000000000..b62bbd66c7 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/Makefile.am @@ -0,0 +1,74 @@ +noinst_LTLIBRARIES = libgoffice-gtk.la + +libgoffice_gtk_la_SOURCES = \ + goffice-gtk.c \ + \ + go-font-sel.c \ + go-format-sel.c \ + go-rotation-sel.c \ + go-charmap-sel.c \ + go-locale-sel.c \ + \ + go-optionmenu.c \ + go-combo-box.c \ + go-color-group.c \ + go-color-palette.c \ + go-combo-color.c \ + go-combo-pixmaps.c \ + go-combo-text.c \ + \ + go-action-combo-color.c \ + go-action-combo-pixmaps.c \ + go-action-combo-stack.c \ + go-action-combo-text.c \ + \ + go-graph-widget.c + + +libgoffice_gtk_ladir = $(goffice_include_dir)/gtk +libgoffice_gtk_la_HEADERS = \ + goffice-gtk.h \ + \ + go-font-sel.h \ + go-format-sel.h \ + go-rotation-sel.h \ + go-charmap-sel.h \ + go-locale-sel.h \ + \ + go-optionmenu.h \ + go-combo-box.h \ + go-color-group.h \ + go-color-palette.h \ + go-combo-color.h \ + go-combo-pixmaps.h \ + go-combo-text.h \ + \ + go-action-combo-color.h \ + go-action-combo-pixmaps.h \ + go-action-combo-stack.h \ + go-action-combo-text.h \ + \ + go-graph-widget.h + +gladedir = $(goffice_datadir)/glade +dist_glade_DATA = \ + go-rotation-sel.glade \ + go-font-sel.glade \ + go-format-sel.glade + +# This list should be empty when we reach a stable phase. +UNUSED = \ + go-dock.c \ + go-dock.h \ + go-dock-band.c \ + go-dock-band.h \ + go-dock-item.c \ + go-dock-item.h \ + go-dock-item-grip.c \ + go-dock-item-grip.h \ + go-dock-layout.c \ + go-dock-layout.h + +EXTRA_DIST = $(UNUSED) + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice/gui-utils/go-action-combo-color.c b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.c similarity index 85% rename from lib/goffice/gui-utils/go-action-combo-color.c rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.c index 5e6c6f82ca..9e8345a269 100644 --- a/lib/goffice/gui-utils/go-action-combo-color.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include @@ -23,15 +23,15 @@ #include "go-combo-color.h" #include "go-combo-box.h" #include "go-color-palette.h" - -// #include -#include -#include +#include "goffice-gtk.h" #include #include +#include +#include #include #include +#include #include #include @@ -63,6 +63,34 @@ go_tool_combo_color_class_init (GtkToolItemClass *tool_item_class) tool_item_class->set_tooltip = go_tool_combo_color_set_tooltip; } +static GdkPixbuf * +make_icon (GtkAction *a, GtkWidget *tool) +{ + GtkIconSize size; + gint pixels = 8; + char *stock_id; + GdkPixbuf *icon; + GtkSettings *settings = gtk_widget_get_settings (tool); + GdkScreen *screen = gtk_widget_get_screen (tool); + + if (tool->parent) + size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (tool->parent)); + else + g_object_get (settings, + "gtk-toolbar-icon-size", &size, + NULL); + gtk_icon_size_lookup_for_settings (settings, size, + &pixels, NULL); + g_object_get (a, "stock-id", &stock_id, NULL); + icon = gtk_icon_theme_load_icon + (gtk_icon_theme_get_for_screen (screen), + stock_id, pixels, 0, NULL); + g_free (stock_id); + + return icon; +} + + static GSF_CLASS (GOToolComboColor, go_tool_combo_color, go_tool_combo_color_class_init, NULL, GTK_TYPE_TOOL_ITEM) @@ -71,7 +99,6 @@ static GSF_CLASS (GOToolComboColor, go_tool_combo_color, struct _GOActionComboColor { GtkAction base; - GdkPixbuf *icon; GOColorGroup *color_group; char const *default_val_label; GOColor default_val, current_color; @@ -95,8 +122,10 @@ go_action_combo_color_connect_proxy (GtkAction *a, GtkWidget *proxy) GTK_ACTION_CLASS (combo_color_parent)->connect_proxy (a, proxy); if (GTK_IS_IMAGE_MENU_ITEM (proxy)) { /* set the icon */ - GOActionComboColor *caction = (GOActionComboColor *)a; - GtkWidget *image = gtk_image_new_from_pixbuf (caction->icon); + GdkPixbuf *icon = make_icon (a, proxy); + GtkWidget *image = gtk_image_new_from_pixbuf (icon); + g_object_unref (icon); + gtk_widget_show (image); gtk_image_menu_item_set_image ( GTK_IMAGE_MENU_ITEM (proxy), image); @@ -138,18 +167,21 @@ go_action_combo_color_create_tool_item (GtkAction *a) GOToolComboColor *tool = g_object_new (GO_TOOL_COMBO_COLOR_TYPE, NULL); char *title; - tool->combo = (GOComboColor *)go_combo_color_new (caction->icon, + /* FIXME: We probably should re-do this when tool changes screen or + parent. */ + GdkPixbuf *icon = make_icon (a, GTK_WIDGET (tool)); + + tool->combo = (GOComboColor *)go_combo_color_new (icon, caction->default_val_label, caction->default_val, caction->color_group); go_combo_color_set_instant_apply (GO_COMBO_COLOR (tool->combo), TRUE); go_combo_box_set_relief (GO_COMBO_BOX (tool->combo), GTK_RELIEF_NONE); - go_combo_box_set_tearable (GO_COMBO_BOX (tool->combo), TRUE); title = get_title (a); go_combo_box_set_title (GO_COMBO_BOX (tool->combo), title); g_free (title); - gnm_widget_disable_focus (GTK_WIDGET (tool->combo)); + go_gtk_widget_disable_focus (GTK_WIDGET (tool->combo)); gtk_container_add (GTK_CONTAINER (tool), GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool)); @@ -187,8 +219,6 @@ static void go_action_combo_color_finalize (GObject *obj) { GOActionComboColor *color = (GOActionComboColor *)obj; - if (color->icon != NULL) - g_object_unref (color->icon); if (color->color_group != NULL) g_object_unref (color->color_group); @@ -230,9 +260,8 @@ go_action_combo_color_new (char const *action_name, { GOActionComboColor *res = g_object_new (go_action_combo_color_get_type (), "name", action_name, - "stock_id", stock_id, + "stock-id", stock_id, NULL); - res->icon = gnm_app_get_pixbuf (stock_id); res->color_group = go_color_group_fetch (action_name, group_key); res->default_val_label = g_strdup (default_color_label); res->current_color = res->default_val = default_color; @@ -243,9 +272,7 @@ go_action_combo_color_new (char const *action_name, void go_action_combo_color_set_group (GOActionComboColor *action, gpointer group_key) { -#ifdef GOG_WARN_TODO -#warning TODO -#endif +//#warning TODO } GOColor diff --git a/lib/goffice/gui-utils/go-action-combo-color.h b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.h similarity index 94% rename from lib/goffice/gui-utils/go-action-combo-color.h rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.h index 6ad5e51c68..a6ec073669 100644 --- a/lib/goffice/gui-utils/go-action-combo-color.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-color.h @@ -19,8 +19,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **/ -#ifndef __GO_ACTION_COMBO_COLOR_H__ -#define __GO_ACTION_COMBO_COLOR_H__ +#ifndef _GO_ACTION_COMBO_COLOR_H_ +#define _GO_ACTION_COMBO_COLOR_H_ #include #include @@ -46,4 +46,4 @@ void go_action_combo_color_set_color (GOActionComboColor *a, GOColor color); G_END_DECLS -#endif /* __GO_ACTION_COMBO_COLOR_H__ */ +#endif /* _GO_ACTION_COMBO_COLOR_H_ */ diff --git a/lib/goffice/gui-utils/go-action-combo-pixmaps.c b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-pixmaps.c similarity index 85% rename from lib/goffice/gui-utils/go-action-combo-pixmaps.c rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-pixmaps.c index 583fbf5c7b..c8b36ef09a 100644 --- a/lib/goffice/gui-utils/go-action-combo-pixmaps.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-pixmaps.c @@ -15,19 +15,18 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "go-action-combo-pixmaps.h" #include "go-combo-pixmaps.h" #include "go-combo-box.h" - -//#include -#include +#include "goffice-gtk.h" #include #include +#include #include #include #include @@ -77,6 +76,23 @@ struct _GOActionComboPixmaps { }; typedef GtkActionClass GOActionComboPixmapsClass; +static GdkPixbuf * +make_icon (GtkAction *a, const char *stock_id, GtkWidget *tool) +{ + GtkIconSize size; + + if (tool->parent) + size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (tool->parent)); + else { + GtkSettings *settings = gtk_widget_get_settings (tool); + g_object_get (settings, "gtk-toolbar-icon-size", &size, NULL); + } + + return gtk_widget_render_icon (tool, stock_id, size, + "GOActionComboPixmaps"); +} + + static GObjectClass *combo_pixmaps_parent; static void go_action_combo_pixmaps_connect_proxy (GtkAction *a, GtkWidget *proxy) @@ -85,11 +101,13 @@ go_action_combo_pixmaps_connect_proxy (GtkAction *a, GtkWidget *proxy) if (GTK_IS_IMAGE_MENU_ITEM (proxy)) { /* set the icon */ GOActionComboPixmaps *paction = (GOActionComboPixmaps *)a; - GtkWidget *image = gtk_image_new_from_stock ( - paction->elements[0].stock_id, GTK_ICON_SIZE_MENU); + const char *stock_id = paction->elements[0].stock_id; + GdkPixbuf *icon = make_icon (a, stock_id, proxy); + GtkWidget *image = gtk_image_new_from_pixbuf (icon); + g_object_unref (icon); gtk_widget_show (image); - gtk_image_menu_item_set_image ( - GTK_IMAGE_MENU_ITEM (proxy), image); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), + image); } } @@ -117,21 +135,20 @@ go_action_combo_pixmaps_create_tool_item (GtkAction *a) { GOActionComboPixmaps *paction = (GOActionComboPixmaps *)a; GOToolComboPixmaps *tool = g_object_new (GO_TOOL_COMBO_PIXMAPS_TYPE, NULL); - GOActionComboPixmapsElement const *el= paction->elements; + GOActionComboPixmapsElement const *el = paction->elements; tool->combo = go_combo_pixmaps_new (paction->ncols); - for ( ; el->stock_id != NULL ; el++) + for ( ; el->stock_id != NULL ; el++) { + GdkPixbuf *icon = make_icon (a, el->stock_id, GTK_WIDGET (tool)); go_combo_pixmaps_add_element (tool->combo, - gtk_widget_render_icon (GTK_WIDGET (tool->combo), - el->stock_id, - GTK_ICON_SIZE_LARGE_TOOLBAR, - "GOActionComboPixmaps"), - el->id, _(el->untranslated_tooltip)); + icon, + el->id, + _(el->untranslated_tooltip)); + } go_combo_pixmaps_select_id (tool->combo, paction->selected_id); go_combo_box_set_relief (GO_COMBO_BOX (tool->combo), GTK_RELIEF_NONE); - go_combo_box_set_tearable (GO_COMBO_BOX (tool->combo), TRUE); - gnm_widget_disable_focus (GTK_WIDGET (tool->combo)); + go_gtk_widget_disable_focus (GTK_WIDGET (tool->combo)); gtk_container_add (GTK_CONTAINER (tool), GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool)); @@ -202,8 +219,8 @@ go_action_combo_pixmaps_new (char const *name, g_return_val_if_fail (elements != NULL, NULL); paction = g_object_new (go_action_combo_pixmaps_get_type (), - "name", name, - NULL); + "name", name, + NULL); paction->elements = elements; paction->ncols = ncols; paction->nrows = nrows; diff --git a/lib/goffice/gui-utils/go-action-combo-pixmaps.h b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-pixmaps.h similarity index 91% rename from lib/goffice/gui-utils/go-action-combo-pixmaps.h rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-pixmaps.h index d86596d82b..eae83f2c7b 100644 --- a/lib/goffice/gui-utils/go-action-combo-pixmaps.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-pixmaps.h @@ -19,11 +19,11 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **/ -#ifndef __GO_ACTION_COMBO_PIXMAPS_H__ -#define __GO_ACTION_COMBO_PIXMAPS_H__ +#ifndef _GO_ACTION_COMBO_PIXMAPS_H_ +#define _GO_ACTION_COMBO_PIXMAPS_H_ #include -#include +#include G_BEGIN_DECLS @@ -48,4 +48,4 @@ gboolean go_action_combo_pixmaps_select_id (GOActionComboPixmaps *action, int G_END_DECLS -#endif /* __GO_ACTION_COMBO_PIXMAPS_H__ */ +#endif /* _GO_ACTION_COMBO_PIXMAPS_H_ */ diff --git a/lib/goffice/gui-utils/go-action-combo-stack.c b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-stack.c similarity index 95% rename from lib/goffice/gui-utils/go-action-combo-stack.c rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-stack.c index 8eae852b8f..ebfb33224b 100644 --- a/lib/goffice/gui-utils/go-action-combo-stack.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-stack.c @@ -15,14 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "go-action-combo-stack.h" #include "go-combo-box.h" -//#include -#include +#include "goffice-gtk.h" #include #include @@ -42,7 +41,7 @@ #include #include -//////////////////////////////////////////////////////////////////////////// +/**************************************************************************/ typedef struct { GOComboBox base; @@ -231,7 +230,7 @@ GSF_CLASS (GOComboStack, go_combo_stack, go_combo_stack_class_init, go_combo_stack_init, GO_COMBO_BOX_TYPE) -//////////////////////////////////////////////////////////////////////////// +/**************************************************************************/ typedef struct { GtkToolItem base; @@ -303,6 +302,8 @@ go_action_combo_stack_create_tool_item (GtkAction *a) GOToolComboStack *tool = g_object_new (GO_TOOL_COMBO_STACK_TYPE, NULL); char *stock_id; gboolean is_sensitive = gtk_tree_model_iter_n_children (saction->model, NULL) > 0; + GtkIconSize size; + GtkSettings *settings; tool->combo = g_object_new (GO_COMBO_STACK_TYPE, NULL); tree_view = GTK_TREE_VIEW (tool->combo->list); @@ -314,9 +315,13 @@ go_action_combo_stack_create_tool_item (GtkAction *a) "text", 0, NULL)); - g_object_get (G_OBJECT (a), "stock_id", &stock_id, NULL); - image = gtk_image_new_from_stock ( - stock_id, GTK_ICON_SIZE_LARGE_TOOLBAR); + /* FIXME: This probably isn't 100% right as tool isn't mapped yet. */ + settings = gtk_widget_get_settings (GTK_WIDGET (tool)); + g_object_get (settings, + "gtk-toolbar-icon-size", &size, + NULL); + g_object_get (G_OBJECT (a), "stock-id", &stock_id, NULL); + image = gtk_image_new_from_stock (stock_id, size); g_free (stock_id); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (tool->combo->button), image); @@ -324,8 +329,7 @@ go_action_combo_stack_create_tool_item (GtkAction *a) gtk_widget_set_sensitive (GTK_WIDGET (tool), is_sensitive); go_combo_box_set_relief (GO_COMBO_BOX (tool->combo), GTK_RELIEF_NONE); - go_combo_box_set_tearable (GO_COMBO_BOX (tool->combo), TRUE); - gnm_widget_disable_focus (GTK_WIDGET (tool->combo)); + go_gtk_widget_disable_focus (GTK_WIDGET (tool->combo)); gtk_container_add (GTK_CONTAINER (tool), GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool)); diff --git a/lib/goffice/gui-utils/go-action-combo-stack.h b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-stack.h similarity index 93% rename from lib/goffice/gui-utils/go-action-combo-stack.h rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-stack.h index fa4d13b718..8737bcd1cc 100644 --- a/lib/goffice/gui-utils/go-action-combo-stack.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-stack.h @@ -19,8 +19,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **/ -#ifndef __GO_ACTION_COMBO_STACK_H__ -#define __GO_ACTION_COMBO_STACK_H__ +#ifndef _GO_ACTION_COMBO_STACK_H_ +#define _GO_ACTION_COMBO_STACK_H_ #include @@ -41,4 +41,4 @@ gpointer go_action_combo_stack_selection (GOActionComboStack const *a); G_END_DECLS -#endif /* __GO_ACTION_COMBO_STACK_H__ */ +#endif /* _GO_ACTION_COMBO_STACK_H_ */ diff --git a/lib/goffice/gui-utils/go-action-combo-text.c b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-text.c similarity index 74% rename from lib/goffice/gui-utils/go-action-combo-text.c rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-text.c index c7a1966874..979f5e045c 100644 --- a/lib/goffice/gui-utils/go-action-combo-text.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-text.c @@ -15,15 +15,15 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "go-action-combo-text.h" #include "go-combo-box.h" #include "go-combo-text.h" -//#include -#include +#include "goffice-gtk.h" +#include #include #include @@ -75,15 +75,21 @@ static GSF_CLASS (GOToolComboText, go_tool_combo_text, /*****************************************************************************/ struct _GOActionComboText { - GtkAction base; + GtkAction base; GSList *elements; char const *largest_elem; - char *entry_val; + char *entry_val; + gboolean case_sensitive; }; typedef struct { GtkActionClass base; } GOActionComboTextClass; +enum { + PROP_0, + PROP_CASE_SENSITIVE +}; + static GObjectClass *combo_text_parent; static void @@ -108,6 +114,12 @@ go_action_combo_disconnect_proxy (GtkAction *action, } #endif +static gint +g_strcase_equal (gconstpointer s1, gconstpointer s2) +{ + return !go_utf8_collate_casefold ((const gchar*) s1, (const gchar*) s2); +} + static gboolean cb_entry_changed (GoComboText *ct, char const *text, GOActionComboText *taction) { @@ -124,16 +136,16 @@ go_action_combo_create_tool_item (GtkAction *act) GSList *ptr; int tmp, w = -1; - tool->combo = (GoComboText *)go_combo_text_new (NULL); + tool->combo = (GoComboText *)go_combo_text_new (taction->case_sensitive ? NULL : g_strcase_equal); if (taction->largest_elem != NULL) - w = gnm_measure_string ( + w = go_pango_measure_string ( gtk_widget_get_pango_context (GTK_WIDGET (tool->combo)), go_combo_text_get_entry (tool->combo)->style->font_desc, taction->largest_elem); for (ptr = taction->elements; ptr != NULL ; ptr = ptr->next) { go_combo_text_add_item (tool->combo, ptr->data); if (taction->largest_elem == NULL) { - tmp = gnm_measure_string ( + tmp = go_pango_measure_string ( gtk_widget_get_pango_context (GTK_WIDGET (tool->combo)), go_combo_text_get_entry (tool->combo)->style->font_desc, ptr->data); @@ -146,10 +158,9 @@ go_action_combo_create_tool_item (GtkAction *act) _(gtk_action_get_name (act))); gtk_widget_set_size_request ( go_combo_text_get_entry (tool->combo), w, -1); - g_object_set (G_OBJECT (tool), "visible_vertical", FALSE, NULL); + g_object_set (G_OBJECT (tool), "visible-vertical", FALSE, NULL); go_combo_box_set_relief (GO_COMBO_BOX (tool->combo), GTK_RELIEF_NONE); - go_combo_box_set_tearable (GO_COMBO_BOX (tool->combo), TRUE); gtk_container_add (GTK_CONTAINER (tool), GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool->combo)); gtk_widget_show (GTK_WIDGET (tool)); @@ -164,6 +175,41 @@ go_action_combo_text_finalize (GObject *obj) { combo_text_parent->finalize (obj); } + +static void +go_action_combo_text_set_property (GObject *object, + guint prop_id, + GValue const *value, + GParamSpec *pspec) +{ + GOActionComboText *taction = GO_ACTION_COMBO_TEXT (object); + + switch (prop_id) { + case PROP_CASE_SENSITIVE: + taction->case_sensitive = g_value_get_boolean (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +go_action_combo_text_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GOActionComboText *taction = GO_ACTION_COMBO_TEXT (object); + + switch (prop_id) { + case PROP_CASE_SENSITIVE: + g_value_set_boolean (value, taction->case_sensitive); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + static void go_action_combo_text_class_init (GtkActionClass *gtk_act_klass) { @@ -178,6 +224,17 @@ go_action_combo_text_class_init (GtkActionClass *gtk_act_klass) gtk_act_klass->connect_proxy = go_action_combo_stack_connect_proxy; gtk_act_klass->disconnect_proxy = go_action_combo_stack_disconnect_proxy; #endif + + gobject_klass->set_property = go_action_combo_text_set_property; + gobject_klass->get_property = go_action_combo_text_get_property; + + g_object_class_install_property (gobject_klass, + PROP_CASE_SENSITIVE, + g_param_spec_boolean ("case-sensitive", _("Case Sensitive"), + _("Should the text comparasion be case sensitive"), + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | + GSF_PARAM_STATIC)); } GSF_CLASS (GOActionComboText, go_action_combo_text, @@ -202,6 +259,15 @@ go_action_combo_text_get_entry (GOActionComboText const *a) return a->entry_val; } +/** + * go_action_combo_text_set_entry : + * @taction : + * @text : + * @dir : + * + * Set the entry of any toolbar proxies of @taction to @text. Does not + * generate an 'activate' signal. + **/ void go_action_combo_text_set_entry (GOActionComboText *taction, char const *text, GOActionComboTextSearchDir dir) diff --git a/lib/goffice/gui-utils/go-action-combo-text.h b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-text.h similarity index 88% rename from lib/goffice/gui-utils/go-action-combo-text.h rename to lib/goffice-0.0.4/goffice/gtk/go-action-combo-text.h index 19532b4fee..58d9dd9d5d 100644 --- a/lib/goffice/gui-utils/go-action-combo-text.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-action-combo-text.h @@ -1,8 +1,8 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /** - * go-action-combo.h: A custom GOActionCombo to handle undo/redo menus/toolbars + * go-action-combo-text.h: A custom GOActionCombo to handle lists of text * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2003-2005 Jody Goldberg (jody@gnome.org) * * 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 @@ -19,8 +19,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **/ -#ifndef __GO_ACTION_COMBO_TEXT_H__ -#define __GO_ACTION_COMBO_TEXT_H__ +#ifndef _GO_ACTION_COMBO_TEXT_H_ +#define _GO_ACTION_COMBO_TEXT_H_ #include @@ -49,4 +49,4 @@ void go_action_combo_text_set_entry (GOActionComboText *a, G_END_DECLS -#endif /* __GO_ACTION_COMBO_TEXT_H__ */ +#endif /* _GO_ACTION_COMBO_TEXT_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/go-charmap-sel.c b/lib/goffice-0.0.4/goffice/gtk/go-charmap-sel.c new file mode 100644 index 0000000000..db1343ee8a --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-charmap-sel.c @@ -0,0 +1,659 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * A charmap selector widget. + * + * Copyright (C) 2003-2005 Andreas J. Guelzow + * + * based on code by: + * Copyright (C) 2000 Marco Pesenti Gritti + * from the galeon code base + * + * 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, 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. + */ + +#include +#include "go-charmap-sel.h" +#include "go-optionmenu.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CS(x) GO_CHARMAP_SEL (x) + +#define CHARMAP_NAME_KEY "Name of Character Encoding" + +/* ------------------------------------------------------------------------- */ + +typedef enum { + LG_ARABIC, + LG_BALTIC, + LG_CENTRAL_EUROPEAN, + LG_CHINESE, + LG_CYRILLIC, + LG_GREEK, + LG_HEBREW, + LG_INDIAN, + LG_JAPANESE, + LG_KOREAN, + LG_TURKISH, + LG_UNICODE, + LG_VIETNAMESE, + LG_WESTERN, + LG_OTHER, + LG_LAST +} LanguageGroup; + +typedef struct +{ + char const *group_name; + LanguageGroup const lgroup; +} +LGroupInfo; + +static LGroupInfo lgroups[] = { + {N_("Arabic"), LG_ARABIC}, + {N_("Baltic"), LG_BALTIC}, + {N_("Central European"), LG_CENTRAL_EUROPEAN}, + {N_("Chinese"), LG_CHINESE}, + {N_("Cyrillic"), LG_CYRILLIC}, + {N_("Greek"), LG_GREEK}, + {N_("Hebrew"), LG_HEBREW}, + {N_("Indian"), LG_INDIAN}, + {N_("Japanese"), LG_JAPANESE}, + {N_("Korean"), LG_KOREAN}, + {N_("Turkish"), LG_TURKISH}, + {N_("Unicode"), LG_UNICODE}, + {N_("Vietnamese"), LG_VIETNAMESE}, + {N_("Western"), LG_WESTERN}, + {N_("Other"), LG_OTHER}, + {NULL, LG_LAST} +}; + +static int +lgroups_order (const void *_a, const void *_b) +{ + const LGroupInfo *a = (const LGroupInfo *)_a; + const LGroupInfo *b = (const LGroupInfo *)_b; + + return g_utf8_collate (_(a->group_name), _(b->group_name)); +} + +/* ------------------------------------------------------------------------- */ + +typedef enum { + CI_MINOR, + CI_MAJOR +} CharsetImportance; + +typedef struct { + gchar const *charset_title; + gchar const *aliases; + LanguageGroup const lgroup; + CharsetImportance const imp; + /* Generated stuff follows. */ + char *to_utf8_iconv_name, *from_utf8_iconv_name; +} CharsetInfo; + +static CharsetInfo charset_trans_array[] = { + {N_("Arabic (IBM-864)"), "IBM864", LG_ARABIC, CI_MINOR}, + {N_("Arabic (IBM-864-I)"), "IBM864i", LG_ARABIC, CI_MINOR}, + {N_("Arabic (ISO-8859-6)"), "ISO-8859-6", LG_ARABIC, CI_MINOR}, + {N_("Arabic (ISO-8859-6-E)"), "ISO-8859-6-E", LG_ARABIC, CI_MINOR}, + + {N_("Arabic (ISO-8859-6-I)"), "ISO-8859-6-I", LG_ARABIC, CI_MINOR}, + {N_("Arabic (MacArabic)"), "x-mac-arabic", LG_ARABIC, CI_MINOR}, + {N_("Arabic (Windows-1256)"), "windows-1256", LG_ARABIC, CI_MINOR}, + {N_("Armenian (ARMSCII-8)"), "armscii-8", LG_OTHER, CI_MINOR}, + {N_("Baltic (ISO-8859-13)"), "ISO-8859-13", LG_BALTIC, CI_MINOR}, + {N_("Baltic (ISO-8859-4)"), "ISO-8859-4", LG_BALTIC, CI_MINOR}, + {N_("Baltic (Windows-1257)"), "windows-1257", LG_BALTIC, CI_MINOR}, + {N_("Celtic (ISO-8859-14)"), "ISO-8859-14", LG_OTHER, CI_MINOR}, + {N_("Central European (IBM-852)"), "IBM852", LG_CENTRAL_EUROPEAN, CI_MINOR}, + {N_("Central European (ISO-8859-2)"), "ISO-8859-2", LG_CENTRAL_EUROPEAN, CI_MINOR}, + {N_("Central European (MacCE)"), "x-mac-ce", LG_CENTRAL_EUROPEAN, CI_MINOR}, + {N_("Central European (Windows-1250)"), "windows-1250", LG_CENTRAL_EUROPEAN, CI_MINOR}, + {N_("Chinese Simplified (GB18030)"), "gb18030", LG_CHINESE, CI_MINOR}, + {N_("Chinese Simplified (GB2312)"), "GB2312", LG_CHINESE, CI_MINOR}, + {N_("Chinese Simplified (GBK)"), "x-gbk", LG_CHINESE, CI_MINOR}, + {N_("Chinese Simplified (HZ)"), "HZ-GB-2312", LG_CHINESE, CI_MINOR}, + {N_("Chinese Simplified (Windows-936)"), "windows-936", LG_CHINESE, CI_MINOR}, + {N_("Chinese Traditional (Big5)"), "Big5", LG_CHINESE, CI_MINOR}, + {N_("Chinese Traditional (Big5-HKSCS)"), "Big5-HKSCS", LG_CHINESE, CI_MINOR}, + {N_("Chinese Traditional (EUC-TW)"), "x-euc-tw", LG_CHINESE, CI_MINOR}, + {N_("Croatian (MacCroatian)"), "x-mac-croatian", LG_CENTRAL_EUROPEAN, CI_MINOR}, + {N_("Cyrillic (IBM-855)"), "IBM855", LG_CYRILLIC, CI_MINOR}, + {N_("Cyrillic (ISO-8859-5)"), "ISO-8859-5", LG_CYRILLIC, CI_MINOR}, + {N_("Cyrillic (ISO-IR-111)"), "ISO-IR-111", LG_CYRILLIC, CI_MINOR}, + {N_("Cyrillic (KOI8-R)"), "KOI8-R", LG_CYRILLIC, CI_MINOR}, + {N_("Cyrillic (MacCyrillic)"), "x-mac-cyrillic", LG_CYRILLIC, CI_MINOR}, + {N_("Cyrillic (Windows-1251)"), "windows-1251", LG_CYRILLIC, CI_MINOR}, + {N_("Russian (CP-866)"), "IBM866", LG_CYRILLIC, CI_MINOR}, + {N_("Ukrainian (KOI8-U)"), "KOI8-U", LG_CYRILLIC, CI_MINOR}, + {N_("Ukrainian (MacUkrainian)"), "x-mac-ukrainian", LG_CYRILLIC, CI_MINOR}, + {N_("English (ASCII)"), "ANSI_X3.4-1968#ASCII", LG_WESTERN, CI_MAJOR}, + {N_("Farsi (MacFarsi)"), "x-mac-farsi", LG_OTHER, CI_MINOR}, + {N_("Georgian (GEOSTD8)"), "geostd8", LG_OTHER, CI_MINOR}, + {N_("Greek (ISO-8859-7)"), "ISO-8859-7", LG_GREEK, CI_MINOR}, + {N_("Greek (MacGreek)"), "x-mac-greek", LG_GREEK, CI_MINOR}, + {N_("Greek (Windows-1253)"), "windows-1253", LG_GREEK, CI_MINOR}, + {N_("Gujarati (MacGujarati)"), "x-mac-gujarati", LG_INDIAN, CI_MINOR}, + {N_("Gurmukhi (MacGurmukhi)"), "x-mac-gurmukhi", LG_INDIAN, CI_MINOR}, + {N_("Hebrew (IBM-862)"), "IBM862", LG_HEBREW, CI_MINOR}, + {N_("Hebrew (ISO-8859-8-E)"), "ISO-8859-8-E", LG_HEBREW, CI_MINOR}, + {N_("Hebrew (ISO-8859-8-I)"), "ISO-8859-8-I", LG_HEBREW, CI_MINOR}, + {N_("Hebrew (MacHebrew)"), "x-mac-hebrew", LG_HEBREW, CI_MINOR}, + {N_("Hebrew (Windows-1255)"), "windows-1255", LG_HEBREW, CI_MINOR}, + {N_("Hindi (MacDevanagari)"), "x-mac-devanagari", LG_INDIAN, CI_MINOR}, + {N_("Icelandic (MacIcelandic)"), "x-mac-icelandic", LG_OTHER, CI_MINOR}, + {N_("Japanese (EUC-JP)"), "EUC-JP", LG_JAPANESE, CI_MINOR}, + {N_("Japanese (ISO-2022-JP)"), "ISO-2022-JP", LG_JAPANESE, CI_MINOR}, + {N_("Japanese (Shift_JIS)"), "Shift_JIS", LG_JAPANESE, CI_MINOR}, + {N_("Korean (EUC-KR)"), "EUC-KR", LG_KOREAN, CI_MINOR}, + {N_("Korean (ISO-2022-KR)"), "ISO-2022-KR", LG_KOREAN, CI_MINOR}, + {N_("Korean (JOHAB)"), "x-johab", LG_KOREAN, CI_MINOR}, + {N_("Korean (UHC)"), "x-windows-949", LG_KOREAN, CI_MINOR}, + {N_("Nordic (ISO-8859-10)"), "ISO-8859-10", LG_OTHER, CI_MINOR}, + {N_("Romanian (MacRomanian)"), "x-mac-romanian", LG_OTHER, CI_MINOR}, + {N_("Romanian (ISO-8859-16)"), "ISO-8859-16", LG_OTHER, CI_MINOR}, + {N_("South European (ISO-8859-3)"), "ISO-8859-3", LG_OTHER, CI_MINOR}, + {N_("Thai (TIS-620)"), "TIS-620", LG_OTHER, CI_MINOR}, + {N_("Turkish (IBM-857)"), "IBM857", LG_TURKISH, CI_MINOR}, + {N_("Turkish (ISO-8859-9)"), "ISO-8859-9", LG_TURKISH, CI_MINOR}, + {N_("Turkish (MacTurkish)"), "x-mac-turkish", LG_TURKISH, CI_MINOR}, + {N_("Turkish (Windows-1254)"), "windows-1254", LG_TURKISH, CI_MINOR}, + {N_("Unicode (UTF-7)"), "UTF-7", LG_UNICODE, CI_MINOR}, + {N_("Unicode (UTF-8)"), "UTF-8", LG_UNICODE, CI_MAJOR}, + {N_("Unicode (UTF-16BE)"), "UTF-16BE", LG_UNICODE, CI_MINOR}, + {N_("Unicode (UTF-16LE)"), "UTF-16LE", LG_UNICODE, CI_MINOR}, + {N_("Unicode (UTF-32BE)"), "UTF-32BE", LG_UNICODE, CI_MINOR}, + {N_("Unicode (UTF-32LE)"), "UTF-32LE", LG_UNICODE, CI_MINOR}, + {N_("User Defined"), "x-user-defined", LG_OTHER, CI_MINOR}, + {N_("Vietnamese (TCVN)"), "x-viet-tcvn5712", LG_VIETNAMESE, CI_MINOR}, + {N_("Vietnamese (VISCII)"), "VISCII", LG_VIETNAMESE, CI_MINOR}, + {N_("Vietnamese (VPS)"), "x-viet-vps", LG_VIETNAMESE, CI_MINOR}, + {N_("Vietnamese (Windows-1258)"), "windows-1258", LG_VIETNAMESE, CI_MINOR}, + {N_("Visual Hebrew (ISO-8859-8)"), "ISO-8859-8", LG_HEBREW, CI_MINOR}, + {N_("Western (IBM-850)"), "IBM850", LG_WESTERN, CI_MINOR}, + {N_("Western (ISO-8859-1)"), "ISO-8859-1", LG_WESTERN, CI_MAJOR}, + {N_("Western (ISO-8859-15)"), "ISO-8859-15", LG_WESTERN, CI_MINOR}, + {N_("Western (MacRoman)"), "x-mac-roman", LG_WESTERN, CI_MINOR}, + {N_("Western (Windows-1252)"), "windows-1252", LG_WESTERN, CI_MINOR}, + /* charsets without possibly translatable names */ + {"T61.8bit", "T61.8bit", LG_OTHER, CI_MINOR}, + {"x-imap4-modified-utf7", "x-imap4-modified-utf7", LG_UNICODE, CI_MINOR}, + {"x-u-escaped", "x-u-escaped", LG_OTHER, CI_MINOR}, + {NULL, NULL, LG_LAST, 0} +}; + +static int +charset_order (const void *_a, const void *_b) +{ + const CharsetInfo *a = (const CharsetInfo *)_a; + const CharsetInfo *b = (const CharsetInfo *)_b; + + if (a->lgroup != b->lgroup) + return b->lgroup - a->lgroup; + + if (a->imp != b->imp) + return b->imp - a->imp; + + return g_utf8_collate (_(a->charset_title), _(b->charset_title)); +} + +/* ------------------------------------------------------------------------- */ + +/* name -> CharsetInfo* mapping */ +static GHashTable *encoding_hash; + +struct _GOCharmapSel { + GtkHBox box; + GOOptionMenu *encodings; + GtkMenu *encodings_menu; + GOCharmapSelTestDirection test; +}; + +typedef struct { + GtkHBoxClass parent_class; + + gboolean (* charmap_changed) (GOCharmapSel *cs, char const *new_charmap); +} GOCharmapSelClass; + + +typedef GOCharmapSel Cs; +typedef GOCharmapSelClass CsClass; + +/* Signals we emit */ +enum { + CHARMAP_CHANGED, + LAST_SIGNAL +}; + +enum { + PROP_0, + PROP_TEST_DIRECTION +}; + + + + +static guint cs_signals[LAST_SIGNAL] = { 0 }; + +static void cs_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); + +static void cs_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +static gboolean +iconv_supported (const char *to, const char *from) +{ + GIConv ic = g_iconv_open (to, from); + if (ic == NULL || ic == (GIConv)-1) + return FALSE; + + g_iconv_close (ic); + return TRUE; +} + +const char * +go_charmap_sel_get_encoding_name (G_GNUC_UNUSED GOCharmapSel *cs, + const char *encoding) +{ + CharsetInfo const *ci; + + g_return_val_if_fail (encoding != NULL, NULL); + + ci = g_hash_table_lookup (encoding_hash, encoding); + return ci ? _(ci->charset_title) : NULL; +} + +static char const * +get_locale_encoding_name (GOCharmapSel *cs) +{ + char const *locale_encoding; + char const *name; + + g_get_charset (&locale_encoding); + name = go_charmap_sel_get_encoding_name (cs, locale_encoding); + return name ? name : locale_encoding; +} + +static void +encodings_changed_cb (GOOptionMenu *optionmenu, GOCharmapSel *cs) +{ + g_return_if_fail (IS_GO_CHARMAP_SEL (cs)); + g_return_if_fail (optionmenu == cs->encodings); + + g_signal_emit (G_OBJECT (cs), + cs_signals[CHARMAP_CHANGED], + 0, + go_charmap_sel_get_encoding (cs)); +} + +static void +set_menu_to_default (GOCharmapSel *cs, gint item) +{ + GSList sel = { GINT_TO_POINTER (item - 1), NULL}; + + g_return_if_fail (cs != NULL && IS_GO_CHARMAP_SEL (cs)); + + go_option_menu_set_history (cs->encodings, &sel); +} + +static gboolean +cs_mnemonic_activate (GtkWidget *w, gboolean group_cycling) +{ + GOCharmapSel *cs = GO_CHARMAP_SEL (w); + gtk_widget_grab_focus (GTK_WIDGET (cs->encodings)); + return TRUE; +} + +static void +cs_emphasize_label (GtkLabel *label) +{ + char *text = g_strconcat ("", gtk_label_get_label (label), "", NULL); + + gtk_label_set_use_underline (label, FALSE); + gtk_label_set_use_markup (label, TRUE); + gtk_label_set_label (label, text); + g_free (text); +} + +static void +cs_init (GOCharmapSel *cs) +{ + cs->test = GO_CHARMAP_SEL_TO_UTF8; + + cs->encodings = GO_OPTION_MENU (go_option_menu_new ()); + + g_signal_connect (G_OBJECT (cs->encodings), "changed", + G_CALLBACK (encodings_changed_cb), cs); + gtk_box_pack_start (GTK_BOX (cs), GTK_WIDGET (cs->encodings), + TRUE, TRUE, 0); +} + + +static void +cs_build_menu (GOCharmapSel *cs) +{ + GtkWidget *item; + GtkMenu *menu; + LGroupInfo const *lgroup = lgroups; + gint lg_cnt = 0; + + menu = GTK_MENU (gtk_menu_new ()); + + while (lgroup->group_name) { + CharsetInfo const *charset_trans; + GtkMenu *submenu; + gint cnt = 0; + + item = gtk_menu_item_new_with_label (_(lgroup->group_name)); + + submenu = GTK_MENU (gtk_menu_new ()); + charset_trans = charset_trans_array; + + while (charset_trans->lgroup != LG_LAST) { + GtkWidget *subitem; + if (charset_trans->lgroup == lgroup->lgroup) { + const char *name = (cs->test == GO_CHARMAP_SEL_TO_UTF8) + ? charset_trans->to_utf8_iconv_name + : charset_trans->from_utf8_iconv_name; + if (name) { + subitem = gtk_check_menu_item_new_with_label + (_(charset_trans->charset_title)); + gtk_widget_show (subitem); + gtk_menu_shell_append (GTK_MENU_SHELL (submenu), subitem); + if (charset_trans->imp == CI_MAJOR) + cs_emphasize_label (GTK_LABEL (gtk_bin_get_child (GTK_BIN (subitem)))); + g_object_set_data (G_OBJECT (subitem), CHARMAP_NAME_KEY, + (gpointer)name); + cnt++; + } else if (0) { + g_print ("Unsupported: %s\n", charset_trans->aliases); + } + } + charset_trans++; + } + if (cnt > 0) { + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), GTK_WIDGET (submenu)); + gtk_widget_show (item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + lg_cnt++; + } else { + g_object_unref (item); + } + lgroup++; + } + item = gtk_separator_menu_item_new (); + gtk_widget_show (item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + lg_cnt++; + + { + char *locale_encoding_menu_title = g_strconcat (_("Locale: "), + get_locale_encoding_name (cs), + NULL); + item = gtk_check_menu_item_new_with_label (locale_encoding_menu_title); + g_free (locale_encoding_menu_title); + gtk_widget_show (item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + lg_cnt++; + cs_emphasize_label (GTK_LABEL (gtk_bin_get_child (GTK_BIN (item)))); + } + + go_option_menu_set_menu (cs->encodings, GTK_WIDGET (menu)); + cs->encodings_menu = menu; + set_menu_to_default (cs, lg_cnt); +} + +static void +cs_class_init (GtkWidgetClass *widget_klass) +{ + CharsetInfo *ci; + + GObjectClass *gobject_class = G_OBJECT_CLASS (widget_klass); + widget_klass->mnemonic_activate = cs_mnemonic_activate; + + gobject_class->set_property = cs_set_property; + gobject_class->get_property = cs_get_property; + + cs_signals[CHARMAP_CHANGED] = + g_signal_new ("charmap_changed", + GO_CHARMAP_SEL_TYPE, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GOCharmapSelClass, charmap_changed), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); + + g_object_class_install_property (gobject_class, + PROP_TEST_DIRECTION, + g_param_spec_uint ("TestDirection", + _("Conversion Direction"), + _("This value determines which iconv test to perform."), + (guint)GO_CHARMAP_SEL_TO_UTF8, + (guint)GO_CHARMAP_SEL_FROM_UTF8, + (guint)GO_CHARMAP_SEL_TO_UTF8, + G_PARAM_READWRITE)); + + qsort (lgroups, G_N_ELEMENTS (lgroups) - 2, sizeof (lgroups[0]), + lgroups_order); + qsort (charset_trans_array, G_N_ELEMENTS (charset_trans_array) - 1, + sizeof (charset_trans_array[0]), charset_order); + + encoding_hash = + g_hash_table_new_full (go_ascii_strcase_hash, + go_ascii_strcase_equal, + (GDestroyNotify)g_free, + NULL); + + for (ci = charset_trans_array; ci->charset_title; ci++) { + const char *aliases = ci->aliases; + char *autoaliases = NULL; + + if (strchr (aliases, '#') == 0) { + /* Sigh. This sucks quite a lot. */ + if (strncmp (aliases, "ISO-", 4) == 0) { + autoaliases = + g_strconcat (aliases, + "#ISO", aliases + 4, + "#ISO_", aliases + 4, + NULL); + } + + if (autoaliases) + aliases = autoaliases; + } + + ci->to_utf8_iconv_name = ci->from_utf8_iconv_name = NULL; + while (aliases) { + const char *sep = strchr (aliases, '#'); + char *alias; + + if (sep) { + alias = g_strndup (aliases, sep - aliases); + aliases = sep + 1; + } else { + alias = g_strdup (aliases); + aliases = NULL; + } + + if (ci->to_utf8_iconv_name == NULL && + iconv_supported ("UTF-8", alias)) { + ci->to_utf8_iconv_name = g_strdup (alias); + } + + if (ci->from_utf8_iconv_name == NULL && + iconv_supported (alias, "UTF-8")) { + ci->from_utf8_iconv_name = g_strdup (alias); + } + + g_hash_table_insert (encoding_hash, alias, ci); + } + + g_free (autoaliases); + } +} + +GSF_CLASS (GOCharmapSel, go_charmap_sel, + cs_class_init, cs_init, GTK_TYPE_HBOX) + +GtkWidget * +go_charmap_sel_new (GOCharmapSelTestDirection test) +{ + return g_object_new (GO_CHARMAP_SEL_TYPE, "TestDirection", test, NULL); +} + +gchar const * +go_charmap_sel_get_encoding (GOCharmapSel *cs) +{ + GtkMenuItem *selection; + char const *locale_encoding; + char const *encoding; + + g_get_charset (&locale_encoding); + + g_return_val_if_fail (IS_GO_CHARMAP_SEL (cs), locale_encoding); + + selection = GTK_MENU_ITEM (go_option_menu_get_history (cs->encodings)); + encoding = (char const *) g_object_get_data (G_OBJECT (selection), + CHARMAP_NAME_KEY); + return encoding ? encoding : locale_encoding; +} + +struct cb_find_entry { + const char *enc; + gboolean found; + int i; + GSList *path; +}; + +static void +cb_find_entry (GtkMenuItem *w, struct cb_find_entry *cl) +{ + GtkWidget *sub; + + if (cl->found) + return; + + sub = gtk_menu_item_get_submenu (w); + if (sub) { + GSList *tmp = cl->path = g_slist_prepend (cl->path, GINT_TO_POINTER (cl->i)); + cl->i = 0; + + gtk_container_foreach (GTK_CONTAINER (sub), (GtkCallback)cb_find_entry, cl); + if (cl->found) + return; + + cl->i = GPOINTER_TO_INT (cl->path->data); + cl->path = cl->path->next; + g_slist_free_1 (tmp); + } else { + const char *this_enc = + g_object_get_data (G_OBJECT (w), CHARMAP_NAME_KEY); + if (this_enc && strcmp (this_enc, cl->enc) == 0) { + cl->found = TRUE; + cl->path = g_slist_prepend (cl->path, GINT_TO_POINTER (cl->i)); + cl->path = g_slist_reverse (cl->path); + return; + } + } + cl->i++; +} + +gboolean +go_charmap_sel_set_encoding (GOCharmapSel *cs, const char *enc) +{ + struct cb_find_entry cl; + CharsetInfo const *ci; + + g_return_val_if_fail (IS_GO_CHARMAP_SEL (cs), FALSE); + g_return_val_if_fail (enc != NULL, FALSE); + + ci = g_hash_table_lookup (encoding_hash, enc); + if (!ci) + return FALSE; + + enc = ci->to_utf8_iconv_name; + if (!enc) + return FALSE; + + cl.enc = enc; + cl.found = FALSE; + cl.i = 0; + cl.path = NULL; + + gtk_container_foreach (GTK_CONTAINER (cs->encodings_menu), + (GtkCallback)cb_find_entry, + &cl); + if (!cl.found) + return FALSE; + + go_option_menu_set_history (cs->encodings, cl.path); + g_slist_free (cl.path); + + return TRUE; +} + +static void +cs_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GOCharmapSel *cs = GO_CHARMAP_SEL (object); + + switch (prop_id) { + case PROP_TEST_DIRECTION: + cs->test = g_value_get_uint (value); + cs_build_menu (cs); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + +static void +cs_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GOCharmapSel *cs = GO_CHARMAP_SEL (object); + + switch (prop_id) { + case PROP_TEST_DIRECTION: + g_value_set_uint (value, (guint)cs->test); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} diff --git a/lib/goffice-0.0.4/goffice/gtk/go-charmap-sel.h b/lib/goffice-0.0.4/goffice/gtk/go-charmap-sel.h new file mode 100644 index 0000000000..66a44aafa7 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-charmap-sel.h @@ -0,0 +1,53 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2003 Andreas J. Guelzow + * + * based on code by: + * Copyright (C) 2000 Marco Pesenti Gritti + * from the galeon code base + * + * 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, 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. + */ + +#ifndef _GO_CHARMAP_SEL_H_ +#define _GO_CHARMAP_SEL_H_ + +#include +#include + +G_BEGIN_DECLS + +#define GO_CHARMAP_SEL_TYPE (go_charmap_sel_get_type ()) +#define GO_CHARMAP_SEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GO_CHARMAP_SEL_TYPE, GOCharmapSel)) +#define IS_GO_CHARMAP_SEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GO_CHARMAP_SEL_TYPE)) + +typedef struct _GOCharmapSel GOCharmapSel; + +typedef enum { + GO_CHARMAP_SEL_TO_UTF8 = 0, + GO_CHARMAP_SEL_FROM_UTF8 +} GOCharmapSelTestDirection; + +GType go_charmap_sel_get_type (void); +GtkWidget * go_charmap_sel_new (GOCharmapSelTestDirection test); + +gchar const *go_charmap_sel_get_encoding (GOCharmapSel *cs); +gboolean go_charmap_sel_set_encoding (GOCharmapSel *cs, const char *enc); + +const char *go_charmap_sel_get_encoding_name (GOCharmapSel *cs, const char *enc); + +G_END_DECLS + +#endif /* _GO_CHARMAP_SEL_H_ */ diff --git a/lib/goffice/gui-utils/go-color-group.c b/lib/goffice-0.0.4/goffice/gtk/go-color-group.c similarity index 97% rename from lib/goffice/gui-utils/go-color-group.c rename to lib/goffice-0.0.4/goffice/gtk/go-color-group.c index dce2e8142c..0ff820fe3d 100644 --- a/lib/goffice/gui-utils/go-color-group.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-color-group.c @@ -22,8 +22,8 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ #include @@ -75,7 +75,7 @@ go_color_group_class_init (GOColorGroupClass *klass) GO_COLOR_GROUP_TYPE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GOColorGroupClass, history_changed), - (GSignalAccumulator) NULL, NULL, + NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } diff --git a/lib/goffice/gui-utils/go-color-group.h b/lib/goffice-0.0.4/goffice/gtk/go-color-group.h similarity index 91% rename from lib/goffice/gui-utils/go-color-group.h rename to lib/goffice-0.0.4/goffice/gtk/go-color-group.h index 987cfcba4f..d2abf177cf 100644 --- a/lib/goffice/gui-utils/go-color-group.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-color-group.h @@ -23,12 +23,12 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ -#ifndef GO_COLOR_GROUP_H -#define GO_COLOR_GROUP_H +#ifndef _GO_COLOR_GROUP_H_ +#define _GO_COLOR_GROUP_H_ #include #include @@ -57,4 +57,4 @@ void go_color_group_add_color (GOColorGroup *cg, GOColor c); G_END_DECLS -#endif /* GO_COLOR_GROUP_H */ +#endif /* _GO_COLOR_GROUP_H_ */ diff --git a/lib/goffice/gui-utils/go-color-palette.c b/lib/goffice-0.0.4/goffice/gtk/go-color-palette.c similarity index 98% rename from lib/goffice/gui-utils/go-color-palette.c rename to lib/goffice-0.0.4/goffice/gtk/go-color-palette.c index 86aae777f1..854050cd91 100644 --- a/lib/goffice/gui-utils/go-color-palette.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-color-palette.c @@ -23,17 +23,16 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ #include #include "go-color-palette.h" -#include "go-marshalers.h" +#include "goffice-gtk.h" +#include #include -#include -#include #include #include #include @@ -42,13 +41,13 @@ #include #include #include +#include #include #include #include #include #include - #include typedef struct _ColorNamePair ColorNamePair; @@ -179,6 +178,8 @@ create_color_sel (GObject *action_proxy, GOColor c, GCallback handler, gboolean gtk_color_selection_set_current_color (colorsel, go_color_to_gdk (c, &gdk)); gtk_color_selection_set_has_opacity_control (colorsel, allow_alpha); + if (allow_alpha) + gtk_color_selection_set_current_alpha (colorsel, UINT_RGBA_A(c) * 257); g_signal_connect_object (dialog, "response", handler, action_proxy, 0); @@ -325,9 +326,7 @@ swatch_activated (GOColorPalette *pal, GtkBin *button) static gboolean cb_swatch_release_event (GtkBin *button, GdkEventButton *event, GOColorPalette *pal) { -#ifdef GOG_WARN_TODO -#warning TODO do I want to check for which button ? -#endif +//#warning TODO do I want to check for which button ? swatch_activated (pal, button); return TRUE; } @@ -479,8 +478,8 @@ custom_colors : &color_name, col, row + 1); } - w = gnumeric_button_new_with_stock_image (_("Custom Color..."), - GTK_STOCK_SELECT_COLOR); + w = go_gtk_button_new_with_stock (_("Custom Color..."), + GTK_STOCK_SELECT_COLOR); gtk_button_set_alignment (GTK_BUTTON (w), 0., .5); gtk_table_attach (GTK_TABLE (table), w, 0, cols, row + 2, row + 3, GTK_FILL | GTK_EXPAND, 0, 0, 0); diff --git a/lib/goffice/gui-utils/go-color-palette.h b/lib/goffice-0.0.4/goffice/gtk/go-color-palette.h similarity index 92% rename from lib/goffice/gui-utils/go-color-palette.h rename to lib/goffice-0.0.4/goffice/gtk/go-color-palette.h index 0dfb660a7c..d31dcdda8d 100644 --- a/lib/goffice/gui-utils/go-color-palette.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-color-palette.h @@ -23,14 +23,14 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ -#ifndef GO_GO_COLOR_PALETTE_H -#define GO_GO_COLOR_PALETTE_H +#ifndef _GO_COLOR_PALETTE_H_ +#define _GO_COLOR_PALETTE_H_ -#include +#include #include G_BEGIN_DECLS @@ -63,4 +63,4 @@ void go_color_palette_set_allow_alpha (GOColorPalette *p, gboolean allow_alpha); G_END_DECLS -#endif /* GO_PALETTE_H */ +#endif /* __GO_COLOR_PALETTE_H__ */ diff --git a/lib/goffice/gui-utils/go-combo-box.c b/lib/goffice-0.0.4/goffice/gtk/go-combo-box.c similarity index 94% rename from lib/goffice/gui-utils/go-combo-box.c rename to lib/goffice-0.0.4/goffice/gtk/go-combo-box.c index 99ee902eff..2360478a48 100644 --- a/lib/goffice/gui-utils/go-combo-box.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-box.c @@ -20,13 +20,13 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ #include #include "go-combo-box.h" -#include "go-marshalers.h" +#include #include #include @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -156,7 +157,7 @@ do_focus_change (GtkWidget *widget, gboolean in) gtk_widget_event (widget, (GdkEvent *)&fevent); - g_object_notify (G_OBJECT (widget), "has_focus"); + g_object_notify (G_OBJECT (widget), "has-focus"); g_object_unref (widget); } @@ -232,6 +233,17 @@ go_combo_box_mnemonic_activate (GtkWidget *w, gboolean group_cycling) return TRUE; } +static void +go_combo_box_style_set (GtkWidget *widget, + G_GNUC_UNUSED GtkStyle *prev_style) +{ + gboolean add_tearoffs; + gtk_widget_style_get (widget, + "add-tearoffs", &add_tearoffs, + NULL); + go_combo_box_set_tearable (GO_COMBO_BOX (widget), add_tearoffs); +} + static void go_combo_box_class_init (GObjectClass *object_class) { @@ -242,6 +254,16 @@ go_combo_box_class_init (GObjectClass *object_class) widget_class->mnemonic_activate = go_combo_box_mnemonic_activate; ((GtkObjectClass *)object_class)->destroy = go_combo_box_destroy; + gtk_widget_class_install_style_property + (widget_class, + g_param_spec_boolean ("add-tearoffs", + _("Add tearoffs to menus"), + _("Whether dropdowns should have a tearoff menu item"), + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + widget_class->style_set = go_combo_box_style_set; + go_combo_box_signals [POP_DOWN_DONE] = g_signal_new ( "pop_down_done", G_OBJECT_CLASS_TYPE (object_class), @@ -289,7 +311,7 @@ go_combo_popup_tear_off (GOComboBox *combo, gboolean set_position) if (!combo->priv->tearoff_window) { GtkWidget *tearoff; - gchar *title; + const gchar *title; /* FIXME: made this a toplevel, not a dialog ! */ tearoff = gtk_window_new (GTK_WINDOW_TOPLEVEL); @@ -301,12 +323,12 @@ go_combo_popup_tear_off (GOComboBox *combo, gboolean set_position) G_CALLBACK (cb_combo_keypress), combo); gtk_widget_realize (tearoff); - title = g_object_get_data (G_OBJECT (combo), "gnm-combo-title"); + title = go_combo_box_get_title (combo); if (title) gdk_window_set_title (tearoff->window, title); g_object_set (G_OBJECT (tearoff), - "allow_shrink", FALSE, - "allow_grow", TRUE, + "allow-shrink", FALSE, + "allow-grow", TRUE, NULL); gtk_window_set_transient_for (GTK_WINDOW (tearoff), @@ -522,8 +544,8 @@ go_combo_box_init (GOComboBox *combo_box) gtk_widget_ref (combo_box->priv->toplevel); gtk_object_sink (GTK_OBJECT (combo_box->priv->toplevel)); g_object_set (G_OBJECT (combo_box->priv->toplevel), - "allow_shrink", FALSE, - "allow_grow", TRUE, + "allow-shrink", FALSE, + "allow-grow", TRUE, NULL); combo_box->priv->popup = gtk_event_box_new (); @@ -682,7 +704,10 @@ go_combo_box_construct (GOComboBox *combo, gtk_box_pack_start (GTK_BOX (vbox), tearable, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), popdown_container, TRUE, TRUE, 0); combo->priv->tearable = tearable; + g_object_set (tearable, "no-show-all", TRUE, NULL); + go_combo_box_set_tearable (combo, FALSE); + go_combo_box_set_relief (combo, GTK_RELIEF_NORMAL); go_combo_box_set_display (combo, display_widget); @@ -703,6 +728,8 @@ go_combo_box_construct (GOComboBox *combo, * I guess the tearoff window could attach a listener to title change or * something. But I don't think we need the functionality, so I didn't bother * to investigate. + * + * MW: Just make it a property. */ void go_combo_box_set_title (GOComboBox *combo, char const *title) @@ -712,7 +739,7 @@ go_combo_box_set_title (GOComboBox *combo, char const *title) g_return_if_fail (klass != NULL); - g_object_set_data_full (G_OBJECT (combo), "gnm-combo-title", + g_object_set_data_full (G_OBJECT (combo), "go-combo-title", g_strdup (title), (GDestroyNotify) g_free); if (klass->set_title) @@ -722,7 +749,7 @@ go_combo_box_set_title (GOComboBox *combo, char const *title) char const * go_combo_box_get_title (GOComboBox *combo) { - return g_object_get_data (G_OBJECT (combo), "gnm-combo-title"); + return g_object_get_data (G_OBJECT (combo), "go-combo-title"); } /** @@ -759,9 +786,7 @@ void go_combo_box_set_tooltip (GOComboBox *c, GtkTooltips *tips, char const *text, char const *priv_text) { -#ifdef GOG_WARN_TODO -#warning this is ugly the tip moves as we jump from preview to arrow -#endif +//#warning this is ugly the tip moves as we jump from preview to arrow gtk_tooltips_set_tip (tips, c->priv->display_widget, text, priv_text); gtk_tooltips_set_tip (tips, c->priv->arrow_button, text, priv_text); } diff --git a/lib/goffice/gui-utils/go-combo-box.h b/lib/goffice-0.0.4/goffice/gtk/go-combo-box.h similarity index 97% rename from lib/goffice/gui-utils/go-combo-box.h rename to lib/goffice-0.0.4/goffice/gtk/go-combo-box.h index 2e4db09a40..9d916fa466 100644 --- a/lib/goffice/gui-utils/go-combo-box.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-box.h @@ -17,8 +17,8 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ #ifndef _GO_COMBO_BOX_H_ diff --git a/lib/goffice/gui-utils/go-combo-color.c b/lib/goffice-0.0.4/goffice/gtk/go-combo-color.c similarity index 97% rename from lib/goffice/gui-utils/go-combo-color.c rename to lib/goffice-0.0.4/goffice/gtk/go-combo-color.c index 317c63d3fa..a33949aed4 100644 --- a/lib/goffice/gui-utils/go-combo-color.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-color.c @@ -26,14 +26,14 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ #include #include "go-combo-color.h" -#include "go-marshalers.h" +#include #include "go-combo-box.h" #include "go-color-palette.h" @@ -260,9 +260,7 @@ go_combo_color_get_color (GOComboColor *cc, gboolean *is_default) void go_combo_color_set_color_gdk (GOComboColor *cc, GdkColor *color) { -#ifdef GOG_WARN_TODO -#warning convert to GOColor -#endif +//#warning convert to GOColor g_return_if_fail (IS_GO_COMBO_COLOR (cc)); if (color != NULL) @@ -337,8 +335,8 @@ go_combo_color_set_color_to_default (GOComboColor *cc) */ GtkWidget * go_combo_color_new (GdkPixbuf *icon, char const *no_color_label, - GOColor default_color, - GOColorGroup *color_group) + GOColor default_color, + GOColorGroup *color_group) { GOColor color; gboolean is_default; diff --git a/lib/goffice/gui-utils/go-combo-color.h b/lib/goffice-0.0.4/goffice/gtk/go-combo-color.h similarity index 91% rename from lib/goffice/gui-utils/go-combo-color.h rename to lib/goffice-0.0.4/goffice/gtk/go-combo-color.h index 363018962d..0a42e51c89 100644 --- a/lib/goffice/gui-utils/go-combo-color.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-color.h @@ -24,14 +24,14 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ -#ifndef GO_COMBO_COLOR_H -#define GO_COMBO_COLOR_H +#ifndef _GO_COMBO_COLOR_H_ +#define _GO_COMBO_COLOR_H_ #include -#include +#include #include #include @@ -61,4 +61,4 @@ void go_combo_color_set_instant_apply (GOComboColor *cc, gboolean active); G_END_DECLS -#endif /* GO_COMBO_COLOR_H */ +#endif /* _GO_COMBO_COLOR_H_ */ diff --git a/lib/goffice/gui-utils/go-combo-pixmaps.c b/lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.c similarity index 95% rename from lib/goffice/gui-utils/go-combo-pixmaps.c rename to lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.c index 79350af52d..8253333f9a 100644 --- a/lib/goffice/gui-utils/go-combo-pixmaps.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.c @@ -17,8 +17,8 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ #include @@ -185,9 +185,7 @@ swatch_activated (GOComboPixmaps *combo, GtkWidget *button) static gboolean cb_swatch_release_event (GtkWidget *button, GdkEventButton *event, GOComboPixmaps *combo) { -#ifdef GOG_WARN_TODO -#warning TODO do I want to check for which button ? -#endif +//#warning TODO do I want to check for which button ? return swatch_activated (combo, button); } static gboolean @@ -212,7 +210,7 @@ cb_swatch_key_press (GtkWidget *button, GdkEventKey *event, GOComboPixmaps *comb **/ void go_combo_pixmaps_add_element (GOComboPixmaps *combo, - GdkPixbuf const *pixbuf, int id, char const *tooltip) + GdkPixbuf *pixbuf, int id, char const *tooltip) { GtkWidget *button, *box; Element tmp; @@ -223,9 +221,9 @@ go_combo_pixmaps_add_element (GOComboPixmaps *combo, /* Wrap inside a vbox with a border so that we can see the focus indicator */ box = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (box), - gtk_image_new_from_pixbuf ((GdkPixbuf *)pixbuf), - TRUE, TRUE, 0); - g_object_unref ((GdkPixbuf *)pixbuf); + gtk_image_new_from_pixbuf (pixbuf), + TRUE, TRUE, 0); + g_object_unref (pixbuf); button = gtk_button_new (); gtk_container_set_border_width (GTK_CONTAINER (box), 2); @@ -240,7 +238,7 @@ go_combo_pixmaps_add_element (GOComboPixmaps *combo, row = col / combo->cols; col = col % combo->cols; - tmp.pixbuf = (GdkPixbuf *)pixbuf; + tmp.pixbuf = pixbuf; tmp.id = id; g_array_append_val (combo->elements, tmp); g_object_set_data (G_OBJECT (button), "ItemIndex", @@ -358,7 +356,7 @@ cb_menu_item_activate (GtkWidget *button, GtkWidget *menu) void go_menu_pixmaps_add_element (GOMenuPixmaps *menu, - GdkPixbuf const *pixbuf, int id) + GdkPixbuf *pixbuf, int id) { GtkWidget *button; int col, row; diff --git a/lib/goffice/gui-utils/go-combo-pixmaps.h b/lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.h similarity index 88% rename from lib/goffice/gui-utils/go-combo-pixmaps.h rename to lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.h index 99588b72a0..f861b79728 100644 --- a/lib/goffice/gui-utils/go-combo-pixmaps.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-pixmaps.h @@ -17,12 +17,12 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ -#ifndef GO_COMBO_PIXMAPS_H -#define GO_COMBO_PIXMAPS_H +#ifndef _GO_COMBO_PIXMAPS_H_ +#define _GO_COMBO_PIXMAPS_H_ #include @@ -38,7 +38,7 @@ typedef struct _GOMenuPixmaps GOMenuPixmaps; GType go_combo_pixmaps_get_type (void); GOComboPixmaps *go_combo_pixmaps_new (int ncols); void go_combo_pixmaps_add_element (GOComboPixmaps *combo, - GdkPixbuf const *pixbuf, int id, + GdkPixbuf *pixbuf, int id, char const *tooltip); gboolean go_combo_pixmaps_select_index (GOComboPixmaps *combo, int index); gboolean go_combo_pixmaps_select_id (GOComboPixmaps *combo, int id); @@ -47,8 +47,8 @@ GtkWidget *go_combo_pixmaps_get_preview (GOComboPixmaps const *combo); GOMenuPixmaps *go_menu_pixmaps_new (int ncols); void go_menu_pixmaps_add_element (GOMenuPixmaps *menu, - GdkPixbuf const *pixbuf, int id); + GdkPixbuf *pixbuf, int id); G_END_DECLS -#endif /* GO_COMBO_PIXMAPS_H */ +#endif /* _GO_COMBO_PIXMAPS_H_ */ diff --git a/lib/goffice/gui-utils/go-combo-text.c b/lib/goffice-0.0.4/goffice/gtk/go-combo-text.c similarity index 93% rename from lib/goffice/gui-utils/go-combo-text.c rename to lib/goffice-0.0.4/goffice/gtk/go-combo-text.c index 545ce3d77f..e9a6887769 100644 --- a/lib/goffice/gui-utils/go-combo-text.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-text.c @@ -1,12 +1,12 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * gnumeric-combo-text: A combo box for selecting from a list. + * go-combo-text: A combo box for selecting from a list. */ #include #include "go-combo-text.h" #include "go-combo-box.h" -#include "go-marshalers.h" +#include #include #include @@ -47,12 +47,12 @@ enum { static guint combo_text_signals [LAST_SIGNAL] = { 0 }; /** - * A utility wrapper around g_signal_emitv because it does not initiialize the + * A utility wrapper around g_signal_emitv because it does not initialize the * result to FALSE if there is no handler. */ static gboolean go_signal_emit (GoComboText *ct, int signal, - gconstpointer arg, int default_ret) + gconstpointer arg, int default_ret) { gboolean result; GValue ret = { 0, }; @@ -87,20 +87,20 @@ cb_entry_activate (GtkWidget *entry, gpointer ct) } static void -cb_list_changed (GtkTreeSelection *selection, - gpointer data) +cb_list_changed (GtkTreeView *list, gpointer data) { + GtkTreeSelection *selection = gtk_tree_view_get_selection (list); GoComboText *ct = GO_COMBO_TEXT (data); GtkEntry *entry = GTK_ENTRY (ct->entry); gboolean accept_change; GtkTreeModel *store; GtkTreeIter iter; - char const *text; + char *text; if (gtk_tree_selection_get_selected (selection, &store, &iter)) gtk_tree_model_get (store, &iter, 0, &text, -1); else - text = ""; + text = g_strdup (""); accept_change = TRUE; if (go_signal_emit (ct, SELECTION_CHANGED, selection, TRUE)) @@ -108,7 +108,9 @@ cb_list_changed (GtkTreeSelection *selection, if (accept_change) gtk_entry_set_text (entry, text); - go_combo_box_popup_hide (GO_COMBO_BOX (data)); + g_free (text); + + go_combo_box_popup_hide (GO_COMBO_BOX (ct)); } static void @@ -187,7 +189,7 @@ go_combo_text_init (GoComboText *ct) ct->rows = 0; ct->entry = gtk_entry_new (); ct->list = gtk_tree_view_new (); - //g_object_set (G_OBJECT (ct->list), NULL); + g_object_set (G_OBJECT (ct->list), NULL); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (ct->list), FALSE); store = gtk_list_store_new (1, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (ct->list), GTK_TREE_MODEL (store)); @@ -197,9 +199,8 @@ go_combo_text_init (GoComboText *ct) renderer, "text", 0, NULL); gtk_tree_view_column_set_expand (column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (ct->list), column); - g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (ct->list))), - "changed", - G_CALLBACK (cb_list_changed), (gpointer) ct); + g_signal_connect (G_OBJECT (ct->list), "cursor_changed", + G_CALLBACK (cb_list_changed), ct); ct->scroll = gtk_scrolled_window_new (NULL, NULL); @@ -259,14 +260,14 @@ go_combo_text_class_init (GtkObjectClass *klass) GO_TYPE_COMBO_TEXT, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GoComboTextClass, selection_changed), - (GSignalAccumulator) NULL, NULL, + NULL, NULL, go__BOOLEAN__POINTER, G_TYPE_BOOLEAN, 1, G_TYPE_POINTER); combo_text_signals [ENTRY_CHANGED] = g_signal_new ("entry_changed", GO_TYPE_COMBO_TEXT, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GoComboTextClass, entry_changed), - (GSignalAccumulator) NULL, NULL, + NULL, NULL, go__BOOLEAN__POINTER, G_TYPE_BOOLEAN, 1, G_TYPE_POINTER); } @@ -314,7 +315,7 @@ go_combo_text_get_entry (GoComboText *ct) */ gboolean go_combo_text_set_text (GoComboText *ct, const gchar *text, - GoComboTextSearch start) + GoComboTextSearch start) { gboolean found = FALSE, result; GtkTreeView *list = GTK_TREE_VIEW (ct->list); @@ -349,7 +350,7 @@ go_combo_text_set_text (GoComboText *ct, const gchar *text, g_free (label); } - g_signal_handlers_block_by_func (G_OBJECT (selection), + g_signal_handlers_block_by_func (G_OBJECT (list), G_CALLBACK (cb_list_changed), (gpointer) ct); gtk_tree_selection_unselect_all (selection); @@ -366,7 +367,7 @@ go_combo_text_set_text (GoComboText *ct, const gchar *text, } else gtk_entry_set_text (GTK_ENTRY (ct->entry), text); - g_signal_handlers_unblock_by_func (G_OBJECT (selection), + g_signal_handlers_unblock_by_func (G_OBJECT (list), G_CALLBACK (cb_list_changed), (gpointer) ct); return found; diff --git a/lib/goffice/gui-utils/go-combo-text.h b/lib/goffice-0.0.4/goffice/gtk/go-combo-text.h similarity index 92% rename from lib/goffice/gui-utils/go-combo-text.h rename to lib/goffice-0.0.4/goffice/gtk/go-combo-text.h index 76d7b870e5..dddb35f4c7 100644 --- a/lib/goffice/gui-utils/go-combo-text.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-combo-text.h @@ -1,6 +1,6 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef GO_COMBO_TEXT_H -#define GO_COMBO_TEXT_H +#ifndef _GO_COMBO_TEXT_H_ +#define _GO_COMBO_TEXT_H_ #include @@ -29,4 +29,4 @@ void go_combo_text_add_item (GoComboText *ct, const gchar *label); G_END_DECLS -#endif /* GO_COMBO_TEXT_H */ +#endif /* _GO_COMBO_TEXT_H_ */ diff --git a/lib/goffice/gui-utils/go-dock-band.c b/lib/goffice-0.0.4/goffice/gtk/go-dock-band.c similarity index 99% rename from lib/goffice/gui-utils/go-dock-band.c rename to lib/goffice-0.0.4/goffice/gtk/go-dock-band.c index 4f7acc1cc4..b87bc8162f 100644 --- a/lib/goffice/gui-utils/go-dock-band.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-band.c @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock-band.c @@ -16,13 +16,12 @@ You should have received a copy of the GNU Library General Public License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. - + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth + Floor, Boston, MA 02110-1301 USA. Author: Ettore Perazzoli */ -#include +#include #include #include #include diff --git a/lib/goffice/gui-utils/go-dock-band.h b/lib/goffice-0.0.4/goffice/gtk/go-dock-band.h similarity index 96% rename from lib/goffice/gui-utils/go-dock-band.h rename to lib/goffice-0.0.4/goffice/gtk/go-dock-band.h index eb98411b5e..cba58d29bc 100644 --- a/lib/goffice/gui-utils/go-dock-band.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-band.h @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock-band.h @@ -17,8 +17,8 @@ You should have received a copy of the GNU Library General Public License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth + Floor, Boston, MA 02110-1301 USA. Author: Ettore Perazzoli */ diff --git a/lib/goffice/gui-utils/go-dock-item-grip.c b/lib/goffice-0.0.4/goffice/gtk/go-dock-item-grip.c similarity index 96% rename from lib/goffice/gui-utils/go-dock-item-grip.c rename to lib/goffice-0.0.4/goffice/gtk/go-dock-item-grip.c index 68d2fa0679..e7b1304263 100644 --- a/lib/goffice/gui-utils/go-dock-item-grip.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-item-grip.c @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /** @@ -10,7 +10,7 @@ * Copyright (C) 2002 Sun Microsystems, Inc. */ -#include "gnumeric-config.h" +#include #include #include "go-a11y.h" #include "go-dock-band.h" @@ -52,7 +52,8 @@ go_dock_item_grip_expose (GtkWidget *widget, shadow, clip, widget, "dockitem", rect->x, rect->y, rect->width, rect->height, - grip->item->orientation); + (grip->item->orientation == GTK_ORIENTATION_HORIZONTAL) + ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL); if (GTK_WIDGET_HAS_FOCUS (widget)) { gint focus_width; @@ -258,7 +259,7 @@ go_dock_item_grip_get_accessible (GtkWidget *widget) go_a11y_add_actions_interface ( a11y_type, &action_if, ACTION_DOCK, "dock", _("Dock the toolbar"), "", - ACTION_UNDOCK, "undock", _("Un dock the toolbar"), "", + ACTION_UNDOCK, "undock", _("Undock the toolbar"), "", -1); } diff --git a/lib/goffice/gui-utils/go-dock-item-grip.h b/lib/goffice-0.0.4/goffice/gtk/go-dock-item-grip.h similarity index 94% rename from lib/goffice/gui-utils/go-dock-item-grip.h rename to lib/goffice-0.0.4/goffice/gtk/go-dock-item-grip.h index ff358ffd65..f34c5b096c 100644 --- a/lib/goffice/gui-utils/go-dock-item-grip.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-item-grip.h @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /** diff --git a/lib/goffice/gui-utils/go-dock-item.c b/lib/goffice-0.0.4/goffice/gtk/go-dock-item.c similarity index 96% rename from lib/goffice/gui-utils/go-dock-item.c rename to lib/goffice-0.0.4/goffice/gtk/go-dock-item.c index 30f9816ac5..3057d74dc8 100644 --- a/lib/goffice/gui-utils/go-dock-item.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-item.c @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock-item.c * @@ -18,9 +18,9 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ /* @NOTATION@ @@ -33,7 +33,7 @@ * bin-compat. */ -#include +#include #include #include "go-dock-item.h" #include "go-dock-band.h" @@ -57,6 +57,7 @@ struct _GoDockItemPrivate GtkWidget *float_window; GtkWidget *float_window_box; + gboolean float_window_hidden; }; GNOME_CLASS_BOILERPLATE (GoDockItem, go_dock_item, @@ -284,7 +285,7 @@ go_dock_item_class_init (GoDockItemClass *klass) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GoDockItemClass, dock_drag_motion), NULL, NULL, - gnm__VOID__INT_INT, + go__VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); dock_item_signals[DOCK_DRAG_END] = @@ -342,6 +343,7 @@ go_dock_item_instance_init (GoDockItem *dock_item) dock_item->_priv->grip = go_dock_item_grip_new (dock_item); dock_item->_priv->float_window = NULL; + dock_item->_priv->float_window_hidden = FALSE; gtk_widget_set_parent (dock_item->_priv->grip, GTK_WIDGET (dock_item)); gtk_widget_show (dock_item->_priv->grip); @@ -492,6 +494,7 @@ go_dock_item_unmap (GtkWidget *widget) { gtk_widget_hide (GTK_WIDGET (di->_priv->float_window)); di->float_window_mapped = FALSE; + di->_priv->float_window_hidden = TRUE; } if (di->_priv->grip) @@ -599,6 +602,9 @@ go_dock_item_unrealize (GtkWidget *widget) gdk_window_destroy (di->bin_window); di->bin_window = NULL; + if (di->_priv->float_window_hidden) + di->float_window_mapped = TRUE; + if (di->float_window_mapped) go_dock_item_unfloat (di); @@ -1612,10 +1618,12 @@ go_dock_item_detach (GoDockItem *item, gint x, gint y) g_assert (priv->child != NULL); g_assert (priv->grip != NULL); - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) - priv->float_window_box = gtk_vbox_new (FALSE, 0); - else - priv->float_window_box = gtk_hbox_new (FALSE, 0); + if (!priv->float_window_hidden) + { + if (item->orientation == GTK_ORIENTATION_HORIZONTAL) + priv->float_window_box = gtk_vbox_new (FALSE, 0); + else + priv->float_window_box = gtk_hbox_new (FALSE, 0); /* @@ -1632,26 +1640,28 @@ go_dock_item_detach (GoDockItem *item, gint x, gint y) */ - gtk_container_add (GTK_CONTAINER (item->_priv->float_window), priv->float_window_box); + gtk_container_add (GTK_CONTAINER (item->_priv->float_window), priv->float_window_box); - widget = priv->grip; /* container_remove() will make priv->grip NULL, so we save it here */ - g_object_ref (priv->grip); - gtk_container_remove (GTK_CONTAINER (item), priv->grip); - priv->grip = widget; - gtk_box_pack_start (GTK_BOX (priv->float_window_box), priv->grip, FALSE, FALSE, 0); - g_object_unref (priv->grip); + widget = priv->grip; /* container_remove() will make priv->grip NULL, so we save it here */ + g_object_ref (priv->grip); + gtk_container_remove (GTK_CONTAINER (item), priv->grip); + priv->grip = widget; + gtk_box_pack_start (GTK_BOX (priv->float_window_box), priv->grip, FALSE, FALSE, 0); + g_object_unref (priv->grip); - widget = priv->child; - g_object_ref (priv->child); - gtk_container_remove (GTK_CONTAINER (item), priv->child); - priv->child = widget; - gtk_box_pack_start (GTK_BOX (priv->float_window_box), priv->child, FALSE, FALSE, 0); - g_object_unref (priv->child); + widget = priv->child; + g_object_ref (priv->child); + gtk_container_remove (GTK_CONTAINER (item), priv->child); + priv->child = widget; + gtk_box_pack_start (GTK_BOX (priv->float_window_box), priv->child, FALSE, FALSE, 0); + g_object_unref (priv->child); + } gtk_window_move (GTK_WINDOW (item->_priv->float_window), x, y); gtk_widget_show_all (GTK_WIDGET (item->_priv->float_window)); item->float_window_mapped = TRUE; + item->_priv->float_window_hidden = FALSE; gdk_window_hide (GTK_WIDGET (item)->window); gtk_widget_queue_draw (GTK_WIDGET (item)); @@ -1715,6 +1725,8 @@ go_dock_item_unfloat (GoDockItem *item) gdk_window_show (GTK_WIDGET (item)->window); item->float_window_mapped = FALSE; + item->_priv->float_window_hidden = FALSE; + go_dock_item_set_floating (item, FALSE); gtk_widget_queue_resize (GTK_WIDGET (item)); @@ -1727,8 +1739,6 @@ go_dock_item_attach (GoDockItem *item, { if (GTK_WIDGET (item)->parent != GTK_WIDGET (parent)) { - GtkWidget *child = item->_priv->child; - gdk_window_move_resize (GTK_WIDGET (item)->window, -1, -1, 0, 0); g_object_ref (item); gtk_container_remove (GTK_CONTAINER (GTK_WIDGET (item)->parent), GTK_WIDGET (item)); diff --git a/lib/goffice/gui-utils/go-dock-item.h b/lib/goffice-0.0.4/goffice/gtk/go-dock-item.h similarity index 96% rename from lib/goffice/gui-utils/go-dock-item.h rename to lib/goffice-0.0.4/goffice/gtk/go-dock-item.h index b08525e50b..45ba04df7b 100644 --- a/lib/goffice/gui-utils/go-dock-item.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-item.h @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* WARNING ____ IMMATURE API ____ liable to change */ @@ -20,9 +20,9 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. */ /* @NOTATION@ diff --git a/lib/goffice/gui-utils/go-dock-layout.c b/lib/goffice-0.0.4/goffice/gtk/go-dock-layout.c similarity index 98% rename from lib/goffice/gui-utils/go-dock-layout.c rename to lib/goffice-0.0.4/goffice/gtk/go-dock-layout.c index dea8e23711..d4a22eba93 100644 --- a/lib/goffice/gui-utils/go-dock-layout.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-layout.c @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock-layout.c @@ -18,8 +18,8 @@ You should have received a copy of the GNU Library General Public License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA. Author: Ettore Perazzoli */ @@ -27,7 +27,7 @@ @NOTATION@ */ -#include +#include #include #include #include diff --git a/lib/goffice/gui-utils/go-dock-layout.h b/lib/goffice-0.0.4/goffice/gtk/go-dock-layout.h similarity index 95% rename from lib/goffice/gui-utils/go-dock-layout.h rename to lib/goffice-0.0.4/goffice/gtk/go-dock-layout.h index 88f501631e..00b0bb1b06 100644 --- a/lib/goffice/gui-utils/go-dock-layout.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock-layout.h @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock-layout.c @@ -18,8 +18,8 @@ You should have received a copy of the GNU Library General Public License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA. Author: Ettore Perazzoli */ diff --git a/lib/goffice/gui-utils/go-dock.c b/lib/goffice-0.0.4/goffice/gtk/go-dock.c similarity index 99% rename from lib/goffice/gui-utils/go-dock.c rename to lib/goffice-0.0.4/goffice/gtk/go-dock.c index ebc7aeeef8..0f1248cb0b 100644 --- a/lib/goffice/gui-utils/go-dock.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock.c @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock.c @@ -16,8 +16,8 @@ You should have received a copy of the GNU Library General Public License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA. Author: Ettore Perazzoli */ @@ -25,7 +25,7 @@ @NOTATION@ */ -#include "gnumeric-config.h" +#include #include #include #include diff --git a/lib/goffice/gui-utils/go-dock.h b/lib/goffice-0.0.4/goffice/gtk/go-dock.h similarity index 95% rename from lib/goffice/gui-utils/go-dock.h rename to lib/goffice-0.0.4/goffice/gtk/go-dock.h index 3df32fc6ef..62cd637855 100644 --- a/lib/goffice/gui-utils/go-dock.h +++ b/lib/goffice-0.0.4/goffice/gtk/go-dock.h @@ -1,4 +1,4 @@ -/* File import from bonoboui to gnumeric by import-bonobo. Do not edit. */ +/* File import from bonoboui to libgoffice by import-bonobo. Do not edit. */ /* go-dock.h @@ -18,8 +18,8 @@ You should have received a copy of the GNU Library General Public License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA. Author: Ettore Perazzoli */ diff --git a/lib/goffice/gui-utils/go-font-sel.c b/lib/goffice-0.0.4/goffice/gtk/go-font-sel.c similarity index 83% rename from lib/goffice/gui-utils/go-font-sel.c rename to lib/goffice-0.0.4/goffice/gtk/go-font-sel.c index b75a892e43..ecb769a11e 100644 --- a/lib/goffice/gui-utils/go-font-sel.c +++ b/lib/goffice-0.0.4/goffice/gtk/go-font-sel.c @@ -11,7 +11,7 @@ #include #include "go-font-sel.h" #include -#include +#include #include #include @@ -22,8 +22,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -47,6 +47,9 @@ struct _GOFontSel { GOFont *base, *current; PangoAttrList *modifications; + + GSList *family_names; + GSList *font_sizes; }; typedef struct { @@ -77,7 +80,7 @@ go_font_sel_add_attr (GOFontSel *gfs, PangoAttribute *attr0, PangoAttribute *att } static void -go_dont_sel_emit_changed (GOFontSel *gfs) +go_font_sel_emit_changed (GOFontSel *gfs) { g_signal_emit (G_OBJECT (gfs), gfs_signals [FONT_CHANGED], 0, gfs->modifications); @@ -146,7 +149,7 @@ font_selected (GtkTreeSelection *selection, GOFontSel *gfs) gtk_tree_model_get (model, &iter, 0, &text, -1); gtk_entry_set_text (GTK_ENTRY (gfs->font_name_entry), text); go_font_sel_add_attr (gfs, pango_attr_family_new (text), NULL); - go_dont_sel_emit_changed (gfs); + go_font_sel_emit_changed (gfs); g_free (text); } } @@ -157,17 +160,22 @@ gfs_fill_font_name_list (GOFontSel *gfs) GSList *ptr; GtkListStore *store; GtkTreeIter iter; + PangoContext *context; + +//#warning "FIXME: We need to do this when we realize the widget as we don't have a screen until then." + context = gtk_widget_get_pango_context (GTK_WIDGET (gfs)); + gfs->family_names = go_fonts_list_families (context); list_init (gfs->font_name_list); store = GTK_LIST_STORE (gtk_tree_view_get_model (gfs->font_name_list)); - for (ptr = go_font_family_list; ptr != NULL; ptr = ptr->next) { + for (ptr = gfs->family_names; ptr != NULL; ptr = ptr->next) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, ptr->data, -1); - } + } - g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (gfs->font_name_list)), - "changed", - G_CALLBACK (font_selected), gfs); + g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (gfs->font_name_list)), + "changed", + G_CALLBACK (font_selected), gfs); } static char const *styles[] = { @@ -193,11 +201,11 @@ style_selected (GtkTreeSelection *selection, gtk_tree_path_free (path); gtk_entry_set_text (GTK_ENTRY (gfs->font_style_entry), _(styles[row])); go_font_sel_add_attr (gfs, - pango_attr_weight_new ((row == 0 || row == 3) + pango_attr_weight_new ((row == 1 || row == 2) ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL), - pango_attr_style_new ((row == 1 || row == 3) + pango_attr_style_new ((row == 2 || row == 3) ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL)); - go_dont_sel_emit_changed (gfs); + go_font_sel_emit_changed (gfs); } } @@ -236,11 +244,11 @@ select_row (GtkTreeView *list, int row) } } -static float +static double size_set_text (GOFontSel *gfs, char const *size_text) { char *end; - float size; + double size; errno = 0; /* strtol sets errno, but does not clear it. */ size = strtod (size_text, &end); size = ((int)floor ((size * 20.) + .5)) / 20.; /* round .05 */ @@ -249,7 +257,7 @@ size_set_text (GOFontSel *gfs, char const *size_text) gtk_entry_set_text (GTK_ENTRY (gfs->font_size_entry), size_text); go_font_sel_add_attr (gfs, pango_attr_size_new (size * PANGO_SCALE), NULL); - go_dont_sel_emit_changed (gfs); + go_font_sel_emit_changed (gfs); return size; } return -1; @@ -273,17 +281,22 @@ size_selected (GtkTreeSelection *selection, static void size_changed (GtkEntry *entry, GOFontSel *gfs) { - int i; - float size = size_set_text (gfs, gtk_entry_get_text (entry)); + double size = size_set_text (gfs, gtk_entry_get_text (entry)); if (size > 0) { - for (i = 0; go_font_sizes [i] != 0; i++) - if (go_font_sizes [i] == size) + int psize = (int)(size * PANGO_SCALE + 0.5); + int i = 0; + GSList *l; + + for (l = gfs->font_sizes; l; i++, l = l->next) { + int this_psize = GPOINTER_TO_INT (l->data); + if (this_psize == psize) break; + } g_signal_handlers_block_by_func ( gtk_tree_view_get_selection (gfs->font_size_list), size_selected, gfs); - select_row (gfs->font_size_list, (go_font_sizes [i] != 0) ? i : -1); + select_row (gfs->font_size_list, (l ? i : -1)); g_signal_handlers_unblock_by_func ( gtk_tree_view_get_selection (gfs->font_size_list), size_selected, gfs); @@ -293,17 +306,20 @@ size_changed (GtkEntry *entry, GOFontSel *gfs) static void gfs_fill_font_size_list (GOFontSel *gfs) { - int i; GtkListStore *store; - GtkTreeIter iter; + GtkTreeIter iter; + GSList *ptr; + + gfs->font_sizes = go_fonts_list_sizes (); list_init (gfs->font_size_list); store = GTK_LIST_STORE (gtk_tree_view_get_model (gfs->font_size_list)); - for (i = 0; go_font_sizes [i] != 0; i++) { - char buffer[4 * sizeof (int)]; - sprintf (buffer, "%d", go_font_sizes [i]); + for (ptr = gfs->font_sizes; ptr != NULL ; ptr = ptr->next) { + int psize = GPOINTER_TO_INT (ptr->data); + char *size_text = g_strdup_printf ("%g", psize / (double)PANGO_SCALE); gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, buffer, -1); + gtk_list_store_set (store, &iter, 0, size_text, -1); + g_free (size_text); } g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (gfs->font_size_list)), "changed", @@ -321,9 +337,9 @@ canvas_size_changed (G_GNUC_UNUSED GtkWidget *widget, int height = allocation->height - 1; foo_canvas_item_set (gfs->font_preview_text, - "default-col-width", width, - "default-row-height", height, - NULL); + "x", (double)width/2., + "y", (double)height/2., + NULL); foo_canvas_set_scroll_region (gfs->font_preview_canvas, 0, 0, width, height); @@ -393,6 +409,15 @@ gfs_destroy (GtkObject *object) pango_attr_list_unref (gfs->modifications); gfs->modifications = NULL; } + if (gfs->family_names) { + g_slist_foreach (gfs->family_names, (GFunc)g_free, NULL); + g_slist_free (gfs->family_names); + gfs->family_names = NULL; + } + if (gfs->font_sizes) { + g_slist_free (gfs->font_sizes); + gfs->font_sizes = NULL; + } gfs_parent_class->destroy (object); } @@ -462,7 +487,7 @@ go_font_sel_set_name (GOFontSel *gfs, char const *font_name) GSList *ptr; int row; - for (row = 0, ptr = go_font_family_list; ptr != NULL; ptr = ptr->next, row++) + for (row = 0, ptr = gfs->family_names; ptr != NULL; ptr = ptr->next, row++) if (g_ascii_strcasecmp (font_name, ptr->data) == 0) break; select_row (gfs->font_name_list, (ptr != NULL) ? row : -1); @@ -489,27 +514,34 @@ go_font_sel_set_style (GOFontSel *gfs, gboolean is_bold, gboolean is_italic) go_font_sel_add_attr (gfs, pango_attr_weight_new (is_bold ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL), pango_attr_style_new (is_italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL)); - go_dont_sel_emit_changed (gfs); +//#warning "Do we really need the following line?" + go_font_sel_emit_changed (gfs); } static void go_font_sel_set_points (GOFontSel *gfs, - double point_size) + double point_size) { - int i; - - for (i = 0; go_font_sizes [i] != 0; i++) - if (go_font_sizes [i] == point_size) { - select_row (gfs->font_size_list, i); - break; - } - - if (go_font_sizes [i] == 0) { - char *buffer; - buffer = g_strdup_printf ("%g", point_size); + const char *old_text = gtk_entry_get_text (GTK_ENTRY (gfs->font_size_entry)); + char *buffer = g_strdup_printf ("%g", point_size); + if (strcmp (old_text, buffer) != 0) gtk_entry_set_text (GTK_ENTRY (gfs->font_size_entry), buffer); - g_free (buffer); - } + g_free (buffer); +} + +static void +go_font_sel_set_strike (GOFontSel *gfs, gboolean strike) +{ +} + +static void +go_font_sel_set_uline (GOFontSel *gfs, int uline) +{ +} + +static void +go_font_sel_set_color (GOFontSel *gfs, GOColor c) +{ } void @@ -523,7 +555,7 @@ go_font_sel_set_font (GOFontSel *gfs, GOFont const *font) pango_font_description_get_style (font->desc) != PANGO_STYLE_NORMAL); go_font_sel_set_points (gfs, pango_font_description_get_size (font->desc) / PANGO_SCALE); - go_font_sel_set_strike (gfs, font->has_strike); + go_font_sel_set_strike (gfs, font->strikethrough); go_font_sel_set_uline (gfs, font->underline); go_font_sel_set_color (gfs, font->color); } diff --git a/lib/goffice/gui-utils/go-font-sel.glade b/lib/goffice-0.0.4/goffice/gtk/go-font-sel.glade similarity index 56% rename from lib/goffice/gui-utils/go-font-sel.glade rename to lib/goffice-0.0.4/goffice/gtk/go-font-sel.glade index c401910837..8b034dd7ae 100644 --- a/lib/goffice/gui-utils/go-font-sel.glade +++ b/lib/goffice-0.0.4/goffice/gtk/go-font-sel.glade @@ -10,26 +10,41 @@ False True False - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST True - 5 - 5 + 4 + 3 False 4 4 + + + True + False + True + 0 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + True - _Family: - True + Font: + False False GTK_JUSTIFY_CENTER False @@ -38,7 +53,6 @@ 0.5 0 0 - family_combo 0 @@ -50,39 +64,11 @@ - - - True - - - 0 - 1 - 1 - 2 - fill - fill - - - - - - True - - - 1 - 2 - 1 - 2 - fill - fill - - - True - _Size: - True + Font style: + False False GTK_JUSTIFY_CENTER False @@ -91,7 +77,6 @@ 0.5 0 0 - size_combo 1 @@ -104,33 +89,18 @@ - + True - - - 2 - 3 - 1 - 2 - fill - fill - - - - - - True - _Underline: - True + Size: + False False - GTK_JUSTIFY_LEFT + GTK_JUSTIFY_CENTER False False 0 0.5 0 0 - underline_combo 2 @@ -143,91 +113,22 @@ - + True - True - _Bold - True - GTK_RELIEF_NORMAL - True - False - False - True + True + False + True + 0 + + True + * + False - 3 - 5 - 0 - 1 - fill - - - - - - - True - True - _Italic - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 3 - 5 + 0 + 1 1 2 - fill - - - - - - - True - True - Stri_kethrough - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 3 - 5 - 2 - 3 - fill - - - - - - - True - Co_lor: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 3 - 4 - 3 - 4 - fill @@ -260,9 +161,113 @@ 0 - 5 - 4 - 5 + 3 + 3 + 4 + + + + + + True + True + True + True + 0 + + True + * + False + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + + + + + 1 + 2 + 2 + 3 + + + + + + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + + + + + 0 + 1 + 2 + 3 + + + + + + True + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + + + + + 2 + 3 + 2 + 3 + fill diff --git a/lib/goffice-0.0.4/goffice/gtk/go-font-sel.h b/lib/goffice-0.0.4/goffice/gtk/go-font-sel.h new file mode 100644 index 0000000000..dda9985796 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-font-sel.h @@ -0,0 +1,42 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-font-sel.h - Misc GTK+ utilities + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License, version 2, as published by the Free Software Foundation. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ +#ifndef _GO_FONT_SEL_H_ +#define _GO_FONT_SEL_H_ + +#include +#include + +G_BEGIN_DECLS + +#define GO_FONT_SEL_TYPE (go_font_sel_get_type ()) +#define GO_FONT_SEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GO_FONT_SEL_TYPE, GOFontSel)) +#define IS_GO_FONT_SEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GO_FONT_SEL_TYPE)) + +typedef struct _GOFontSel GOFontSel; + +GType go_font_sel_get_type (void); +GtkWidget *go_font_sel_new (void); +void go_font_sel_set_font (GOFontSel *fs, GOFont const *font); +GOFont const *go_font_sel_get_font (GOFontSel const *fs); +void go_font_sel_editable_enters (GOFontSel *fs, GtkWindow *dialog); +void go_font_sel_set_sample_text (GOFontSel *fs, char const *text); + +G_END_DECLS + +#endif /* _GO_FONT_SEL_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/go-format-sel.c b/lib/goffice-0.0.4/goffice/gtk/go-format-sel.c new file mode 100644 index 0000000000..a37444ce71 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-format-sel.c @@ -0,0 +1,1214 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/** + * go-format-sel.c: A widget to select a format + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + **/ + +#include +#include "go-format-sel.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +/* The maximum number of chars in the formatting sample */ +#define FORMAT_PREVIEW_MAX 25 + +#define SETUP_LOCALE_SWITCH char *oldlocale = NULL + +#define START_LOCALE_SWITCH \ + do { \ + if (gfs->locale) { \ + currency_date_format_shutdown (); \ + oldlocale = g_strdup (setlocale (LC_ALL, NULL)); \ + go_setlocale (LC_ALL, gfs->locale); \ + currency_date_format_init (); \ + } \ + } while (0) + +#define END_LOCALE_SWITCH \ + do { \ + if (oldlocale) { \ + currency_date_format_shutdown (); \ + go_setlocale (LC_ALL, oldlocale); \ + g_free (oldlocale); \ + currency_date_format_init (); \ + } \ + } while (0) + +#define FMT_CUSTOM ((GOFormatFamily)(GO_FORMAT_SPECIAL + 1)) + +/*Format Categories*/ +static char const *const format_category_names[] = { + N_("General"), + N_("Number"), + N_("Currency"), + N_("Accounting"), + N_("Date"), + N_("Time"), + N_("Percentage"), + N_("Fraction"), + N_("Scientific"), + N_("Text"), + N_("Special"), + N_("Custom"), + NULL +}; + +/* The available format widgets */ +typedef enum { + F_GENERAL_EXPLANATION, + F_NUMBER_EXPLANATION, + F_CURRENCY_EXPLANATION, + F_ACCOUNTING_EXPLANATION, + F_DATE_EXPLANATION, + F_TIME_EXPLANATION, + F_PERCENTAGE_EXPLANATION, + F_FRACTION_EXPLANATION, + F_SCIENTIFIC_EXPLANATION, + F_TEXT_EXPLANATION, + F_SPECIAL_EXPLANATION, + F_CUSTOM_EXPLANATION, + + F_SEPARATOR, + F_SYMBOL_LABEL, F_SYMBOL, + F_ENTRY, + F_LIST_LABEL, F_LIST_SCROLL, F_LIST, + F_DECIMAL_SPIN, + F_NEGATIVE_LABEL, F_NEGATIVE_SCROLL, F_NEGATIVE, + F_DECIMAL_LABEL, F_CODE_LABEL, F_SYMBOL_BOX, + F_DECIMAL_BOX, F_CODE_BOX, F_MAX_WIDGET +} FormatWidget; + +struct _GOFormatSel { + GtkHBox box; + GladeXML *gui; + + gpointer value; + char *locale; + + gboolean enable_edit; + + GODateConventions const *date_conv; + + struct { + GtkTextView *preview; + GtkWidget *preview_box; + GtkTextBuffer *preview_buffer; + + GtkWidget *widget[F_MAX_WIDGET]; + GtkWidget *menu; + GtkTreeModel *menu_model; + GtkSizeGroup *size_group; + + struct { + GtkTreeView *view; + GtkListStore *model; + GtkTreeSelection *selection; + } negative_types; + + struct { + GtkTreeView *view; + GtkListStore *model; + GtkTreeSelection *selection; + } formats; + + gulong entry_changed_id; + GOFormat *spec; + gint current_type; + int num_decimals; + int negative_format; + int currency_index; + gboolean use_separator; + } format; +}; + +typedef struct { + GtkHBoxClass parent_class; + + gboolean (*format_changed) (GOFormatSel *gfs, char const *fmt); + char *(*generate_preview) (GOFormatSel *gfs, char *fmt); +} GOFormatSelClass; + +/* Signals we emit */ +enum { + FORMAT_CHANGED, + GENERATE_PREVIEW, + LAST_SIGNAL +}; + +static guint go_format_sel_signals [LAST_SIGNAL] = { 0 }; + +static void format_entry_set_text (GOFormatSel *gfs, gchar *text); + +static void +generate_format (GOFormatSel *gfs) +{ + GOFormatFamily const page = gfs->format.current_type; + GOFormat *new_format; + + /* + * It is a strange idea not to reuse GOFormatDetails + * in this file, so build one. + */ + GOFormatDetails format = gfs->format.spec->family_info; + format.thousands_sep = gfs->format.use_separator; + format.num_decimals = gfs->format.num_decimals; + format.negative_fmt = gfs->format.negative_format; + format.currency_symbol_index = gfs->format.currency_index; + + new_format = go_format_new (page, &format); + if (new_format) { + char *tmp = go_format_as_XL (new_format, TRUE); + format_entry_set_text (gfs, tmp); + g_free (tmp); + } + + go_format_unref (new_format); +} + +static char * +generate_preview (GOFormatSel *gfs, GOColor *c) +{ + char *res = NULL; + g_signal_emit (G_OBJECT (gfs), + go_format_sel_signals [GENERATE_PREVIEW], 0, + c, &res); + return res; +} + +static void +draw_format_preview (GOFormatSel *gfs, gboolean regen_format) +{ + char *preview; + GOFormat *sf = NULL; + GOColor c = 0; + GdkColor gdk_color; + + if (regen_format) + generate_format (gfs); + + if (NULL == (sf = gfs->format.spec)) + return; + + if (NULL == (preview = generate_preview (gfs, &c))) + return; + + if (strlen (preview) > FORMAT_PREVIEW_MAX) + strcpy (&preview[FORMAT_PREVIEW_MAX - 5], " ..."); + gtk_text_buffer_set_text (gfs->format.preview_buffer, preview, -1); + if (c != 0) + go_color_to_gdk (c, &gdk_color); + else + gdk_color_parse ("black", &gdk_color); + gtk_widget_modify_text (GTK_WIDGET (gfs->format.preview), + GTK_STATE_NORMAL, &gdk_color); + g_free (preview); +} + +static void +fillin_negative_samples (GOFormatSel *gfs) +{ + static char const *const decimals = "098765432109876543210987654321"; + static char const *const formats[4] = { + "-%s%s3%s210%s%s%s%s", + "%s%s3%s210%s%s%s%s", + "(%s%s3%s210%s%s%s%s)", + "(%s%s3%s210%s%s%s%s)" + }; + int const n = 30 - gfs->format.num_decimals; + + GOFormatFamily const page = gfs->format.current_type; + char const *space_b = "", *currency_b; + char const *space_a = "", *currency_a; + const char *decimal; + const char *thousand_sep; + int i; + GtkTreeIter iter; + GtkTreePath *path; + gboolean more; + SETUP_LOCALE_SWITCH; + + g_return_if_fail (page == GO_FORMAT_NUMBER || page == GO_FORMAT_CURRENCY); + g_return_if_fail (gfs->format.num_decimals <= 30); + + START_LOCALE_SWITCH; + + if (gfs->format.use_separator) + thousand_sep = format_get_thousand ()->str; + else + thousand_sep = ""; + if (gfs->format.num_decimals > 0) + decimal = format_get_decimal ()->str; + else + decimal = ""; + + if (page == GO_FORMAT_CURRENCY) { + currency_b = go_format_currencies[gfs->format.currency_index].symbol; + /* + * FIXME : This should be better hidden. + * Ideally the render would do this for us. + */ + if (currency_b[0] == '[' && currency_b[1] == '$') { + char const *end = strchr (currency_b+2, '-'); + if (end == NULL) + end = strchr (currency_b+2, ']'); + currency_b = g_strndup (currency_b+2, end-currency_b-2); + } else + currency_b = g_strdup (currency_b); + + if (go_format_currencies[gfs->format.currency_index].has_space) + space_b = " "; + + if (!go_format_currencies[gfs->format.currency_index].precedes) { + currency_a = currency_b; + currency_b = ""; + space_a = space_b; + space_b = ""; + } else { + currency_a = ""; + } + } else + currency_a = currency_b = ""; + + more = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (gfs->format.negative_types.model), &iter); + for (i = 0 ; i < 4; i++) { + char *buf = g_strdup_printf (formats[i], + currency_b, space_b, thousand_sep, decimal, + decimals + n, space_a, currency_a); + if (!more) + gtk_list_store_append (gfs->format.negative_types.model, &iter); + gtk_list_store_set (gfs->format.negative_types.model, &iter, + 0, i, + 1, buf, + 2, (i % 2) ? "red" : NULL, + -1); + if (more) + more = gtk_tree_model_iter_next (GTK_TREE_MODEL (gfs->format.negative_types.model), + &iter); + + g_free (buf); + } + + /* If non empty then free the string */ + if (*currency_a) + g_free ((char*)currency_a); + if (*currency_b) + g_free ((char*)currency_b); + + path = gtk_tree_path_new (); + gtk_tree_path_append_index (path, gfs->format.negative_format); + gtk_tree_selection_select_path (gfs->format.negative_types.selection, path); + gtk_tree_path_free (path); + + END_LOCALE_SWITCH; +} + +static void +cb_decimals_changed (GtkSpinButton *spin, GOFormatSel *gfs) +{ + GOFormatFamily const page = gfs->format.current_type; + + gfs->format.num_decimals = gtk_spin_button_get_value_as_int (spin); + + if (page == GO_FORMAT_NUMBER || page == GO_FORMAT_CURRENCY) + fillin_negative_samples (gfs); + + draw_format_preview (gfs, TRUE); +} + +static void +cb_separator_toggle (GtkObject *obj, GOFormatSel *gfs) +{ + gfs->format.use_separator = + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (obj)); + fillin_negative_samples (gfs); + + draw_format_preview (gfs, TRUE); +} + +static void +fmt_dialog_init_fmt_list (GOFormatSel *gfs, char const *const *formats, + GtkTreeIter *select) +{ + GtkTreeIter iter; + char *fmt; + char const *cur_fmt = gfs->format.spec->format; + + for (; *formats; formats++) { + gtk_list_store_append (gfs->format.formats.model, &iter); + fmt = go_format_str_as_XL (*formats, TRUE); + gtk_list_store_set (gfs->format.formats.model, &iter, + 0, fmt, -1); + g_free (fmt); + + if (!strcmp (*formats, cur_fmt)) + *select = iter; + } +} + +static void +fmt_dialog_enable_widgets (GOFormatSel *gfs, int page) +{ + SETUP_LOCALE_SWITCH; + static FormatWidget const contents[][12] = { + /* General */ + { + F_GENERAL_EXPLANATION, + F_MAX_WIDGET + }, + /* Number */ + { + F_NUMBER_EXPLANATION, + F_DECIMAL_BOX, + F_DECIMAL_LABEL, + F_DECIMAL_SPIN, + F_SEPARATOR, + F_NEGATIVE_LABEL, + F_NEGATIVE_SCROLL, + F_NEGATIVE, + F_MAX_WIDGET + }, + /* Currency */ + { + F_CURRENCY_EXPLANATION, + F_DECIMAL_BOX, + F_DECIMAL_LABEL, + F_DECIMAL_SPIN, + F_SEPARATOR, + F_SYMBOL_BOX, + F_SYMBOL_LABEL, + F_SYMBOL, + F_NEGATIVE_LABEL, + F_NEGATIVE_SCROLL, + F_NEGATIVE, + F_MAX_WIDGET + }, + /* Accounting */ + { + F_ACCOUNTING_EXPLANATION, + F_DECIMAL_BOX, + F_DECIMAL_LABEL, + F_DECIMAL_SPIN, + F_SYMBOL_BOX, + F_SYMBOL_LABEL, + F_SYMBOL, + F_MAX_WIDGET + }, + /* Date */ + { + F_DATE_EXPLANATION, + F_LIST_LABEL, + F_LIST_SCROLL, + F_LIST, + F_MAX_WIDGET + }, + /* Time */ + { + F_TIME_EXPLANATION, + F_LIST_LABEL, + F_LIST_SCROLL, + F_LIST, + F_MAX_WIDGET + }, + /* Percentage */ + { + F_PERCENTAGE_EXPLANATION, + F_DECIMAL_BOX, + F_DECIMAL_LABEL, + F_DECIMAL_SPIN, + F_MAX_WIDGET + }, + /* Fraction */ + { + F_FRACTION_EXPLANATION, + F_LIST_LABEL, + F_LIST_SCROLL, + F_LIST, + F_MAX_WIDGET + }, + /* Scientific */ + { + F_SCIENTIFIC_EXPLANATION, + F_DECIMAL_BOX, + F_DECIMAL_LABEL, + F_DECIMAL_SPIN, + F_MAX_WIDGET + }, + /* Text */ + { + F_TEXT_EXPLANATION, + F_MAX_WIDGET + }, + /* Special */ + { + F_SPECIAL_EXPLANATION, + F_MAX_WIDGET + }, + /* Custom */ + { + F_CUSTOM_EXPLANATION, + F_CODE_BOX, + F_CODE_LABEL, + F_ENTRY, + F_LIST_LABEL, + F_LIST_SCROLL, + F_LIST, + F_MAX_WIDGET + } + }; + + GOFormatFamily const old_page = gfs->format.current_type; + int i; + FormatWidget tmp; + + START_LOCALE_SWITCH; + + /* Hide widgets from old page */ + if (old_page >= 0) { + int i, j; + FormatWidget wi, wj; + for (i = 0; (wi = contents[old_page][i]) != F_MAX_WIDGET ; ++i) { + for (j = 0; (wj = contents[page][j]) != F_MAX_WIDGET ; ++j) + if (wi == wj) + goto stays; + gtk_widget_hide (gfs->format.widget[wi]); +stays: + ; /* No more */ + } + } + + /* Set the default format if appropriate */ + if (page == GO_FORMAT_GENERAL || + page == GO_FORMAT_ACCOUNTING || + page == GO_FORMAT_FRACTION || + page == GO_FORMAT_TEXT) { + int list_elem = 0; + char *tmp; + if (page == gfs->format.spec->family) + list_elem = gfs->format.spec->family_info.list_element; + + tmp = go_format_str_as_XL (go_format_builtins[page][list_elem], TRUE); + format_entry_set_text (gfs, tmp); + g_free (tmp); + } + + gfs->format.current_type = page; + for (i = 0; (tmp = contents[page][i]) != F_MAX_WIDGET ; ++i) { + GtkWidget *w = gfs->format.widget[tmp]; + + switch (tmp) { + case F_LIST: { + int start = 0, end = -1; + GtkTreeIter select; + + switch (page) { + default : + ; + case GO_FORMAT_DATE: + case GO_FORMAT_TIME: + case GO_FORMAT_FRACTION: + start = end = page; + break; + + case FMT_CUSTOM: + start = 0; end = 8; + break; + } + + select.stamp = 0; + gtk_list_store_clear (gfs->format.formats.model); + for (; start <= end ; ++start) + fmt_dialog_init_fmt_list (gfs, + go_format_builtins[start], &select); + + /* If this is the custom page and the format has + * not been found append it */ + /* TODO We should add the list of other custom formats created. + * It should be easy. All that is needed is a way to differentiate + * the std formats and the custom formats in the GOFormat hash. + */ + if (page == FMT_CUSTOM && select.stamp == 0) { + char *tmp = go_format_as_XL (gfs->format.spec, TRUE); + format_entry_set_text (gfs, tmp); + g_free (tmp); + } else if (select.stamp == 0) + gtk_tree_model_get_iter_first ( + GTK_TREE_MODEL (gfs->format.formats.model), + &select); + + if (select.stamp != 0) { + GtkTreePath *path = gtk_tree_model_get_path ( + GTK_TREE_MODEL (gfs->format.formats.model), + &select); + gtk_tree_selection_select_iter ( + gfs->format.formats.selection, + &select); + gtk_tree_view_scroll_to_cell (gfs->format.formats.view, + path, NULL, FALSE, 0., 0.); + gtk_tree_path_free (path); + } + break; + } + + case F_NEGATIVE: + fillin_negative_samples (gfs); + break; + + case F_DECIMAL_SPIN: + gtk_spin_button_set_value (GTK_SPIN_BUTTON (gfs->format.widget[F_DECIMAL_SPIN]), + gfs->format.num_decimals); + break; + + case F_SEPARATOR: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gfs->format.widget[F_SEPARATOR]), + gfs->format.use_separator); + break; + + default: + ; /* Nothing */ + } + + gtk_widget_show (w); + } + + draw_format_preview (gfs, TRUE); + + END_LOCALE_SWITCH; +} + +/* + * Callback routine to manage the relationship between the number + * formating radio buttons and the widgets required for each mode. + */ + +static void +cb_format_class_changed (G_GNUC_UNUSED GtkTreeSelection *ignored, + GOFormatSel *gfs) +{ + int selected_item = 0; + GList *list; + GtkTreeSelection *selection = gtk_tree_view_get_selection + (GTK_TREE_VIEW(gfs->format.menu)); + + list = gtk_tree_selection_get_selected_rows + (selection, &gfs->format.menu_model); + if (list) { + GtkTreePath *path; + path = list->data; + selected_item = *(gtk_tree_path_get_indices (path)); + + if (selected_item >= 0) { + fmt_dialog_enable_widgets (gfs, selected_item); + } + g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL); + g_list_free (list); + } +} + +static void +cb_format_entry_changed (GtkEditable *w, GOFormatSel *gfs) +{ + char *fmt; + if (!gfs->enable_edit) + return; + + fmt = go_format_str_delocalize (gtk_entry_get_text (GTK_ENTRY (w))); + if (strcmp (gfs->format.spec->format, fmt)) { + go_format_unref (gfs->format.spec); + gfs->format.spec = go_format_new_from_XL (fmt, FALSE); + g_signal_emit (G_OBJECT (gfs), + go_format_sel_signals [FORMAT_CHANGED], 0, + fmt); + draw_format_preview (gfs, FALSE); + } + g_free (fmt); +} + +/* + * We only want to emit the number format changed signal once for each + * format change. When not blocking signals when calling + * gtk_entry_set_text, one would be emitted for deleting the old text + * and one for inserting the new. That's why we block the signal and + * invoke cb_format_entry_changed explicitly. + */ +static void +format_entry_set_text (GOFormatSel *gfs, gchar *text) +{ + GtkEntry *entry = GTK_ENTRY (gfs->format.widget[F_ENTRY]); + + g_signal_handler_block (entry, gfs->format.entry_changed_id); + gtk_entry_set_text (entry, text); + g_signal_handler_unblock (entry, gfs->format.entry_changed_id); + cb_format_entry_changed (GTK_EDITABLE (entry), gfs); +} + +static void +cb_format_list_select (GtkTreeSelection *selection, GOFormatSel *gfs) +{ + GtkTreeIter iter; + gchar *text; + + if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) + return; + + gtk_tree_model_get (GTK_TREE_MODEL (gfs->format.formats.model), + &iter, 0, &text, -1); + format_entry_set_text (gfs, text); +} + +static gboolean +cb_format_currency_select (G_GNUC_UNUSED GtkWidget *ct, + char * new_text, GOFormatSel *gfs) +{ + int i; + + /* ignore the clear while assigning a new value */ + if (!gfs->enable_edit || new_text == NULL || *new_text == '\0') + return FALSE; + + for (i = 0; go_format_currencies[i].symbol != NULL ; ++i) + if (!strcmp (_(go_format_currencies[i].description), new_text)) { + gfs->format.currency_index = i; + break; + } + + if (gfs->format.current_type == 1 || gfs->format.current_type == 2) + fillin_negative_samples (gfs); + draw_format_preview (gfs, TRUE); + + return TRUE; +} + +static void +cb_format_negative_form_selected (GtkTreeSelection *selection, GOFormatSel *gfs) +{ + GtkTreeIter iter; + int type; + + if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) + return; + + gtk_tree_model_get (GTK_TREE_MODEL (gfs->format.negative_types.model), + &iter, 0, &type, -1); + gfs->format.negative_format = type; + draw_format_preview (gfs, TRUE); +} + +static gint +funny_currency_order (gconstpointer _a, gconstpointer _b) +{ + char const *a = (char const *)_a; + char const *b = (char const *)_b; + + /* Keep the special 1 char versions, and both euro forms at the top */ + gboolean a1 = a[0] && (*(g_utf8_next_char (a)) == '\0' || + 0x20AC == g_utf8_get_char (a)); /* euro */ + gboolean b1 = b[0] && (*(g_utf8_next_char (b)) == '\0' || + 0x20AC == g_utf8_get_char (b)); /* euro */ + + if (a1) { + if (b1) { + return strcmp (a, b); + } else { + return -1; + } + } else { + if (b1) { + return +1; + } else { + return strcmp (a, b); + } + } +} + +static void +set_format_category (GOFormatSel *gfs, int row) +{ + GtkTreePath *path; + GtkTreeSelection *selection = gtk_tree_view_get_selection + ((GTK_TREE_VIEW(gfs->format.menu))); + + path = gtk_tree_path_new_from_indices (row, -1); + gtk_tree_selection_select_path (selection, path); + gtk_tree_path_free (path); +} + + +static void +set_format_category_menu_from_style (GOFormatSel *gfs) +{ + GOFormatFamily page; + + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + + /* Attempt to extract general parameters from the current format */ + if ((page = gfs->format.spec->family) < 0) + page = FMT_CUSTOM; /* Default to custom */ + + set_format_category (gfs, page); + fmt_dialog_enable_widgets (gfs, page); +} + +static void +populate_menu (GOFormatSel *gfs) +{ + GtkTreeViewColumn *column; + GtkTreeSelection *selection; + GtkTreeIter iter; + GtkCellRenderer *renderer; + char const * const *categories = format_category_names; + + gfs->format.menu_model = GTK_TREE_MODEL (gtk_list_store_new + (1, G_TYPE_STRING)); + gtk_tree_view_set_model (GTK_TREE_VIEW (gfs->format.menu), + gfs->format.menu_model); + selection = gtk_tree_view_get_selection + (GTK_TREE_VIEW(gfs->format.menu)); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); + + while (*categories) { + gtk_list_store_append + (GTK_LIST_STORE (gfs->format.menu_model), &iter); + gtk_list_store_set (GTK_LIST_STORE (gfs->format.menu_model), + &iter, 0, _(*categories), -1); + categories++; + } + + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("", renderer, + "text", 0, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW(gfs->format.menu), column); + + g_signal_connect (selection, + "changed", + G_CALLBACK (cb_format_class_changed), gfs); +} + + +/* + * static void + * fmt_dialog_init_format_page (FormatState *state) + */ + +static void +nfs_init (GOFormatSel *gfs) +{ + /* The various format widgets */ + static char const *const widget_names[] = { + "format_general_explanation", + "format_number_explanation", + "format_currency_explanation", + "format_accounting_explanation", + "format_date_explanation", + "format_time_explanation", + "format_percentage_explanation", + "format_fraction_explanation", + "format_scientific_explanation", + "format_text_explanation", + "format_special_explanation", + "format_custom_explanation", + + "format_separator", + "format_symbol_label", + "format_symbol_select", + "format_entry", + "format_list_label", + "format_list_scroll", + "format_list", + "format_number_decimals", + "format_negatives_label", + "format_negatives_scroll", + "format_negatives", + "format_decimal_label", + "format_code_label", + "format_symbol_box", + "format_decimal_box", + "format_code_box", + NULL + }; + + GtkWidget *tmp; + GtkTreeViewColumn *column; + GoComboText *combo; + char const *name; + int i; + GOFormatFamily page; + + GtkWidget *toplevel; + GtkWidget *old_parent; + + gfs->enable_edit = FALSE; + gfs->locale = NULL; + + gfs->gui = go_libglade_new ("go-format-sel.glade", NULL, NULL, NULL); + if (gfs->gui == NULL) + return; + + toplevel = glade_xml_get_widget (gfs->gui, "number_box"); + old_parent = gtk_widget_get_toplevel (toplevel); + gtk_widget_reparent (toplevel, GTK_WIDGET (gfs)); + gtk_widget_destroy (old_parent); + gtk_widget_queue_resize (toplevel); + + gfs->format.spec = go_format_general (); + go_format_ref (gfs->format.spec); + + gfs->format.preview = NULL; + + /* The handlers will set the format family later. -1 flags that + * all widgets are already hidden. */ + gfs->format.current_type = -1; + + /* Even if the format was not recognized it has set intelligent defaults */ + gfs->format.use_separator = gfs->format.spec->family_info.thousands_sep; + gfs->format.num_decimals = gfs->format.spec->family_info.num_decimals; + gfs->format.negative_format = gfs->format.spec->family_info.negative_fmt; + gfs->format.currency_index = gfs->format.spec->family_info.currency_symbol_index; + + gfs->format.preview_box = glade_xml_get_widget (gfs->gui, "preview_box"); + gfs->format.preview = GTK_TEXT_VIEW (glade_xml_get_widget (gfs->gui, "preview")); + { + PangoFontMetrics *metrics; + PangoContext *context; + GtkWidget *w = GTK_WIDGET (gfs->format.preview); + gint char_width; + + /* request width in number of chars */ + context = gtk_widget_get_pango_context (w); + metrics = pango_context_get_metrics (context, + gtk_widget_get_style(w)->font_desc, + pango_context_get_language (context)); + char_width = pango_font_metrics_get_approximate_char_width (metrics); + gtk_widget_set_size_request (w, PANGO_PIXELS (char_width) * FORMAT_PREVIEW_MAX, -1); + pango_font_metrics_unref (metrics); + } + gfs->format.preview_buffer = gtk_text_view_get_buffer (gfs->format.preview); + + gfs->format.menu = glade_xml_get_widget (gfs->gui, "format_menu"); + populate_menu (gfs); + + /* Collect all the required format widgets and hide them */ + for (i = 0; (name = widget_names[i]) != NULL; ++i) { + tmp = glade_xml_get_widget (gfs->gui, name); + + if (tmp == NULL) { + g_warning ("nfs_init : failed to load widget %s", name); + } + + g_return_if_fail (tmp != NULL); + + gtk_widget_hide (tmp); + gfs->format.widget[i] = tmp; + } + + /* set minimum heights */ + gtk_widget_set_size_request (gfs->format.widget[F_LIST], -1, 100); + gtk_widget_set_size_request (gfs->format.widget[F_NEGATIVE], -1, 100); + + /* use size group for better widget alignment */ + gfs->format.size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + gtk_size_group_add_widget (gfs->format.size_group, + gfs->format.widget[F_SYMBOL_LABEL]); + gtk_size_group_add_widget (gfs->format.size_group, + gfs->format.widget[F_DECIMAL_LABEL]); + + /* hide preview by default until a value is set */ + gtk_widget_hide (gfs->format.preview_box); + + /* setup the structure of the negative type list */ + gfs->format.negative_types.model = gtk_list_store_new (3, + G_TYPE_INT, + G_TYPE_STRING, + G_TYPE_STRING); + gfs->format.negative_types.view = GTK_TREE_VIEW (gfs->format.widget[F_NEGATIVE]); + gtk_tree_view_set_model (gfs->format.negative_types.view, + GTK_TREE_MODEL (gfs->format.negative_types.model)); + column = gtk_tree_view_column_new_with_attributes (_("Negative Number Format"), + gtk_cell_renderer_text_new (), + "text", 1, + "foreground", 2, + NULL); + gtk_tree_view_append_column (gfs->format.negative_types.view, column); + gfs->format.negative_types.selection = + gtk_tree_view_get_selection (gfs->format.negative_types.view); + gtk_tree_selection_set_mode (gfs->format.negative_types.selection, + GTK_SELECTION_SINGLE); + g_signal_connect (G_OBJECT (gfs->format.negative_types.selection), "changed", + G_CALLBACK (cb_format_negative_form_selected), gfs); + g_signal_connect (G_OBJECT (gfs->format.widget[F_DECIMAL_SPIN]), "value_changed", + G_CALLBACK (cb_decimals_changed), gfs); + g_signal_connect (G_OBJECT (gfs->format.widget[F_SEPARATOR]), "toggled", + G_CALLBACK (cb_separator_toggle), gfs); + + /* setup custom format list */ + gfs->format.formats.model = gtk_list_store_new (1, G_TYPE_STRING); + gfs->format.formats.view = GTK_TREE_VIEW (gfs->format.widget[F_LIST]); + gtk_tree_view_set_model (gfs->format.formats.view, + GTK_TREE_MODEL (gfs->format.formats.model)); + column = gtk_tree_view_column_new_with_attributes (_("Number Formats"), + gtk_cell_renderer_text_new (), + "text", 0, + NULL); + gtk_tree_view_append_column (gfs->format.formats.view, column); + gfs->format.formats.selection = + gtk_tree_view_get_selection (gfs->format.formats.view); + gtk_tree_selection_set_mode (gfs->format.formats.selection, + GTK_SELECTION_BROWSE); + g_signal_connect (G_OBJECT (gfs->format.formats.selection), "changed", + G_CALLBACK (cb_format_list_select), gfs); + + /* Setup handler Currency & Accounting currency symbols */ + combo = GO_COMBO_TEXT (gfs->format.widget[F_SYMBOL]); + if (combo != NULL) { + GList *ptr, *l = NULL; + + for (i = 0; go_format_currencies[i].symbol != NULL ; ++i) + l = g_list_append (l, _((gchar *)go_format_currencies[i].description)); + l = g_list_sort (l, funny_currency_order); + + for (ptr = l; ptr != NULL ; ptr = ptr->next) + go_combo_text_add_item (combo, ptr->data); + g_list_free (l); + go_combo_text_set_text (combo, + _((char const *)go_format_currencies[gfs->format.currency_index].description), + GO_COMBO_TEXT_FROM_TOP); + g_signal_connect (G_OBJECT (combo), "entry_changed", + G_CALLBACK (cb_format_currency_select), gfs); + gtk_label_set_mnemonic_widget ( + GTK_LABEL (glade_xml_get_widget (gfs->gui, "format_symbol_label")), + GTK_WIDGET (combo)); + } + + /* Setup special handler for Custom */ + gfs->format.entry_changed_id = g_signal_connect ( + G_OBJECT (gfs->format.widget[F_ENTRY]), "changed", + G_CALLBACK (cb_format_entry_changed), gfs); + + /* Connect signal for format menu */ + set_format_category_menu_from_style (gfs); + + if ((page = gfs->format.spec->family) < 0) + page = FMT_CUSTOM; /* Default to custom */ + fmt_dialog_enable_widgets (gfs, page); + + gfs->enable_edit = TRUE; +} + +static void +go_format_sel_finalize (GObject *obj) +{ + GOFormatSel *gfs = GO_FORMAT_SEL (obj); + + g_free (gfs->locale); + gfs->locale = NULL; + + if (gfs->format.spec) { + go_format_unref (gfs->format.spec); + gfs->format.spec = NULL; + } + + if (gfs->format.size_group) { + g_object_unref (gfs->format.size_group); + gfs->format.size_group = NULL; + } + + if (gfs->gui) { + g_object_unref (G_OBJECT (gfs->gui)); + gfs->gui = NULL; + } + + G_OBJECT_CLASS (g_type_class_peek (GTK_TYPE_HBOX))->finalize (obj); +} + +static gboolean +accumulate_first_string (GSignalInvocationHint *ihint, + GValue *accum_result, + const GValue *handler_result, + gpointer data) +{ + gchar const *str = g_value_get_string (handler_result); + if (NULL != str) { + g_value_set_string (accum_result, str); + return FALSE; + } + return TRUE; +} + +static void +nfs_class_init (GObjectClass *klass) +{ + klass->finalize = go_format_sel_finalize; + + go_format_sel_signals [FORMAT_CHANGED] = + g_signal_new ("format_changed", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GOFormatSelClass, format_changed), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); + + go_format_sel_signals [GENERATE_PREVIEW] = + g_signal_new ("generate-preview", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GOFormatSelClass, generate_preview), + accumulate_first_string, NULL, + go__STRING__POINTER, + G_TYPE_STRING, 1, G_TYPE_POINTER); +} + +GSF_CLASS (GOFormatSel, go_format_sel, + nfs_class_init, nfs_init, GTK_TYPE_HBOX) + +GtkWidget * +go_format_sel_new (void) +{ + return g_object_new (GO_FORMAT_SEL_TYPE, NULL); +} + +void +go_format_sel_set_focus (GOFormatSel *gfs) +{ + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + + gtk_widget_grab_focus (GTK_WIDGET (gfs->format.menu)); +} + +void +go_format_sel_set_style_format (GOFormatSel *gfs, + GOFormat *style_format) +{ + GoComboText *combo; + + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + g_return_if_fail (style_format != NULL); + + go_format_ref (style_format); + + go_format_unref (gfs->format.spec); + + gfs->format.spec = style_format; + + gfs->format.use_separator = style_format->family_info.thousands_sep; + gfs->format.num_decimals = style_format->family_info.num_decimals; + gfs->format.negative_format = style_format->family_info.negative_fmt; + gfs->format.currency_index = style_format->family_info.currency_symbol_index; + + combo = GO_COMBO_TEXT (gfs->format.widget[F_SYMBOL]); + go_combo_text_set_text + (combo, + _(go_format_currencies[gfs->format.currency_index].description), + GO_COMBO_TEXT_FROM_TOP); + + set_format_category_menu_from_style (gfs); + draw_format_preview (gfs, TRUE); +} + +void +go_format_sel_set_dateconv (GOFormatSel *gfs, + GODateConventions const *date_conv) +{ + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + g_return_if_fail (date_conv != NULL); + + /* FIXME is it safe ? */ + + gfs->date_conv = date_conv; + + draw_format_preview (gfs, TRUE); +} + +GOFormat * +go_format_sel_get_fmt (GOFormatSel *gfs) +{ + g_return_val_if_fail (IS_GO_FORMAT_SEL (gfs), NULL); + return gfs->format.spec; +} + +GODateConventions const * +go_format_sel_get_dateconv (GOFormatSel *gfs) +{ + g_return_val_if_fail (IS_GO_FORMAT_SEL (gfs), NULL); + return gfs->date_conv; +} + +void +go_format_sel_show_preview (GOFormatSel *gfs) +{ + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + gtk_widget_show (gfs->format.preview_box); + draw_format_preview (gfs, TRUE); +} + +void +go_format_sel_hide_preview (GOFormatSel *gfs) +{ + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + gtk_widget_hide (gfs->format.preview_box); +} + +void +go_format_sel_editable_enters (GOFormatSel *gfs, + GtkWindow *window) +{ + g_return_if_fail (IS_GO_FORMAT_SEL (gfs)); + go_editable_enters (window, gfs->format.widget[F_DECIMAL_SPIN]); + go_editable_enters (window, gfs->format.widget[F_ENTRY]); +} + +void +go_format_sel_set_locale (GOFormatSel *gfs, + char const *locale) +{ + g_free (gfs->locale); + gfs->locale = g_strdup (locale); + + cb_format_class_changed (NULL, gfs); +} + +/* The following utility function should possibly be in format.h but we */ +/* access to the array of category names which are better located here. */ +char const * +go_format_sel_format_classification (GOFormat const *style_format) +{ + GOFormatFamily page = style_format->family; + + if (page < 0 || page > FMT_CUSTOM) + page = FMT_CUSTOM; /* Default to custom */ + + return _(format_category_names[page]); +} diff --git a/lib/goffice-0.0.4/goffice/gtk/go-format-sel.glade b/lib/goffice-0.0.4/goffice/gtk/go-format-sel.glade new file mode 100644 index 0000000000..c3aabe366e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-format-sel.glade @@ -0,0 +1,848 @@ + + + + + + + + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + + + + 12 + True + False + 0 + + + + True + False + 12 + + + + True + False + 12 + + + + True + False + 6 + + + + True + Ca_tegories: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + format_menu + + + + + + 0 + False + False + + + + + + True + True + GTK_POLICY_NEVER + GTK_POLICY_NEVER + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + 5 + True + True + False + False + False + True + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + False + 6 + + + + True + Preview: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + format_menu + + + + + + 0 + False + False + + + + + + True + True + GTK_POLICY_NEVER + GTK_POLICY_NEVER + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + GTK_JUSTIFY_LEFT + GTK_WRAP_NONE + False + 2 + 2 + 0 + 3 + 3 + 0 + + + + + + + + + 0 + True + True + + + + + 0 + False + True + + + + + 0 + False + False + + + + + + True + False + 6 + + + + True + 2 + 2 + False + 0 + 0 + + + + True + Display numeric values with a fixed number of decimals. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display currency amounts. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display amounts in traditional accounting styles. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display dates and optionally times of day. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display times of day. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display values as closest fractional approximation. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display values with power-of-ten scaling. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display and input values as strings with no interpretation. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Specify an XL-style format directly + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Display values as percentages. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + + True + Select an appropriate format automatically. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 1 + 0 + 0 + + + 0 + 2 + 0 + 2 + fill + shrink + + + + + 0 + False + True + + + + + + True + + + 0 + False + True + + + + + + True + False + 6 + + + + True + Deci_mal places: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + format_number_decimals + + + + + + 0 + False + False + + + + + + True + True + 1 + 0 + True + GTK_UPDATE_ALWAYS + False + False + 0 0 30 1 3 3 + + + + + + 0 + False + False + + + + + + True + True + _Use Separator for 1000's + True + GTK_RELIEF_NORMAL + False + False + True + + + 6 + False + False + + + + + 0 + False + True + + + + + + True + False + 6 + + + + True + S_ymbol: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + + + + 0 + False + False + + + + + + True + go_combo_text_glade_new + 0 + 0 + Mon, 07 Oct 2002 16:09:16 GMT + + + + + + 0 + True + True + + + + + 0 + False + True + + + + + + True + 2 + 1 + False + 6 + 0 + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + False + False + False + + + + + + + + 0 + 1 + 1 + 2 + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + False + False + True + + + + + + + + 0 + 1 + 1 + 2 + + + + + + True + _Format: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + format_list + + + + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Negative number _format: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + format_negatives + + + + + + 0 + 1 + 0 + 1 + fill + + + + + + 0 + True + True + + + + + + True + False + 6 + + + + True + Format c_ode: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + format_entry + + + + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + False + + + + + + 0 + True + True + + + + + 0 + False + True + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + diff --git a/lib/goffice-0.0.4/goffice/gtk/go-format-sel.h b/lib/goffice-0.0.4/goffice/gtk/go-format-sel.h new file mode 100644 index 0000000000..5bfccf6b41 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-format-sel.h @@ -0,0 +1,58 @@ +/** + * go-format-sel.h: A widget to select a format + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + **/ + +#ifndef _GO_FORMAT_SEL_H_ +#define _GO_FORMAT_SEL_H_ + +#include +#include + +G_BEGIN_DECLS + +#define GO_FORMAT_SEL_TYPE (go_format_sel_get_type ()) +#define GO_FORMAT_SEL(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GO_FORMAT_SEL_TYPE, GOFormatSel)) +#define IS_GO_FORMAT_SEL(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GO_FORMAT_SEL_TYPE)) +typedef struct _GOFormatSel GOFormatSel; + +GType go_format_sel_get_type (void); +GtkWidget * go_format_sel_new (void); + +void go_format_sel_set_focus (GOFormatSel *gfs); +void go_format_sel_set_style_format (GOFormatSel *gfs, + GOFormat *style_format); +void go_format_sel_set_locale (GOFormatSel *gfs, + char const *locale); + +GOFormat *go_format_sel_get_fmt (GOFormatSel *gfs); + +GODateConventions const * + go_format_sel_get_dateconv (GOFormatSel *gfs); +void go_format_sel_set_dateconv (GOFormatSel *gfs, + GODateConventions const *date_conv); + +void go_format_sel_show_preview (GOFormatSel *gfs); +void go_format_sel_hide_preview (GOFormatSel *gfs); +void go_format_sel_editable_enters (GOFormatSel *gfs, + GtkWindow *window); + +/* FIXME FIXME FIXME does not belong here */ +char const *go_format_sel_format_classification (GOFormat const *style_format); + +G_END_DECLS + +#endif /* _GO_FORMAT_SEL_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/go-graph-widget.c b/lib/goffice-0.0.4/goffice/gtk/go-graph-widget.c new file mode 100644 index 0000000000..3da7a32d9d --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-graph-widget.c @@ -0,0 +1,249 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-graph-widget.c : + * + * Copyright (C) 2003-2005 Jean Brefort (jean.brefort@normalesup.org) + * 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 Library 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. + */ + +#include +#include "go-graph-widget.h" +#include +#include +#include +#include + +#include + +enum { + GRAPH_WIDGET_PROP_0, + GRAPH_WIDGET_PROP_ASPECT_RATIO, +}; + +struct _GOGraphWidget{ + GtkDrawingArea base; + + GogRendererPixbuf *renderer; + GogGraph *graph; + GogChart *chart; /* first chart created on init */ + double aspect_ratio, width, height, xoffset, yoffset; + + /* Idle handler ID */ + guint idle_id; +}; + +typedef GtkDrawingAreaClass GOGraphWidgetClass; + +static GtkWidgetClass *graph_parent_klass; + +/* Size allocation handler for the widget */ +static void +go_graph_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation) +{ + GOGraphWidget *w = GO_GRAPH_WIDGET (widget); + w->width = allocation->width; + w->height = allocation->height; + if (w->aspect_ratio > 0.) { + if (w->height > w->width * w->aspect_ratio) { + w->yoffset = (w->height - w->width * w->aspect_ratio) / 2.; + w->height = w->width * w->aspect_ratio; + w->xoffset = 0; + } else { + w->xoffset = (w->width - w->height / w->aspect_ratio) / 2.; + w->width = w->height / w->aspect_ratio; + w->yoffset = 0; + } + } + gog_renderer_pixbuf_update (w->renderer, w->width, w->height, 1.0); + graph_parent_klass->size_allocate (widget, allocation); +} + +static gboolean +go_graph_widget_expose_event (GtkWidget *widget, GdkEventExpose *event) +{ + GOGraphWidget *w = GO_GRAPH_WIDGET (widget); + GdkPixbuf *pixbuf; + GdkRectangle display_rect, draw_rect; + GdkRegion *draw_region; + + if (w->idle_id) + return TRUE; + pixbuf = gog_renderer_pixbuf_get (w->renderer); + display_rect.x = w->xoffset; + display_rect.y = w->yoffset; + display_rect.width = w->width; + display_rect.height = w->height; + draw_region = gdk_region_rectangle (&display_rect); + gdk_region_intersect (draw_region, event->region); + if (!gdk_region_empty (draw_region)) { + gdk_region_get_clipbox (draw_region, &draw_rect); + gdk_draw_pixbuf (widget->window, NULL, pixbuf, + /* pixbuf 0, 0 is at pix_rect.x, pix_rect.y */ + draw_rect.x - display_rect.x, + draw_rect.y - display_rect.y, + draw_rect.x, + draw_rect.y, + draw_rect.width, + draw_rect.height, + GDK_RGB_DITHER_NORMAL, 0, 0); + } + gdk_region_destroy (draw_region); + return FALSE; +} + +static void +go_graph_widget_finalize (GObject *object) +{ + GOGraphWidget *w = GO_GRAPH_WIDGET (object); + g_object_unref (w->graph); + g_object_unref (w->renderer); + (G_OBJECT_CLASS (graph_parent_klass))->finalize (object); +} + +static void +go_graph_widget_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GOGraphWidget *w = GO_GRAPH_WIDGET (obj); + + switch (param_id) { + case GRAPH_WIDGET_PROP_ASPECT_RATIO : + w->aspect_ratio = g_value_get_double (value); + w->xoffset = w->yoffset = 0.; + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } + gtk_widget_queue_resize (GTK_WIDGET (obj)); +} + +static void +go_graph_widget_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GOGraphWidget *w = GO_GRAPH_WIDGET (obj); + + switch (param_id) { + case GRAPH_WIDGET_PROP_ASPECT_RATIO : + g_value_set_double (value, w->aspect_ratio); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static void +go_graph_widget_class_init (GOGraphWidgetClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass *) klass; + + graph_parent_klass = (GtkWidgetClass *) g_type_class_peek_parent (klass); + + object_class->finalize = go_graph_widget_finalize; + object_class->get_property = go_graph_widget_get_property; + object_class->set_property = go_graph_widget_set_property; + widget_class->size_allocate = go_graph_widget_size_allocate; + widget_class->expose_event = go_graph_widget_expose_event; + g_object_class_install_property (object_class, + GRAPH_WIDGET_PROP_ASPECT_RATIO, + g_param_spec_double ("aspect-ratio", "aspect-ratio", + "Aspect ratio for rendering the graph, used only if greater than 0.", + -G_MAXDOUBLE, G_MAXDOUBLE, -1., G_PARAM_READWRITE)); +} + +static gint +idle_handler (GOGraphWidget *w) +{ + GDK_THREADS_ENTER (); + + gog_renderer_pixbuf_update (w->renderer, w->width, w->height, 1.0); + + /* Reset idle id */ + w->idle_id = 0; + gtk_widget_queue_draw (GTK_WIDGET (w)); + + GDK_THREADS_LEAVE (); + + return FALSE; +} + +static void +go_graph_widget_request_update (GOGraphWidget *w) +{ + if (!w->idle_id) + w->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW - 20, + (GSourceFunc) idle_handler, w, NULL); +} + +static void +go_graph_widget_init (GOGraphWidget *w) +{ + w->graph = (GogGraph *) g_object_new (GOG_GRAPH_TYPE, NULL); + w->renderer = g_object_new (GOG_RENDERER_PIXBUF_TYPE, + "model", w->graph, + NULL); + g_signal_connect_swapped (w->renderer, "request_update", + G_CALLBACK (go_graph_widget_request_update), w); + /* by default, create one chart and add it to the graph */ + w->chart = (GogChart *) + gog_object_add_by_name (GOG_OBJECT (w->graph), "Chart", NULL); + w->idle_id = 0; +} + +/** + * go_graph_widget_new : + * + * Creates a new #GOGraphWidget with an embedded #GogGraph. Also add a #GogChart inside + * graph. + * Returns the newly created #GOGraphWidget. + **/ +GtkWidget * +go_graph_widget_new (void) +{ + return GTK_WIDGET (g_object_new (GO_GRAPH_WIDGET_TYPE, NULL)); +} + +GSF_CLASS (GOGraphWidget, go_graph_widget, + go_graph_widget_class_init, go_graph_widget_init, + gtk_drawing_area_get_type ()) + +/** + * go_graph_widget_get_graph : + * @widget : #GOGraphWidget + * + * Returns the #GogGraph embedded in the widget. + **/ +GogGraph * +go_graph_widget_get_graph (GOGraphWidget *widget) +{ + g_return_val_if_fail (IS_GO_GRAPH_WIDGET (widget), NULL); + return widget->graph; +} + +/** + * go_graph_widget_get_chart : + * @widget : #GOGraphWidget + * + * Returns the #GogChart created by go_graph_widget_new(). + **/ +GogChart * +go_graph_widget_get_chart (GOGraphWidget *widget) +{ + g_return_val_if_fail (IS_GO_GRAPH_WIDGET (widget), NULL); + return widget->chart; +} diff --git a/lib/goffice-0.0.4/goffice/gtk/go-graph-widget.h b/lib/goffice-0.0.4/goffice/gtk/go-graph-widget.h new file mode 100644 index 0000000000..8c3e9e4a98 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-graph-widget.h @@ -0,0 +1,45 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-graph-widget.h : + * + * Copyright (C) 2003-2005 Jean Brefort (jean.brefort@normalesup.org) + * 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 Library 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. + */ + +#ifndef _GO_GRAPH_WIDGET_H_ +#define _GO_GRAPH_WIDGET_H_ + +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GO_GRAPH_WIDGET_TYPE (go_graph_widget_get_type ()) +#define GO_GRAPH_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_GRAPH_WIDGET_TYPE, GOGraphWidget)) +#define IS_GO_GRAPH_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_GRAPH_WIDGET_TYPE)) + +typedef struct _GOGraphWidget GOGraphWidget; + +GType go_graph_widget_get_type (void); +GtkWidget *go_graph_widget_new (void); + +GogGraph *go_graph_widget_get_graph (GOGraphWidget *widget); +GogChart *go_graph_widget_get_chart (GOGraphWidget *widget); + +G_END_DECLS + +#endif /* _GO_GRAPH_WIDGET_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/go-locale-sel.c b/lib/goffice-0.0.4/goffice/gtk/go-locale-sel.c new file mode 100644 index 0000000000..a8ed66c786 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-locale-sel.c @@ -0,0 +1,678 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * A locale selector widget. + * + * Copyright (C) 2003 Andreas J. Guelzow + * + * based on code by: + * Copyright (C) 2000 Marco Pesenti Gritti + * from the galeon code base + * + * 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, 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. + */ + +#include +#include "go-locale-sel.h" +#include "go-optionmenu.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LS(x) GO_LOCALE_SEL (x) + +#define LOCALE_NAME_KEY "Name of Locale" + +/* ------------------------------------------------------------------------- */ + +typedef enum { + LG_WESTERN_EUROPE, + LG_EASTERN_EUROPE, + LG_NORTH_AMERICA, + LG_SOUTHCENTRAL_AMERICA, + LG_ASIA, + LG_MIDDLE_EAST, + LG_AFRICA, + LG_AUSTRALIA, + LG_OTHER, + LG_LAST +} LocaleGroup; + +typedef struct +{ + char const *group_name; + LocaleGroup const lgroup; +} +LGroupInfo; + +static LGroupInfo lgroups[] = { + {N_("Western Europe"), LG_WESTERN_EUROPE}, + {N_("Eastern Europe"), LG_EASTERN_EUROPE}, + {N_("North America"), LG_NORTH_AMERICA}, + {N_("South & Central America"), LG_SOUTHCENTRAL_AMERICA}, + {N_("Asia"), LG_ASIA}, + {N_("Africa"), LG_AFRICA}, + {N_("Australia"), LG_AUSTRALIA}, + {N_("Other"), LG_OTHER}, + {NULL, LG_LAST} +}; + +static int +lgroups_order (const void *_a, const void *_b) +{ + const LGroupInfo *a = (const LGroupInfo *)_a; + const LGroupInfo *b = (const LGroupInfo *)_b; + + return g_utf8_collate (_(a->group_name), _(b->group_name)); +} + +/* ------------------------------------------------------------------------- */ + +typedef struct { + gchar const *locale_title; + gchar const *locale; + LocaleGroup const lgroup; + gboolean available; +} LocaleInfo; + +static LocaleInfo locale_trans_array[] = { + /* + * The format here is "Country/Language (locale)" or just + * "Country (locale)" when there is only one choice or one + * very dominant language. + * + * Note: lots of people get very emotional over this. Please + * err on the safe side, if any. + */ + {N_("United States/English (C)"), "C", LG_NORTH_AMERICA}, + {N_("South Africa Afrikaans (af_ZA)"), "af_ZA", LG_AFRICA }, + {N_("Ethiopia/Amharic (am_ET)"), "am_ET", LG_AFRICA }, + {N_("United Arab Emirates (ar_AE)"), "ar_AE", LG_ASIA }, + {N_("Bahrain (ar_BH)"), "ar_BH", LG_ASIA }, + {N_("Algeria (ar_DZ)"), "ar_DZ", LG_AFRICA }, + {N_("Egypt (ar_EG)"), "ar_EG", LG_AFRICA }, + {N_("India/Arabic (ar_IN)"), "ar_IN", LG_ASIA }, + {N_("Iraq (ar_IQ)"), "ar_IQ", LG_ASIA }, + {N_("Jordan (ar_JO)"), "ar_JO", LG_ASIA }, + {N_("Kuwait (ar_KW)"), "ar_KW", LG_ASIA }, + {N_("Lebanon (ar_LB)"), "ar_LB", LG_ASIA }, + {N_("Libya (ar_LY)"), "ar_LY", LG_AFRICA }, + {N_("Morocco (ar_MA)"), "ar_MA", LG_AFRICA }, + {N_("Oman (ar_OM)"), "ar_OM", LG_ASIA }, + {N_("Qatar (ar_QA)"), "ar_QA", LG_ASIA }, + {N_("Saudi Arabia (ar_SA)"), "ar_SA", LG_ASIA }, + {N_("Sudan (ar_SD)"), "ar_SD", LG_AFRICA }, + {N_("Syria (ar_SY)"), "ar_SY", LG_ASIA }, + {N_("Tunisia (ar_TN)"), "ar_TN", LG_AFRICA }, + {N_("Yemen (ar_YE)"), "ar_YE", LG_ASIA }, + {N_("Azerbaijan (az_AZ)"), "az_AZ", LG_ASIA }, + {N_("Belarus (be_BY)"), "be_BY", LG_EASTERN_EUROPE }, + {N_("Bulgaria (bg_BG)"), "bg_BG", LG_EASTERN_EUROPE }, + {N_("Bangladesh (bn_BD)"), "bn_BD", LG_ASIA }, + {N_("India/Bengali (bn_IN)"), "bn_IN", LG_ASIA }, + {N_("France/Breton (br_FR)"), "br_FR", LG_WESTERN_EUROPE }, + {N_("Bosnia and Herzegowina (bs_BA)"), "bs_BA", LG_EASTERN_EUROPE }, + {N_("Spain/Catalan (ca_ES)"), "ca_ES", LG_WESTERN_EUROPE }, + {N_("Czech Republic (cs_CZ)"), "cs_CZ", LG_EASTERN_EUROPE }, + {N_("Great Britain/Welsh (cy_GB)"), "cy_GB", LG_WESTERN_EUROPE }, + {N_("Denmark (da_DK)"), "da_DK", LG_WESTERN_EUROPE }, + {N_("Austria (de_AT)"), "de_AT", LG_WESTERN_EUROPE }, + {N_("Belgium/German (de_BE)"), "de_BE", LG_WESTERN_EUROPE }, + {N_("Switzerland/German (de_CH)"), "de_CH", LG_WESTERN_EUROPE }, + {N_("Germany (de_DE)"), "de_DE", LG_WESTERN_EUROPE}, + {N_("Luxembourg/German (de_LU)"), "de_LU", LG_WESTERN_EUROPE }, + {N_("Greece (el_GR)"), "el_GR", LG_WESTERN_EUROPE }, + {N_("Australia (en_AU)"), "en_AU", LG_AUSTRALIA }, + {N_("Botswana (en_BW)"), "en_BW", LG_AFRICA }, + {N_("Canada/English (en_CA)"), "en_CA", LG_NORTH_AMERICA}, + {N_("Great Britain (en_GB)"), "en_GB", LG_WESTERN_EUROPE}, + {N_("Hong Kong/English (en_HK)"), "en_HK", LG_ASIA }, + {N_("Ireland (en_IE)"), "en_IE", LG_WESTERN_EUROPE }, + {N_("India/English (en_IN)"), "en_IN", LG_ASIA }, + {N_("New Zealand (en_NZ)"), "en_NZ", LG_AUSTRALIA }, + {N_("Philippines (en_PH)"), "en_PH", LG_ASIA }, + {N_("Singapore/English (en_SG)"), "en_SG", LG_ASIA }, + {N_("United States/English (en_US)"), "en_US", LG_NORTH_AMERICA}, + {N_("South Africa/English (en_ZA)"), "en_ZA", LG_AFRICA }, + {N_("Zimbabwe (en_ZW)"), "en_ZW", LG_AFRICA }, + {N_("Esperanto (eo_EO)"), "eo_EO", LG_OTHER }, + {N_("Argentina (es_AR)"), "es_AR", LG_SOUTHCENTRAL_AMERICA }, + {N_("Bolivia (es_BO)"), "es_BO", LG_SOUTHCENTRAL_AMERICA }, + {N_("Chile (es_CL)"), "es_CL", LG_SOUTHCENTRAL_AMERICA }, + {N_("Colombia (es_CO)"), "es_CO", LG_SOUTHCENTRAL_AMERICA }, + {N_("Costa Rica (es_CR)"), "es_CR", LG_SOUTHCENTRAL_AMERICA }, + {N_("Dominican Republic (es_DO)"), "es_DO", LG_SOUTHCENTRAL_AMERICA }, + {N_("Ecuador (es_EC)"), "es_EC", LG_SOUTHCENTRAL_AMERICA }, + {N_("Spain (es_ES)"), "es_ES", LG_WESTERN_EUROPE }, + {N_("Guatemala (es_GT)"), "es_GT", LG_SOUTHCENTRAL_AMERICA }, + {N_("Honduras (es_HN)"), "es_HN", LG_SOUTHCENTRAL_AMERICA }, + {N_("Mexico (es_MX)"), "es_MX", LG_SOUTHCENTRAL_AMERICA }, + {N_("Nicaragua (es_NI)"), "es_NI", LG_SOUTHCENTRAL_AMERICA }, + {N_("Panama (es_PA)"), "es_PA", LG_SOUTHCENTRAL_AMERICA }, + {N_("Peru (es_PE)"), "es_PE", LG_SOUTHCENTRAL_AMERICA }, + {N_("Puerto Rico (es_PR)"), "es_PR", LG_SOUTHCENTRAL_AMERICA }, + {N_("Paraguay (es_PY)"), "es_PY", LG_SOUTHCENTRAL_AMERICA }, + {N_("El Salvador (es_SV)"), "es_SV", LG_SOUTHCENTRAL_AMERICA }, + {N_("United States/Spanish (es_US)"), "es_US", LG_NORTH_AMERICA }, + {N_("Uruguay (es_UY)"), "es_UY", LG_SOUTHCENTRAL_AMERICA }, + {N_("Venezuela (es_VE)"), "es_VE", LG_SOUTHCENTRAL_AMERICA }, + {N_("Estonia (et_EE)"), "et_EE", LG_EASTERN_EUROPE }, + {N_("Spain/Basque (eu_ES)"), "eu_ES", LG_WESTERN_EUROPE }, + {N_("Iran (fa_IR)"), "fa_IR", LG_ASIA }, + {N_("Finland/Finnish (fi_FI)"), "fi_FI", LG_WESTERN_EUROPE }, + {N_("Faroe Islands (fo_FO)"), "fo_FO", LG_WESTERN_EUROPE }, + {N_("Belgium/French (fr_BE)"), "fr_BE", LG_WESTERN_EUROPE }, + {N_("Canada/French (fr_CA)"), "fr_CA", LG_NORTH_AMERICA }, + {N_("Switzerland/French (fr_CH)"), "fr_CH", LG_WESTERN_EUROPE }, + {N_("France (fr_FR)"), "fr_FR", LG_WESTERN_EUROPE }, + {N_("Ireland/Gaelic (ga_IE)"), "ga_IE", LG_WESTERN_EUROPE }, + {N_("Great Britain/Scottish Gaelic (gd_GB)"), "gd_GB", LG_WESTERN_EUROPE }, + {N_("Spain/Galician (gl_ES)"), "gl_ES", LG_WESTERN_EUROPE }, + {N_("Great Britain/Manx Gaelic (gv_GB)"), "gv_GB", LG_WESTERN_EUROPE }, + {N_("India/Hindu (hi_IN)"), "hi_IN", LG_ASIA }, + {N_("Croatia (hr_HR)"), "hr_HR", LG_EASTERN_EUROPE }, + {N_("Hungary (hu_HU)"), "hu_HU", LG_EASTERN_EUROPE }, + {N_("Armenia (hy_AM)"), "hy_AM", LG_EASTERN_EUROPE }, + {N_("(i18n)"), "i18n", LG_OTHER }, + {N_("Indonesia (id_ID)"), "id_ID", LG_ASIA }, + {N_("Iceland (is_IS)"), "is_IS", LG_WESTERN_EUROPE }, + {N_("(iso14651_t1)"), "iso14651_t1", LG_OTHER }, + {N_("Switzerland/Italian (it_CH)"), "it_CH", LG_WESTERN_EUROPE }, + {N_("Italy (it_IT)"), "it_IT", LG_WESTERN_EUROPE }, + {N_("Israel/Hebrew (iw_IL)"), "iw_IL", LG_ASIA }, + {N_("Japan (ja_JP)"), "ja_JP", LG_ASIA }, + {N_("Georgia (ka_GE)"), "ka_GE", LG_EASTERN_EUROPE }, + {N_("Greenland (kl_GL)"), "kl_GL", LG_WESTERN_EUROPE }, + {N_("Korea (ko_KR)"), "ko_KR", LG_ASIA }, + {N_("Great Britain/Cornish (kw_GB)"), "kw_GB", LG_WESTERN_EUROPE }, + {N_("Lithuania (lt_LT)"), "lt_LT", LG_EASTERN_EUROPE }, + {N_("Latvia (lv_LV)"), "lv_LV", LG_EASTERN_EUROPE }, + {N_("New Zealand/Maori (mi_NZ)"), "mi_NZ", LG_AUSTRALIA }, + {N_("Macedonia (mk_MK)"), "mk_MK", LG_EASTERN_EUROPE }, + {N_("India/Marathi (mr_IN)"), "mr_IN", LG_ASIA }, + {N_("Malaysia (ms_MY)"), "ms_MY", LG_ASIA }, + {N_("Malta (mt_MT)"), "mt_MT", LG_WESTERN_EUROPE }, + {N_("Belgium/Flemish (nl_BE)"), "nl_BE", LG_WESTERN_EUROPE }, + {N_("The Netherlands (nl_NL)"), "nl_NL", LG_WESTERN_EUROPE }, + {N_("Norway/Nynorsk (nn_NO)"), "nn_NO", LG_WESTERN_EUROPE }, + {N_("Norway/Bokmal (no_NO)"), "no_NO", LG_WESTERN_EUROPE}, + {N_("France/Occitan (oc_FR)"), "oc_FR", LG_WESTERN_EUROPE }, + {N_("Poland (pl_PL)"), "pl_PL", LG_EASTERN_EUROPE }, + {N_("Brazil (pt_BR)"), "pt_BR", LG_SOUTHCENTRAL_AMERICA }, + {N_("Portugal (pt_PT)"), "pt_PT", LG_WESTERN_EUROPE }, + {N_("Romania (ro_RO)"), "ro_RO", LG_EASTERN_EUROPE }, + {N_("Russia (ru_RU)"), "ru_RU", LG_EASTERN_EUROPE }, + {N_("Ukraine/Russian (ru_UA)"), "ru_UA", LG_EASTERN_EUROPE }, + {N_("Norway/Saami (se_NO)"), "se_NO", LG_WESTERN_EUROPE }, + {N_("Slovakia (sk_SK)"), "sk_SK", LG_EASTERN_EUROPE }, + {N_("Slovenia (sl_SI)"), "sl_SI", LG_EASTERN_EUROPE }, + {N_("Albania (sq_AL)"), "sq_AL", LG_EASTERN_EUROPE }, + {N_("Yugoslavia (sr_YU)"), "sr_YU", LG_EASTERN_EUROPE }, + {N_("Finland/Swedish (sv_FI)"), "sv_FI", LG_WESTERN_EUROPE }, + {N_("Sweden (sv_SE)"), "sv_SE", LG_WESTERN_EUROPE }, + {N_("India/Tamil (ta_IN)"), "ta_IN", LG_ASIA }, + {N_("India/Telugu (te_IN)"), "te_IN", LG_ASIA }, + {N_("Tajikistan (tg_TJ)"), "tg_TJ", LG_ASIA }, + {N_("Thailand (th_TH)"), "th_TH", LG_ASIA }, + {N_("Eritrea (ti_ER)"), "ti_ER", LG_AFRICA }, + {N_("Ethiopia/Tigrinya (ti_ET)"), "ti_ET", LG_AFRICA }, + {N_("Philippines/Tagalog (tl_PH)"), "tl_PH", LG_ASIA }, + {N_("Turkey (tr_TR)"), "tr_TR", LG_ASIA }, + {N_("Russia/Tatar (tt_RU)"), "tt_RU", LG_EASTERN_EUROPE }, + {N_("Ukraine (uk_UA)"), "uk_UA", LG_EASTERN_EUROPE }, + {N_("Pakistan (ur_PK)"), "ur_PK", LG_ASIA }, + {N_("Uzbekistan (uz_UZ)"), "uz_UZ", LG_ASIA }, + {N_("Vietnam (vi_VN)"), "vi_VN", LG_ASIA }, + {N_("Belgium/Walloon (wa_BE)"), "wa_BE", LG_WESTERN_EUROPE }, + {N_("United States/Yiddish (yi_US)"), "yi_US", LG_NORTH_AMERICA }, + {N_("China (zh_CN)"), "zh_CN", LG_ASIA }, + {N_("Hong Kong/Chinese (zh_HK)"), "zh_HK", LG_ASIA }, + {N_("Singapore/Chinese (zh_SG)"), "zh_SG", LG_ASIA }, + {N_("Taiwan (zh_TW)"), "zh_TW", LG_ASIA }, + {NULL, NULL, LG_LAST} +}; + +/* What is this? See also iw_IL. {N_("(he_IL)"),"he_IL", LG_ASIA }, */ +/* {N_("(lug_UG)"), "lug_UG",LG_OTHER }, */ + + +static int +locale_order (const void *_a, const void *_b) +{ + const LocaleInfo *a = (const LocaleInfo *)_a; + const LocaleInfo *b = (const LocaleInfo *)_b; + + if (a->lgroup != b->lgroup) + return b->lgroup - a->lgroup; + + return g_utf8_collate (_(a->locale_title), _(b->locale_title)); +} + +/* ------------------------------------------------------------------------- */ + +/* name -> LocaleInfo* mapping */ +static GHashTable *locale_hash; + +struct _GOLocaleSel { + GtkHBox box; + GOOptionMenu *locales; + GtkMenu *locales_menu; +}; + +typedef struct { + GtkHBoxClass parent_class; + + gboolean (* locale_changed) (GOLocaleSel *ls, char const *new_locale); +} GOLocaleSelClass; + + +typedef GOLocaleSel Ls; +typedef GOLocaleSelClass LsClass; + +/* Signals we emit */ +enum { + LOCALE_CHANGED, + LAST_SIGNAL +}; + +enum { + PROP_0 +}; + + + + +static guint ls_signals[LAST_SIGNAL] = { 0 }; + +static void ls_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); + +static void ls_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +const char * +go_locale_sel_get_locale_name (G_GNUC_UNUSED GOLocaleSel *ls, + const char *locale) +{ + LocaleInfo const *ci; + + g_return_val_if_fail (locale != NULL, NULL); + + ci = g_hash_table_lookup (locale_hash, locale); + return ci ? _(ci->locale_title) : NULL; +} + +static char* +get_locale_name (GOLocaleSel *ls) +{ + char const *cur_locale, *name; + char *locale, *p; + + /* + * We cannot use LC_ALL here because a composite locale may have + * a string that is a mile wide (and not be intented for humans + * anyway). Why use LC_MESSAGES? Good question, but it actuality + * I doubt it will matter. It's an arbitrary choice. + */ + cur_locale = setlocale (LC_MESSAGES, NULL); + if (!cur_locale) cur_locale = "C"; /* Just in case. */ + locale = g_strdup (cur_locale); + + /* Get rid of charsets. */ + p = strchr (locale, '.'); + if (p) + *p = 0; + p = strchr (locale, '@'); + if (p) + *p = 0; + + name = go_locale_sel_get_locale_name (ls, locale); + if (name) { + g_free (locale); + return g_strdup (name); + } else { + /* Just in case we get something really wide. */ + const char *ellipsis = "..."; + if ((size_t)g_utf8_strlen (locale, -1) > 50 + strlen (ellipsis)) + strcpy (g_utf8_offset_to_pointer (locale, 50), ellipsis); + + return locale; + } +} + +static void +locales_changed_cb (GOOptionMenu *optionmenu, GOLocaleSel *ls) +{ + char * locale; + + g_return_if_fail (IS_GO_LOCALE_SEL (ls)); + g_return_if_fail (optionmenu == ls->locales); + + locale = go_locale_sel_get_locale (ls); + + g_signal_emit (G_OBJECT (ls), + ls_signals[LOCALE_CHANGED], + 0, locale); + g_free (locale); +} + +static void +set_menu_to_default (GOLocaleSel *ls, gint item) +{ + GSList sel = { GINT_TO_POINTER (item - 1), NULL}; + + g_return_if_fail (ls != NULL && IS_GO_LOCALE_SEL (ls)); + + go_option_menu_set_history (ls->locales, &sel); +} + +static gboolean +ls_mnemonic_activate (GtkWidget *w, gboolean group_cycling) +{ + GOLocaleSel *ls = GO_LOCALE_SEL (w); + gtk_widget_grab_focus (GTK_WIDGET (ls->locales)); + return TRUE; +} + + +static void +ls_build_menu (GOLocaleSel *ls) +{ + GtkWidget *item; + GtkMenu *menu; + LGroupInfo const *lgroup = lgroups; + gint lg_cnt = 0; + + menu = GTK_MENU (gtk_menu_new ()); + + while (lgroup->group_name) { + LocaleInfo const *locale_trans; + GtkMenu *submenu; + gint cnt = 0; + + item = gtk_menu_item_new_with_label (_(lgroup->group_name)); + + submenu = GTK_MENU (gtk_menu_new ()); + locale_trans = locale_trans_array; + + while (locale_trans->lgroup != LG_LAST) { + GtkWidget *subitem; + if (locale_trans->lgroup == lgroup->lgroup && locale_trans->available) { + subitem = gtk_check_menu_item_new_with_label + (_(locale_trans->locale_title)); + gtk_widget_show (subitem); + gtk_menu_shell_append (GTK_MENU_SHELL (submenu), subitem); + g_object_set_data (G_OBJECT (subitem), LOCALE_NAME_KEY, + (gpointer)(locale_trans->locale)); + cnt++; + } + locale_trans++; + } + if (cnt > 0) { + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), GTK_WIDGET (submenu)); + gtk_widget_show (item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + lg_cnt++; + } else { + g_object_unref (item); + } + lgroup++; + } + item = gtk_separator_menu_item_new (); + gtk_widget_show (item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + lg_cnt++; + + { + char *locale_name = get_locale_name (ls); + char *locale_menu_title = g_strconcat (_("Current Locale: "), + locale_name, NULL); + g_free (locale_name); + item = gtk_check_menu_item_new_with_label (locale_menu_title); + g_free (locale_menu_title); + gtk_widget_show (item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + lg_cnt++; + } + + go_option_menu_set_menu (ls->locales, GTK_WIDGET (menu)); + ls->locales_menu = menu; + set_menu_to_default (ls, lg_cnt); +} + +static void +ls_init (GOLocaleSel *ls) +{ + ls->locales = GO_OPTION_MENU (go_option_menu_new ()); + ls_build_menu (ls); + + g_signal_connect (G_OBJECT (ls->locales), "changed", + G_CALLBACK (locales_changed_cb), ls); + gtk_box_pack_start (GTK_BOX (ls), GTK_WIDGET (ls->locales), + TRUE, TRUE, 0); +} + +static void +ls_class_init (GtkWidgetClass *widget_klass) +{ + LocaleInfo *ci; + char *oldlocale; + + GObjectClass *gobject_class = G_OBJECT_CLASS (widget_klass); + widget_klass->mnemonic_activate = ls_mnemonic_activate; + + gobject_class->set_property = ls_set_property; + gobject_class->get_property = ls_get_property; + + ls_signals[LOCALE_CHANGED] = + g_signal_new ("locale_changed", + GO_LOCALE_SEL_TYPE, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GOLocaleSelClass, locale_changed), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); + + qsort (lgroups, G_N_ELEMENTS (lgroups) - 2, sizeof (lgroups[0]), + lgroups_order); + qsort (locale_trans_array, G_N_ELEMENTS (locale_trans_array) - 1, + sizeof (locale_trans_array[0]), locale_order); + + locale_hash = + g_hash_table_new_full (go_ascii_strcase_hash, + go_ascii_strcase_equal, + (GDestroyNotify)g_free, + NULL); + + oldlocale = g_strdup (setlocale (LC_ALL, NULL)); + for (ci = locale_trans_array; ci->locale_title; ci++) { + ci->available = (setlocale (LC_ALL, ci->locale) != NULL); + g_hash_table_insert (locale_hash, (char *)ci->locale, ci); + } + + /* Handle the POSIX/C alias. */ + { + LocaleInfo *ci = g_hash_table_lookup (locale_hash, "C"); + g_assert (ci != NULL); + g_hash_table_insert (locale_hash, (char *)"POSIX", ci); + } + + setlocale (LC_ALL, oldlocale); + g_free (oldlocale); +} + +GSF_CLASS (GOLocaleSel, go_locale_sel, + ls_class_init, ls_init, GTK_TYPE_HBOX) + +GtkWidget * +go_locale_sel_new (void) +{ + return g_object_new (GO_LOCALE_SEL_TYPE, NULL); +} + +gchar * +go_locale_sel_get_locale (GOLocaleSel *ls) +{ + GtkMenuItem *selection; + char const *cur_locale; + char const *locale; + + char *cur_locale_cp = NULL; + char **parts; + + cur_locale = setlocale (LC_ALL, NULL); + if (cur_locale) { + parts = g_strsplit (cur_locale,".",2); + cur_locale_cp = g_strdup (parts[0]); + g_strfreev (parts); + } + + g_return_val_if_fail (IS_GO_LOCALE_SEL (ls), cur_locale_cp); + + selection = GTK_MENU_ITEM (go_option_menu_get_history (ls->locales)); + locale = (char const *) g_object_get_data (G_OBJECT (selection), + LOCALE_NAME_KEY); + return locale ? g_strdup (locale) : cur_locale_cp; +} + +struct cb_find_entry { + const char *locale; + gboolean found; + int i; + GSList *path; +}; + +static void +cb_find_entry (GtkMenuItem *w, struct cb_find_entry *cl) +{ + GtkWidget *sub; + + if (cl->found) + return; + + sub = gtk_menu_item_get_submenu (w); + if (sub) { + GSList *tmp = cl->path = g_slist_prepend (cl->path, GINT_TO_POINTER (cl->i)); + cl->i = 0; + + gtk_container_foreach (GTK_CONTAINER (sub), (GtkCallback)cb_find_entry, cl); + if (cl->found) + return; + + cl->i = GPOINTER_TO_INT (cl->path->data); + cl->path = cl->path->next; + g_slist_free_1 (tmp); + } else { + const char *this_locale = + g_object_get_data (G_OBJECT (w), LOCALE_NAME_KEY); + if (this_locale && strcmp (this_locale, cl->locale) == 0) { + cl->found = TRUE; + cl->path = g_slist_prepend (cl->path, GINT_TO_POINTER (cl->i)); + cl->path = g_slist_reverse (cl->path); + return; + } + } + cl->i++; +} + +gboolean +go_locale_sel_set_locale (GOLocaleSel *ls, const char *locale) +{ + struct cb_find_entry cl; + LocaleInfo const *ci; + + g_return_val_if_fail (IS_GO_LOCALE_SEL (ls), FALSE); + g_return_val_if_fail (locale != NULL, FALSE); + + ci = g_hash_table_lookup (locale_hash, locale); + if (!ci) + return FALSE; + + locale = ci->locale; + if (!locale) + return FALSE; + + cl.locale = locale; + cl.found = FALSE; + cl.i = 0; + cl.path = NULL; + + gtk_container_foreach (GTK_CONTAINER (ls->locales_menu), + (GtkCallback)cb_find_entry, + &cl); + if (!cl.found) + return FALSE; + + go_option_menu_set_history (ls->locales, cl.path); + g_slist_free (cl.path); + + return TRUE; +} + + +void +go_locale_sel_set_sensitive (GOLocaleSel *ls, gboolean sensitive) +{ + g_return_if_fail (IS_GO_LOCALE_SEL (ls)); + + gtk_widget_set_sensitive (GTK_WIDGET (ls->locales), sensitive); +} + +static void +ls_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GOLocaleSel *ls; + ls = GO_LOCALE_SEL (object); + + switch (prop_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + +static void +ls_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GOLocaleSel *ls; + + ls = GO_LOCALE_SEL (object); + + switch (prop_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} diff --git a/lib/goffice-0.0.4/goffice/gtk/go-locale-sel.h b/lib/goffice-0.0.4/goffice/gtk/go-locale-sel.h new file mode 100644 index 0000000000..74ca3d845f --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-locale-sel.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2003 Andreas J. Guelzow + * + * based on code by: + * Copyright (C) 2000 Marco Pesenti Gritti + * from the galeon code base + * + * 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, 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. + */ + +#ifndef _GO_LOCALE_SEL_H_ +#define _GO_LOCALE_SEL_H_ + +#include + +G_BEGIN_DECLS + +#define GO_LOCALE_SEL_TYPE (go_locale_sel_get_type ()) +#define GO_LOCALE_SEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GO_LOCALE_SEL_TYPE, GOLocaleSel)) +#define IS_GO_LOCALE_SEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GO_LOCALE_SEL_TYPE)) + +typedef struct _GOLocaleSel GOLocaleSel; + +GType go_locale_sel_get_type (void); +GtkWidget * go_locale_sel_new (void); + +gchar *go_locale_sel_get_locale (GOLocaleSel *cs); +gboolean go_locale_sel_set_locale (GOLocaleSel *cs, const char *loc); + +void go_locale_sel_set_sensitive (GOLocaleSel *cs, gboolean sensitive); + +const char *go_locale_sel_get_locale_name (GOLocaleSel *cs, const char *loc); + +G_END_DECLS + +#endif /* _GO_LOCALE_SEL_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/go-optionmenu.c b/lib/goffice-0.0.4/goffice/gtk/go-optionmenu.c new file mode 100644 index 0000000000..84882fee88 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-optionmenu.c @@ -0,0 +1,1062 @@ +/* + * go-optionmenu.c + * + * Copyright (C) 2002 Andreas J. Guelzow + * + * based extensively on: + * + * GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * Modified by the GTK+ Team and others 1997-2000. See the GTK AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ + +#include +#include "go-optionmenu.h" + +#include +#include +#include +#include +#include + +#define CHILD_LEFT_SPACING 4 +#define CHILD_RIGHT_SPACING 1 +#define CHILD_TOP_SPACING 1 +#define CHILD_BOTTOM_SPACING 1 + +typedef struct _GOOptionMenuProps GOOptionMenuProps; + +struct _GOOptionMenuProps +{ + gboolean interior_focus; + GtkRequisition indicator_size; + GtkBorder indicator_spacing; + gint focus_width; + gint focus_pad; +}; + +static const GOOptionMenuProps default_props = { + TRUE, + { 7, 13 }, + { 7, 5, 2, 2 }, /* Left, right, top, bottom */ + 1, + 0 +}; + +static void go_option_menu_class_init (GOOptionMenuClass *klass); +static void go_option_menu_init (GOOptionMenu *option_menu); +static void go_option_menu_destroy (GtkObject *object); +static void go_option_menu_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void go_option_menu_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); +static void go_option_menu_size_request (GtkWidget *widget, + GtkRequisition *requisition); +static void go_option_menu_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); +static void go_option_menu_paint (GtkWidget *widget, + GdkRectangle *area); +static gint go_option_menu_expose (GtkWidget *widget, + GdkEventExpose *event); +static gint go_option_menu_button_press (GtkWidget *widget, + GdkEventButton *event); +static gint go_option_menu_key_press (GtkWidget *widget, + GdkEventKey *event); +static void go_option_menu_selection_done (GtkMenu *menu, + GOOptionMenu *option_menu); +static void go_option_menu_update_contents (GOOptionMenu *option_menu, GtkMenu *menu); +static void go_option_menu_remove_contents (GOOptionMenu *option_menu); +static void go_option_menu_calc_size (GOOptionMenu *option_menu); +static void go_option_menu_position (GtkMenu *menu, + gint *x, + gint *y, + gint *scroll_offet, + gpointer user_data); +static void go_option_menu_show_all (GtkWidget *widget); +static void go_option_menu_hide_all (GtkWidget *widget); +static gboolean go_option_menu_mnemonic_activate (GtkWidget *widget, + gboolean group_cycling); +static GType go_option_menu_child_type (GtkContainer *container); +static gint go_option_menu_scroll_event (GtkWidget *widget, + GdkEventScroll *event); + +enum +{ + CHANGED, + LAST_SIGNAL +}; + +enum +{ + PROP_0, + PROP_MENU, + LAST_PROP +}; + +static GtkButtonClass *parent_class = NULL; +static guint signals[LAST_SIGNAL] = { 0 }; + + +GType +go_option_menu_get_type (void) +{ + static GType option_menu_type = 0; + + if (!option_menu_type) + { + static const GTypeInfo option_menu_info = + { + sizeof (GOOptionMenuClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) go_option_menu_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GOOptionMenu), + 0, /* n_preallocs */ + (GInstanceInitFunc) go_option_menu_init, + }; + + option_menu_type = + g_type_register_static (GTK_TYPE_BUTTON, "GOOptionMenu", + &option_menu_info, 0); + } + + return option_menu_type; +} + +static void +go_option_menu_class_init (GOOptionMenuClass *class) +{ + GObjectClass *gobject_class; + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; + GtkButtonClass *button_class; + GtkContainerClass *container_class; + + gobject_class = (GObjectClass*) class; + object_class = (GtkObjectClass*) class; + widget_class = (GtkWidgetClass*) class; + button_class = (GtkButtonClass*) class; + container_class = (GtkContainerClass*) class; + + parent_class = g_type_class_peek_parent (class); + + signals[CHANGED] = + g_signal_new ("changed", + G_OBJECT_CLASS_TYPE (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GOOptionMenuClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + gobject_class->set_property = go_option_menu_set_property; + gobject_class->get_property = go_option_menu_get_property; + object_class->destroy = go_option_menu_destroy; + + widget_class->size_request = go_option_menu_size_request; + widget_class->size_allocate = go_option_menu_size_allocate; + widget_class->expose_event = go_option_menu_expose; + widget_class->button_press_event = go_option_menu_button_press; + widget_class->key_press_event = go_option_menu_key_press; + widget_class->scroll_event = go_option_menu_scroll_event; + widget_class->show_all = go_option_menu_show_all; + widget_class->hide_all = go_option_menu_hide_all; + widget_class->mnemonic_activate = go_option_menu_mnemonic_activate; + + container_class->child_type = go_option_menu_child_type; + + g_object_class_install_property (gobject_class, + PROP_MENU, + g_param_spec_object ("menu", + _("Menu"), + _("The menu of options"), + GTK_TYPE_MENU, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + gtk_widget_class_install_style_property (widget_class, + g_param_spec_boxed ("indicator_size", + _("Indicator Size"), + _("Size of dropdown indicator"), + GTK_TYPE_REQUISITION, + G_PARAM_READABLE)); + gtk_widget_class_install_style_property (widget_class, + g_param_spec_boxed ("indicator_spacing", + _("Indicator Spacing"), + _("Spacing around indicator"), + GTK_TYPE_BORDER, + G_PARAM_READABLE)); +} + +static GType +go_option_menu_child_type (GtkContainer *container) +{ + return G_TYPE_NONE; +} + +static void +go_option_menu_init (GOOptionMenu *option_menu) +{ + GTK_WIDGET_SET_FLAGS (option_menu, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (option_menu, GTK_CAN_DEFAULT | GTK_RECEIVES_DEFAULT); + + option_menu->menu = NULL; + option_menu->select_menu = NULL; + option_menu->menu_item = NULL; + option_menu->old_menu_item = NULL; + option_menu->last_signaled_menu_item = NULL; + option_menu->selection = NULL; + option_menu->new_selection = TRUE; + option_menu->width = 0; + option_menu->height = 0; +} + +GtkWidget* +go_option_menu_new (void) +{ + return g_object_new (GO_TYPE_OPTION_MENU, NULL); +} + +GtkWidget* +go_option_menu_get_menu (GOOptionMenu *option_menu) +{ + g_return_val_if_fail (GO_IS_OPTION_MENU (option_menu), NULL); + + return option_menu->menu; +} + +static void +go_option_menu_detacher (GtkWidget *widget, + GtkMenu *menu) +{ + GOOptionMenu *option_menu; + + g_return_if_fail (GO_IS_OPTION_MENU (widget)); + + option_menu = GO_OPTION_MENU (widget); + g_return_if_fail (option_menu->menu == (GtkWidget*) menu); + + go_option_menu_remove_contents (option_menu); + g_signal_handlers_disconnect_by_func (option_menu->menu, + go_option_menu_selection_done, + option_menu); + g_signal_handlers_disconnect_by_func (option_menu->menu, + go_option_menu_calc_size, + option_menu); + + option_menu->menu = NULL; + g_object_notify (G_OBJECT (option_menu), "menu"); +} + +static void connect_menu_signals (GtkMenu *menu, gpointer data); + +static void +connect_menu_signals_to_submenu (GtkMenuItem *item, gpointer data) +{ + GtkMenu *menu = GTK_MENU(gtk_menu_item_get_submenu (item)); + + if (menu) + connect_menu_signals (menu, data); +} + + +static void +connect_menu_signals (GtkMenu *menu, gpointer data) +{ + GList *children; + + g_signal_connect_after (menu, "selection_done", + G_CALLBACK (go_option_menu_selection_done), + data); + children = gtk_container_get_children (GTK_CONTAINER(menu)); + g_list_foreach (children, (GFunc)connect_menu_signals_to_submenu, data); + g_list_free (children); +} + + +void +go_option_menu_set_menu (GOOptionMenu *option_menu, + GtkWidget *menu) +{ + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + g_return_if_fail (GTK_IS_MENU (menu)); + + if (option_menu->menu != menu) + { + go_option_menu_remove_menu (option_menu); + + option_menu->menu = menu; + gtk_menu_attach_to_widget (GTK_MENU (menu), + GTK_WIDGET (option_menu), + go_option_menu_detacher); + + go_option_menu_calc_size (option_menu); + + connect_menu_signals (GTK_MENU(option_menu->menu), option_menu); + + g_signal_connect_swapped (option_menu->menu, "size_request", + G_CALLBACK (go_option_menu_calc_size), + option_menu); + + if (GTK_WIDGET (option_menu)->parent) + gtk_widget_queue_resize (GTK_WIDGET (option_menu)); + + go_option_menu_update_contents (option_menu, NULL); + + g_object_notify (G_OBJECT (option_menu), "menu"); + } +} + +void +go_option_menu_remove_menu (GOOptionMenu *option_menu) +{ + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + if (option_menu->menu) + { + if (GTK_MENU_SHELL (option_menu->menu)->active) + g_signal_emit_by_name (option_menu->menu, "cancel", 0); + + gtk_menu_detach (GTK_MENU (option_menu->menu)); + } +} + +void +go_option_menu_set_history (GOOptionMenu *option_menu, GSList *selection) +{ + GtkWidget *item; + + g_return_if_fail (selection != NULL); + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + if (option_menu->menu) + { + GtkMenu *menu = GTK_MENU(option_menu->menu); + + while (selection->next) { + GList *children = gtk_container_get_children (GTK_CONTAINER(menu)); + gint index = GPOINTER_TO_INT (selection->data); + item = GTK_WIDGET(g_list_nth_data (children, index)); + menu = GTK_MENU(gtk_menu_item_get_submenu (GTK_MENU_ITEM(item))); + selection = selection->next; + g_list_free (children); + } + + gtk_menu_set_active (menu, GPOINTER_TO_INT (selection->data)); + item = gtk_menu_get_active (menu); + if (item != option_menu->menu_item) + go_option_menu_update_contents (option_menu, menu); + g_slist_free (option_menu->selection); + option_menu->selection = g_slist_copy (selection); + } +} + +/** + * go_option_menu_get_history: + * @option_menu: a #GOOptionMenu + * + * Retrieves the currently selected menu item. The menu + * items are numbered from top to bottom, starting with 0. + * + * Return value: the selected menu_item + **/ + +GtkWidget * +go_option_menu_get_history (GOOptionMenu *option_menu) +{ + return GTK_WIDGET(option_menu->menu_item); +} + + + + +static void +go_option_menu_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GOOptionMenu *option_menu = GO_OPTION_MENU (object); + + switch (prop_id) + { + case PROP_MENU: + go_option_menu_set_menu (option_menu, g_value_get_object (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +go_option_menu_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GOOptionMenu *option_menu = GO_OPTION_MENU (object); + + switch (prop_id) + { + case PROP_MENU: + g_value_set_object (value, option_menu->menu); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +go_option_menu_destroy (GtkObject *object) +{ + GOOptionMenu *option_menu; + + g_return_if_fail (GO_IS_OPTION_MENU (object)); + + option_menu = GO_OPTION_MENU (object); + + if (option_menu->selection) { + g_slist_free (option_menu->selection); + option_menu->selection = NULL; + } + + if (option_menu->menu) + gtk_widget_destroy (option_menu->menu); + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + +static void +go_option_menu_get_props (GOOptionMenu *option_menu, + GOOptionMenuProps *props) +{ + GtkRequisition *indicator_size; + GtkBorder *indicator_spacing; + + gtk_widget_style_get (GTK_WIDGET (option_menu), + "indicator_size", &indicator_size, + "indicator_spacing", &indicator_spacing, + "interior_focus", &props->interior_focus, + "focus_line_width", &props->focus_width, + "focus_padding", &props->focus_pad, + NULL); + + if (indicator_size) + props->indicator_size = *indicator_size; + else + props->indicator_size = default_props.indicator_size; + + if (indicator_spacing) + props->indicator_spacing = *indicator_spacing; + else + props->indicator_spacing = default_props.indicator_spacing; + + g_free (indicator_size); + g_free (indicator_spacing); +} + +static void +go_option_menu_size_request (GtkWidget *widget, + GtkRequisition *requisition) +{ + GOOptionMenu *option_menu = GO_OPTION_MENU (widget); + GOOptionMenuProps props; + gint tmp; + GtkRequisition child_requisition = { 0, 0 }; + + go_option_menu_get_props (option_menu, &props); + + if (GTK_BIN (option_menu)->child && GTK_WIDGET_VISIBLE (GTK_BIN (option_menu)->child)) + { + gtk_widget_size_request (GTK_BIN (option_menu)->child, &child_requisition); + + requisition->width += child_requisition.width; + requisition->height += child_requisition.height; + } + + requisition->width = ((GTK_CONTAINER (widget)->border_width + + GTK_WIDGET (widget)->style->xthickness + props.focus_pad) * 2 + + MAX (child_requisition.width, option_menu->width) + + props.indicator_size.width + + props.indicator_spacing.left + props.indicator_spacing.right + + CHILD_LEFT_SPACING + CHILD_RIGHT_SPACING + props.focus_width * 2); + requisition->height = ((GTK_CONTAINER (widget)->border_width + + GTK_WIDGET (widget)->style->ythickness + props.focus_pad) * 2 + + MAX (child_requisition.height, option_menu->height) + + CHILD_TOP_SPACING + CHILD_BOTTOM_SPACING + props.focus_width * 2); + + tmp = (requisition->height - MAX (child_requisition.height, option_menu->height) + + props.indicator_size.height + props.indicator_spacing.top + props.indicator_spacing.bottom); + requisition->height = MAX (requisition->height, tmp); +} + +static void +go_option_menu_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + GtkWidget *child; + GtkButton *button = GTK_BUTTON (widget); + GtkAllocation child_allocation; + GOOptionMenuProps props; + gint border_width; + + go_option_menu_get_props (GO_OPTION_MENU (widget), &props); + border_width = GTK_CONTAINER (widget)->border_width; + + widget->allocation = *allocation; + if (GTK_WIDGET_REALIZED (widget)) + gdk_window_move_resize (button->event_window, + allocation->x + border_width, allocation->y + border_width, + allocation->width - border_width * 2, allocation->height - border_width * 2); + + child = GTK_BIN (widget)->child; + if (child && GTK_WIDGET_VISIBLE (child)) + { + gint xthickness = GTK_WIDGET (widget)->style->xthickness; + gint ythickness = GTK_WIDGET (widget)->style->ythickness; + + child_allocation.x = widget->allocation.x + border_width + xthickness + props.focus_width + props.focus_pad + CHILD_LEFT_SPACING; + child_allocation.y = widget->allocation.y + border_width + ythickness + props.focus_width + props.focus_pad + CHILD_TOP_SPACING; + child_allocation.width = MAX (1, allocation->width - (border_width + xthickness + props.focus_width + props.focus_pad) * 2 - + props.indicator_size.width - props.indicator_spacing.left - props.indicator_spacing.right - + CHILD_LEFT_SPACING - CHILD_RIGHT_SPACING); + child_allocation.height = MAX (1, allocation->height - (border_width + ythickness + props.focus_width + props.focus_pad) * 2 - + CHILD_TOP_SPACING - CHILD_BOTTOM_SPACING); + + if (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL) + child_allocation.x += props.indicator_size.width + props.indicator_spacing.left + props.indicator_spacing.right; + + gtk_widget_size_allocate (child, &child_allocation); + } +} + +static void +go_option_menu_paint (GtkWidget *widget, + GdkRectangle *area) +{ + GdkRectangle button_area; + GOOptionMenuProps props; + gint border_width; + gint tab_x; + + g_return_if_fail (GO_IS_OPTION_MENU (widget)); + g_return_if_fail (area != NULL); + + if (GTK_WIDGET_DRAWABLE (widget)) + { + border_width = GTK_CONTAINER (widget)->border_width; + go_option_menu_get_props (GO_OPTION_MENU (widget), &props); + + button_area.x = widget->allocation.x + border_width; + button_area.y = widget->allocation.y + border_width; + button_area.width = widget->allocation.width - 2 * border_width; + button_area.height = widget->allocation.height - 2 * border_width; + + if (!props.interior_focus && GTK_WIDGET_HAS_FOCUS (widget)) + { + button_area.x += props.focus_width + props.focus_pad; + button_area.y += props.focus_width + props.focus_pad; + button_area.width -= 2 * (props.focus_width + props.focus_pad); + button_area.height -= 2 * (props.focus_width + props.focus_pad); + } + + gtk_paint_box (widget->style, widget->window, + GTK_WIDGET_STATE (widget), GTK_SHADOW_OUT, + area, widget, "optionmenu", + button_area.x, button_area.y, + button_area.width, button_area.height); + + if (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL) + tab_x = button_area.x + props.indicator_spacing.right + + widget->style->xthickness; + else + tab_x = button_area.x + button_area.width - + props.indicator_size.width - props.indicator_spacing.right - + widget->style->xthickness; + + gtk_paint_tab (widget->style, widget->window, + GTK_WIDGET_STATE (widget), GTK_SHADOW_OUT, + area, widget, "optionmenutab", + tab_x, + button_area.y + (button_area.height - props.indicator_size.height) / 2, + props.indicator_size.width, props.indicator_size.height); + + if (GTK_WIDGET_HAS_FOCUS (widget)) + { + if (props.interior_focus) + { + button_area.x += widget->style->xthickness + props.focus_pad; + button_area.y += widget->style->ythickness + props.focus_pad; + button_area.width -= 2 * (widget->style->xthickness + props.focus_pad) + + props.indicator_spacing.left + + props.indicator_spacing.right + + props.indicator_size.width; + button_area.height -= 2 * (widget->style->ythickness + props.focus_pad); + if (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL) + button_area.x += props.indicator_spacing.left + + props.indicator_spacing.right + + props.indicator_size.width; + } + else + { + button_area.x -= props.focus_width + props.focus_pad; + button_area.y -= props.focus_width + props.focus_pad; + button_area.width += 2 * (props.focus_width + props.focus_pad); + button_area.height += 2 * (props.focus_width + props.focus_pad); + } + + gtk_paint_focus (widget->style, widget->window, GTK_WIDGET_STATE (widget), + area, widget, "button", + button_area.x, + button_area.y, + button_area.width, + button_area.height); + } + } +} + +static gint +go_option_menu_expose (GtkWidget *widget, + GdkEventExpose *event) +{ + g_return_val_if_fail (GO_IS_OPTION_MENU (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + if (GTK_WIDGET_DRAWABLE (widget)) + { + go_option_menu_paint (widget, &event->area); + + if (GTK_BIN (widget)->child) + gtk_container_propagate_expose (GTK_CONTAINER (widget), + GTK_BIN (widget)->child, + event); + } + + return FALSE; +} + +static gint +go_option_menu_button_press (GtkWidget *widget, + GdkEventButton *event) +{ + GOOptionMenu *option_menu; + GtkWidget *menu_item; + + g_return_val_if_fail (GO_IS_OPTION_MENU (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + option_menu = GO_OPTION_MENU (widget); + + if ((event->type == GDK_BUTTON_PRESS) && + (event->button == 1)) + { + option_menu->new_selection = TRUE; + option_menu->old_menu_item = option_menu->menu_item; + go_option_menu_remove_contents (option_menu); + gtk_menu_popup (GTK_MENU (option_menu->menu), NULL, NULL, + go_option_menu_position, option_menu, + event->button, event->time); + menu_item = gtk_menu_get_active (GTK_MENU (option_menu->menu)); + if (menu_item) + gtk_menu_shell_select_item (GTK_MENU_SHELL (option_menu->menu), menu_item); + else + gtk_menu_shell_select_item (GTK_MENU_SHELL (option_menu->select_menu), + option_menu->old_menu_item); + + return TRUE; + } + + return FALSE; +} + +static gint +go_option_menu_key_press (GtkWidget *widget, + GdkEventKey *event) +{ + GOOptionMenu *option_menu; + GtkWidget *menu_item; + + g_return_val_if_fail (GO_IS_OPTION_MENU (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + option_menu = GO_OPTION_MENU (widget); + + switch (event->keyval) + { + case GDK_KP_Space: + case GDK_space: + option_menu->new_selection= TRUE; + option_menu->old_menu_item = option_menu->menu_item; + go_option_menu_remove_contents (option_menu); + gtk_menu_popup (GTK_MENU (option_menu->menu), NULL, NULL, + go_option_menu_position, option_menu, + 0, event->time); + menu_item = gtk_menu_get_active (GTK_MENU (option_menu->menu)); + if (menu_item) + gtk_menu_shell_select_item (GTK_MENU_SHELL (option_menu->menu), menu_item); + else + gtk_menu_shell_select_item (GTK_MENU_SHELL (option_menu->select_menu), + option_menu->old_menu_item); + return TRUE; + } + + return FALSE; +} + +static void +go_option_menu_selection_done (GtkMenu *menu, + GOOptionMenu *option_menu) +{ + g_return_if_fail (menu != NULL); + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + go_option_menu_update_contents (option_menu, menu); +} + +static void +go_option_menu_changed (GOOptionMenu *option_menu) +{ + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + if (option_menu->last_signaled_menu_item && GTK_IS_CHECK_MENU_ITEM(option_menu->last_signaled_menu_item)) + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(option_menu->last_signaled_menu_item), + FALSE); + + option_menu->last_signaled_menu_item = option_menu->menu_item; + if (option_menu->last_signaled_menu_item + && GTK_IS_CHECK_MENU_ITEM(option_menu->last_signaled_menu_item)) + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(option_menu->last_signaled_menu_item), + TRUE); + + g_signal_emit (option_menu, signals[CHANGED], 0); +} + +static void +go_option_menu_select_first_sensitive (GOOptionMenu *option_menu) +{ +} + +static void +go_option_menu_item_state_changed_cb (GtkWidget *widget, + GtkStateType previous_state, + GOOptionMenu *option_menu) +{ + GtkWidget *child = GTK_BIN (option_menu)->child; + + if (child && GTK_WIDGET_SENSITIVE (child) != GTK_WIDGET_IS_SENSITIVE (widget)) + gtk_widget_set_sensitive (child, GTK_WIDGET_IS_SENSITIVE (widget)); +} + +static void +go_option_menu_item_destroy_cb (GtkWidget *widget, + GOOptionMenu *option_menu) +{ + GtkWidget *child = GTK_BIN (option_menu)->child; + + if (child) + { + g_object_ref (child); + go_option_menu_remove_contents (option_menu); + gtk_widget_destroy (child); + g_object_unref (child); + + go_option_menu_select_first_sensitive (option_menu); + } +} + +static void +go_option_menu_update_contents_real (GOOptionMenu *option_menu, + GtkMenu *menu, GtkMenuItem *menu_item) +{ + GtkWidget *child; + GtkRequisition child_requisition; + + g_return_if_fail (option_menu != NULL); + g_return_if_fail (menu_item != NULL); + g_return_if_fail (menu != NULL); + + go_option_menu_remove_contents (option_menu); + option_menu->menu_item = GTK_WIDGET(menu_item); + option_menu->old_menu_item = NULL; + option_menu->select_menu = GTK_WIDGET(menu); + g_object_ref (option_menu->menu_item); + child = GTK_BIN (option_menu->menu_item)->child; + if (child) + { + if (!GTK_WIDGET_IS_SENSITIVE (option_menu->menu_item)) + gtk_widget_set_sensitive (child, FALSE); + gtk_widget_reparent (child, GTK_WIDGET (option_menu)); + } + + g_signal_connect (option_menu->menu_item, "state_changed", + G_CALLBACK (go_option_menu_item_state_changed_cb), option_menu); + g_signal_connect (option_menu->menu_item, "destroy", + G_CALLBACK (go_option_menu_item_destroy_cb), option_menu); + + gtk_widget_size_request (child, &child_requisition); + gtk_widget_size_allocate (GTK_WIDGET (option_menu), + &(GTK_WIDGET (option_menu)->allocation)); + + if (GTK_WIDGET_DRAWABLE (option_menu)) + gtk_widget_queue_draw (GTK_WIDGET (option_menu)); +} + + + +static void +go_option_menu_update_contents (GOOptionMenu *option_menu, GtkMenu *menu) +{ + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + if (option_menu->menu) + { + GtkWidget *old_item = option_menu->menu_item; + GtkWidget *new_item; + + new_item = menu ? gtk_menu_get_active (menu) : + gtk_menu_get_active (GTK_MENU(option_menu->menu)); + + if (new_item && !gtk_menu_item_get_submenu (GTK_MENU_ITEM(new_item))) { + g_slist_free (option_menu->selection); + option_menu->selection = NULL; + + go_option_menu_update_contents_real (option_menu, + menu ? menu : GTK_MENU(option_menu->menu), + GTK_MENU_ITEM(new_item)); + } else { + if (option_menu->old_menu_item) + go_option_menu_update_contents_real (option_menu, + GTK_MENU(option_menu->select_menu), + GTK_MENU_ITEM(option_menu->old_menu_item)); + } + if (new_item && !(gtk_menu_item_get_submenu (GTK_MENU_ITEM(new_item)) && option_menu->new_selection)) { + GList *children = gtk_container_get_children (GTK_CONTAINER(menu ? menu : GTK_MENU(option_menu->menu))); + option_menu->selection = g_slist_prepend(option_menu->selection, + GINT_TO_POINTER(g_list_position + (children, g_list_find (children, new_item)))); + g_list_free (children); + option_menu->new_selection = FALSE; + } + + if (old_item != option_menu->menu_item) + go_option_menu_changed (option_menu); + } +} + +static void +go_option_menu_remove_contents (GOOptionMenu *option_menu) +{ + GtkWidget *child; + + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + if (option_menu->menu_item) + { + child = GTK_BIN (option_menu)->child; + + if (child) + { + gtk_widget_set_sensitive (child, TRUE); + gtk_widget_reparent (child, option_menu->menu_item); + } + + g_signal_handlers_disconnect_by_func (option_menu->menu_item, + go_option_menu_item_state_changed_cb, + option_menu); + g_signal_handlers_disconnect_by_func (option_menu->menu_item, + go_option_menu_item_destroy_cb, + option_menu); + g_object_unref (option_menu->menu_item); + option_menu->menu_item = NULL; + } +} + +static void +go_option_menu_calc_size (GOOptionMenu *option_menu) +{ + GtkWidget *child; + GList *children; + GtkRequisition child_requisition; + gint old_width = option_menu->width; + gint old_height = option_menu->height; + + g_return_if_fail (GO_IS_OPTION_MENU (option_menu)); + + option_menu->width = 0; + option_menu->height = 0; + + if (option_menu->menu) + { + children = GTK_MENU_SHELL (option_menu->menu)->children; + while (children) + { + child = children->data; + children = children->next; + + if (GTK_WIDGET_VISIBLE (child)) + { + GtkWidget *inner = GTK_BIN (child)->child; + + if (inner) + { + gtk_widget_size_request (inner, &child_requisition); + + option_menu->width = MAX (option_menu->width, child_requisition.width); + option_menu->height = MAX (option_menu->height, child_requisition.height); + } + } + } + } + + if (old_width != option_menu->width || old_height != option_menu->height) + gtk_widget_queue_resize (GTK_WIDGET (option_menu)); +} + +static void +go_option_menu_position (GtkMenu *menu, + gint *x, + gint *y, + gboolean *push_in, + gpointer user_data) +{ + GOOptionMenu *option_menu; + GtkWidget *active; + GtkWidget *child; + GtkWidget *widget; + GtkRequisition requisition; + GList *children; + gint screen_width; + gint menu_xpos; + gint menu_ypos; + gint menu_width; + + g_return_if_fail (GO_IS_OPTION_MENU (user_data)); + + option_menu = GO_OPTION_MENU (user_data); + widget = GTK_WIDGET (option_menu); + + gtk_widget_get_child_requisition (GTK_WIDGET (menu), &requisition); + menu_width = requisition.width; + + active = gtk_menu_get_active (GTK_MENU (option_menu->menu)); + gdk_window_get_origin (widget->window, &menu_xpos, &menu_ypos); + + menu_xpos += widget->allocation.x; + menu_ypos += widget->allocation.y + widget->allocation.height / 2 - 2; + + if (active != NULL) + { + gtk_widget_get_child_requisition (active, &requisition); + menu_ypos -= requisition.height / 2; + } + + children = GTK_MENU_SHELL (option_menu->menu)->children; + while (children) + { + child = children->data; + + if (active == child) + break; + + if (GTK_WIDGET_VISIBLE (child)) + { + gtk_widget_get_child_requisition (child, &requisition); + menu_ypos -= requisition.height; + } + + children = children->next; + } + + screen_width = gdk_screen_get_width (gtk_widget_get_screen (widget)); + + if (menu_xpos < 0) + menu_xpos = 0; + else if ((menu_xpos + menu_width) > screen_width) + menu_xpos -= ((menu_xpos + menu_width) - screen_width); + + *x = menu_xpos; + *y = menu_ypos; + *push_in = TRUE; +} + + +static void +go_option_menu_show_all (GtkWidget *widget) +{ + GtkContainer *container; + GOOptionMenu *option_menu; + + g_return_if_fail (GO_IS_OPTION_MENU (widget)); + container = GTK_CONTAINER (widget); + option_menu = GO_OPTION_MENU (widget); + + gtk_widget_show (widget); + gtk_container_foreach (container, (GtkCallback) gtk_widget_show_all, NULL); + if (option_menu->menu) + gtk_widget_show_all (option_menu->menu); + if (option_menu->menu_item) + gtk_widget_show_all (option_menu->menu_item); + if (option_menu->last_signaled_menu_item) + gtk_widget_show_all (option_menu->last_signaled_menu_item); + if (option_menu->select_menu) + gtk_widget_show_all (option_menu->select_menu); +} + + +static void +go_option_menu_hide_all (GtkWidget *widget) +{ + GtkContainer *container; + + g_return_if_fail (GO_IS_OPTION_MENU (widget)); + container = GTK_CONTAINER (widget); + + gtk_widget_hide (widget); + gtk_container_foreach (container, (GtkCallback) gtk_widget_hide_all, NULL); +} + +static gboolean +go_option_menu_mnemonic_activate (GtkWidget *widget, + gboolean group_cycling) +{ + gtk_widget_grab_focus (widget); + return TRUE; +} + +static gint +go_option_menu_scroll_event (GtkWidget *widget, + GdkEventScroll *event) +{ + return TRUE; +} + diff --git a/lib/goffice-0.0.4/goffice/gtk/go-optionmenu.h b/lib/goffice-0.0.4/goffice/gtk/go-optionmenu.h new file mode 100644 index 0000000000..ca1434730e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-optionmenu.h @@ -0,0 +1,96 @@ +/* + * go-optionmenu.h + * + * Copyright (C) 2002-2005 Andreas J. Guelzow + * + * based extensively on: + * + * GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * Modified by the GTK+ Team and others 1997-2000. See the GTK AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ + +#ifndef _GO_OPTIONMENU_H_ +#define _GO_OPTIONMENU_H_ + + +#include +#include + +G_BEGIN_DECLS + +#define GO_TYPE_OPTION_MENU (go_option_menu_get_type ()) +#define GO_OPTION_MENU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GO_TYPE_OPTION_MENU, GOOptionMenu)) +#define GO_OPTION_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GO_TYPE_OPTION_MENU, GOOptionMenuClass)) +#define GO_IS_OPTION_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GO_TYPE_OPTION_MENU)) +#define GO_IS_OPTION_MENU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GO_TYPE_OPTION_MENU)) +#define GO_OPTION_MENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GO_TYPE_OPTION_MENU, GOOptionMenuClass)) + +typedef struct _GOOptionMenu GOOptionMenu; +typedef struct _GOOptionMenuClass GOOptionMenuClass; + +struct _GOOptionMenu +{ + GtkButton button; + + GtkWidget *menu; + GtkWidget *select_menu; + GtkWidget *menu_item; + GtkWidget *old_menu_item; + + GtkWidget *last_signaled_menu_item; + + GSList *selection; + gboolean new_selection; + + guint16 width; + guint16 height; +}; + +struct _GOOptionMenuClass +{ + GtkButtonClass parent_class; + + void (*changed) (GOOptionMenu *option_menu); + + /* Padding for future expansion */ + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); + void (*_gtk_reserved4) (void); +}; + + +GType go_option_menu_get_type (void) G_GNUC_CONST; +GtkWidget* go_option_menu_new (void); +GtkWidget* go_option_menu_get_menu (GOOptionMenu *option_menu); +void go_option_menu_set_menu (GOOptionMenu *option_menu, + GtkWidget *menu); +void go_option_menu_remove_menu (GOOptionMenu *option_menu); +void go_option_menu_set_history (GOOptionMenu *option_menu, + GSList *selection); +GtkWidget *go_option_menu_get_history (GOOptionMenu *option_menu); + +G_END_DECLS + +#endif /* _GO_OPTIONMENU_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.c b/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.c new file mode 100644 index 0000000000..a3a6830824 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.c @@ -0,0 +1,308 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/** + * go-rotation-sel.c: A widget to select a text orientation + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + **/ +#include +#include "go-rotation-sel.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct _GORotationSel { + GtkHBox box; + GladeXML *gui; + int angle; + + GtkSpinButton *rotate_spinner; + FooCanvas *rotate_canvas; + FooCanvasItem *rotate_marks[13]; + FooCanvasItem *line; + GtkWidget *text_widget; + FooCanvasItem *text; + int rot_width, rot_height; + gulong motion_handle; +}; + +typedef struct { + GtkHBoxClass parent_class; + void (* rotation_changed) (GORotationSel *grs, int angle); +} GORotationSelClass; + +enum { + ROTATION_CHANGED, + LAST_SIGNAL +}; + +static guint grs_signals[LAST_SIGNAL] = { 0 }; +static GObjectClass *grs_parent_class; + +static void +cb_rotate_changed (GORotationSel *grs) +{ + char const *colour; + int i; + + go_rotation_sel_set_rotation (grs, + gtk_spin_button_get_value_as_int (grs->rotate_spinner) % 360); + + for (i = 0 ; i <= 12 ; i++) + if (grs->rotate_marks[i] != NULL) { + colour = (grs->angle == (i-6)*15) ? "green" : "black"; + foo_canvas_item_set (grs->rotate_marks[i], "fill-color", colour, NULL); + } + + if (grs->line != NULL) { + FooCanvasPoints *points = foo_canvas_points_new (2); + double rad = grs->angle * M_PI / 180.; + points->coords[0] = 15 + cos (rad) * grs->rot_width; + points->coords[1] = 100 - sin (rad) * grs->rot_width; + points->coords[2] = 15 + cos (rad) * 72.; + points->coords[3] = 100 - sin (rad) * 72.; + foo_canvas_item_set (grs->line, "points", points, NULL); + foo_canvas_points_free (points); + } + + if (grs->text) { + double x = 15.0; + double y = 100.0; + double rad = grs->angle * M_PI / 180.; + x -= grs->rot_height * sin (fabs (rad)) / 2; + y -= grs->rot_height * cos (rad) / 2; + if (rad >= 0) + y -= grs->rot_width * sin (rad); + foo_canvas_item_set (grs->text, "x", x, "y", y, NULL); +#if 0 // jsled: gtk-2.4 does not have this. + gtk_label_set_angle (GTK_LABEL (grs->text_widget), + (grs->angle + 360) % 360); +#endif // 0 + } +} + +static void +cb_rotate_canvas_realize (FooCanvas *canvas, GORotationSel *grs) +{ + FooCanvasGroup *group = FOO_CANVAS_GROUP (foo_canvas_root (canvas)); + int i; + GtkStyle *style = gtk_style_copy (GTK_WIDGET (canvas)->style); + style->bg[GTK_STATE_NORMAL] = style->white; + gtk_widget_set_style (GTK_WIDGET (canvas), style); + g_object_unref (style); + + foo_canvas_set_scroll_region (canvas, 0, 0, 100, 200); + foo_canvas_scroll_to (canvas, 0, 0); + + for (i = 0 ; i <= 12 ; i++) { + double rad = (i-6) * M_PI / 12.; + double x = 15 + cos (rad) * 80.; + double y = 100 - sin (rad) * 80.; + double size = (i % 3) ? 3.0 : 4.0; + FooCanvasItem *item = foo_canvas_item_new (group, + FOO_TYPE_CANVAS_ELLIPSE, + "x1", x-size, "y1", y-size, + "x2", x+size, "y2", y+size, + "width-pixels", (int) 1, + "outline-color","black", + "fill-color", "black", + NULL); + grs->rotate_marks[i] = item; + } + grs->line = foo_canvas_item_new (group, FOO_TYPE_CANVAS_LINE, + "fill-color", "black", + "width_units", 2., + NULL); + + { + int w, h; + GtkWidget *tw = grs->text_widget = gtk_label_new (_("Text")); + PangoAttrList *attrs = pango_attr_list_new (); + PangoAttribute *attr = pango_attr_scale_new (1.3); + attr->start_index = 0; + attr->end_index = -1; + pango_attr_list_insert (attrs, attr); +#ifdef DEBUG_ROTATION + attr = pango_attr_background_new (0xffff, 0, 0); + attr->start_index = 0; + attr->end_index = -1; + pango_attr_list_insert (attrs, attr); +#endif + gtk_label_set_attributes (GTK_LABEL (tw), attrs); + pango_attr_list_unref (attrs); + + pango_layout_get_pixel_size (gtk_label_get_layout (GTK_LABEL (tw)), &w, &h); + grs->rot_width = w; + grs->rot_height = h; + + grs->text = foo_canvas_item_new (group, FOO_TYPE_CANVAS_WIDGET, + "widget", tw, NULL); + gtk_widget_show (tw); + } + + cb_rotate_changed (grs); +} + +static void +set_rot_from_point (GORotationSel *grs, FooCanvas *canvas, double x, double y) +{ + double degrees; + foo_canvas_window_to_world (canvas, x, y, &x, &y); + x -= 15.; if (x < 0.) x = 0.; + y -= 100.; + + degrees = atan2 (-y, x) * 180 / M_PI; + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (grs->rotate_spinner), + go_fake_round (degrees)); +} + +static gboolean +cb_rotate_motion_notify_event (FooCanvas *canvas, GdkEventMotion *event, + GORotationSel *grs) +{ + set_rot_from_point (grs, canvas, event->x, event->y); + return TRUE; +} + +static gboolean +cb_rotate_canvas_button (FooCanvas *canvas, GdkEventButton *event, GORotationSel *grs) +{ + if (event->type == GDK_BUTTON_PRESS) { + set_rot_from_point (grs, canvas, event->x, event->y); + if (grs->motion_handle == 0) { + gdk_pointer_grab (canvas->layout.bin_window, FALSE, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, + NULL, NULL, event->time); + + grs->motion_handle = g_signal_connect (G_OBJECT (canvas), "motion_notify_event", + G_CALLBACK (cb_rotate_motion_notify_event), grs); + } + return TRUE; + } else if (event->type == GDK_BUTTON_RELEASE) { + if (grs->motion_handle != 0) { + gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (canvas)), + event->time); + g_signal_handler_disconnect (canvas, grs->motion_handle); + grs->motion_handle = 0; + } + return TRUE; + } else + return FALSE; +} + +static void +grs_init (GORotationSel *grs) +{ + GtkWidget *w; + + grs->gui = go_libglade_new ("go-rotation-sel.glade", "toplevel", NULL, NULL); + if (grs->gui == NULL) + return; + + grs->angle = 0; + grs->line = NULL; + grs->text = NULL; + grs->text_widget = NULL; + grs->rotate_canvas = FOO_CANVAS (foo_canvas_new ()); + gtk_container_add (GTK_CONTAINER (glade_xml_get_widget (grs->gui, + "rotate_canvas_container")), + GTK_WIDGET (grs->rotate_canvas)); + gtk_widget_show (GTK_WIDGET (grs->rotate_canvas)); + memset (grs->rotate_marks, 0, sizeof (grs->rotate_marks)); + w = glade_xml_get_widget (grs->gui, "rotate_spinner"); + grs->rotate_spinner = GTK_SPIN_BUTTON (w); + g_signal_connect_swapped (G_OBJECT (w), "value-changed", + G_CALLBACK (cb_rotate_changed), grs); + + grs->motion_handle = 0; + g_object_connect (G_OBJECT (grs->rotate_canvas), + "signal::realize", G_CALLBACK (cb_rotate_canvas_realize), grs, + "signal::button_press_event", G_CALLBACK (cb_rotate_canvas_button), grs, + "signal::button_release_event", G_CALLBACK (cb_rotate_canvas_button), grs, + NULL); + gtk_spin_button_set_value (grs->rotate_spinner, grs->angle); + + w = glade_xml_get_widget (grs->gui, "toplevel"); + gtk_box_pack_start (GTK_BOX (grs), w, TRUE, TRUE, 0); + gtk_widget_show_all (GTK_WIDGET (grs)); +} + +static void +grs_finalize (GObject *obj) +{ + GORotationSel *grs = GO_ROTATION_SEL (obj); + + if (grs->gui) { + g_object_unref (G_OBJECT (grs->gui)); + grs->gui = NULL; + } + + grs_parent_class->finalize (obj); +} + +static void +grs_class_init (GObjectClass *klass) +{ + GObjectClass *gobj_class = (GObjectClass *) klass; + gobj_class->finalize = grs_finalize; + + grs_parent_class = g_type_class_peek (gtk_hbox_get_type ()); + grs_signals [ROTATION_CHANGED] = g_signal_new ("rotation-changed", + G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GORotationSelClass, rotation_changed), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); +} + +GSF_CLASS (GORotationSel, go_rotation_sel, + grs_class_init, grs_init, GTK_TYPE_HBOX) + +GtkWidget * +go_rotation_sel_new (void) +{ + return g_object_new (GO_ROTATION_SEL_TYPE, NULL); +} + +int +go_rotation_sel_get_rotation (GORotationSel const *grs) +{ + g_return_val_if_fail (IS_GO_ROTATION_SEL (grs), 0); + return grs->angle; +} + +void +go_rotation_sel_set_rotation (GORotationSel *grs, int angle) +{ + g_return_if_fail (IS_GO_ROTATION_SEL (grs)); + if (grs->angle != angle) { + grs->angle = angle; + gtk_spin_button_set_value (grs->rotate_spinner, grs->angle); + g_signal_emit (G_OBJECT (grs), + grs_signals [ROTATION_CHANGED], 0, grs->angle); + } +} diff --git a/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.glade b/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.glade new file mode 100644 index 0000000000..ba5da9e220 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.glade @@ -0,0 +1,225 @@ + + + + + + + True + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + + + + True + False + 12 + + + + True + <b>Orientation</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + False + 0 + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + False + 6 + + + + True + False + 0 + + + + 140 + 210 + True + True + GTK_POLICY_NEVER + GTK_POLICY_NEVER + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + + True + False + 6 + + + + True + A_ngle: + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + rotate_spinner + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + 1 + 0 + True + GTK_UPDATE_ALWAYS + False + False + 0 -90 90 1 5 5 + + + 0 + False + True + + + + + + True + degrees + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + rotate_spinner + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + False + True + + + + + 0 + False + True + + + + + 0 + True + True + + + + + + + diff --git a/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.h b/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.h new file mode 100644 index 0000000000..77f3ca2788 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/go-rotation-sel.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-rotation-sel.h - Select a text orientation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License, version 2, as published by the Free Software Foundation. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ +#ifndef _GO_ROTATION_SEL_H_ +#define _GO_ROTATION_SEL_H_ + +#include +#include + +G_BEGIN_DECLS + +#define GO_ROTATION_SEL_TYPE (go_rotation_sel_get_type ()) +#define GO_ROTATION_SEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GO_ROTATION_SEL_TYPE, GORotationSel)) +#define IS_GO_ROTATION_SEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GO_ROTATION_SEL_TYPE)) + +typedef struct _GORotationSel GORotationSel; + +GType go_rotation_sel_get_type (void); +GtkWidget *go_rotation_sel_new (void); +void go_rotation_sel_set_rotation (GORotationSel *rs, int degrees); +int go_rotation_sel_get_rotation (GORotationSel const *rs); + +G_END_DECLS + +#endif /* _GO_ROTATION_SEL_H_ */ diff --git a/lib/goffice-0.0.4/goffice/gtk/goffice-gtk.c b/lib/goffice-0.0.4/goffice/gtk/goffice-gtk.c new file mode 100644 index 0000000000..eec6030e5f --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/goffice-gtk.c @@ -0,0 +1,1021 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * goffice-gtk.c: Misc gtk utilities + * + * Copyright (C) 2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ +#include +#include "goffice-gtk.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifndef HAVE_GTK26 +// +jsled: maybe not needed due to cascading imports under gtk+-2.6? +#include +#endif + +#ifndef HAVE_GLIB26 +#include "goffice/glib24_26-compat.h" +#endif + +#define PREVIEW_HSIZE 150 +#define PREVIEW_VSIZE 150 + +/* ------------------------------------------------------------------------- */ + +#ifndef W_OK +#define W_OK 2 +#endif + +/* g_access would be nice here. */ +static int +go_access (const char *filename, int what) +{ +#ifdef G_OS_WIN32 + int retval; + int save_errno; + if (G_WIN32_HAVE_WIDECHAR_API ()) { + wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL); + if (wfilename == NULL) { + errno = EINVAL; + return -1; + } + + retval = _waccess (wfilename, what); + save_errno = errno; + + g_free (wfilename); + + errno = save_errno; + } else { + gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL); + if (cp_filename == NULL) { + errno = EINVAL; + return -1; + } + + retval = _access (cp_filename, what); + save_errno = errno; + + g_free (cp_filename); + + errno = save_errno; + } + return retval; +#else + return access (filename, what); +#endif +} + +/* ------------------------------------------------------------------------- */ + + +/** + * go_gtk_button_new_with_stock + * + * Code from gedit + * + * Creates a new GtkButton with custom label and stock image. + * + * text : button label + * stock_id : id for stock icon + * + * return : newly created button + **/ +GtkWidget* +go_gtk_button_new_with_stock (char const *text, char const* stock_id) +{ + GtkWidget *button = gtk_button_new_from_stock(stock_id); + gtk_button_set_use_underline(GTK_BUTTON(button), TRUE); + gtk_button_set_use_stock(GTK_BUTTON(button), FALSE); + gtk_button_set_label(GTK_BUTTON(button), text); + return button; +} + +/** + * go_gtk_dialog_add_button + * dialog : dialog you want to add a button + * text : button label + * stock_id : stock icon id + * response_id : respond id when button clicked + * + * Creates and adds a button with stock image to the action area of an existing dialog. + * Code from gedit + * + * return : newly created button + **/ +GtkWidget* +go_gtk_dialog_add_button (GtkDialog *dialog, const gchar* text, const gchar* stock_id, + gint response_id) +{ + GtkWidget *button; + + g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); + g_return_val_if_fail (text != NULL, NULL); + g_return_val_if_fail (stock_id != NULL, NULL); + + button = go_gtk_button_new_with_stock (text, stock_id); + g_return_val_if_fail (button != NULL, NULL); + + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + + gtk_widget_show (button); + + gtk_dialog_add_action_widget (dialog, button, response_id); + + return button; +} + +/** + * go_libglade_new : + * @gcc : #GOCmdContext + * @gladefile : + * + * Simple utility to open glade files + **/ +GladeXML * +go_libglade_new (char const *gladefile, char const *root, + char const *domain, GOCmdContext *gcc) +{ + GladeXML *gui; + char *f; + + g_return_val_if_fail (gladefile != NULL, NULL); + + if (!g_path_is_absolute (gladefile)) + f = g_build_filename (go_sys_data_dir (), "glade", gladefile, NULL); + else + f = g_strdup (gladefile); + + gui = glade_xml_new (f, root, domain); + if (gui == NULL && gcc != NULL) { + char *msg = g_strdup_printf (_("Unable to open file '%s'"), f); + go_cmd_context_error_system (gcc, msg); + g_free (msg); + } + g_free (f); + + return gui; +} + +/** + * go_editable_enters: + * @window: dialog to affect. + * @editable: Editable to affect. + * + * Normally if there's an editable widget (such as #GtkEntry) in your + * dialog, pressing Enter will activate the editable rather than the + * default dialog button. However, in most cases, the user expects to + * type something in and then press enter to close the dialog. This + * function enables that behavior. + **/ +void +go_editable_enters (GtkWindow *window, GtkWidget *w) +{ + g_return_if_fail (GTK_IS_WINDOW (window)); + g_signal_connect_swapped (G_OBJECT (w), + "activate", + G_CALLBACK (gtk_window_activate_default), window); +} + +GdkPixbuf * +go_pixbuf_intelligent_scale (GdkPixbuf *buf, guint width, guint height) +{ + GdkPixbuf *scaled; + int w, h; + unsigned long int ow = gdk_pixbuf_get_width (buf); + unsigned long int oh = gdk_pixbuf_get_height (buf); + + if (ow > width || oh > height) { + if (ow * height > oh * width) { + w = width; + h = width * (((double)oh)/(double)ow); + } else { + h = height; + w = height * (((double)ow)/(double)oh); + } + + scaled = gdk_pixbuf_scale_simple (buf, w, h, GDK_INTERP_BILINEAR); + } else + scaled = g_object_ref (buf); + + return scaled; +} + +void +go_gtk_widget_disable_focus (GtkWidget *w) +{ + if (GTK_IS_CONTAINER (w)) + gtk_container_foreach (GTK_CONTAINER (w), + (GtkCallback) go_gtk_widget_disable_focus, NULL); + GTK_WIDGET_UNSET_FLAGS (w, GTK_CAN_FOCUS); +} + +int +go_pango_measure_string (PangoContext *context, const PangoFontDescription *font_desc, const char *str) +{ + PangoLayout *layout = pango_layout_new (context); + int width; + + pango_layout_set_text (layout, str, -1); + pango_layout_set_font_description (layout, font_desc); + pango_layout_get_pixel_size (layout, &width, NULL); + + g_object_unref (layout); + + return width; +} + +static void +cb_parent_mapped (GtkWidget *parent, GtkWindow *window) +{ + if (GTK_WIDGET_MAPPED (window)) { + gtk_window_present (window); + g_signal_handlers_disconnect_by_func (G_OBJECT (parent), + G_CALLBACK (cb_parent_mapped), window); + } +} + +/** + * go_gtk_window_set_transient + * @wbcg : The calling window + * @window : the transient window + * + * Make the window a child of the workbook in the command context, if there is + * one. + * The function duplicates the positioning functionality in + * gnome_dialog_set_parent, but does not require the transient window to be + * a GnomeDialog. + */ +void +go_gtk_window_set_transient (GtkWindow *toplevel, GtkWindow *window) +{ +/* FIXME: */ +/* GtkWindowPosition position = gnome_preferences_get_dialog_position(); */ + GtkWindowPosition position = GTK_WIN_POS_CENTER_ON_PARENT; + + g_return_if_fail (GTK_IS_WINDOW (toplevel)); + g_return_if_fail (GTK_IS_WINDOW (window)); + + gtk_window_set_transient_for (window, toplevel); + + if (position == GTK_WIN_POS_NONE) + position = GTK_WIN_POS_CENTER_ON_PARENT; + gtk_window_set_position (window, position); + + if (!GTK_WIDGET_MAPPED (toplevel)) + g_signal_connect_after (G_OBJECT (toplevel), + "map", + G_CALLBACK (cb_parent_mapped), window); +} + +static gint +cb_non_modal_dialog_keypress (GtkWidget *w, GdkEventKey *e) +{ + if(e->keyval == GDK_Escape) { + gtk_widget_destroy (w); + return TRUE; + } + + return FALSE; +} + +void +go_gtk_nonmodal_dialog (GtkWindow *toplevel, GtkWindow *dialog) +{ + go_gtk_window_set_transient (toplevel, dialog); + g_signal_connect (G_OBJECT (dialog), + "key-press-event", + G_CALLBACK (cb_non_modal_dialog_keypress), NULL); +} + +static void +fsel_response_cb (GtkFileChooser *dialog, + gint response_id, + gboolean *result) +{ + if (response_id == GTK_RESPONSE_OK) { + char *uri = gtk_file_chooser_get_uri (dialog); + + if (uri) { + g_free (uri); + *result = TRUE; + } + } + + gtk_main_quit (); +} + +static gint +gu_delete_handler (GtkDialog *dialog, + GdkEventAny *event, + gpointer data) +{ + gtk_dialog_response (dialog, GTK_RESPONSE_CANCEL); + return TRUE; /* Do not destroy */ +} + +gboolean +go_gtk_file_sel_dialog (GtkWindow *toplevel, GtkWidget *w) +{ + gboolean result = FALSE; + gulong delete_handler; + + g_return_val_if_fail (GTK_IS_WINDOW (toplevel), FALSE); + g_return_val_if_fail (GTK_IS_FILE_CHOOSER (w), FALSE); + + gtk_window_set_modal (GTK_WINDOW (w), TRUE); + go_gtk_window_set_transient (toplevel, GTK_WINDOW (w)); + g_signal_connect (w, "response", + G_CALLBACK (fsel_response_cb), &result); + delete_handler = g_signal_connect (w, "delete_event", + G_CALLBACK (gu_delete_handler), NULL); + + gtk_widget_show_all (w); + gtk_grab_add (w); + gtk_main (); + + g_signal_handler_disconnect (w, delete_handler); + + return result; +} + +static gboolean have_pixbufexts = FALSE; +static GSList *pixbufexts = NULL; /* FIXME: we leak this. */ + +static gboolean +filter_images (const GtkFileFilterInfo *filter_info, gpointer data) +{ + if (filter_info->mime_type) + return strncmp (filter_info->mime_type, "image/", 6) == 0; + + if (filter_info->display_name) { + GSList *l; + const char *ext = strrchr (filter_info->display_name, '.'); + if (!ext) return FALSE; + ext++; + + if (!have_pixbufexts) { + GSList *l, *pixbuf_fmts = gdk_pixbuf_get_formats (); + + for (l = pixbuf_fmts; l != NULL; l = l->next) { + GdkPixbufFormat *fmt = l->data; + gchar **support_exts = gdk_pixbuf_format_get_extensions (fmt); + int i; + + for (i = 0; support_exts[i]; ++i) + pixbufexts = g_slist_prepend (pixbufexts, + support_exts[i]); + /* + * Use g_free here because the strings have been + * taken by pixbufexts. + */ + g_free (support_exts); + } + + g_slist_free (pixbuf_fmts); + have_pixbufexts = TRUE; + } + + for (l = pixbufexts; l != NULL; l = l->next) + if (g_ascii_strcasecmp (l->data, ext) == 0) + return TRUE; + } + + return FALSE; +} + +static void +update_preview_cb (GtkFileChooser *chooser) +{ + gchar *filename = gtk_file_chooser_get_preview_filename (chooser); + GtkWidget *label = g_object_get_data (G_OBJECT (chooser), "label-widget"); + GtkWidget *image = g_object_get_data (G_OBJECT (chooser), "image-widget"); + + if (filename == NULL) { + gtk_widget_hide (image); + gtk_widget_hide (label); + } else if (g_file_test (filename, G_FILE_TEST_IS_DIR)) { + /* Not quite sure what to do here. */ + gtk_widget_hide (image); + gtk_widget_hide (label); + } else { + GdkPixbuf *buf; + gboolean dummy; + + buf = gdk_pixbuf_new_from_file (filename, NULL); + if (buf) { + dummy = FALSE; + } else { + GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (chooser)); + buf = gtk_icon_theme_load_icon + (gtk_icon_theme_get_for_screen (screen), + "unknown_image", 100, 100, NULL); + dummy = buf != NULL; + } + + if (buf) { + GdkPixbuf *pixbuf = go_pixbuf_intelligent_scale (buf, PREVIEW_HSIZE, PREVIEW_VSIZE); + gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf); + g_object_unref (pixbuf); + gtk_widget_show (image); + + if (dummy) + gtk_label_set_text (GTK_LABEL (label), ""); + else { + int w = gdk_pixbuf_get_width (buf); + int h = gdk_pixbuf_get_height (buf); + char *size = g_strdup_printf (_("%d x %d"), w, h); + gtk_label_set_text (GTK_LABEL (label), size); + g_free (size); + } + gtk_widget_show (label); + + g_object_unref (buf); + } + + g_free (filename); + } +} + +static GtkFileChooser * +gui_image_chooser_new (gboolean is_save) +{ + GtkFileChooser *fsel; + + fsel = GTK_FILE_CHOOSER + (g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, + "action", is_save ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_OPEN, + "local-only", FALSE, + "use-preview-label", FALSE, + NULL)); + gtk_dialog_add_buttons (GTK_DIALOG (fsel), + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + is_save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, + GTK_RESPONSE_OK, + NULL); + gtk_dialog_set_default_response (GTK_DIALOG (fsel), GTK_RESPONSE_OK); + /* Filters */ + { + GtkFileFilter *filter; + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, _("All Files")); + gtk_file_filter_add_pattern (filter, "*"); + gtk_file_chooser_add_filter (fsel, filter); + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, _("Images")); + gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_MIME_TYPE, + filter_images, NULL, NULL); + gtk_file_chooser_add_filter (fsel, filter); + /* Make this filter the default */ + gtk_file_chooser_set_filter (fsel, filter); + } + + /* Preview */ + { + GtkWidget *vbox = gtk_vbox_new (FALSE, 2); + GtkWidget *preview_image = gtk_image_new (); + GtkWidget *preview_label = gtk_label_new (""); + + g_object_set_data (G_OBJECT (fsel), "image-widget", preview_image); + g_object_set_data (G_OBJECT (fsel), "label-widget", preview_label); + + gtk_widget_set_size_request (vbox, PREVIEW_HSIZE, -1); + + gtk_box_pack_start (GTK_BOX (vbox), preview_image, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), preview_label, FALSE, FALSE, 0); + gtk_file_chooser_set_preview_widget (fsel, vbox); + g_signal_connect (fsel, "update-preview", + G_CALLBACK (update_preview_cb), NULL); + update_preview_cb (fsel); + } + return fsel; +} + +char * +go_gtk_select_image (GtkWindow *toplevel, const char *initial) +{ + const char *key = "go_gtk_select_image"; + char *uri = NULL; + GtkFileChooser *fsel; + + g_return_val_if_fail (GTK_IS_WINDOW (toplevel), NULL); + + fsel = gui_image_chooser_new (FALSE); + + if (!initial) + initial = g_object_get_data (G_OBJECT (toplevel), key); + if (initial) + gtk_file_chooser_set_uri (fsel, initial); + g_object_set (G_OBJECT (fsel), "title", _("Select an Image"), NULL); + + /* Show file selector */ + if (go_gtk_file_sel_dialog (toplevel, GTK_WIDGET (fsel))) { + uri = gtk_file_chooser_get_uri (fsel); + g_object_set_data_full (G_OBJECT (toplevel), + key, g_strdup (uri), + g_free); + } + gtk_widget_destroy (GTK_WIDGET (fsel)); + return uri; +} + +char * +gui_get_image_save_info (GtkWindow *toplevel, GSList *formats, + GOImageType const **ret_format) +{ + GOImageType const *sel_format = NULL; + GtkComboBox *format_combo = NULL; + char *uri = NULL; + GtkFileChooser *fsel = gui_image_chooser_new (TRUE); + + g_object_set (G_OBJECT (fsel), "title", _("Save as"), NULL); + + /* Make format chooser */ + if (formats && ret_format) { + GtkWidget *label; + GtkWidget *box = gtk_hbox_new (FALSE, 5); + GSList *l; + int i; + + format_combo = GTK_COMBO_BOX (gtk_combo_box_new_text ()); + if (*ret_format) + sel_format = *ret_format; + for (l = formats, i = 0; l != NULL; l = l->next, i++) { + gtk_combo_box_append_text + (format_combo, + ((GOImageType *) (l->data))->desc); + if (l->data == (void *)sel_format) + gtk_combo_box_set_active (format_combo, i); + } + if (gtk_combo_box_get_active (format_combo) < 0) + gtk_combo_box_set_active (format_combo, 0); + + label = gtk_label_new_with_mnemonic (_("File _type:")); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (format_combo), + TRUE, TRUE, 0); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), + GTK_WIDGET (format_combo)); + gtk_file_chooser_set_extra_widget (fsel, box); + } + + /* Show file selector */ + loop: + if (!go_gtk_file_sel_dialog (toplevel, GTK_WIDGET (fsel))) + goto out; + uri = gtk_file_chooser_get_uri (fsel); + if (format_combo) { + char *new_uri = NULL; + + sel_format = g_slist_nth_data ( + formats, gtk_combo_box_get_active (format_combo)); + if (!go_url_check_extension (uri, sel_format->ext, &new_uri) && + !go_gtk_query_yes_no (GTK_WINDOW (fsel), TRUE, + _("The given file extension does not match the" + " chosen file type. Do you want to use this name" + " anyway?"))) { + g_free (new_uri); + g_free (uri); + uri = NULL; + goto out; + } else { + g_free (uri); + uri = new_uri; + } + *ret_format = sel_format; + } + if (!go_gtk_url_is_writeable (GTK_WINDOW (fsel), uri, TRUE)) { + g_free (uri); + uri = NULL; + goto loop; + } + out: + gtk_widget_destroy (GTK_WIDGET (fsel)); + return uri; +} + +char * +go_mime_to_image_format (char const *mime_type) +{ + guint i; + const char *suffix; + const char* exceptions[] = { + "svg+xml", "svg", + "x-wmf", "wmf", + "x-emf", "emf", + }; + + if (strncmp (mime_type, "image/", 6) != 0) + return NULL; + suffix = mime_type + 6; + for (i = 0; i < G_N_ELEMENTS (exceptions); i +=2) + if (strcmp (suffix, exceptions[i]) == 0) + return g_strdup (exceptions[i+1]); + + return g_strdup (suffix); +} + +char * +go_image_format_to_mime (char const *format) +{ + guint i; + GSList *ptr, *pixbuf_fmts; + GdkPixbufFormat *pfmt; + gchar *name; + char *ret = NULL; + int cmp; + gchar **mimes; + + const char* formats[] = { + "svg", "image/svg,image/svg+xml", + "wmf", "x-wmf", + "emf", "x-emf", + }; + + if (format == NULL) + return NULL; + + for (i = 0; i < G_N_ELEMENTS (formats); i +=2) + if (strcmp (format, formats[i]) == 0) + return g_strdup (formats[i+1]); + + /* Not a format we have special knowledge about - ask gdk-pixbuf */ + pixbuf_fmts = gdk_pixbuf_get_formats (); + for (ptr = pixbuf_fmts; ptr != NULL; ptr = ptr->next) { + pfmt = (GdkPixbufFormat *)ptr->data; + name = gdk_pixbuf_format_get_name (pfmt); + cmp = strcmp (format, name); + g_free (name); + if (cmp == 0) { + mimes = gdk_pixbuf_format_get_mime_types (pfmt); + ret = g_strjoinv (",", mimes); + g_strfreev (mimes); + break; + } + } + g_slist_free (pixbuf_fmts); + + return ret; +} + +static void +add_atk_relation (GtkWidget *w0, GtkWidget *w1, AtkRelationType type) +{ + AtkObject *atk0 = gtk_widget_get_accessible(w0); + AtkObject *atk1 = gtk_widget_get_accessible(w1); + AtkRelationSet *relation_set = atk_object_ref_relation_set (atk0); + AtkRelation *relation = atk_relation_new (&atk1, 1, type); + atk_relation_set_add (relation_set, relation); + g_object_unref (relation_set); + g_object_unref (relation); +} + +/** + * go_atk_setup_label : + * @label : #GtkWidget + * @target : #GtkWidget + * + * A convenience routine to setup label-for/labeled-by relationship between a + * pair of widgets + **/ +void +go_atk_setup_label (GtkWidget *label, GtkWidget *target) +{ + add_atk_relation (label, target, ATK_RELATION_LABEL_FOR); + add_atk_relation (target, label, ATK_RELATION_LABELLED_BY); +} + +typedef struct { + char const *data_dir; + char const *app; + char const *link; +} CBHelpPaths; + +#ifdef WITH_GNOME +#include +#elif defined(G_OS_WIN32) +#include +#endif +static void +go_help_display (CBHelpPaths const *paths) +{ +#ifdef WITH_GNOME + gnome_help_display (paths->app, paths->link, NULL); +#elif defined(G_OS_WIN32) + static GHashTable* context_help_map = NULL; + guint id; + + if (!context_help_map) { + GsfInput *input; + GsfInputTextline *textline; + GError *err = NULL; + gchar *mapfile = g_strconcat (paths->app, ".hhmap", NULL); + gchar *path = g_build_filename (paths->data_dir, "doc", "C", mapfile, NULL); + + g_free (mapfile); + + if (!(input = gsf_input_stdio_new (path, &err)) || + !(textline = (GsfInputTextline *) gsf_input_textline_new (input))) + go_gtk_notice_dialog (NULL, GTK_MESSAGE_ERROR, "Cannot open '%s': %s", + path, err ? err->message : + "failed to create gsf-input-textline"); + else { + gchar *line, *topic; + gulong id, i = 1; + context_help_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + while ((line = gsf_input_textline_utf8_gets (textline)) != NULL) { + if (!(id = strtoul (line, &topic, 10))) { + go_gtk_notice_dialog (NULL, GTK_MESSAGE_ERROR, + "Invalid topic id at line %lu in %s: '%s'", + i, path, line); + continue; + } + for (; *topic == ' '; ++topic); + g_hash_table_insert (context_help_map, g_strdup (topic), + (gpointer)id); + } + g_object_unref (G_OBJECT (textline)); + } + if (input) + g_object_unref (G_OBJECT (input)); + g_free (path); + } + + if (!(id = (guint) g_hash_table_lookup (context_help_map, paths->link))) + go_gtk_notice_dialog (NULL, GTK_MESSAGE_ERROR, "Topic '%s' not found.", + paths->link); + else { + gchar *chmfile = g_strconcat (paths->app, ".chm", NULL); + gchar *path = g_build_filename (paths->data_dir, "doc", "C", chmfile, NULL); + + g_free (chmfile); + if (!HtmlHelp_ (GetDesktopWindow (), path, HH_HELP_CONTEXT, id)) + go_gtk_notice_dialog (NULL, GTK_MESSAGE_ERROR, "Failed to spawn HtmlHelp"); + g_free (path); + } +#else + go_gtk_notice_dialog (NULL, GTK_MESSAGE_ERROR, + "TODO : launch help browser for %s", paths->link); +#endif +} + +static void +cb_help (CBHelpPaths const *paths) +{ + go_help_display (paths); +} + +void +go_gtk_help_button_init (GtkWidget *w, char const *data_dir, char const *app, char const *link) +{ + CBHelpPaths *paths = g_new (CBHelpPaths, 1); + GtkWidget *parent = gtk_widget_get_parent (w); + + if (GTK_IS_BUTTON_BOX (parent)) + gtk_button_box_set_child_secondary ( + GTK_BUTTON_BOX (parent), w, TRUE); + + paths->data_dir = data_dir; + paths->app = app; + paths->link = link; + g_signal_connect_data (G_OBJECT (w), "clicked", + G_CALLBACK (cb_help), (gpointer) paths, + (GClosureNotify)g_free, G_CONNECT_SWAPPED); +} + +/** + * go_gtk_url_is_writeable: + * @parent : #GtkWindow + * @uri : + * + * Check if it makes sense to try saving. + * If it's an existing file and writable for us, ask if we want to overwrite. + * We check for other problems, but if we miss any, the saver will report. + * So it doesn't have to be bulletproof. + * + * FIXME: The message boxes should really be children of the file selector, + * not the workbook. + **/ +gboolean +go_gtk_url_is_writeable (GtkWindow *parent, char const *uri, + gboolean overwrite_by_default) +{ + gboolean result = TRUE; + char *filename; + + if (uri == NULL || uri[0] == '\0') + result = FALSE; + + filename = go_filename_from_uri (uri); + if (!filename) + return TRUE; /* Just assume writable. */ + + if (G_IS_DIR_SEPARATOR (filename [strlen (filename) - 1]) || + g_file_test (filename, G_FILE_TEST_IS_DIR)) { + go_gtk_notice_dialog (parent, GTK_MESSAGE_ERROR, + _("%s\nis a directory name"), uri); + result = FALSE; + } else if (go_access (filename, W_OK) != 0 && errno != ENOENT) { + go_gtk_notice_dialog (parent, GTK_MESSAGE_ERROR, + _("You do not have permission to save to\n%s"), + uri); + result = FALSE; + } else if (g_file_test (filename, G_FILE_TEST_EXISTS)) { + char *dirname = go_dirname_from_uri (uri, TRUE); + char *basename = go_basename_from_uri (uri); + char *msg = g_markup_printf_escaped ( + _("A file called %s already exists in %s.\n\n" + "Do you want to save over it?"), + basename, dirname); + GtkWidget *dialog = gtk_message_dialog_new_with_markup (parent, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK_CANCEL, + msg); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), + overwrite_by_default ? GTK_RESPONSE_OK : GTK_RESPONSE_CANCEL); + result = GTK_RESPONSE_OK == + go_gtk_dialog_run (GTK_DIALOG (dialog), parent); + g_free (dirname); + g_free (basename); + g_free (msg); + } + + g_free (filename); + return result; +} + +static gint +cb_modal_dialog_keypress (GtkWidget *w, GdkEventKey *e) +{ + if(e->keyval == GDK_Escape) { + gtk_dialog_response (GTK_DIALOG (w), GTK_RESPONSE_CANCEL); + return TRUE; + } + + return FALSE; +} + +/** + * go_gtk_dialog_run + * + * Pop up a dialog as child of a window. + */ +gint +go_gtk_dialog_run (GtkDialog *dialog, GtkWindow *parent) +{ + gint result; + + g_return_val_if_fail (GTK_IS_DIALOG (dialog), GTK_RESPONSE_NONE); + + if (parent) { + g_return_val_if_fail (GTK_IS_WINDOW (parent), GTK_RESPONSE_NONE); + + go_gtk_window_set_transient (parent, GTK_WINDOW (dialog)); + } + + g_signal_connect (G_OBJECT (dialog), + "key-press-event", + G_CALLBACK (cb_modal_dialog_keypress), NULL); + + while ((result = gtk_dialog_run (dialog)) >= 0) + ; + gtk_widget_destroy (GTK_WIDGET (dialog)); + return result; +} + +#define _VPRINTF_MESSAGE(format,args,msg) va_start (args, format); \ + msg = g_strdup_vprintf (format, args); \ + va_end (args); +#define VPRINTF_MESSAGE(format,args,msg) _VPRINTF_MESSAGE (format, args, msg); \ + g_return_if_fail (msg != NULL); + +/* + * TODO: + * Get rid of trailing newlines /whitespace. + */ +void +go_gtk_notice_dialog (GtkWindow *parent, GtkMessageType type, + const gchar *format, ...) +{ + va_list args; + gchar *msg; + GtkWidget *dialog; + + VPRINTF_MESSAGE (format, args, msg); + dialog = gtk_message_dialog_new (parent, + GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, "%s", msg); + g_free (msg); + gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE); + go_gtk_dialog_run (GTK_DIALOG (dialog), parent); +} + +void +go_gtk_notice_nonmodal_dialog (GtkWindow *parent, GtkWidget **ref, + GtkMessageType type, const gchar *format, ...) +{ + va_list args; + gchar *msg; + GtkWidget *dialog; + + if (*ref != NULL) + gtk_widget_destroy (*ref); + + VPRINTF_MESSAGE (format, args, msg); + *ref = dialog = gtk_message_dialog_new (parent, GTK_DIALOG_DESTROY_WITH_PARENT, type, + GTK_BUTTONS_OK, "%s", msg); + g_free (msg); + + g_signal_connect_object (G_OBJECT (dialog), + "response", + G_CALLBACK (gtk_widget_destroy), G_OBJECT (dialog), 0); + g_signal_connect (G_OBJECT (dialog), + "destroy", + G_CALLBACK (gtk_widget_destroyed), ref); + + gtk_widget_show (dialog); + + return; +} + +gboolean +go_gtk_query_yes_no (GtkWindow *parent, gboolean default_answer, + const gchar *format, ...) +{ + va_list args; + gchar *msg; + GtkWidget *dialog; + + _VPRINTF_MESSAGE (format, args, msg); + g_return_val_if_fail (msg != NULL, default_answer); + dialog = gtk_message_dialog_new (parent, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "%s", msg); + g_free (msg); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), + default_answer ? GTK_RESPONSE_YES : GTK_RESPONSE_NO); + return GTK_RESPONSE_YES == + go_gtk_dialog_run (GTK_DIALOG (dialog), parent); +} + +/** + * go_pixbuf_new_from_file : + * @filename : + * + * utility routine to create pixbufs from file @name in the goffice_icon_dir. + * + * Returns a GdkPixbuf that the caller is responsible for. + **/ +GdkPixbuf * +go_pixbuf_new_from_file (char const *filename) +{ + char *path = g_build_filename (go_sys_icon_dir (), filename, NULL); + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (path, NULL); + g_free (path); + return pixbuf; +} diff --git a/lib/goffice-0.0.4/goffice/gtk/goffice-gtk.h b/lib/goffice-0.0.4/goffice/gtk/goffice-gtk.h new file mode 100644 index 0000000000..c074f05a9c --- /dev/null +++ b/lib/goffice-0.0.4/goffice/gtk/goffice-gtk.h @@ -0,0 +1,79 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-gui-utils.h - Misc GTK+ utilities + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License, version 2, as published by the Free Software Foundation. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ +#ifndef _GOFFICE_GTK_H_ +#define _GOFFICE_GTK_H_ + +#include +#include +#include +#include + +G_BEGIN_DECLS + +typedef struct { + char *name; + char *desc; + char *ext; + gboolean has_pixbuf_saver; +} GOImageType; + +void go_editable_enters (GtkWindow *window, GtkWidget *w); + +GladeXML *go_libglade_new (char const *gladefile, char const *root, + char const *domain, GOCmdContext *cc); + +GdkPixbuf *go_pixbuf_new_from_file (char const *filename); +GdkPixbuf *go_pixbuf_intelligent_scale (GdkPixbuf *pixbuf, + guint width, guint height); + +int go_pango_measure_string (PangoContext *context, + PangoFontDescription const *font_desc, + char const *str); + +gint go_gtk_dialog_run (GtkDialog *dialog, GtkWindow *parent); +GtkWidget *go_gtk_dialog_add_button (GtkDialog *dialog, char const *text, char const *stock_id, + gint response_id); +void go_gtk_notice_dialog (GtkWindow *parent, GtkMessageType type, + const gchar *format, ...); +void go_gtk_notice_nonmodal_dialog (GtkWindow *parent, GtkWidget **ref, + GtkMessageType type, const gchar *format, ...); +gboolean go_gtk_query_yes_no (GtkWindow *toplevel, gboolean default_answer, + const gchar *format, ...); + +GtkWidget *go_gtk_button_new_with_stock (char const *text, + char const *stock_id); +void go_gtk_widget_disable_focus (GtkWidget *w); +void go_gtk_window_set_transient (GtkWindow *parent, GtkWindow *window); +void go_gtk_help_button_init (GtkWidget *w, char const *data_dir, + char const *app, char const *link); +void go_gtk_nonmodal_dialog (GtkWindow *toplevel, GtkWindow *dialog); +gboolean go_gtk_file_sel_dialog (GtkWindow *toplevel, GtkWidget *w); +char *go_gtk_select_image (GtkWindow *toplevel, const char *initial); +char *gui_get_image_save_info (GtkWindow *toplevel, GSList *formats, + GOImageType const **ret_format); +char *go_mime_to_image_format (char const *mime_type); +char *go_image_format_to_mime (char const *format); +gboolean go_gtk_url_is_writeable (GtkWindow *parent, char const *url, + gboolean overwrite_by_default); + +void go_atk_setup_label (GtkWidget *label, GtkWidget *target); + +G_END_DECLS + +#endif /* _GOFFICE_GTK_H_ */ diff --git a/lib/goffice-0.0.4/goffice/ms-compat/Makefile.am b/lib/goffice-0.0.4/goffice/ms-compat/Makefile.am new file mode 100644 index 0000000000..07ec9715a6 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/Makefile.am @@ -0,0 +1,16 @@ +noinst_LTLIBRARIES = libgoffice-ms-compat.la + +libgoffice_ms_compat_la_SOURCES = \ + god-drawing-ms-client-handler.c \ + god-drawing-ms.c \ + god-image-ms.c \ + go-ms-parser.c + +libgoffice_ms_compat_ladir = $(goffice_include_dir)/ms-compat +libgoffice_ms_compat_la_HEADERS = \ + god-drawing-ms-client-handler.h \ + god-drawing-ms.h \ + god-image-ms.h \ + go-ms-parser.h + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice-0.0.4/goffice/ms-compat/go-ms-parser.c b/lib/goffice-0.0.4/goffice/ms-compat/go-ms-parser.c new file mode 100644 index 0000000000..18fa042450 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/go-ms-parser.c @@ -0,0 +1,154 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * ms-escher-types.h - + * Copyright (C) 2003-2004, Christopher James Lahey + * + * Authors: + * Christopher James Lahey + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU Library General Public + * License as published by the Free Software Foundation. + * + * This file 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this file; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + */ + +#include +#include +#include +#include +#include + +#define d(x) x + +#define CVS_VERSION "$Id: go-ms-parser.c,v 1.8 2005/08/08 08:57:01 jdassen Exp $" +#define ERROR_STRING(cond,str) G_STRLOC "\n<" CVS_VERSION ">\n" str " (" #cond ")" +#define ERROR(cond,str) { \ + if (!(cond)) { \ + if (err) \ + g_set_error (err, domain, code, ERROR_STRING(cond,str)); \ + else \ + g_warning (ERROR_STRING(cond,str)); \ + goto error_cleanup; \ + } \ +} + +#define STACK_TOP GO_MS_PARSER_STACK_TOP(stack) + +static GQuark domain; +static gint code; + +GOMSParserRecordType unknown_type = + { 0, "Unknown", FALSE, FALSE, -1, -1 }; + + +void +go_ms_parser_read (GsfInput *input, + gsf_off_t length, + const GOMSParserRecordType *types, + guint type_count, + GOMSParserCallbacks *callbacks, + gpointer user_data, + GError **err) +{ + GSList *stack = NULL; + const guint8 *data; + gsf_off_t position; + + while (length > 0) { + const GOMSParserRecordType *type; + GOMSParserRecord record; + guint i; + + ERROR (length >= 8, "Length Error"); + data = gsf_input_read (input, 8, NULL); + ERROR (data != NULL, "Length Error"); + + record.vers = data[0] & 0xf; + record.inst = ((data[0] & 0xf0) >> 4) | (data[1] << 4); + record.opcode = GSF_LE_GET_GUINT16 (data+2); + record.length = GSF_LE_GET_GUINT32 (data+4); + + record.length_remaining = record.length; + record.parse_state = NULL; + + data = NULL; + + /* Find type */ + type = &unknown_type; + + for (i = 0; i < type_count; i++) { + if (types[i].typecode == record.opcode) { + type = &types[i]; + break; + } + } + + record.type = type; + + ERROR (record.length + 8 <= (stack ? ((GOMSParserRecord *) (stack->data))->length_remaining : length), "Length Error"); + ERROR (type->min_record_size == -1 || ((guint32)type->min_record_size) <= record.length, "Length Error"); + ERROR (type->max_record_size == -1 || ((guint32)type->max_record_size) >= record.length, "Length Error"); + + position = gsf_input_tell (input); + + if (type->is_container) { + GOMSParserRecord *stack_item; + stack_item = g_new (GOMSParserRecord, 1); + *stack_item = record; + stack = g_slist_prepend (stack, stack_item); + + if (callbacks && callbacks->start_container) { + callbacks->start_container (stack, input, err, user_data); + } + + gsf_input_seek (input, position, G_SEEK_SET); + } else { + if (callbacks && callbacks->handle_atom) { + if (type->do_read) { + data = gsf_input_read (input, record.length, NULL); + ERROR (record.length == 0 || data, "Length Error"); + } + + callbacks->handle_atom (&record, stack, data, input, err, user_data); + } + + if (STACK_TOP) { + STACK_TOP->length_remaining -= record.length + 8; + } else { + length -= record.length + 8; + } + gsf_input_seek (input, position + record.length, G_SEEK_SET); + } + + while (STACK_TOP && STACK_TOP->length_remaining == 0) { + int item_length = STACK_TOP->length; + + if (callbacks && callbacks->end_container) { + callbacks->end_container (stack, input, err, user_data); + } + + g_free (stack->data); + stack = g_slist_delete_link (stack, stack); + if (stack) { + STACK_TOP->length_remaining -= item_length + 8; + } else { + length -= item_length + 8; + } + } + } + + error_cleanup: + while (stack) { + g_free (stack->data); + stack = g_slist_delete_link (stack, stack); + } +} diff --git a/lib/goffice-0.0.4/goffice/ms-compat/go-ms-parser.h b/lib/goffice-0.0.4/goffice/ms-compat/go-ms-parser.h new file mode 100644 index 0000000000..e26bae5f63 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/go-ms-parser.h @@ -0,0 +1,68 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/** + * go-drawing-ms.h: MS Office Graphic Object I/O support + * + * Author: + * Michael Meeks (michael@ximian.com) + * Jody Goldberg (jody@gnome.org) + * Christopher James Lahey + * + * (C) 1998-2004 Michael Meeks, Jody Goldberg, Chris Lahey + **/ + +#ifndef GO_MS_PARSER_H +#define GO_MS_PARSER_H + +#include + +G_BEGIN_DECLS + +#define GO_MS_PARSER_STACK_TOP(stack) ((stack) ? (GOMSParserRecord *) (stack)->data : NULL) +#define GO_MS_PARSER_STACK_SECOND(stack) ((stack) && (stack)->next ? (GOMSParserRecord *) (stack)->next->data : NULL) + +typedef struct +{ + guint typecode; + const char *name; + gboolean is_container; + gboolean do_read; /* If false, data will be NULL. Ignored for containers. */ + int min_record_size; + int max_record_size; +} GOMSParserRecordType; + +typedef struct { + guint16 opcode; + guint8 vers; + guint16 inst; + guint32 length; + guint32 length_remaining; + gpointer parse_state; + const GOMSParserRecordType *type; +} GOMSParserRecord; + +/* stack is of type GOMSParserRecord */ +typedef void (*GOMSParserHandleAtom) (GOMSParserRecord *record, GSList *stack, const guint8 *data, GsfInput *input, GError **err, gpointer user_data); +typedef void (*GOMSParserStartContainer) (GSList *stack, GsfInput *input, GError **err, gpointer user_data); +typedef void (*GOMSParserEndContainer) (GSList *stack, GsfInput *input, GError **err, gpointer user_data); + +typedef struct { + GOMSParserHandleAtom handle_atom; + GOMSParserStartContainer start_container; + GOMSParserEndContainer end_container; +} GOMSParserCallbacks; + +void go_ms_parser_read (GsfInput *input, + gsf_off_t length, + const GOMSParserRecordType *types, + guint type_count, + GOMSParserCallbacks *callbacks, + gpointer user_data, + GError **err); +#if 0 +int go_ms_parser_write (GODrawing *drawing, + GsfOutput *output); +#endif + +G_END_DECLS + +#endif /* GO_MS_PARSER_H */ diff --git a/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms-client-handler.c b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms-client-handler.c new file mode 100644 index 0000000000..8099109be1 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms-client-handler.c @@ -0,0 +1,134 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * god-drawing-ms-client-handler.c: MS Office Graphic Object support + * + * Copyright (C) 2000-2002 + * Jody Goldberg (jody@gnome.org) + * Michael Meeks (mmeeks@gnu.org) + * Christopher James Lahey + * + * 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 + */ + +#include +#include +#include +#include +#include + +static GObjectClass *parent_class; + +struct GodDrawingMsClientHandlerPrivate_ { + int dummy; +}; + +GodTextModel * +god_drawing_ms_client_handler_handle_client_text (GodDrawingMsClientHandler *handler, + GsfInput *input, + gsf_off_t length, + GError **err) +{ + if (GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->handle_client_text) { + const guint8 *data = NULL; + if (GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->client_text_read_data) + data = gsf_input_read (input, length, NULL); + return GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->handle_client_text (handler, + data, + input, + length, + err); + } else { + return NULL; + } +} + +GodAnchor * +god_drawing_ms_client_handler_handle_client_anchor (GodDrawingMsClientHandler *handler, + GsfInput *input, + gsf_off_t length, + GError **err) +{ + if (GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->handle_client_anchor) { + const guint8 *data = NULL; + if (GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->client_anchor_read_data) + data = gsf_input_read (input, length, NULL); + return GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->handle_client_anchor (handler, + data, + input, + length, + err); + } else { + return NULL; + } +} + +GObject * +god_drawing_ms_client_handler_handle_client_data (GodDrawingMsClientHandler *handler, + GsfInput *input, + gsf_off_t length, + GError **err) +{ + if (GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->handle_client_data) { + const guint8 *data = NULL; + if (GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->client_data_read_data) + data = gsf_input_read (input, length, NULL); + return GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS (handler)->handle_client_data (handler, + data, + input, + length, + err); + } else { + return NULL; + } +} + +static void +god_drawing_ms_client_handler_init (GObject *object) +{ + GodDrawingMsClientHandler *handler = GOD_DRAWING_MS_CLIENT_HANDLER (object); + handler->priv = g_new0 (GodDrawingMsClientHandlerPrivate, 1); +} + +static void +god_drawing_ms_client_handler_finalize (GObject *object) +{ + GodDrawingMsClientHandler *handler = GOD_DRAWING_MS_CLIENT_HANDLER (object); + + g_free (handler->priv); + handler->priv = NULL; + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +god_drawing_ms_client_handler_class_init (GodDrawingMsClientHandlerClass *class) +{ + GObjectClass *object_class; + + object_class = (GObjectClass *) class; + + parent_class = g_type_class_peek_parent (class); + + object_class->finalize = god_drawing_ms_client_handler_finalize; + + class->client_text_read_data = TRUE; + class->client_anchor_read_data = TRUE; + class->client_data_read_data = TRUE; +} + +GSF_CLASS (GodDrawingMsClientHandler, god_drawing_ms_client_handler, + god_drawing_ms_client_handler_class_init, god_drawing_ms_client_handler_init, + G_TYPE_OBJECT) diff --git a/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms-client-handler.h b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms-client-handler.h new file mode 100644 index 0000000000..753449b44b --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms-client-handler.h @@ -0,0 +1,69 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/** + * god-drawing-ms-client-handler.h: MS Office Graphic Object support + * + * Author: + * Michael Meeks (michael@ximian.com) + * Jody Goldberg (jody@gnome.org) + * Christopher James Lahey + * + * (C) 1998-2003 Michael Meeks, Jody Goldberg, Chris Lahey + **/ + +#ifndef GOD_DRAWING_MS_CLIENT_HANDLER_H +#define GOD_DRAWING_MS_CLIENT_HANDLER_H + +#include +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GOD_DRAWING_MS_CLIENT_HANDLER_TYPE (god_drawing_ms_client_handler_get_type ()) +#define GOD_DRAWING_MS_CLIENT_HANDLER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOD_DRAWING_MS_CLIENT_HANDLER_TYPE, GodDrawingMsClientHandler)) +#define GOD_DRAWING_MS_CLIENT_HANDLER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GOD_DRAWING_MS_CLIENT_HANDLER_TYPE, GodDrawingMsClientHandlerClass)) +#define GOD_DRAWING_MS_CLIENT_HANDLER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GOD_DRAWING_MS_CLIENT_HANDLER_TYPE, GodDrawingMsClientHandlerClass)) +#define IS_GOD_DRAWING_MS_CLIENT_HANDLER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOD_DRAWING_MS_CLIENT_HANDLER_TYPE)) +#define IS_GOD_DRAWING_MS_CLIENT_HANDLER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GOD_DRAWING_MS_CLIENT_HANDLER_TYPE)) + +typedef struct GodDrawingMsClientHandlerPrivate_ GodDrawingMsClientHandlerPrivate; + +typedef struct { + GObject parent; + GodDrawingMsClientHandlerPrivate *priv; +} GodDrawingMsClientHandler; + +typedef struct { + GObjectClass parent_class; + + GodTextModel *(*handle_client_text) (GodDrawingMsClientHandler *handler, const guint8 *data, GsfInput *input, gsf_off_t length, GError **err); + GodAnchor *(*handle_client_anchor) (GodDrawingMsClientHandler *handler, const guint8 *data, GsfInput *input, gsf_off_t length, GError **err); + GObject *(*handle_client_data) (GodDrawingMsClientHandler *handler, const guint8 *data, GsfInput *input, gsf_off_t length, GError **err); + + guint client_text_read_data : 1; + guint client_anchor_read_data : 1; + guint client_data_read_data : 1; +} GodDrawingMsClientHandlerClass; + +GType god_drawing_ms_client_handler_get_type (void); + +GodTextModel *god_drawing_ms_client_handler_handle_client_text (GodDrawingMsClientHandler *handler, + GsfInput *input, + gsf_off_t length, + GError **err); +GodAnchor *god_drawing_ms_client_handler_handle_client_anchor (GodDrawingMsClientHandler *handler, + GsfInput *input, + gsf_off_t length, + GError **err); +GObject *god_drawing_ms_client_handler_handle_client_data (GodDrawingMsClientHandler *handler, + GsfInput *input, + gsf_off_t length, + GError **err); + + + +G_END_DECLS + +#endif /* GOD_DRAWING_MS_CLIENT_HANDLER_H */ diff --git a/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms.c b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms.c new file mode 100644 index 0000000000..5f8ff2fafc --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms.c @@ -0,0 +1,685 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * god-drawing-ms.h - + * Copyright (C) 2003-2004, Christopher James Lahey + * + * Authors: + * Christopher James Lahey + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU Library General Public + * License as published by the Free Software Foundation. + * + * This file 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this file; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA. + **/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define d(x) x + +#define CVS_VERSION "$Id: god-drawing-ms.c,v 1.12 2005/08/08 08:57:01 jdassen Exp $" +#define ERROR_STRING(cond,str) G_STRLOC "\n<" CVS_VERSION ">\n" str " (" #cond ")" +#define ERROR(cond,str) { \ + if (!(cond)) { \ + if (err) \ + g_set_error (err, domain, code, ERROR_STRING(cond,str)); \ + else \ + g_warning (ERROR_STRING(cond,str)); \ + return; \ + } \ +} + +static GQuark domain; +static gint code; + +static void +god_drawing_ms_init (void) +{ + static gboolean inited = FALSE; + if (inited) + return; + domain = g_quark_from_static_string ("GodDrawingMs"); + code = 1; + inited = TRUE; +} + +typedef enum { + EscherDggContainer = 0xf000, /* Drawing Group Container */ + EscherDgg = 0xf006, + EscherCLSID = 0xf016, + EscherOPT = 0xf00b, + EscherBStoreContainer = 0xf001, + EscherBSE = 0xf007, + EscherBlip_START = 0xf018, /* Blip types are between */ + EscherBlip_END = 0xf117, /* these two values */ + EscherDgContainer = 0xf002, /* Drawing Container */ + EscherDg = 0xf008, + EscherRegroupItems = 0xf118, + EscherColorScheme = 0xf120, /* bug in docs */ + EscherSpgrContainer = 0xf003, + EscherSpContainer = 0xf004, + EscherSpgr = 0xf009, + EscherSp = 0xf00a, + EscherTextbox = 0xf00c, + EscherClientTextbox = 0xf00d, + EscherAnchor = 0xf00e, + EscherChildAnchor = 0xf00f, + EscherClientAnchor = 0xf010, + EscherClientData = 0xf011, + EscherSolverContainer = 0xf005, + EscherConnectorRule = 0xf012, /* bug in docs */ + EscherAlignRule = 0xf013, + EscherArcRule = 0xf014, + EscherClientRule = 0xf015, + EscherCalloutRule = 0xf017, + EscherSelection = 0xf119, + EscherColorMRU = 0xf11a, + EscherDeletedPspl = 0xf11d, /* bug in docs */ + EscherSplitMenuColors = 0xf11e, + EscherOleObject = 0xf11f, + EscherUserDefined = 0xf122, +} EscherTypecode; + +static const GOMSParserRecordType types[] = +{ + { EscherDggContainer, "EscherDggContainer", TRUE, FALSE, -1, -1 }, + { EscherDgg, "EscherDgg", FALSE, FALSE, -1, -1 }, + { EscherCLSID, "EscherCLSID", FALSE, FALSE, -1, -1 }, + { EscherOPT, "EscherOPT", FALSE, TRUE, -1, -1 }, + { EscherBStoreContainer, "EscherBStoreContainer", TRUE, FALSE, -1, -1 }, + { EscherBSE, "EscherBSE", FALSE, TRUE, -1, -1 }, + { EscherBlip_START, "EscherBlip_START", FALSE, FALSE, -1, -1 }, + { EscherBlip_END, "EscherBlip_END", FALSE, FALSE, -1, -1 }, + { EscherDgContainer, "EscherDgContainer", TRUE, FALSE, -1, -1 }, + { EscherDg, "EscherDg", FALSE, FALSE, -1, -1 }, + { EscherRegroupItems, "EscherRegroupItems", FALSE, FALSE, -1, -1 }, + { EscherColorScheme, "EscherColorScheme", FALSE, FALSE, -1, -1 }, + { EscherSpgrContainer, "EscherSpgrContainer", TRUE, FALSE, -1, -1 }, + { EscherSpContainer, "EscherSpContainer", TRUE, FALSE, -1, -1 }, + { EscherSpgr, "EscherSpgr", FALSE, FALSE, -1, -1 }, + { EscherSp, "EscherSp", FALSE, TRUE, -1, -1 }, + { EscherTextbox, "EscherTextbox", FALSE, FALSE, -1, -1 }, + { EscherClientTextbox, "EscherClientTextbox", FALSE, FALSE, -1, -1 }, + { EscherAnchor, "EscherAnchor", FALSE, FALSE, -1, -1 }, + { EscherChildAnchor, "EscherChildAnchor", FALSE, FALSE, -1, -1 }, + { EscherClientAnchor, "EscherClientAnchor", FALSE, FALSE, -1, -1 }, + { EscherClientData, "EscherClientData", FALSE, FALSE, -1, -1 }, + { EscherSolverContainer, "EscherSolverContainer", TRUE, FALSE, -1, -1 }, + { EscherConnectorRule, "EscherConnectorRule", FALSE, FALSE, -1, -1 }, + { EscherAlignRule, "EscherAlignRule", FALSE, FALSE, -1, -1 }, + { EscherArcRule, "EscherArcRule", FALSE, FALSE, -1, -1 }, + { EscherClientRule, "EscherClientRule", FALSE, FALSE, -1, -1 }, + { EscherCalloutRule, "EscherCalloutRule", FALSE, FALSE, -1, -1 }, + { EscherSelection, "EscherSelection", FALSE, FALSE, -1, -1 }, + { EscherColorMRU, "EscherColorMRU", FALSE, FALSE, -1, -1 }, + { EscherDeletedPspl, "EscherDeletedPspl", FALSE, FALSE, -1, -1 }, + { EscherSplitMenuColors, "EscherSplitMenuColors", FALSE, FALSE, -1, -1 }, + { EscherOleObject, "EscherOleObject", FALSE, FALSE, -1, -1 }, + { EscherUserDefined, "EscherUserDefined", FALSE, FALSE, -1, -1 }, +}; + +typedef guint32 Spid; + +typedef struct { + Spid id; + guint is_group : 1; /* This shape is a group shape */ + guint is_child : 1; /* Not a top-level shape */ + guint is_patriarch : 1; /* This is the topmost group shape. */ + guint is_deleted : 1; /* The shape has been deleted */ + guint is_ole_shape : 1; /* The shape is an OLE object */ + guint have_master : 1; /* Shape has a hspMaster property */ + guint is_flip_h : 1; /* Shape is flipped horizontally */ + guint is_flip_v : 1; /* Shape is flipped vertically */ + guint is_connector : 1; /* Connector type of shape */ + guint have_anchor : 1; /* Shape has an anchor of some kind */ + guint is_background : 1; /* Background shape */ + guint have_spt : 1; /* Shape has a shape type property */ +} ShapeDetails; + +typedef struct { + GodPropertyTable *prop_table; + GodAnchor *anchor; + GodTextModel *text_model; + ShapeDetails sp; +} ShapeParseState; + +typedef struct { + GodShape *main_shape; + GList *shapes; /* Of type GodShape */ + ShapeDetails sp; +} ShapeGroupParseState; + +typedef struct { + GodShape *root_shape; + GodShape *background; +} DrawingParseState; + +typedef struct { + GodDrawing *drawing; + GodDrawingGroup *drawing_group; + GodDrawingMsClientHandler *handler; +} ParseCallbackData; + +#define STACK_TOP GO_MS_PARSER_STACK_TOP(stack) +#define STACK_SECOND GO_MS_PARSER_STACK_SECOND(stack) + +static void +handle_atom (GOMSParserRecord *record, GSList *stack, const guint8 *data, GsfInput *input, GError **err, gpointer user_data) +{ + ParseCallbackData *cb_data = user_data; + switch (record->opcode) { + case EscherClientAnchor: + { + ShapeParseState *parse_state; + + ERROR (STACK_TOP && STACK_TOP->opcode == EscherSpContainer, "Placement Error"); + + parse_state = STACK_TOP->parse_state; + + ERROR (parse_state->anchor == NULL, "Placement Error"); + + if (cb_data->handler) { + parse_state->anchor = god_drawing_ms_client_handler_handle_client_anchor + (cb_data->handler, + input, + record->length, + err); + } + } + break; + case EscherClientTextbox: + { + ShapeParseState *parse_state; + + ERROR (STACK_TOP && STACK_TOP->opcode == EscherSpContainer, "Placement Error"); + + parse_state = STACK_TOP->parse_state; + + ERROR (parse_state->text_model == NULL, "Placement Error"); + + if (cb_data->handler) { + parse_state->text_model = god_drawing_ms_client_handler_handle_client_text + (cb_data->handler, + input, + record->length, + err); + } + } + break; + case EscherOPT: + { + int i; + guint complex_offset; + ShapeParseState *parse_state; + + ERROR (STACK_TOP && (STACK_TOP->opcode == EscherSpContainer || + STACK_TOP->opcode == EscherDggContainer), "Placement Error"); + + if (STACK_TOP->opcode == EscherDggContainer) + break; + + parse_state = STACK_TOP->parse_state; + + ERROR (parse_state->prop_table == NULL, "Placement Error"); + + parse_state->prop_table = god_property_table_new (); + complex_offset = 6 * record->inst; + ERROR (record->length >= complex_offset, "Length Error"); + for (i = 0; i < record->inst; i++) { + int id = GSF_LE_GET_GUINT16 (data + i * 6); +#if 0 + gboolean is_bid = id & 0x4000; +#endif + gboolean is_complex = id & 0x8000; + guint32 opt_data = GSF_LE_GET_GUINT32 (data + i * 6 + 2); + guint32 color = (data[i * 6 + 3] << 16) | (data[i * 6 + 4] << 8) | data[i * 6 + 5]; + + id &= 0x3fff; + switch (id) { + case 128: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_LTXID, + opt_data); + break; + case 129: + god_property_table_set_length + (parse_state->prop_table, + GOD_PROPERTY_DX_TEXT_LEFT, + GO_EMU_TO_UN(opt_data)); + break; + case 130: + god_property_table_set_length + (parse_state->prop_table, + GOD_PROPERTY_DX_TEXT_TOP, + GO_EMU_TO_UN(opt_data)); + break; + case 131: + god_property_table_set_length + (parse_state->prop_table, + GOD_PROPERTY_DX_TEXT_RIGHT, + GO_EMU_TO_UN(opt_data)); + break; + case 132: + god_property_table_set_length + (parse_state->prop_table, + GOD_PROPERTY_DX_TEXT_BOTTOM, + GO_EMU_TO_UN(opt_data)); + break; + case 133: + /* +typedef enum + { + msowrapSquare, + msowrapByPoints, + msowrapNone, + msowrapTopBottom, + msowrapThrough, + } MSOWRAPMODE; + */ + break; + case 135: + /* +typedef enum + { + msoanchorTop, + msoanchorMiddle, + msoanchorBottom, + msoanchorTopCentered, + msoanchorMiddleCentered, + msoanchorBottomCentered, + msoanchorTopBaseline, + msoanchorBottomBaseline, + msoanchorTopCenteredBaseline, + msoanchorBottomCenteredBaseline + } MSOANCHOR; + */ + break; + + case 260: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_BLIP_ID, + opt_data - 1); + break; + case 384: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_TYPE, + opt_data); + break; + case 385: + god_property_table_set_uint + (parse_state->prop_table, + GOD_PROPERTY_FILL_COLOR, + color); + break; + case 386: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_ALPHA, + opt_data); + break; + case 387: + god_property_table_set_uint + (parse_state->prop_table, + GOD_PROPERTY_FILL_BACKGROUND, + color); + break; + case 388: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_BACKGROUND_ALPHA, + opt_data); + break; + case 401: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_RECT_LEFT, + GO_EMU_TO_UN(opt_data)); + break; + case 402: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_RECT_TOP, + GO_EMU_TO_UN(opt_data)); + break; + case 403: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_RECT_RIGHT, + GO_EMU_TO_UN(opt_data)); + break; + case 404: + god_property_table_set_int + (parse_state->prop_table, + GOD_PROPERTY_FILL_RECT_BOTTOM, + GO_EMU_TO_UN(opt_data)); + break; + case 447: + god_property_table_set_flag + (parse_state->prop_table, + GOD_PROPERTY_FILLED, + opt_data & 0x00000010); + break; + case 448: + /* Line color */ + break; + case 450: + /* Line background color */ + break; + case 769: + /* Master shape */ + break; + case 831: + god_property_table_set_flag + (parse_state->prop_table, + GOD_PROPERTY_BACKGROUND, + opt_data & 0x1); + break; + } + if (is_complex) { + complex_offset += opt_data; + ERROR (record->length >= complex_offset, "Length Error"); + } + } + } + break; + case EscherSp: + { + ShapeParseState *parse_state; + + ERROR (STACK_TOP && STACK_TOP->opcode == EscherSpContainer, "Placement Error"); + + parse_state = STACK_TOP->parse_state; + + parse_state->sp.id = GSF_LE_GET_GUINT32 (data); + parse_state->sp.is_group = !!(data[4] & 0x01); + parse_state->sp.is_child = !!(data[4] & 0x02); + parse_state->sp.is_patriarch = !!(data[4] & 0x04); + parse_state->sp.is_deleted = !!(data[4] & 0x08); + parse_state->sp.is_ole_shape = !!(data[4] & 0x10); + parse_state->sp.have_master = !!(data[4] & 0x20); + parse_state->sp.is_flip_h = !!(data[4] & 0x40); + parse_state->sp.is_flip_v = !!(data[4] & 0x80); + parse_state->sp.is_connector = !!(data[5] & 0x01); + parse_state->sp.have_anchor = !!(data[5] & 0x02); + parse_state->sp.is_background = !!(data[5] & 0x04); + parse_state->sp.have_spt = !!(data[5] & 0x08); + } + break; + case EscherBSE: + { + GodImageStore *store; + GodImage *image; + ERROR (cb_data->drawing_group, "Placement Error"); + store = god_drawing_group_get_image_store (cb_data->drawing_group); + image = god_image_ms_new (); + god_image_ms_set_hash (GOD_IMAGE_MS(image), data + 2); + god_image_store_append_image (store, image); + } + break; + } + + if (record->opcode >= EscherBlip_START && record->opcode <= EscherBlip_END) { + int i, image_count; + GodImageStore *store; + GodImage *image; + + ERROR (record->length >= 17, "Length Error"); + data = gsf_input_read (input, record->length, NULL); + ERROR (data, "Length Error"); + + ERROR (cb_data->drawing_group, "Placement Error"); + store = god_drawing_group_get_image_store (cb_data->drawing_group); + image_count = god_image_store_get_image_count (store); + for (i = 0; i < image_count; i++) { + const guint8 *hash; + image = god_image_store_get_image (store, i); + hash = god_image_ms_get_hash (GOD_IMAGE_MS(image)); + if (!memcmp(hash, data, 16)) { + god_image_set_image_data (image, + NULL, + data + 17, + record->length - 17); + } + } + g_object_unref (store); + } +} + +static void +start_container (GSList *stack, GsfInput *input, GError **err, gpointer user_data) +{ + ParseCallbackData *cb_data = user_data; + switch (STACK_TOP->opcode) { + case EscherSpContainer: + { + ShapeParseState *parse_state = g_new0 (ShapeParseState, 1); + STACK_TOP->parse_state = parse_state; + ERROR (STACK_SECOND && (STACK_SECOND->opcode == EscherSpgrContainer || + STACK_SECOND->opcode == EscherDgContainer), "Placement Error"); + } + break; + case EscherSpgrContainer: + { + ShapeGroupParseState *parse_state = g_new0 (ShapeGroupParseState, 1); + STACK_TOP->parse_state = parse_state; + ERROR (STACK_SECOND && (STACK_SECOND->opcode == EscherSpgrContainer || + STACK_SECOND->opcode == EscherDgContainer), "Placement Error"); + } + break; + case EscherDgContainer: + { + DrawingParseState *parse_state = g_new0 (DrawingParseState, 1); + STACK_TOP->parse_state = parse_state; + ERROR (!STACK_SECOND, "Placement Error"); + ERROR (cb_data->drawing == NULL, "Multiple EscherDgContainers"); + cb_data->drawing = god_drawing_new(); + } + break; + case EscherDggContainer: + { + ERROR (!STACK_SECOND, "Placement Error"); + ERROR (cb_data->drawing_group == NULL, "Multiple EscherDggContainers"); + cb_data->drawing_group = god_drawing_group_new(); + } + break; + } +} + +static void +append_shape_on_stack (GSList *stack, GError **err, GodShape *shape, ShapeDetails *sp) +{ + if (STACK_SECOND->opcode == EscherSpgrContainer) { + ShapeGroupParseState *parent_state = STACK_SECOND->parse_state; + ERROR (!sp->is_patriarch && + !sp->is_background && + !sp->is_deleted, "Placement Error"); + parent_state->shapes = g_list_prepend (parent_state->shapes, + shape); + g_object_ref (shape); + } else if (STACK_SECOND->opcode == EscherDgContainer) { + DrawingParseState *parent_state = STACK_SECOND->parse_state; + ERROR (sp->is_patriarch || + sp->is_background || + sp->is_deleted, "Placement Error"); + if (sp->is_patriarch) { + ERROR (parent_state->root_shape == NULL, "Only one patriarch per drawing."); + parent_state->root_shape = shape; + g_object_ref (shape); + } else if (sp->is_background) { + ERROR (parent_state->background == NULL, "Only one background per drawing."); + parent_state->background = shape; + g_object_ref (shape); + } + } +} + +static void +end_container (GSList *stack, GsfInput *input, GError **err, gpointer user_data) +{ + ParseCallbackData *cb_data = user_data; + switch (STACK_TOP->opcode) { + case EscherSpContainer: + { + ShapeParseState *parse_state = STACK_TOP->parse_state; + GodShape *shape; + shape = g_object_new (GOD_SHAPE_TYPE, NULL); + if (parse_state->prop_table) { + god_shape_set_prop_table (shape, parse_state->prop_table); + g_object_unref (parse_state->prop_table); + } + if (parse_state->anchor) { + god_shape_set_anchor (shape, parse_state->anchor); + g_object_unref (parse_state->anchor); + } + if (parse_state->text_model) { + god_shape_set_text_model (shape, parse_state->text_model); + g_object_unref (parse_state->text_model); + } + if (parse_state->sp.is_group) { + ShapeGroupParseState *parent_state = STACK_SECOND->parse_state; + ERROR (parent_state->main_shape == NULL, "Placement Error"); + ERROR (STACK_SECOND->opcode == EscherSpgrContainer, "Placement Error"); + parent_state->main_shape = shape; + parent_state->sp = parse_state->sp; + } else { + append_shape_on_stack (stack, err, shape, &parse_state->sp); + g_object_unref (shape); + } + } + break; + case EscherSpgrContainer: + { + ShapeGroupParseState *parse_state = STACK_TOP->parse_state; + GList *list; + + ERROR (parse_state->main_shape != NULL, "Children Error"); + parse_state->shapes = g_list_reverse (parse_state->shapes); + for (list = parse_state->shapes; list; list = list->next) { + god_shape_append_child (parse_state->main_shape, + list->data); + g_object_unref (list->data); + } + g_list_free (parse_state->shapes); + append_shape_on_stack (stack, err, parse_state->main_shape, &parse_state->sp); + g_object_unref (parse_state->main_shape); + g_free (parse_state); + } + break; + case EscherDgContainer: + { + DrawingParseState *parse_state = STACK_TOP->parse_state; + + god_drawing_set_root_shape (cb_data->drawing, parse_state->root_shape); + god_drawing_set_background (cb_data->drawing, parse_state->background); + g_object_unref (parse_state->root_shape); + g_object_unref (parse_state->background); + + g_free (parse_state); + } + break; + } +} + +static GOMSParserCallbacks callbacks = { handle_atom, + start_container, + end_container }; + +GodDrawing * +god_drawing_read_ms (GsfInput *input, + gsf_off_t length, + GodDrawingMsClientHandler *handler, + GError **err) +{ + ParseCallbackData cb_data; + + god_drawing_ms_init(); + + cb_data.drawing = NULL; + cb_data.drawing_group = NULL; + cb_data.handler = handler; + + go_ms_parser_read (input, + length, + types, + (sizeof (types) / sizeof (types[0])), + &callbacks, + &cb_data, + err); + + if (cb_data.drawing_group) + g_object_unref (cb_data.drawing_group); + return cb_data.drawing; +} + +GodDrawingGroup * +god_drawing_group_read_ms (GsfInput *input, + gsf_off_t length, + GodDrawingMsClientHandler *handler, + GError **err) +{ + ParseCallbackData cb_data; + + god_drawing_ms_init(); + + cb_data.drawing = NULL; + cb_data.drawing_group = NULL; + cb_data.handler = handler; + + go_ms_parser_read (input, + length, + types, + (sizeof (types) / sizeof (types[0])), + &callbacks, + &cb_data, + err); + + if (cb_data.drawing) + g_object_unref (cb_data.drawing); + return cb_data.drawing_group; +} + +void +god_drawing_group_parse_images (GodDrawingGroup *drawing_group, + GsfInput *input, + gsf_off_t length, + GodDrawingMsClientHandler *handler, + GError **err) +{ + ParseCallbackData cb_data; + + god_drawing_ms_init(); + + cb_data.drawing = NULL; + cb_data.drawing_group = drawing_group; + cb_data.handler = handler; + + go_ms_parser_read (input, + length, + types, + (sizeof (types) / sizeof (types[0])), + &callbacks, + &cb_data, + err); + if (cb_data.drawing) + g_object_unref (cb_data.drawing); +} diff --git a/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms.h b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms.h new file mode 100644 index 0000000000..8529e22aa9 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/god-drawing-ms.h @@ -0,0 +1,43 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/** + * god-drawing-ms.h: MS Office Graphic Object I/O support + * + * Author: + * Michael Meeks (michael@ximian.com) + * Jody Goldberg (jody@gnome.org) + * Christopher James Lahey + * + * (C) 1998-2004 Michael Meeks, Jody Goldberg, Chris Lahey + **/ + +#ifndef GO_DRAWING_MS_H +#define GO_DRAWING_MS_H + +#include +#include +#include +#include + +G_BEGIN_DECLS + +GodDrawing *god_drawing_read_ms (GsfInput *input, + gsf_off_t length, + GodDrawingMsClientHandler *handler, + GError **err); +GodDrawingGroup *god_drawing_group_read_ms (GsfInput *input, + gsf_off_t length, + GodDrawingMsClientHandler *handler, + GError **err); +void god_drawing_group_parse_images (GodDrawingGroup *drawing_group, + GsfInput *input, + gsf_off_t length, + GodDrawingMsClientHandler *handler, + GError **err); +#if 0 +int god_drawing_write_ms (GodDrawing *drawing, + GsfOutput *output); +#endif + +G_END_DECLS + +#endif /* GO_DRAWING_MS_H */ diff --git a/lib/goffice-0.0.4/goffice/ms-compat/god-image-ms.c b/lib/goffice-0.0.4/goffice/ms-compat/god-image-ms.c new file mode 100644 index 0000000000..f21bf93472 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/god-image-ms.c @@ -0,0 +1,94 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * god-image-ms.c: MS Office Graphic Object support + * + * Copyright (C) 2000-2004 + * Jody Goldberg (jody@gnome.org) + * Michael Meeks (mmeeks@gnu.org) + * Christopher James Lahey + * + * 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 + */ + +#include +#include +#include +#include + +static GObjectClass *parent_class; + +struct GodImageMsPrivate_ { + guint8 *hash; +}; + +GodImage * +god_image_ms_new (void) +{ + GodImage *image; + + image = g_object_new (GOD_IMAGE_MS_TYPE, NULL); + + return image; +} + +const guint8 * +god_image_ms_get_hash (GodImageMs *image) +{ + return image->priv->hash; +} + +void +god_image_ms_set_hash (GodImageMs *image, + const guint8 *hash) +{ + g_free (image->priv->hash); + image->priv->hash = g_memdup (hash, 16); +} + +static void +god_image_ms_init (GObject *object) +{ + GodImageMs *image = GOD_IMAGE_MS (object); + image->priv = g_new0 (GodImageMsPrivate, 1); +} + +static void +god_image_ms_finalize (GObject *object) +{ + GodImageMs *image = GOD_IMAGE_MS (object); + + g_free (image->priv->hash); + g_free (image->priv); + image->priv = NULL; + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +god_image_ms_class_init (GodImageMsClass *class) +{ + GObjectClass *object_class; + + object_class = (GObjectClass *) class; + + parent_class = g_type_class_peek_parent (class); + + object_class->finalize = god_image_ms_finalize; +} + +GSF_CLASS (GodImageMs, god_image_ms, + god_image_ms_class_init, god_image_ms_init, + GOD_IMAGE_TYPE) diff --git a/lib/goffice-0.0.4/goffice/ms-compat/god-image-ms.h b/lib/goffice-0.0.4/goffice/ms-compat/god-image-ms.h new file mode 100644 index 0000000000..c3f378ce1a --- /dev/null +++ b/lib/goffice-0.0.4/goffice/ms-compat/god-image-ms.h @@ -0,0 +1,52 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/** + * god-image-ms.h: MS Office Graphic Object support + * + * Author: + * Michael Meeks (michael@ximian.com) + * Jody Goldberg (jody@gnome.org) + * Christopher James Lahey + * + * (C) 1998-2003 Michael Meeks, Jody Goldberg, Chris Lahey + **/ + +#ifndef GOD_IMAGE_MS_H +#define GOD_IMAGE_MS_H + +#include +#include +#include + +G_BEGIN_DECLS + +#define GOD_IMAGE_MS_TYPE (god_image_ms_get_type ()) +#define GOD_IMAGE_MS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOD_IMAGE_MS_TYPE, GodImageMs)) +#define GOD_IMAGE_MS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GOD_IMAGE_MS_TYPE, GodImageMsClass)) +#define GOD_IMAGE_MS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GOD_IMAGE_MS_TYPE, GodImageMsClass)) +#define IS_GOD_IMAGE_MS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOD_IMAGE_MS_TYPE)) +#define IS_GOD_IMAGE_MS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GOD_IMAGE_MS_TYPE)) + +typedef struct GodImageMsPrivate_ GodImageMsPrivate; + +typedef struct { + GodImage parent; + GodImageMsPrivate *priv; +} GodImageMs; + +typedef struct { + GodImageClass parent_class; +} GodImageMsClass; + +GType god_image_ms_get_type (void); +GodImage *god_image_ms_new (void); + +/* hash is a 16 byte id */ +const guint8 *god_image_ms_get_hash (GodImageMs *image); +void god_image_ms_set_hash (GodImageMs *image, + const guint8 *hash); + + + +G_END_DECLS + +#endif /* GOD_IMAGE_MS_H */ diff --git a/lib/goffice-0.0.4/goffice/utils/Makefile.am b/lib/goffice-0.0.4/goffice/utils/Makefile.am new file mode 100644 index 0000000000..6924628c05 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/Makefile.am @@ -0,0 +1,83 @@ +if WITH_WIN32 + lib_LTLIBRARIES = libgoffice-win32-stub.la + + libgoffice_win32_stub_la_SOURCES = win32-stub.c win32-stub.h + libgoffice_win32_stub_la_LIBADD = -luuid -lhtmlhelp -lurlmon + libgoffice_win32_stub_la_LDFLAGS = -no-undefined -export-symbols $(srcdir)/goffice-win32-stub.def +endif +EXTRA_DIST = goffice-win32-stub.def + +patternsdir = $(goffice_datadir)/patterns +dist_patterns_DATA = svg-patterns.xml + +noinst_LTLIBRARIES = libgoffice-utils.la +libgoffice_utils_la_SOURCES = \ + go-marshalers.list \ + \ + go-color.c \ + go-file.c \ + go-font.c \ + \ + go-gradient.c \ + go-line.c \ + go-marker.c \ + go-pattern.c \ + go-geometry.c \ + go-math.c \ + datetime.c \ + format.c \ + formats.c \ + go-format.c \ + go-format-match.c \ + regutf8.c \ + \ + go-glib-extras.c \ + go-libxml-extras.c \ + go-rangefunc.c \ + go-regression.c + +libgoffice_utils_ladir = $(goffice_include_dir)/utils +libgoffice_utils_la_HEADERS = \ + goffice-utils.h \ + go-color.h \ + go-file.h \ + go-font.h \ + go-gradient.h \ + go-line.h \ + go-marker.h \ + go-pattern.h \ + go-units.h \ + go-geometry.h \ + go-math.h \ + datetime.h \ + format-impl.h \ + go-format.h \ + go-format-match.h \ + regutf8.h \ + go-glib-extras.h \ + go-libxml-extras.h \ + go-rangefunc.h \ + go-regression.h + +CLEANFILES = \ + go-marshalers.h \ + go-marshalers.c + +# A hint is needed to build the header first: +BUILT_SOURCES = go-marshalers.h + +# Another hint, see bugs #172211 and #172212: +non-intermediate: go-marshalers.c + +GENMARSHAL_COMMAND = $(GLIB_GENMARSHAL) --prefix=go_ + +.list.h: + $(GENMARSHAL_COMMAND) --header $< >$@ + +.list.c: + (echo '/* This file has been automatically generated. Do not edit. */' && \ + echo '#include ' && \ + echo '#include "$*.h"' && \ + $(GENMARSHAL_COMMAND) --body $< ) >$@ + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk diff --git a/lib/goffice/split/datetime.c b/lib/goffice-0.0.4/goffice/utils/datetime.c similarity index 65% rename from lib/goffice/split/datetime.c rename to lib/goffice-0.0.4/goffice/utils/datetime.c index c265c5535d..a102b78e5d 100644 --- a/lib/goffice/split/datetime.c +++ b/lib/goffice-0.0.4/goffice/utils/datetime.c @@ -9,14 +9,15 @@ * Andreas J. Guelzow */ -#include -#include "gnumeric.h" +#include #include "datetime.h" -#include "number-match.h" -#include "value.h" #include +#ifndef HAVE_GLIB26 +#include "goffice/glib24_26-compat.h" +#endif + #define SECS_PER_DAY (24 * 60 * 60) #define HALF_SEC (0.5 / SECS_PER_DAY) @@ -49,7 +50,7 @@ date_init (void) /* ------------------------------------------------------------------------- */ int -datetime_g_to_serial (GDate const *date, GnmDateConventions const *conv) +datetime_g_to_serial (GDate const *date, GODateConventions const *conv) { int day; @@ -65,7 +66,7 @@ datetime_g_to_serial (GDate const *date, GnmDateConventions const *conv) /* ------------------------------------------------------------------------- */ void -datetime_serial_to_g (GDate *res, int serial, GnmDateConventions const *conv) +datetime_serial_to_g (GDate *res, int serial, GODateConventions const *conv) { if (!date_origin) date_init (); @@ -83,33 +84,8 @@ datetime_serial_to_g (GDate *res, int serial, GnmDateConventions const *conv) /* ------------------------------------------------------------------------- */ -gnm_float -datetime_value_to_serial_raw (GnmValue const *v, GnmDateConventions const *conv) -{ - gnm_float serial; - - if (VALUE_IS_NUMBER (v)) - serial = value_get_as_float (v); - else { - char const *str = value_peek_string (v); - GnmValue *conversion = format_match (str, NULL, conv); - - if (conversion) { - if (VALUE_IS_NUMBER (conversion)) - serial = value_get_as_float (conversion); - else - serial = 0; - value_release (conversion); - } else - serial = 0; - } - return serial; -} - -/* ------------------------------------------------------------------------- */ - -gnm_float -datetime_timet_to_serial_raw (time_t t, GnmDateConventions const *conv) +double +datetime_timet_to_serial_raw (time_t t, GODateConventions const *conv) { struct tm *tm = localtime (&t); int secs; @@ -119,30 +95,21 @@ datetime_timet_to_serial_raw (time_t t, GnmDateConventions const *conv) g_date_set_time (&date, t); secs = tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; return datetime_g_to_serial (&date, conv) + - secs / (gnm_float)SECS_PER_DAY; + secs / (double)SECS_PER_DAY; } /* ------------------------------------------------------------------------- */ int -datetime_serial_raw_to_serial (gnm_float raw) +datetime_serial_raw_to_serial (double raw) { - return (int) floorgnum (raw + HALF_SEC); + return (int) floor (raw + HALF_SEC); } /* ------------------------------------------------------------------------- */ int -datetime_value_to_serial (GnmValue const *v, GnmDateConventions const *conv) -{ - return datetime_serial_raw_to_serial ( - datetime_value_to_serial_raw (v, conv)); -} - -/* ------------------------------------------------------------------------- */ - -int -datetime_timet_to_serial (time_t t, GnmDateConventions const *conv) +datetime_timet_to_serial (time_t t, GODateConventions const *conv) { return datetime_serial_raw_to_serial (datetime_timet_to_serial_raw (t, conv)); } @@ -150,7 +117,7 @@ datetime_timet_to_serial (time_t t, GnmDateConventions const *conv) /* ------------------------------------------------------------------------- */ time_t -datetime_serial_to_timet (int serial, GnmDateConventions const *conv) +datetime_serial_to_timet (int serial, GODateConventions const *conv) { GDate gd; struct tm tm; @@ -161,37 +128,15 @@ datetime_serial_to_timet (int serial, GnmDateConventions const *conv) return mktime (&tm); } -/* ------------------------------------------------------------------------- */ - -gboolean -datetime_value_to_g (GDate *res, GnmValue const *v, GnmDateConventions const *conv) -{ - int serial = datetime_value_to_serial (v, conv); - if (serial == 0) - return FALSE; - datetime_serial_to_g (res, serial, conv); - return TRUE; -} - /* ------------------------------------------------------------------------- */ /* This is time-only assuming a 24h day. It probably loses completely on */ /* days with summer time ("daylight savings") changes. */ int -datetime_serial_raw_to_seconds (gnm_float raw) +datetime_serial_raw_to_seconds (double raw) { raw += HALF_SEC; - return (raw - floorgnum (raw)) * SECS_PER_DAY; -} - -/* ------------------------------------------------------------------------- */ - -int -datetime_value_to_seconds (GnmValue const *v) -{ - /* we just want the seconds, actual date does not matter. So we can ignore - * the date convention (1900 vs 1904) */ - return datetime_serial_raw_to_seconds (datetime_value_to_serial_raw (v, NULL)); + return (raw - floor (raw)) * SECS_PER_DAY; } /* ------------------------------------------------------------------------- */ @@ -209,8 +154,8 @@ datetime_timet_to_seconds (time_t t) int datetime_g_days_between (GDate const* date1, GDate const *date2) { - g_assert (g_date_valid (date1)); - g_assert (g_date_valid (date2)); + g_return_val_if_fail (g_date_valid (date1), 0); + g_return_val_if_fail (g_date_valid (date2), 0); return (int) (g_date_get_julian (date2) - g_date_get_julian (date1)); } @@ -220,8 +165,8 @@ datetime_g_days_between (GDate const* date1, GDate const *date2) int datetime_g_months_between (GDate const *date1, GDate const *date2) { - g_assert (g_date_valid (date1)); - g_assert (g_date_valid (date2)); + g_return_val_if_fail (g_date_valid (date1), 0); + g_return_val_if_fail (g_date_valid (date2), 0); /* find the difference according to the month and year ordinals, but discount the last month if there are not enough days. */ @@ -237,8 +182,8 @@ datetime_g_years_between (GDate const *date1, GDate const *date2) { int months; - g_assert (g_date_valid (date1)); - g_assert (g_date_valid (date2)); + g_return_val_if_fail (g_date_valid (date1), 0); + g_return_val_if_fail (g_date_valid (date2), 0); months = datetime_g_months_between (date1, date2); return months > 0 ? months / 12 : -(-months / 12); @@ -246,52 +191,6 @@ datetime_g_years_between (GDate const *date1, GDate const *date2) /* ------------------------------------------------------------------------- */ -/** - * datetime_isoweeknum (GDate *date) - * @date date - * - * Returns the ISO 8601 week number. - */ -static int -datetime_isoweeknum (GDate const *date) -{ - int year; - int week; - int wday, jan1wday, nextjan1wday; - GDate jan1date, nextjan1date; - - g_assert (g_date_valid (date)); - - year = g_date_get_year (date); - wday = g_date_get_weekday (date); - g_date_set_dmy (&jan1date, 1, 1, year); - jan1wday = g_date_get_weekday (&jan1date); - - week = g_date_get_monday_week_of_year (date); - - /* Does date belong to last week of previous year? */ - if ((week == 0) && (jan1wday > G_DATE_THURSDAY)) { - GDate tmpdate; - g_date_set_dmy (&tmpdate, 31, 12, year - 1); - return datetime_isoweeknum (&tmpdate); - } - - if ((jan1wday <= G_DATE_THURSDAY) && - (jan1wday > G_DATE_MONDAY)) - week++; - - if (week == 53) { - g_date_set_dmy (&nextjan1date, 1, 1, year + 1); - nextjan1wday = g_date_get_weekday (&nextjan1date); - if (nextjan1wday <= G_DATE_THURSDAY) - week = 1; - } - - return week; -} - -/* ------------------------------------------------------------------------- */ - /** * datetime_weeknum (GDate *date, int method) * @date date @@ -307,10 +206,11 @@ datetime_weeknum (GDate const *date, int method) { int res; - g_assert (g_date_valid (date)); - g_assert (method == WEEKNUM_METHOD_SUNDAY || - method == WEEKNUM_METHOD_MONDAY || - method == WEEKNUM_METHOD_ISO); + g_return_val_if_fail (g_date_valid (date), -1); + g_return_val_if_fail (method == WEEKNUM_METHOD_SUNDAY || + method == WEEKNUM_METHOD_MONDAY || + method == WEEKNUM_METHOD_ISO, + -1); switch (method) { case WEEKNUM_METHOD_SUNDAY: @@ -318,7 +218,7 @@ datetime_weeknum (GDate const *date, int method) case WEEKNUM_METHOD_MONDAY: res = g_date_get_monday_week_of_year (date); break; case WEEKNUM_METHOD_ISO: - res = datetime_isoweeknum (date); break; + res = g_date_get_iso8601_week_of_year (date); break; default: res = -1; } @@ -524,7 +424,7 @@ coup_cd (GDate *result, GDate const *settlement, GDate const *maturity, * Returns the number of days in the coupon period of the settlement date. * Currently, returns negative numbers if the branch is not implemented. */ -gnm_float +double coupdays (GDate const *settlement, GDate const *maturity, GnmCouponConvention const *conv) { @@ -553,7 +453,7 @@ coupdays (GDate const *settlement, GDate const *maturity, * Returns the number of days from the beginning of the coupon period to * the settlement date. */ -gnm_float +double coupdaybs (GDate const *settlement, GDate const *maturity, GnmCouponConvention const *conv) { @@ -573,7 +473,7 @@ coupdaybs (GDate const *settlement, GDate const *maturity, * Returns the number of days from the settlement date to the next * coupon date. **/ -gnm_float +double coupdaysnc (GDate const *settlement, GDate const *maturity, GnmCouponConvention const *conv) { @@ -583,107 +483,8 @@ coupdaysnc (GDate const *settlement, GDate const *maturity, } int -gnm_date_convention_base (GnmDateConventions const *conv) +gnm_date_convention_base (GODateConventions const *conv) { g_return_val_if_fail (conv != NULL, 1900); return conv->use_1904 ? 1904 : 1900; } - -/* - * Returns the number of days in the year for the given date accoring to - * the day counting system specified by 'basis' argument. Basis may have - * one of the following values: - * - * 0 for US 30/360 (days in a month/days in a year) - * 1 for actual days/actual days - * 2 for actual days/360 - * 3 for actual days/365 - * 4 for European 30/360 - * - * This function returns 360 for basis 0, 2, and 4, it returns value - * 365 for basis 3, and value 365 or 366 for basis 1 accoring to the - * year of the given date (366 is returned if the date is in a leap - * year). - */ -int -annual_year_basis (GnmValue const *value_date, basis_t basis, - GnmDateConventions const *date_conv) -{ - GDate date; - - switch (basis) { - case BASIS_MSRB_30_360: - return 360; - case BASIS_ACT_ACT: - if (!datetime_value_to_g (&date, value_date, date_conv)) - return -1; - return g_date_is_leap_year (g_date_get_year (&date)) - ? 366 : 365; - case BASIS_ACT_360: - return 360; - case BASIS_ACT_365: - return 365; - case BASIS_30E_360: - return 360; - default: - return -1; - } -} - - -gnm_float -yearfrac (GDate const *from, GDate const *to, basis_t basis) -{ - int days = days_between_basis (from, to, basis); - gnm_float peryear; - - if (days < 0) { - const GDate *tmp; - days = -days; - tmp = from; from = to; to = tmp; - } - - switch (basis) { - case BASIS_ACT_ACT: { - int y1 = g_date_get_year (from); - int y2 = g_date_get_year (to); - GDate d1, d2; - int feb29s, years; - - d1 = *from; - g_date_add_years (&d1, 1); - if (g_date_compare (to, &d1) > 0) { - /* More than one year. */ - years = y2 + 1 - y1; - - g_date_clear (&d1, 1); - g_date_set_dmy (&d1, 1, 1, y1); - - g_date_clear (&d2, 1); - g_date_set_dmy (&d2, 1, 1, y2 + 1); - - feb29s = g_date_get_julian (&d2) - g_date_get_julian (&d1) - - 365 * (y2 + 1 - y1); - } else { - /* Less than one year. */ - years = 1; - - if ((g_date_is_leap_year (y1) && g_date_get_month (from) < 3) || - (g_date_is_leap_year (y2) && - (g_date_get_month (to) * 0x100 + g_date_get_day (to) >= 2 * 0x100 + 29))) - feb29s = 1; - else - feb29s = 0; - } - - peryear = 365 + (gnm_float)feb29s / years; - - break; - } - - default: - peryear = annual_year_basis (NULL, basis, NULL); - } - - return days / peryear; -} diff --git a/lib/goffice/split/datetime.h b/lib/goffice-0.0.4/goffice/utils/datetime.h similarity index 61% rename from lib/goffice/split/datetime.h rename to lib/goffice-0.0.4/goffice/utils/datetime.h index 71baf70a7a..34bea24e2e 100644 --- a/lib/goffice/split/datetime.h +++ b/lib/goffice-0.0.4/goffice/utils/datetime.h @@ -1,11 +1,13 @@ -#ifndef GNUMERIC_DATETIME_H -#define GNUMERIC_DATETIME_H +#ifndef _GO_DATETIME_H_ +#define _GO_DATETIME_H_ -#include "gnumeric.h" -#include "numbers.h" +#include +#include #include -struct _GnmDateConventions { +G_BEGIN_DECLS + +struct _GODateConventions { gboolean use_1904; /* Use MacOffice 1904 based date convention, * Rather than the Win32 style 1900 */ }; @@ -23,28 +25,26 @@ struct _GnmDateConventions { /* 1: Week starts on Sunday. Days before first Sunday are in week 0. */ /* 2: Week starts on Monday. Days before first Monday are in week 0. */ /* 150: ISO 8601 week number. */ -#define WEEKNUM_METHOD_SUNDAY 1 -#define WEEKNUM_METHOD_MONDAY 2 -#define WEEKNUM_METHOD_ISO 150 +enum { + WEEKNUM_METHOD_SUNDAY = 1, + WEEKNUM_METHOD_MONDAY = 2, + WEEKNUM_METHOD_ISO = 150 +}; /* These do not round and produces fractional values, i.e., includes time. */ -gnm_float datetime_value_to_serial_raw (GnmValue const *v, GnmDateConventions const *conv); -gnm_float datetime_timet_to_serial_raw (time_t t, GnmDateConventions const *conv); +double datetime_timet_to_serial_raw (time_t t, GODateConventions const *conv); /* These are date-only, no time. */ -int datetime_value_to_serial (GnmValue const *v, GnmDateConventions const *conv); -int datetime_timet_to_serial (time_t t, GnmDateConventions const *conv); -gboolean datetime_value_to_g (GDate *res, GnmValue const *v, GnmDateConventions const *conv); -int datetime_g_to_serial (GDate const *date, GnmDateConventions const *conv); -void datetime_serial_to_g (GDate *res, int serial, GnmDateConventions const *conv); -time_t datetime_serial_to_timet (int serial, GnmDateConventions const *conv); -int datetime_serial_raw_to_serial (gnm_float raw); +int datetime_timet_to_serial (time_t t, GODateConventions const *conv); +int datetime_g_to_serial (GDate const *date, GODateConventions const *conv); +void datetime_serial_to_g (GDate *res, int serial, GODateConventions const *conv); +time_t datetime_serial_to_timet (int serial, GODateConventions const *conv); +int datetime_serial_raw_to_serial (double raw); /* These are time-only assuming a 24h day. It probably loses completely on */ /* days with summer time ("daylight savings") changes. */ -int datetime_value_to_seconds (GnmValue const *v); int datetime_timet_to_seconds (time_t t); -int datetime_serial_raw_to_seconds (gnm_float raw); +int datetime_serial_raw_to_seconds (double raw); int datetime_g_days_between (GDate const *date1, GDate const *date2); @@ -73,26 +73,25 @@ typedef enum { /* see doc/fn-financial-basis.txt for details */ } basis_t; gint32 days_between_basis (GDate const *from, GDate const *to, basis_t basis); -gnm_float yearfrac (GDate const *from, GDate const *to, basis_t basis); -int annual_year_basis (GnmValue const *value_date, basis_t basis, - GnmDateConventions const *date_conv); typedef struct { int freq; basis_t basis; gboolean eom; - GnmDateConventions const *date_conv; + GODateConventions const *date_conv; } GnmCouponConvention; void coup_cd (GDate *res, GDate const *settle, GDate const *mat, int freq, gboolean eom, gboolean next); -gnm_float coupdays (GDate const *settle, GDate const *mat, +double coupdays (GDate const *settle, GDate const *mat, GnmCouponConvention const *conv); -gnm_float coupdaybs (GDate const *settle, GDate const *mat, +double coupdaybs (GDate const *settle, GDate const *mat, GnmCouponConvention const *conv); -gnm_float coupdaysnc (GDate const *settle, GDate const *mat, +double coupdaysnc (GDate const *settle, GDate const *mat, GnmCouponConvention const *conv); -int gnm_date_convention_base (GnmDateConventions const *conv); +int gnm_date_convention_base (GODateConventions const *conv); -#endif /* GNUMERIC_DATETIME_H */ +G_END_DECLS + +#endif /* _GO_DATETIME_H_ */ diff --git a/lib/goffice-0.0.4/goffice/utils/format-impl.h b/lib/goffice-0.0.4/goffice/utils/format-impl.h new file mode 100644 index 0000000000..40c765f8e6 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/format-impl.h @@ -0,0 +1,42 @@ +#ifndef GO_FORMAT_IMPL_H +#define GO_FORMAT_IMPL_H + +#include + +G_BEGIN_DECLS + +struct _GOFormatElement { + char const *format; + char restriction_type; + double restriction_value; + GOColor go_color; + + /* fmt contains an '@' that stringifies things */ + gboolean forces_text; + + gboolean want_am_pm; + gboolean has_fraction; + gboolean suppress_minus; + gboolean elapsed_time; + + GOFormat *container; + char *regexp_str; + GByteArray *match_tags; + GORegexp regexp; +}; + +void go_fmt_general_int (GString *result, int val, int col_width); +void go_fmt_general_float (GString *result, double val, double col_width); +void go_format_number (GString *result, + double number, int col_width, GOFormatElement const *elem, + GODateConventions const *date_conv); +#ifdef GOFFICE_WITH_LONG_DOUBLE +void go_fmt_general_floatl (GString *result, long double val, double col_width); +void go_format_numberl (GString *result, + long double number, int col_width, GOFormatElement const *elem, + GODateConventions const *date_conv); +#endif + +G_END_DECLS + +#endif /* GO_FORMAT_IMPL_H */ diff --git a/lib/goffice/split/format.c b/lib/goffice-0.0.4/goffice/utils/format.c similarity index 69% rename from lib/goffice/split/format.c rename to lib/goffice-0.0.4/goffice/utils/format.c index 4357093030..cf10db41b8 100644 --- a/lib/goffice/split/format.c +++ b/lib/goffice-0.0.4/goffice/utils/format.c @@ -21,39 +21,84 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include -#include -#include "gnumeric.h" -#include "format.h" - -#include "style-color.h" -#include "dates.h" -#include "value.h" +#include +#include "go-format.h" +#include "format-impl.h" +#include "go-format-match.h" +#include "go-color.h" #include "datetime.h" -#include "mathfunc.h" -#include "str.h" -#include "gutils.h" -#include "number-match.h" +#include "go-glib-extras.h" +#include "go-math.h" +#include +#include +#include #include #include #include #include #include #ifdef HAVE_LANGINFO_H -# include +# include #endif +#ifdef G_OS_WIN32 +# include +#endif + +/* ------------------------------------------------------------------------- */ + +#ifndef DOUBLE + +#define DEFINE_COMMON +#define DOUBLE double +#define SUFFIX(_n) _n +#define PREFIX(_n) DBL_ ## _n +#define FORMAT_e "e" +#define FORMAT_f "f" +#define FORMAT_E "E" +#define FORMAT_G "G" +#define STRTO strtod + +#ifdef GOFFICE_WITH_LONG_DOUBLE +#include "format.c" +#undef DEFINE_COMMON +#undef DOUBLE +#undef SUFFIX +#undef PREFIX +#undef FORMAT_e +#undef FORMAT_f +#undef FORMAT_E +#undef FORMAT_G +#undef STRTO + +#ifdef HAVE_SUNMATH_H +#include +#endif +#define DOUBLE long double +#define SUFFIX(_n) _n ## l +#define PREFIX(_n) LDBL_ ## _n +#define FORMAT_e "Le" +#define FORMAT_f "Lf" +#define FORMAT_E "LE" +#define FORMAT_G "LG" +#define STRTO strtold +#endif + +#endif + +/* ------------------------------------------------------------------------- */ #undef DEBUG_REF_COUNT /***************************************************************************/ -static GnmFormat *default_percentage_fmt; -static GnmFormat *default_money_fmt; -static GnmFormat *default_date_fmt; -static GnmFormat *default_time_fmt; -static GnmFormat *default_date_time_fmt; -static GnmFormat *default_general_fmt; +#ifdef DEFINE_COMMON +static GOFormat *default_percentage_fmt; +static GOFormat *default_money_fmt; +static GOFormat *default_date_fmt; +static GOFormat *default_time_fmt; +static GOFormat *default_date_time_fmt; +static GOFormat *default_general_fmt; /* @@ -73,8 +118,77 @@ static gboolean boolean_cached = FALSE; static char const *lc_TRUE = NULL; static char const *lc_FALSE = NULL; +static double beyond_precision; +#ifdef GOFFICE_WITH_LONG_DOUBLE +static long double beyond_precisionl; +#endif + +/* FIXME : use nl_langinfo + * DAY_{1-7} (LC_TIME) + * ABDAY_{1-7} (LC_TIME) + * MON_{1-12} (LC_TIME) + * ABMON_{1-12} (LC_TIME) + * + * The down side is that we can not guarantee the case + **/ +char const * const day_short [] = { + N_("*Sun"), + N_("*Mon"), + N_("*Tue"), + N_("*Wed"), + N_("*Thu"), + N_("*Fri"), + N_("*Sat"), + NULL, +}; + +char const * const day_long [] = { + N_("Sunday"), + N_("Monday"), + N_("Tuesday"), + N_("Wednesday"), + N_("Thursday"), + N_("Friday"), + N_("Saturday"), + NULL +}; + +char const * const month_short [] = { + N_("*Jan"), + N_("*Feb"), + N_("*Mar"), + N_("*Apr"), + N_("*May"), + N_("*Jun"), + N_("*Jul"), + N_("*Aug"), + N_("*Sep"), + N_("*Oct"), + N_("*Nov"), + N_("*Dec"), + NULL +}; + +char const * const month_long [] = { + N_("January"), + N_("February"), + N_("March"), + N_("April"), + N_("May"), + N_("June"), + N_("July"), + N_("August"), + N_("September"), + N_("October"), + N_("November"), + N_("December"), + NULL +}; + +static GOColor lookup_color (char const *str, char const *end); + char const * -gnm_setlocale (int category, char const *val) +go_setlocale (int category, char const *val) { locale_info_cached = FALSE; date_order_cached = FALSE; @@ -83,7 +197,7 @@ gnm_setlocale (int category, char const *val) } static void -convert1 (GString *res, const char *lstr, const char *name, const char *def) +convert1 (GString *res, char const *lstr, char const *name, char const *def) { char *tmp; @@ -212,6 +326,12 @@ format_month_before_day (void) } return month_first; +#elif defined(G_OS_WIN32) + TCHAR str[2]; + + GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_IDATE, str, 2); + + return str[0] != L'1'; #else static gboolean warning = TRUE; if (warning) { @@ -241,6 +361,12 @@ format_get_col_sep (void) return ','; } +char +format_get_row_sep (void) +{ + return ';'; +} + char const * format_boolean (gboolean b) { @@ -253,13 +379,13 @@ format_boolean (gboolean b) } /** - * gnm_set_untranslated_bools : + * go_set_untranslated_bools : * * Short circuit the current locale so that we can import files * and still produce error messages in the current LC_MESSAGE **/ void -gnm_set_untranslated_bools (void) +go_set_untranslated_bools (void) { lc_TRUE = "TRUE"; lc_FALSE = "FALSE"; @@ -271,17 +397,6 @@ gnm_set_untranslated_bools (void) /* WARNING : Global */ static GHashTable *style_format_hash = NULL; -typedef struct { - char const *format; - gboolean want_am_pm; - gboolean has_fraction; - char restriction_type; - gboolean suppress_minus; - gboolean elapsed_time; - gnm_float restriction_value; - GnmColor *color; -} StyleFormatEntry; - /* * The returned string is newly allocated. * @@ -306,7 +421,7 @@ typedef struct { * number of characters used. */ static int -append_year (GString *string, guchar const *format, struct tm const *time_split) +append_year (GString *string, gchar const *format, struct tm const *time_split) { int year = time_split->tm_year + 1900; @@ -362,7 +477,7 @@ append_month (GString *string, int n, struct tm const *time_split) * number of characters used. */ static int -append_day (GString *string, guchar const *format, struct tm const *time_split) +append_day (GString *string, gchar const *format, struct tm const *time_split) { if (format[1] != 'd' && format[1] != 'D') { g_string_append_printf (string, "%d", time_split->tm_mday); @@ -396,21 +511,22 @@ append_hour (GString *string, int n, struct tm const *time_split, ? ((hour + 11) % 12) + 1 : hour); } +#endif static void -append_hour_elapsed (GString *string, struct tm *tm, gnm_float number) +SUFFIX(append_hour_elapsed) (GString *string, struct tm *tm, DOUBLE number) { - gnm_float whole_days, frac_days; + DOUBLE whole_days, frac_days; gboolean is_neg; int cs; /* Centi seconds. */ - const int secs_per_day = 24 * 60 * 60; + int const secs_per_day = 24 * 60 * 60; is_neg = (number < 0); - frac_days = modfgnum (number, &whole_days); + frac_days = SUFFIX(modf) (number, &whole_days); /* ick. round assuming no more than 100th of a second, we really need * to know the precision earlier */ - cs = (int)gnumeric_fake_round (gnumabs (frac_days) * secs_per_day * 100); + cs = (int)SUFFIX(go_fake_round) (SUFFIX(fabs) (frac_days) * secs_per_day * 100); /* FIXME: Why limit hours to int? */ cs /= 100; @@ -423,89 +539,93 @@ append_hour_elapsed (GString *string, struct tm *tm, gnm_float number) g_string_append_printf (string, "%d", tm->tm_hour); } +#ifdef DEFINE_COMMON static void append_minute (GString *string, int n, struct tm const *time_split) { g_string_append_printf (string, "%0*d", n, time_split->tm_min); } +#endif static void -append_minute_elapsed (GString *string, struct tm *tm, gnm_float number) +SUFFIX(append_minute_elapsed) (GString *string, struct tm *tm, DOUBLE number) { - double res, int_part; + DOUBLE res, int_part; - res = modf (gnumeric_fake_round (number * 24. * 60.), &int_part); + res = SUFFIX(modf) (SUFFIX(go_fake_round) (number * 24. * 60.), &int_part); tm->tm_min = int_part; tm->tm_sec = res * ((res < 0.) ? -60. : 60.); g_string_append_printf (string, "%d", tm->tm_min); } -/* - * Renders the second field. - */ +#ifdef DEFINE_COMMON static void append_second (GString *string, int n, struct tm const *time_split) { g_string_append_printf (string, "%0*d", n, time_split->tm_sec); } +#endif -/* - * Renders the second field in elapsed - */ static void -append_second_elapsed (GString *string, gnm_float number) +SUFFIX(append_second_elapsed) (GString *string, DOUBLE number) { g_string_append_printf (string, "%d", - (int) gnumeric_fake_round (number * 24. * 3600.)); + (int) SUFFIX(go_fake_round) (number * 24. * 3600.)); } -static StyleFormatEntry * -format_entry_ctor (void) +#ifdef DEFINE_COMMON +static GOFormatElement * +format_entry_ctor (GOFormat *container) { - StyleFormatEntry *entry; + GOFormatElement *entry; - entry = g_new (StyleFormatEntry, 1); + entry = g_new (GOFormatElement, 1); + entry->container = container; entry->restriction_type = '*'; entry->restriction_value = 0.; entry->suppress_minus = FALSE; + entry->forces_text = FALSE; entry->elapsed_time = FALSE; entry->want_am_pm = entry->has_fraction = FALSE; - entry->color = NULL; + entry->go_color = 0; + entry->regexp_str = NULL; + entry->match_tags = NULL; + + /* symbolic failure */ + g_return_val_if_fail (container != NULL, entry); + return entry; } +#endif -/** - * format_entry_dtor : - * - * WARNING : do not call this for temporary formats generated for - * 'General'. - */ +#ifdef DEFINE_COMMON +/* WARNING : do not call this for temporary formats generated for 'General' */ static void format_entry_dtor (gpointer data, gpointer user_data) { - StyleFormatEntry *entry = data; - if (entry->color != NULL) { - style_color_unref (entry->color); - entry->color = NULL; - } + GOFormatElement *entry = data; + format_match_release (entry); g_free ((char *)entry->format); g_free (entry); } +#endif +#ifdef DEFINE_COMMON static void -format_entry_set_fmt (StyleFormatEntry *entry, +format_entry_set_fmt (GOFormatElement *entry, gchar const *begin, gchar const *end) { /* empty formats are General if there is a color, or a condition */ entry->format = (begin != NULL && end != begin) ? g_strndup (begin, end - begin) - : g_strdup ((entry->color || entry->restriction_type != '*') + : g_strdup ((entry->go_color || entry->restriction_type != '*') ? "General" : ""); + format_match_create (entry); } +#endif -static GnmColor * lookup_color (char const *str, char const *end); - +#ifdef DEFINE_COMMON /* * Since the Excel formating codes contain a number of ambiguities, this * routine does some analysis on the format first. This routine should always @@ -513,14 +633,13 @@ static GnmColor * lookup_color (char const *str, char const *end); * simplistic formatting */ static void -format_compile (GnmFormat *format) +format_compile (GOFormat *format) { gchar const *fmt, *real_start = NULL; - StyleFormatEntry *entry = format_entry_ctor (); + GOFormatElement *entry = format_entry_ctor (format); int num_entries = 1, counter = 0; GSList *ptr; - format_match_create (format); for (fmt = format->format; *fmt ; fmt++) { if (NULL == real_start && '[' != *fmt) real_start = fmt; @@ -563,10 +682,10 @@ format_compile (GnmFormat *format) *begin == 'm' || *begin == 'M' || *begin == 's' || *begin == 'S')) entry->elapsed_time = TRUE; - else if (*begin != '$' && entry->color == NULL) { - entry->color = lookup_color (begin, end); + else if (*begin != '$' && entry->go_color == 0) { + entry->go_color = lookup_color (begin, end); /* Only the first colour counts */ - if (NULL != entry->color) { + if (0 != entry->go_color) { fmt = end; continue; } @@ -579,7 +698,7 @@ format_compile (GnmFormat *format) /* fall back on 0 for errors */ errno = 0; - entry->restriction_value = strtognum (begin, (char **)&end); + entry->restriction_value = STRTO (begin, (char **)&end); if (errno == ERANGE || begin == end) entry->restriction_value = 0.; @@ -633,15 +752,24 @@ format_compile (GnmFormat *format) entry->suppress_minus = TRUE; break; + case '@': + entry->forces_text = TRUE; + break; + case ';': format_entry_set_fmt (entry, real_start, fmt); format->entries = g_slist_append (format->entries, entry); num_entries++; - entry = format_entry_ctor (); + entry = format_entry_ctor (format); real_start = NULL; break; + case '*': + if (fmt != format->format) + format->is_var_width = TRUE; + break; + default : break; } @@ -651,7 +779,7 @@ format_compile (GnmFormat *format) format->entries = g_slist_append (format->entries, entry); for (ptr = format->entries; ptr && counter++ < 4 ; ptr = ptr->next) { - StyleFormatEntry *entry = ptr->data; + GOFormatElement *entry = ptr->data; /* apply the standard restrictions where things are unspecified */ if (entry->restriction_type == '*') { @@ -668,16 +796,18 @@ format_compile (GnmFormat *format) } } } +#endif +#ifdef DEFINE_COMMON /* * This routine is invoked when the last user of the * format is gone (ie, refcount has reached zero) just - * before the GnmFormat structure is actually released. + * before the GOFormat structure is actually released. * * resources allocated in format_compile should be disposed here */ static void -format_destroy (GnmFormat *format) +format_destroy (GOFormat *format) { g_slist_foreach (format->entries, &format_entry_dtor, NULL); g_slist_free (format->entries); @@ -686,46 +816,29 @@ format_destroy (GnmFormat *format) pango_attr_list_unref (format->markup); format->markup = NULL; } - format_match_release (format); } +#endif +#ifdef DEFINE_COMMON /* used to generate formats when delocalizing so keep the leadings caps */ -static struct FormatColor { - char const * const name; - GnmColor *color; -} format_colors [] = { - { N_("Black") }, - { N_("Blue") }, - { N_("Cyan") }, - { N_("Green") }, - { N_("Magenta") }, - { N_("Red") }, - { N_("White") }, - { N_("Yellow") } +typedef struct { + char const *name; + GOColor go_color; +} FormatColor; +static FormatColor const format_colors [] = { + { N_("Black"), RGBA_BLACK }, + { N_("Blue"), RGBA_BLUE }, + { N_("Cyan"), RGBA_CYAN }, + { N_("Green"), RGBA_GREEN }, + { N_("Magenta"), RGBA_VIOLET }, + { N_("Red"), RGBA_RED }, + { N_("White"), RGBA_WHITE }, + { N_("Yellow"), RGBA_YELLOW } }; +#endif -void -format_color_init (void) -{ - int i; - - for (i = G_N_ELEMENTS (format_colors) ; i-- > 0 ; ) - format_colors[i].color = - style_color_new_name (format_colors[i].name); -} - -void -format_color_shutdown (void) -{ - int i; - - for (i = G_N_ELEMENTS (format_colors) ; i-- > 0 ; ) { - style_color_unref (format_colors[i].color); - format_colors[i].color = NULL; - } -} - -static struct FormatColor const * +#ifdef DEFINE_COMMON +static FormatColor const * lookup_color_by_name (gchar const *str, gchar const *end, gboolean translate) { @@ -742,29 +855,26 @@ lookup_color_by_name (gchar const *str, gchar const *end, } return NULL; } +#endif -static GnmColor * +#ifdef DEFINE_COMMON +static GOColor lookup_color (gchar const *str, gchar const *end) { - struct FormatColor const *color = lookup_color_by_name (str, end, FALSE); - - if (color != NULL) { - style_color_ref (color->color); - return color->color; - } - return NULL; + FormatColor const *color = lookup_color_by_name (str, end, FALSE); + return (color != NULL) ? color->go_color : 0; } +#endif -static gnm_float beyond_precision; void -render_number (GString *result, - gnm_float number, - format_info_t const *info) +SUFFIX(go_render_number) (GString *result, + DOUBLE number, + GONumberFormat const *info) { - const GString *thousands_sep = format_get_thousand (); - char num_buf[(GNUM_MANT_DIG + GNUM_MAX_EXP) * 2 + 1]; + GString const *thousands_sep = format_get_thousand (); + char num_buf[(PREFIX(MANT_DIG) + PREFIX(MAX_EXP)) * 2 + 1]; gchar *num = num_buf + sizeof (num_buf) - 1; - gnm_float frac_part, int_part; + DOUBLE frac_part, int_part; int group, zero_count, digit_count = 0; int left_req = info->left_req; int right_req = info->right_req; @@ -773,17 +883,19 @@ render_number (GString *result, int right_allowed = info->right_allowed + info->right_optional; int sigdig = 0; + number = SUFFIX(go_add_epsilon) (number); + if (right_allowed >= 0 && !info->has_fraction) { /* Change "rounding" into "truncating". */ /* Note, that we assume number >= 0 here. */ - gnm_float delta = 5 * gpow10 (-right_allowed - 1); + DOUBLE delta = 5 * SUFFIX(go_pow10) (-right_allowed - 1); number += delta; } - frac_part = modfgnum (gnumeric_add_epsilon (number), &int_part); + frac_part = SUFFIX(modf) (number, &int_part); *num = '\0'; group = (info->group_thousands) ? 3 : -1; - for (; int_part > beyond_precision ; int_part /= 10., digit_count++) { + for (; int_part > SUFFIX(beyond_precision) ; int_part /= 10., digit_count++) { if (group-- == 0) { int i; group = 2; @@ -795,8 +907,8 @@ render_number (GString *result, } for (; int_part >= 1. ; int_part /= 10., digit_count++) { - gnm_float r = floorgnum (int_part); - int digit = r - floorgnum (r / 10) * 10; + DOUBLE r = SUFFIX(floor) (int_part); + int digit = r - SUFFIX(floor) (r / 10) * 10; if (group-- == 0) { int i; @@ -826,7 +938,7 @@ render_number (GString *result, number < 1.0 && info->right_allowed == 0 && info->right_optional > 0)) - gnm_string_append_gstring (result, format_get_decimal ()); + go_string_append_gstring (result, format_get_decimal ()); /* TODO : clip this a DBL_DIG */ /* TODO : What if is a fraction ? */ @@ -837,7 +949,7 @@ render_number (GString *result, frac_part *= 10.0; digit = (gint)frac_part; frac_part -= digit; - if (sigdig++ > GNUM_DIG) digit = 0; + if (++sigdig > PREFIX(DIG)) digit = 0; g_string_append_c (result, digit + '0'); } @@ -849,13 +961,14 @@ render_number (GString *result, digit = (gint)frac_part; frac_part -= digit; - if (digit == 0) { + if (++sigdig > PREFIX(DIG)) digit = 0; + + if (digit != 0) { right_spaces -= zero_count + 1; zero_count = 0; } else zero_count ++; - if (sigdig++ > GNUM_DIG) digit = 0; g_string_append_c (result, digit + '0'); } @@ -866,7 +979,7 @@ render_number (GString *result, } static void -do_render_number (gnm_float number, format_info_t *info, GString *result) +SUFFIX(do_render_number) (DOUBLE number, GONumberFormat *info, GString *result) { info->rendered = TRUE; @@ -889,7 +1002,7 @@ do_render_number (gnm_float number, format_info_t *info, GString *result) decimal_point); #endif - render_number (result, info->scale * number, info); + SUFFIX(go_render_number) (result, info->scale * number, info); } /* @@ -909,7 +1022,7 @@ do_render_number (gnm_float number, format_info_t *info, GString *result) * > If no one noticed anything wrong, it must be that no one did it that way. */ static gboolean -split_time (struct tm *tm, gnm_float number, GnmDateConventions const *date_conv) +SUFFIX(split_time) (struct tm *tm, DOUBLE number, GODateConventions const *date_conv) { guint secs; GDate date; @@ -928,22 +1041,25 @@ split_time (struct tm *tm, gnm_float number, GnmDateConventions const *date_conv return FALSE; } +#ifdef DEFINE_COMMON #define NUM_ZEROS 30 -static const char zeros[NUM_ZEROS + 1] = "000000000000000000000000000000"; -static const char qmarks[NUM_ZEROS + 1] = "??????????????????????????????"; +static char const zeros[NUM_ZEROS + 1] = "000000000000000000000000000000"; +static char const qmarks[NUM_ZEROS + 1] = "??????????????????????????????"; +#endif +#ifdef DEFINE_COMMON /** - * style_format_number : - * @fmt : #FormatCharacteristics + * go_format_as_number : + * @fmt : #GOFormatDetails * * generate an unlocalized number format based on @fmt. **/ -static GnmFormat * -style_format_number (FormatCharacteristics const *fmt) +static GOFormat * +go_format_as_number (GOFormatDetails const *fmt) { int symbol = fmt->currency_symbol_index; GString *str, *tmp; - GnmFormat *sf; + GOFormat *gf; g_return_val_if_fail (fmt->num_decimals >= 0, NULL); g_return_val_if_fail (fmt->num_decimals <= NUM_ZEROS, NULL); @@ -951,9 +1067,9 @@ style_format_number (FormatCharacteristics const *fmt) str = g_string_new (NULL); /* Currency */ - if (symbol != 0 && currency_symbols[symbol].precedes) { - g_string_append (str, currency_symbols[symbol].symbol); - if (currency_symbols[symbol].has_space) + if (symbol != 0 && go_format_currencies[symbol].precedes) { + g_string_append (str, go_format_currencies[symbol].symbol); + if (go_format_currencies[symbol].has_space) g_string_append_c (str, ' '); } @@ -968,10 +1084,10 @@ style_format_number (FormatCharacteristics const *fmt) } /* Currency */ - if (symbol != 0 && !currency_symbols[symbol].precedes) { - if (currency_symbols[symbol].has_space) + if (symbol != 0 && !go_format_currencies[symbol].precedes) { + if (go_format_currencies[symbol].has_space) g_string_append_c (str, ' '); - g_string_append (str, currency_symbols[symbol].symbol); + g_string_append (str, go_format_currencies[symbol].symbol); } /* There are negatives */ @@ -998,16 +1114,18 @@ style_format_number (FormatCharacteristics const *fmt) g_string_append_c (str, ')'); } - sf = style_format_new_XL (str->str, FALSE); + gf = go_format_new_from_XL (str->str, FALSE); g_string_free (str, TRUE); - return sf; + return gf; } +#endif -static GnmFormat * -style_format_fraction (FormatCharacteristics const *fmt) +#ifdef DEFINE_COMMON +static GOFormat * +style_format_fraction (GOFormatDetails const *fmt) { GString *str = g_string_new (NULL); - GnmFormat *sf; + GOFormat *gf; if (fmt->fraction_denominator >= 2) { g_string_printf (str, "# ?/%d", fmt->fraction_denominator); @@ -1021,16 +1139,18 @@ style_format_fraction (FormatCharacteristics const *fmt) g_string_append_len (str, qmarks, fmt->num_decimals); } - sf = style_format_new_XL (str->str, FALSE); + gf = go_format_new_from_XL (str->str, FALSE); g_string_free (str, TRUE); - return sf; + return gf; } +#endif -static GnmFormat * -style_format_percent (FormatCharacteristics const *fmt) +#ifdef DEFINE_COMMON +static GOFormat * +go_format_as_percentage (GOFormatDetails const *fmt) { GString *str; - GnmFormat *sf; + GOFormat *gf; g_return_val_if_fail (fmt->num_decimals >= 0, NULL); g_return_val_if_fail (fmt->num_decimals <= NUM_ZEROS, NULL); @@ -1043,16 +1163,18 @@ style_format_percent (FormatCharacteristics const *fmt) } g_string_append_c (str, '%'); - sf = style_format_new_XL (str->str, FALSE); + gf = go_format_new_from_XL (str->str, FALSE); g_string_free (str, TRUE); - return sf; + return gf; } +#endif -static GnmFormat * -style_format_science (FormatCharacteristics const *fmt) +#ifdef DEFINE_COMMON +static GOFormat * +go_format_as_scientific (GOFormatDetails const *fmt) { GString *str; - GnmFormat *sf; + GOFormat *gf; g_return_val_if_fail (fmt->num_decimals >= 0, NULL); g_return_val_if_fail (fmt->num_decimals <= NUM_ZEROS, NULL); @@ -1065,16 +1187,18 @@ style_format_science (FormatCharacteristics const *fmt) } g_string_append (str, "E+00"); - sf = style_format_new_XL (str->str, FALSE); + gf = go_format_new_from_XL (str->str, FALSE); g_string_free (str, TRUE); - return sf; + return gf; } +#endif -static GnmFormat * -style_format_account (FormatCharacteristics const *fmt) +#ifdef DEFINE_COMMON +static GOFormat * +go_format_as_account (GOFormatDetails const *fmt) { GString *str, *sym, *num; - GnmFormat *sf; + GOFormat *gf; int symbol = fmt->currency_symbol_index; gboolean quote_currency; @@ -1091,49 +1215,50 @@ style_format_account (FormatCharacteristics const *fmt) /* The currency symbols with space after or before */ sym = g_string_new (NULL); - quote_currency = (currency_symbols[symbol].symbol[0] != '['); - if (currency_symbols[symbol].precedes) { + quote_currency = (go_format_currencies[symbol].symbol[0] != '['); + if (go_format_currencies[symbol].precedes) { if (quote_currency) g_string_append_c (sym, '\"'); - g_string_append (sym, currency_symbols[symbol].symbol); + g_string_append (sym, go_format_currencies[symbol].symbol); if (quote_currency) g_string_append_c (sym, '\"'); g_string_append (sym, "* "); - if (currency_symbols[symbol].has_space) + if (go_format_currencies[symbol].has_space) g_string_append_c (sym, ' '); } else { g_string_append (sym, "* "); - if (currency_symbols[symbol].has_space) + if (go_format_currencies[symbol].has_space) g_string_append_c (sym, ' '); if (quote_currency) g_string_append_c (sym, '\"'); - g_string_append (sym, currency_symbols[symbol].symbol); + g_string_append (sym, go_format_currencies[symbol].symbol); if (quote_currency) g_string_append_c (sym, '\"'); } /* Finally build the correct string */ - if (currency_symbols[symbol].precedes) { + if (go_format_currencies[symbol].precedes) { g_string_append_printf (str, "_(%s%s_);_(%s(%s);_(%s\"-\"%s_);_(@_)", sym->str, num->str, sym->str, num->str, - sym->str, qmarks + NUM_ZEROS-fmt->num_decimals); + sym->str, (qmarks + NUM_ZEROS) - fmt->num_decimals); } else { g_string_append_printf (str, "_(%s%s_);_((%s)%s;_(\"-\"%s%s_);_(@_)", num->str, sym->str, num->str, sym->str, - qmarks + NUM_ZEROS-fmt->num_decimals, sym->str); + (qmarks + NUM_ZEROS) - fmt->num_decimals, sym->str); } g_string_free (num, TRUE); g_string_free (sym, TRUE); - sf = style_format_new_XL (str->str, FALSE); + gf = go_format_new_from_XL (str->str, FALSE); g_string_free (str, TRUE); - return sf; + return gf; } +#endif - +#ifdef DEFINE_COMMON /* * Finds the decimal char in @str doing the proper parsing of a * format string @@ -1187,15 +1312,17 @@ find_decimal_char (char const *str) } return NULL; } +#endif +#ifdef DEFINE_COMMON /* An helper function which modify the number of decimals displayed * and recreate the format string by calling the good function */ -static GnmFormat * -reformat_decimals (const FormatCharacteristics *fc, - GnmFormat * (*format_function) (FormatCharacteristics const * fmt), +static GOFormat * +reformat_decimals (GOFormatDetails const *fc, + GOFormat * (*format_function) (GOFormatDetails const *fmt), int step) { - FormatCharacteristics fc_copy; + GOFormatDetails fc_copy; /* Be sure that the number of decimals displayed will remain correct */ if ((fc->num_decimals+step > NUM_ZEROS) || (fc->num_decimals+step <0)) @@ -1205,7 +1332,9 @@ reformat_decimals (const FormatCharacteristics *fc, return (*format_function) (&fc_copy); } +#endif +#ifdef DEFINE_COMMON /* * This routine scans the format_string for a decimal dot, * and if it finds it, it removes the first zero after it to @@ -1213,27 +1342,25 @@ reformat_decimals (const FormatCharacteristics *fc, * * Returns NULL if the new format would not change things */ -GnmFormat * -format_remove_decimal (GnmFormat const *fmt) +GOFormat * +go_format_dec_precision (GOFormat const *fmt) { - int offset = 1; - char *ret, *p; - char const *tmp; + int start; + char *ret; char const *format_string = fmt->format; - GnmFormat *sf; switch (fmt->family) { - case FMT_NUMBER: - case FMT_CURRENCY: - return reformat_decimals (&fmt->family_info, &style_format_number, -1); - case FMT_ACCOUNT: - return reformat_decimals (&fmt->family_info, &style_format_account, -1); - case FMT_PERCENT: - return reformat_decimals (&fmt->family_info, &style_format_percent, -1); - case FMT_SCIENCE: - return reformat_decimals (&fmt->family_info, &style_format_science, -1); - case FMT_FRACTION: { - FormatCharacteristics fc = fmt->family_info; + case GO_FORMAT_NUMBER: + case GO_FORMAT_CURRENCY: + return reformat_decimals (&fmt->family_info, &go_format_as_number, -1); + case GO_FORMAT_ACCOUNTING: + return reformat_decimals (&fmt->family_info, &go_format_as_account, -1); + case GO_FORMAT_PERCENTAGE: + return reformat_decimals (&fmt->family_info, &go_format_as_percentage, -1); + case GO_FORMAT_SCIENTIFIC: + return reformat_decimals (&fmt->family_info, &go_format_as_scientific, -1); + case GO_FORMAT_FRACTION: { + GOFormatDetails fc = fmt->family_info; if (fc.fraction_denominator >= 2) { if (fc.fraction_denominator > 2 && @@ -1254,20 +1381,20 @@ format_remove_decimal (GnmFormat const *fmt) return style_format_fraction (&fc); } - case FMT_TIME: + case GO_FORMAT_TIME: /* FIXME: we might have decimals on seconds part. */ - case FMT_DATE: - case FMT_TEXT: - case FMT_SPECIAL: - case FMT_MARKUP: + case GO_FORMAT_DATE: + case GO_FORMAT_TEXT: + case GO_FORMAT_SPECIAL: + case GO_FORMAT_MARKUP: /* Nothing to remove for these formats ! */ return NULL; - case FMT_UNKNOWN: - case FMT_GENERAL: + case GO_FORMAT_UNKNOWN: + case GO_FORMAT_GENERAL: ; /* Nothing. */ } - /* Use the old code for more special formats to try to add a + /* Use the old code for more special formats to try to remove a decimal */ /* @@ -1276,61 +1403,75 @@ format_remove_decimal (GnmFormat const *fmt) * We need to look at the number of decimals in the current value * and use that as a base. */ - if (style_format_is_general (fmt)) + if (go_format_is_general (fmt)) format_string = "0.########"; - tmp = find_decimal_char (format_string); - if (!tmp) - return NULL; - + start = 0; ret = g_strdup (format_string); - p = ret + (tmp - format_string); + while (1) { + char *p = (char *)find_decimal_char (ret + start); + int offset; - /* If there is more than 1 thing after the decimal place - * leave the decimal. - * If there is only 1 thing after the decimal remove the decimal too. - */ - if ((p[1] == '0' || p[1] == '#') && (p[2] == '0' || p[2] == '#')) - ++p; - else - offset = 2; + if (!p) + break; - strcpy (p, p + offset); + /* If there is more than 1 thing after the decimal place + * leave the decimal. + * If there is only 1 thing after the decimal remove the decimal too. + */ + if ((p[1] == '0' || p[1] == '#') && (p[2] == '0' || p[2] == '#')) + offset = 1, ++p; + else + offset = 2; - sf = style_format_new_XL (ret, FALSE); - g_free (ret); - return sf; + strcpy (p, p + offset); + + start = (p + 1) - ret; + } + + if (start) { + GOFormat *gf = go_format_new_from_XL (ret, FALSE); + g_free (ret); + return gf; + } else { + g_free (ret); + return NULL; + } } +#endif -/* - * This routine scans format_string for the decimal - * character and when it finds it, it adds a zero after - * it to force the rendering of the number with one more digit - * of decimal precision. +#ifdef DEFINE_COMMON +/** + * go_format_inc_precision : + * @fmt : #GOFormat + * Scans @fmt for the decimal character and when it finds it, it adds a zero + * after it to force the rendering of the number with one more digit of decimal + * precision. * * Returns NULL if the new format would not change things - */ -GnmFormat * -format_add_decimal (GnmFormat const *fmt) + **/ +GOFormat * +go_format_inc_precision (GOFormat const *fmt) { char const *pre = NULL; char const *post = NULL; char *res; char const *format_string = fmt->format; - GnmFormat *sf; + GOFormat *gf; switch (fmt->family) { - case FMT_NUMBER: - case FMT_CURRENCY: - return reformat_decimals (&fmt->family_info, &style_format_number, +1); - case FMT_ACCOUNT: - return reformat_decimals (&fmt->family_info, &style_format_account, +1); - case FMT_PERCENT: - return reformat_decimals (&fmt->family_info, &style_format_percent, +1); - case FMT_SCIENCE: - return reformat_decimals (&fmt->family_info, &style_format_science, +1); - case FMT_FRACTION: { - FormatCharacteristics fc = fmt->family_info; + case GO_FORMAT_NUMBER: + case GO_FORMAT_CURRENCY: + return reformat_decimals (&fmt->family_info, &go_format_as_number, +1); + case GO_FORMAT_ACCOUNTING: + return reformat_decimals (&fmt->family_info, &go_format_as_account, +1); + case GO_FORMAT_PERCENTAGE: + return reformat_decimals (&fmt->family_info, &go_format_as_percentage, +1); + case GO_FORMAT_SCIENTIFIC: + return reformat_decimals (&fmt->family_info, &go_format_as_scientific, +1); + case GO_FORMAT_FRACTION: { + GOFormatDetails fc = fmt->family_info; + if (fc.fraction_denominator >= 2) { if (fc.fraction_denominator <= INT_MAX / 2 && ((fc.fraction_denominator & (fc.fraction_denominator - 1)) == 0)) @@ -1350,23 +1491,23 @@ format_add_decimal (GnmFormat const *fmt) return style_format_fraction (&fc); } - case FMT_TIME: + case GO_FORMAT_TIME: /* FIXME: we might have decimals on seconds part. */ - case FMT_DATE: - case FMT_TEXT: - case FMT_SPECIAL: - case FMT_MARKUP: + case GO_FORMAT_DATE: + case GO_FORMAT_TEXT: + case GO_FORMAT_SPECIAL: + case GO_FORMAT_MARKUP: /* Nothing to add for these formats ! */ return NULL; - case FMT_UNKNOWN: - case FMT_GENERAL: + case GO_FORMAT_UNKNOWN: + case GO_FORMAT_GENERAL: ; /* Nothing. */ } /* Use the old code for more special formats to try to add a decimal */ - if (style_format_is_general (fmt)) { + if (go_format_is_general (fmt)) { format_string = "0"; pre = format_string + 1; post = pre; @@ -1406,33 +1547,35 @@ format_add_decimal (GnmFormat const *fmt) res[pre-format_string + 1] = '0'; strcpy (res + (pre - format_string) + 2, post); - sf = style_format_new_XL (res, FALSE); + gf = go_format_new_from_XL (res, FALSE); g_free (res); - return sf; + return gf; } +#endif -GnmFormat * -format_toggle_thousands (GnmFormat const *fmt) +#ifdef DEFINE_COMMON +GOFormat * +go_format_toggle_1000sep (GOFormat const *fmt) { - FormatCharacteristics fc; + GOFormatDetails fc; fc = fmt->family_info; fc.thousands_sep = !fc.thousands_sep; switch (fmt->family) { - case FMT_NUMBER: - case FMT_CURRENCY: - return style_format_number (&fc); + case GO_FORMAT_NUMBER: + case GO_FORMAT_CURRENCY: + return go_format_as_number (&fc); - case FMT_ACCOUNT: + case GO_FORMAT_ACCOUNTING: /* * FIXME: this doesn't actually work as no 1000 seps * are used for accounting. */ - return style_format_account (&fc); - case FMT_GENERAL: + return go_format_as_account (&fc); + case GO_FORMAT_GENERAL: fc.currency_symbol_index = 0; - return style_format_number (&fc); + return go_format_as_number (&fc); default: break; @@ -1440,16 +1583,17 @@ format_toggle_thousands (GnmFormat const *fmt) return NULL; } +#endif /*********************************************************************/ -static void -format_number (GString *result, - gnm_float number, int col_width, StyleFormatEntry const *entry, - GnmDateConventions const *date_conv) +void +SUFFIX(go_format_number) (GString *result, + DOUBLE number, int col_width, GOFormatElement const *entry, + GODateConventions const *date_conv) { - guchar const *format = (guchar *)(entry->format); - format_info_t info; + gchar const *format = entry->format; + GONumberFormat info; gboolean can_render_number = FALSE; gboolean hour_seen = FALSE; gboolean time_display_elapsed = FALSE; @@ -1460,7 +1604,7 @@ format_number (GString *result, gboolean need_time_split = TRUE; struct tm tm; - gnm_float signed_number; + DOUBLE signed_number; memset (&info, 0, sizeof (info)); signed_number = number; @@ -1474,7 +1618,7 @@ format_number (GString *result, while (*format) { /* This is just g_utf8_get_char, but we're in a hurry. */ - gunichar c = (*format & 0x80) ? g_utf8_get_char (format) : *format; + gunichar c = (*format & 0x80) ? g_utf8_get_char (format) : *(guchar *)format; switch (c) { @@ -1524,7 +1668,11 @@ format_number (GString *result, int c = *(format + 1); can_render_number = TRUE; - if (c && (c != '0' && c != '#' && c != '?')) + if (0 && c && (c != '0' && c != '#' && c != '?')) + /* + * Before reinstating this, look at format + * "#,##0.\\-" with value 255. + */ number /= 1000; else info.decimal_separator_seen = TRUE; @@ -1533,17 +1681,17 @@ format_number (GString *result, case ',': if (can_render_number) { - guchar const *tmp = format; + gchar const *tmp = format; while (*++tmp == ',') ; if (*tmp == '\0' || *tmp == '.' || *tmp == ';') /* NOTE : format-tmp is NEGATIVE */ - info.scale = gpow10 (3*(format-tmp)); + info.scale = SUFFIX(go_pow10) (3*(format-tmp)); info.group_thousands = TRUE; format = tmp; continue; } else - gnm_string_append_gstring (result, format_get_thousand ()); + go_string_append_gstring (result, format_get_thousand ()); break; /* FIXME: this is a gross hack */ @@ -1567,7 +1715,7 @@ format_number (GString *result, format++; g_string_append_printf (result, - is_lower ? "%.*" GNUM_FORMAT_e : "%.*" GNUM_FORMAT_E, + is_lower ? "%.*" FORMAT_e : "%.*" FORMAT_E, prec, number); return; } @@ -1575,18 +1723,18 @@ format_number (GString *result, case '\\': if (format[1] != '\0') { if (can_render_number && !info.rendered) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); format++; g_string_append_len (result, format, - g_utf8_skip[*(format)]); + g_utf8_skip[*(guchar *)format]); } break; case '"': { - guchar const *tmp = ++format; + gchar const *tmp = ++format; if (can_render_number && !info.rendered) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); for (; *tmp && *tmp != '"'; tmp++) ; @@ -1611,9 +1759,9 @@ format_number (GString *result, errno = 0; denominator = strtol ((char *)format + 1, &end, 10); - if ((char *)format + 1 != end && errno != ERANGE) { - size = (const guchar *)end - (format + 1); - format = (guchar *)end; + if (format + 1 != end && errno != ERANGE) { + size = end - (format + 1); + format = end; numerator = (int)((number - (int)number) * denominator + 0.5); } } else { @@ -1625,22 +1773,24 @@ format_number (GString *result, format += size + 1; if (size > (int)G_N_ELEMENTS (powers)) size = G_N_ELEMENTS (powers); - continued_fraction (number - (int)number, powers[size - 1], - &numerator, &denominator); + go_continued_fraction (number - (int)number, powers[size - 1], + &numerator, &denominator); } if (denominator > 0) { + gboolean show_zero = TRUE; /* improper fractions */ if (!info.rendered) { info.rendered = TRUE; numerator += ((int)number) * denominator; - } + } else + show_zero = (number == 0); /* * FIXME: the space-aligning here doesn't come out * right except in mono-space fonts. */ - if (numerator > 0) { + if (numerator > 0 || show_zero) { g_string_append_printf (result, "%*d/%-*d", info.left_spaces, numerator, @@ -1666,7 +1816,7 @@ format_number (GString *result, case 0x20AC : /* Euro */ case ')': if (can_render_number && !info.rendered) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); g_string_append_unichar (result, c); break; @@ -1675,7 +1825,7 @@ format_number (GString *result, if (!info.rendered) { number *= 100; if (can_render_number) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); else can_render_number = TRUE; } @@ -1684,7 +1834,7 @@ format_number (GString *result, case '_': if (can_render_number && !info.rendered) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); if (format[1]) format++; g_string_append_c (result, ' '); @@ -1700,7 +1850,7 @@ format_number (GString *result, */ if (format[1]) { if (can_render_number && !info.rendered) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); ++format; fill_char = g_utf8_get_char (format); fill_start = result->len; @@ -1722,12 +1872,12 @@ format_number (GString *result, if (time_display_elapsed) { need_time_split = time_display_elapsed = FALSE; ignore_further_elapsed = TRUE; - append_minute_elapsed (result, &tm, number); + SUFFIX(append_minute_elapsed) (result, &tm, number); break; } if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); if (hour_seen || (format[1] == ':' && (format[2] == 's' || format[2] == 'S'))) { @@ -1740,14 +1890,14 @@ format_number (GString *result, case 'D': case 'd': if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); format += append_day (result, format, &tm) - 1; break; case 'Y': case 'y': if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); format += append_year (result, format, &tm) - 1; break; @@ -1762,11 +1912,29 @@ format_number (GString *result, if (time_display_elapsed) { need_time_split = time_display_elapsed = FALSE; ignore_further_elapsed = TRUE; - append_second_elapsed (result, number); + SUFFIX(append_second_elapsed) (result, number); } else { if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); append_second (result, n, &tm); + + if (format[1] == '.') { + /* HACK for fractional seconds. */ + DOUBLE days, secs; + int decs = 0; + int old_len = result->len; + format++; + while (format[1] == '0') + decs++, format++; + + secs = SUFFIX(modf) (SUFFIX(fabs) (number), &days); + secs = SUFFIX(modf) (secs * (24 * 60 * 60), &days); + + if (decs > 0) + g_string_append_printf (result, "%.*" FORMAT_f, decs, secs); + /* Remove the "0" or "1" before the dot. */ + g_string_erase (result, old_len, 1); + } } break; } @@ -1782,7 +1950,7 @@ format_number (GString *result, if (time_display_elapsed) { need_time_split = time_display_elapsed = FALSE; ignore_further_elapsed = TRUE; - append_hour_elapsed (result, &tm, number); + SUFFIX(append_hour_elapsed) (result, &tm, number); } else { /* h == hour optionally in 24 hour mode * h followed by am/pm puts it in 12 hour mode @@ -1791,7 +1959,7 @@ format_number (GString *result, * NOTE : This is a non-XL extension */ if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); append_hour (result, n, &tm, entry->want_am_pm); } @@ -1802,7 +1970,7 @@ format_number (GString *result, case 'A': case 'a': if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); if (tm.tm_hour < 12){ g_string_append_c (result, *format); format++; @@ -1821,7 +1989,7 @@ format_number (GString *result, case 'P': case 'p': if (need_time_split) - need_time_split = split_time (&tm, signed_number, date_conv); + need_time_split = SUFFIX(split_time) (&tm, signed_number, date_conv); if (tm.tm_hour >= 12){ g_string_append_c (result, *format); if (*(format + 1) == 'm' || *(format + 1) == 'M'){ @@ -1844,7 +2012,7 @@ format_number (GString *result, } if (!info.rendered && can_render_number) - do_render_number (number, &info, result); + SUFFIX(do_render_number) (number, &info, result); /* This is kinda ugly. It does not handle variable width fonts */ if (fill_char != '\0') { @@ -1854,61 +2022,20 @@ format_number (GString *result, } } -static gboolean -style_format_condition (StyleFormatEntry const *entry, GnmValue const *value) -{ - if (entry->restriction_type == '*') - return TRUE; - - switch (value->type) { - case VALUE_BOOLEAN: - case VALUE_STRING: - return entry->restriction_type == '@'; - - case VALUE_FLOAT: - switch (entry->restriction_type) { - case '<': return value->v_float.val < entry->restriction_value; - case '>': return value->v_float.val > entry->restriction_value; - case '=': return value->v_float.val == entry->restriction_value; - case ',': return value->v_float.val <= entry->restriction_value; - case '.': return value->v_float.val >= entry->restriction_value; - case '+': return value->v_float.val != entry->restriction_value; - default: - return FALSE; - } - - case VALUE_INTEGER: - switch (entry->restriction_type) { - case '<': return value->v_int.val < entry->restriction_value; - case '>': return value->v_int.val > entry->restriction_value; - case '=': return value->v_int.val == entry->restriction_value; - case ',': return value->v_int.val <= entry->restriction_value; - case '.': return value->v_int.val >= entry->restriction_value; - case '+': return value->v_int.val != entry->restriction_value; - default: - return FALSE; - } - - case VALUE_ERROR: - default: - return FALSE; - } -} - /** - * fmt_general_float: + * go_fmt_general_float: * * @val : the integer value being formated. * @col_width : the approximate width in characters. - */ -static void -fmt_general_float (GString *result, gnm_float val, double col_width) + **/ +void +SUFFIX(go_fmt_general_float) (GString *result, DOUBLE val, double col_width) { - gnm_float tmp; + DOUBLE tmp; int log_val, prec; if (col_width < 0.) { - g_string_append_printf (result, "%.*" GNUM_FORMAT_g, GNUM_DIG, val); + g_string_append_printf (result, "%.*" FORMAT_G, PREFIX(DIG), val); return; } @@ -1916,9 +2043,9 @@ fmt_general_float (GString *result, gnm_float val, double col_width) /* leave space for minus sign */ /* FIXME : idealy we would use the width of a minus sign */ col_width -= 1.; - tmp = log10gnum (-val); + tmp = SUFFIX(log10) (-val); } else - tmp = (val > 0.) ? log10gnum (val) : 0; + tmp = (val > 0.) ? SUFFIX(log10) (val) : 0; /* leave space for the decimal */ /* FIXME : idealy we would use the width of a decimal point */ @@ -1927,14 +2054,14 @@ fmt_general_float (GString *result, gnm_float val, double col_width) prec = 0; if (tmp > 0.) { - log_val = ceilgnum (tmp); + log_val = SUFFIX(ceil) (tmp); /* Decrease precision to leave space for the E+00 */ if (log_val > prec) for (prec -= 4; log_val >= 100 ; log_val /= 10) prec--; } else { - log_val = floorgnum (tmp); + log_val = SUFFIX(floor) (tmp); /* Display 0 for cols that are too narrow for scientific * notation with abs (value) < 1 */ @@ -1954,21 +2081,21 @@ fmt_general_float (GString *result, gnm_float val, double col_width) if (prec < 1) prec = 1; - else if (prec > GNUM_DIG) - prec = GNUM_DIG; + else if (prec > PREFIX(DIG)) + prec = PREFIX(DIG); - /* FIXME : glib bug. it does not handle G, use g (fixed in 1.2.9) */ - g_string_append_printf (result, "%.*" GNUM_FORMAT_g, prec, val); + g_string_append_printf (result, "%.*" FORMAT_G, prec, val); } +#ifdef DEFINE_COMMON /** - * fmt_general_int : + * go_fmt_general_int : * * @val : the integer value being formated. * @col_width : the approximate width in characters. */ -static void -fmt_general_int (GString *result, int val, int col_width) +void +go_fmt_general_int (GString *result, int val, int col_width) { if (col_width > 0) { int log_val; @@ -1982,9 +2109,8 @@ fmt_general_int (GString *result, int val, int col_width) /* Switch to scientific notation if things are too wide */ if (log_val > col_width) { - /* FIXME : glib bug. it does not handle G, use g */ /* Decrease available width by 5 to account for .+E00 */ - g_string_append_printf (result, "%.*g", col_width - 5, (double)val); + g_string_append_printf (result, "%.*G", col_width - 5, (double)val); return; } } @@ -1992,156 +2118,38 @@ fmt_general_int (GString *result, int val, int col_width) /* FIXME: we can do better than this. */ g_string_append_printf (result, "%d", val); } - -/* - * Returns NULL when the value should be formated as text - */ -void -format_value_gstring (GString *result, GnmFormat const *format, - GnmValue const *value, GnmColor **color, - double col_width, GnmDateConventions const *date_conv) -{ - StyleFormatEntry const *entry = NULL; /* default to General */ - GSList *list; - gboolean need_abs = FALSE; - - if (color) - *color = NULL; - - g_return_if_fail (value != NULL); - - if (format == NULL) - format = VALUE_FMT (value); - - /* Use top left corner of an array result. - * This wont work for ranges because we dont't have a location - */ - if (value->type == VALUE_ARRAY) - value = value_area_fetch_x_y (value, 0, 0, NULL); - - if (format) { - for (list = format->entries; list; list = list->next) - if (style_format_condition (list->data, value)) - break; - - if (list == NULL && - (value->type == VALUE_INTEGER || value->type == VALUE_FLOAT)) - list = format->entries; - - /* If nothing matches treat it as General */ - if (list != NULL) { - entry = list->data; - - /* Empty formats should be ignored */ - if (entry->format[0] == '\0') - return; - - if (color && entry->color != NULL) - *color = style_color_ref (entry->color); - - if (strcmp (entry->format, "@") == 0) { - /* FIXME : Formatting a value as a text returns - * the entered text. We need access to the - * parse format */ - entry = NULL; - - /* FIXME : Just containing General is enough to be - * general for now. We'll ignore prefixes and suffixes - * for the time being */ - } else if (strstr (entry->format, "General") != NULL) - entry = NULL; - } - - /* More than one format? -- abs the value. */ - need_abs = entry && format->entries->next; - } - - switch (value->type) { - case VALUE_EMPTY: - return; - case VALUE_BOOLEAN: - g_string_append (result, format_boolean (value->v_bool.val)); - return; - case VALUE_INTEGER: { - int val = value->v_int.val; - if (need_abs) - val = ABS (val); - - if (entry == NULL) - fmt_general_int (result, val, col_width); - else - format_number (result, val, (int)col_width, entry, date_conv); - return; - } - case VALUE_FLOAT: { - gnm_float val = value->v_float.val; - - if (!finitegnum (val)) { - g_string_append (result, value_error_name (GNM_ERROR_VALUE, TRUE)); - return; - } - - if (need_abs) - val = gnumabs (val); - - if (entry == NULL) { - if (INT_MAX >= val && val >= INT_MIN && val == floorgnum (val)) - fmt_general_int (result, (int)val, col_width); - else - fmt_general_float (result, val, col_width); - } else - format_number (result, val, (int)col_width, entry, date_conv); - return; - } - case VALUE_ERROR: - g_string_append (result, value->v_err.mesg->str); - return; - case VALUE_STRING: - g_string_append (result, value->v_str.val->str); - return; - case VALUE_CELLRANGE: - g_string_append (result, value_error_name (GNM_ERROR_VALUE, TRUE)); - return; - case VALUE_ARRAY: /* Array of arrays ?? */ - g_string_append (result, _("ARRAY")); - return; - - default: - g_assert_not_reached (); - return; - } -} - -gchar * -format_value (GnmFormat const *format, GnmValue const *value, GnmColor **color, - double col_width, GnmDateConventions const *date_conv) -{ - GString *result = g_string_sized_new (20); - format_value_gstring (result, format, value, color, col_width, date_conv); - return g_string_free (result, FALSE); -} +#endif +#ifdef DEFINE_COMMON void number_format_init (void) { style_format_hash = g_hash_table_new (g_str_hash, g_str_equal); - beyond_precision = gpow10 (GNUM_DIG + 1); + + beyond_precision = go_pow10 (DBL_DIG) + 1; +#ifdef GOFFICE_WITH_LONG_DOUBLE + beyond_precisionl = go_pow10l (LDBL_DIG) + 1; +#endif lc_decimal = g_string_new (NULL); lc_thousand = g_string_new (NULL); lc_currency = g_string_new (NULL); } +#endif +#ifdef DEFINE_COMMON static void cb_format_leak (gpointer key, gpointer value, gpointer user_data) { - GnmFormat *format = value; + GOFormat *format = value; - fprintf (stderr, "Leaking gnm-format at %p [%s].\n", + fprintf (stderr, "Leaking GOFormat at %p [%s].\n", format, format->format); } +#endif +#ifdef DEFINE_COMMON void number_format_shutdown (void) { @@ -2155,32 +2163,32 @@ number_format_shutdown (void) lc_currency = NULL; if (default_percentage_fmt) { - style_format_unref (default_percentage_fmt); + go_format_unref (default_percentage_fmt); default_percentage_fmt = NULL; } if (default_money_fmt) { - style_format_unref (default_money_fmt); + go_format_unref (default_money_fmt); default_money_fmt = NULL; } if (default_date_fmt) { - style_format_unref (default_date_fmt); + go_format_unref (default_date_fmt); default_date_fmt = NULL; } if (default_time_fmt) { - style_format_unref (default_time_fmt); + go_format_unref (default_time_fmt); default_time_fmt = NULL; } if (default_date_time_fmt) { - style_format_unref (default_date_time_fmt); + go_format_unref (default_date_time_fmt); default_date_time_fmt = NULL; } if (default_general_fmt) { - style_format_unref (default_general_fmt); + go_format_unref (default_general_fmt); default_general_fmt = NULL; } @@ -2188,14 +2196,16 @@ number_format_shutdown (void) g_hash_table_destroy (style_format_hash); style_format_hash = NULL; } +#endif /****************************************************************************/ +#ifdef DEFINE_COMMON static char * translate_format_color (GString *res, char const *ptr, gboolean translate_to_en) { char *end; - struct FormatColor const *color; + FormatColor const *color; g_string_append_c (res, '['); @@ -2220,9 +2230,11 @@ translate_format_color (GString *res, char const *ptr, gboolean translate_to_en) } return NULL; } +#endif +#ifdef DEFINE_COMMON char * -style_format_delocalize (char const *descriptor_string) +go_format_str_delocalize (char const *descriptor_string) { g_return_val_if_fail (descriptor_string != NULL, NULL); @@ -2267,12 +2279,17 @@ style_format_delocalize (char const *descriptor_string) } else return g_strdup ("General"); } +#endif +#ifdef DEFINE_COMMON static gboolean cb_attrs_as_string (PangoAttribute *a, GString *accum) { PangoColor const *c; + if (a->start_index >= a->end_index) + return FALSE; + switch (a->klass->type) { case PANGO_ATTR_FAMILY : g_string_append_printf (accum, "[family=%s", @@ -2318,12 +2335,14 @@ cb_attrs_as_string (PangoAttribute *a, GString *accum) default : return FALSE; /* ignored */ } - g_string_append_printf (accum, ":%d:%d]", a->start_index, a->end_index); + g_string_append_printf (accum, ":%u:%u]", a->start_index, a->end_index); return FALSE; } +#endif +#ifdef DEFINE_COMMON static PangoAttrList * -gnm_format_parse_markup (char *str) +go_format_parse_markup (char *str) { PangoAttrList *attrs; PangoAttribute *a; @@ -2352,32 +2371,51 @@ gnm_format_parse_markup (char *str) *closer = '\0'; a = NULL; - if (len == 4) { + switch (len) { + case 4: if (0 == strncmp (str, "size", 4)) a = pango_attr_size_new (atoi (val)); else if (0 == strncmp (str, "bold", 4)) a = pango_attr_weight_new (atoi (val) ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL); - } else if (len == 5 && 0 == strncmp (str, "color", 5) && - 3 == sscanf (val, "%02xx%02xx%02x", &r, &g, &b)) - a = pango_attr_foreground_new ((r << 8) | r, (g << 8) | g, (b << 8) | b); - else if (len == 6) { + break; + + case 5: + if (0 == strncmp (str, "color", 5) && + 3 == sscanf (val, "%02xx%02xx%02x", &r, &g, &b)) + a = pango_attr_foreground_new ((r << 8) | r, (g << 8) | g, (b << 8) | b); + break; + + case 6: if (0 == strncmp (str, "family", 6)) a = pango_attr_family_new (val); else if (0 == strncmp (str, "italic", 6)) a = pango_attr_style_new (atoi (val) ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); - } else if (len == 9 && 0 == strncmp (str, "underline", 9)) { - if (0 == strcmp (val, "none")) - a = pango_attr_underline_new (PANGO_UNDERLINE_NONE); - else if (0 == strcmp (val, "single")) - a = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); - else if (0 == strcmp (val, "double")) - a = pango_attr_underline_new (PANGO_UNDERLINE_DOUBLE); - } else if (len == 13 && 0 == strncmp (str, "strikethrough", 13)) - a = pango_attr_strikethrough_new (atoi (val) != 0); + break; - if (a != NULL && val_end != NULL && - 2 == sscanf (val_end+1, "%d:%d]", &a->start_index, &a->end_index)) - pango_attr_list_insert (attrs, a); + case 9: + if (0 == strncmp (str, "underline", 9)) { + if (0 == strcmp (val, "none")) + a = pango_attr_underline_new (PANGO_UNDERLINE_NONE); + else if (0 == strcmp (val, "single")) + a = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE); + else if (0 == strcmp (val, "double")) + a = pango_attr_underline_new (PANGO_UNDERLINE_DOUBLE); + } + break; + + case 13: + if (0 == strncmp (str, "strikethrough", 13)) + a = pango_attr_strikethrough_new (atoi (val) != 0); + break; + } + + if (a != NULL && val_end != NULL) { + if (sscanf (val_end+1, "%u:%u]", &a->start_index, &a->end_index) == 2 && + a->start_index < a->end_index) + pango_attr_list_insert (attrs, a); + else + pango_attribute_destroy (a); + } *val_end = ':'; *closer = ']'; @@ -2385,19 +2423,21 @@ gnm_format_parse_markup (char *str) return attrs; } +#endif +#ifdef DEFINE_COMMON /** - * style_format_new_XL : + * go_format_new_from_XL : * - * Looks up and potentially creates a GnmFormat from the supplied string in + * Looks up and potentially creates a GOFormat from the supplied string in * XL format. * * @descriptor_string: XL descriptor in UTF-8 encoding. - */ -GnmFormat * -style_format_new_XL (char const *descriptor_string, gboolean delocalize) + **/ +GOFormat * +go_format_new_from_XL (char const *descriptor_string, gboolean delocalize) { - GnmFormat *format; + GOFormat *format; char *desc_copy = NULL; /* Safety net */ @@ -2405,21 +2445,22 @@ style_format_new_XL (char const *descriptor_string, gboolean delocalize) g_warning ("Invalid format descriptor string, using General"); descriptor_string = "General"; } else if (delocalize) - descriptor_string = desc_copy = style_format_delocalize (descriptor_string); + descriptor_string = desc_copy = go_format_str_delocalize (descriptor_string); - format = (GnmFormat *) g_hash_table_lookup (style_format_hash, descriptor_string); + format = (GOFormat *) g_hash_table_lookup (style_format_hash, descriptor_string); if (!format) { - format = g_new0 (GnmFormat, 1); + format = g_new0 (GOFormat, 1); format->format = g_strdup (descriptor_string); format->entries = NULL; - format->regexp_str = NULL; - format->match_tags = NULL; - format->family = cell_format_classify (format, &format->family_info); - if (format->family == FMT_MARKUP) - format->markup = gnm_format_parse_markup (format->format); - else if (!style_format_is_general (format)) + format->family = go_format_classify (format, &format->family_info); + format->is_var_width = FALSE; + if (format->family == GO_FORMAT_MARKUP) + format->markup = go_format_parse_markup (format->format); + else if (!go_format_is_general (format)) format_compile (format); + else + format->is_var_width = TRUE; g_hash_table_insert (style_format_hash, format->format, format); } @@ -2432,19 +2473,21 @@ style_format_new_XL (char const *descriptor_string, gboolean delocalize) g_free (desc_copy); return format; } +#endif +#ifdef DEFINE_COMMON /** - * style_format_new_markup : + * go_format_new_markup : * @markup : #PangoAttrList * @add_ref : * * Create a MARKUP format. If @add_ref is FALSE absorb the reference to * @markup, otherwise add a reference. */ -GnmFormat * -style_format_new_markup (PangoAttrList *markup, gboolean add_ref) +GOFormat * +go_format_new_markup (PangoAttrList *markup, gboolean add_ref) { - GnmFormat *format = g_new0 (GnmFormat, 1); + GOFormat *format = g_new0 (GOFormat, 1); GString *accum = g_string_new ("@"); pango_attr_list_filter (markup, @@ -2452,9 +2495,7 @@ style_format_new_markup (PangoAttrList *markup, gboolean add_ref) format->format = g_string_free (accum, FALSE); format->entries = NULL; - format->regexp_str = NULL; - format->match_tags = NULL; - format->family = FMT_MARKUP; + format->family = GO_FORMAT_MARKUP; format->markup = markup; if (add_ref) pango_attr_list_ref (markup); @@ -2469,50 +2510,54 @@ style_format_new_markup (PangoAttrList *markup, gboolean add_ref) return format; } +#endif -GnmFormat * -style_format_build (FormatFamily family, const FormatCharacteristics *info) +#ifdef DEFINE_COMMON +GOFormat * +go_format_new (GOFormatFamily family, GOFormatDetails const *info) { switch (family) { - case FMT_GENERAL: - case FMT_TEXT: - return style_format_new_XL (cell_formats[family][0], FALSE); + case GO_FORMAT_GENERAL: + case GO_FORMAT_TEXT: + return go_format_new_from_XL (go_format_builtins[family][0], FALSE); - case FMT_NUMBER: { + case GO_FORMAT_NUMBER: { /* Make sure no currency is selected */ - FormatCharacteristics info_copy = *info; + GOFormatDetails info_copy = *info; info_copy.currency_symbol_index = 0; - return style_format_number (&info_copy); + return go_format_as_number (&info_copy); } - case FMT_CURRENCY: - return style_format_number (info); + case GO_FORMAT_CURRENCY: + return go_format_as_number (info); - case FMT_ACCOUNT: - return style_format_account (info); + case GO_FORMAT_ACCOUNTING: + return go_format_as_account (info); - case FMT_PERCENT: - return style_format_percent (info); + case GO_FORMAT_PERCENTAGE: + return go_format_as_percentage (info); - case FMT_SCIENCE: - return style_format_science (info); + case GO_FORMAT_SCIENTIFIC: + return go_format_as_scientific (info); default: - case FMT_DATE: - case FMT_TIME: + case GO_FORMAT_DATE: + case GO_FORMAT_TIME: return NULL; }; } +#endif +#ifdef DEFINE_COMMON /** - * style_format_str_as_XL + * go_format_str_as_XL * * The caller is responsible for freeing the resulting string. */ char * -style_format_str_as_XL (char const *ptr, gboolean localized) +go_format_str_as_XL (char const *ptr, gboolean localized) { GString const *thousands_sep, *decimal; GString *res; @@ -2547,10 +2592,10 @@ style_format_str_as_XL (char const *ptr, gboolean localized) for ( ; *ptr ; ++ptr) switch (*ptr) { case '.': - gnm_string_append_gstring (res, decimal); + go_string_append_gstring (res, decimal); break; case ',': - gnm_string_append_gstring (res, thousands_sep); + go_string_append_gstring (res, thousands_sep); break; case '\"': @@ -2585,139 +2630,153 @@ style_format_str_as_XL (char const *ptr, gboolean localized) return g_string_free (res, FALSE); } +#endif +#ifdef DEFINE_COMMON /** - * style_format_as_XL : - * @sf : + * go_format_as_XL : + * @gf : * @localized : should the string be in cannonical or locale specific form. * * Return a string which the caller is responsible for freeing. */ char * -style_format_as_XL (GnmFormat const *fmt, gboolean localized) +go_format_as_XL (GOFormat const *fmt, gboolean localized) { g_return_val_if_fail (fmt != NULL, g_strdup (localized ? _("General") : "General")); - return style_format_str_as_XL (fmt->format, localized); + return go_format_str_as_XL (fmt->format, localized); } +#endif +#ifdef DEFINE_COMMON gboolean -style_format_equal (GnmFormat const *a, GnmFormat const *b) +go_format_eq (GOFormat const *a, GOFormat const *b) { - g_return_val_if_fail (a != NULL, FALSE); - g_return_val_if_fail (b != NULL, FALSE); - /* - * The way we create GnmFormat *s ensures that we don't need + * The way we create GOFormat *s ensures that we don't need * to compare anything but pointers. */ return (a == b); } +#endif +#ifdef DEFINE_COMMON /** - * style_format_ref : - * @sf : + * go_format_ref : + * @gf : * - * Add a reference to a GnmFormat - */ -void -style_format_ref (GnmFormat *sf) + * Add a reference to a GOFormat + **/ +GOFormat * +go_format_ref (GOFormat *gf) { - g_return_if_fail (sf != NULL); + g_return_val_if_fail (gf != NULL, NULL); - sf->ref_count++; + gf->ref_count++; #ifdef DEBUG_REF_COUNT g_message (__FUNCTION__ " format=%p '%s' ref_count=%d", - sf, sf->format, sf->ref_count); + gf, gf->format, gf->ref_count); #endif -} + return gf; +} +#endif + +#ifdef DEFINE_COMMON /** - * style_format_unref : - * @sf : + * go_format_unref : + * @gf : * - * Remove a reference to a GnmFormat, freeing when it goes to zero. - */ + * Remove a reference to a GOFormat, freeing when it goes to zero. + **/ void -style_format_unref (GnmFormat *sf) +go_format_unref (GOFormat *gf) { - if (sf == NULL) + if (gf == NULL) return; - g_return_if_fail (sf->ref_count > 0); + g_return_if_fail (gf->ref_count > 0); - sf->ref_count--; + gf->ref_count--; #ifdef DEBUG_REF_COUNT g_message (__FUNCTION__ " format=%p '%s' ref_count=%d", - sf, sf->format, sf->ref_count); + gf, gf->format, gf->ref_count); #endif - if (sf->ref_count != 0) + if (gf->ref_count != 0) return; - g_hash_table_remove (style_format_hash, sf->format); + g_hash_table_remove (style_format_hash, gf->format); - format_destroy (sf); - g_free (sf->format); - g_free (sf); + format_destroy (gf); + g_free (gf->format); + g_free (gf); } +#endif -GnmFormat * -style_format_general (void) +#ifdef DEFINE_COMMON +GOFormat * +go_format_general (void) { if (!default_general_fmt) - default_general_fmt = - style_format_new_XL (cell_formats[FMT_GENERAL][0], FALSE); - + default_general_fmt = go_format_new_from_XL ( + go_format_builtins[GO_FORMAT_GENERAL][0], FALSE); return default_general_fmt; } +#endif -GnmFormat * -style_format_default_date (void) +#ifdef DEFINE_COMMON +GOFormat * +go_format_default_date (void) { if (!default_date_fmt) - default_date_fmt = - style_format_new_XL (cell_formats[FMT_DATE][0], FALSE); - + default_date_fmt = go_format_new_from_XL ( + go_format_builtins[GO_FORMAT_DATE][0], FALSE); return default_date_fmt; } +#endif -GnmFormat * -style_format_default_time (void) +#ifdef DEFINE_COMMON +GOFormat * +go_format_default_time (void) { if (!default_time_fmt) - default_time_fmt = - style_format_new_XL (cell_formats[FMT_TIME][0], FALSE); - + default_time_fmt = go_format_new_from_XL ( + go_format_builtins[GO_FORMAT_TIME][0], FALSE); return default_time_fmt; } +#endif -GnmFormat * -style_format_default_date_time (void) +#ifdef DEFINE_COMMON +GOFormat * +go_format_default_date_time (void) { if (!default_date_time_fmt) - default_date_time_fmt = - style_format_new_XL (cell_formats[FMT_TIME][4], FALSE); - + default_date_time_fmt = go_format_new_from_XL ( + go_format_builtins[GO_FORMAT_TIME][4], FALSE); return default_date_time_fmt; } +#endif -GnmFormat * -style_format_default_percentage (void) +#ifdef DEFINE_COMMON +GOFormat * +go_format_default_percentage (void) { if (!default_percentage_fmt) - default_percentage_fmt = - style_format_new_XL (cell_formats[FMT_PERCENT][1], FALSE); - + default_percentage_fmt = go_format_new_from_XL ( + go_format_builtins[GO_FORMAT_PERCENTAGE][1], FALSE); return default_percentage_fmt; } +#endif -GnmFormat * -style_format_default_money (void) +#ifdef DEFINE_COMMON +GOFormat * +go_format_default_money (void) { if (!default_money_fmt) - default_money_fmt = - style_format_new_XL (cell_formats[FMT_CURRENCY][2], FALSE); - + default_money_fmt = go_format_new_from_XL ( + go_format_builtins[GO_FORMAT_CURRENCY][2], FALSE); return default_money_fmt; } +#endif diff --git a/lib/goffice/split/formats.c b/lib/goffice-0.0.4/goffice/utils/formats.c similarity index 81% rename from lib/goffice/split/formats.c rename to lib/goffice-0.0.4/goffice/utils/formats.c index 43bc78a8eb..160d1efcde 100644 --- a/lib/goffice/split/formats.c +++ b/lib/goffice-0.0.4/goffice/utils/formats.c @@ -8,22 +8,21 @@ * Author: * Miguel de Icaza (miguel@kernel.org) */ -#include +#include +#include "go-format.h" +#include #include -#include "gnumeric.h" - -#include "format.h" #include /* The various formats */ static char const * const -cell_format_general [] = { +fmts_general [] = { "General", NULL }; static char const * const -cell_format_numbers [] = { +fmts_number [] = { "0", "0.00", "#,##0", @@ -38,7 +37,7 @@ cell_format_numbers [] = { /* Some are generated */ static char const * -cell_format_currency [] = { +fmts_currency [] = { NULL, /* "$#,##0", */ NULL, /* "$#,##0_);($#,##0)", */ NULL, /* "$#,##0_);[Red]($#,##0)", */ @@ -50,7 +49,7 @@ cell_format_currency [] = { /* Some are generated */ static char const * -cell_format_account [] = { +fmts_accounting [] = { NULL, /* "_($* #,##0_);_($* (#,##0);_($* \"-\"_);_(@_)", */ "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)", NULL, /* "_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)", */ @@ -63,7 +62,7 @@ cell_format_account [] = { /* WARNING WARNING WARNING : do not reorder these !! */ /* the generated versions and the excel plugin assume this order */ static char const * -cell_format_date [] = { +fmts_date [] = { "m/d/yy", /* 0 */ "m/d/yyyy", /* 1 */ "d-mmm-yy", /* 2 */ @@ -105,7 +104,7 @@ cell_format_date [] = { /* Some are generated */ static char const * -cell_format_time [] = { +fmts_time [] = { "h:mm AM/PM", "h:mm:ss AM/PM", "h:mm", @@ -121,14 +120,14 @@ cell_format_time [] = { }; static char const * const -cell_format_percent [] = { +fmts_percentage [] = { "0%", "0.00%", NULL, }; static char const * const -cell_format_fraction [] = { +fmts_fraction [] = { "# ?/?", "# ?" "?/?" "?", /* Don't accidentally use trigraph. */ "# ?" "?" "?/?" "?" "?", @@ -142,43 +141,43 @@ cell_format_fraction [] = { }; static char const * const -cell_format_science [] = { +fmts_science [] = { "0.00E+00", "##0.0E+0", NULL }; static char const * -cell_format_text [] = { +fmts_text [] = { "@", NULL, }; char const * const * const -cell_formats [] = { - cell_format_general, - cell_format_numbers, - cell_format_currency, - cell_format_account, - cell_format_date, - cell_format_time, - cell_format_percent, - cell_format_fraction, - cell_format_science, - cell_format_text, +go_format_builtins [] = { + fmts_general, + fmts_number, + fmts_currency, + fmts_accounting, + fmts_date, + fmts_time, + fmts_percentage, + fmts_fraction, + fmts_science, + fmts_text, NULL }; -/* The compiled regexp for cell_format_classify */ -static go_regex_t re_simple_number; -static go_regex_t re_red_number; -static go_regex_t re_brackets_number; -static go_regex_t re_percent_science; -static go_regex_t re_account; -static go_regex_t re_fraction; +/* The compiled regexp for go_format_classify */ +static GORegexp re_simple_number; +static GORegexp re_red_number; +static GORegexp re_brackets_number; +static GORegexp re_percent_science; +static GORegexp re_account; +static GORegexp re_fraction; static const char * -my_regerror (int err, const go_regex_t *preg) +my_regerror (int err, const GORegexp *preg) { static char buffer[1024]; go_regerror (err, preg, buffer, sizeof (buffer)); @@ -204,12 +203,12 @@ currency_date_format_init (void) /* This one is for matching formats like 0.00_);(0.00) */ char const * const brackets_number_pattern = "^(.*)_\\);(\\[[Rr][Ee][Dd]\\])?\\(\\1\\)$"; - /* This one is for FMT_PERCENT and FMT_SCIENCE, extended regexp */ + /* This one is for GO_FORMAT_PERCENTAGE and GO_FORMAT_SCIENTIFIC, extended regexp */ char const *pattern_percent_science = "^0(.0{1,30})?(%|E+00)$"; char const *pattern_fraction = "^#\\\\? (\\?+)/(\\?+|[1-9]\\d*)$"; - /* This one is for FMT_ACCOUNT */ + /* This one is for GO_FORMAT_ACCOUNTING */ /* * 1. "$* " Yes, it is needed (because we use match[]) @@ -222,7 +221,7 @@ currency_date_format_init (void) * 8. "$" */ - char const *pattern_account = "^_\\((((.*)\\* ?)?)(#,##0(\\.0{1,30})?)((\\* ?}(.*))?)_\\);_\\(\\1\\(\\4\\)\\6;_\\(\\1\"-\"\\?{0,30}\\6_\\);_\\(@_\\)$"; + char const *pattern_account = "^_\\((((.*)\\* ?)?)(#,##0(\\.0{1,30})?)((\\* ?(.*))?)_\\);_\\(\\1\\(\\4\\)\\6;_\\(\\1\"-\"\\?{0,30}\\6_\\);_\\(@_\\)$"; err = go_regcomp (&re_simple_number, simple_number_pattern, 0); @@ -267,31 +266,31 @@ currency_date_format_init (void) curr, "\"", NULL); } - cell_format_currency [0] = g_strdup_printf ( + fmts_currency [0] = g_strdup_printf ( "%s#,##0%s", pre, post); - cell_format_currency [1] = g_strdup_printf ( + fmts_currency [1] = g_strdup_printf ( "%s#,##0%s_);(%s#,##0%s)", pre, post, pre, post); - cell_format_currency [2] = g_strdup_printf ( + fmts_currency [2] = g_strdup_printf ( "%s#,##0%s_);[Red](%s#,##0%s)", pre, post, pre, post); - cell_format_currency [3] = g_strdup_printf ( + fmts_currency [3] = g_strdup_printf ( "%s#,##0.00%s", pre, post); - cell_format_currency [4] = g_strdup_printf ( + fmts_currency [4] = g_strdup_printf ( "%s#,##0.00%s_);(%s#,##0.00%s)", pre, post, pre, post); - cell_format_currency [5] = g_strdup_printf ( + fmts_currency [5] = g_strdup_printf ( "%s#,##0.00%s_);[Red](%s#,##0.00%s)", pre, post, pre, post); - cell_format_account [0] = g_strdup_printf ( + fmts_accounting [0] = g_strdup_printf ( "_(%s%s#,##0%s%s_);_(%s%s(#,##0)%s%s;_(%s%s\"-\"%s%s_);_(@_)", pre, pre_rep, post_rep, post, pre, pre_rep, post_rep, post, pre, pre_rep, post_rep, post); - cell_format_account [2] = g_strdup_printf ( + fmts_accounting [2] = g_strdup_printf ( "_(%s%s#,##0.00%s%s_);_(%s%s(#,##0.00)%s%s;_(%s%s\"-\"??%s%s_);_(@_)", pre, pre_rep, post_rep, post, pre, pre_rep, post_rep, post, @@ -300,47 +299,47 @@ currency_date_format_init (void) g_free (*pre ? pre : post); if (!format_month_before_day ()) { - cell_format_date [0] = "d/m/yy"; - cell_format_date [1] = "d/m/yyyy"; - cell_format_date [2] = "mmm-d-yy"; - cell_format_date [3] = "mmm-d-yyyy"; - cell_format_date [4] = "mmm-d"; - cell_format_date [5] = "mm-d"; - cell_format_date [6] = "d/mmm"; - cell_format_date [7] = "d/mm"; - cell_format_date [8] = "dd/mm/yy"; - cell_format_date [9] = "dd/mm/yyyy"; - cell_format_date [10] = "dd/mmm/yy"; - cell_format_date [11] = "dd/mmm/yyyy"; - cell_format_date [12] = "ddd/mmm/yy"; - cell_format_date [13] = "ddd/mmm/yyyy"; - cell_format_date [14] = "ddd/mm/yy"; - cell_format_date [15] = "ddd/mm/yyyy"; - cell_format_date [20] = "d/m/yy h:mm"; - cell_format_date [21] = "d/m/yyyy h:mm"; + fmts_date [0] = "d/m/yy"; + fmts_date [1] = "d/m/yyyy"; + fmts_date [2] = "mmm-d-yy"; + fmts_date [3] = "mmm-d-yyyy"; + fmts_date [4] = "mmm-d"; + fmts_date [5] = "mm-d"; + fmts_date [6] = "d/mmm"; + fmts_date [7] = "d/mm"; + fmts_date [8] = "dd/mm/yy"; + fmts_date [9] = "dd/mm/yyyy"; + fmts_date [10] = "dd/mmm/yy"; + fmts_date [11] = "dd/mmm/yyyy"; + fmts_date [12] = "ddd/mmm/yy"; + fmts_date [13] = "ddd/mmm/yyyy"; + fmts_date [14] = "ddd/mm/yy"; + fmts_date [15] = "ddd/mm/yyyy"; + fmts_date [20] = "d/m/yy h:mm"; + fmts_date [21] = "d/m/yyyy h:mm"; - cell_format_time [4] = "d/m/yy h:mm"; + fmts_time [4] = "d/m/yy h:mm"; } else { - cell_format_date [0] = "m/d/yy"; - cell_format_date [1] = "m/d/yyyy"; - cell_format_date [2] = "d-mmm-yy"; - cell_format_date [3] = "d-mmm-yyyy"; - cell_format_date [4] = "d-mmm"; - cell_format_date [5] = "d-mm"; - cell_format_date [6] = "mmm/d"; - cell_format_date [7] = "mm/d"; - cell_format_date [8] = "mm/dd/yy"; - cell_format_date [9] = "mm/dd/yyyy"; - cell_format_date [10] = "mmm/dd/yy"; - cell_format_date [11] = "mmm/dd/yyyy"; - cell_format_date [12] = "mmm/ddd/yy"; - cell_format_date [13] = "mmm/ddd/yyyy"; - cell_format_date [14] = "mm/ddd/yy"; - cell_format_date [15] = "mm/ddd/yyyy"; - cell_format_date [20] = "m/d/yy h:mm"; - cell_format_date [21] = "m/d/yyyy h:mm"; + fmts_date [0] = "m/d/yy"; + fmts_date [1] = "m/d/yyyy"; + fmts_date [2] = "d-mmm-yy"; + fmts_date [3] = "d-mmm-yyyy"; + fmts_date [4] = "d-mmm"; + fmts_date [5] = "d-mm"; + fmts_date [6] = "mmm/d"; + fmts_date [7] = "mm/d"; + fmts_date [8] = "mm/dd/yy"; + fmts_date [9] = "mm/dd/yyyy"; + fmts_date [10] = "mmm/dd/yy"; + fmts_date [11] = "mmm/dd/yyyy"; + fmts_date [12] = "mmm/ddd/yy"; + fmts_date [13] = "mmm/ddd/yyyy"; + fmts_date [14] = "mm/ddd/yy"; + fmts_date [15] = "mm/ddd/yyyy"; + fmts_date [20] = "m/d/yy h:mm"; + fmts_date [21] = "m/d/yyyy h:mm"; - cell_format_time [4] = "m/d/yy h:mm"; + fmts_time [4] = "m/d/yy h:mm"; } } @@ -355,13 +354,13 @@ currency_date_format_shutdown (void) int i; for (i = 0; i < 6; i++) { - g_free ((char *)(cell_format_currency [i])); - cell_format_currency [i] = NULL; + g_free ((char *)(fmts_currency [i])); + fmts_currency [i] = NULL; } - g_free ((char *)(cell_format_account [0])); - cell_format_account [0] = NULL; - g_free ((char *)(cell_format_account [2])); - cell_format_account [3] = NULL; + g_free ((char *)(fmts_accounting [0])); + fmts_accounting [0] = NULL; + g_free ((char *)(fmts_accounting [2])); + fmts_accounting [3] = NULL; go_regfree (&re_simple_number); go_regfree (&re_red_number); @@ -371,7 +370,9 @@ currency_date_format_shutdown (void) go_regfree (&re_fraction); } -CurrencySymbol const currency_symbols[] = +#define EURO_FORM_1 4 + +GOFormatCurrency const go_format_currencies[] = { { "", "None", TRUE, FALSE }, /* These first six elements */ { "$", "$", TRUE, FALSE }, /* Must stay in this order */ @@ -564,33 +565,42 @@ CurrencySymbol const currency_symbols[] = { NULL, NULL, FALSE, FALSE } }; -/* Returns the index in currency_symbols of the symbol in ptr */ +/* Returns the index in go_format_currencies of the symbol in ptr */ static int find_currency (char const *ptr, int len) { int i; - for (i = 0; currency_symbols[i].symbol; i++) - if (strncmp(currency_symbols[i].symbol, ptr, len) == 0) + if (len == 5 && memcmp (ptr, "\"€\"", 5) == 0) { + /* Accept quoted Euro character -- arbitrarity pick form 1. */ + return EURO_FORM_1; + } else if (len >= 2 && ptr[0] == '"' && ptr [len - 1] == '"') { + /* Accept quotes around the currency. */ + ptr++; + len -= 2; + } + + for (i = 0; go_format_currencies[i].symbol; i++) + if (strncmp (go_format_currencies[i].symbol, ptr, len) == 0) return i; return -1; } -static FormatFamily -cell_format_simple_number (char const * const fmt, FormatCharacteristics *info) +static GOFormatFamily +cell_format_simple_number (char const * const fmt, GOFormatDetails *info) { - FormatFamily result = FMT_NUMBER; + GOFormatFamily result = GO_FORMAT_NUMBER; int cur = -1; regmatch_t match[7]; if (go_regexec (&re_simple_number, fmt, G_N_ELEMENTS (match), match, 0) == 0) { if (match[2].rm_eo == -1 && match[6].rm_eo == -1) { - result = FMT_NUMBER; + result = GO_FORMAT_NUMBER; info->currency_symbol_index = 0; } else { - result = FMT_CURRENCY; + result = GO_FORMAT_CURRENCY; if (match[6].rm_eo == -1) cur = find_currency (fmt + match[2].rm_so, match[2].rm_eo @@ -600,7 +610,7 @@ cell_format_simple_number (char const * const fmt, FormatCharacteristics *info) match[6].rm_eo - match[6].rm_so); if (cur == -1) - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; info->currency_symbol_index = cur; } @@ -614,20 +624,20 @@ cell_format_simple_number (char const * const fmt, FormatCharacteristics *info) return result; } else { - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; } } -static FormatFamily -cell_format_is_number (char const * const fmt, FormatCharacteristics *info) +static GOFormatFamily +cell_format_is_number (char const * const fmt, GOFormatDetails *info) { - FormatFamily result = FMT_NUMBER; + GOFormatFamily result = GO_FORMAT_NUMBER; char const *ptr = fmt; int cur = -1; regmatch_t match[9]; - /* FMT_CURRENCY or FMT_NUMBER ? */ - if ((result = cell_format_simple_number (fmt, info)) != FMT_UNKNOWN) + /* GO_FORMAT_CURRENCY or GO_FORMAT_NUMBER ? */ + if ((result = cell_format_simple_number (fmt, info)) != GO_FORMAT_UNKNOWN) return result; if (go_regexec (&re_red_number, fmt, G_N_ELEMENTS (match), match, 0) == 0) { @@ -651,7 +661,7 @@ cell_format_is_number (char const * const fmt, FormatCharacteristics *info) return result; } - /* FMT_PERCENT or FMT_SCIENCE ? */ + /* GO_FORMAT_PERCENTAGE or GO_FORMAT_SCIENTIFIC ? */ if (go_regexec (&re_percent_science, fmt, G_N_ELEMENTS (match), match, 0) == 0) { info->num_decimals = 0; if (match[1].rm_eo != -1) @@ -659,12 +669,12 @@ cell_format_is_number (char const * const fmt, FormatCharacteristics *info) match[1].rm_so - 1; if (ptr[match[2].rm_so] == '%') - return FMT_PERCENT; + return GO_FORMAT_PERCENTAGE; else - return FMT_SCIENCE; + return GO_FORMAT_SCIENTIFIC; } - /* FMT_ACCOUNT */ + /* GO_FORMAT_ACCOUNTING */ if (go_regexec (&re_account, fmt, G_N_ELEMENTS (match), match, 0) == 0) { info->num_decimals = 0; if (match[5].rm_eo != -1) @@ -672,7 +682,7 @@ cell_format_is_number (char const * const fmt, FormatCharacteristics *info) match[5].rm_so - 1; if (match[1].rm_eo == -1 && match[6].rm_eo == -1) - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; else { if (match[8].rm_eo == -1) cur = find_currency (ptr + match[3].rm_so, @@ -683,23 +693,23 @@ cell_format_is_number (char const * const fmt, FormatCharacteristics *info) match[8].rm_eo - match[8].rm_so); else - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; } if (cur == -1) - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; info->currency_symbol_index = cur; - return FMT_ACCOUNT; + return GO_FORMAT_ACCOUNTING; } - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; } static gboolean -cell_format_is_fraction (char const *fmt, FormatCharacteristics *info) +cell_format_is_fraction (char const *fmt, GOFormatDetails *info) { regmatch_t match[3]; const char *denominator; @@ -719,15 +729,15 @@ cell_format_is_fraction (char const *fmt, FormatCharacteristics *info) } -FormatFamily -cell_format_classify (GnmFormat const *sf, FormatCharacteristics *info) +GOFormatFamily +go_format_classify (GOFormat const *gf, GOFormatDetails *info) { - char const *fmt = sf->format; - FormatFamily res; + char const *fmt = gf->format; + GOFormatFamily res; int i; - g_return_val_if_fail (fmt != NULL, FMT_GENERAL); - g_return_val_if_fail (info != NULL, FMT_GENERAL); + g_return_val_if_fail (fmt != NULL, GO_FORMAT_GENERAL); + g_return_val_if_fail (info != NULL, GO_FORMAT_GENERAL); /* Init the result to something sane */ info->thousands_sep = FALSE; @@ -740,31 +750,31 @@ cell_format_classify (GnmFormat const *sf, FormatCharacteristics *info) info->fraction_denominator = 0; if (*fmt == '\0') - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; /* Note: ->family is not yet ready. */ - if (g_ascii_strcasecmp (sf->format, cell_format_general[0]) == 0) - return FMT_GENERAL; + if (g_ascii_strcasecmp (gf->format, fmts_general[0]) == 0) + return GO_FORMAT_GENERAL; if (fmt[0] == '@' && fmt[1] == '[') - return FMT_MARKUP; + return GO_FORMAT_MARKUP; /* Can we parse it ? */ - if ((res = cell_format_is_number (fmt, info)) != FMT_UNKNOWN) + if ((res = cell_format_is_number (fmt, info)) != GO_FORMAT_UNKNOWN) return res; if (cell_format_is_fraction (fmt, info)) - return FMT_FRACTION; + return GO_FORMAT_FRACTION; /* Is it in the lists */ - for (i = 0; cell_formats[i] != NULL ; ++i) { + for (i = 0; go_format_builtins[i] != NULL ; ++i) { int j = 0; - char const * const * elem = cell_formats[i]; + char const * const * elem = go_format_builtins[i]; for (; elem[j] ; ++j) if (g_ascii_strcasecmp (_(elem[j]), fmt) == 0) { info->list_element = j; switch (i) { - case FMT_DATE: + case GO_FORMAT_DATE: info->date_has_days = (NULL != g_utf8_strchr (elem[j],-1,'d')); info->date_has_months = @@ -777,5 +787,5 @@ cell_format_classify (GnmFormat const *sf, FormatCharacteristics *info) return i; } } - return FMT_UNKNOWN; + return GO_FORMAT_UNKNOWN; } diff --git a/lib/goffice/utils/go-color.c b/lib/goffice-0.0.4/goffice/utils/go-color.c similarity index 99% rename from lib/goffice/utils/go-color.c rename to lib/goffice-0.0.4/goffice/utils/go-color.c index 08e049e618..ff78681975 100644 --- a/lib/goffice/utils/go-color.c +++ b/lib/goffice-0.0.4/goffice/utils/go-color.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ diff --git a/lib/goffice/utils/go-color.h b/lib/goffice-0.0.4/goffice/utils/go-color.h similarity index 98% rename from lib/goffice/utils/go-color.h rename to lib/goffice-0.0.4/goffice/utils/go-color.h index 1263c2492f..dfa586cd8f 100644 --- a/lib/goffice/utils/go-color.h +++ b/lib/goffice-0.0.4/goffice/utils/go-color.h @@ -19,7 +19,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ diff --git a/lib/goffice/utils/go-file.c b/lib/goffice-0.0.4/goffice/utils/go-file.c similarity index 72% rename from lib/goffice/utils/go-file.c rename to lib/goffice-0.0.4/goffice/utils/go-file.c index 41b0cf7ca0..1cfadf9202 100644 --- a/lib/goffice/utils/go-file.c +++ b/lib/goffice-0.0.4/goffice/utils/go-file.c @@ -17,17 +17,19 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "go-file.h" +#include "go-glib-extras.h" #include #include #include #ifdef WITH_GNOME #include +#include #include #include #include @@ -35,11 +37,13 @@ #ifdef G_OS_WIN32 #include #include +#include #endif #endif #include #include +#include /* ------------------------------------------------------------------------- */ @@ -104,6 +108,37 @@ go_filename_to_uri (const char *filename) } } +gchar ** +go_shell_argv_to_glib_encoding (gint argc, gchar const **argv) +{ +#ifdef G_OS_WIN32 + gchar **args; + gint i; + + args = g_new (gchar *, argc); + if (G_WIN32_IS_NT_BASED ()) + { + LPWSTR *wargs; + gint narg; + GIConv conv; + + wargs = CommandLineToArgvW (GetCommandLineW (), &narg); + conv = g_iconv_open ("utf-8", "utf-16le"); + for (i = 0; i < narg; ++i) + args[i] = g_convert_with_iconv ((const gchar *) wargs[i], wcslen (wargs[i]) << 1, conv, NULL, NULL, NULL); + g_iconv_close (conv); + } + else + { + for (i = 0; i < argc; ++i) + args[i] = g_locale_to_utf8 (argv[i], -1, NULL, NULL, NULL); + } + + return args; +#else + return (gchar **) argv; +#endif +} char * go_shell_arg_to_uri (const char *arg) @@ -115,7 +150,7 @@ go_shell_arg_to_uri (const char *arg) return go_filename_to_uri (arg); else { /* See if it's a file: uri. */ - char *tmp = go_filename_from_uri (arg); + gchar *tmp = go_filename_from_uri (arg); if (tmp) { g_free (tmp); return g_strdup (arg); @@ -169,7 +204,7 @@ go_basename_from_uri (const char *uri) char * go_dirname_from_uri (const char *uri, gboolean brief) { - char *dirname_utf8 = NULL, *dirname = NULL; + char *dirname_utf8, *dirname; #ifdef WITH_GNOME char *raw_uri = gnome_vfs_unescape_string (uri, G_DIR_SEPARATOR_S); @@ -177,9 +212,8 @@ go_dirname_from_uri (const char *uri, gboolean brief) g_free (raw_uri); #else char *uri_dirname = g_path_get_dirname (uri); - char *dir = uri_dirname ? go_filename_from_uri (uri_dirname) : NULL; + dirname = uri_dirname ? go_filename_from_uri (uri_dirname) : NULL; dirname = dirname ? g_strconcat ("file://", dirname, NULL) : NULL; - g_free (dir); g_free (uri_dirname); #endif @@ -199,6 +233,28 @@ go_dirname_from_uri (const char *uri, gboolean brief) /* ------------------------------------------------------------------------- */ +static gboolean +is_fd_uri (const char *uri, int *fd) +{ + unsigned long ul; + char *end; + + if (g_ascii_strncasecmp (uri, "fd://", 5)) + return FALSE; + uri += 5; + if (!g_ascii_isdigit (*uri)) + return FALSE; /* Space, for example. */ + + ul = strtoul (uri, &end, 10); + if (*end != 0 || ul > INT_MAX) + return FALSE; + + *fd = (int)ul; + return TRUE; +} + +/* ------------------------------------------------------------------------- */ + static GsfInput * open_plain_file (const char *path, GError **err) { @@ -221,6 +277,7 @@ GsfInput * go_file_open (char const *uri, GError **err) { char *filename; + int fd; if (err != NULL) *err = NULL; @@ -238,12 +295,23 @@ go_file_open (char const *uri, GError **err) return result; } + if (is_fd_uri (uri, &fd)) { + int fd2 = dup (fd); + FILE *fil = fd2 != -1 ? fdopen (fd2, "rb") : NULL; + GsfInput *result = fil ? gsf_input_stdio_new_FILE (uri, fil, FALSE) : NULL; + + if (!result) + g_set_error (err, gsf_output_error_id (), 0, + "Unable to read from %s", uri); + return result; + } + #ifdef WITH_GNOME return gsf_input_gnomevfs_new (uri, err); #else g_set_error (err, gsf_input_error (), 0, "Invalid or non-supported URI"); - return NULL; + return NULL; #endif } @@ -251,6 +319,7 @@ GsfOutput * go_file_create (char const *uri, GError **err) { char *filename; + int fd; g_return_val_if_fail (uri != NULL, NULL); @@ -261,12 +330,23 @@ go_file_create (char const *uri, GError **err) return result; } + if (is_fd_uri (uri, &fd)) { + int fd2 = dup (fd); + FILE *fil = fd2 != -1 ? fdopen (fd2, "wb") : NULL; + GsfOutput *result = fil ? gsf_output_stdio_new_FILE (uri, fil, FALSE) : NULL; + + if (!result) + g_set_error (err, gsf_output_error_id (), 0, + "Unable to write to %s", uri); + return result; + } + #ifdef WITH_GNOME return gsf_output_gnomevfs_new (uri, err); #else g_set_error (err, gsf_output_error_id (), 0, "Invalid or non-supported URI"); - return NULL; + return NULL; #endif } @@ -274,7 +354,7 @@ go_file_create (char const *uri, GError **err) /* Adapted from gtkfilechooserdefault.c. Unfortunately it is static there. */ GSList * -go_file_split_uris (const char *data) +go_file_split_urls (const char *data) { GSList *uris; const char *p, *q; @@ -404,6 +484,11 @@ check_program (char const *prog) GError * go_url_show (gchar const *url) { +#ifdef G_OS_WIN32 + ShellExecute (NULL, "open", url, NULL, NULL, SW_SHOWNORMAL); + + return NULL; +#else GError *err = NULL; #ifdef WITH_GNOME gnome_url_show (url, &err); @@ -415,49 +500,6 @@ go_url_show (gchar const *url) /* 1) Check BROWSER env var */ browser = check_program (getenv ("BROWSER")); -#ifdef G_OS_WIN32 -{ - char *ptr, *longpath; - HKEY hKey; - unsigned long lType; - DWORD dwSize; - - /* 2) Check registry */ - if (browser == NULL && - RegOpenKeyEx (HKEY_CLASSES_ROOT, "http\\shell\\open\\command", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { - if(RegQueryValueEx (hKey, NULL, NULL, &lType, NULL, &dwSize) == ERROR_SUCCESS) { - unsigned char *buf = g_new (unsigned char, dwSize + 1); - RegQueryValueEx (hKey, NULL, NULL, &lType, buf, &dwSize); - browser = check_program (buf); - g_free (buf); - } - RegCloseKey(hKey); - } - - /* some win32 specific url cleanup */ - /* If this is a file:// URL, strip off file:// and make it backslashed */ - if (g_ascii_strncasecmp (url, "file://", 7) == 0) { - url += 7; - - /* View as WebPage likes to throw in an extra /\ just for fun, - * strip it off */ - if (strncmp (url, "/\\", 2) == 0) - url += 2; - - longpath = g_strdup (url); - /* s/forward-slash/back-slash/ */ - for (ptr = longpath ; *ptr ; ptr++) - if (*ptr == '/') - *ptr = '\\'; - - clean_url = g_new (char, MAX_PATH); - /* Convert to 8.3 in case of spaces in path */ - GetShortPathName (longpath, clean_url, MAX_PATH); - g_free (longpath); - } -} -#endif - if (browser == NULL) { static char const * const browsers[] = { "sensible-browser", /* debian */ @@ -516,4 +558,77 @@ go_url_show (gchar const *url) g_free (clean_url); return err; #endif +#endif } + +/** + * go_url_check_extension + * @uri : Uri + * @std_ext : Standard extension for the content type + * @new_uri : New uri + * + * Modifies given @uri by adding the extension @std_ext if needed. + * If no @std_ext is given or @uri already has some extension, + * it just copies @uri. + * + * Value in new_uri: newly allocated string which you should free after + * use, containing (optionally) modified uri. + * + * Return Value: FALSE if the uri has an extension not matching @std_ext + */ +gboolean +go_url_check_extension (gchar const *uri, + gchar const *std_ext, + gchar **new_uri) +{ + gchar *base; + gchar *user_ext; + gboolean res; + + g_return_val_if_fail (uri != NULL, FALSE); + g_return_val_if_fail (new_uri != NULL, FALSE); + + res = TRUE; + base = g_path_get_basename (uri); + user_ext = strrchr (base, '.'); + if (std_ext != NULL && strlen (std_ext) > 0 && user_ext == NULL) + *new_uri = g_strconcat (uri, ".", std_ext, NULL); + else { + if (user_ext != NULL && std_ext != NULL) + res = !go_utf8_collate_casefold (user_ext + 1, std_ext); + *new_uri = g_strdup (uri); + } + g_free (base); + + return res; +} + +gchar * +go_get_mime_type (gchar const *uri) +{ +#ifdef WITH_GNOME + return gnome_vfs_get_mime_type (uri); +#elif defined(G_OS_WIN32) + LPWSTR wuri, mime_type; + + wuri = g_utf8_to_utf16 (uri, -1, NULL, NULL, NULL); + if (wuri && + FindMimeFromData_ (NULL, wuri, NULL, 0, NULL, 0, &mime_type, 0) == NOERROR) + { + g_free (wuri); + return g_utf16_to_utf8 (mime_type, -1, NULL, NULL, NULL); + } + + g_free (wuri); + + /* We try to determine mime using FindMimeFromData(). + * However, we are not sure whether the functions will know about + * the necessary mime types. In the worst wase we fall back to + * "text/plain" + */ + return g_strdup ("text/plain"); +#else + return g_strdup ("application/octet-stream"); +#endif +} + diff --git a/lib/goffice/utils/go-file.h b/lib/goffice-0.0.4/goffice/utils/go-file.h similarity index 64% rename from lib/goffice/utils/go-file.h rename to lib/goffice-0.0.4/goffice/utils/go-file.h index 2246332530..89682862f4 100644 --- a/lib/goffice/utils/go-file.h +++ b/lib/goffice-0.0.4/goffice/utils/go-file.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_FILE_H @@ -30,16 +30,19 @@ char *go_filename_to_uri (const char *filename); char *go_shell_arg_to_uri (const char *arg); char *go_basename_from_uri (const char *uri); char *go_dirname_from_uri (const char *uri, gboolean brief); +gchar **go_shell_argv_to_glib_encoding (gint argc, gchar const **argv); -GsfInput *go_file_open (char const *uri, GError **err); -GsfOutput *go_file_create (char const *uri, GError **err); +GsfInput *go_file_open (char const *uri, GError **err); +GsfOutput *go_file_create (char const *uri, GError **err); +GSList *go_file_split_urls (char const *data); -GSList *go_file_split_uris (const char *data); - -gchar *go_url_decode (gchar const *text); -gchar *go_url_encode (gchar const *text); -GError *go_url_show (gchar const *url); -GError *go_url_mailto (gchar const *url); +gchar *go_url_decode (gchar const *text); +gchar *go_url_encode (gchar const *text); +GError *go_url_show (gchar const *url); +gboolean go_url_check_extension (gchar const *uri, + gchar const *std_ext, + gchar **new_uri); +gchar *go_get_mime_type (gchar const *uri); G_END_DECLS diff --git a/lib/goffice/utils/go-font.c b/lib/goffice-0.0.4/goffice/utils/go-font.c similarity index 74% rename from lib/goffice/utils/go-font.c rename to lib/goffice-0.0.4/goffice/utils/go-font.c index de2452662a..10c8e65bd8 100644 --- a/lib/goffice/utils/go-font.c +++ b/lib/goffice-0.0.4/goffice/utils/go-font.c @@ -15,18 +15,19 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "go-font.h" -#include +#include "go-glib-extras.h" +#include -static GHashTable *font_hash; -static GPtrArray *font_array; -static GSList *font_watchers; -static GOFont const *font_default; +static GHashTable *font_hash; +static GPtrArray *font_array; +static GSList *font_watchers; +static GOFont const *font_default; #if 0 #define ref_debug(x) x @@ -159,27 +160,57 @@ go_font_cache_unregister (GClosure *watcher) font_watchers = g_slist_remove (font_watchers, watcher); } -static void (*fake_pango_fc_font_map_cache_clear) (PangoFcFontMap *); - -void -go_pango_fc_font_map_cache_clear (PangoFcFontMap *font_map) +/* + * Returns a sorted list of strings of font family names. The list and + * the names must be freed. + */ +GSList * +go_fonts_list_families (PangoContext *context) { - if (fake_pango_fc_font_map_cache_clear) - fake_pango_fc_font_map_cache_clear (font_map); + PangoFontFamily **pango_families; + int i, n_families; + GSList *res = NULL; + + pango_context_list_families (context, &pango_families, &n_families); + for (i = 0 ; i < n_families ; i++) { + const char *name = pango_font_family_get_name (pango_families[i]); + if (name) + res = g_slist_prepend (res, g_strdup (name)); + } + g_free (pango_families); + + res = g_slist_sort (res, (GCompareFunc)g_utf8_collate); + return res; +} + +GSList * +go_fonts_list_sizes (void) +{ + return go_slist_create + (GINT_TO_POINTER (4 * PANGO_SCALE), + GINT_TO_POINTER (8 * PANGO_SCALE), + GINT_TO_POINTER (9 * PANGO_SCALE), + GINT_TO_POINTER (10 * PANGO_SCALE), + GINT_TO_POINTER (11 * PANGO_SCALE), + GINT_TO_POINTER (12 * PANGO_SCALE), + GINT_TO_POINTER (14 * PANGO_SCALE), + GINT_TO_POINTER (16 * PANGO_SCALE), + GINT_TO_POINTER (18 * PANGO_SCALE), + GINT_TO_POINTER (20 * PANGO_SCALE), + GINT_TO_POINTER (22 * PANGO_SCALE), + GINT_TO_POINTER (24 * PANGO_SCALE), + GINT_TO_POINTER (26 * PANGO_SCALE), + GINT_TO_POINTER (28 * PANGO_SCALE), + GINT_TO_POINTER (36 * PANGO_SCALE), + GINT_TO_POINTER (48 * PANGO_SCALE), + GINT_TO_POINTER (72 * PANGO_SCALE), + NULL); } /* private */ void -go_font_init (void) +go_fonts_init (void) { - GModule *self = g_module_open (NULL, 0); - if (self) { - gpointer sym; - if (g_module_symbol (self, "pango_fc_font_map_cache_clear", &sym)) - fake_pango_fc_font_map_cache_clear = sym; - g_module_close (self); - } - font_array = g_ptr_array_new (); font_hash = g_hash_table_new_full ( (GHashFunc)pango_font_description_hash, @@ -190,7 +221,7 @@ go_font_init (void) } void -go_font_shutdown (void) +go_fonts_shutdown (void) { go_font_unref (font_default); font_default = NULL; @@ -203,5 +234,6 @@ go_font_shutdown (void) g_warning ("Missing calls to go_font_cache_unregister"); /* be careful and _leak_ the closured in case they are already freed */ g_slist_free (font_watchers); + font_watchers = NULL; } } diff --git a/lib/goffice/utils/go-font.h b/lib/goffice-0.0.4/goffice/utils/go-font.h similarity index 82% rename from lib/goffice/utils/go-font.h rename to lib/goffice-0.0.4/goffice/utils/go-font.h index 62a6428767..9b6fa18800 100644 --- a/lib/goffice/utils/go-font.h +++ b/lib/goffice-0.0.4/goffice/utils/go-font.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_FONT_H @@ -29,7 +29,11 @@ G_BEGIN_DECLS struct _GOFont { - PangoFontDescription *desc; + PangoFontDescription *desc; + int underline; + gboolean strikethrough; + GOColor color; + int ref_count; int font_index; /* each renderer keeps an array for lookup */ }; @@ -42,16 +46,16 @@ GOFont const *go_font_ref (GOFont const *font); void go_font_unref (GOFont const *font); gboolean go_font_eq (GOFont const *a, GOFont const *b); +GSList *go_fonts_list_families (PangoContext *context); +GSList *go_fonts_list_sizes (void); + /* cache notification */ void go_font_cache_register (GClosure *callback); void go_font_cache_unregister (GClosure *callback); /* private */ -void go_font_init (void); -void go_font_shutdown (void); - -/* See http://bugzilla.gnome.org/show_bug.cgi?id=143542 */ -void go_pango_fc_font_map_cache_clear (PangoFcFontMap *font_map); +void go_fonts_init (void); +void go_fonts_shutdown (void); G_END_DECLS diff --git a/lib/goffice-0.0.4/goffice/utils/go-format-match.c b/lib/goffice-0.0.4/goffice/utils/go-format-match.c new file mode 100644 index 0000000000..942e91f60e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-format-match.c @@ -0,0 +1,545 @@ +#include +#include "go-format-match.h" +#include "go-format.h" +#include "format-impl.h" +#include "regutf8.h" + +#include +#include +#include + +#define append_type(t) do { guint8 x = t; match_types = g_byte_array_append (match_types, &x, 1); } while (0) + +static void +print_regex_error (int ret) +{ + switch (ret) { + case REG_BADBR: + fprintf (stderr, + "There was an invalid `\\{...\\}' construct in the regular\n" + "expression. A valid `\\{...\\}' construct must contain either a\n" + "single number, or two numbers in increasing order separated by a\n" + "comma.\n"); + break; + + case REG_BADPAT: + fprintf (stderr, + "There was a syntax error in the regular expression.\n"); + break; + + case REG_BADRPT: + fprintf (stderr, + "A repetition operator such as `?' or `*' appeared in a bad\n" + "position (with no preceding subexpression to act on).\n"); + break; + + case REG_ECOLLATE: + fprintf (stderr, + "The regular expression referred to an invalid collating element\n" + "(one not defined in the current locale for string collation).\n"); + break; + + case REG_ECTYPE: + fprintf (stderr, + "The regular expression referred to an invalid character class name.\n"); + break; + +#if REG_EESCAPE != REG_BADPAT + case REG_EESCAPE: + fprintf (stderr, + "The regular expression ended with `\\'.\n"); + break; +#endif + + case REG_ESUBREG: + fprintf (stderr, + "There was an invalid number in the `\\DIGIT' construct.\n"); + break; + + case REG_EBRACK: + fprintf (stderr, + "There were unbalanced square brackets in the regular expression.\n"); + break; + +#if REG_EPAREN != REG_BADPAT + case REG_EPAREN: + fprintf (stderr, + "An extended regular expression had unbalanced parentheses, or a\n" + "basic regular expression had unbalanced `\\(' and `\\)'.\n"); + break; +#endif + +#if REG_EBRACE != REG_BADPAT + case REG_EBRACE: + fprintf (stderr, + "The regular expression had unbalanced `\\{' and `\\}'.\n"); + break; +#endif + +#ifdef REG_EBOL + case REG_EBOL: + fprintf (stderr, "Found ^ not at the beginning.\n"); + break; +#endif + +#ifdef REG_EEOL + case REG_EEOL: + fprintf (stderr, "Found $ not at the end.\n"); + break; +#endif + + case REG_ERANGE: + fprintf (stderr, + "One of the endpoints in a range expression was invalid.\n"); + break; + + case REG_ESPACE: + fprintf (stderr, + "`regcomp' ran out of memory.\n"); + break; + + default: + fprintf (stderr, "regexp error %d\n", ret); + } +} + +/* Takes a list of strings (optionally include an * at the beginning + * that gets stripped, for i18n purposes). and returns a regexp that + * would match them */ +static char * +create_option_list (char const *const *list) +{ + int len = 0; + char const *const *p; + char *res; + + for (p = list; *p; p++) { + char const *v = _(*p); + + if (*v == '*') + v++; + len += strlen (v) + 1; + } + len += 5; + + res = g_malloc (len); + res[0] = '('; + res[1] = 0; + for (p = list; *p; p++) { + char const *v = _(*p); + + if (*v == '*') + v++; + + strcat (res, v); + if (*(p + 1)) + strcat (res, "|"); + } + strcat (res, ")"); + + return res; +} + +/* Create a regular expression for the given XL-style format. + * NOTE: the format as well as the regexp are UTF-8 encoded. */ +static char * +format_create_regexp (gchar const *format, GByteArray **dest) +{ + GString *regexp; + GByteArray *match_types; + char *str; + gboolean hour_seen = FALSE; + gboolean number_seen = FALSE; + gboolean fraction = FALSE; + + g_return_val_if_fail (format != NULL, NULL); + +#ifdef DEBUG_NUMBER_MATCH + printf ("'%s' = ", format); +#endif + regexp = g_string_new ("^"); + match_types = g_byte_array_new (); + + for (; *format; format = g_utf8_next_char (format)) { + gunichar c = g_utf8_get_char (format); + switch (c) { + case '*': + /* FIXME: I don't think this will work for '^'. */ + if (format[1]) { + format++; + g_string_append_c (regexp, '['); + g_string_append_unichar (regexp, g_utf8_get_char (format)); + g_string_append_c (regexp, ']'); + g_string_append_c (regexp, '*'); + } + break; + + case 'P': case 'p': + if (format[1] == 'm' || format[1] == 'M') + format++; + break; + + case '\\': { + if (format[1] != '\0') + format++; + go_regexp_quote1 (regexp, format); + break; + } + + case '[' : + /* Currency symbol */ + if (format[1] == '$') { + for (format += 2; *format && *format != ']' ; ++format) + g_string_append_c (regexp, *format); + if (*format != ']') + format--; + break; + } else if (format[1] == 'h' && format[2] == ']') { + g_string_append (regexp, "([-+]?[0-9]+)"); + append_type (MATCH_CUMMULATIVE_HOURS); + hour_seen = TRUE; + format += 2; + break; + } else if (format[1] == 'm' && format[2] == ']') { + g_string_append (regexp, "([-+]?[0-9]+)"); + append_type (hour_seen ? MATCH_MINUTE : MATCH_CUMMULATIVE_MINUTES); + format += 2; + break; + } else if (format[1] == 's' && format[2] == ']') { + g_string_append (regexp, "([-+]?[0-9]+)"); + append_type (MATCH_CUMMULATIVE_SECONDS); + format += 2; + break; + } + + case '%': + g_string_append (regexp, "%"); + append_type (MATCH_PERCENT); + break; + + case '#': case '0': case '.': case '+': case '?': { + gboolean include_sep = FALSE; + gboolean include_decimal = FALSE; + + while (*format == '#' || *format == '0' || *format == '.' || + *format == '-' || *format == 'E' || *format == 'e' || + *format == '+' || *format == '?' || *format == ',') { + switch (*format) { + case ',': include_sep = TRUE; break; + case '.': include_decimal = TRUE; break; + } + format++; + } + format--; + + if (format[1] == '/' && number_seen) + append_type (MATCH_NUMERATOR); + else + append_type (MATCH_NUMBER); + + if (include_sep) { + /* Not strictly correct. + * There should be a limit of 1-3 digits. + * However, that creates problems when + * There are formats like + * $#,##0.00 + * but not + * $###0.00 + * as a result $1000 would not be recognized. + */ + g_string_append (regexp, "([-+]?[0-9]+("); + go_regexp_quote (regexp, format_get_thousand ()->str); + g_string_append (regexp, "[0-9]{3})*)"); + append_type (MATCH_SKIP); + } else { + g_string_append (regexp, "([-+]?[0-9]+)"); + } + + if (include_decimal) { + g_string_append (regexp, "?("); + go_regexp_quote (regexp, format_get_decimal ()->str); + g_string_append (regexp, "[0-9]+([Ee][-+]?[0-9]+)?)"); + append_type (MATCH_NUMBER_DECIMALS); + } + + number_seen = TRUE; + break; + } + + case 'h': + case 'H': + hour_seen = TRUE; + if (format[1] == 'h' || format[1] == 'H') + format++; + + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_HOUR); + break; + + case 'M': + case 'm': + if (hour_seen) { + if (format[1] == 'm' || format[1] == 'M') + format++; + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_MINUTE); + hour_seen = FALSE; + } else { + if (format[1] == 'm' || format[1] == 'M') { + if (format[2] == 'm' || format[2] == 'M') { + if (format[3] == 'm' || format[3] == 'M') { + char *l; + + l = create_option_list (month_long); + g_string_append (regexp, l); + g_free (l); + + append_type (MATCH_MONTH_FULL); + format++; + } else { + char *l; + + l = create_option_list (month_short); + g_string_append (regexp, l); + g_free (l); + + append_type (MATCH_MONTH_SHORT); + } + format++; + } else { + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_MONTH_NUMBER); + } + format++; + } else { + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_MONTH_NUMBER); + } + } + break; + + case 's': + case 'S': + /* ICK! + * ICK! + * 'm' is ambiguous. It can be months or minutes. + */ + { + int l = match_types->len; + if (l > 0 && match_types->data[l - 1] == MATCH_MONTH_NUMBER) + match_types->data[l - 1] = MATCH_MINUTE; + } + + if (format[1] == 's' || format[1] == 'S') + format++; + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_SECOND); + break; + + case 'D': + case 'd': + if (format[1] == 'd' || format[1] == 'D') { + if (format[2] == 'd' || format[2] == 'D') { + if (format[3] == 'd' || format[3] == 'D') { + char *l; + + l = create_option_list (day_long); + g_string_append (regexp, l); + g_free (l); + + append_type (MATCH_DAY_FULL); + format++; + } else { + char *l; + + l = create_option_list (day_short); + g_string_append (regexp, l); + g_free (l); + } + format++; + } else { + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_DAY_NUMBER); + } + format++; + } else { + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_DAY_NUMBER); + } + break; + + case 'Y': + case 'y': + if (format[1] == 'y' || format[1] == 'Y') { + if (format[2] == 'y' || format[2] == 'Y') { + if (format[3] == 'y' || format[3] == 'Y') { + g_string_append (regexp, "([0-9][0-9][0-9][0-9])"); + append_type (MATCH_YEAR_FULL); + format++; + } + format++; + } else { + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_YEAR_SHORT); + } + format++; + } else { + g_string_append (regexp, "([0-9][0-9]?)"); + append_type (MATCH_YEAR_SHORT); + } + break; + + case ';': + /* TODO : Is it ok to only match the first entry ?? */ + /* FIXME: What is this? */ + while (*format) + format = g_utf8_next_char (format); + format = g_utf8_prev_char (format); + break; + + case 'A': case 'a': + if (*(format + 1) == 'm' || *(format + 1) == 'M') { + if (*(format + 2) == '/') { + if (*(format + 3) == 'P' || *(format + 3) == 'p') { + if (*(format + 4) == 'm' || *(format + 4) == 'M') { + format++; + } + format++; + } + format++; + } + format++; + } + g_string_append (regexp, "([Aa]|[Pp])[Mm]?"); + append_type (MATCH_AMPM); + break; + + case '"': + /* Matches a string */ + format++; + while (*format != '"') { + if (*format == 0) + goto error; + format = go_regexp_quote1 (regexp, format); + } + break; + + case '@': + g_string_append (regexp, "(.*)"); + append_type (MATCH_STRING_CONSTANT); + break; + + case '_': + if (format[1]) { + g_string_append (regexp, "[ ]?"); + format++; + } + break; + + case '/': + g_string_append_c (regexp, '/'); + if (number_seen) { + fraction = TRUE; + /* Fraction. Ick. */ + if (strncmp (regexp->str, "^([-+]?[0-9]+) ", 15) == 0) { + g_string_erase (regexp, 14, 1); + g_string_insert (regexp, 13, " +|"); + /* FIXME: The final regexp won't match a plain digit sequence. */ + } + + g_string_append_c (regexp, '('); + while (format[1] == '?' || g_ascii_isdigit (format[1])) { + format++; + g_string_append (regexp, "[0-9]"); + } + + g_string_append (regexp, ") *"); + append_type (MATCH_DENOMINATOR); + } + break; + +#if 0 + /* these were here explicitly before adding default. + * Leave them explicit for now as documentation. + */ + /* Default appears fine for this. */ + case 0x00a3: /* GBP sign. */ + case 0x00a5: /* JPY sign. */ + case 0x20ac: /* EUR sign. */ + case '^': + case '|': + case ']': + case '$': + case ':': + case '-': + case ' ': + case '(': + case ')': + +#endif + default : + go_regexp_quote1 (regexp, format); + } + } + + g_string_append_c (regexp, '$'); + + str = g_string_free (regexp, FALSE); + *dest = match_types; + +#ifdef DEBUG_NUMBER_MATCH + printf ("'%s'\n",str); +#endif + return str; + + error: + g_string_free (regexp, TRUE); + g_byte_array_free (match_types, TRUE); + return NULL; +} + +gboolean +format_match_create (GOFormatElement *fmt) +{ + GByteArray *match_tags; + char *regexp; + GORegexp r; + int ret; + + g_return_val_if_fail (fmt != NULL, FALSE); + g_return_val_if_fail (fmt->regexp_str == NULL, FALSE); + g_return_val_if_fail (fmt->match_tags == NULL, FALSE); + g_return_val_if_fail (strcmp (fmt->format, "General"), FALSE); + + regexp = format_create_regexp (fmt->format, &match_tags); + if (!regexp) { + fmt->regexp_str = NULL; + fmt->match_tags = NULL; + return FALSE; + } + + ret = go_regcomp (&r, regexp, REG_EXTENDED | REG_ICASE); + if (ret != 0) { + g_warning ("expression [%s] produced [%s]", fmt->format, regexp); + print_regex_error (ret); + g_free (regexp); + return FALSE; + } + + fmt->regexp_str = regexp; + fmt->regexp = r; + fmt->match_tags = match_tags; + + return TRUE; +} + +void +format_match_release (GOFormatElement *fmt) +{ + if (fmt->regexp_str != NULL) { + g_free (fmt->regexp_str); + go_regfree (&fmt->regexp); + g_byte_array_free (fmt->match_tags, TRUE); + } +} + diff --git a/lib/goffice-0.0.4/goffice/utils/go-format-match.h b/lib/goffice-0.0.4/goffice/utils/go-format-match.h new file mode 100644 index 0000000000..fb667b557c --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-format-match.h @@ -0,0 +1,57 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-format-match.h : + * + * Copyright (C) 2005 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ +#ifndef GO_FORMAT_MATCH_H +#define GO_FORMAT_MATCH_H + +#include + +G_BEGIN_DECLS + +typedef enum { + MATCH_DAY_FULL = 1, + MATCH_DAY_NUMBER = 2, + MATCH_MONTH_FULL = 3, + MATCH_MONTH_SHORT = 4, + MATCH_MONTH_NUMBER = 5, + MATCH_YEAR_FULL = 6, + MATCH_YEAR_SHORT = 7, + MATCH_HOUR = 8, + MATCH_MINUTE = 9, + MATCH_SECOND = 10, + MATCH_AMPM = 11, + MATCH_NUMBER = 12, + MATCH_NUMBER_DECIMALS = 13, + MATCH_PERCENT = 14, + MATCH_SKIP = 15, + MATCH_STRING_CONSTANT = 16, + MATCH_CUMMULATIVE_HOURS = 17, + MATCH_CUMMULATIVE_MINUTES = 18, + MATCH_CUMMULATIVE_SECONDS = 19, + MATCH_NUMERATOR = 20, + MATCH_DENOMINATOR = 21 +} MatchType; + +gboolean format_match_create (GOFormatElement *elem); +void format_match_release (GOFormatElement *elem); + +G_END_DECLS + +#endif /* GO_FORMAT_MATCH_H */ diff --git a/lib/goffice-0.0.4/goffice/utils/go-format.c b/lib/goffice-0.0.4/goffice/utils/go-format.c new file mode 100644 index 0000000000..5e4fcb9bcc --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-format.c @@ -0,0 +1,123 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-format.c : + * + * Copyright (C) 2003-2005 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include "go-format.h" +#include "go-math.h" +#include "datetime.h" +#include "format-impl.h" +#include + +static gboolean +go_style_format_condition (GOFormatElement const *entry, double val) +{ + if (entry->restriction_type == '*') + return TRUE; + + switch (entry->restriction_type) { + case '<': return val < entry->restriction_value; + case '>': return val > entry->restriction_value; + case '=': return val == entry->restriction_value; + case ',': return val <= entry->restriction_value; + case '.': return val >= entry->restriction_value; + case '+': return val != entry->restriction_value; + default: + return FALSE; + } +} + +void +go_format_value_gstring (GOFormat const *format, GString *res, double val, + int col_width, GODateConventions const *date_conv) +{ + GOFormatElement const *entry = NULL; /* default to General */ + GSList const *list = NULL; + gboolean need_abs = FALSE; + + if (format != NULL) { + for (list = format->entries; list; list = list->next) + if (go_style_format_condition (list->data, val)) + break; + if (list == NULL) + list = format->entries; + } + + /* If nothing matches treat it as General */ + if (list != NULL) { + entry = list->data; + + /* Empty formats should be ignored */ + if (entry->format[0] == '\0') + return; + +#if 0 + if (go_color && entry->go_color != 0) + *go_color = entry->go_color; +#endif + + if (strcmp (entry->format, "@") == 0) { + /* FIXME : Formatting a value as a text returns + * the entered text. We need access to the + * parse format */ + entry = NULL; + + /* FIXME : Just containing General is enough to be + * general for now. We'll ignore prefixes and suffixes + * for the time being */ + } else if (strstr (entry->format, "General") != NULL) + entry = NULL; + } + + /* More than one format? -- abs the value. */ + need_abs = entry && format->entries->next; + + if (INT_MAX >= val && val >= INT_MIN && val == floor (val)) { + int i_val = (int)val; + if (need_abs) + i_val = ABS (i_val); + + if (entry == NULL) + go_fmt_general_int (res, i_val, col_width); + else + go_format_number (res, i_val, col_width, entry, date_conv); + } else { + if (need_abs) + val = fabs (val); + + if (entry == NULL) + go_fmt_general_float (res, val, col_width); + else + go_format_number (res, val, col_width, entry, date_conv); + } +} + +char * +go_format_value (GOFormat const *fmt, double val) +{ + GString *res; + + if (!go_finite (val)) + return g_strdup ("#VALUE!"); + + res = g_string_sized_new (20); + go_format_value_gstring (fmt, res, val, -1, NULL); + return g_string_free (res, FALSE); +} diff --git a/lib/goffice-0.0.4/goffice/utils/go-format.h b/lib/goffice-0.0.4/goffice/utils/go-format.h new file mode 100644 index 0000000000..4706c6af58 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-format.h @@ -0,0 +1,161 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-format.h : + * + * Copyright (C) 2003-2005 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ +#ifndef GO_FORMAT_H +#define GO_FORMAT_H + +#include +#include +#include +#include +#include + +#include +#include + +G_BEGIN_DECLS + +/* Keep these sequential, they are used as the index for go_format_builtins */ +typedef enum { + GO_FORMAT_UNKNOWN = -1, + + GO_FORMAT_GENERAL = 0, + GO_FORMAT_NUMBER = 1, + GO_FORMAT_CURRENCY = 2, + GO_FORMAT_ACCOUNTING = 3, + GO_FORMAT_DATE = 4, + GO_FORMAT_TIME = 5, + GO_FORMAT_PERCENTAGE = 6, + GO_FORMAT_FRACTION = 7, + GO_FORMAT_SCIENTIFIC = 8, + GO_FORMAT_TEXT = 9, + GO_FORMAT_SPECIAL = 10, + + GO_FORMAT_MARKUP = 11 /* Internal use only */ +} GOFormatFamily; + +typedef struct { + gboolean thousands_sep; + int num_decimals; /* 0 - 30 */ + int negative_fmt; /* 0 - 3 */ + int currency_symbol_index; + int list_element; + gboolean date_has_days; + gboolean date_has_months; + int fraction_denominator; +} GOFormatDetails; + +struct _GOFormat { + int ref_count; + char *format; + GSList *entries; /* Of type GOFormatElement. */ + GOFormatFamily family; + GOFormatDetails family_info; + gboolean is_var_width; + PangoAttrList *markup; /* only for GO_FORMAT_MARKUP */ +}; + +GOFormat *go_format_new_from_XL (char const *str, gboolean delocalize); +GOFormat *go_format_new (GOFormatFamily family, + GOFormatDetails const *details); +GOFormat *go_format_new_markup (PangoAttrList *markup, gboolean add_ref); + +/* these do not add a reference to the result */ +GOFormat *go_format_general (void); +GOFormat *go_format_default_date (void); +GOFormat *go_format_default_time (void); +GOFormat *go_format_default_date_time (void); +GOFormat *go_format_default_percentage (void); +GOFormat *go_format_default_money (void); + +char *go_format_str_delocalize (char const *str); +char *go_format_str_as_XL (char const *str, gboolean localized); +char *go_format_as_XL (GOFormat const *fmt, gboolean localized); + +GOFormat *go_format_ref (GOFormat *fmt); +void go_format_unref (GOFormat *fmt); + +#define go_format_is_general(fmt) ((fmt)->family == GO_FORMAT_GENERAL) +#define go_format_is_markup(fmt) ((fmt)->family == GO_FORMAT_MARKUP) +#define go_format_is_text(fmt) ((fmt)->family == GO_FORMAT_TEXT) +#define go_format_is_var_width(fmt) ((fmt)->is_var_width) + +char *go_format_value (GOFormat const *fmt, double val); +void go_format_value_gstring (GOFormat const *format, GString *res, double val, + int col_width, GODateConventions const *date_conv); +gboolean go_format_eq (GOFormat const *a, GOFormat const *b); +GOFormat *go_format_inc_precision (GOFormat const *fmt); +GOFormat *go_format_dec_precision (GOFormat const *fmt); +GOFormat *go_format_toggle_1000sep (GOFormat const *fmt); +GOFormatFamily go_format_classify (GOFormat const *fmt, GOFormatDetails *details); + +typedef struct { + gchar const *symbol; + gchar const *description; + gboolean precedes; + gboolean has_space; +} GOFormatCurrency; + +/* Indexed by GOFormatFamily */ +extern char const * const * const go_format_builtins []; +extern GOFormatCurrency const go_format_currencies []; + +/*************************************************************************/ + +typedef struct { + int right_optional, right_spaces, right_req, right_allowed; + int left_spaces, left_req; + float scale; + gboolean rendered; + gboolean decimal_separator_seen; + gboolean group_thousands; + gboolean has_fraction; +} GONumberFormat; + +void go_render_number (GString *result, double number, GONumberFormat const *info); +#ifdef GOFFICE_WITH_LONG_DOUBLE +void go_render_numberl (GString *result, long double number, GONumberFormat const *info); +#endif + +/* Locale support routines */ +void go_set_untranslated_bools (void); +char const * go_setlocale (int category, char const *val); +GString const *format_get_currency (gboolean *precedes, gboolean *space_sep); +gboolean format_month_before_day (void); +char format_get_arg_sep (void); +char format_get_col_sep (void); +char format_get_row_sep (void); +GString const *format_get_thousand (void); +GString const *format_get_decimal (void); +char const * format_boolean (gboolean b); + +void number_format_init (void); +void number_format_shutdown (void); +void currency_date_format_init (void); +void currency_date_format_shutdown (void); + +extern char const * const day_short []; +extern char const * const day_long []; +extern char const * const month_short []; +extern char const * const month_long []; + +G_END_DECLS + +#endif /* GO_FORMAT_H */ diff --git a/lib/goffice-0.0.4/goffice/utils/go-geometry.c b/lib/goffice-0.0.4/goffice/utils/go-geometry.c new file mode 100644 index 0000000000..25f2018b54 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-geometry.c @@ -0,0 +1,219 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-geometry.c : A collection of geometry related functions. + * + * Copyright (C) 2005 Emmanuel Pacaud + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include +#include + +#define dist(x0, y0, x1, y1) sqrt(((x0) - (x1))*((x0) - (x1)) + ((y0) - (y1))*((y0) - (y1))) + +/** + * go_geometry_cartesian_to_polar: + * @x, @y: cartesian coordinates. + * @rho, @theta: polar coordinates. + * + * Convert cartesion coordinates to polar coordinates. + **/ +void +go_geometry_cartesian_to_polar (double x, double y, double *rho, double *theta) +{ + *rho = sqrt (x * x + y * y); + if (x != 0.) { + *theta = atan (y / x); + if (x < 0.) { + *theta += M_PI; + } + } else { + if (y < 0.) { + *theta = -M_PI/2.0; + } else { + *theta = M_PI/2.0; + } + } +} + +/** + * go_geometry_point_to_segment: + * @xp, @yp: point coordinates + * @xs, ys: segment strt coordinates: + * @w, @h: extent of segment. + * + * Computes the distance between a point and a segment. + **/ +double +go_geometry_point_to_segment (double xp, double yp, double xs, double ys, double w, double h) +{ + double c1, c2, b; + + c1 = w * (xp - xs) + h * (yp - ys); + if (c1 <= 0.0) + return dist (xp, yp, xs, ys); + + c2 = w * w + h * h; + if (c2 <= c1) + return dist (xp, yp, xs + w, ys + h); + + b = c1 / c2; + return dist (xp, yp, xs + b * w, ys + b * h); +} + +/** + * go_geometry_AABR_add: + * @aabr0: #GOGeometryAABR + * @aabr1: #GOGeometryAABR + * + * Computes the Axis Aligned Bounding Rectangle of aabr0 and aabr1, + * and stores result in aabr0. + **/ +void +go_geometry_AABR_add (GOGeometryAABR *aabr0, GOGeometryAABR const *aabr1) +{ + double min, max; + + min = MIN (aabr0->x, aabr1->x); + max = MAX (aabr0->x + aabr0->w, aabr1->x + aabr1->w); + aabr0->x = min; + aabr0->w = max - min; + + min = MIN (aabr0->y, aabr1->y); + max = MAX (aabr0->y + aabr0->h, aabr1->y + aabr1->h); + aabr0->y = min; + aabr0->h = max - min; +} + +/** + * go_geometry_OBR_to_AABR: + * @obr: #GOGeometryOBR + * @aabr: #GOGeometryAABR + * + * Returns an Axis Aligned Bouding Rectangle of obr. + **/ +void +go_geometry_OBR_to_AABR (GOGeometryOBR const *obr, GOGeometryAABR *aabr) +{ + double cos_alpha = cos (obr->alpha); + double sin_alpha = sin (obr->alpha); + + aabr->w = fabs (obr->w * cos_alpha) + fabs (obr->h * sin_alpha); + aabr->h = fabs (obr->w * sin_alpha) + fabs (obr->h * cos_alpha); + aabr->x = obr->x - aabr->w / 2.0 ; + aabr->y = obr->y - aabr->h / 2.0 ; +} + +/** + * go_geometry_test_OBR_overlap: + * @obr0: #GOGeometryOBR + * @obr1: #GOGeometryOBR + * + * Overlap test of Oriented Bounding Rectangles by the separating axis method. + **/ +gboolean +go_geometry_test_OBR_overlap (GOGeometryOBR const *obr0, GOGeometryOBR const *obr1) +{ + double TL, pa, pb; + double cos_delta, sin_delta; + double cos_alpha, sin_alpha; + double delta_x, delta_y; + double a00, a01, a10, a11; + + delta_x = obr1->x - obr0->x; + delta_y = obr1->y - obr0->y; + cos_delta = cos (obr1->alpha - obr0->alpha); + sin_delta = sin (obr1->alpha - obr0->alpha); + + cos_alpha = fabs (cos (obr0->alpha)); + sin_alpha = fabs (sin (obr0->alpha)); + + a00 = fabs (obr0->w / 2.0); + a01 = fabs (obr0->h / 2.0); + a10 = fabs (obr1->w / 2.0); + a11 = fabs (obr1->h / 2.0); + + /* Separating axis parallel to obr0->w */ + TL = fabs (delta_x * cos_alpha - delta_y * sin_alpha); + pa = a00; + pb = a10 * cos_delta + a11 * sin_delta; + if (TL > pa + pb) return FALSE; + + /* Separating axis parallel to obr->h */ + TL = fabs (delta_x * sin_alpha + delta_y * cos_alpha); + pa = a01; + pb = a10 * sin_delta + a11 * cos_delta; + if (TL > pa + pb) return FALSE; + + cos_alpha = fabs (cos (obr1->alpha)); + sin_alpha = fabs (sin (obr1->alpha)); + + /* Separating axis parallel to obr1->w */ + TL = fabs (delta_x * cos_alpha - delta_y * sin_alpha); + pa = a00 * cos_delta + a01 * sin_delta; + pb = a10; + if (TL > pa + pb) return FALSE; + + /* Separating axis parallel to obr1->h */ + TL = fabs (delta_x * sin_alpha + delta_y * cos_alpha); + pa = a00 * sin_delta + a01 * cos_delta; + pb = a11; + if (TL > pa + pb) return FALSE; + + return TRUE; +} + +/** + * go_geometry_get_rotation_type: + * @alpha: angle in radians + * + * Returns rotation type for handling of special angles (alpha = n * pi / 2) + **/ +GOGeometryRotationType +go_geometry_get_rotation_type (double alpha) +{ + unsigned index; + + if (alpha < 0 || alpha > 2 * M_PI) + alpha = alpha - 2 * M_PI * floor (alpha / (2 * M_PI)); + + if (fmod(alpha + GO_GEOMETRY_ANGLE_TOLERANCE, M_PI / 2.0) > 2 * GO_GEOMETRY_ANGLE_TOLERANCE) + return GO_ROTATE_FREE; + index = rint (2.0 * alpha / M_PI); + return index < GO_ROTATE_FREE ? index : GO_ROTATE_NONE; +} + +/** + * go_geometry_update_label_OBR: + * @obr: bouding rectangle of label + * @alpha: angle of axis + * @offset: minimum distance between label and axis + * @side: side of label with respect to axis + * + * Convenience routine that computes position of a label relative to an axis. + **/ +void +go_geometry_calc_label_position (GOGeometryOBR *obr, double alpha, double offset, GOGeometrySide side) +{ + GOGeometryAABR aabr; + + go_geometry_OBR_to_AABR (obr, &aabr); + + offset += (fabs (aabr.w * sin (alpha)) + fabs (aabr.h * cos (alpha))) / 2.0; + obr->x = offset * ((side == GO_SIDE_RIGHT) ? - sin (alpha) : + sin (alpha)); + obr->y = offset * ((side == GO_SIDE_RIGHT) ? + cos (alpha) : - cos (alpha)); +} diff --git a/lib/goffice-0.0.4/goffice/utils/go-geometry.h b/lib/goffice-0.0.4/goffice/utils/go-geometry.h new file mode 100644 index 0000000000..09eb362215 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-geometry.h @@ -0,0 +1,66 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-geometry.h : A collection of geometry related functions. + * + * Copyright (C) 2005 Emmanuel Pacaud (emmanuel.pacaud@univ-poitiers.fr) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GO_GEOMETRY_H +#define GO_GEOMETRY_H + +#include + +G_BEGIN_DECLS + +#define GO_GEOMETRY_ANGLE_TOLERANCE 1E-3 + +typedef enum { + GO_SIDE_LEFT, + GO_SIDE_RIGHT +} GOGeometrySide; + +typedef enum { + GO_ROTATE_NONE = 0, + GO_ROTATE_COUNTERCLOCKWISE = 1, + GO_ROTATE_UPSIDEDOWN = 2, + GO_ROTATE_CLOCKWISE = 3, + GO_ROTATE_FREE = 4 +} GOGeometryRotationType; + +typedef struct { + double x,y; /* Center */ + double w,h; /* Edges */ + double alpha; /* Angle from x axis to w edge, in radians */ +} GOGeometryOBR; + +#define GOGeometryAABR GogViewAllocation /* x, y: top left corner */ + +void go_geometry_cartesian_to_polar (double x, double y, double *rho, double *theta); +double go_geometry_point_to_segment (double xp, double yp, double xs, double ys, double w, double h); + +void go_geometry_AABR_add (GOGeometryAABR *aabr0, GOGeometryAABR const *aabr1); +void go_geometry_OBR_to_AABR (GOGeometryOBR const *obr, GOGeometryAABR *aabr); +gboolean go_geometry_test_OBR_overlap (GOGeometryOBR const *obr0, GOGeometryOBR const *obr1); + +GOGeometryRotationType + go_geometry_get_rotation_type (double angle); + +void go_geometry_calc_label_position (GOGeometryOBR *obr, double alpha, double offset, GOGeometrySide side); + +G_END_DECLS + +#endif /* GO_GEOMETRY_H */ diff --git a/lib/goffice/split/gutils.c b/lib/goffice-0.0.4/goffice/utils/go-glib-extras.c similarity index 67% rename from lib/goffice/split/gutils.c rename to lib/goffice-0.0.4/goffice/utils/go-glib-extras.c index 9b3909ccb6..3668892102 100644 --- a/lib/goffice/split/gutils.c +++ b/lib/goffice-0.0.4/goffice/utils/go-glib-extras.c @@ -1,23 +1,20 @@ /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * utils.c: Various utility routines that do not depend on the GUI of Gnumeric + * utils.c: Various utility routines that should have been in glib. * * Authors: * Miguel de Icaza (miguel@gnu.org) * Jukka-Pekka Iivonen (iivonen@iki.fi) * Zbigniew Chyla (cyba@gnome.pl) + * Morten Welinder (terra@gnome.org) */ -#include +#include +#include +#include "go-glib-extras.h" + #include -#include "gnumeric.h" -#include "gutils.h" - -#include "paths.h" - -//#include "sheet.h" -#include "ranges.h" -#include "mathfunc.h" -//#include "libgnumeric.h" +#include +#include #include #include @@ -28,10 +25,6 @@ #include #include #include -#include -#ifdef HAVE_FLOATINGPOINT_H -#include -#endif static void cb_hash_collect_keys (gpointer key, gpointer value, GSList **accum) @@ -40,7 +33,7 @@ cb_hash_collect_keys (gpointer key, gpointer value, GSList **accum) } /** - * gnm_hash_keys : + * go_hash_keys : * @hash : #GHashTable * * Collects an unordered list of the keys in @hash. @@ -49,7 +42,7 @@ cb_hash_collect_keys (gpointer key, gpointer value, GSList **accum) * The content has not additional references added **/ GSList * -gnm_hash_keys (GHashTable *hash) +go_hash_keys (GHashTable *hash) { GSList *accum = NULL; g_hash_table_foreach (hash, @@ -64,7 +57,7 @@ cb_hash_collect_values (gpointer key, gpointer value, GSList **accum) } /** - * gnm_hash_values : + * go_hash_values : * @hash : #GHashTable * * Collects an unordered list of the values in @hash. @@ -73,7 +66,7 @@ cb_hash_collect_values (gpointer key, gpointer value, GSList **accum) * The content has not additional references added **/ GSList * -gnm_hash_values (GHashTable *hash) +go_hash_values (GHashTable *hash) { GSList *accum = NULL; g_hash_table_foreach (hash, @@ -83,7 +76,7 @@ gnm_hash_values (GHashTable *hash) /***************************************************************************/ void -gnm_ptr_array_insert (GPtrArray *array, gpointer value, int index) +go_ptr_array_insert (GPtrArray *array, gpointer value, int index) { if (index < (int)array->len) { int i = array->len - 1; @@ -100,7 +93,7 @@ gnm_ptr_array_insert (GPtrArray *array, gpointer value, int index) } /** - * gnm_slist_create: + * go_slist_create: * @item1: First item. * * Creates a GList from NULL-terminated list of arguments. @@ -108,7 +101,7 @@ gnm_ptr_array_insert (GPtrArray *array, gpointer value, int index) * Return value: created list. **/ GSList * -gnm_slist_create (gpointer item1, ...) +go_slist_create (gpointer item1, ...) { va_list args; GSList *list = NULL; @@ -124,32 +117,32 @@ gnm_slist_create (gpointer item1, ...) } /** - * gnm_slist_map: + * go_slist_map: * @list : list of some items * @map_func : mapping function * **/ GSList * -gnm_slist_map (GSList const *list, GnmMapFunc map_func) +go_slist_map (GSList const *list, GOMapFunc map_func) { GSList *list_copy = NULL; - GNM_SLIST_FOREACH (list, void, value, - GNM_SLIST_PREPEND (list_copy, map_func (value)) + GO_SLIST_FOREACH (list, void, value, + GO_SLIST_PREPEND (list_copy, map_func (value)) ); return g_slist_reverse (list_copy); } /** - * gnm_slist_free_custom: + * go_slist_free_custom: * @list: list of some items * @free_func: function freeing list item * * Clears a list, calling @free_func for each list item. **/ void -gnm_slist_free_custom (GSList *list, GFreeFunc free_func) +go_slist_free_custom (GSList *list, GFreeFunc free_func) { GSList *l; @@ -160,7 +153,7 @@ gnm_slist_free_custom (GSList *list, GFreeFunc free_func) } gint -gnm_list_index_custom (GList *list, gpointer data, GCompareFunc cmp_func) +go_list_index_custom (GList *list, gpointer data, GCompareFunc cmp_func) { GList *l; gint i; @@ -175,7 +168,7 @@ gnm_list_index_custom (GList *list, gpointer data, GCompareFunc cmp_func) } /** - * gnm_list_free_custom: + * go_list_free_custom: * @list: list of some items * @free_func: function freeing list item * @@ -183,7 +176,7 @@ gnm_list_index_custom (GList *list, gpointer data, GCompareFunc cmp_func) * */ void -gnm_list_free_custom (GList *list, GFreeFunc free_func) +go_list_free_custom (GList *list, GFreeFunc free_func) { GList *l; @@ -194,7 +187,7 @@ gnm_list_free_custom (GList *list, GFreeFunc free_func) } /** - * gnm_strsplit_to_slist: + * go_strsplit_to_slist: * @string: String to split * @delimiter: Token delimiter * @@ -204,13 +197,15 @@ gnm_list_free_custom (GList *list, GFreeFunc free_func) * e_free_string_list(). **/ GSList * -gnm_strsplit_to_slist (gchar const *string, gchar const *delimiter) +go_strsplit_to_slist (gchar const *string, gchar delimiter) { gchar **token_v; GSList *string_list = NULL; + char buf[2] = { '\0', '\0' }; gint i; - token_v = g_strsplit (string, delimiter, 0); + buf[0] = delimiter; + token_v = g_strsplit (string, buf, 0); if (token_v != NULL) { for (i = 0; token_v[i] != NULL; i++) { string_list = g_slist_prepend (string_list, token_v[i]); @@ -223,7 +218,7 @@ gnm_strsplit_to_slist (gchar const *string, gchar const *delimiter) } gint -gnm_utf8_collate_casefold (const char *a, const char *b) +go_utf8_collate_casefold (const char *a, const char *b) { char *a2 = g_utf8_casefold (a, -1); char *b2 = g_utf8_casefold (b, -1); @@ -234,14 +229,14 @@ gnm_utf8_collate_casefold (const char *a, const char *b) } gint -gnm_ascii_strcase_equal (gconstpointer v1, gconstpointer v2) +go_ascii_strcase_equal (gconstpointer v1, gconstpointer v2) { return g_ascii_strcasecmp ((char const *) v1, (char const *)v2) == 0; } /* a char* hash function from ASU */ guint -gnm_ascii_strcase_hash (gconstpointer v) +go_ascii_strcase_hash (gconstpointer v) { unsigned const char *s = (unsigned const char *)v; unsigned const char *p; @@ -258,59 +253,6 @@ gnm_ascii_strcase_hash (gconstpointer v) return h /* % M */; } -#define GNUMERIC_VERSION "FIXME" -// FIXME -- why doesn't GNC_LIBDIR work? -static const char * gnumeric_data_dir = DATA_DIR; -static const char * gnumeric_lib_dir = DATA_DIR; - -char * -gnm_sys_data_dir (char const *subdir) -{ - if (subdir == NULL) - return (char *)gnumeric_data_dir; - return g_build_filename (gnumeric_data_dir, subdir, NULL); -} - -char * -gnm_sys_lib_dir (char const *subdir) -{ - return g_build_filename (gnumeric_lib_dir, subdir, NULL); -} - -#define GLADE_SUFFIX "glade" -#define PLUGIN_SUFFIX "plugins" - -char * -gnm_sys_glade_dir (void) -{ - return gnm_sys_data_dir (GLADE_SUFFIX); -} - -char * -gnm_sys_plugin_dir (void) -{ - return gnm_sys_lib_dir (PLUGIN_SUFFIX); -} - -char * -gnm_usr_dir (char const *subdir) -{ - char const *home_dir = g_get_home_dir (); - - if (!home_dir) - return NULL; - - return g_build_filename (home_dir, ".gnumeric", - GNUMERIC_VERSION, subdir, - NULL); -} - -char * -gnm_usr_plugin_dir (void) -{ - return gnm_usr_dir (PLUGIN_SUFFIX); -} - /* ------------------------------------------------------------------------- */ /* @@ -320,7 +262,7 @@ gnm_usr_plugin_dir (void) * Also adds quotes around the result. */ void -gnm_strescape (GString *target, char const *string) +go_strescape (GString *target, char const *string) { g_string_append_c (target, '"'); /* This loop should be UTF-8 safe. */ @@ -337,14 +279,14 @@ gnm_strescape (GString *target, char const *string) } /* - * The reverse operation of gnm_strescape. Returns a pointer to the + * The reverse operation of go_strescape. Returns a pointer to the * first char after the string on success or NULL on failure. * * First character of the string should be an ASCII character used * for quoting. */ const char * -gnm_strunescape (GString *target, const char *string) +go_strunescape (GString *target, const char *string) { char quote = *string++; size_t oldlen = target->len; @@ -371,13 +313,15 @@ gnm_strunescape (GString *target, const char *string) } void -gnm_string_append_gstring (GString *target, const GString *source) +go_string_append_gstring (GString *target, const GString *source) { g_string_append_len (target, source->str, source->len); } +/* ------------------------------------------------------------------------- */ + /** - * gnm_utf8_strcapital: + * go_utf8_strcapital: * @p: pointer to UTF-8 string * @len: length in bytes, or -1. * @@ -387,7 +331,7 @@ gnm_string_append_gstring (GString *target, const GString *source) * Return value: newly allocated string. **/ char * -gnm_utf8_strcapital (const char *p, ssize_t len) +go_utf8_strcapital (const char *p, ssize_t len) { const char *pend = (len < 0 ? NULL : p + len); GString *res = g_string_sized_new (len < 0 ? 1 : len + 1); @@ -426,23 +370,23 @@ gnm_utf8_strcapital (const char *p, ssize_t len) #undef DEBUG_CHUNK_ALLOCATOR -typedef struct _gnm_mem_chunk_freeblock gnm_mem_chunk_freeblock; -typedef struct _gnm_mem_chunk_block gnm_mem_chunk_block; +typedef struct _go_mem_chunk_freeblock go_mem_chunk_freeblock; +typedef struct _go_mem_chunk_block go_mem_chunk_block; -struct _gnm_mem_chunk_freeblock { - gnm_mem_chunk_freeblock *next; +struct _go_mem_chunk_freeblock { + go_mem_chunk_freeblock *next; }; -struct _gnm_mem_chunk_block { +struct _go_mem_chunk_block { gpointer data; int freecount, nonalloccount; - gnm_mem_chunk_freeblock *freelist; + go_mem_chunk_freeblock *freelist; #ifdef DEBUG_CHUNK_ALLOCATOR int id; #endif }; -struct _GnmMemChunk { +struct _GOMemChunk { char *name; size_t atom_size, user_atom_size, chunk_size, alignment; int atoms_per_block; @@ -459,30 +403,29 @@ struct _GnmMemChunk { }; -GnmMemChunk * -gnm_mem_chunk_new (char const *name, size_t user_atom_size, size_t chunk_size) +GOMemChunk * +go_mem_chunk_new (char const *name, size_t user_atom_size, size_t chunk_size) { int atoms_per_block; - GnmMemChunk *res; + GOMemChunk *res; size_t user_alignment, alignment, atom_size; size_t maxalign = 1 + ((sizeof (void *) - 1) | (sizeof (long) - 1) | - (sizeof (double) - 1) | - (sizeof (gnm_float) - 1)); + (sizeof (double) - 1)); /* * The alignment that the caller can expect is 2^(lowest_bit_in_size). * The fancy bit math computes this. Think it over. * * We don't go lower than pointer-size, so this always comes out as - * 4 or 8. (Or 16, if gnm_float is long double.) Sometimes, when - * user_atom_size is a multiple of 8, this alignment is bigger than - * really needed, but we don't know if the structure has elements - * with 8-byte alignment. In those cases we waste memory. + * 4 or 8. Sometimes, when user_atom_size is a multiple of 8, this + * alignment is bigger than really needed, but we don't know if the + * structure has elements with 8-byte alignment. In those cases we + * waste memory. */ user_alignment = ((user_atom_size ^ (user_atom_size - 1)) + 1) / 2; - alignment = MIN (MAX (user_alignment, sizeof (gnm_mem_chunk_block *)), maxalign); - atom_size = alignment + MAX (user_atom_size, sizeof (gnm_mem_chunk_freeblock)); + alignment = MIN (MAX (user_alignment, sizeof (go_mem_chunk_block *)), maxalign); + atom_size = alignment + MAX (user_atom_size, sizeof (go_mem_chunk_freeblock)); atoms_per_block = MAX (1, chunk_size / atom_size); chunk_size = atoms_per_block * atom_size; @@ -492,7 +435,7 @@ gnm_mem_chunk_new (char const *name, size_t user_atom_size, size_t chunk_size) chunk_size); #endif - res = g_new (GnmMemChunk, 1); + res = g_new (GOMemChunk, 1); res->alignment = alignment; res->name = g_strdup (name); res->user_atom_size = user_atom_size; @@ -509,7 +452,7 @@ gnm_mem_chunk_new (char const *name, size_t user_atom_size, size_t chunk_size) } void -gnm_mem_chunk_destroy (GnmMemChunk *chunk, gboolean expect_leaks) +go_mem_chunk_destroy (GOMemChunk *chunk, gboolean expect_leaks) { GSList *l; @@ -528,7 +471,7 @@ gnm_mem_chunk_destroy (GnmMemChunk *chunk, gboolean expect_leaks) int leaked = 0; for (l = chunk->blocklist; l; l = l->next) { - gnm_mem_chunk_block *block = l->data; + go_mem_chunk_block *block = l->data; leaked += chunk->atoms_per_block - (block->freecount + block->nonalloccount); } if (leaked) { @@ -538,7 +481,7 @@ gnm_mem_chunk_destroy (GnmMemChunk *chunk, gboolean expect_leaks) } for (l = chunk->blocklist; l; l = l->next) { - gnm_mem_chunk_block *block = l->data; + go_mem_chunk_block *block = l->data; g_free (block->data); g_free (block); } @@ -549,14 +492,14 @@ gnm_mem_chunk_destroy (GnmMemChunk *chunk, gboolean expect_leaks) } gpointer -gnm_mem_chunk_alloc (GnmMemChunk *chunk) +go_mem_chunk_alloc (GOMemChunk *chunk) { - gnm_mem_chunk_block *block; + go_mem_chunk_block *block; char *res; /* First try the freelist. */ if (chunk->freeblocks) { - gnm_mem_chunk_freeblock *res; + go_mem_chunk_freeblock *res; block = chunk->freeblocks->data; res = block->freelist; @@ -576,7 +519,7 @@ gnm_mem_chunk_alloc (GnmMemChunk *chunk) * allocated. */ } else { - block = g_new (gnm_mem_chunk_block, 1); + block = g_new (go_mem_chunk_block, 1); #ifdef DEBUG_CHUNK_ALLOCATOR block->id = chunk->blockid++; g_print ("Allocating new chunk %d for %s.\n", block->id, chunk->name); @@ -592,7 +535,7 @@ gnm_mem_chunk_alloc (GnmMemChunk *chunk) res = (char *)block->data + (chunk->atoms_per_block - block->nonalloccount--) * chunk->atom_size; - *((gnm_mem_chunk_block **)res) = block; + *((go_mem_chunk_block **)res) = block; if (block->nonalloccount == 0 && block->freecount == 0) { /* Block turned full -- remove it from freeblocks. */ @@ -603,19 +546,19 @@ gnm_mem_chunk_alloc (GnmMemChunk *chunk) } gpointer -gnm_mem_chunk_alloc0 (GnmMemChunk *chunk) +go_mem_chunk_alloc0 (GOMemChunk *chunk) { - gpointer res = gnm_mem_chunk_alloc (chunk); + gpointer res = go_mem_chunk_alloc (chunk); memset (res, 0, chunk->user_atom_size); return res; } void -gnm_mem_chunk_free (GnmMemChunk *chunk, gpointer mem) +go_mem_chunk_free (GOMemChunk *chunk, gpointer mem) { - gnm_mem_chunk_freeblock *fb = mem; - gnm_mem_chunk_block *block = - *((gnm_mem_chunk_block **)((char *)mem - chunk->alignment)); + go_mem_chunk_freeblock *fb = mem; + go_mem_chunk_block *block = + *((go_mem_chunk_block **)((char *)mem - chunk->alignment)); #if 0 /* @@ -657,15 +600,15 @@ gnm_mem_chunk_free (GnmMemChunk *chunk, gpointer mem) * from the chunk in the callback. */ void -gnm_mem_chunk_foreach_leak (GnmMemChunk *chunk, GFunc cb, gpointer user) +go_mem_chunk_foreach_leak (GOMemChunk *chunk, GFunc cb, gpointer user) { GSList *l, *leaks = NULL; for (l = chunk->blocklist; l; l = l->next) { - gnm_mem_chunk_block *block = l->data; + go_mem_chunk_block *block = l->data; if (chunk->atoms_per_block - (block->freecount + block->nonalloccount) > 0) { char *freed = g_new0 (char, chunk->atoms_per_block); - gnm_mem_chunk_freeblock *fb = block->freelist; + go_mem_chunk_freeblock *fb = block->freelist; int i; while (fb) { @@ -690,7 +633,7 @@ gnm_mem_chunk_foreach_leak (GnmMemChunk *chunk, GFunc cb, gpointer user) } int -gnm_str_compare (void const *x, void const *y) +go_str_compare (void const *x, void const *y) { if (x == NULL || y == NULL) { if (x == y) @@ -704,10 +647,11 @@ gnm_str_compare (void const *x, void const *y) const char * -gnm_guess_encoding (const char *raw, size_t len, const char *user_guess, - char **utf8_str) +go_guess_encoding (const char *raw, size_t len, const char *user_guess, + char **utf8_str) { int try; + gboolean debug = FALSE; g_return_val_if_fail (raw != NULL, NULL); @@ -719,18 +663,32 @@ gnm_guess_encoding (const char *raw, size_t len, const char *user_guess, switch (try) { case 1: guess = user_guess; break; case 2: g_get_charset (&guess); break; - case 3: guess = "ASCII"; break; - case 4: guess = "ISO-8859-1"; break; - case 5: guess = "UTF-8"; break; + case 3: { + xmlCharEncoding enc = + xmlDetectCharEncoding ((const unsigned char*)raw, len); + if (enc == XML_CHAR_ENCODING_NONE) + guess = NULL; + else + guess = xmlGetCharEncodingName (enc); + break; + } + case 4: guess = "ASCII"; break; + case 5: guess = "ISO-8859-1"; break; + case 6: guess = "UTF-8"; break; default: return NULL; } if (!guess) continue; + if (debug) + g_print ("Trying %s as encoding.\n", guess); + utf8_data = g_convert (raw, len, "UTF-8", guess, NULL, NULL, &error); if (!error) { + if (debug) + g_print ("Guessed %s as encoding.\n", guess); if (utf8_str) *utf8_str = utf8_data; else @@ -743,34 +701,34 @@ gnm_guess_encoding (const char *raw, size_t len, const char *user_guess, } /** - * gnm_get_real_name : + * go_get_real_name : * * Return a utf8 encoded string with the current user name. * Caller should _NOT_ free the result. **/ char const * -gnm_get_real_name (void) +go_get_real_name (void) { /* We will leak this. */ - static char *gnm_real_name = NULL; + static char *go_real_name = NULL; - if (gnm_real_name == NULL) { + if (go_real_name == NULL) { char const *name = getenv ("NAME"); if (name == NULL) name = g_get_real_name (); if (name == NULL) name = g_get_user_name (); if (name != NULL) - (void) gnm_guess_encoding (name, strlen (name), - NULL, &gnm_real_name); + (void) go_guess_encoding (name, strlen (name), + NULL, &go_real_name); else - gnm_real_name = (char *)"unknown"; + go_real_name = (char *)"unknown"; } - return gnm_real_name; + return go_real_name; } /** - * gnm_destroy_password : + * go_destroy_password : * * Overwrite a string holding a password. This is a separate routine to * ensure that the compiler does not try to outsmart us. @@ -778,37 +736,110 @@ gnm_get_real_name (void) * Note: this does not free the memory. **/ void -gnm_destroy_password (char *passwd) +go_destroy_password (char *passwd) { memset (passwd, 0, strlen (passwd)); } -/* ------------------------------------------------------------------------- */ -static GList *timers_stack = NULL; +/** + * go_object_toggle: toggle a boolean object property. + * + **/ +void +go_object_toggle (gpointer object, const gchar *property_name) +{ + gboolean value = FALSE; + GParamSpec *pspec; + + g_return_if_fail (G_IS_OBJECT (object)); + g_return_if_fail (property_name != NULL); + + pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (object), property_name); + if (!pspec || + !G_IS_PARAM_SPEC_BOOLEAN (pspec) || + ((pspec->flags & (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)) != + G_PARAM_READWRITE)) { + g_warning ("%s: object class `%s' has no boolean property named `%s' that can be both read and written.", + G_STRFUNC, + G_OBJECT_TYPE_NAME (object), + property_name); + return; + } + + /* And now, the actual action. */ + g_object_get (object, property_name, &value, NULL); + g_object_set (object, property_name, !value, NULL); +} + +/* + * Collect all rw properties and their values. + */ +GSList * +go_object_properties_collect (GObject *obj) +{ + GSList *res = NULL; + guint n; + GParamSpec **pspecs = + g_object_class_list_properties (G_OBJECT_GET_CLASS (obj), + &n); + + while (n--) { + GParamSpec *pspec = pspecs[n]; + if ((pspec->flags & (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)) == + G_PARAM_READWRITE) { + GValue *value = g_new0 (GValue, 1); + g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec)); + g_object_get_property (obj, pspec->name, value); + res = g_slist_prepend (res, value); + res = g_slist_prepend (res, pspec); + } + } + + g_free (pspecs); + return res; +} void -gnm_time_counter_push (void) +go_object_properties_apply (GObject *obj, GSList *props, gboolean changed_only) { - GTimer *timer; + GValue current = { 0, }; - timer = g_timer_new (); - timers_stack = g_list_prepend (timers_stack, timer); + for (; props; props = props->next->next) { + GParamSpec *pspec = props->data; + const GValue *value = props->next->data; + gboolean doit; + + if (changed_only) { + g_value_init (¤t, + G_PARAM_SPEC_VALUE_TYPE (pspec)); + g_object_get_property (obj, pspec->name, ¤t); + doit = g_param_values_cmp (pspec, ¤t, value); +#if 0 + g_print ("%2d: old: [%s] new: [%s]\n", + g_param_values_cmp (pspec, ¤t, value), + g_strdup_value_contents (value), + g_strdup_value_contents (¤t)); +#endif + g_value_unset (¤t); + } else + doit = TRUE; + + if (doit) + g_object_set_property (obj, pspec->name, value); + } } -gdouble -gnm_time_counter_pop (void) +void +go_object_properties_free (GSList *props) { - GTimer *timer; - gdouble ret_val; + GSList *l; - g_assert (timers_stack != NULL); + for (l = props; l; l = l->next->next) { + GValue *value = l->next->data; + g_value_unset (value); + g_free (value); + } - timer = (GTimer *) timers_stack->data; - timers_stack = g_list_remove (timers_stack, timers_stack->data); - ret_val = g_timer_elapsed (timer, NULL); - g_timer_destroy (timer); - - return ret_val; + g_slist_free (props); } - diff --git a/lib/goffice-0.0.4/goffice/utils/go-glib-extras.h b/lib/goffice-0.0.4/goffice/utils/go-glib-extras.h new file mode 100644 index 0000000000..6ee6cc13ed --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-glib-extras.h @@ -0,0 +1,103 @@ +#ifndef GO_GLIB_EXTRAS_H +#define GO_GLIB_EXTRAS_H + +#include +#include +#include +#include + +G_BEGIN_DECLS + +/* Misc convenience routines that would be nice to have in glib */ + +typedef gpointer (*GOMapFunc) (gpointer value); + +void go_ptr_array_insert (GPtrArray *array, gpointer value, int index); + +GSList *go_hash_keys (GHashTable *hash); +GSList *go_hash_values (GHashTable *hash); + +GSList *go_slist_map (GSList const *list, GOMapFunc map_func); +GSList *go_slist_create (gpointer item1, ...); +void go_slist_free_custom (GSList *list, GFreeFunc free_func); +#define go_string_slist_copy(list) go_slist_map (list, (GOMapFunc) g_strdup) +GSList *go_strsplit_to_slist (char const *str, gchar delimiter); +#define GO_SLIST_FOREACH(list,valtype,val,stmnt) \ +G_STMT_START { \ + GSList const *go_l; \ + for (go_l = (list); go_l != NULL; go_l = go_l->next) { \ + valtype *val = go_l->data; \ + stmnt \ + ; \ + } \ +} G_STMT_END +#define GO_SLIST_PREPEND(list,item) \ + (list = g_slist_prepend (list, item)) +#define GO_SLIST_APPEND(list,item) \ + (list = g_slist_append (list, item)) +#define GO_SLIST_REMOVE(list,item) \ + (list = g_slist_remove (list, item)) +#define GO_SLIST_CONCAT(list_a,list_b) \ + (list_a = g_slist_concat (list_a, list_b)) +#define GO_SLIST_REVERSE(list) \ + (list = g_slist_reverse (list)) +#define GO_SLIST_SORT(list,cmp_func) \ + (list = g_slist_sort (list, cmp_func)) + +gint go_list_index_custom (GList *list, gpointer data, GCompareFunc cmp_func); +void go_list_free_custom (GList *list, GFreeFunc free_func); +#define GO_LIST_FOREACH(list,valtype,val,stmnt) \ +G_STMT_START { \ + GList *go_l; \ + for (go_l = (list); go_l != NULL; go_l = go_l->next) { \ + valtype *val = go_l->data; \ + stmnt \ + ; \ + } \ +} G_STMT_END +#define GO_LIST_PREPEND(list,item) \ + (list = g_list_prepend (list, item)) +#define GO_LIST_APPEND(list,item) \ + (list = g_list_append (list, item)) +#define GO_LIST_REMOVE(list,item) \ + (list = g_list_remove (list, item)) +#define GO_LIST_CONCAT(list_a,list_b) \ + (list_a = g_list_concat (list_a, list_b)) +#define GO_LIST_REVERSE(list) \ + (list = g_list_reverse (list)) +#define GO_LIST_SORT(list,cmp_func) \ + (list = g_list_sort (list, cmp_func)) + +int go_str_compare (void const *x, void const *y); +guint go_ascii_strcase_hash (gconstpointer v); +gint go_ascii_strcase_equal (gconstpointer v, gconstpointer v2); +gint go_utf8_collate_casefold (char const *a, char const *b); +char *go_utf8_strcapital (char const *p, ssize_t len); +void go_strescape (GString *target, char const *str); +char const *go_strunescape (GString *target, char const *str); +void go_string_append_gstring (GString *target, const GString *src); +char const *go_guess_encoding (char const *raw, size_t len, + char const *user_guess, + char **utf8_str); + +char const *go_get_real_name (void); +void go_destroy_password (char *passwd); + +GOMemChunk *go_mem_chunk_new (char const *, size_t, size_t); +void go_mem_chunk_destroy (GOMemChunk *, gboolean); +gpointer go_mem_chunk_alloc (GOMemChunk *); +gpointer go_mem_chunk_alloc0 (GOMemChunk *); +void go_mem_chunk_free (GOMemChunk *, gpointer); +void go_mem_chunk_foreach_leak (GOMemChunk *, GFunc, gpointer); + +void go_object_toggle (gpointer object, + const gchar *property_name); +GSList *go_object_properties_collect (GObject *obj); +void go_object_properties_apply (GObject *obj, + GSList *props, + gboolean changed_only); +void go_object_properties_free (GSList *props); + +G_END_DECLS + +#endif /* GO_GLIB_EXTRAS_H */ diff --git a/lib/goffice/utils/go-gradient.c b/lib/goffice-0.0.4/goffice/utils/go-gradient.c similarity index 70% rename from lib/goffice/utils/go-gradient.c rename to lib/goffice-0.0.4/goffice/utils/go-gradient.c index d58f1ff20a..f0512cec38 100644 --- a/lib/goffice/utils/go-gradient.c +++ b/lib/goffice-0.0.4/goffice/utils/go-gradient.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -24,7 +24,7 @@ #include "go-color.h" #ifdef WITH_GTK -#include +#include #include #endif @@ -32,56 +32,40 @@ #include -static const struct { - GOGradientDirection dir; - char const *name; -} grad_dir_names[] = { - { GO_GRADIENT_N_TO_S, "n-s" }, - { GO_GRADIENT_S_TO_N, "s-n" }, - { GO_GRADIENT_N_TO_S_MIRRORED, "n-s-mirrored" }, - { GO_GRADIENT_S_TO_N_MIRRORED, "s-n-mirrored" }, - { GO_GRADIENT_W_TO_E, "w-e" }, - { GO_GRADIENT_E_TO_W, "e-w" }, - { GO_GRADIENT_W_TO_E_MIRRORED, "w-e-mirrored" }, - { GO_GRADIENT_E_TO_W_MIRRORED, "e-w-mirrored" }, - { GO_GRADIENT_NW_TO_SE, "nw-se" }, - { GO_GRADIENT_SE_TO_NW, "se-nw" }, - { GO_GRADIENT_NW_TO_SE_MIRRORED, "nw-se-mirrored" }, - { GO_GRADIENT_SE_TO_NW_MIRRORED, "se-nw-mirrored" }, - { GO_GRADIENT_NE_TO_SW, "ne-sw" }, - { GO_GRADIENT_SW_TO_NE, "sw-ne" }, - { GO_GRADIENT_SW_TO_NE_MIRRORED, "sw-ne-mirrored" }, - { GO_GRADIENT_NE_TO_SW_MIRRORED, "ne-sw-mirrored" }, +char const *grad_dir_names[] = { + "n-s", + "s-n", + "n-s-mirrored", + "s-n-mirrored", + "w-e", + "e-w", + "w-e-mirrored", + "e-w-mirrored", + "nw-se", + "se-nw", + "nw-se-mirrored", + "se-nw-mirrored", + "ne-sw", + "sw-ne", + "sw-ne-mirrored", + "ne-sw-mirrored" }; GOGradientDirection go_gradient_dir_from_str (char const *name) { unsigned i; - GOGradientDirection ret = GO_GRADIENT_N_TO_S; - - for (i = 0; i < G_N_ELEMENTS (grad_dir_names); i++) { - if (strcmp (grad_dir_names[i].name, name) == 0) { - ret = grad_dir_names[i].dir; - break; - } - } - return ret; + for (i = 0; i < GO_GRADIENT_MAX; i++) + if (strcmp (grad_dir_names[i], name) == 0) + return i; + return GO_GRADIENT_N_TO_S; } char const * go_gradient_dir_as_str (GOGradientDirection dir) { - unsigned i; - char const *ret = "pattern"; - - for (i = 0; i < G_N_ELEMENTS (grad_dir_names); i++) { - if (grad_dir_names[i].dir == dir) { - ret = grad_dir_names[i].name; - break; - } - } - return ret; + return (dir < 0 || dir >= GO_GRADIENT_MAX) ? "gradient" + : grad_dir_names[dir]; } #ifdef WITH_GTK @@ -97,8 +81,8 @@ go_gradient_selector (GOColor start, GOColor end) ArtGradientStop stops[2]; w = go_combo_pixmaps_new (4); - for (i = 0; i < G_N_ELEMENTS (grad_dir_names); i++) { - GOGradientDirection dir = grad_dir_names[i].dir; + for (i = 0; i < GO_GRADIENT_MAX; i++) { + GOGradientDirection dir = (GOGradientDirection)i; pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, W, H); gdk_pixbuf_fill (pixbuf, 0); /* in case the fill colours have alpha = 0 */ render = art_render_new (0, 0, W, H, diff --git a/lib/goffice/utils/go-gradient.h b/lib/goffice-0.0.4/goffice/utils/go-gradient.h similarity index 93% rename from lib/goffice/utils/go-gradient.h rename to lib/goffice-0.0.4/goffice/utils/go-gradient.h index f81253b8ed..5b1f4aaed5 100644 --- a/lib/goffice/utils/go-gradient.h +++ b/lib/goffice-0.0.4/goffice/utils/go-gradient.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_GRADIENT_H @@ -48,7 +48,8 @@ typedef enum { GO_GRADIENT_NE_TO_SW, GO_GRADIENT_SW_TO_NE, GO_GRADIENT_SW_TO_NE_MIRRORED, - GO_GRADIENT_NE_TO_SW_MIRRORED + GO_GRADIENT_NE_TO_SW_MIRRORED, + GO_GRADIENT_MAX } GOGradientDirection; GOGradientDirection go_gradient_dir_from_str (const gchar *name); diff --git a/lib/goffice-0.0.4/goffice/utils/go-libxml-extras.c b/lib/goffice-0.0.4/goffice/utils/go-libxml-extras.c new file mode 100644 index 0000000000..66926a2e10 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-libxml-extras.c @@ -0,0 +1,305 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-libxml-extras.c: stuff that should have been in libxml2. + * + * Authors: + * Daniel Veillard + * Miguel de Icaza + * Jody Goldberg + * Jukka-Pekka Iivonen + */ +#include +#include "go-libxml-extras.h" +#include "go-color.h" + +#include +#include +#include +#include + +#ifndef HAVE_GLIB26 +#include "goffice/glib24_26-compat.h" +#endif + +#define CC2XML(s) ((xmlChar const *)(s)) +#define CXML2C(s) ((char const *)(s)) + + +/** + * Like xmlParseFile, but faster. Does not accept compressed files. + * See http://bugzilla.gnome.org/show_bug.cgi?id=168414 + * + * Note: this reads the entire file into memory and should therefore + * not be used for user-supplied files. + **/ +xmlDocPtr +go_xml_parse_file (char const *filename) +{ + xmlDocPtr result = NULL; + gchar *contents; + gsize length; + + if (g_file_get_contents (filename, &contents, &length, NULL)) { + result = xmlParseMemory (contents, length); + g_free (contents); + } + + return result; +} + +/* Get an xmlChar * value for a node carried as an attibute + * result must be xmlFree + */ +xmlChar * +xml_node_get_cstr (xmlNodePtr node, char const *name) +{ + if (name != NULL) + return xmlGetProp (node, CC2XML (name)); + /* in libxml1 would return NULL + * in libxml2 would return "" + */ + if (node->xmlChildrenNode != NULL) + return xmlNodeGetContent (node); + return NULL; +} +void +xml_node_set_cstr (xmlNodePtr node, char const *name, char const *val) +{ + if (name) + xmlSetProp (node, CC2XML (name), CC2XML (val)); + else + xmlNodeSetContent (node, CC2XML (val)); +} + +gboolean +xml_node_get_bool (xmlNodePtr node, char const *name, gboolean *val) +{ + xmlChar *buf = xml_node_get_cstr (node, name); + if (buf == NULL) + return FALSE; + + *val = (!strcmp (CXML2C (buf), "1") + || 0 == g_ascii_strcasecmp (CXML2C (buf), "true")); + g_free (buf); + return TRUE; +} + +void +xml_node_set_bool (xmlNodePtr node, char const *name, gboolean val) +{ + xml_node_set_cstr (node, name, val ? "true" : "false"); +} + +gboolean +xml_node_get_int (xmlNodePtr node, char const *name, int *val) +{ + xmlChar *buf; + char *end; + gboolean ok; + long l; + + buf = xml_node_get_cstr (node, name); + if (buf == NULL) + return FALSE; + + errno = 0; /* strto(ld) sets errno, but does not clear it. */ + *val = l = strtol (CXML2C (buf), &end, 10); + ok = (CXML2C (buf) != end) && *end == 0 && errno != ERANGE && (*val == l); + xmlFree (buf); + + return ok; +} + +void +xml_node_set_int (xmlNodePtr node, char const *name, int val) +{ + char str[4 * sizeof (int)]; + sprintf (str, "%d", val); + xml_node_set_cstr (node, name, str); +} + +gboolean +xml_node_get_double (xmlNodePtr node, char const *name, double *val) +{ + xmlChar *buf; + char *end; + gboolean ok; + + buf = xml_node_get_cstr (node, name); + if (buf == NULL) + return FALSE; + + errno = 0; /* strto(ld) sets errno, but does not clear it. */ + *val = strtod (CXML2C (buf), &end); + ok = (CXML2C (buf) != end) && *end == 0 && errno != ERANGE; + xmlFree (buf); + + return ok; +} + +void +xml_node_set_double (xmlNodePtr node, char const *name, double val, + int precision) +{ + char str[101 + DBL_DIG]; + + if (precision < 0 || precision > DBL_DIG) + precision = DBL_DIG; + + if (fabs (val) < 1e9 && fabs (val) > 1e-5) + g_snprintf (str, 100 + DBL_DIG, "%.*g", precision, val); + else + g_snprintf (str, 100 + DBL_DIG, "%f", val); + + xml_node_set_cstr (node, name, str); +} + + +gboolean +xml_node_get_gocolor (xmlNodePtr node, char const *name, GOColor *res) +{ + xmlChar *color; + int r, g, b; + + color = xmlGetProp (node, CC2XML (name)); + if (color == NULL) + return FALSE; + if (sscanf (CXML2C (color), "%X:%X:%X", &r, &g, &b) == 3) { + r >>= 8; + g >>= 8; + b >>= 8; + *res = RGBA_TO_UINT (r,g,b,0xff); + xmlFree (color); + return TRUE; + } + xmlFree (color); + return FALSE; +} + +void +xml_node_set_gocolor (xmlNodePtr node, char const *name, GOColor val) +{ + unsigned r, g, b; + char str[4 * sizeof (val)]; + + UINT_TO_RGB (val, &r, &g, &b); + sprintf (str, "%X:%X:%X", r, g, b); + xml_node_set_cstr (node, name, str); +} + +gboolean +xml_node_get_enum (xmlNodePtr node, char const *name, GType etype, gint *val) +{ + GEnumClass *eclass = G_ENUM_CLASS (g_type_class_peek (etype)); + GEnumValue *ev; + xmlChar *s; + int i; + + s = xmlGetProp (node, CC2XML (name)); + if (s == NULL) + return FALSE; + + ev = g_enum_get_value_by_name (eclass, CXML2C (s)); + if (!ev) ev = g_enum_get_value_by_nick (eclass, CXML2C (s)); + if (!ev && xml_node_get_int (node, name, &i)) + /* Check that the value is valid. */ + ev = g_enum_get_value (eclass, i); + xmlFree (s); + if (!ev) return FALSE; + + *val = ev->value; + return TRUE; +} + +void +xml_node_set_enum (xmlNodePtr node, char const *name, GType etype, gint val) +{ + GEnumClass *eclass = G_ENUM_CLASS (g_type_class_peek (etype)); + GEnumValue *ev = g_enum_get_value (eclass, val); + + if (ev) + xml_node_set_cstr (node, name, ev->value_name); + else + g_warning ("Invalid value %d for type %s", + val, g_type_name (etype)); +} + +/*************************************************************************/ + +xmlNode * +e_xml_get_child_by_name (xmlNode const *parent, char const *child_name) +{ + xmlNode *child; + + g_return_val_if_fail (parent != NULL, NULL); + g_return_val_if_fail (child_name != NULL, NULL); + + for (child = parent->xmlChildrenNode; child != NULL; child = child->next) { + if (xmlStrcmp (child->name, CC2XML (child_name)) == 0) { + return child; + } + } + return NULL; +} + +xmlNode * +e_xml_get_child_by_name_no_lang (xmlNode const *parent, char const *name) +{ + xmlNodePtr node; + + g_return_val_if_fail (parent != NULL, NULL); + g_return_val_if_fail (name != NULL, NULL); + + for (node = parent->xmlChildrenNode; node != NULL; node = node->next) { + xmlChar *lang; + + if (node->name == NULL || strcmp (CXML2C (node->name), name) != 0) { + continue; + } + lang = xmlGetProp (node, CC2XML ("xml:lang")); + if (lang == NULL) { + return node; + } + xmlFree (lang); + } + + return NULL; +} + + +xmlNode * +e_xml_get_child_by_name_by_lang (xmlNode const *parent, gchar const *name) +{ + xmlNodePtr best_node = NULL, node; + gint best_lang_score = INT_MAX; + char const * const *langs = g_get_language_names (); + + g_return_val_if_fail (parent != NULL, NULL); + g_return_val_if_fail (name != NULL, NULL); + + for (node = parent->xmlChildrenNode; node != NULL; node = node->next) { + xmlChar *lang; + + if (node->name == NULL || strcmp (CXML2C (node->name), name) != 0) + continue; + + lang = xmlGetProp (node, CC2XML ("xml:lang")); + if (lang != NULL) { + gint i; + + for (i = 0; langs[i] != NULL && i < best_lang_score; i++) { + if (strcmp (langs[i], CXML2C (lang)) == 0) { + best_node = node; + best_lang_score = i; + } + } + } else if (best_node == NULL) + best_node = node; + + xmlFree (lang); + if (best_lang_score == 0) + return best_node; + } + + return best_node; +} diff --git a/lib/goffice-0.0.4/goffice/utils/go-libxml-extras.h b/lib/goffice-0.0.4/goffice/utils/go-libxml-extras.h new file mode 100644 index 0000000000..8348c91c0c --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-libxml-extras.h @@ -0,0 +1,52 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-libxml-extras.h : + * + * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ +#ifndef GO_LIBXML_EXTRAS_H +#define GO_LIBXML_EXTRAS_H + +#include +#include +#include +#include + +G_BEGIN_DECLS + +xmlDocPtr go_xml_parse_file (const char *filename); + +xmlChar *xml_node_get_cstr (xmlNodePtr node, char const *name); +void xml_node_set_cstr (xmlNodePtr node, char const *name, char const *val); +gboolean xml_node_get_bool (xmlNodePtr node, char const *name, gboolean *result); +void xml_node_set_bool (xmlNodePtr node, char const *name, gboolean val); +gboolean xml_node_get_int (xmlNodePtr node, char const *name, int *result); +void xml_node_set_int (xmlNodePtr node, char const *name, int val); +gboolean xml_node_get_double (xmlNodePtr node, char const *name, double *result); +void xml_node_set_double (xmlNodePtr node, char const *name, double val, int precision); +gboolean xml_node_get_gocolor (xmlNodePtr node, char const *name, GOColor *result); +void xml_node_set_gocolor (xmlNodePtr node, char const *name, GOColor val); +gboolean xml_node_get_enum (xmlNodePtr node, char const *name, GType etype, gint *val); +void xml_node_set_enum (xmlNodePtr node, char const *name, GType etype, gint val); + +xmlNode *e_xml_get_child_by_name (xmlNode const *tree, char const *name); +xmlNode *e_xml_get_child_by_name_no_lang (xmlNode const *tree, char const *name); +xmlNode *e_xml_get_child_by_name_by_lang (xmlNode const *tree, char const *name); + +G_END_DECLS + +#endif /* GO_LIBXML_EXTRAS_H */ diff --git a/lib/goffice/utils/go-line.c b/lib/goffice-0.0.4/goffice/utils/go-line.c similarity index 64% rename from lib/goffice/utils/go-line.c rename to lib/goffice-0.0.4/goffice/utils/go-line.c index db33ad0740..dd4e7149f6 100644 --- a/lib/goffice/utils/go-line.c +++ b/lib/goffice-0.0.4/goffice/utils/go-line.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -23,9 +23,10 @@ #include "go-color.h" #include "go-line.h" +#include "go-math.h" #ifdef WITH_GTK -#include +#include #endif #include @@ -312,4 +313,142 @@ go_line_dash_selector (GOLineDashType default_type) } return w; } -#endif /*WITH_GTK*/ + +ArtBpath* +go_line_build_bpath (double const *x, double const *y, int n) +{ + ArtBpath *path; + int i, j, start, cur, nb; + double *lengths, *angles, curx, cury, t, t0, a0, a1; + + g_return_val_if_fail (n > 0, NULL); + + path = art_new (ArtBpath, n + 1); + lengths = g_new (double, n - 1); + angles = g_new (double, n - 1); + + j = -1; + for (start = nb = cur = i = 0; i <= n; i++) { + if ((i == n) || isnan (x[i]) || !go_finite (x[i]) || (fabs (x[i]) == DBL_MAX) || + isnan (y[i]) || !go_finite (y[i]) || (fabs (y[i]) == DBL_MAX)) { + /* invalid or infinite points interrupt the curve; DBL_MAX is also filtered + because this value is returned when mapping a negative value to a logarithmic + axis. */ + switch (nb) { + case 0: /* invalid point: don't draw anything */ + break; + case 1: /* isolated point: don't draw anything */ + j--; + break; + case 2: /* two points: draw a linear segment*/ + path[start++].code = ART_MOVETO_OPEN; + path[start++].code = ART_LINETO; + cur = start; + break; + default: /* draw a bezier spline */ + path[start].code = ART_MOVETO_OPEN; + while (start < j) { + curx = path[start + 1].x3 - path[start].x3; + cury = path[start + 1].y3 - path[start].y3; + lengths[start] = sqrt (curx * curx + cury * cury) / 4.; + angles[start] = atan2 (cury, curx); + start++ ; + path[start].code = ART_CURVETO; + } + start++; + a0 = angles[cur]; + a1 = angles[cur + 1]; + if (fabs (a1 - a0) > M_PI) + a1 -= (a1 > a0)? 2. * M_PI: -2. * M_PI; + t = (a0 * lengths[cur + 1] + a1 * lengths[cur]) + / (lengths[cur] + lengths[cur + 1]); + t0 = (a0 * 3. - t) / 2.; + cur++; + path[cur].x1 = path[cur - 1].x3 + lengths[cur - 1] * cos (t0); + path[cur].y1 = path[cur - 1].y3 + lengths[cur - 1] * sin (t0); + path[cur].x2 = path[cur].x3 - lengths[cur - 1] * cos (t); + path[cur].y2 = path[cur].y3 - lengths[cur - 1] * sin (t); + cur++; + t0 = t; + a0 = a1; + while (cur < j) { + a1 = angles[cur]; + if (fabs (a1 - a0) > M_PI) + a1 -= (a1 > a0)? 2. * M_PI: -2. * M_PI; + t = (a0 * lengths[cur] + a1 * lengths[cur - 1]) + / (lengths[cur] + lengths[cur - 1]); + path[cur].x1 = path[cur - 1].x3 + lengths[cur - 1] * cos (t0); + path[cur].y1 = path[cur - 1].y3 + lengths[cur - 1] * sin (t0); + path[cur].x2 = path[cur].x3 - lengths[cur - 1] * cos (t); + path[cur].y2 = path[cur].y3 - lengths[cur - 1] * sin (t); + t0 = t; + a0 = a1; + cur++; + } + path[cur].x1 = path[cur - 1].x3 + lengths[cur - 1] * cos (t0); + path[cur].y1 = path[cur - 1].y3 + lengths[cur - 1] * sin (t0); + t = (a0 * 3. - t0) / 2.; + path[cur].x2 = path[cur].x3 - lengths[cur - 1] * cos (t); + path[cur].y2 = path[cur].y3 - lengths[cur - 1] * sin (t); + cur++; + } + nb = 0; + } else if (!nb || ((path[j].x3 != x[i]) || (path[j].y3 != y[i]))) { + j++; + path[j].x3 = x[i]; + path[j].y3 = y[i]; + nb++; + } + } + + path[start].code = ART_END; + g_free (lengths); + g_free (angles); + return path; +} + +ArtVpath* +go_line_build_vpath (double const *x, double const *y, int n) +{ + ArtVpath *path; + int i, j, start, nb; + + g_return_val_if_fail (n > 0, NULL); + + path = art_new (ArtVpath, n + 1); + + j = -1; + for (start = nb = i = 0; i <= n; i++) { + if ((i == n) || isnan (x[i]) || !go_finite (x[i]) || (fabs (x[i]) == DBL_MAX) || + isnan (y[i]) || !go_finite (y[i]) || (fabs (y[i]) == DBL_MAX)) { + /* invalid or infinite points interrupt the path; DBL_MAX is also filtered + because this value is returned when mapping a negative value to a logarithmic + axis. */ + switch (nb) { + case 0: /* invalid point: don't draw anything */ + break; + case 1: /* isolated point: don't draw anything */ + j--; + break; + default: + path[start].code = ART_MOVETO_OPEN; + while (start < j) { + start++ ; + path[start].code = ART_LINETO; + } + start++; + } + nb = 0; + } else if (!nb || ((path[j].x != x[i]) || (path[j].y != y[i]))) { + j++; + path[j].x = x[i]; + path[j].y = y[i]; + nb++; + } + } + + path[start].code = ART_END; + return path; +} + +#endif /* WITH_GTK */ diff --git a/lib/goffice/utils/go-line.h b/lib/goffice-0.0.4/goffice/utils/go-line.h similarity index 86% rename from lib/goffice/utils/go-line.h rename to lib/goffice-0.0.4/goffice/utils/go-line.h index 77d9400651..1f155919df 100644 --- a/lib/goffice/utils/go-line.h +++ b/lib/goffice-0.0.4/goffice/utils/go-line.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -50,6 +50,9 @@ ArtVpath *go_line_dash_vpath (ArtVpath const *path, ArtVpathDash const *dash, gpointer go_line_dash_selector (GOLineDashType default_type); +ArtBpath *go_line_build_bpath (double const *x, double const *y, int n); +ArtVpath *go_line_build_vpath (double const *x, double const *y, int n); + G_END_DECLS -#endif +#endif /* GO_LINE_H */ diff --git a/lib/goffice/utils/go-marker.c b/lib/goffice-0.0.4/goffice/utils/go-marker.c similarity index 81% rename from lib/goffice/utils/go-marker.c rename to lib/goffice-0.0.4/goffice/utils/go-marker.c index 19c20d7511..38627a8b97 100644 --- a/lib/goffice/utils/go-marker.c +++ b/lib/goffice-0.0.4/goffice/utils/go-marker.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -25,8 +25,12 @@ #include #ifdef WITH_GTK -#include -#include +#include +#include +#include +#include +#endif + #include #include #include @@ -34,9 +38,6 @@ #include #include #include -#include -#include -#endif #include #include @@ -212,47 +213,30 @@ static ArtVpath const hourglass_path[] = { typedef struct { char const *name; + char const *str; ArtVpath const *outline_path; ArtVpath const *fill_path; } MarkerShape; - -static MarkerShape const marker_shapes[GO_MARKER_MAX] = { - { N_("none"), NULL, NULL}, - { N_("square"), square_path, square_path}, - { N_("diamond"), diamond_path, diamond_path}, - { N_("triangle down"), triangle_down_path, triangle_down_path}, - { N_("triangle up"), triangle_up_path, triangle_up_path}, - { N_("triangle right"), triangle_right_path, triangle_right_path}, - { N_("triangle left"), triangle_left_path, triangle_left_path}, - { N_("circle"), circle_path, circle_path}, - { N_("x"), x_path, square_path}, - { N_("cross"), cross_path, square_path}, - { N_("asterisk"), asterisk_path, square_path}, - { N_("bar"), bar_path, bar_path}, - { N_("half bar"), half_bar_path, half_bar_path}, - { N_("butterfly"), butterfly_path, butterfly_path}, - { N_("hourglass"), hourglass_path, hourglass_path} -}; -static struct { - GOMarkerShape shape; - char const *name; -} marker_shape_names[] = { - { GO_MARKER_NONE, "none" }, - { GO_MARKER_SQUARE, "square" }, - { GO_MARKER_DIAMOND, "diamond" }, - { GO_MARKER_TRIANGLE_DOWN, "triangle-down" }, - { GO_MARKER_TRIANGLE_UP, "triangle-up" }, - { GO_MARKER_TRIANGLE_RIGHT, "triangle-right" }, - { GO_MARKER_TRIANGLE_LEFT, "triangle-left" }, - { GO_MARKER_CIRCLE, "circle" }, - { GO_MARKER_X, "x" }, - { GO_MARKER_CROSS, "cross" }, - { GO_MARKER_ASTERISK, "asterisk" }, - { GO_MARKER_BAR, "bar" }, - { GO_MARKER_HALF_BAR, "half-bar" }, - { GO_MARKER_BUTTERFLY, "butterfly" }, - { GO_MARKER_HOURGLASS, "hourglass" } +#define MAKE_MARKER_SHAPE(name, str, path) {name, str, path, path} +#define MAKE_MARKER_SQUARED(name, str, path) {name, str, path, square_path} + +static MarkerShape const marker_shapes[GO_MARKER_MAX] = { + MAKE_MARKER_SHAPE ( N_("none"), "none", NULL), + MAKE_MARKER_SHAPE ( N_("square"), "square", square_path), + MAKE_MARKER_SHAPE ( N_("diamond"), "diamond", diamond_path), + MAKE_MARKER_SHAPE ( N_("triangle down"), "triangle-down", triangle_down_path), + MAKE_MARKER_SHAPE ( N_("triangle up"), "triangle-up", triangle_up_path), + MAKE_MARKER_SHAPE ( N_("triangle right"), "triangle-right", triangle_right_path), + MAKE_MARKER_SHAPE ( N_("triangle left"), "triangle-left", triangle_left_path), + MAKE_MARKER_SHAPE ( N_("circle"), "circle", circle_path), + MAKE_MARKER_SQUARED ( N_("x"), "x", x_path), + MAKE_MARKER_SQUARED ( N_("cross"), "cross", cross_path), + MAKE_MARKER_SQUARED ( N_("asterisk"), "asterisk", asterisk_path), + MAKE_MARKER_SHAPE ( N_("bar"), "bar", bar_path), + MAKE_MARKER_SHAPE ( N_("half bar"), "half-bar", half_bar_path), + MAKE_MARKER_SHAPE ( N_("butterfly"), "butterfly", butterfly_path), + MAKE_MARKER_SHAPE ( N_("hourglass"), "hourglass", hourglass_path) }; static GObjectClass *marker_parent_klass; @@ -337,26 +321,27 @@ marker_create_pixbuf_with_size (GOMarker *marker, guint size) } static void -marker_update_pixbuf (GOMarker * marker) +marker_free_pixbuf (GOMarker * marker) { if (marker->pixbuf != NULL) { - g_object_unref (G_OBJECT (marker->pixbuf)); + g_object_unref (marker->pixbuf); marker->pixbuf = NULL; } +} +static void +marker_update_pixbuf (GOMarker * marker) +{ marker->pixbuf = marker_create_pixbuf_with_size (marker, marker->size); } +#else +# define marker_free_pixbuf(marker) do {} while(0) #endif /* WITH_GTK */ static void go_marker_finalize (GObject *obj) { - GOMarker * marker = GO_MARKER (obj); - - if (marker->pixbuf != NULL) { - g_object_unref (G_OBJECT (marker->pixbuf)); - marker->pixbuf = NULL; - } + marker_free_pixbuf(GO_MARKER (obj)); marker_parent_klass->finalize (obj); } @@ -368,7 +353,9 @@ go_marker_init (GOMarker * marker) marker->outline_color = RGBA_BLACK; marker->fill_color = RGBA_WHITE; marker->size = MARKER_DEFAULT_SIZE; +#ifdef WITH_GTK marker->pixbuf = NULL; +#endif marker->scale = 1.; } @@ -380,23 +367,20 @@ go_marker_class_init (GObjectClass *gobject_klass) } GOMarkerShape -go_marker_shape_from_str (char const *name) +go_marker_shape_from_str (char const *str) { - unsigned i = G_N_ELEMENTS (marker_shape_names); - while (i-- > 0) - if (g_ascii_strcasecmp (marker_shape_names[i].name, name) == 0) - return marker_shape_names[i].shape; + unsigned i; + for (i = 0; i < GO_MARKER_MAX; i++) + if (g_ascii_strcasecmp (marker_shapes[i].str, str) == 0) + return (GOMarkerShape)i; return GO_MARKER_NONE; } char const * go_marker_shape_as_str (GOMarkerShape shape) { - unsigned i = G_N_ELEMENTS (marker_shape_names); - while (i-- > 0) - if (marker_shape_names[i].shape == shape) - return marker_shape_names[i].name; - return "pattern"; + return (shape < 0 || shape >= GO_MARKER_MAX) ? "pattern" + : marker_shapes[shape].str; } void @@ -409,7 +393,7 @@ go_marker_get_paths (GOMarker * marker, } #ifdef WITH_GTK -GdkPixbuf const * +GdkPixbuf * go_marker_get_pixbuf (GOMarker * marker, double scale) { g_return_val_if_fail (IS_GO_MARKER (marker), NULL); @@ -422,7 +406,7 @@ go_marker_get_pixbuf (GOMarker * marker, double scale) return marker->pixbuf; } -GdkPixbuf const * +GdkPixbuf * go_marker_get_pixbuf_with_size (GOMarker *marker, guint size) { g_return_val_if_fail (IS_GO_MARKER (marker), NULL); @@ -441,15 +425,10 @@ void go_marker_set_shape (GOMarker *marker, GOMarkerShape shape) { g_return_if_fail (IS_GO_MARKER (marker)); - if (marker->shape == shape) return; - marker->shape = shape; - if (marker->pixbuf != NULL) { - g_object_unref (marker->pixbuf); - marker->pixbuf = NULL; - } + marker_free_pixbuf(marker); } GOColor @@ -464,12 +443,8 @@ go_marker_set_outline_color (GOMarker *marker, GOColor color) g_return_if_fail (IS_GO_MARKER (marker)); if (marker->outline_color == color) return; - marker->outline_color = color; - if (marker->pixbuf != NULL) { - g_object_unref (marker->pixbuf); - marker->pixbuf = NULL; - } + marker_free_pixbuf(marker); } GOColor @@ -482,14 +457,10 @@ void go_marker_set_fill_color (GOMarker *marker, GOColor color) { g_return_if_fail (IS_GO_MARKER (marker)); - if (marker->fill_color == color) return; marker->fill_color = color; - if (marker->pixbuf != NULL) { - g_object_unref (marker->pixbuf); - marker->pixbuf = NULL; - } + marker_free_pixbuf(marker); } int @@ -509,14 +480,10 @@ go_marker_set_size (GOMarker *marker, int size) { g_return_if_fail (IS_GO_MARKER (marker)); g_return_if_fail (size >= 0); - if (marker->size == size) return; marker->size = size; - if (marker->pixbuf != NULL) { - g_object_unref (marker->pixbuf); - marker->pixbuf = NULL; - } + marker_free_pixbuf(marker); } void @@ -533,11 +500,13 @@ go_marker_assign (GOMarker *dst, GOMarker const *src) dst->outline_color = src->outline_color; dst->fill_color = src->fill_color; +#ifdef WITH_GTK if (dst->pixbuf != NULL) - g_object_unref (G_OBJECT (src->pixbuf)); + g_object_unref (src->pixbuf); dst->pixbuf = src->pixbuf; if (dst->pixbuf != NULL) g_object_ref (dst->pixbuf); +#endif } GOMarker * @@ -561,14 +530,11 @@ GSF_CLASS (GOMarker, go_marker, /*---------------------------------------------------------------------------*/ #ifdef WITH_GTK -#define SELECTOR_PIXBUF_SIZE 20 -#define SELECTOR_MARKER_SIZE 15 - gpointer go_marker_selector (GOColor outline_color, GOColor fill_color, GOMarkerShape default_shape) { - static GOMarkerShape elements[] = { + static const GOMarkerShape elements[] = { GO_MARKER_NONE, GO_MARKER_TRIANGLE_UP, GO_MARKER_BUTTERFLY, GO_MARKER_TRIANGLE_LEFT, GO_MARKER_DIAMOND, GO_MARKER_TRIANGLE_RIGHT, GO_MARKER_BAR, GO_MARKER_TRIANGLE_DOWN, GO_MARKER_HOURGLASS, @@ -578,11 +544,8 @@ go_marker_selector (GOColor outline_color, GOColor fill_color, }; unsigned i; - gboolean is_auto; GOComboPixmaps *w; GOMarker *marker = go_marker_new (); - GOMarkerShape shape; - GdkPixbuf const *pixbuf; go_marker_set_fill_color (marker, fill_color); go_marker_set_outline_color (marker, outline_color); @@ -590,20 +553,23 @@ go_marker_selector (GOColor outline_color, GOColor fill_color, w = go_combo_pixmaps_new (4); for (i = 0; i < G_N_ELEMENTS (elements); i++) { - shape = elements[i]; - is_auto = (shape == GO_MARKER_MAX); + GOMarkerShape shape = elements[i]; + gboolean is_auto = (shape == GO_MARKER_MAX); + GdkPixbuf *pixbuf; + go_marker_set_shape (marker, is_auto ? default_shape : shape); pixbuf = go_marker_get_pixbuf (marker, 1.0); if (pixbuf == NULL) /* handle none */ pixbuf = new_blank_pixbuf (marker, marker->size); else /* add_element absorbs ref */ - g_object_ref (G_OBJECT (pixbuf)); + g_object_ref (pixbuf); if (is_auto) { /* xgettext : this will appear as 'Automatic (shapename)' */ char *name = g_strdup_printf (_("Automatic (%s)"), _(marker_shapes [default_shape].name)); go_combo_pixmaps_add_element (w, pixbuf, -default_shape, name); + g_free (name); } else go_combo_pixmaps_add_element (w, pixbuf, shape, _(marker_shapes [shape].name)); diff --git a/lib/goffice/utils/go-marker.h b/lib/goffice-0.0.4/goffice/utils/go-marker.h similarity index 92% rename from lib/goffice/utils/go-marker.h rename to lib/goffice-0.0.4/goffice/utils/go-marker.h index 244379af3e..8f0b7e3801 100644 --- a/lib/goffice/utils/go-marker.h +++ b/lib/goffice-0.0.4/goffice/utils/go-marker.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -66,7 +66,7 @@ struct _GOMarker { #ifdef WITH_GTK GdkPixbuf *pixbuf; #else - gpointer pixbuf; + gpointer pixbuf_placeholder; #endif }; @@ -93,8 +93,8 @@ GOMarker * go_marker_dup (GOMarker *src); GOMarker * go_marker_new (void); #ifdef WITH_GTK -GdkPixbuf const *go_marker_get_pixbuf (GOMarker *m, double scale); -GdkPixbuf const *go_marker_get_pixbuf_with_size (GOMarker *m, guint size); +GdkPixbuf *go_marker_get_pixbuf (GOMarker *m, double scale); +GdkPixbuf *go_marker_get_pixbuf_with_size (GOMarker *m, guint size); gpointer go_marker_selector (GOColor outline_color, GOColor fill_color, diff --git a/lib/goffice/gui-utils/go-marshalers.list b/lib/goffice-0.0.4/goffice/utils/go-marshalers.list similarity index 98% rename from lib/goffice/gui-utils/go-marshalers.list rename to lib/goffice-0.0.4/goffice/utils/go-marshalers.list index 90930728b8..6bf0ef6274 100644 --- a/lib/goffice/gui-utils/go-marshalers.list +++ b/lib/goffice-0.0.4/goffice/utils/go-marshalers.list @@ -21,5 +21,6 @@ # NONE deprecated alias for VOID # BOOL deprecated alias for BOOLEAN BOOLEAN:OBJECT -VOID:INT,BOOLEAN,BOOLEAN,BOOLEAN BOOLEAN:POINTER +STRING:POINTER +VOID:INT,BOOLEAN,BOOLEAN,BOOLEAN diff --git a/lib/goffice-0.0.4/goffice/utils/go-math.c b/lib/goffice-0.0.4/goffice/utils/go-math.c new file mode 100644 index 0000000000..4af3b53cd0 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-math.c @@ -0,0 +1,616 @@ +/* + * go-math.c: Mathematical functions. + * + * Authors: + * Morten Welinder + */ + +#include +#include "go-math.h" +#include +#include +#include +#include +#include +#include + +#if defined (HAVE_IEEEFP_H) || defined (HAVE_IEEE754_H) +/* Make sure we have this symbol defined, since the existance of either + header file implies it. */ +#ifndef IEEE_754 +#define IEEE_754 +#endif +#endif + +#ifdef HAVE_SUNMATH_H +#include +#endif + +#ifdef HAVE_IEEEFP_H +#include +#endif +#ifdef HAVE_IEEE754_H +#include +#endif + +#define ML_UNDERFLOW (GO_EPSILON * GO_EPSILON) + +double go_nan; +double go_pinf; +double go_ninf; + +void +go_math_init (void) +{ + const char *bug_url = "http://bugzilla.gnome.org/enter_bug.cgi?product=libgoffice"; + char *old_locale; + double d; +#ifdef SIGFPE + void (*signal_handler)(int) = (void (*)(int))signal (SIGFPE, SIG_IGN); +#endif + + go_pinf = HUGE_VAL; + if (go_pinf > 0 && !go_finite (go_pinf)) + goto have_pinf; + +#if defined(INFINITY) && defined(__STDC_IEC_559__) + go_pinf = INFINITY; + if (go_pinf > 0 && !go_finite (go_pinf)) + goto have_pinf; +#endif + + /* Try sscanf with fixed strings. */ + old_locale = setlocale (LC_ALL, "C"); + if (sscanf ("Inf", "%lf", &d) != 1 && + sscanf ("+Inf", "%lf", &d) != 1) + d = 0; + setlocale (LC_ALL, old_locale); + go_pinf = d; + if (go_pinf > 0 && !go_finite (go_pinf)) + goto have_pinf; + + /* Try overflow. */ + go_pinf = (HUGE_VAL * HUGE_VAL); + if (go_pinf > 0 && !go_finite (go_pinf)) + goto have_pinf; + + g_error ("Failed to generate +Inf. Please report at %s", + bug_url); + abort (); + + have_pinf: + /* ---------------------------------------- */ + + go_ninf = -go_pinf; + if (go_ninf < 0 && !go_finite (go_ninf)) + goto have_ninf; + + g_error ("Failed to generate -Inf. Please report at %s", + bug_url); + abort (); + + have_ninf: + /* ---------------------------------------- */ + + go_nan = go_pinf * 0.0; + if (isnan (go_nan)) + goto have_nan; + + /* Try sscanf with fixed strings. */ + old_locale = setlocale (LC_ALL, "C"); + if (sscanf ("NaN", "%lf", &d) != 1 && + sscanf ("NAN", "%lf", &d) != 1 && + sscanf ("+NaN", "%lf", &d) != 1 && + sscanf ("+NAN", "%lf", &d) != 1) + d = 0; + setlocale (LC_ALL, old_locale); + go_nan = d; + if (isnan (go_nan)) + goto have_nan; + + go_nan = go_pinf / go_pinf; + if (isnan (go_nan)) + goto have_nan; + + g_error ("Failed to generate NaN. Please report at %s", + bug_url); + abort (); + + have_nan: + +#ifdef GOFFICE_WITH_LONG_DOUBLE + go_nanl = go_nan; + go_pinfl = go_pinf; + go_ninfl = go_ninf; + if (!(isnanl (go_nanl) && + go_pinfl > 0 && !finitel (go_pinfl) && + go_ninfl < 0 && !finitel (go_ninfl))) { + g_error ("Failed to generate long double NaN/+Inf/-Inf. Please report at %s", + bug_url); + abort (); + } +#endif + +#ifdef SIGFPE + signal (SIGFPE, signal_handler); +#endif + return; +} + +/* + * In preparation for truncation, make the value a tiny bit larger (seen + * absolutely). This makes ROUND (etc.) behave a little closer to what + * people want, even if it is a bit bogus. + */ +double +go_add_epsilon (double x) +{ + if (!go_finite (x) || x == 0) + return x; + else { + int exp; + double mant = frexp (fabs (x), &exp); + double absres = ldexp (mant + DBL_EPSILON, exp); + return (x < 0) ? -absres : absres; + } +} + +double +go_sub_epsilon (double x) +{ + if (!go_finite (x) || x == 0) + return x; + else { + int exp; + double mant = frexp (fabs (x), &exp); + double absres = ldexp (mant - DBL_EPSILON, exp); + return (x < 0) ? -absres : absres; + } +} + +double +go_fake_floor (double x) +{ + return (x >= 0) + ? floor (go_add_epsilon (x)) + : floor (go_sub_epsilon (x)); +} + +double +go_fake_ceil (double x) +{ + return (x >= 0) + ? ceil (go_sub_epsilon (x)) + : ceil (go_add_epsilon (x)); +} + +double +go_fake_round (double x) +{ + double y = go_fake_floor (fabs (x) + 0.5); + return (x < 0) ? -y : y; +} + +double +go_fake_trunc (double x) +{ + return (x >= 0) + ? floor (go_add_epsilon (x)) + : -floor (go_add_epsilon (-x)); +} + +double +go_rint (double x) +{ + double y = floor (fabs (x) + 0.5); + return (x < 0) ? -y : y; +} + +int +go_finite (double x) +{ + /* What a circus! */ +#ifdef HAVE_FINITE + return finite (x); +#elif defined(HAVE_ISFINITE) + return isfinite (x); +#elif defined(FINITE) + return FINITE (x); +#else + x = fabs (x); + return x < HUGE_VAL; +#endif +} + +double +go_pow2 (int n) +{ + g_assert (FLT_RADIX == 2); + return ldexp (1.0, n); +} + +double +go_pow10 (int n) +{ + static const double fast[] = { + 1e-20, 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, + 1e-10, 1e-09, 1e-08, 1e-07, 1e-06, 1e-05, 1e-04, 1e-03, 1e-02, 1e-01, + 1e+0, + 1e+01, 1e+02, 1e+03, 1e+04, 1e+05, 1e+06, 1e+07, 1e+08, 1e+09, 1e+10, + 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16, 1e+17, 1e+18, 1e+19, 1e+20 + }; + + if (n >= -20 && n <= 20) + return (fast + 20)[n]; + + return pow (10.0, n); +} + +#ifdef GOFFICE_SUPPLIED_LOG1P +double +log1p (double x) +{ + double term, sum; + int i; + + if (fabs (x) > 0.25) + return log (x + 1); + + i = 0; + sum = 0; + term = -1; + while (fabs (term) > fabs (sum) * DBL_EPSILON) { + term *= -x; + i++; + sum += term / i; + } + + return sum; +} +#endif + +#ifdef GOFFICE_SUPPLIED_EXPM1 +double +expm1 (double x) +{ + double y, a = fabs (x); + + if (a > 1e-8) { + y = exp (x) - 1; + if (a > 0.697) + return y; /* negligible cancellation */ + } else { + if (a < DBL_EPSILON) + return x; + /* Taylor expansion, more accurate in this range */ + y = (x / 2 + 1) * x; + } + + /* Newton step for solving log(1 + y) = x for y : */ + y -= (1 + y) * (log1p (y) - x); + return y; +} +#endif + +#ifdef GOFFICE_SUPPLIED_ASINH +double +asinh (double x) +{ + double y = fabs (x); + double r = log1p (y * y / (hypot (y, 1.0) + 1.0) + y); + return (x >= 0) ? r : -r; +} +#endif + +#ifdef GOFFICE_SUPPLIED_ACOSH +double +acosh (double x) +{ + double xm1 = x - 1; + return log1p (xm1 + sqrt (xm1) * sqrt (x + 1.0)); +} +#endif + +#ifdef GOFFICE_SUPPLIED_ATANH +double +atanh (double x) +{ + double y = fabs (x); + double r = -0.5 * log1p (-(y + y) / (1.0 + y)); + return (x >= 0) ? r : -r; +} +#endif + +/* ------------------------------------------------------------------------- */ + +#ifdef GOFFICE_WITH_LONG_DOUBLE + +long double go_nanl; +long double go_pinfl; +long double go_ninfl; + +long double +go_pow2l (int n) +{ +#ifdef GOFFICE_SUPPLIED_LDEXPL + return powl (2.0L, n); +#else + g_assert (FLT_RADIX == 2); + return ldexpl (1.0L, n); +#endif +} + +long double +go_pow10l (int n) +{ + static const long double fast[] = { + 1e-20L, 1e-19L, 1e-18L, 1e-17L, 1e-16L, 1e-15L, 1e-14L, 1e-13L, 1e-12L, 1e-11L, + 1e-10L, 1e-09L, 1e-08L, 1e-07L, 1e-06L, 1e-05L, 1e-04L, 1e-03L, 1e-02L, 1e-01L, + 1e+0L, + 1e+01L, 1e+02L, 1e+03L, 1e+04L, 1e+05L, 1e+06L, 1e+07L, 1e+08L, 1e+09L, 1e+10L, + 1e+11L, 1e+12L, 1e+13L, 1e+14L, 1e+15L, 1e+16L, 1e+17L, 1e+18L, 1e+19L, 1e+20L + }; + + if (n >= -20 && n <= 20) + return (fast + 20)[n]; + + return powl (10.0L, n); +} + +/* + * In preparation for truncation, make the value a tiny bit larger (seen + * absolutely). This makes ROUND (etc.) behave a little closer to what + * people want, even if it is a bit bogus. + */ +long double +go_add_epsilonl (long double x) +{ + if (!go_finitel (x) || x == 0) + return x; + else { + int exp; + long double mant = frexpl (fabsl (x), &exp); + long double absres = ldexpl (mant + LDBL_EPSILON, exp); + return (x < 0) ? -absres : absres; + } +} + +long double +go_sub_epsilonl (long double x) +{ + if (!go_finitel (x) || x == 0) + return x; + else { + int exp; + long double mant = frexpl (fabsl (x), &exp); + long double absres = ldexpl (mant - LDBL_EPSILON, exp); + return (x < 0) ? -absres : absres; + } +} + +long double +go_fake_floorl (long double x) +{ + return (x >= 0) + ? floorl (go_add_epsilonl (x)) + : floorl (go_sub_epsilonl (x)); +} + +long double +go_fake_ceill (long double x) +{ + return (x >= 0) + ? ceill (go_sub_epsilonl (x)) + : ceill (go_add_epsilonl (x)); +} + +long double +go_fake_roundl (long double x) +{ + long double y = go_fake_floorl (fabsl (x) + 0.5L); + return (x < 0) ? -y : y; +} + +long double +go_fake_truncl (long double x) +{ + return (x >= 0) + ? floorl (go_add_epsilonl (x)) + : -floorl (go_add_epsilonl (-x)); +} + +#ifdef GOFFICE_SUPPLIED_LDEXPL +long double +ldexpl (long double x, int exp) +{ + if (!finitel (x) || x == 0) + return x; + else { + long double res = x * go_pow2l (exp); + if (finitel (res)) + return res; + else { + errno = ERANGE; + return (x > 0) ? go_pinfl : go_ninfl; + } + } +} +#endif + +#ifdef GOFFICE_SUPPLIED_FREXPL +long double +frexpl (long double x, int *exp) +{ + long double l2x; + + if (!finitel (x) || x == 0) { + *exp = 0; + return x; + } + + l2x = logl (fabsl (x)) / logl (2); + *exp = (int)floorl (l2x); + + /* + * Now correct the result and adjust things that might have gotten + * off-by-one due to rounding. + */ + x /= go_pow2l (*exp); + if (fabsl (x) >= 1.0) + x /= 2, (*exp)++; + else if (fabsl (x) < 0.5) + x *= 2, (*exp)--; + + return x; +} +#endif + +#ifndef HAVE_STRTOLD +long double +strtold (char const *str, char **end) +{ +#if defined(HAVE_STRING_TO_DECIMAL) && defined(HAVE_DECIMAL_TO_QUADRUPLE) + long double res; + decimal_record dr; + enum decimal_string_form form; + decimal_mode dm; + fp_exception_field_type excp; + char *echar; + + string_to_decimal ((char **)&str, INT_MAX, 0, + &dr, &form, &echar); + if (end) *end = (char *)str; + + if (form == invalid_form) { + errno = EINVAL; + return 0.0L; + } + + dm.rd = fp_nearest; + decimal_to_quadruple (&res, &dm, &dr, &excp); + if (excp & ((1 << fp_overflow) | (1 << fp_underflow))) + errno = ERANGE; + return res; +#else + char *myend; + long double res; + int count; + + if (end == 0) end = &myend; + (void) strtod (str, end); + if (str == *end) + return 0.0L; + + errno = 0; + count = sscanf (str, "%Lf", &res); + if (count == 1) + return res; + + /* Now what? */ + *end = (char *)str; + errno = ERANGE; + return 0.0; +#endif +} +#endif + +#ifdef GOFFICE_SUPPLIED_MODFL +long double +modfl (long double x, long double *iptr) +{ + if (isnanl (x)) + return *iptr = x; + else if (finitel (x)) { + if (x >= 0) + return x - (*iptr = floorl (x)); + else + return x - (*iptr = -floorl (-x)); + } else { + *iptr = x; + return 0; + } +} +#endif + +#endif + +/* ------------------------------------------------------------------------- */ + +void +go_continued_fraction (double val, int max_denom, int *res_num, int *res_denom) +{ + int n1, n2, d1, d2; + double x, y; + + if (val < 0) { + go_continued_fraction (-val, max_denom, res_num, res_denom); + *res_num = -*res_num; + return; + } + + n1 = 0; d1 = 1; + n2 = 1; d2 = 0; + + x = val; + y = 1; + + do { + int a = (int) (x / y); + double newy = x - a * y; + int n3, d3; + + if ((n2 && a > (INT_MAX - n1) / n2) || + (d2 && a > (INT_MAX - d1) / d2) || + a * d2 + d1 > max_denom) { + *res_num = n2; + *res_denom = d2; + return; + } + + n3 = a * n2 + n1; + d3 = a * d2 + d1; + + x = y; + y = newy; + + n1 = n2; n2 = n3; + d1 = d2; d2 = d3; + } while (y > 1e-10); + + *res_num = n2; + *res_denom = d2; +} + + +void +go_stern_brocot (double val, int max_denom, int *res_num, int *res_denom) +{ + int an = 0, ad = 1; + int bn = 1, bd = 1; + int n, d; + double sp, delta; + + while ((d = ad + bd) <= max_denom) { + sp = 1e-5 * d;/* Quick and dirty, do adaptive later */ + n = an + bn; + delta = val * d - n; + if (delta > sp) { + an = n; + ad = d; + } else if (delta < -sp) { + bn = n; + bd = d; + } else { + *res_num = n; + *res_denom = d; + return; + } + } + if (bd > max_denom || fabs (val * ad - an) < fabs (val * bd - bn)) { + *res_num = an; + *res_denom = ad; + } else { + *res_num = bn; + *res_denom = bd; + } +} diff --git a/lib/goffice-0.0.4/goffice/utils/go-math.h b/lib/goffice-0.0.4/goffice/utils/go-math.h new file mode 100644 index 0000000000..dd6e074e40 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-math.h @@ -0,0 +1,94 @@ +#ifndef __GO_MATH_H +#define __GO_MATH_H + +#include +#include +#include + +G_BEGIN_DECLS + +/* ------------------------------------------------------------------------- */ + +void go_math_init (void); +void go_continued_fraction (double val, int max_denom, int *res_num, int *res_denom); +void go_stern_brocot (double val, int max_denom, int *res_num, int *res_denom); + +/* ------------------------------------------------------------------------- */ + +extern double go_nan; +extern double go_pinf; +extern double go_ninf; + +double go_add_epsilon (double x); +double go_sub_epsilon (double x); +double go_fake_floor (double x); +double go_fake_ceil (double x); +double go_fake_round (double x); +double go_fake_trunc (double x); +double go_rint (double x); + +int go_finite (double x); +double go_pow2 (int n); +double go_pow10 (int n); + +/* + * We provide working versions of these functions for doubles. + */ +#ifdef GOFFICE_SUPPLIED_ASINH +double asinh (double x); +#endif +#ifdef GOFFICE_SUPPLIED_ACOSH +double acosh (double x); +#endif +#ifdef GOFFICE_SUPPLIED_ATANH +double atanh (double x); +#endif +#ifdef GOFFICE_SUPPLIED_LOG1P +double log1p (double x); +#endif +#ifdef GOFFICE_SUPPLIED_EXPM1 +double expm1 (double x); +#endif + +/* ------------------------------------------------------------------------- */ + +#ifdef GOFFICE_WITH_LONG_DOUBLE + +extern long double go_nanl; +extern long double go_pinfl; +extern long double go_ninfl; + +long double go_add_epsilonl (long double x); +long double go_sub_epsilonl (long double x); +long double go_fake_floorl (long double x); +long double go_fake_ceill (long double x); +long double go_fake_roundl (long double x); +long double go_fake_truncl (long double x); + +#define go_finitel finitel +long double go_pow2l (int n); +long double go_pow10l (int n); + +/* + * We provide working versions of these functions for long doubles. + */ +#ifdef GOFFICE_SUPPLIED_LDEXPL +long double ldexpl (long double x, int exp); +#endif +#ifdef GOFFICE_SUPPLIED_FREXPL +long double frexpl (long double x, int *exp); +#endif +#ifdef GOFFICE_SUPPLIED_STRTOLD +long double strtold (const char *, char **); +#endif +#ifdef GOFFICE_SUPPLIED_MODFL +long double modfl (long double x, long double *iptr); +#endif + +#endif + +/* ------------------------------------------------------------------------- */ + +G_END_DECLS + +#endif /* __GO_MATH_H */ diff --git a/lib/goffice/utils/go-pattern.c b/lib/goffice-0.0.4/goffice/utils/go-pattern.c similarity index 71% rename from lib/goffice/utils/go-pattern.c rename to lib/goffice-0.0.4/goffice/utils/go-pattern.c index 787297aaf7..2273ab7675 100644 --- a/lib/goffice/utils/go-pattern.c +++ b/lib/goffice-0.0.4/goffice/utils/go-pattern.c @@ -15,15 +15,18 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include +#include +#include #include "go-pattern.h" #include "go-color.h" + #ifdef WITH_GTK -#include +#include #include #endif @@ -31,121 +34,59 @@ #include #include +#define CC2XML(s) ((const xmlChar *)(s)) + typedef struct { - int const x, y; - char const pattern[8]; + char const *name; + char const *str; + guint8 pattern[8]; } GOPatternSpec; static GOPatternSpec const go_patterns [] = { - { 8, 8, /* Solid */ - { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }, - { 8, 8, /* 75% */ - { 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee } }, - { 8, 8, /* 50% */ - { 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55 } }, - { 8, 8, /* 25% */ - { 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88 } }, - { 8, 8, /* 12.5% */ - { 0x88, 0x00, 0x22, 0x00, 0x88, 0x00, 0x22, 0x00 } }, - { 8, 8, /* 6.25% */ - { 0x20, 0x00, 0x02, 0x00, 0x20, 0x00, 0x02, 0x00 } }, - { 8, 8, /* Horizontal Stripe */ - { 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff } }, - { 8, 8, /* Vertical Stripe */ - { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33 } }, - { 8, 8, /* Reverse Diagonal Stripe */ - { 0x33, 0x66, 0xcc, 0x99, 0x33, 0x66, 0xcc, 0x99 } }, - { 8, 8, /* Diagonal Stripe */ - { 0xcc, 0x66, 0x33, 0x99, 0xcc, 0x66, 0x33, 0x99 } }, - { 8, 8, /* Diagonal Crosshatch */ - { 0x99, 0x66, 0x66, 0x99, 0x99, 0x66, 0x66, 0x99 } }, - { 8, 8, /* Thick Diagonal Crosshatch */ - { 0xff, 0x66, 0xff, 0x99, 0xff, 0x66, 0xff, 0x99 } }, - { 8, 8, /* Thin Horizontal Stripe */ - { 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00 } }, - { 8, 8, /* Thin Vertical Stripe */ - { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 } }, - { 8, 8, /* Thin Reverse Diagonal Stripe */ - { 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 } }, - { 8, 8, /* Thin Diagonal Stripe */ - { 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 } }, - { 8, 8, /* Thin Crosshatch */ - { 0x22, 0x22, 0xff, 0x22, 0x22, 0x22, 0xff, 0x22 } }, - { 8, 8, /* Thin Diagonal Crosshatch */ - { 0x88, 0x55, 0x22, 0x55, 0x88, 0x55, 0x22, 0x55 } }, - { 8, 8, /* 100% */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { 8, 8, /* Applix small circle */ - { 0x99, 0x55, 0x33, 0xff, 0x99, 0x55, 0x33, 0xff } }, - { 8, 8, /* Applix semicircle */ - { 0x10, 0x10, 0x28, 0xc7, 0x01, 0x01, 0x82, 0x7c } }, - { 8, 8, /* Applix small thatch */ - { 0x22, 0x74, 0xf8, 0x71, 0x22, 0x17, 0x8f, 0x47 } }, - { 8, 8, /* Applix round thatch */ - { 0xc1, 0x80, 0x1c, 0x3e, 0x3e, 0x3e, 0x1c, 0x80 } }, - { 8, 8, /* Applix Brick */ - { 0x20, 0x20, 0x20, 0xff, 0x02, 0x02, 0x02, 0xff } } -}; - -static struct { - GOPatternType pattern; - char const *label; - char const *name; -} pattern_names[] = { - { GO_PATTERN_SOLID, N_("Solid"), "solid" }, - { GO_PATTERN_GREY75, N_("75% Grey"), "grey75" }, - { GO_PATTERN_GREY50, N_("50% Grey"), "grey50" }, - { GO_PATTERN_GREY25, N_("25% Grey"), "grey25" }, - { GO_PATTERN_GREY125, N_("12.5% Grey"), "grey12.5" }, - { GO_PATTERN_GREY625, N_("6.25% Grey"), "grey6.25" }, - { GO_PATTERN_HORIZ, N_("Horizontal Stripe"), "horiz" }, - { GO_PATTERN_VERT, N_("Vertical Stripe"), "vert" }, - { GO_PATTERN_REV_DIAG, N_("Reverse Diagonal Stripe"), "rev-diag" }, - { GO_PATTERN_DIAG, N_("Diagonal Stripe"), "diag" }, - { GO_PATTERN_DIAG_CROSS, N_("Diagonal Crosshatch"), "diag-cross" }, - { GO_PATTERN_THICK_DIAG_CROSS, N_("Thick Diagonal Crosshatch"), "thick-diag-cross" }, - { GO_PATTERN_THIN_HORIZ, N_("Thin Horizontal Stripe"), "thin-horiz" }, - { GO_PATTERN_THIN_VERT, N_("Thin Vertical Stripe"), "thin-vert" }, - { GO_PATTERN_THIN_REV_DIAG, N_("Thin Reverse Diagonal Stripe"), "rev-diag" }, - { GO_PATTERN_THIN_DIAG, N_("Thin Diagonal Stripe"), "thin-diag" }, - { GO_PATTERN_THIN_HORIZ_CROSS, N_("Thin Horizontal Crosshatch"),"thin-horiz-cross" }, - { GO_PATTERN_THIN_DIAG_CROSS, N_("Thin Diagonal Crosshatch"), "thin-diag-cross" }, - { GO_PATTERN_FOREGROUND_SOLID, N_("Foreground Solid"), "foreground-solid" }, - { GO_PATTERN_SMALL_CIRCLES, N_("Small Circles"), "small-circles" }, - { GO_PATTERN_SEMI_CIRCLES, N_("Semi Circles"), "semi-circles" }, - { GO_PATTERN_THATCH, N_("Thatch"), "thatch" }, - { GO_PATTERN_LARGE_CIRCLES, N_("Large Circles"), "large-circles" }, - { GO_PATTERN_BRICKS, N_("Bricks"), "bricks" } + { N_("Solid"), "solid", { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }, + { N_("75% Grey"), "grey75", { 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee } }, + { N_("50% Grey"), "grey50", { 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55 } }, + { N_("25% Grey"), "grey25", { 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88 } }, + { N_("12.5% Grey"), "grey12.5", { 0x88, 0x00, 0x22, 0x00, 0x88, 0x00, 0x22, 0x00 } }, + { N_("6.25% Grey"), "grey6.25", { 0x20, 0x00, 0x02, 0x00, 0x20, 0x00, 0x02, 0x00 } }, + { N_("Horizontal Stripe"), "horiz", { 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff } }, + { N_("Vertical Stripe"), "vert", { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33 } }, + { N_("Reverse Diagonal Stripe"), "rev-diag", { 0x33, 0x66, 0xcc, 0x99, 0x33, 0x66, 0xcc, 0x99 } }, + { N_("Diagonal Stripe"), "diag", { 0xcc, 0x66, 0x33, 0x99, 0xcc, 0x66, 0x33, 0x99 } }, + { N_("Diagonal Crosshatch"), "diag-cross", { 0x99, 0x66, 0x66, 0x99, 0x99, 0x66, 0x66, 0x99 } }, + { N_("Thick Diagonal Crosshatch"), "thick-diag-cross",{ 0xff, 0x66, 0xff, 0x99, 0xff, 0x66, 0xff, 0x99 } }, + { N_("Thin Horizontal Stripe"), "thin-horiz", { 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00 } }, + { N_("Thin Vertical Stripe"), "thin-vert", { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 } }, + { N_("Thin Reverse Diagonal Stripe"),"thin-rev-diag", { 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 } }, + { N_("Thin Diagonal Stripe"), "thin-diag", { 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 } }, + { N_("Thin Horizontal Crosshatch"),"thin-horiz-cross",{ 0x22, 0x22, 0xff, 0x22, 0x22, 0x22, 0xff, 0x22 } }, + { N_("Thin Diagonal Crosshatch"), "thin-diag-cross", { 0x88, 0x55, 0x22, 0x55, 0x88, 0x55, 0x22, 0x55 } }, + { N_("Foreground Solid"), "foreground-solid",{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { N_("Small Circles")/* Applix */, "small-circles", { 0x99, 0x55, 0x33, 0xff, 0x99, 0x55, 0x33, 0xff } }, + { N_("Semi Circles") /* Applix */, "semi-circles", { 0x10, 0x10, 0x28, 0xc7, 0x01, 0x01, 0x82, 0x7c } }, + { N_("Thatch") /* Applix small thatch */, "thatch", { 0x22, 0x74, 0xf8, 0x71, 0x22, 0x17, 0x8f, 0x47 } }, + { N_("Large Circles")/*Applix round thatch*/, + "large-circles", { 0xc1, 0x80, 0x1c, 0x3e, 0x3e, 0x3e, 0x1c, 0x80 } }, + { N_("Bricks") /* Applix Brick */, "bricks", { 0x20, 0x20, 0x20, 0xff, 0x02, 0x02, 0x02, 0xff } } }; GOPatternType -go_pattern_from_str (char const *name) +go_pattern_from_str (char const *str) { unsigned i; - GOPatternType ret = GO_PATTERN_SOLID; - for (i = 0; i < sizeof pattern_names / sizeof pattern_names[0]; i++) { - if (strcmp (pattern_names[i].name, name) == 0) { - ret = pattern_names[i].pattern; - break; - } - } - return ret; + for (i = 0; i < GO_PATTERN_MAX; i++) + if (strcmp (go_patterns[i].str, str) == 0) + return i; + + return GO_PATTERN_SOLID; } char const * go_pattern_as_str (GOPatternType pattern) { - unsigned i; - char const *ret = "none"; - - for (i = 0; i < sizeof pattern_names / sizeof pattern_names[0]; i++) { - if (pattern_names[i].pattern == pattern) { - ret = pattern_names[i].name; - break; - } - } - return ret; + return (pattern < 0 || pattern >= GO_PATTERN_MAX) ? "none" + : go_patterns[pattern].str; } /** @@ -188,6 +129,71 @@ go_pattern_set_solid (GOPattern *pat, GOColor fore) pat->back = fore; } +guint8 const * +go_pattern_get_pattern (GOPattern const *pat) +{ + return go_patterns [pat->pattern].pattern; +} + +/** + * go_pattern_get_svg_path: + * @pattern: #GOPattern + * @double: pattern width + * @height: pattern height + * + * Returns an SVG path as string, which represents pattern shape. + * Caller is responsible for freeing the resulting string. + * + * If width != NULL, returns pattern width. + * If height != NULL, returns pattern height. + **/ +//#warning This result is actually an xmlChar we could run into trouble with g_free vs xmlFree. Can we change the interface ? +char * +go_pattern_get_svg_path (GOPattern const *pattern, double *width, double *height) +{ + char *path; + char *d = NULL; + xmlChar *name, *svg_path = NULL; + xmlDocPtr doc; + xmlNodePtr ptr; + + g_return_val_if_fail (pattern->pattern >= 0 || pattern->pattern < GO_PATTERN_MAX, NULL); + + path = g_build_filename (go_sys_data_dir(), "patterns", "svg-patterns.xml", NULL); + doc = go_xml_parse_file (path); + g_free (path); + + g_return_val_if_fail (doc != NULL, NULL); + + for (ptr = doc->xmlRootNode->xmlChildrenNode; + ptr != NULL && d == NULL ; + ptr = ptr->next) + { + if (!xmlIsBlankNode (ptr) && + ptr->name && + !strcmp ((char *)ptr->name, "pattern")) + { + name = xmlGetProp (ptr, CC2XML ("name")); + if (name != NULL) { + if (strcmp ((char *)name, go_patterns [pattern->pattern].str) == 0) { + if (width != NULL) + xml_node_get_double (ptr, "width", width); + if (height != NULL) + xml_node_get_double (ptr, "height", height); + svg_path = xmlGetProp (ptr, CC2XML ("d")); + break; + } + xmlFree (name); + } + } + } + xmlFreeDoc (doc); + + g_return_val_if_fail (svg_path != NULL, NULL); + + return (char *)svg_path; +} + #ifdef WITH_GTK gpointer go_pattern_selector (GOColor fore, GOColor back, @@ -240,13 +246,13 @@ go_pattern_selector (GOColor fore, GOColor back, if (is_auto) { /* xgettext : this will appear as 'Automatic (patternname)' */ char *name = g_strdup_printf (_("Automatic (%s)"), - _(pattern_names [default_pat].label)); + _(go_patterns [default_pat].name)); go_combo_pixmaps_add_element (w, pixbuf, -default_pat, name); g_free (name); } else go_combo_pixmaps_add_element (w, pixbuf, pat.pattern, - _(pattern_names[pat.pattern].label)); + _(go_patterns[pat.pattern].name)); } art_svp_free (svp); return w; diff --git a/lib/goffice/utils/go-pattern.h b/lib/goffice-0.0.4/goffice/utils/go-pattern.h similarity index 73% rename from lib/goffice/utils/go-pattern.h rename to lib/goffice-0.0.4/goffice/utils/go-pattern.h index fa0bdbd078..3829206cef 100644 --- a/lib/goffice/utils/go-pattern.h +++ b/lib/goffice-0.0.4/goffice/utils/go-pattern.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_PATTERN_H @@ -62,15 +62,20 @@ typedef enum { GO_PATTERN_MAX } GOPatternType; -GOPatternType go_pattern_from_str (char const *name); -char const *go_pattern_as_str (GOPatternType pattern); -gboolean go_pattern_is_solid (GOPattern const *pat, GOColor *color); -void go_pattern_set_solid (GOPattern *pat, GOColor fore); -void go_pattern_render_svp (GOPattern const *pat, ArtSVP const *svp, - int x0, int y0, int x1, int y1, - art_u8 *buf, int rowstride); +GOPatternType go_pattern_from_str (char const *name); +char const *go_pattern_as_str (GOPatternType pattern); +gboolean go_pattern_is_solid (GOPattern const *pat, GOColor *color); +void go_pattern_set_solid (GOPattern *pat, GOColor fore); +void go_pattern_render_svp (GOPattern const *pat, ArtSVP const *svp, + int x0, int y0, int x1, int y1, + art_u8 *buf, int rowstride); +guint8 const *go_pattern_get_pattern (GOPattern const *pat); +char *go_pattern_get_svg_path (GOPattern const *pattern, double *width, double *height); + +#ifdef WITH_GTK gpointer go_pattern_selector (GOColor fore, GOColor back, GOPatternType default_pat); +#endif G_END_DECLS diff --git a/lib/goffice-0.0.4/goffice/utils/go-rangefunc.c b/lib/goffice-0.0.4/goffice/utils/go-rangefunc.c new file mode 100644 index 0000000000..eac6b1ac63 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-rangefunc.c @@ -0,0 +1,151 @@ +/* + * rangefunc.c: Functions on ranges (data sets). + * + * Authors: + * Morten Welinder + * Andreas J. Guelzow + */ + +#include +#include "go-rangefunc.h" + +#include +#include +#include + +#ifndef DOUBLE + +#define DOUBLE double +#define SUFFIX(_n) _n + +#ifdef GOFFICE_WITH_LONG_DOUBLE +#include "go-rangefunc.c" +#undef DOUBLE +#undef SUFFIX + +#ifdef HAVE_SUNMATH_H +#include +#endif +#define DOUBLE long double +#define SUFFIX(_n) _n ## l +#endif + +#endif + +/* Arithmetic sum. */ +int +SUFFIX(go_range_sum) (const DOUBLE *xs, int n, DOUBLE *res) +{ + /* http://bugzilla.gnome.org/show_bug.cgi?id=131588 */ +#ifdef HAVE_LONG_DOUBLE + long double sum = 0; +#else + DOUBLE sum = 0; +#endif + int i; + + for (i = 0; i < n; i++) + sum += xs[i]; + + *res = sum; + return 0; +} + +/* Arithmetic sum of squares. */ +int +SUFFIX(go_range_sumsq) (const DOUBLE *xs, int n, DOUBLE *res) +{ + /* http://bugzilla.gnome.org/show_bug.cgi?id=131588 */ +#ifdef HAVE_LONG_DOUBLE + long double sum = 0; +#else + DOUBLE sum = 0; +#endif + int i; + + for (i = 0; i < n; i++) + sum += xs[i] * xs[i]; + + *res = sum; + return 0; +} + +/* Arithmetic average. */ +int +SUFFIX(go_range_average) (const DOUBLE *xs, int n, DOUBLE *res) +{ + if (n <= 0 || SUFFIX(go_range_sum) (xs, n, res)) + return 1; + + *res /= n; + return 0; +} + +/* Minimum element. */ +int +SUFFIX(go_range_min) (const DOUBLE *xs, int n, DOUBLE *res) +{ + if (n > 0) { + DOUBLE min = xs[0]; + int i; + + for (i = 1; i < n; i++) + if (xs[i] < min) + min = xs[i]; + *res = min; + return 0; + } else + return 1; +} + +/* Maximum element. */ +int +SUFFIX(go_range_max) (const DOUBLE *xs, int n, DOUBLE *res) +{ + if (n > 0) { + DOUBLE max = xs[0]; + int i; + + for (i = 1; i < n; i++) + if (xs[i] > max) + max = xs[i]; + *res = max; + return 0; + } else + return 1; +} + +/* Maximum absolute element. */ +int +SUFFIX(go_range_maxabs) (const DOUBLE *xs, int n, DOUBLE *res) +{ + if (n > 0) { + DOUBLE max = SUFFIX(fabs) (xs[0]); + int i; + + for (i = 1; i < n; i++) + if (SUFFIX(fabs) (xs[i]) > max) + max = SUFFIX(fabs) (xs[i]); + *res = max; + return 0; + } else + return 1; +} + +/* Sum of square deviations from mean. */ +int +SUFFIX(go_range_devsq) (const DOUBLE *xs, int n, DOUBLE *res) +{ + DOUBLE m, dx, q = 0; + if (n > 0) { + int i; + + SUFFIX(go_range_average) (xs, n, &m); + for (i = 0; i < n; i++) { + dx = xs[i] - m; + q += dx * dx; + } + } + *res = q; + return 0; +} diff --git a/lib/goffice-0.0.4/goffice/utils/go-rangefunc.h b/lib/goffice-0.0.4/goffice/utils/go-rangefunc.h new file mode 100644 index 0000000000..89f7c41d28 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-rangefunc.h @@ -0,0 +1,22 @@ +#ifndef GO_RANGEFUNC_H +#define GO_RANGEFUNC_H + +int go_range_sum (const double *xs, int n, double *res); +int go_range_sumsq (const double *xs, int n, double *res); +int go_range_average (const double *xs, int n, double *res); +int go_range_min (const double *xs, int n, double *res); +int go_range_max (const double *xs, int n, double *res); +int go_range_maxabs (const double *xs, int n, double *res); +int go_range_devsq (const double *xs, int n, double *res); + +#ifdef GOFFICE_WITH_LONG_DOUBLE +int go_range_suml (const long double *xs, int n, long double *res); +int go_range_sumsql (const long double *xs, int n, long double *res); +int go_range_averagel (const long double *xs, int n, long double *res); +int go_range_minl (const long double *xs, int n, long double *res); +int go_range_maxl (const long double *xs, int n, long double *res); +int go_range_maxabsl (const long double *xs, int n, long double *res); +int go_range_devsql (const long double *xs, int n, long double *res); +#endif + +#endif /* GO_RANGEFUNC_H */ diff --git a/lib/goffice-0.0.4/goffice/utils/go-regression.c b/lib/goffice-0.0.4/goffice/utils/go-regression.c new file mode 100644 index 0000000000..2f692afe6f --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-regression.c @@ -0,0 +1,1404 @@ +/* + * regression.c: Statistical regression functions. + * + * Authors: + * Morten Welinder + * Andrew Chatham + * Daniel Carrera + */ + +#include +#include "go-regression.h" +#include "go-rangefunc.h" +#include "go-math.h" + +#include +#include + +#include +#include +#include +#include + +#ifndef DOUBLE + +#define DEFINE_COMMON +#define DOUBLE double +#define DOUBLE_MAX DBL_MAX +#define DOUBLE_MANT_DIG DBL_MANT_DIG +#define SUFFIX(_n) _n +#define FORMAT_g "g" + +#define ALLOC_MATRIX(var,dim1,dim2) \ + do { int _i, _d1, _d2; \ + _d1 = (dim1); \ + _d2 = (dim2); \ + (var) = g_new (double *, _d1); \ + for (_i = 0; _i < _d1; _i++) \ + (var)[_i] = g_new (double, _d2); \ + } while (0) + +#ifdef GOFFICE_WITH_LONG_DOUBLE +#include "go-regression.c" +#undef DEFINE_COMMON +#undef DOUBLE +#undef DOUBLE_MAX +#undef DOUBLE_MANT_DIG +#undef SUFFIX +#undef FORMAT_g +#undef ALLOC_MATRIX +#ifdef HAVE_SUNMATH_H +#include +#endif +#define DOUBLE long double +#define DOUBLE_MAX LDBL_MAX +#define DOUBLE_MANT_DIG LDBL_MANT_DIG +#define SUFFIX(_n) _n ## l +#define FORMAT_g "Lg" + +#define ALLOC_MATRIX(var,dim1,dim2) \ + do { int _i, _d1, _d2; \ + _d1 = (dim1); \ + _d2 = (dim2); \ + (var) = g_new (long double *, _d1); \ + for (_i = 0; _i < _d1; _i++) \ + (var)[_i] = g_new (long double, _d2); \ + } while (0) +#endif + +#endif + +#ifdef DEFINE_COMMON + +#undef DEBUG_NEAR_SINGULAR + +#define FREE_MATRIX(var,dim1,dim2) \ + do { int _i, _d1; \ + _d1 = (dim1); \ + for (_i = 0; _i < _d1; _i++) \ + g_free ((var)[_i]); \ + g_free (var); \ + } while (0) + +#define COPY_MATRIX(dst,src,dim1,dim2) \ + do { int _i, _j, _d1, _d2; \ + _d1 = (dim1); \ + _d2 = (dim2); \ + for (_i = 0; _i < _d1; _i++) \ + for (_j = 0; _j < _d2; _j++) \ + (dst)[_i][_j] = (src)[_i][_j]; \ + } while (0) + +#endif + +#undef PRINT_MATRIX +#define PRINT_MATRIX(var,dim1,dim2) \ + do { \ + int _i, _j, _d1, _d2; \ + _d1 = (dim1); \ + _d2 = (dim2); \ + for (_i = 0; _i < _d1; _i++) \ + { \ + for (_j = 0; _j < _d2; _j++) \ + fprintf (stderr, " %19.10" FORMAT_g, (var)[_i][_j]); \ + fprintf (stderr, "\n"); \ + } \ + } while (0) + +/* + * ---> j + * + * | ******** + * | ******** + * | ******** A[i][j] + * v ******** + * ******** + * i ******** + * ******** + * ******** + * + */ + +/* ------------------------------------------------------------------------- */ + +/* Returns in res the solution to the equation L * U * res = P * b. + + This function is adapted from pseudocode in + Introduction to Algorithms_. Cormen, Leiserson, and Rivest. + p. 753. MIT Press, 1990. +*/ +static void +SUFFIX(backsolve) (DOUBLE **LU, int *P, DOUBLE *b, int n, DOUBLE *res) +{ + int i, j; + + for (i = 0; i < n; i++) { + res[i] = b[P[i]]; + for (j = 0; j < i; j++) + res[i] -= LU[i][j] * res[j]; + } + + for (i = n - 1; i >= 0; i--) { + for (j = i + 1; j < n; j++) + res[i] -= LU[i][j] * res[j]; + res[i] /= LU[i][i]; + } +} + +static RegressionResult +SUFFIX(rescale) (DOUBLE **A, DOUBLE *b, int n, DOUBLE *pdet) +{ + int i; + + *pdet = 1; + for (i = 0; i < n; i++) { + int j, expn; + DOUBLE scale, max; + + (void)SUFFIX(go_range_maxabs) (A[i], n, &max); + + if (max == 0) + return REG_singular; + + /* Use a power of 2 near sqrt (max) as scale. */ + (void)SUFFIX(frexp) (SUFFIX(sqrt) (max), &expn); + scale = SUFFIX(ldexp) (1, expn); +#ifdef DEBUG_NEAR_SINGULAR + printf ("scale[%d]=%" FORMAT_g "\n", + i, scale); +#endif + + *pdet *= scale; + b[i] /= scale; + for (j = 0; j < n; j++) + A[i][j] /= scale; + } + return REG_ok; +} + + +/* + * Performs an LUP Decomposition; LU and P must already be allocated. + * A is not destroyed. + * + * This function is adapted from pseudocode in + * _Introduction to Algorithms_. Cormen, Leiserson, and Rivest. + * p 759. MIT Press, 1990. + * + * A rescaling of rows is done and the b_scaled vector is scaled + * accordingly. + */ +static RegressionResult +SUFFIX(LUPDecomp) (DOUBLE **A, DOUBLE **LU, int *P, int n, DOUBLE *b_scaled, + DOUBLE *pdet) +{ + int i, j, k, tempint; + DOUBLE highest = 0; + DOUBLE lowest = DOUBLE_MAX; + DOUBLE cond; + gboolean odd_parity = FALSE; + DOUBLE det = 1; + + COPY_MATRIX (LU, A, n, n); + for (j = 0; j < n; j++) + P[j] = j; + + + *pdet = 0; + +#ifdef DEBUG_NEAR_SINGULAR + PRINT_MATRIX (LU, n, n); +#endif + { + RegressionResult err = SUFFIX(rescale) (LU, b_scaled, n, &det); + if (err != REG_ok) + return err; + } + + for (i = 0; i < n; i++) { + DOUBLE max = 0; + int mov = -1; + + for (j = i; j < n; j++) + if (SUFFIX(fabs) (LU[j][i]) > max) { + max = SUFFIX(fabs) (LU[j][i]); + mov = j; + } +#ifdef DEBUG_NEAR_SINGULAR + PRINT_MATRIX (LU, n, n); + printf ("max[%d]=%" FORMAT_g " at %d\n", + i, max, mov); +#endif + if (max == 0) + return REG_singular; + if (max > highest) + highest = max; + if (max < lowest) + lowest = max; + if (i != mov) { + /*swap the two rows */ + + odd_parity = !odd_parity; + tempint = P[i]; + P[i] = P[mov]; + P[mov] = tempint; + for (j = 0; j < n; j++) { + DOUBLE temp = LU[i][j]; + LU[i][j] = LU[mov][j]; + LU[mov][j] = temp; + } + } + + for (j = i + 1; j < n; j++) { + LU[j][i] /= LU[i][i]; + for (k = i + 1; k < n; k++) + LU[j][k] -= LU[j][i] * LU[i][k]; + } + } + + /* Calculate the determinant. */ + if (odd_parity) det = -det; + for (i = 0; i < n; i++) + det *= LU[i][i]; + *pdet = det; + + cond = (SUFFIX(log) (highest) - SUFFIX(log) (lowest)) / SUFFIX(log) (2); +#ifdef DEBUG_NEAR_SINGULAR + printf ("cond=%.20" FORMAT_g "\n", cond); +#endif + + /* FIXME: make some science out of this. */ + if (cond > DOUBLE_MANT_DIG * 0.75) + return REG_near_singular_bad; + else if (cond > DOUBLE_MANT_DIG * 0.50) + return REG_near_singular_good; + else + return REG_ok; +} + + +static RegressionResult +SUFFIX(linear_solve) (DOUBLE **A, DOUBLE *b, int n, DOUBLE *res) +{ + RegressionResult err; + DOUBLE **LU, *b_scaled; + int *P; + DOUBLE det; + + if (n < 1) + return REG_not_enough_data; + + /* Special case. */ + if (n == 1) { + DOUBLE d = A[0][0]; + if (d == 0) + return REG_singular; + + res[0] = b[0] / d; + return REG_ok; + } + + /* Special case. */ + if (n == 2) { + DOUBLE d = SUFFIX(go_matrix_determinant) (A, n); + if (d == 0) + return REG_singular; + + res[0] = (A[1][1] * b[0] - A[1][0] * b[1]) / d; + res[1] = (A[0][0] * b[1] - A[0][1] * b[0]) / d; + return REG_ok; + } + + /* + * Otherwise, use LUP-decomposition to find res such that + * A res = b + */ + ALLOC_MATRIX (LU, n, n); + P = g_new (int, n); + + b_scaled = g_new (DOUBLE, n); + memcpy (b_scaled, b, n * sizeof (DOUBLE)); + + err = SUFFIX(LUPDecomp) (A, LU, P, n, b_scaled, &det); + + if (err == REG_ok || err == REG_near_singular_good) + SUFFIX(backsolve) (LU, P, b_scaled, n, res); + + FREE_MATRIX (LU, n, n); + g_free (P); + g_free (b_scaled); + return err; +} + + +gboolean +SUFFIX(go_matrix_invert) (DOUBLE **A, int n) +{ + RegressionResult err; + DOUBLE **LU, *b_scaled, det; + int *P; + int i; + gboolean res; + + if (n < 1) + return FALSE; + + /* + * Otherwise, use LUP-decomposition to find res such that + * A res = b + */ + ALLOC_MATRIX (LU, n, n); + P = g_new (int, n); + + b_scaled = g_new (DOUBLE, n); + for (i = 0; i < n; i++) + b_scaled[i] = 1; + + err = SUFFIX(LUPDecomp) (A, LU, P, n, b_scaled, &det); + + if (err == REG_ok || err == REG_near_singular_good) { + int i, j; + DOUBLE *b = g_new (DOUBLE, n); + DOUBLE *w = g_new (DOUBLE, n); + + for (i = 0; i < n; i++) { + memset (b, 0, sizeof (DOUBLE) * n); + b[i] = b_scaled[i]; + SUFFIX(backsolve) (LU, P, b, n, w); + for (j = 0; j < n; j++) + A[j][i] = w[j]; + } + g_free (w); + g_free (b); + res = TRUE; + } else + res = FALSE; + + FREE_MATRIX (LU, n, n); + g_free (P); + g_free (b_scaled); + + return res; +} + +DOUBLE +SUFFIX(go_matrix_determinant) (DOUBLE **A, int n) +{ + RegressionResult err; + DOUBLE **LU, *b_scaled, det; + int *P; + + if (n < 1) + return 0; + + /* Special case. */ + if (n == 1) + return A[0][0]; + + /* Special case. */ + if (n == 2) + return A[0][0] * A[1][1] - A[1][0] * A[0][1]; + + /* + * Otherwise, use LUP-decomposition to find res such that + * A res = b + */ + ALLOC_MATRIX (LU, n, n); + P = g_new (int, n); + b_scaled = g_new0 (DOUBLE, n); + + err = SUFFIX(LUPDecomp) (A, LU, P, n, b_scaled, &det); + + FREE_MATRIX (LU, n, n); + g_free (P); + g_free (b_scaled); + + return det; +} + +/* ------------------------------------------------------------------------- */ + +static RegressionResult +SUFFIX(general_linear_regression) (DOUBLE **xss, int xdim, + const DOUBLE *ys, int n, + DOUBLE *result, + SUFFIX(regression_stat_t) *regression_stat, gboolean affine) +{ + DOUBLE *xTy, **xTx; + int i,j; + RegressionResult regerr; + + if (regression_stat) + memset (regression_stat, 0, sizeof (SUFFIX(regression_stat_t))); + + if (xdim > n) + return REG_not_enough_data; + + xTy = g_new (DOUBLE, xdim); + for (i = 0; i < xdim; i++) { + const DOUBLE *xs = xss[i]; + register DOUBLE res = 0; + int j; + if (xs == NULL) + /* NULL represents a 1-vector. */ + for (j = 0; j < n; j++) + res += ys[j]; + else + for (j = 0; j < n; j++) + res += xs[j] * ys[j]; + xTy[i] = res; + } + + ALLOC_MATRIX (xTx, xdim, xdim); + + for (i = 0; i < xdim; i++) { + const DOUBLE *xs1 = xss[i]; + int j; + for (j = 0; j <= i; j++) { + const DOUBLE *xs2 = xss[j]; + DOUBLE res = 0; + int k; + + if (xs1 == NULL && xs2 == NULL) + res = n; + else if (xs1 == NULL) + for (k = 0; k < n; k++) + res += xs2[k]; + else if (xs2 == NULL) + for (k = 0; k < n; k++) + res += xs1[k]; + else + for (k = 0; k < n; k++) + res += xs1[k] * xs2[k]; + + xTx[i][j] = xTx[j][i] = res; + } + } + + regerr = SUFFIX(linear_solve) (xTx, xTy, xdim, result); + + if (regression_stat && + (regerr == REG_ok || regerr == REG_near_singular_good)) { + RegressionResult err2; + DOUBLE *residuals = g_new (DOUBLE, n); + DOUBLE **LU, *one_scaled, det; + int *P; + int err; + + /* This should not fail since n >= 1. */ + err = SUFFIX(go_range_average) (ys, n, ®ression_stat->ybar); + g_assert (err == 0); + + /* FIXME: we ought to have a devsq variant that does not + recompute the mean. */ + if (affine) + err = SUFFIX(go_range_devsq) (ys, n, ®ression_stat->ss_total); + else + err = SUFFIX(go_range_sumsq) (ys, n, ®ression_stat->ss_total); + g_assert (err == 0); + + regression_stat->xbar = g_new (DOUBLE, n); + for (i = 0; i < xdim; i++) { + if (xss[i]) { + int err = SUFFIX(go_range_average) (xss[i], n, ®ression_stat->xbar[i]); + g_assert (err == 0); + } else { + regression_stat->xbar[i] = 1; + } + } + + for (i = 0; i < n; i++) { + residuals[i] = 0; + for (j = 0; j < xdim; j++) { + if (xss[j]) + residuals[i] += xss[j][i] * result[j]; + else + residuals[i] += result[j]; /* If NULL, constant factor */ + } + residuals[i] = ys[i] - residuals[i]; + } + + err = SUFFIX(go_range_sumsq) (residuals, n, ®ression_stat->ss_resid); + g_assert (err == 0); + + regression_stat->sqr_r = (regression_stat->ss_total == 0) + ? 1 + : 1 - regression_stat->ss_resid / regression_stat->ss_total; + /* FIXME: we want to guard against division by zero. */ + regression_stat->adj_sqr_r = 1 - regression_stat->ss_resid * (n - 1) / + ((n - xdim) * regression_stat->ss_total); + regression_stat->var = (n == xdim) + ? 0 + : regression_stat->ss_resid / (n - xdim); + + ALLOC_MATRIX (LU, xdim, xdim); + one_scaled = g_new (DOUBLE, xdim); + for (i = 0; i < xdim; i++) one_scaled[i] = 1; + P = g_new (int, xdim); + + err2 = SUFFIX(LUPDecomp) (xTx, LU, P, xdim, one_scaled, &det); + regression_stat->se = g_new (DOUBLE, xdim); + if (err2 == REG_ok || err2 == REG_near_singular_good) { + DOUBLE *e = g_new (DOUBLE, xdim); /* Elementary vector */ + DOUBLE *inv = g_new (DOUBLE, xdim); + for (i = 0; i < xdim; i++) + e[i] = 0; + for (i = 0; i < xdim; i++) { + e[i] = one_scaled[i]; + SUFFIX(backsolve) (LU, P, e, xdim, inv); + + if (inv[i] < 0) { + /* + * If this happens, something is really + * wrong, numerically. + */ + regerr = REG_near_singular_bad; + } + regression_stat->se[i] = + SUFFIX(sqrt) (regression_stat->var * inv[i]); + e[i] = 0; + } + g_free (e); + g_free (inv); + } else { + /* + * This can happen for xdim == 2 as linear_solve does + * not use LUPDecomp in that case. + */ + regerr = err2; + for (i = 0; i < xdim; i++) + regression_stat->se[i] = 0; + } + FREE_MATRIX (LU, xdim, xdim); + g_free (P); + g_free (one_scaled); + + regression_stat->t = g_new (DOUBLE, xdim); + + for (i = 0; i < xdim; i++) + regression_stat->t[i] = (regression_stat->se[i] == 0) + ? SUFFIX(go_pinf) + : result[i] / regression_stat->se[i]; + + regression_stat->df_resid = n - xdim; + regression_stat->df_reg = xdim - (affine ? 1 : 0); + regression_stat->df_total = regression_stat->df_resid + regression_stat->df_reg; + + regression_stat->F = (regression_stat->sqr_r == 1) + ? SUFFIX(go_pinf) + : ((regression_stat->sqr_r / regression_stat->df_reg) / + (1 - regression_stat->sqr_r) * regression_stat->df_resid); + + regression_stat->ss_reg = regression_stat->ss_total - regression_stat->ss_resid; + regression_stat->se_y = SUFFIX(sqrt) (regression_stat->ss_total / n); + regression_stat->ms_reg = (regression_stat->df_reg == 0) + ? 0 + : regression_stat->ss_reg / regression_stat->df_reg; + regression_stat->ms_resid = (regression_stat->df_resid == 0) + ? 0 + : regression_stat->ss_resid / regression_stat->df_resid; + + g_free (residuals); + } + + FREE_MATRIX (xTx, xdim, xdim); + g_free (xTy); + + return regerr; +} + +/* ------------------------------------------------------------------------- */ + +typedef struct { + DOUBLE min_x; + DOUBLE max_x; + DOUBLE min_y; + DOUBLE max_y; + DOUBLE mean_y; +} SUFFIX(point_cloud_measure_type); + +/* Takes the current 'sign' (res[0]) and 'c' (res[3]) from the calling + * function, transforms xs to ln(sign*(x-c)), performs a simple + * linear regression to find the best fitting 'a' (res[1]) and 'b' + * (res[2]) for ys and transformed xs, and computes the sum of squared + * residuals. + * Needs 'sign' (i.e. +1 or -1) and 'c' so adjusted that (sign*(x-c)) is + * positive for all xs. n must be > 0. These conditions are trusted to be + * checked by the calling functions. + * Is called often, so do not make it too slow. + */ + +static int +SUFFIX(transform_x_and_linear_regression_log_fitting) (DOUBLE *xs, + DOUBLE *transf_xs, + const DOUBLE *ys, int n, + DOUBLE *res, + SUFFIX(point_cloud_measure_type) + *point_cloud) +{ + int i; + int result = REG_ok; + DOUBLE mean_transf_x, diff_x, resid_y; + DOUBLE sum1 = 0; + DOUBLE sum2 = 0; + + /* log (always > 0) */ + for (i=0; imean_y); + sum2 += diff_x * diff_x; + } + res[2] = sum1 / sum2; + res[1] = point_cloud->mean_y - (res[2] * mean_transf_x); + res[4] = 0; + for (i=0; imax_x) - (point_cloud->min_x); + /* Not needed here, but allocate it once for all subfunction calls */ + transf_xs = g_new (DOUBLE, n); + /* Choose final accuracy of c with respect to range of xs. + * Make accuracy be a whole power of 10. */ + c_accuracy = SUFFIX(log10) (x_range); + if (c_accuracy < 0) + if (SUFFIX(modf) (c_accuracy, &c_accuracy_int) != 0) + c_accuracy--; + SUFFIX(modf) (c_accuracy, &c_accuracy_int); + c_accuracy = c_accuracy_int; + c_accuracy = SUFFIX(pow) (10, c_accuracy); + c_accuracy *= LOGFIT_C_ACCURACY; + + /* Determine sign. Take a c which is ``much to small'' since the part + * of the curve cutting the point cloud is almost not bent. + * If making c still smaller does not make things still worse, + * assume that we have to change the direction of curve bending + * by changing sign. + */ + c_step = x_range * LOGFIT_C_STEP_FACTOR; + c_range = x_range * LOGFIT_C_RANGE_FACTOR; + res[0] = 1; /* sign */ + res[3] = point_cloud->min_x - c_range; + temp_res[0] = 1; + temp_res[3] = res[3] - c_step; + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + res, point_cloud); + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + temp_res, point_cloud); + if (temp_res[4] <= res[4]) + sign_plus_ok = 0; + /* check again with new sign */ + res[0] = -1; /* sign */ + res[3] = point_cloud->max_x + c_range; + temp_res[0] = -1; + temp_res[3] = res[3] + c_step; + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + res, point_cloud); + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + temp_res, point_cloud); + if (temp_res[4] <= res[4]) + sign_minus_ok = 0; + /* If not exactly one of plus or minus works, give up. + * This happens in point clouds which are very weakly bent. + */ + if (sign_plus_ok && !sign_minus_ok) + res[0] = 1; + else if (sign_minus_ok && !sign_plus_ok) + res[0] = -1; + else { + result = REG_invalid_data; + goto out; + } + + /* Start of fitted c-range. Rounded to final accuracy of c. */ + c_offset = (res[0] == 1) ? point_cloud->min_x : point_cloud->max_x; + c_offset = c_accuracy * ((res[0] == 1) ? + SUFFIX(floor) (c_offset / c_accuracy) + : SUFFIX(ceil) (c_offset /c_accuracy)); + + /* Now the adapting of c starts. Find a local minimum of sum + * of squared residuals. */ + + /* First, catch some unsuitably shaped point clouds. */ + res[3] = c_offset - res[0] * c_accuracy; + temp_res[3] = c_offset - res[0] * 2 * c_accuracy; + temp_res[0] = res[0]; + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + res, point_cloud); + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + temp_res, point_cloud); + if (temp_res[4] >= res[4]) { + result = REG_invalid_data; + goto out; + } + /* After the above check, any minimum reached will be NOT at + * the start of c-range (c_offset - sign * c_accuracy) */ + c_start = c_offset; + c_end = c_start - res[0] * c_range; + c_dist = res[0] * (c_start - c_end) / 2; + res[3] = c_end + res[0] * c_dist; + do { + c_dist /= 2; + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, + ys, n, res, + point_cloud); + temp_res[3] = res[3] + res[0] * c_dist; + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, + ys, n, temp_res, + point_cloud); + if (temp_res[4] <= res[4]) + memcpy (res, temp_res, 5 * sizeof (DOUBLE)); + else { + temp_res[3] = res[3] - res[0] * c_dist; + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, + transf_xs, + ys, n, + temp_res, + point_cloud); + if (temp_res[4] <= res[4]) + memcpy (res, temp_res, 5*sizeof (DOUBLE)); + } + } while (c_dist > c_accuracy); + + res[3] = c_accuracy * SUFFIX(go_fake_round) (res[3] / c_accuracy); + SUFFIX(transform_x_and_linear_regression_log_fitting) (xs, transf_xs, ys, n, + res, point_cloud); + + if ((res[0] * (res[3] - c_end)) < (1.1 * c_accuracy)) { + /* Allowing for some inaccuracy, we are at the end of the + * range, so this is probably no local minimum. + * The start of the range has been checked above. */ + result = REG_invalid_data; + goto out; + } + + out: + g_free (transf_xs); + g_free (temp_res); + return result; +} + +/* ------------------------------------------------------------------------- */ +/* Please refer to description in regression.h. */ + +RegressionResult +SUFFIX(go_linear_regression) (DOUBLE **xss, int dim, + const DOUBLE *ys, int n, + gboolean affine, + DOUBLE *res, + SUFFIX(regression_stat_t) *regression_stat) +{ + RegressionResult result; + + g_return_val_if_fail (dim >= 1, REG_invalid_dimensions); + g_return_val_if_fail (n >= 1, REG_invalid_dimensions); + + if (affine) { + DOUBLE **xss2; + xss2 = g_new (DOUBLE *, dim + 1); + xss2[0] = NULL; /* Substitute for 1-vector. */ + memcpy (xss2 + 1, xss, dim * sizeof (DOUBLE *)); + + result = SUFFIX(general_linear_regression) (xss2, dim + 1, ys, n, + res, regression_stat, affine); + g_free (xss2); + } else { + res[0] = 0; + result = SUFFIX(general_linear_regression) (xss, dim, ys, n, + res + 1, regression_stat, affine); + } + return result; +} + +/* ------------------------------------------------------------------------- */ +/* Please refer to description in regression.h. */ + +RegressionResult +SUFFIX(go_exponential_regression) (DOUBLE **xss, int dim, + const DOUBLE *ys, int n, + gboolean affine, + DOUBLE *res, + SUFFIX(regression_stat_t) *regression_stat) +{ + DOUBLE *log_ys; + RegressionResult result; + int i; + + g_return_val_if_fail (dim >= 1, REG_invalid_dimensions); + g_return_val_if_fail (n >= 1, REG_invalid_dimensions); + + log_ys = g_new (DOUBLE, n); + for (i = 0; i < n; i++) + if (ys[i] > 0) + log_ys[i] = SUFFIX(log) (ys[i]); + else { + result = REG_invalid_data; + goto out; + } + + if (affine) { + DOUBLE **xss2; + xss2 = g_new (DOUBLE *, dim + 1); + xss2[0] = NULL; /* Substitute for 1-vector. */ + memcpy (xss2 + 1, xss, dim * sizeof (DOUBLE *)); + + result = SUFFIX(general_linear_regression) (xss2, dim + 1, log_ys, + n, res, regression_stat, affine); + g_free (xss2); + } else { + res[0] = 0; + result = SUFFIX(general_linear_regression) (xss, dim, log_ys, n, + res + 1, regression_stat, affine); + } + + if (result == 0) + for (i = 0; i < dim + 1; i++) + res[i] = SUFFIX(exp) (res[i]); + + out: + g_free (log_ys); + return result; +} + +/* ------------------------------------------------------------------------- */ +/* Please refer to description in regression.h. */ + +RegressionResult +SUFFIX(go_logarithmic_regression) (DOUBLE **xss, int dim, + const DOUBLE *ys, int n, + gboolean affine, + DOUBLE *res, + SUFFIX(regression_stat_t) *regression_stat) +{ + DOUBLE **log_xss; + RegressionResult result; + int i, j; + + g_return_val_if_fail (dim >= 1, REG_invalid_dimensions); + g_return_val_if_fail (n >= 1, REG_invalid_dimensions); + + ALLOC_MATRIX (log_xss, dim, n); + for (i = 0; i < dim; i++) + for (j = 0; j < n; j++) + if (xss[i][j] > 0) + log_xss[i][j] = SUFFIX(log) (xss[i][j]); + else { + result = REG_invalid_data; + goto out; + } + + + if (affine) { + DOUBLE **log_xss2; + log_xss2 = g_new (DOUBLE *, dim + 1); + log_xss2[0] = NULL; /* Substitute for 1-vector. */ + memcpy (log_xss2 + 1, log_xss, dim * sizeof (DOUBLE *)); + + result = SUFFIX(general_linear_regression) (log_xss2, dim + 1, ys, n, + res, regression_stat, + affine); + g_free (log_xss2); + } else { + res[0] = 0; + result = SUFFIX(general_linear_regression) (log_xss, dim, ys, n, + res + 1, regression_stat, + affine); + } + + out: + FREE_MATRIX (log_xss, dim, n); + return result; +} + +/* ------------------------------------------------------------------------- */ +/* Please refer to description in regression.h. */ + +RegressionResult +SUFFIX(go_logarithmic_fit) (DOUBLE *xs, const DOUBLE *ys, int n, DOUBLE *res) +{ + SUFFIX(point_cloud_measure_type) point_cloud_measures; + int i, result; + gboolean more_2_y = 0, more_2_x = 0; + + /* Store useful measures for using them here and in subfunctions. + * The checking of n is paranoid -- the calling function should + * have cared for that. */ + g_return_val_if_fail (n > 2, REG_invalid_dimensions); + result = SUFFIX(go_range_min) (xs, n, &(point_cloud_measures.min_x)); + result = SUFFIX(go_range_max) (xs, n, &(point_cloud_measures.max_x)); + result = SUFFIX(go_range_min) (ys, n, &(point_cloud_measures.min_y)); + result = SUFFIX(go_range_max) (ys, n, &(point_cloud_measures.max_y)); + result = SUFFIX(go_range_average) (ys, n, &(point_cloud_measures.mean_y)); + /* Checking of error conditions. */ + /* less than 2 different ys or less than 2 different xs */ + g_return_val_if_fail (((point_cloud_measures.min_y != + point_cloud_measures.max_y) && + (point_cloud_measures.min_x != + point_cloud_measures.max_x)), + REG_invalid_data); + /* less than 3 different ys */ + for (i=0; ise = NULL; + regression_stat->t = NULL; + regression_stat->xbar = NULL; + + return regression_stat; +} + +/* ------------------------------------------------------------------------- */ + +void +SUFFIX(go_regression_stat_destroy) (SUFFIX(regression_stat_t) *regression_stat) +{ + g_return_if_fail (regression_stat != NULL); + + if (regression_stat->se) + g_free(regression_stat->se); + if (regression_stat->t) + g_free(regression_stat->t); + if (regression_stat->xbar) + g_free(regression_stat->xbar); + g_free (regression_stat); +} + +/* ------------------------------------------------------------------------- */ + +#ifdef DEFINE_COMMON +#define DELTA 0.01 +/* FIXME: I pulled this number out of my hat. + * I need some testing to pick a sensible value. + */ +#define MAX_STEPS 200 +#endif + +/* + * SYNOPSIS: + * result = derivative( f, &df, x, par, i) + * + * Approximates the partial derivative of a given function, at (x;params) + * with respect to the parameter indicated by ith parameter. The resulst + * is stored in 'df'. + * + * See the header file for more information. + */ +static RegressionResult +SUFFIX(derivative) (SUFFIX(RegressionFunction) f, + DOUBLE *df, + DOUBLE *x, /* Only one point, not the whole data set. */ + DOUBLE *par, + int index) +{ + DOUBLE y1, y2; + RegressionResult result; + DOUBLE par_save = par[index]; + + par[index] = par_save - DELTA; + result = (*f) (x, par, &y1); + if (result != REG_ok) { + par[index] = par_save; + return result; + } + + par[index] = par_save + DELTA; + result = (*f) (x, par, &y2); + if (result != REG_ok) { + par[index] = par_save; + return result; + } + +#ifdef DEBUG + printf ("y1 = %lf\n", y1); + printf ("y2 = %lf\n", y2); + printf ("DELTA = %lf\n",DELTA); +#endif + + *df = (y2 - y1) / (2 * DELTA); + par[index] = par_save; + return REG_ok; +} + +/* + * SYNOPSIS: + * result = chi_squared (f, xvals, par, yvals, sigmas, x_dim, &chisq) + * + * / y - f(x ; par) \ 2 + * 2 | i i | + * Chi == Sum ( | ------------------ | ) + * \ sigma / + * i + * + * sigmas -> Measurement errors in the dataset (along the y-axis). + * NULL means "no errors available", so they are all set to 1. + * + * x_dim -> Number of data points. + * + * This value is not very meaningful without the sigmas. However, it is + * still useful for the fit. + */ +static RegressionResult +SUFFIX(chi_squared) (SUFFIX(RegressionFunction) f, + DOUBLE ** xvals, /* The entire data set. */ + DOUBLE *par, + DOUBLE *yvals, /* Ditto. */ + DOUBLE *sigmas, /* Ditto. */ + int x_dim, /* Number of data points. */ + DOUBLE *chisq) /* Chi Squared */ +{ + int i; + RegressionResult result; + DOUBLE tmp, y; + *chisq = 0; + + for (i = 0; i < x_dim; i++) { + result = f (xvals[i], par, &y); + if (result != REG_ok) + return result; + + tmp = (yvals[i] - y ) / (sigmas ? sigmas[i] : 1); + + *chisq += tmp * tmp; + } + + return REG_ok; +} + + +/* + * SYNOPSIS: + * result = chi_derivative (f, &dchi, xvals, par, i, yvals, + * sigmas, x_dim) + * + * This is a simple adaptation of the derivative() function specific to + * the Chi Squared. + */ +static RegressionResult +SUFFIX(chi_derivative) (SUFFIX(RegressionFunction) f, + DOUBLE *dchi, + DOUBLE **xvals, /* The entire data set. */ + DOUBLE *par, + int index, + DOUBLE *yvals, /* Ditto. */ + DOUBLE *sigmas, /* Ditto. */ + int x_dim) +{ + DOUBLE y1, y2; + RegressionResult result; + DOUBLE par_save = par[index]; + + par[index] = par_save - DELTA; + result = SUFFIX(chi_squared) (f, xvals, par, yvals, sigmas, x_dim, &y1); + if (result != REG_ok) { + par[index] = par_save; + return result; + } + + par[index] = par_save + DELTA; + result = SUFFIX(chi_squared) (f, xvals, par, yvals, sigmas, x_dim, &y2); + if (result != REG_ok) { + par[index] = par_save; + return result; + } + +#ifdef DEBUG + printf ("y1 = %lf\n", y1); + printf ("y2 = %lf\n", y2); + printf ("DELTA = %lf\n", DELTA); +#endif + + *dchi = (y2 - y1) / (2 * DELTA); + par[index] = par_save; + return REG_ok; +} + +/* + * SYNOPSIS: + * result = coefficient_matrix (A, f, xvals, par, yvals, sigmas, + * x_dim, p_dim, r) + * + * RETURNS: + * The coefficient matrix of the LM method. + * + * DETAIS: + * The coefficient matrix matrix is defined by + * + * N 1 df df + * A = Sum ( ------- -- -- ( i == j ? 1 + r : 1 ) a) + * ij k=1 sigma^2 dp dp + * k i j + * + * A -> p_dim X p_dim coefficient matrix. MUST ALREADY BE ALLOCATED. + * + * sigmas -> Measurement errors in the dataset (along the y-axis). + * NULL means "no errors available", so they are all set to 1. + * + * x_dim -> Number of data points. + * + * p_dim -> Number of parameters. + * + * r -> Positive constant. It's value is altered during the LM procedure. + */ + +static RegressionResult +SUFFIX(coefficient_matrix) (DOUBLE **A, /* Output matrix. */ + SUFFIX(RegressionFunction) f, + DOUBLE **xvals, /* The entire data set. */ + DOUBLE *par, + DOUBLE *yvals, /* Ditto. */ + DOUBLE *sigmas, /* Ditto. */ + int x_dim, /* Number of data points. */ + int p_dim, /* Number of parameters. */ + DOUBLE r) +{ + int i, j, k; + RegressionResult result; + DOUBLE df_i, df_j; + DOUBLE sum, sigma; + + /* Notice that the matrix is symetric. */ + for (i = 0; i < p_dim; i++) { + for (j = 0; j <= i; j++) { + sum = 0; + for (k = 0; k < x_dim; k++) { + result = SUFFIX(derivative) (f, &df_i, xvals[k], + par, i); + if (result != REG_ok) + return result; + + result = SUFFIX(derivative) (f, &df_j, xvals[k], + par, j); + if (result != REG_ok) + return result; + + sigma = (sigmas ? sigmas[k] : 1); + + sum += (df_i * df_j) / (sigma * sigma) * + (i == j ? 1 + r : 1) ; + } + A[i][j] = A[j][i] = sum; + } + } + + return REG_ok; +} + + +/* + * SYNOPSIS: + * result = parameter_errors (f, xvals, par, yvals, sigmas, + * x_dim, p_dim, errors) + * + * Returns the errors associated with the parameters. + * If an error is infinite, it is set to -1. + * + * sigmas -> Measurement errors in the dataset (along the y-axis). + * NULL means "no errors available", so they are all set to 1. + * + * x_dim -> Number of data points. + * + * p_dim -> Number of parameters. + * + * errors -> MUST ALREADY BE ALLOCATED. + */ + +/* FIXME: I am not happy with the behaviour with infinite errors. */ +static RegressionResult +SUFFIX(parameter_errors) (SUFFIX(RegressionFunction) f, + DOUBLE **xvals, /* The entire data set. */ + DOUBLE *par, + DOUBLE *yvals, /* Ditto. */ + DOUBLE *sigmas, /* Ditto. */ + int x_dim, /* Number of data points. */ + int p_dim, /* Number of parameters. */ + DOUBLE *errors) +{ + RegressionResult result; + DOUBLE **A; + int i; + + ALLOC_MATRIX (A, p_dim, p_dim); + + result = SUFFIX(coefficient_matrix) (A, f, xvals, par, yvals, sigmas, + x_dim, p_dim, 0); + if (result == REG_ok) { + for (i = 0; i < p_dim; i++) + /* FIXME: these were "[i][j]" which makes no sense. */ + errors[i] = (A[i][i] != 0 + ? 1 / SUFFIX(sqrt) (A[i][i]) + : -1); + } + + FREE_MATRIX (A, p_dim, p_dim); + return result; +} + + +/* + * SYNOPSIS: + * result = non_linear_regression (f, xvals, par, yvals, sigmas, + * x_dim, p_dim, &chi, errors) + * + * Returns the results of the non-linear regression from the given initial + * values. + * The resulting parameters are placed back into 'par'. + * + * PARAMETERS: + * + * sigmas -> Measurement errors in the dataset (along the y-axis). + * NULL means "no errors available", so they are all set to 1. + * + * x_dim -> Number of data points. + * + * p_dim -> Number of parameters. + * + * errors -> MUST ALREADY BE ALLOCATED. These are the approximated standard + * deviation for each parameter. + * + * chi -> Chi Squared of the final result. This value is not very + * meaningful without the sigmas. + */ +RegressionResult +SUFFIX(go_non_linear_regression) (SUFFIX(RegressionFunction) f, + DOUBLE **xvals, /* The entire data set. */ + DOUBLE *par, + DOUBLE *yvals, /* Ditto. */ + DOUBLE *sigmas, /* Ditto. */ + int x_dim, /* Number of data points. */ + int p_dim, /* Number of parameters. */ + DOUBLE *chi, + DOUBLE *errors) +{ + DOUBLE r = 0.001; /* Pick a conservative initial value. */ + DOUBLE *b, **A; + DOUBLE *dpar; + DOUBLE *tmp_par; + DOUBLE chi_pre, chi_pos, dchi; + RegressionResult result; + int i, count; + + result = SUFFIX(chi_squared) (f, xvals, par, yvals, sigmas, x_dim, &chi_pre); + if (result != REG_ok) + return result; + + ALLOC_MATRIX (A, p_dim, p_dim); + dpar = g_new (DOUBLE, p_dim); + tmp_par = g_new (DOUBLE, p_dim); + b = g_new (DOUBLE, p_dim); +#ifdef DEBUG + printf ("Chi Squared : %lf", chi_pre); +#endif + + for (count = 0; count < MAX_STEPS; count++) { + for (i = 0; i < p_dim; i++) { + /* + * d Chi + * b == ----- + * k d p + * k + */ + result = SUFFIX(chi_derivative) (f, &dchi, xvals, par, i, + yvals, sigmas, x_dim); + if (result != REG_ok) + goto out; + + b[i] = - dchi; + } + + result = SUFFIX(coefficient_matrix) (A, f, xvals, par, yvals, + sigmas, x_dim, p_dim, r); + if (result != REG_ok) + goto out; + + result = SUFFIX(linear_solve) (A, b, p_dim, dpar); + if (result != REG_ok) + goto out; + + for(i = 0; i < p_dim; i++) + tmp_par[i] = par[i] + dpar[i]; + + result = SUFFIX(chi_squared) (f, xvals, par, yvals, sigmas, + x_dim, &chi_pos); + if (result != REG_ok) + goto out; + +#ifdef DEBUG + printf ("Chi Squared : %lf", chi_pre); + printf ("Chi Squared : %lf", chi_pos); + printf ("r : %lf", r); +#endif + + if (chi_pos <= chi_pre + DELTA / 2) { + /* There is improvement */ + r /= 10; + par = tmp_par; + + if (SUFFIX(fabs) (chi_pos - chi_pre) < DELTA) + break; + + chi_pre = chi_pos; + } else { + r *= 10; + } + } + + result = SUFFIX(parameter_errors) (f, xvals, par, yvals, sigmas, + x_dim, p_dim, errors); + if (result != REG_ok) + goto out; + + *chi = chi_pos; + + out: + FREE_MATRIX (A, p_dim, p_dim); + g_free (dpar); + g_free (tmp_par); + g_free (b); + + return result; +} diff --git a/lib/goffice-0.0.4/goffice/utils/go-regression.h b/lib/goffice-0.0.4/goffice/utils/go-regression.h new file mode 100644 index 0000000000..62ca38a8a0 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/go-regression.h @@ -0,0 +1,240 @@ +#ifndef GNUMERIC_REGRESSION_H +#define GNUMERIC_REGRESSION_H + +#include + +typedef enum { + REG_ok, + REG_invalid_dimensions, + REG_invalid_data, + REG_not_enough_data, + REG_near_singular_good, /* Probably good result */ + REG_near_singular_bad, /* Probably bad result */ + REG_singular +} RegressionResult; + + +/** + * linear_regression: + * @xss: x-vectors. (I.e., independent data.) + * @dim: number of x-vectors. + * @ys: y-vector. (Dependent data.) + * @n: number of data points. + * @affine: if true, a non-zero constant is allowed. + * @res: output place for constant[0] and slope1[1], slope2[2], ... + * There will be dim+1 results. + * + * This performs multi-dimensional linear regressions on the input points. + * Fits to "y = b + a1 * x1 + ... ad * xd". + * + * Returns RegressionResult as above. + */ + +typedef struct { + double *se; /*SE for each parameter estimator*/ + double *t; /*t values for each parameter estimator*/ + double sqr_r; + double adj_sqr_r; + double se_y; /* The Standard Error of Y */ + double F; + int df_reg; + int df_resid; + int df_total; + double ss_reg; + double ss_resid; + double ss_total; + double ms_reg; + double ms_resid; + double ybar; + double *xbar; + double var; /* The variance of the entire regression: + sum(errors^2)/(n-xdim) */ +} regression_stat_t; + +regression_stat_t * go_regression_stat_new (void); +void go_regression_stat_destroy (regression_stat_t *regression_stat); + +RegressionResult go_linear_regression (double **xss, int dim, + const double *ys, int n, + gboolean affine, + double *res, + regression_stat_t *stat); + + +/** + * exponential_regression: + * @xss: x-vectors. (I.e., independent data.) + * @dim: number of x-vectors. + * @ys: y-vector. (Dependent data.) + * @n: number of data points. + * @affine: if true, a non-one multiplier is allowed. + * @res: output place for constant[0] and root1[1], root2[2], ... + * There will be dim+1 results. + * + * This performs one-dimensional linear regressions on the input points. + * Fits to "y = b * m1^x1 * ... * md^xd " or equivalently to + * "log y = log b + x1 * log m1 + ... + xd * log md". + * + * Returns RegressionResult as above. + */ + +RegressionResult go_exponential_regression (double **xss, int dim, + const double *ys, int n, + gboolean affine, + double *res, + regression_stat_t *stat); + +/** + * logarithmic_regression: + * @xss: x-vectors. (Ie., independent data.) + * @dim: number of x-vectors. + * @ys: y-vector. (Dependent data.) + * @n: number of data points. + * @affine: if true, a non-zero constant is allowed. + * @res: output place for constant[0] and factor1[1], factor2[2], ... + * There will be dim+1 results. + * + * This is almost a copy of linear_regression and produces multi-dimensional + * linear regressions on the input points after transforming xss to ln(xss). + * Fits to "y = b + a1 * z1 + ... ad * zd" with "zi = ln (xi)". + * Problems with arrays in the calling function: see comment to + * gnumeric_linest, which is also valid for gnumeric_logreg. + * + * Returns RegressionResult as above. (Errors: less than two points, + * all points on a vertical line, non-positive x data.) + */ + +RegressionResult go_logarithmic_regression (double **xss, int dim, + const double *ys, int n, + gboolean affine, + double *res, + regression_stat_t *stat); + +/** + * logarithmic_fit: + * @xs: x-vector. (Ie., independent data.) + * @ys: y-vector. (Dependent data.) + * @n: number of data points. + * @res: output place for sign[0], a[1], b[2], c[3], and + * sum of squared residuals[4]. + * + * This performs a two-dimensional non-linear fitting on the input points. + * Fits to "y = a + b * ln (sign * (x - c))", with sign in {-1, +1}. + * The graph is a logarithmic curve moved horizontally by c and possibly + * mirrored across the y-axis (if sign = -1). + * + * Returns RegressionResult as above. + * (Requires: at least 3 different x values, at least 3 different y values.) + * + * Fits c (and sign) by iterative trials, but seems to be fast enough even + * for automatic recomputation. + * + * Adapts c until a local minimum of squared residuals is reached. For each + * new c tried out the corresponding a and b are calculated by linear + * regression. If no local minimum is found, an error is returned. If there + * is more than one local minimum, the one found is not necessarily the + * smallest (i.e., there might be cases in which the returned fit is not the + * best possible). If the shape of the point cloud is to different from + * ``logarithmic'', either sign can not be determined (error returned) or no + * local minimum will be found. + */ + +/* Final accuracy of c is: width of x-range rounded to the next smaller + * (10^integer), the result times LOGFIT_C_ACCURACY. + * If you change it, remember to change the help-text for LOGFIT. + * FIXME: Is there a way to stringify this macros value for the help-text? */ +#define LOGFIT_C_ACCURACY 0.000001 + +/* Stepwidth for testing for sign is: width of x-range + * times LOGFIT_C_STEP_FACTOR. Value is tested a bit. */ +#define LOGFIT_C_STEP_FACTOR 0.05 + +/* Width of fitted c-range is: width of x-range + * times LOGFIT_C_RANGE_FACTOR. Value is tested a bit. + * Point clouds with a local minimum of squared residuals outside the fitted + * c-range are very weakly bent. */ +#define LOGFIT_C_RANGE_FACTOR 100 + +RegressionResult go_logarithmic_fit (double *xs, + const double *ys, int n, + double *res); + + + +typedef RegressionResult (*RegressionFunction) + (double * x, double * params, double *f); + + +RegressionResult go_non_linear_regression (RegressionFunction f, + double **xvals, + double *par, + double *yvals, + double *sigmas, + int x_dim, + int p_dim, + double *chi, + double *errors); + + +gboolean go_matrix_invert (double **A, int n); +double go_matrix_determinant (double **A, int n); + +#ifdef GOFFICE_WITH_LONG_DOUBLE +typedef struct { + long double *se; /*SE for each parameter estimator*/ + long double *t; /*t values for each parameter estimator*/ + long double sqr_r; + long double adj_sqr_r; + long double se_y; /* The Standard Error of Y */ + long double F; + int df_reg; + int df_resid; + int df_total; + long double ss_reg; + long double ss_resid; + long double ss_total; + long double ms_reg; + long double ms_resid; + long double ybar; + long double *xbar; + long double var; /* The variance of the entire regression: + sum(errors^2)/(n-xdim) */ +} regression_stat_tl; + +regression_stat_tl * go_regression_stat_newl (void); +void go_regression_stat_destroyl (regression_stat_tl *regression_stat); + +RegressionResult go_linear_regressionl (long double **xss, int dim, + const long double *ys, int n, + gboolean affine, + long double *res, + regression_stat_tl *stat); +RegressionResult go_exponential_regressionl (long double **xss, int dim, + const long double *ys, int n, + gboolean affine, + long double *res, + regression_stat_tl *stat); +RegressionResult go_logarithmic_regressionl (long double **xss, int dim, + const long double *ys, int n, + gboolean affine, + long double *res, + regression_stat_tl *stat); +RegressionResult go_logarithmic_fitl (long double *xs, + const long double *ys, int n, + long double *res); +typedef RegressionResult (*RegressionFunctionl) + (long double * x, long double * params, long double *f); +RegressionResult go_non_linear_regressionl (RegressionFunctionl f, + long double **xvals, + long double *par, + long double *yvals, + long double *sigmas, + int x_dim, + int p_dim, + long double *chi, + long double *errors); +gboolean go_matrix_invertl (long double **A, int n); +long double go_matrix_determinantl (long double **A, int n); +#endif + +#endif diff --git a/lib/goffice/utils/go-units.h b/lib/goffice-0.0.4/goffice/utils/go-units.h similarity index 95% rename from lib/goffice/utils/go-units.h rename to lib/goffice-0.0.4/goffice/utils/go-units.h index a5b53fad9e..d948a3c044 100644 --- a/lib/goffice/utils/go-units.h +++ b/lib/goffice-0.0.4/goffice/utils/go-units.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #ifndef GO_UNITS_H @@ -65,7 +65,6 @@ G_BEGIN_DECLS #define GO_EMU_TO_CM(emu) ((emu)*CM_PER_IN/EMU_PER_IN/100) typedef gint64 go_unit_t; -#define GO_UNIT_T_FORMAT G_GINT64_FORMAT typedef struct { go_unit_t x; diff --git a/lib/goffice/utils/goffice-utils.h b/lib/goffice-0.0.4/goffice/utils/goffice-utils.h similarity index 70% rename from lib/goffice/utils/goffice-utils.h rename to lib/goffice-0.0.4/goffice/utils/goffice-utils.h index f5574992cf..e0b4a2719e 100644 --- a/lib/goffice/utils/goffice-utils.h +++ b/lib/goffice-0.0.4/goffice/utils/goffice-utils.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -26,11 +26,16 @@ G_BEGIN_DECLS -typedef guint32 GOColor; -typedef struct _GOFont GOFont; -typedef struct _GOPattern GOPattern; -typedef struct _GOMarker GOMarker; -typedef struct _GnmFormat GOFormat; /* pull this down after rewrite */ +typedef guint32 GOColor; +typedef struct _GOFont GOFont; +typedef struct _GOPattern GOPattern; +typedef struct _GOMarker GOMarker; +typedef struct _GOFormat GOFormat; +typedef struct _GOFormatElement GOFormatElement; +typedef struct _GODateConventions GODateConventions; + +/* rename this */ +typedef struct _GOMemChunk GOMemChunk; typedef const char *(*GOTranslateFunc)(char const *path, gpointer func_data); diff --git a/lib/goffice-0.0.4/goffice/utils/goffice-win32-stub.def b/lib/goffice-0.0.4/goffice/utils/goffice-win32-stub.def new file mode 100755 index 0000000000..e5b0810b7e --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/goffice-win32-stub.def @@ -0,0 +1,3 @@ +EXPORTS + HtmlHelp_ + FindMimeFromData_ diff --git a/lib/goffice-0.0.4/goffice/utils/regutf8.c b/lib/goffice-0.0.4/goffice/utils/regutf8.c new file mode 100644 index 0000000000..ff0dfc2966 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/regutf8.c @@ -0,0 +1,705 @@ +/* + * regutf8.c: UTF-8 regexp routines. + * + * Author: + * Morten Welinder (terra@gnome.org) + */ + +#include +#include "regutf8.h" +#include "go-glib-extras.h" +#include +#include +#include + +static GObjectClass *parent_class; + +enum { + PROP_0, + PROP_SEARCH_TEXT, + PROP_REPLACE_TEXT, + PROP_IS_REGEXP, + PROP_IGNORE_CASE, + PROP_PRESERVE_CASE, + PROP_MATCH_WORDS +}; + +/* ------------------------------------------------------------------------- */ + +GQuark +go_search_replace_error_quark (void) +{ + static GQuark q = 0; + if (q == 0) + q = g_quark_from_static_string ("go-search-replace-error-quark"); + + return q; +} + +/* ------------------------------------------------------------------------- */ + +static void +kill_compiled (GoSearchReplace *sr) +{ + if (sr->comp_search) { + go_regfree (sr->comp_search); + g_free (sr->comp_search); + sr->comp_search = NULL; + } +} + +/* ------------------------------------------------------------------------- */ + +static int +go_search_replace_compile (GoSearchReplace *sr) +{ + const char *pattern; + char *tmp; + int flags = 0; + int res; + + g_return_val_if_fail (sr && sr->search_text, REG_EMPTY); + + kill_compiled (sr); + + if (sr->is_regexp) { + pattern = sr->search_text; + tmp = NULL; + sr->plain_replace = + (sr->replace_text && + g_utf8_strchr (sr->replace_text, -1, '$') == 0 && + g_utf8_strchr (sr->replace_text, -1, '\\') == 0); + } else { + /* + * Create a regular expression equivalent to the search + * string. (Thus hoping the regular expression search + * routines are pretty good.) + */ + GString *regexp = g_string_new (NULL); + go_regexp_quote (regexp, sr->search_text); + pattern = tmp = g_string_free (regexp, FALSE); + + sr->plain_replace = TRUE; + } + + if (sr->ignore_case) flags |= REG_ICASE; + + sr->comp_search = g_new0 (GORegexp, 1); + res = go_regcomp (sr->comp_search, pattern, flags); + + g_free (tmp); + + return res; +} + +/* ------------------------------------------------------------------------- */ +/** + * go_search_replace_verify: + * @sr: Search-and-Replace info to be checked + * @repl: Check replacement part too. + * @err: Location to store error message. + * + * Checks that validity of the search-and-replace data and returns TRUE + * on success. + **/ + +gboolean +go_search_replace_verify (GoSearchReplace *sr, gboolean repl, GError **err) +{ + int comp_err; + g_return_val_if_fail (sr != NULL, err ? ((*err = NULL), FALSE) : FALSE); + + if (!sr->search_text || sr->search_text[0] == 0) { + if (err) + g_set_error (err, + go_search_replace_error_quark (), + 0, + _("Search string must not be empty.")); + return FALSE; + } + + if (repl && !sr->replace_text) { + if (err) + g_set_error (err, + go_search_replace_error_quark (), + 0, + _("Search string must not be empty.")); + return FALSE; + } + + comp_err = go_search_replace_compile (sr); + if (comp_err) { + if (err) { + char buf[500]; + go_regerror (comp_err, sr->comp_search, buf, sizeof (buf)); + g_set_error (err, + go_search_replace_error_quark (), + 0, + _("Invalid search pattern (%s)"), + buf); + } + return FALSE; + } + + if (repl && !sr->plain_replace) { + const char *s; + + for (s = sr->replace_text; *s; s = g_utf8_next_char (s)) { + switch (*s) { + case '$': + s++; + switch (*s) { + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if ((*s - '0') <= (int)sr->comp_search->re_nsub) + break; + /* Fall through */ + default: + if (err) + g_set_error (err, + go_search_replace_error_quark (), + 0, + _("Invalid $-specification in replacement.")); + return FALSE; + } + break; + case '\\': + if (s[1] == 0) { + if (err) + g_set_error (err, + go_search_replace_error_quark (), + 0, + _("Invalid trailing backslash in replacement.")); + return FALSE; + } + s++; + break; + } + } + } + + return TRUE; +} + +/* ------------------------------------------------------------------------- */ +/* + * Quote a single UTF-8 encoded character from s into target and return the + * location of the next character in s. + */ +const char * +go_regexp_quote1 (GString *target, const char *s) +{ + g_return_val_if_fail (target != NULL, NULL); + g_return_val_if_fail (s != NULL, NULL); + + switch (*s) { + case '.': case '[': case '\\': + case '*': case '+': case '{': case '?': + case '^': case '$': + case '(': case '|': case ')': + g_string_append_c (target, '\\'); + g_string_append_c (target, *s); + return s + 1; + + case 0: + return s; + + default: + do { + g_string_append_c (target, *s); + s++; + } while ((*s & 0xc0) == 0x80); + + return s; + } +} + +/* ------------------------------------------------------------------------- */ + +/* + * Regexp quote a UTF-8 string. + */ +void +go_regexp_quote (GString *target, const char *s) +{ + g_return_if_fail (target != NULL); + g_return_if_fail (s != NULL); + + while (*s) + s = go_regexp_quote1 (target, s); +} + +/* ------------------------------------------------------------------------- */ + +static gboolean +match_is_word (const char *src, const regmatch_t *pm, gboolean bolp) +{ + /* The empty string is not a word. */ + if (pm->rm_so == pm->rm_eo) + return FALSE; + + if (pm->rm_so > 0 || !bolp) { + /* We get here when something actually preceded the match. */ + gunichar c_pre = g_utf8_get_char (g_utf8_prev_char (src + pm->rm_so)); + if (g_unichar_isalnum (c_pre)) + return FALSE; + } + + { + gunichar c_post = g_utf8_get_char (src + pm->rm_eo); + if (c_post != 0 && g_unichar_isalnum (c_post)) + return FALSE; + } + + return TRUE; +} + +/* ------------------------------------------------------------------------- */ + +typedef enum { + SC_Upper, /* At least one letter. No lower case. */ + SC_Capital, /* Something Like: This */ + SC_Other +} SearchCase; + +static SearchCase +inspect_case (const char *p, const char *pend) +{ + gboolean is_upper = TRUE; + gboolean is_capital = TRUE; + gboolean has_letter = FALSE; + gboolean expect_upper = TRUE; + + for (; p < pend; p = g_utf8_next_char (p)) { + gunichar c = g_utf8_get_char (p); + if (g_unichar_isalpha (c)) { + has_letter = TRUE; + if (!g_unichar_isupper (c)) { + is_upper = FALSE; + } + + if (expect_upper ? !g_unichar_isupper (c) : !g_unichar_islower (c)) { + is_capital = FALSE; + } + expect_upper = FALSE; + } else + expect_upper = TRUE; + } + + if (has_letter) { + if (is_upper) + return SC_Upper; + if (is_capital) + return SC_Capital; + } + + return SC_Other; +} + + +static char * +calculate_replacement (GoSearchReplace *sr, const char *src, const regmatch_t *pm) +{ + char *res; + + if (sr->plain_replace) { + res = g_strdup (sr->replace_text); + } else { + const char *s; + GString *gres = g_string_sized_new (strlen (sr->replace_text)); + + for (s = sr->replace_text; *s; s = g_utf8_next_char (s)) { + switch (*s) { + case '$': + { + int n = s[1] - '0'; + s++; + + g_assert (n > 0 && n <= (int)sr->comp_search->re_nsub); + g_string_append_len (gres, + src + pm[n].rm_so, + pm[n].rm_eo - pm[n].rm_so); + break; + } + case '\\': + s++; + g_assert (*s != 0); + g_string_append_unichar (gres, g_utf8_get_char (s)); + break; + default: + g_string_append_unichar (gres, g_utf8_get_char (s)); + break; + } + } + + res = gres->str; + g_string_free (gres, FALSE); + } + + /* + * Try to preserve the case during replacement, i.e., do the + * following substitutions: + * + * search -> replace + * Search -> Replace + * SEARCH -> REPLACE + * TheSearch -> TheReplace + */ + if (sr->preserve_case) { + SearchCase sc = + inspect_case (src + pm->rm_so, src + pm->rm_eo); + + switch (sc) { + case SC_Upper: + { + char *newres = g_utf8_strup (res, -1); + g_free (res); + res = newres; + break; + } + + case SC_Capital: + { + char *newres = go_utf8_strcapital (res, -1); + g_free (res); + res = newres; + break; + } + + case SC_Other: + break; + +#ifndef DEBUG_SWITCH_ENUM + default: + g_assert_not_reached (); +#endif + } + } + + return res; +} + +/* ------------------------------------------------------------------------- */ + +gboolean +go_search_match_string (GoSearchReplace *sr, const char *src) +{ + int flags = 0; + + g_return_val_if_fail (sr, FALSE); + + if (!sr->comp_search) { + go_search_replace_compile (sr); + g_return_val_if_fail (sr->comp_search, FALSE); + } + + while (1) { + regmatch_t match; + int ret = go_regexec (sr->comp_search, src, 1, &match, flags); + + switch (ret) { + case 0: + if (!sr->match_words) + return TRUE; + + if (match_is_word (src, &match, (flags & REG_NOTBOL) != 0)) + return TRUE; + + /* + * We had a match, but it's not a word. Pretend we saw + * a one-character match and continue after that. + */ + flags |= REG_NOTBOL; + src = g_utf8_next_char (src + match.rm_so); + break; + + case REG_NOMATCH: + return FALSE; + + default: + g_error ("Unexpected error code from regexec: %d.", ret); + return FALSE; + } + } +} + +/* ------------------------------------------------------------------------- */ + +/* + * Returns NULL if nothing changed, or a g_malloc string otherwise. + */ +char * +go_search_replace_string (GoSearchReplace *sr, const char *src) +{ + int nmatch; + regmatch_t *pmatch; + GString *res = NULL; + int ret; + int flags = 0; + + g_return_val_if_fail (sr, NULL); + g_return_val_if_fail (sr->replace_text, NULL); + + if (!sr->comp_search) { + go_search_replace_compile (sr); + g_return_val_if_fail (sr->comp_search, NULL); + } + + nmatch = 1 + sr->comp_search->re_nsub; + pmatch = g_new (regmatch_t, nmatch); + + while ((ret = go_regexec (sr->comp_search, src, nmatch, pmatch, flags)) == 0) { + if (!res) { + /* The size here is a bit arbitrary. */ + int size = strlen (src) + + 10 * strlen (sr->replace_text); + res = g_string_sized_new (size); + } + + if (pmatch[0].rm_so > 0) { + g_string_append_len (res, src, pmatch[0].rm_so); + } + + if (sr->match_words && !match_is_word (src, pmatch, + (flags & REG_NOTBOL) != 0)) { + /* We saw a fake match. */ + if (pmatch[0].rm_so < pmatch[0].rm_eo) { + const char *p = src + pmatch[0].rm_so; + gunichar c = g_utf8_get_char (p); + + g_string_append_unichar (res, c); + + /* Pretend we saw a one-character match. */ + pmatch[0].rm_eo = pmatch[0].rm_so + + (g_utf8_next_char (p) - p); + } + } else { + char *replacement = + calculate_replacement (sr, src, pmatch); + g_string_append (res, replacement); + g_free (replacement); + + if (src[pmatch[0].rm_eo] == 0) { + /* + * We matched and replaced the last character + * of the string. Do not continue as we might + * then match the empty string at the end and + * re-add the replacement. This would happen, + * for example, if you searched for ".*". + */ + src = ""; + break; + } + } + + if (pmatch[0].rm_eo > 0) { + src += pmatch[0].rm_eo; + flags |= REG_NOTBOL; + } + + if (pmatch[0].rm_so == pmatch[0].rm_eo) { + /* + * We have matched a null string at the current point. + * This might happen searching for just an anchor, for + * example. Don't loop forever... + */ + break; + } + } + + g_free (pmatch); + + if (res) { + if (*src) + g_string_append (res, src); + return g_string_free (res, FALSE); + } else { + return NULL; + } +} + +/* ------------------------------------------------------------------------- */ + +static void +go_search_replace_init (GObject *obj) +{ +} + +/* ------------------------------------------------------------------------- */ + +static void +go_search_replace_finalize (GObject *obj) +{ + GoSearchReplace *sr = (GoSearchReplace *)obj; + + kill_compiled (sr); + g_free (sr->search_text); + g_free (sr->replace_text); + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +/* ------------------------------------------------------------------------- */ + +static void +go_search_replace_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GoSearchReplace *sr = (GoSearchReplace *)object; + + switch (property_id) { + case PROP_SEARCH_TEXT: + g_value_set_string (value, sr->search_text); + break; + case PROP_REPLACE_TEXT: + g_value_set_string (value, sr->replace_text); + break; + case PROP_IS_REGEXP: + g_value_set_boolean (value, sr->is_regexp); + break; + case PROP_IGNORE_CASE: + g_value_set_boolean (value, sr->ignore_case); + break; + case PROP_PRESERVE_CASE: + g_value_set_boolean (value, sr->preserve_case); + break; + case PROP_MATCH_WORDS: + g_value_set_boolean (value, sr->match_words); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/* ------------------------------------------------------------------------- */ + +static void +go_search_replace_set_search_text (GoSearchReplace *sr, const char *text) +{ + char *text_copy = g_strdup (text); + g_free (sr->search_text); + sr->search_text = text_copy; + kill_compiled (sr); +} + +static void +go_search_replace_set_replace_text (GoSearchReplace *sr, const char *text) +{ + char *text_copy = g_strdup (text); + g_free (sr->replace_text); + sr->replace_text = text_copy; + kill_compiled (sr); +} + +static void +go_search_replace_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GoSearchReplace *sr = (GoSearchReplace *)object; + + switch (property_id) { + case PROP_SEARCH_TEXT: + go_search_replace_set_search_text (sr, g_value_get_string (value)); + break; + case PROP_REPLACE_TEXT: + go_search_replace_set_replace_text (sr, g_value_get_string (value)); + break; + case PROP_IS_REGEXP: + sr->is_regexp = g_value_get_boolean (value); + kill_compiled (sr); + break; + case PROP_IGNORE_CASE: + sr->ignore_case = g_value_get_boolean (value); + kill_compiled (sr); + break; + case PROP_PRESERVE_CASE: + sr->preserve_case = g_value_get_boolean (value); + kill_compiled (sr); + break; + case PROP_MATCH_WORDS: + sr->match_words = g_value_get_boolean (value); + kill_compiled (sr); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/* ------------------------------------------------------------------------- */ + +static void +go_search_replace_class_init (GObjectClass *gobject_class) +{ + parent_class = g_type_class_peek_parent (gobject_class); + + gobject_class->finalize = go_search_replace_finalize; + gobject_class->get_property = go_search_replace_get_property; + gobject_class->set_property = go_search_replace_set_property; + + g_object_class_install_property + (gobject_class, + PROP_SEARCH_TEXT, + g_param_spec_string ("search-text", + _("Search Text"), + _("The text to search for"), + NULL, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_REPLACE_TEXT, + g_param_spec_string ("replace-text", + _("Replacement Text"), + _("The text to replace with"), + NULL, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_IS_REGEXP, + g_param_spec_boolean ("is-regexp", + _("Is Regular Expression"), + _("Is the search text a regular expression."), + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_IGNORE_CASE, + g_param_spec_boolean ("ignore-case", + _("Ignore Case"), + _("Ignore the case of letters."), + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_PRESERVE_CASE, + g_param_spec_boolean ("preserve-case", + _("Preserve Case"), + _("Preserve the case of letters."), + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_MATCH_WORDS, + g_param_spec_boolean ("match-words", + _("Match Words"), + _("Match whole words only."), + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); +} + +/* ------------------------------------------------------------------------- */ + +GSF_CLASS (GoSearchReplace, go_search_replace, + go_search_replace_class_init, go_search_replace_init, G_TYPE_OBJECT) diff --git a/lib/goffice-0.0.4/goffice/utils/regutf8.h b/lib/goffice-0.0.4/goffice/utils/regutf8.h new file mode 100644 index 0000000000..11903d1dcf --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/regutf8.h @@ -0,0 +1,51 @@ +#ifndef GO_REGUTF8_H +#define GO_REGUTF8_H + +#include +#include +#include + +/* -------------------------------------------------------------------------- */ + +G_BEGIN_DECLS + +#define GO_SEARCH_REPLACE_TYPE (go_search_replace_get_type ()) +#define GO_SEARCH_REPLACE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_SEARCH_REPLACE_TYPE, GoSearchReplace)) +#define GO_IS_SEARCH_REPLACE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_SEARCH_REPLACE_TYPE)) + +typedef struct _GoSearchReplace { + GObject base; + + /*< public >*/ + char *search_text; + char *replace_text; + + GORegexp *comp_search; + gboolean is_regexp; /* Search text is a regular expression. */ + gboolean ignore_case; /* Consider "a" and "A" the same. */ + gboolean preserve_case; /* Like Emacs' case-replace. */ + gboolean match_words; /* Like grep -w. */ + + /*< private >*/ + gboolean plain_replace; +} GoSearchReplace; + +typedef struct { + GObjectClass g_object_class; +} GoSearchReplaceClass; + + +GQuark go_search_replace_error_quark (void); +GType go_search_replace_get_type (void); + +gboolean go_search_replace_verify (GoSearchReplace *sr, gboolean repl, GError **err); + +gboolean go_search_match_string (GoSearchReplace *sr, const char *src); +char * go_search_replace_string (GoSearchReplace *sr, const char *src); + +const char *go_regexp_quote1 (GString *target, const char *s); +void go_regexp_quote (GString *target, const char *s); + +G_END_DECLS + +#endif /* GO_REGUTF8_H */ diff --git a/lib/goffice-0.0.4/goffice/utils/svg-patterns.xml b/lib/goffice-0.0.4/goffice/utils/svg-patterns.xml new file mode 100644 index 0000000000..c65ab3c8e5 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/svg-patterns.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/goffice-0.0.4/goffice/utils/win32-stub.c b/lib/goffice-0.0.4/goffice/utils/win32-stub.c new file mode 100755 index 0000000000..d9d131a764 --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/win32-stub.c @@ -0,0 +1,24 @@ +#include +#include "win32-stub.h" +#include + +HWND HtmlHelp_ (HWND hwndCaller, + LPCSTR pszFile, + UINT uCommand, + DWORD dwData) +{ + return HtmlHelp (hwndCaller, pszFile, uCommand, dwData); +} + +HRESULT FindMimeFromData_(LPBC pBC, + LPCWSTR pwzUrl, + LPVOID pBuffer, + DWORD cbSize, + LPCWSTR pwzMimeProposed, + DWORD dwMimeFlags, + LPWSTR *ppwzMimeOut, + DWORD dwReserved) +{ + return FindMimeFromData (pBC, pwzUrl, pBuffer, cbSize, pwzMimeProposed, + dwMimeFlags, ppwzMimeOut, dwReserved); +} diff --git a/lib/goffice-0.0.4/goffice/utils/win32-stub.h b/lib/goffice-0.0.4/goffice/utils/win32-stub.h new file mode 100755 index 0000000000..3fe2581c6a --- /dev/null +++ b/lib/goffice-0.0.4/goffice/utils/win32-stub.h @@ -0,0 +1,21 @@ +#ifndef _HTMLHELP_STUB_h_ +#define _HTMLHELP_STUB_h_ + +#include +#include + +HWND HtmlHelp_ (HWND hwndCaller, + LPCSTR pszFile, + UINT uCommand, + DWORD dwData); + +HRESULT FindMimeFromData_(LPBC pBC, + LPCWSTR pwzUrl, + LPVOID pBuffer, + DWORD cbSize, + LPCWSTR pwzMimeProposed, + DWORD dwMimeFlags, + LPWSTR *ppwzMimeOut, + DWORD dwReserved); + +#endif diff --git a/lib/goffice-0.0.4/install-sh b/lib/goffice-0.0.4/install-sh new file mode 100755 index 0000000000..6ce63b9f76 --- /dev/null +++ b/lib/goffice-0.0.4/install-sh @@ -0,0 +1,294 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. 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}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# 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 [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/lib/goffice-0.0.4/intltool-extract.in b/lib/goffice-0.0.4/intltool-extract.in new file mode 100644 index 0000000000..adfa97134d --- /dev/null +++ b/lib/goffice-0.0.4/intltool-extract.in @@ -0,0 +1,839 @@ +#!@INTLTOOL_PERL@ -w +# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +# +# The Intltool Message Extractor +# +# Copyright (C) 2000-2001, 2003 Free Software Foundation. +# +# Intltool 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. +# +# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, 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. +# +# Authors: Kenneth Christiansen +# Darin Adler +# + +## Release information +my $PROGRAM = "intltool-extract"; +my $PACKAGE = "intltool"; +my $VERSION = "0.34.1"; + +## Loaded modules +use strict; +use File::Basename; +use Getopt::Long; + +## Scalars used by the option stuff +my $TYPE_ARG = "0"; +my $LOCAL_ARG = "0"; +my $HELP_ARG = "0"; +my $VERSION_ARG = "0"; +my $UPDATE_ARG = "0"; +my $QUIET_ARG = "0"; +my $SRCDIR_ARG = "."; + +my $FILE; +my $OUTFILE; + +my $gettext_type = ""; +my $input; +my %messages = (); +my %loc = (); +my %count = (); +my %comments = (); +my $strcount = 0; + +my $XMLCOMMENT = ""; + +## Use this instead of \w for XML files to handle more possible characters. +my $w = "[-A-Za-z0-9._:]"; + +## Always print first +$| = 1; + +## Handle options +GetOptions ( + "type=s" => \$TYPE_ARG, + "local|l" => \$LOCAL_ARG, + "help|h" => \$HELP_ARG, + "version|v" => \$VERSION_ARG, + "update" => \$UPDATE_ARG, + "quiet|q" => \$QUIET_ARG, + "srcdir=s" => \$SRCDIR_ARG, + ) or &error; + +&split_on_argument; + + +## Check for options. +## This section will check for the different options. + +sub split_on_argument { + + if ($VERSION_ARG) { + &version; + + } elsif ($HELP_ARG) { + &help; + + } elsif ($LOCAL_ARG) { + &place_local; + &extract; + + } elsif ($UPDATE_ARG) { + &place_normal; + &extract; + + } elsif (@ARGV > 0) { + &place_normal; + &message; + &extract; + + } else { + &help; + + } +} + +sub place_normal { + $FILE = $ARGV[0]; + $OUTFILE = "$FILE.h"; +} + +sub place_local { + $FILE = $ARGV[0]; + $OUTFILE = fileparse($FILE, ()); + if (!-e "tmp/") { + system("mkdir tmp/"); + } + $OUTFILE = "./tmp/$OUTFILE.h" +} + +sub determine_type { + if ($TYPE_ARG =~ /^gettext\/(.*)/) { + $gettext_type=$1 + } +} + +## Sub for printing release information +sub version{ + print <<_EOF_; +${PROGRAM} (${PACKAGE}) $VERSION +Copyright (C) 2000, 2003 Free Software Foundation, Inc. +Written by Kenneth Christiansen, 2000. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +_EOF_ + exit; +} + +## Sub for printing usage information +sub help { + print <<_EOF_; +Usage: ${PROGRAM} [OPTION]... [FILENAME] +Generates a header file from an XML source file. + +It grabs all strings between <_translatable_node> and its end tag in +XML files. Read manpage (man ${PROGRAM}) for more info. + + --type=TYPE Specify the file type of FILENAME. Currently supports: + "gettext/glade", "gettext/ini", "gettext/keys" + "gettext/rfc822deb", "gettext/schemas", + "gettext/scheme", "gettext/xml" + -l, --local Writes output into current working directory + (conflicts with --update) + --update Writes output into the same directory the source file + reside (conflicts with --local) + --srcdir Root of the source tree + -v, --version Output version information and exit + -h, --help Display this help and exit + -q, --quiet Quiet mode + +Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") +or send email to . +_EOF_ + exit; +} + +## Sub for printing error messages +sub error{ + print STDERR "Try `${PROGRAM} --help' for more information.\n"; + exit; +} + +sub message { + print "Generating C format header file for translation.\n" unless $QUIET_ARG; +} + +sub extract { + &determine_type; + + &convert; + + open OUT, ">$OUTFILE"; + binmode (OUT) if $^O eq 'MSWin32'; + &msg_write; + close OUT; + + print "Wrote $OUTFILE\n" unless $QUIET_ARG; +} + +sub convert { + + ## Reading the file + { + local (*IN); + local $/; #slurp mode + open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!"; + $input = ; + } + + &type_ini if $gettext_type eq "ini"; + &type_keys if $gettext_type eq "keys"; + &type_xml if $gettext_type eq "xml"; + &type_glade if $gettext_type eq "glade"; + &type_scheme if $gettext_type eq "scheme"; + &type_schemas if $gettext_type eq "schemas"; + &type_rfc822deb if $gettext_type eq "rfc822deb"; +} + +sub entity_decode_minimal +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + + return $_; +} + +sub entity_decode +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + s/<//g; + + return $_; +} + +sub escape_char +{ + return '\"' if $_ eq '"'; + return '\n' if $_ eq "\n"; + return '\\' if $_ eq '\\'; + + return $_; +} + +sub escape +{ + my ($string) = @_; + return join "", map &escape_char, split //, $string; +} + +sub type_ini { + ### For generic translatable desktop files ### + while ($input =~ /^_.*=(.*)$/mg) { + $messages{$1} = []; + } +} + +sub type_keys { + ### For generic translatable mime/keys files ### + while ($input =~ /^\s*_\w+=(.*)$/mg) { + $messages{$1} = []; + } +} + +sub type_xml { + ### For generic translatable XML files ### + my $tree = readXml($input); + parseTree(0, $tree); +} + +sub print_var { + my $var = shift; + my $vartype = ref $var; + + if ($vartype =~ /ARRAY/) { + my @arr = @{$var}; + print "[ "; + foreach my $el (@arr) { + print_var($el); + print ", "; + } + print "] "; + } elsif ($vartype =~ /HASH/) { + my %hash = %{$var}; + print "{ "; + foreach my $key (keys %hash) { + print "$key => "; + print_var($hash{$key}); + print ", "; + } + print "} "; + } else { + print $var; + } +} + +# Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment) +sub getAttributeString +{ + my $sub = shift; + my $do_translate = shift || 1; + my $language = shift || ""; + my $translate = shift; + my $result = ""; + foreach my $e (reverse(sort(keys %{ $sub }))) { + my $key = $e; + my $string = $sub->{$e}; + my $quote = '"'; + + $string =~ s/^[\s]+//; + $string =~ s/[\s]+$//; + + if ($string =~ /^'.*'$/) + { + $quote = "'"; + } + $string =~ s/^['"]//g; + $string =~ s/['"]$//g; + + ## differences from intltool-merge.in.in + if ($key =~ /^_/) { + $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT; + $messages{entity_decode($string)} = []; + $$translate = 2; + } + ## differences end here from intltool-merge.in.in + $result .= " $key=$quote$string$quote"; + } + return $result; +} + +# Verbatim copy from intltool-merge.in.in +sub getXMLstring +{ + my $ref = shift; + my $spacepreserve = shift || 0; + my @list = @{ $ref }; + my $result = ""; + + my $count = scalar(@list); + my $attrs = $list[0]; + my $index = 1; + + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + + while ($index < $count) { + my $type = $list[$index]; + my $content = $list[$index+1]; + if (! $type ) { + # We've got CDATA + if ($content) { + # lets strip the whitespace here, and *ONLY* here + $content =~ s/\s+/ /gs if (!$spacepreserve); + $result .= $content; + } + } elsif ( "$type" ne "1" ) { + # We've got another element + $result .= "<$type"; + $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements + if ($content) { + my $subresult = getXMLstring($content, $spacepreserve); + if ($subresult) { + $result .= ">".$subresult . ""; + } else { + $result .= "/>"; + } + } else { + $result .= "/>"; + } + } + $index += 2; + } + return $result; +} + +# Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed +# Translate list of nodes if necessary +sub translate_subnodes +{ + my $fh = shift; + my $content = shift; + my $language = shift || ""; + my $singlelang = shift || 0; + my $spacepreserve = shift || 0; + + my @nodes = @{ $content }; + + my $count = scalar(@nodes); + my $index = 0; + while ($index < $count) { + my $type = $nodes[$index]; + my $rest = $nodes[$index+1]; + traverse($fh, $type, $rest, $language, $spacepreserve); + $index += 2; + } +} + +# Based on traverse() in intltool-merge.in.in +sub traverse +{ + my $fh = shift; # unused, to allow us to sync code between -merge and -extract + my $nodename = shift; + my $content = shift; + my $language = shift || ""; + my $spacepreserve = shift || 0; + + if ($nodename && "$nodename" eq "1") { + $XMLCOMMENT = $content; + } elsif ($nodename) { + # element + my @all = @{ $content }; + my $attrs = shift @all; + my $translate = 0; + my $outattr = getAttributeString($attrs, 1, $language, \$translate); + + if ($nodename =~ /^_/) { + $translate = 1; + $nodename =~ s/^_//; + } + my $lookup = ''; + + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + if ($translate) { + $lookup = getXMLstring($content, $spacepreserve); + if (!$spacepreserve) { + $lookup =~ s/^\s+//s; + $lookup =~ s/\s+$//s; + } + + if ($lookup && $translate != 2) { + $comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT; + $messages{$lookup} = []; + } elsif ($translate == 2) { + translate_subnodes($fh, \@all, $language, 1, $spacepreserve); + } + } else { + $XMLCOMMENT = ""; + my $count = scalar(@all); + if ($count > 0) { + my $index = 0; + while ($index < $count) { + my $type = $all[$index]; + my $rest = $all[$index+1]; + traverse($fh, $type, $rest, $language, $spacepreserve); + $index += 2; + } + } + } + $XMLCOMMENT = ""; + } +} + + +# Verbatim copy from intltool-merge.in.in, $fh for compatibility +sub parseTree +{ + my $fh = shift; + my $ref = shift; + my $language = shift || ""; + + my $name = shift @{ $ref }; + my $cont = shift @{ $ref }; + + while (!$name || "$name" eq "1") { + $name = shift @{ $ref }; + $cont = shift @{ $ref }; + } + + my $spacepreserve = 0; + my $attrs = @{$cont}[0]; + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + traverse($fh, $name, $cont, $language, $spacepreserve); +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_comment +{ + my $expat = shift; + my $data = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 1 => $data; +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_cdatastart +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 0 => $expat->original_string(); +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_cdataend +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + $clist->[$pos] .= $expat->original_string(); +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_char +{ + my $expat = shift; + my $text = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + # Use original_string so that we retain escaped entities + # in CDATA sections. + # + if ($pos > 0 and $clist->[$pos - 1] eq '0') { + $clist->[$pos] .= $expat->original_string(); + } else { + push @$clist, 0 => $expat->original_string(); + } +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_start +{ + my $expat = shift; + my $tag = shift; + my @origlist = (); + + # Use original_string so that we retain escaped entities + # in attribute values. We must convert the string to an + # @origlist array to conform to the structure of the Tree + # Style. + # + my @original_array = split /\x/, $expat->original_string(); + my $source = $expat->original_string(); + + # Remove leading tag. + # + $source =~ s|^\s*<\s*(\S+)||s; + + # Grab attribute key/value pairs and push onto @origlist array. + # + while ($source) + { + if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; + push @origlist, $1; + push @origlist, '"' . $2 . '"'; + } + elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; + push @origlist, $1; + push @origlist, "'" . $2 . "'"; + } + else + { + last; + } + } + + my $ol = [ { @origlist } ]; + + push @{ $expat->{Lists} }, $expat->{Curlist}; + push @{ $expat->{Curlist} }, $tag => $ol; + $expat->{Curlist} = $ol; +} + +# Copied from intltool-merge.in.in and added comment handler. +sub readXml +{ + my $xmldoc = shift || return; + my $ret = eval 'require XML::Parser'; + if(!$ret) { + die "You must have XML::Parser installed to run $0\n\n"; + } + my $xp = new XML::Parser(Style => 'Tree'); + $xp->setHandlers(Char => \&intltool_tree_char); + $xp->setHandlers(Start => \&intltool_tree_start); + $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); + $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); + + ## differences from intltool-merge.in.in + $xp->setHandlers(Comment => \&intltool_tree_comment); + ## differences end here from intltool-merge.in.in + + my $tree = $xp->parse($xmldoc); + #print_var($tree); + +# Hello thereHowdydo +# would be: +# [foo, [{}, 1, "comment", head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, +# [{}, 0, "Howdy", ref, [{}]], 0, "do" ] ] + + return $tree; +} + +sub type_schemas { + ### For schemas XML files ### + + # FIXME: We should handle escaped < (less than) + while ($input =~ / + \s* + (\s*(?:\s*)?(.*?)\s*<\/default>\s*)? + (\s*(?:\s*)?(.*?)\s*<\/short>\s*)? + (\s*(?:\s*)?(.*?)\s*<\/long>\s*)? + <\/locale> + /sgx) { + my @totranslate = ($3,$6,$9); + my @eachcomment = ($2,$5,$8); + foreach (@totranslate) { + my $currentcomment = shift @eachcomment; + next if !$_; + s/\s+/ /g; + $messages{entity_decode_minimal($_)} = []; + $comments{entity_decode_minimal($_)} = $currentcomment if (defined($currentcomment)); + } + } +} + +sub type_rfc822deb { + ### For rfc822-style Debian configuration files ### + + my $lineno = 1; + my $type = ''; + while ($input =~ /\G(.*?)(^|\n)(_+)([^:]+):[ \t]*(.*?)(?=\n\S|$)/sg) + { + my ($pre, $newline, $underscore, $tag, $text) = ($1, $2, $3, $4, $5); + while ($pre =~ m/\n/g) + { + $lineno ++; + } + $lineno += length($newline); + my @str_list = rfc822deb_split(length($underscore), $text); + for my $str (@str_list) + { + $strcount++; + $messages{$str} = []; + $loc{$str} = $lineno; + $count{$str} = $strcount; + my $usercomment = ''; + while($pre =~ s/(^|\n)#([^\n]*)$//s) + { + $usercomment = "\n" . $2 . $usercomment; + } + $comments{$str} = $tag . $usercomment; + } + $lineno += ($text =~ s/\n//g); + } +} + +sub rfc822deb_split { + # Debian defines a special way to deal with rfc822-style files: + # when a value contain newlines, it consists of + # 1. a short form (first line) + # 2. a long description, all lines begin with a space, + # and paragraphs are separated by a single dot on a line + # This routine returns an array of all paragraphs, and reformat + # them. + # When first argument is 2, the string is a comma separated list of + # values. + my $type = shift; + my $text = shift; + $text =~ s/^[ \t]//mg; + return (split(/, */, $text, 0)) if $type ne 1; + return ($text) if $text !~ /\n/; + + $text =~ s/([^\n]*)\n//; + my @list = ($1); + my $str = ''; + for my $line (split (/\n/, $text)) + { + chomp $line; + if ($line =~ /^\.\s*$/) + { + # New paragraph + $str =~ s/\s*$//; + push(@list, $str); + $str = ''; + } + elsif ($line =~ /^\s/) + { + # Line which must not be reformatted + $str .= "\n" if length ($str) && $str !~ /\n$/; + $line =~ s/\s+$//; + $str .= $line."\n"; + } + else + { + # Continuation line, remove newline + $str .= " " if length ($str) && $str !~ /\n$/; + $str .= $line; + } + } + $str =~ s/\s*$//; + push(@list, $str) if length ($str); + return @list; +} + +sub type_glade { + ### For translatable Glade XML files ### + + my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message"; + + while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) { + # Glade sometimes uses tags that normally mark translatable things for + # little bits of non-translatable content. We work around this by not + # translating strings that only includes something like label4 or window1. + $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label|dialog)[0-9]+$/; + } + + while ($input =~ /(..[^<]*)<\/items>/sg) { + for my $item (split (/\n/, $1)) { + $messages{entity_decode($item)} = []; + } + } + + ## handle new glade files + while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"(?:\s+[^>]*comments\s*=\s*"([^"]*)")?[^>]*>([^<]+)<\/\1>/sg) { + $messages{entity_decode($3)} = [] unless $3 =~ /^(window|label)[0-9]+$/; + if (defined($2) and !($3 =~ /^(window|label)[0-9]+$/)) { + $comments{entity_decode($3)} = entity_decode($2) ; + } + } + while ($input =~ /]*)"\s+description="([^>]+)"\/>/sg) { + $messages{entity_decode_minimal($2)} = []; + } +} + +sub type_scheme { + my ($line, $i, $state, $str, $trcomment, $char); + for $line (split(/\n/, $input)) { + $i = 0; + $state = 0; # 0 - nothing, 1 - string, 2 - translatable string + while ($i < length($line)) { + if (substr($line,$i,1) eq "\"") { + if ($state == 2) { + $comments{$str} = $trcomment if ($trcomment); + $messages{$str} = []; + $str = ''; + $state = 0; $trcomment = ""; + } elsif ($state == 1) { + $str = ''; + $state = 0; $trcomment = ""; + } else { + $state = 1; + $str = ''; + if ($i>0 && substr($line,$i-1,1) eq '_') { + $state = 2; + } + } + } elsif (!$state) { + if (substr($line,$i,1) eq ";") { + $trcomment = substr($line,$i+1); + $trcomment =~ s/^;*\s*//; + $i = length($line); + } elsif ($trcomment && substr($line,$i,1) !~ /\s|\(|\)|_/) { + $trcomment = ""; + } + } else { + if (substr($line,$i,1) eq "\\") { + $char = substr($line,$i+1,1); + if ($char ne "\"" && $char ne "\\") { + $str = $str . "\\"; + } + $i++; + } + $str = $str . substr($line,$i,1); + } + $i++; + } + } +} + +sub msg_write { + my @msgids; + if (%count) + { + @msgids = sort { $count{$a} <=> $count{$b} } keys %count; + } + else + { + @msgids = sort keys %messages; + } + for my $message (@msgids) + { + my $offsetlines = 1; + $offsetlines++ if $message =~ /%/; + if (defined ($comments{$message})) + { + while ($comments{$message} =~ m/\n/g) + { + $offsetlines++; + } + } + print OUT "# ".($loc{$message} - $offsetlines). " \"$FILE\"\n" + if defined $loc{$message}; + print OUT "/* ".$comments{$message}." */\n" + if defined $comments{$message}; + print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/; + + my @lines = split (/\n/, $message, -1); + for (my $n = 0; $n < @lines; $n++) + { + if ($n == 0) + { + print OUT "char *s = N_(\""; + } + else + { + print OUT " \""; + } + + print OUT escape($lines[$n]); + + if ($n < @lines - 1) + { + print OUT "\\n\"\n"; + } + else + { + print OUT "\");\n"; + } + } + } +} + diff --git a/lib/goffice-0.0.4/intltool-merge.in b/lib/goffice-0.0.4/intltool-merge.in new file mode 100644 index 0000000000..9b3a539d8b --- /dev/null +++ b/lib/goffice-0.0.4/intltool-merge.in @@ -0,0 +1,1356 @@ +#!@INTLTOOL_PERL@ -w +# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +# +# The Intltool Message Merger +# +# Copyright (C) 2000, 2003 Free Software Foundation. +# Copyright (C) 2000, 2001 Eazel, Inc +# +# Intltool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 published by the Free Software Foundation. +# +# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, 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. +# +# Authors: Maciej Stachowiak +# Kenneth Christiansen +# Darin Adler +# +# Proper XML UTF-8'ification written by Cyrille Chepelov +# + +## Release information +my $PROGRAM = "intltool-merge"; +my $PACKAGE = "intltool"; +my $VERSION = "0.34.1"; + +## Loaded modules +use strict; +use Getopt::Long; +use Text::Wrap; +use File::Basename; + +my $must_end_tag = -1; +my $last_depth = -1; +my $translation_depth = -1; +my @tag_stack = (); +my @entered_tag = (); +my @translation_strings = (); +my $leading_space = ""; + +## Scalars used by the option stuff +my $HELP_ARG = 0; +my $VERSION_ARG = 0; +my $BA_STYLE_ARG = 0; +my $XML_STYLE_ARG = 0; +my $KEYS_STYLE_ARG = 0; +my $DESKTOP_STYLE_ARG = 0; +my $SCHEMAS_STYLE_ARG = 0; +my $RFC822DEB_STYLE_ARG = 0; +my $QUIET_ARG = 0; +my $PASS_THROUGH_ARG = 0; +my $UTF8_ARG = 0; +my $MULTIPLE_OUTPUT = 0; +my $cache_file; + +## Handle options +GetOptions +( + "help" => \$HELP_ARG, + "version" => \$VERSION_ARG, + "quiet|q" => \$QUIET_ARG, + "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility + "ba-style|b" => \$BA_STYLE_ARG, + "xml-style|x" => \$XML_STYLE_ARG, + "keys-style|k" => \$KEYS_STYLE_ARG, + "desktop-style|d" => \$DESKTOP_STYLE_ARG, + "schemas-style|s" => \$SCHEMAS_STYLE_ARG, + "rfc822deb-style|r" => \$RFC822DEB_STYLE_ARG, + "pass-through|p" => \$PASS_THROUGH_ARG, + "utf8|u" => \$UTF8_ARG, + "multiple-output|m" => \$MULTIPLE_OUTPUT, + "cache|c=s" => \$cache_file + ) or &error; + +my $PO_DIR; +my $FILE; +my $OUTFILE; + +my %po_files_by_lang = (); +my %translations = (); +my $iconv = $ENV{"ICONV"} || $ENV{"INTLTOOL_ICONV"} || "/usr/bin/iconv"; +my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); + +# Use this instead of \w for XML files to handle more possible characters. +my $w = "[-A-Za-z0-9._:]"; + +# XML quoted string contents +my $q = "[^\\\"]*"; + +## Check for options. + +if ($VERSION_ARG) +{ + &print_version; +} +elsif ($HELP_ARG) +{ + &print_help; +} +elsif ($BA_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &ba_merge_translations; + &finalize; +} +elsif ($XML_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &xml_merge_output; + &finalize; +} +elsif ($KEYS_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &keys_merge_translations; + &finalize; +} +elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &desktop_merge_translations; + &finalize; +} +elsif ($SCHEMAS_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &schemas_merge_translations; + &finalize; +} +elsif ($RFC822DEB_STYLE_ARG && @ARGV > 2) +{ + &preparation; + &print_message; + &rfc822deb_merge_translations; + &finalize; +} +else +{ + &print_help; +} + +exit; + +## Sub for printing release information +sub print_version +{ + print <<_EOF_; +${PROGRAM} (${PACKAGE}) ${VERSION} +Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen. + +Copyright (C) 2000-2003 Free Software Foundation, Inc. +Copyright (C) 2000-2001 Eazel, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +_EOF_ + exit; +} + +## Sub for printing usage information +sub print_help +{ + print <<_EOF_; +Usage: ${PROGRAM} [OPTION]... PO_DIRECTORY FILENAME OUTPUT_FILE +Generates an output file that includes some localized attributes from an +untranslated source file. + +Mandatory options: (exactly one must be specified) + -b, --ba-style includes translations in the bonobo-activation style + -d, --desktop-style includes translations in the desktop style + -k, --keys-style includes translations in the keys style + -s, --schemas-style includes translations in the schemas style + -r, --rfc822deb-style includes translations in the RFC822 style + -x, --xml-style includes translations in the standard xml style + +Other options: + -u, --utf8 convert all strings to UTF-8 before merging + (default for everything except RFC822 style) + -p, --pass-through deprecated, does nothing and issues a warning + -m, --multiple-output output one localized file per locale, instead of + a single file containing all localized elements + -c, --cache=FILE specify cache file name + (usually \$top_builddir/po/.intltool-merge-cache) + -q, --quiet suppress most messages + --help display this help and exit + --version output version information and exit + +Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") +or send email to . +_EOF_ + exit; +} + + +## Sub for printing error messages +sub print_error +{ + print STDERR "Try `${PROGRAM} --help' for more information.\n"; + exit; +} + + +sub print_message +{ + print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG; +} + + +sub preparation +{ + $PO_DIR = $ARGV[0]; + $FILE = $ARGV[1]; + $OUTFILE = $ARGV[2]; + + &gather_po_files; + &get_translation_database; +} + +# General-purpose code for looking up translations in .po files + +sub po_file2lang +{ + my ($tmp) = @_; + $tmp =~ s/^.*\/(.*)\.po$/$1/; + return $tmp; +} + +sub gather_po_files +{ + for my $po_file (glob "$PO_DIR/*.po") { + $po_files_by_lang{po_file2lang($po_file)} = $po_file; + } +} + +sub get_local_charset +{ + my ($encoding) = @_; + my $alias_file = $ENV{"G_CHARSET_ALIAS"} || "/usr/lib/charset.alias"; + + # seek character encoding aliases in charset.alias (glib) + + if (open CHARSET_ALIAS, $alias_file) + { + while () + { + next if /^\#/; + return $1 if (/^\s*([-._a-zA-Z0-9]+)\s+$encoding\b/i) + } + + close CHARSET_ALIAS; + } + + # if not found, return input string + + return $encoding; +} + +sub get_po_encoding +{ + my ($in_po_file) = @_; + my $encoding = ""; + + open IN_PO_FILE, $in_po_file or die; + while () + { + ## example: "Content-Type: text/plain; charset=ISO-8859-1\n" + if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) + { + $encoding = $1; + last; + } + } + close IN_PO_FILE; + + if (!$encoding) + { + print STDERR "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n" unless $QUIET_ARG; + $encoding = "ISO-8859-1"; + } + + system ("$iconv -f $encoding -t UTF-8 <$devnull 2>$devnull"); + if ($?) { + $encoding = get_local_charset($encoding); + } + + return $encoding +} + +sub utf8_sanity_check +{ + print STDERR "Warning: option --pass-through has been removed.\n" if $PASS_THROUGH_ARG; + $UTF8_ARG = 1; +} + +sub get_translation_database +{ + if ($cache_file) { + &get_cached_translation_database; + } else { + &create_translation_database; + } +} + +sub get_newest_po_age +{ + my $newest_age; + + foreach my $file (values %po_files_by_lang) + { + my $file_age = -M $file; + $newest_age = $file_age if !$newest_age || $file_age < $newest_age; + } + + $newest_age = 0 if !$newest_age; + + return $newest_age; +} + +sub create_cache +{ + print "Generating and caching the translation database\n" unless $QUIET_ARG; + + &create_translation_database; + + open CACHE, ">$cache_file" || die; + print CACHE join "\x01", %translations; + close CACHE; +} + +sub load_cache +{ + print "Found cached translation database\n" unless $QUIET_ARG; + + my $contents; + open CACHE, "<$cache_file" || die; + { + local $/; + $contents = ; + } + close CACHE; + %translations = split "\x01", $contents; +} + +sub get_cached_translation_database +{ + my $cache_file_age = -M $cache_file; + if (defined $cache_file_age) + { + if ($cache_file_age <= &get_newest_po_age) + { + &load_cache; + return; + } + print "Found too-old cached translation database\n" unless $QUIET_ARG; + } + + &create_cache; +} + +sub create_translation_database +{ + for my $lang (keys %po_files_by_lang) + { + my $po_file = $po_files_by_lang{$lang}; + + if ($UTF8_ARG) + { + my $encoding = get_po_encoding ($po_file); + + if (lc $encoding eq "utf-8") + { + open PO_FILE, "<$po_file"; + } + else + { + print STDERR "WARNING: $po_file is not in UTF-8 but $encoding, converting...\n" unless $QUIET_ARG;; + + open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|"; + } + } + else + { + open PO_FILE, "<$po_file"; + } + + my $nextfuzzy = 0; + my $inmsgid = 0; + my $inmsgstr = 0; + my $msgid = ""; + my $msgstr = ""; + + while () + { + $nextfuzzy = 1 if /^#, fuzzy/; + + if (/^msgid "((\\.|[^\\])*)"/ ) + { + $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; + $msgid = ""; + $msgstr = ""; + + if ($nextfuzzy) { + $inmsgid = 0; + } else { + $msgid = unescape_po_string($1); + $inmsgid = 1; + } + $inmsgstr = 0; + $nextfuzzy = 0; + } + + if (/^msgstr "((\\.|[^\\])*)"/) + { + $msgstr = unescape_po_string($1); + $inmsgstr = 1; + $inmsgid = 0; + } + + if (/^"((\\.|[^\\])*)"/) + { + $msgid .= unescape_po_string($1) if $inmsgid; + $msgstr .= unescape_po_string($1) if $inmsgstr; + } + } + $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; + } +} + +sub finalize +{ +} + +sub unescape_one_sequence +{ + my ($sequence) = @_; + + return "\\" if $sequence eq "\\\\"; + return "\"" if $sequence eq "\\\""; + return "\n" if $sequence eq "\\n"; + return "\r" if $sequence eq "\\r"; + return "\t" if $sequence eq "\\t"; + return "\b" if $sequence eq "\\b"; + return "\f" if $sequence eq "\\f"; + return "\a" if $sequence eq "\\a"; + return chr(11) if $sequence eq "\\v"; # vertical tab, see ascii(7) + + return chr(hex($1)) if ($sequence =~ /\\x([0-9a-fA-F]{2})/); + return chr(oct($1)) if ($sequence =~ /\\([0-7]{3})/); + + # FIXME: Is \0 supported as well? Kenneth and Rodney don't want it, see bug #48489 + + return $sequence; +} + +sub unescape_po_string +{ + my ($string) = @_; + + $string =~ s/(\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\.)/unescape_one_sequence($1)/eg; + + return $string; +} + +## NOTE: deal with < - < but not > - > because it seems its ok to have +## > in the entity. For further info please look at #84738. +sub entity_decode +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + s/</; + close INPUT; + } + + open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!"; + # Binmode so that selftest works ok if using a native Win32 Perl... + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) + { + print OUTPUT $1; + + my $node = $2 . "\n"; + + my @strings = (); + $_ = $node; + while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) { + push @strings, entity_decode($3); + } + print OUTPUT; + + my %langs; + for my $string (@strings) + { + for my $lang (keys %po_files_by_lang) + { + $langs{$lang} = 1 if $translations{$lang, $string}; + } + } + + for my $lang (sort keys %langs) + { + $_ = $node; + s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s; + s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg; + print OUTPUT; + } + } + + print OUTPUT $source; + + close OUTPUT; +} + + +## XML (non-bonobo-activation) merge code + + +# Process tag attributes +# Only parameter is a HASH containing attributes -> values mapping +sub getAttributeString +{ + my $sub = shift; + my $do_translate = shift || 0; + my $language = shift || ""; + my $result = ""; + my $translate = shift; + foreach my $e (reverse(sort(keys %{ $sub }))) { + my $key = $e; + my $string = $sub->{$e}; + my $quote = '"'; + + $string =~ s/^[\s]+//; + $string =~ s/[\s]+$//; + + if ($string =~ /^'.*'$/) + { + $quote = "'"; + } + $string =~ s/^['"]//g; + $string =~ s/['"]$//g; + + if ($do_translate && $key =~ /^_/) { + $key =~ s|^_||g; + if ($language) { + # Handle translation + my $decode_string = entity_decode($string); + my $translation = $translations{$language, $decode_string}; + if ($translation) { + $translation = entity_encode($translation); + $string = $translation; + } + $$translate = 2; + } else { + $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" $translate + } + } + + $result .= " $key=$quote$string$quote"; + } + return $result; +} + +# Returns a translatable string from XML node, it works on contents of every node in XML::Parser tree +sub getXMLstring +{ + my $ref = shift; + my $spacepreserve = shift || 0; + my @list = @{ $ref }; + my $result = ""; + + my $count = scalar(@list); + my $attrs = $list[0]; + my $index = 1; + + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + + while ($index < $count) { + my $type = $list[$index]; + my $content = $list[$index+1]; + if (! $type ) { + # We've got CDATA + if ($content) { + # lets strip the whitespace here, and *ONLY* here + $content =~ s/\s+/ /gs if (!$spacepreserve); + $result .= $content; + } + } elsif ( "$type" ne "1" ) { + # We've got another element + $result .= "<$type"; + $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements + if ($content) { + my $subresult = getXMLstring($content, $spacepreserve); + if ($subresult) { + $result .= ">".$subresult . ""; + } else { + $result .= "/>"; + } + } else { + $result .= "/>"; + } + } + $index += 2; + } + return $result; +} + +# Translate list of nodes if necessary +sub translate_subnodes +{ + my $fh = shift; + my $content = shift; + my $language = shift || ""; + my $singlelang = shift || 0; + my $spacepreserve = shift || 0; + + my @nodes = @{ $content }; + + my $count = scalar(@nodes); + my $index = 0; + while ($index < $count) { + my $type = $nodes[$index]; + my $rest = $nodes[$index+1]; + if ($singlelang) { + my $oldMO = $MULTIPLE_OUTPUT; + $MULTIPLE_OUTPUT = 1; + traverse($fh, $type, $rest, $language, $spacepreserve); + $MULTIPLE_OUTPUT = $oldMO; + } else { + traverse($fh, $type, $rest, $language, $spacepreserve); + } + $index += 2; + } +} + +sub isWellFormedXmlFragment +{ + my $ret = eval 'require XML::Parser'; + if(!$ret) { + die "You must have XML::Parser installed to run $0\n\n"; + } + + my $fragment = shift; + return 0 if (!$fragment); + + $fragment = "$fragment"; + my $xp = new XML::Parser(Style => 'Tree'); + my $tree = 0; + eval { $tree = $xp->parse($fragment); }; + return $tree; +} + +sub traverse +{ + my $fh = shift; + my $nodename = shift; + my $content = shift; + my $language = shift || ""; + my $spacepreserve = shift || 0; + + if (!$nodename) { + if ($content =~ /^[\s]*$/) { + $leading_space .= $content; + } + print $fh $content; + } else { + # element + my @all = @{ $content }; + my $attrs = shift @all; + my $translate = 0; + my $outattr = getAttributeString($attrs, 1, $language, \$translate); + + if ($nodename =~ /^_/) { + $translate = 1; + $nodename =~ s/^_//; + } + my $lookup = ''; + + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + print $fh "<$nodename", $outattr; + if ($translate) { + $lookup = getXMLstring($content, $spacepreserve); + if (!$spacepreserve) { + $lookup =~ s/^\s+//s; + $lookup =~ s/\s+$//s; + } + + if ($lookup || $translate == 2) { + my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup}); + if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) { + $translation = $lookup if (!$translation); + print $fh " xml:lang=\"", $language, "\"" if $language; + print $fh ">"; + if ($translate == 2) { + translate_subnodes($fh, \@all, $language, 1, $spacepreserve); + } else { + print $fh $translation; + } + print $fh ""; + + return; # this means there will be no same translation with xml:lang="$language"... + # if we want them both, just remove this "return" + } else { + print $fh ">"; + if ($translate == 2) { + translate_subnodes($fh, \@all, $language, 1, $spacepreserve); + } else { + print $fh $lookup; + } + print $fh ""; + } + } else { + print $fh "/>"; + } + + for my $lang (sort keys %po_files_by_lang) { + if ($MULTIPLE_OUTPUT && $lang ne "$language") { + next; + } + if ($lang) { + # Handle translation + # + my $translate = 0; + my $localattrs = getAttributeString($attrs, 1, $lang, \$translate); + my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup}); + if ($translate && !$translation) { + $translation = $lookup; + } + + if ($translation || $translate) { + print $fh "\n"; + $leading_space =~ s/.*\n//g; + print $fh $leading_space; + print $fh "<", $nodename, " xml:lang=\"", $lang, "\"", $localattrs, ">"; + if ($translate == 2) { + translate_subnodes($fh, \@all, $lang, 1, $spacepreserve); + } else { + print $fh $translation; + } + print $fh ""; + } + } + } + + } else { + my $count = scalar(@all); + if ($count > 0) { + print $fh ">"; + my $index = 0; + while ($index < $count) { + my $type = $all[$index]; + my $rest = $all[$index+1]; + traverse($fh, $type, $rest, $language, $spacepreserve); + $index += 2; + } + print $fh ""; + } else { + print $fh "/>"; + } + } + } +} + +sub intltool_tree_comment +{ + my $expat = shift; + my $data = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 1 => $data; +} + +sub intltool_tree_cdatastart +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 0 => $expat->original_string(); +} + +sub intltool_tree_cdataend +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + $clist->[$pos] .= $expat->original_string(); +} + +sub intltool_tree_char +{ + my $expat = shift; + my $text = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + # Use original_string so that we retain escaped entities + # in CDATA sections. + # + if ($pos > 0 and $clist->[$pos - 1] eq '0') { + $clist->[$pos] .= $expat->original_string(); + } else { + push @$clist, 0 => $expat->original_string(); + } +} + +sub intltool_tree_start +{ + my $expat = shift; + my $tag = shift; + my @origlist = (); + + # Use original_string so that we retain escaped entities + # in attribute values. We must convert the string to an + # @origlist array to conform to the structure of the Tree + # Style. + # + my @original_array = split /\x/, $expat->original_string(); + my $source = $expat->original_string(); + + # Remove leading tag. + # + $source =~ s|^\s*<\s*(\S+)||s; + + # Grab attribute key/value pairs and push onto @origlist array. + # + while ($source) + { + if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; + push @origlist, $1; + push @origlist, '"' . $2 . '"'; + } + elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; + push @origlist, $1; + push @origlist, "'" . $2 . "'"; + } + else + { + last; + } + } + + my $ol = [ { @origlist } ]; + + push @{ $expat->{Lists} }, $expat->{Curlist}; + push @{ $expat->{Curlist} }, $tag => $ol; + $expat->{Curlist} = $ol; +} + +sub readXml +{ + my $filename = shift || return; + if(!-f $filename) { + die "ERROR Cannot find filename: $filename\n"; + } + + my $ret = eval 'require XML::Parser'; + if(!$ret) { + die "You must have XML::Parser installed to run $0\n\n"; + } + my $xp = new XML::Parser(Style => 'Tree'); + $xp->setHandlers(Char => \&intltool_tree_char); + $xp->setHandlers(Start => \&intltool_tree_start); + $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); + $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); + my $tree = $xp->parsefile($filename); + +# Hello thereHowdydo +# would be: +# [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, [{}, +# 0, "Howdy", ref, [{}]], 0, "do" ] ] + + return $tree; +} + +sub print_header +{ + my $infile = shift; + my $fh = shift; + my $source; + + if(!-f $infile) { + die "ERROR Cannot find filename: $infile\n"; + } + + print $fh qq{\n}; + { + local $/; + open DOCINPUT, "<${FILE}" or die; + $source = ; + close DOCINPUT; + } + if ($source =~ /()/s) + { + print $fh "$1\n"; + } + elsif ($source =~ /(]*>)/s) + { + print $fh "$1\n"; + } +} + +sub parseTree +{ + my $fh = shift; + my $ref = shift; + my $language = shift || ""; + + my $name = shift @{ $ref }; + my $cont = shift @{ $ref }; + + while (!$name || "$name" eq "1") { + $name = shift @{ $ref }; + $cont = shift @{ $ref }; + } + + my $spacepreserve = 0; + my $attrs = @{$cont}[0]; + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + traverse($fh, $name, $cont, $language, $spacepreserve); +} + +sub xml_merge_output +{ + my $source; + + if ($MULTIPLE_OUTPUT) { + for my $lang (sort keys %po_files_by_lang) { + if ( ! -e $lang ) { + mkdir $lang or die "Cannot create subdirectory $lang: $!\n"; + } + open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; + binmode (OUTPUT) if $^O eq 'MSWin32'; + my $tree = readXml($FILE); + print_header($FILE, \*OUTPUT); + parseTree(\*OUTPUT, $tree, $lang); + close OUTPUT; + print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG; + } + } + open OUTPUT, ">$OUTFILE" or die "Cannot open $OUTFILE: $!\n"; + binmode (OUTPUT) if $^O eq 'MSWin32'; + my $tree = readXml($FILE); + print_header($FILE, \*OUTPUT); + parseTree(\*OUTPUT, $tree); + close OUTPUT; + print "CREATED $OUTFILE\n" unless $QUIET_ARG; +} + +sub keys_merge_translations +{ + open INPUT, "<${FILE}" or die; + open OUTPUT, ">${OUTFILE}" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while () + { + if (s/^(\s*)_(\w+=(.*))/$1$2/) + { + my $string = $3; + + print OUTPUT; + + my $non_translated_line = $_; + + for my $lang (sort keys %po_files_by_lang) + { + my $translation = $translations{$lang, $string}; + next if !$translation; + + $_ = $non_translated_line; + s/(\w+)=.*/[$lang]$1=$translation/; + print OUTPUT; + } + } + else + { + print OUTPUT; + } + } + + close OUTPUT; + close INPUT; +} + +sub desktop_merge_translations +{ + open INPUT, "<${FILE}" or die; + open OUTPUT, ">${OUTFILE}" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while () + { + if (s/^(\s*)_(\w+=(.*))/$1$2/) + { + my $string = $3; + + print OUTPUT; + + my $non_translated_line = $_; + + for my $lang (sort keys %po_files_by_lang) + { + my $translation = $translations{$lang, $string}; + next if !$translation; + + $_ = $non_translated_line; + s/(\w+)=.*/${1}[$lang]=$translation/; + print OUTPUT; + } + } + else + { + print OUTPUT; + } + } + + close OUTPUT; + close INPUT; +} + +sub schemas_merge_translations +{ + my $source; + + { + local $/; # slurp mode + open INPUT, "<$FILE" or die "can't open $FILE: $!"; + $source = ; + close INPUT; + } + + open OUTPUT, ">$OUTFILE" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + # FIXME: support attribute translations + + # Empty nodes never need translation, so unmark all of them. + # For example, <_foo/> is just replaced by . + $source =~ s|<\s*_($w+)\s*/>|<$1/>|g; + + while ($source =~ s/ + (.*?) + (\s+)((\s*) + (\s*(?:\s*)?(.*?)\s*<\/default>)?(\s*) + (\s*(?:\s*)?(.*?)\s*<\/short>)?(\s*) + (\s*(?:\s*)?(.*?)\s*<\/long>)?(\s*) + <\/locale>) + //sx) + { + print OUTPUT $1; + + my $locale_start_spaces = $2 ? $2 : ''; + my $default_spaces = $4 ? $4 : ''; + my $short_spaces = $7 ? $7 : ''; + my $long_spaces = $10 ? $10 : ''; + my $locale_end_spaces = $13 ? $13 : ''; + my $c_default_block = $3 ? $3 : ''; + my $default_string = $6 ? $6 : ''; + my $short_string = $9 ? $9 : ''; + my $long_string = $12 ? $12 : ''; + + print OUTPUT "$locale_start_spaces$c_default_block"; + + $default_string =~ s/\s+/ /g; + $default_string = entity_decode($default_string); + $short_string =~ s/\s+/ /g; + $short_string = entity_decode($short_string); + $long_string =~ s/\s+/ /g; + $long_string = entity_decode($long_string); + + for my $lang (sort keys %po_files_by_lang) + { + my $default_translation = $translations{$lang, $default_string}; + my $short_translation = $translations{$lang, $short_string}; + my $long_translation = $translations{$lang, $long_string}; + + next if (!$default_translation && !$short_translation && + !$long_translation); + + print OUTPUT "\n$locale_start_spaces"; + + print OUTPUT "$default_spaces"; + + if ($default_translation) + { + $default_translation = entity_encode($default_translation); + print OUTPUT "$default_translation"; + } + + print OUTPUT "$short_spaces"; + + if ($short_translation) + { + $short_translation = entity_encode($short_translation); + print OUTPUT "$short_translation"; + } + + print OUTPUT "$long_spaces"; + + if ($long_translation) + { + $long_translation = entity_encode($long_translation); + print OUTPUT "$long_translation"; + } + + print OUTPUT "$locale_end_spaces"; + } + } + + print OUTPUT $source; + + close OUTPUT; +} + +sub rfc822deb_merge_translations +{ + my %encodings = (); + for my $lang (keys %po_files_by_lang) { + $encodings{$lang} = ($UTF8_ARG ? 'UTF-8' : get_po_encoding($po_files_by_lang{$lang})); + } + + my $source; + + $Text::Wrap::huge = 'overflow'; + $Text::Wrap::break = qr/\n|\s(?=\S)/; + + { + local $/; # slurp mode + open INPUT, "<$FILE" or die "can't open $FILE: $!"; + $source = ; + close INPUT; + } + + open OUTPUT, ">${OUTFILE}" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while ($source =~ /(^|\n+)(_*)([^:\s]+)(:[ \t]*)(.*?)(?=\n[\S\n]|$)/sg) + { + my $sep = $1; + my $non_translated_line = $3.$4; + my $string = $5; + my $underscore = length($2); + next if $underscore eq 0 && $non_translated_line =~ /^#/; + # Remove [] dummy strings + my $stripped = $string; + $stripped =~ s/\[\s[^\[\]]*\],/,/g if $underscore eq 2; + $stripped =~ s/\[\s[^\[\]]*\]$//; + $non_translated_line .= $stripped; + + print OUTPUT $sep.$non_translated_line; + + if ($underscore) + { + my @str_list = rfc822deb_split($underscore, $string); + + for my $lang (sort keys %po_files_by_lang) + { + my $is_translated = 1; + my $str_translated = ''; + my $first = 1; + + for my $str (@str_list) + { + my $translation = $translations{$lang, $str}; + + if (!$translation) + { + $is_translated = 0; + last; + } + + # $translation may also contain [] dummy + # strings, mostly to indicate an empty string + $translation =~ s/\[\s[^\[\]]*\]$//; + + if ($first) + { + if ($underscore eq 2) + { + $str_translated .= $translation; + } + else + { + $str_translated .= + Text::Tabs::expand($translation) . + "\n"; + } + } + else + { + if ($underscore eq 2) + { + $str_translated .= ', ' . $translation; + } + else + { + $str_translated .= Text::Tabs::expand( + Text::Wrap::wrap(' ', ' ', $translation)) . + "\n .\n"; + } + } + $first = 0; + + # To fix some problems with Text::Wrap::wrap + $str_translated =~ s/(\n )+\n/\n .\n/g; + } + next unless $is_translated; + + $str_translated =~ s/\n \.\n$//; + $str_translated =~ s/\s+$//; + + $_ = $non_translated_line; + s/^(\w+):\s*.*/$sep${1}-$lang.$encodings{$lang}: $str_translated/s; + print OUTPUT; + } + } + } + print OUTPUT "\n"; + + close OUTPUT; + close INPUT; +} + +sub rfc822deb_split +{ + # Debian defines a special way to deal with rfc822-style files: + # when a value contain newlines, it consists of + # 1. a short form (first line) + # 2. a long description, all lines begin with a space, + # and paragraphs are separated by a single dot on a line + # This routine returns an array of all paragraphs, and reformat + # them. + # When first argument is 2, the string is a comma separated list of + # values. + my $type = shift; + my $text = shift; + $text =~ s/^[ \t]//mg; + return (split(/, */, $text, 0)) if $type ne 1; + return ($text) if $text !~ /\n/; + + $text =~ s/([^\n]*)\n//; + my @list = ($1); + my $str = ''; + + for my $line (split (/\n/, $text)) + { + chomp $line; + if ($line =~ /^\.\s*$/) + { + # New paragraph + $str =~ s/\s*$//; + push(@list, $str); + $str = ''; + } + elsif ($line =~ /^\s/) + { + # Line which must not be reformatted + $str .= "\n" if length ($str) && $str !~ /\n$/; + $line =~ s/\s+$//; + $str .= $line."\n"; + } + else + { + # Continuation line, remove newline + $str .= " " if length ($str) && $str !~ /\n$/; + $str .= $line; + } + } + + $str =~ s/\s*$//; + push(@list, $str) if length ($str); + + return @list; +} + diff --git a/lib/goffice-0.0.4/intltool-update.in b/lib/goffice-0.0.4/intltool-update.in new file mode 100644 index 0000000000..f251956ca0 --- /dev/null +++ b/lib/goffice-0.0.4/intltool-update.in @@ -0,0 +1,1065 @@ +#!@INTLTOOL_PERL@ -w +# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +# +# The Intltool Message Updater +# +# Copyright (C) 2000-2003 Free Software Foundation. +# +# Intltool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 published by the Free Software Foundation. +# +# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, 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. +# +# Authors: Kenneth Christiansen +# Maciej Stachowiak +# Darin Adler + +## Release information +my $PROGRAM = "intltool-update"; +my $VERSION = "0.34.1"; +my $PACKAGE = "intltool"; + +## Loaded modules +use strict; +use Getopt::Long; +use Cwd; +use File::Copy; +use File::Find; + +## Scalars used by the option stuff +my $HELP_ARG = 0; +my $VERSION_ARG = 0; +my $DIST_ARG = 0; +my $POT_ARG = 0; +my $HEADERS_ARG = 0; +my $MAINTAIN_ARG = 0; +my $REPORT_ARG = 0; +my $VERBOSE = 0; +my $GETTEXT_PACKAGE = ""; +my $OUTPUT_FILE = ""; + +my @languages; +my %varhash = (); +my %po_files_by_lang = (); + +# Regular expressions to categorize file types. +# FIXME: Please check if the following is correct + +my $xml_support = +"xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required) +"ui|". # Bonobo specific - User Interface desc. files +"lang|". # ? +"glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required) +"scm(?:\\.in)*|". # ? (Note: .in is not required) +"oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files +"etspec|". # ? +"server(?:\\.in)+|". # Bonobo specific +"sheet(?:\\.in)+|". # ? +"schemas(?:\\.in)+|". # GConf specific +"pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer. +"kbd(?:\\.in)+"; # GOK specific. + +my $ini_support = +"icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec +"desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec +"caves(?:\\.in)+|". # GNOME Games specific +"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec +"soundlist(?:\\.in)+|". # GNOME specific +"keys(?:\\.in)+|". # GNOME Mime database specific +"theme(?:\\.in)+"; # http://www.freedesktop.org/Standards/icon-theme-spec + +my $buildin_gettext_support = +"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py"; + +## Always flush buffer when printing +$| = 1; + +## Sometimes the source tree will be rooted somewhere else. +my $SRCDIR = "."; +my $POTFILES_in; + +$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"}; +$POTFILES_in = "<$SRCDIR/POTFILES.in"; + +my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); + +## Handle options +GetOptions +( + "help" => \$HELP_ARG, + "version" => \$VERSION_ARG, + "dist|d" => \$DIST_ARG, + "pot|p" => \$POT_ARG, + "headers|s" => \$HEADERS_ARG, + "maintain|m" => \$MAINTAIN_ARG, + "report|r" => \$REPORT_ARG, + "verbose|x" => \$VERBOSE, + "gettext-package|g=s" => \$GETTEXT_PACKAGE, + "output-file|o=s" => \$OUTPUT_FILE, + ) or &Console_WriteError_InvalidOption; + +&Console_Write_IntltoolHelp if $HELP_ARG; +&Console_Write_IntltoolVersion if $VERSION_ARG; + +my $arg_count = ($DIST_ARG > 0) + + ($POT_ARG > 0) + + ($HEADERS_ARG > 0) + + ($MAINTAIN_ARG > 0) + + ($REPORT_ARG > 0); + +&Console_Write_IntltoolHelp if $arg_count > 1; + +# --version and --help don't require a module name +my $MODULE = $GETTEXT_PACKAGE || &FindPackageName; + +if ($POT_ARG) +{ + &GenerateHeaders; + &GeneratePOTemplate; +} +elsif ($HEADERS_ARG) +{ + &GenerateHeaders; +} +elsif ($MAINTAIN_ARG) +{ + &FindLeftoutFiles; +} +elsif ($REPORT_ARG) +{ + &GenerateHeaders; + &GeneratePOTemplate; + &Console_Write_CoverageReport; +} +elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/) +{ + my $lang = $ARGV[0]; + + ## Report error if the language file supplied + ## to the command line is non-existent + &Console_WriteError_NotExisting("$SRCDIR/$lang.po") + if ! -s "$SRCDIR/$lang.po"; + + if (!$DIST_ARG) + { + print "Working, please wait..." if $VERBOSE; + &GenerateHeaders; + &GeneratePOTemplate; + } + &POFile_Update ($lang, $OUTPUT_FILE); + &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE); +} +else +{ + &Console_Write_IntltoolHelp; +} + +exit; + +######### + +sub Console_Write_IntltoolVersion +{ + print <<_EOF_; +${PROGRAM} (${PACKAGE}) $VERSION +Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler. + +Copyright (C) 2000-2003 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +_EOF_ + exit; +} + +sub Console_Write_IntltoolHelp +{ + print <<_EOF_; +Usage: ${PROGRAM} [OPTION]... LANGCODE +Updates PO template files and merge them with the translations. + +Mode of operation (only one is allowed): + -p, --pot generate the PO template only + -s, --headers generate the header files in POTFILES.in + -m, --maintain search for left out files from POTFILES.in + -r, --report display a status report for the module + -d, --dist merge LANGCODE.po with existing PO template + +Extra options: + -g, --gettext-package=NAME override PO template name, useful with --pot + -o, --output-file=FILE write merged translation to FILE + -x, --verbose display lots of feedback + --help display this help and exit + --version output version information and exit + +Examples of use: +${PROGRAM} --pot just create a new PO template +${PROGRAM} xy create new PO template and merge xy.po with it + +Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") +or send email to . +_EOF_ + exit; +} + +sub echo_n +{ + my $str = shift; + my $ret = `echo "$str"`; + + $ret =~ s/\n$//; # do we need the "s" flag? + + return $ret; +} + +sub POFile_DetermineType ($) +{ + my $type = $_; + my $gettext_type; + + my $xml_regex = "(?:" . $xml_support . ")"; + my $ini_regex = "(?:" . $ini_support . ")"; + my $buildin_regex = "(?:" . $buildin_gettext_support . ")"; + + if ($type =~ /\[type: gettext\/([^\]].*)]/) + { + $gettext_type=$1; + } + elsif ($type =~ /schemas(\.in)+$/) + { + $gettext_type="schemas"; + } + elsif ($type =~ /glade2?(\.in)*$/) + { + $gettext_type="glade"; + } + elsif ($type =~ /scm(\.in)*$/) + { + $gettext_type="scheme"; + } + elsif ($type =~ /keys(\.in)+$/) + { + $gettext_type="keys"; + } + + # bucket types + + elsif ($type =~ /$xml_regex$/) + { + $gettext_type="xml"; + } + elsif ($type =~ /$ini_regex$/) + { + $gettext_type="ini"; + } + elsif ($type =~ /$buildin_regex$/) + { + $gettext_type="buildin"; + } + else + { + $gettext_type="unknown"; + } + + return "gettext\/$gettext_type"; +} + +sub TextFile_DetermineEncoding ($) +{ + my $gettext_code="ASCII"; # All files are ASCII by default + my $filetype=`file $_ | cut -d ' ' -f 2`; + + if ($? eq "0") + { + if ($filetype =~ /^(ISO|UTF)/) + { + chomp ($gettext_code = $filetype); + } + elsif ($filetype =~ /^XML/) + { + $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8 + } + } + + return $gettext_code; +} + +sub isNotValidMissing +{ + my ($file) = @_; + + return if $file =~ /^\{arch\}\/.*$/; + return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/; +} + +sub FindLeftoutFiles +{ + my (@buf_i18n_plain, + @buf_i18n_xml, + @buf_i18n_xml_unmarked, + @buf_i18n_ini, + @buf_potfiles, + @buf_potfiles_ignore, + @buf_allfiles, + @buf_allfiles_sorted, + @buf_potfiles_sorted + ); + + ## Search and find all translatable files + find sub { + push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/; + push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/; + push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/; + push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/; + }, ".."; + + + open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n"; + @buf_potfiles = grep !/^(#|\s*$)/, ; + close POTFILES; + + foreach (@buf_potfiles) { + s/^\[.*]\s*//; + } + + print "Searching for missing translatable files...\n" if $VERBOSE; + + ## Check if we should ignore some found files, when + ## comparing with POTFILES.in + foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") + { + (-s $ignore) or next; + + if ("$ignore" eq "POTFILES.ignore") + { + print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n". + "content of this file to POTFILES.skip.\n"; + } + + print "Found $ignore: Ignoring files...\n" if $VERBOSE; + open FILE, "<$ignore" or die "ERROR: Failed to open $ignore!\n"; + + while () + { + push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/; + } + close FILE; + + @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles); + } + + foreach my $file (@buf_i18n_plain) + { + my $in_comment = 0; + my $in_macro = 0; + + open FILE, "<$file"; + while () + { + # Handle continued multi-line comment. + if ($in_comment) + { + next unless s-.*\*/--; + $in_comment = 0; + } + + # Handle continued macro. + if ($in_macro) + { + $in_macro = 0 unless /\\$/; + next; + } + + # Handle start of macro (or any preprocessor directive). + if (/^\s*\#/) + { + $in_macro = 1 if /^([^\\]|\\.)*\\$/; + next; + } + + # Handle comments and quoted text. + while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy + { + my $match = $1; + if ($match eq "/*") + { + if (!s-/\*.*?\*/--) + { + s-/\*.*--; + $in_comment = 1; + } + } + elsif ($match eq "//") + { + s-//.*--; + } + else # ' or " + { + if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) + { + warn "mismatched quotes at line $. in $file\n"; + s-$match.*--; + } + } + } + + if (/\.GetString ?\(QUOTEDTEXT/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + ## Remove the first 3 chars and add newline + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + + if (/_\(QUOTEDTEXT/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + ## Remove the first 3 chars and add newline + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + } + close FILE; + } + + foreach my $file (@buf_i18n_xml) + { + open FILE, "<$file"; + + while () + { + # FIXME: share the pattern matching code with intltool-extract + if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + } + close FILE; + } + + foreach my $file (@buf_i18n_ini) + { + open FILE, "<$file"; + while () + { + if (/_(.*)=/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + } + close FILE; + } + + foreach my $file (@buf_i18n_xml_unmarked) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + } + + + @buf_allfiles_sorted = sort (@buf_allfiles); + @buf_potfiles_sorted = sort (@buf_potfiles); + + my %in2; + foreach (@buf_potfiles_sorted) + { + $in2{$_} = 1; + } + + my @result; + + foreach (@buf_allfiles_sorted) + { + if (!exists($in2{$_})) + { + push @result, $_ + } + } + + my @buf_potfiles_notexist; + + foreach (@buf_potfiles_sorted) + { + chomp (my $dummy = $_); + if ("$dummy" ne "" and ! -f "../$dummy") + { + push @buf_potfiles_notexist, $_; + } + } + + ## Save file with information about the files missing + ## if any, and give information about this procedure. + if (@result + @buf_potfiles_notexist > 0) + { + if (@result) + { + print "\n" if $VERBOSE; + unlink "missing"; + open OUT, ">missing"; + print OUT @result; + close OUT; + warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n". + "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n"; + print STDERR @result, "\n"; + warn "If some of these files are left out on purpose then please add them to\n". + "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n". + "of left out files has been written in the current directory.\n"; + } + if (@buf_potfiles_notexist) + { + unlink "notexist"; + open OUT, ">notexist"; + print OUT @buf_potfiles_notexist; + close OUT; + warn "\n" if ($VERBOSE or @result); + warn "\e[1mThe following files do not exist anymore:\e[0m\n\n"; + warn @buf_potfiles_notexist, "\n"; + warn "Please remove them from POTFILES.in or POTFILES.skip. A file \e[1m'notexist'\e[0m\n". + "containing this list of absent files has been written in the current directory.\n"; + } + } + + ## If there is nothing to complain about, notify the user + else { + print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE; + } +} + +sub Console_WriteError_InvalidOption +{ + ## Handle invalid arguments + print STDERR "Try `${PROGRAM} --help' for more information.\n"; + exit 1; +} + +sub GenerateHeaders +{ + my $EXTRACT = "@INTLTOOL_EXTRACT@"; + chomp $EXTRACT; + + $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"}; + + ## Generate the .h header files, so we can allow glade and + ## xml translation support + if (! -x "$EXTRACT") + { + print STDERR "\n *** The intltool-extract script wasn't found!" + ."\n *** Without it, intltool-update can not generate files.\n"; + exit; + } + else + { + open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n"; + + while () + { + chomp; + next if /^\[\s*encoding/; + + ## Find xml files in POTFILES.in and generate the + ## files with help from the extract script + + my $gettext_type= &POFile_DetermineType ($1); + + if (/\.($xml_support|$ini_support)$/ || /^\[/) + { + s/^\[[^\[].*]\s*//; + + my $filename = "../$_"; + + if ($VERBOSE) + { + system ($EXTRACT, "--update", "--srcdir=$SRCDIR", + "--type=$gettext_type", $filename); + } + else + { + system ($EXTRACT, "--update", "--type=$gettext_type", + "--srcdir=$SRCDIR", "--quiet", $filename); + } + } + } + close FILE; + } +} + +# +# Generate .pot file from POTFILES.in +# +sub GeneratePOTemplate +{ + my $XGETTEXT = $ENV{"XGETTEXT"} || "/usr/bin/xgettext"; + my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || ''; + chomp $XGETTEXT; + + if (! -x $XGETTEXT) + { + print STDERR " *** xgettext is not found on this system!\n". + " *** Without it, intltool-update can not extract strings.\n"; + exit; + } + + print "Building $MODULE.pot...\n" if $VERBOSE; + + open INFILE, $POTFILES_in; + unlink "POTFILES.in.temp"; + open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing"); + + my $gettext_support_nonascii = 0; + + # checks for GNU gettext >= 0.12 + my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`; + if ($? == 0) + { + $gettext_support_nonascii = 1; + } + else + { + # urge everybody to upgrade gettext + print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n". + " strings. That means you should install a version of gettext\n". + " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n". + " or have to let non-ASCII strings untranslated. (If there is any)\n"; + } + + my $encoding = "ASCII"; + my $forced_gettext_code; + my @temp_headers; + my $encoding_problem_is_reported = 0; + + while () + { + next if (/^#/ or /^\s*$/); + + chomp; + + my $gettext_code; + + if (/^\[\s*encoding:\s*(.*)\s*\]/) + { + $forced_gettext_code=$1; + } + elsif (/\.($xml_support|$ini_support)$/ || /^\[/) + { + s/^\[.*]\s*//; + print OUTFILE "../$_.h\n"; + push @temp_headers, "../$_.h"; + $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code); + } + else + { + if ($SRCDIR eq ".") { + print OUTFILE "../$_\n"; + } else { + print OUTFILE "$SRCDIR/../$_\n"; + } + $gettext_code = &TextFile_DetermineEncoding ("../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code); + } + + next if (! $gettext_support_nonascii); + + if (defined $forced_gettext_code) + { + $encoding=$forced_gettext_code; + } + elsif (defined $gettext_code and "$encoding" ne "$gettext_code") + { + if ($encoding eq "ASCII") + { + $encoding=$gettext_code; + } + elsif ($gettext_code ne "ASCII") + { + # Only report once because the message is quite long + if (! $encoding_problem_is_reported) + { + print STDERR "WARNING: You should use the same file encoding for all your project files,\n". + " but $PROGRAM thinks that most of the source files are in\n". + " $encoding encoding, while \"$_\" is (likely) in\n". + " $gettext_code encoding. If you are sure that all translatable strings\n". + " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n". + " line to POTFILES.in:\n\n". + " [encoding: UTF-8]\n\n". + " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n". + "(such warning message will only be reported once.)\n"; + $encoding_problem_is_reported = 1; + } + } + } + } + + close OUTFILE; + close INFILE; + + unlink "$MODULE.pot"; + my @xgettext_argument=("$XGETTEXT", + "--add-comments", + "--directory\=\.", + "--output\=$MODULE\.pot", + "--files-from\=\.\/POTFILES\.in\.temp"); + my $XGETTEXT_KEYWORDS = &FindPOTKeywords; + push @xgettext_argument, $XGETTEXT_KEYWORDS; + push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii); + push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS; + my $xgettext_command = join ' ', @xgettext_argument; + + # intercept xgettext error message + print "Running $xgettext_command\n" if $VERBOSE; + my $xgettext_error_msg = `$xgettext_command 2>\&1`; + my $command_failed = $?; + + unlink "POTFILES.in.temp"; + + print "Removing generated header (.h) files..." if $VERBOSE; + unlink foreach (@temp_headers); + print "done.\n" if $VERBOSE; + + if (! $command_failed) + { + if (! -e "$MODULE.pot") + { + print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE; + } + else + { + print "Wrote $MODULE.pot\n" if $VERBOSE; + } + } + else + { + if ($xgettext_error_msg =~ /--from-code/) + { + # replace non-ASCII error message with a more useful one. + print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n". + " string marked for translation. Please make sure that all strings marked\n". + " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n". + " following line to POTFILES.in and rerun $PROGRAM:\n\n". + " [encoding: UTF-8]\n\n"; + } + else + { + print STDERR "$xgettext_error_msg"; + if (-e "$MODULE.pot") + { + # is this possible? + print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n". + " Please consult error message above if there is any.\n"; + } + else + { + print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n". + " error message above if there is any.\n"; + } + } + exit (1); + } +} + +sub POFile_Update +{ + -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n"; + + my $MSGMERGE = $ENV{"MSGMERGE"} || "/usr/bin/msgmerge"; + my ($lang, $outfile) = @_; + + print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE; + + my $infile = "$SRCDIR/$lang.po"; + $outfile = "$SRCDIR/$lang.po" if ($outfile eq ""); + + # I think msgmerge won't overwrite old file if merge is not successful + system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot"); +} + +sub Console_WriteError_NotExisting +{ + my ($file) = @_; + + ## Report error if supplied language file is non-existing + print STDERR "$PROGRAM: $file does not exist!\n"; + print STDERR "Try '$PROGRAM --help' for more information.\n"; + exit; +} + +sub GatherPOFiles +{ + my @po_files = glob ("./*.po"); + + @languages = map (&POFile_GetLanguage, @po_files); + + foreach my $lang (@languages) + { + $po_files_by_lang{$lang} = shift (@po_files); + } +} + +sub POFile_GetLanguage ($) +{ + s/^(.*\/)?(.+)\.po$/$2/; + return $_; +} + +sub Console_Write_TranslationStatus +{ + my ($lang, $output_file) = @_; + my $MSGFMT = $ENV{"MSGFMT"} || "/usr/bin/msgfmt"; + + $output_file = "$SRCDIR/$lang.po" if ($output_file eq ""); + + system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file); +} + +sub Console_Write_CoverageReport +{ + my $MSGFMT = $ENV{"MSGFMT"} || "/usr/bin/msgfmt"; + + &GatherPOFiles; + + foreach my $lang (@languages) + { + print "$lang: "; + &POFile_Update ($lang, ""); + } + + print "\n\n * Current translation support in $MODULE \n\n"; + + foreach my $lang (@languages) + { + print "$lang: "; + system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po"); + } +} + +sub SubstituteVariable +{ + my ($str) = @_; + + # always need to rewind file whenever it has been accessed + seek (CONF, 0, 0); + + # cache each variable. varhash is global to we can add + # variables elsewhere. + while () + { + if (/^(\w+)=(.*)$/) + { + ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/; + } + } + + if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) + { + my $rest = $3; + my $untouched = $1; + my $sub = $varhash{$2}; + + return SubstituteVariable ("$untouched$sub$rest"); + } + + # We're using Perl backticks ` and "echo -n" here in order to + # expand any shell escapes (such as backticks themselves) in every variable + return echo_n ($str); +} + +sub CONF_Handle_Open +{ + my $base_dirname = getcwd(); + $base_dirname =~ s@.*/@@; + + my ($conf_in, $src_dir); + + if ($base_dirname =~ /^po(-.+)?$/) + { + if (-f "Makevars") + { + my $makefile_source; + + local (*IN); + open (IN, ") + { + if (/^top_builddir[ \t]*=/) + { + $src_dir = $_; + $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; + + chomp $src_dir; + if (-f "$src_dir" . "/configure.ac") { + $conf_in = "$src_dir" . "/configure.ac" . "\n"; + } else { + $conf_in = "$src_dir" . "/configure.in" . "\n"; + } + last; + } + } + close IN; + + $conf_in || die "Cannot find top_builddir in Makevars."; + } + elsif (-f "../configure.ac") + { + $conf_in = "../configure.ac"; + } + elsif (-f "../configure.in") + { + $conf_in = "../configure.in"; + } + else + { + my $makefile_source; + + local (*IN); + open (IN, ") + { + if (/^top_srcdir[ \t]*=/) + { + $src_dir = $_; + $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; + + chomp $src_dir; + $conf_in = "$src_dir" . "/configure.in" . "\n"; + + last; + } + } + close IN; + + $conf_in || die "Cannot find top_srcdir in Makefile."; + } + + open (CONF, "<$conf_in"); + } + else + { + print STDERR "$PROGRAM: Unable to proceed.\n" . + "Make sure to run this script inside the po directory.\n"; + exit; + } +} + +sub FindPackageName +{ + my $version; + my $domain = &FindMakevarsDomain; + my $name = $domain || "untitled"; + + &CONF_Handle_Open; + + my $conf_source; { + local (*IN); + open (IN, "<&CONF") || return $name; + seek (IN, 0, 0); + local $/; # slurp mode + $conf_source = ; + close IN; + } + + # priority for getting package name: + # 1. GETTEXT_PACKAGE + # 2. first argument of AC_INIT (with >= 2 arguments) + # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument) + + # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m + # the \s makes this not work, why? + if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m) + { + ($name, $version) = ($1, $2); + $name =~ s/[\[\]\s]//g; + $version =~ s/[\[\]\s]//g; + $varhash{"AC_PACKAGE_NAME"} = $name; + $varhash{"PACKAGE"} = $name; + $varhash{"AC_PACKAGE_VERSION"} = $version; + $varhash{"VERSION"} = $version; + } + + if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) + { + ($name, $version) = ($1, $2); + $name =~ s/[\[\]\s]//g; + $version =~ s/[\[\]\s]//g; + $varhash{"AC_PACKAGE_NAME"} = $name; + $varhash{"PACKAGE"} = $name; + $varhash{"AC_PACKAGE_VERSION"} = $version; + $varhash{"VERSION"} = $version; + } + + # \s makes this not work, why? + $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m; + + # prepend '$' to auto* internal variables, usually they are + # used in configure.in/ac without the '$' + $name =~ s/AC_/\$AC_/g; + $name =~ s/\$\$/\$/g; + + $name = $domain if $domain; + + $name = SubstituteVariable ($name); + $name =~ s/^["'](.*)["']$/$1/; + + return $name if $name; +} + + +sub FindPOTKeywords +{ + + my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_"; + my $varname = "XGETTEXT_OPTIONS"; + my $make_source; { + local (*IN); + open (IN, "; + close IN; + } + + $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m; + + return $keywords; +} + +sub FindMakevarsDomain +{ + + my $domain = ""; + my $makevars_source; { + local (*IN); + open (IN, "; + close IN; + } + + $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m; + $domain =~ s/^\s+//; + $domain =~ s/\s+$//; + + return $domain; +} diff --git a/lib/goffice-0.0.4/libgoffice-1.pc.in b/lib/goffice-0.0.4/libgoffice-1.pc.in new file mode 100644 index 0000000000..e4e0f4fe97 --- /dev/null +++ b/lib/goffice-0.0.4/libgoffice-1.pc.in @@ -0,0 +1,14 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +# To retrieve the module from anonymous CVS, use the following command: +# cvs -z4 -d:pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co goffice + +Name: libGOffice +Description: G Office support library +Version: @VERSION@ +Requires: glib-2.0 gobject-2.0 libgsf-1 libxml-2.0 gtk+-2.0 libglade-2.0 libgnomeprint-2.2 libart-2.0 +Libs: -L${libdir} -lgoffice-1 @EXTRA_LIBS@ +Cflags: -I${includedir}/libgoffice-1 @EXTRA_INCLUDES@ diff --git a/lib/goffice-0.0.4/ltmain.sh b/lib/goffice-0.0.4/ltmain.sh new file mode 100644 index 0000000000..1a224ac2ae --- /dev/null +++ b/lib/goffice-0.0.4/ltmain.sh @@ -0,0 +1,6426 @@ +# 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 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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" + +# 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.6 +TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42) Debian$Rev: 224 $" + + +# 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 <&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= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# 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 /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + 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 + case "$@ " in + " $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 +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +# 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) 2003 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 $EXIT_SUCCESS + ;; + + --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 $EXIT_SUCCESS + ;; + + --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 $EXIT_SUCCESS + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case "$arg_mode" in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit $EXIT_FAILURE + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${output}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +#define HAVE_DOS_BASED_FILE_SYSTEM +#ifndef DIR_SEPARATOR_2 +#define DIR_SEPARATOR_2 '\\' +#endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +char * basename (const char *name); +char * fnqualify(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +char * +basename (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; +} + +char * +fnqualify(const char *path) +{ + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); +#endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# 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='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + 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 \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + save_umask=`umask` + umask 0077 + if $mkdir "$tmpdir"; then + umask $save_umask + else + umask $save_umask + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "----------------------------------------------------------------------" + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $EXIT_SUCCESS + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/lib/goffice-0.0.4/missing b/lib/goffice-0.0.4/missing new file mode 100755 index 0000000000..fc54c64ec9 --- /dev/null +++ b/lib/goffice-0.0.4/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/lib/goffice-0.0.4/mkinstalldirs b/lib/goffice-0.0.4/mkinstalldirs new file mode 100755 index 0000000000..d2d5f21b61 --- /dev/null +++ b/lib/goffice-0.0.4/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/lib/goffice/pixmaps/Makefile.am b/lib/goffice-0.0.4/pixmaps/Makefile.am similarity index 77% rename from lib/goffice/pixmaps/Makefile.am rename to lib/goffice-0.0.4/pixmaps/Makefile.am index 41ec40e383..5d4bd89d4e 100644 --- a/lib/goffice/pixmaps/Makefile.am +++ b/lib/goffice-0.0.4/pixmaps/Makefile.am @@ -1,6 +1,6 @@ -icondir = $(gnumeric_icondir) -icon_DATA = \ - chart_area_1_1.png chart_area_1_2.png chart_area_1_3.png \ +icondir = $(goffice_icondir) +dist_icon_DATA = \ + chart_area_1_1.png chart_area_1_2.png chart_area_1_3.png \ chart_bar_1_1.png chart_bar_1_2.png chart_bar_1_3.png \ chart_bar_2_1.png chart_bar_2_2.png chart_bar_2_3.png \ chart_column_1_1.png chart_column_1_2.png chart_column_1_3.png \ @@ -16,6 +16,7 @@ icon_DATA = \ chart_pyramid_2_1.png chart_pyramid_2_2.png chart_pyramid_2_3.png \ chart_pyramid_3_1.png \ chart_radar_1_1.png chart_radar_1_2.png chart_radar_1_3.png \ + chart_polar_1_1.png \ chart_stock_1_1.png chart_stock_1_2.png \ chart_stock_2_1.png chart_stock_2_2.png \ chart_line_1_1.png chart_line_1_2.png chart_line_1_3.png \ @@ -26,17 +27,26 @@ icon_DATA = \ chart_ring_1_1.png chart_ring_1_2.png \ chart_scatter_1_1.png \ chart_scatter_2_1.png chart_scatter_2_2.png \ - chart_scatter_3_1.png chart_scatter_3_2.png \ + chart_scatter_3_1.png chart_scatter_3_2.png chart_scatter_3_3.png \ chart_bubble_1_1.png \ + chart_contour_1_1.png \ + chart_boxplot_1_1.png \ + chart_dropbar_1_1.png chart_dropbar_1_2.png \ + chart_minmax_1_1.png chart_minmax_1_2.png \ + chart_minmax_2_1.png chart_minmax_2_2.png \ \ area.xpm \ bar.xpm \ + boxplot.xpm \ bubble.xpm \ column.xpm \ doughnut.xpm \ + dropbar.xpm \ linegraph.xpm \ + minmax.xpm \ pie.xpm \ radar.xpm \ + polar.png \ scatter.xpm \ stock.xpm \ surface.xpm \ @@ -48,5 +58,3 @@ icon_DATA = \ bar-hplus.png \ bar-hminus.png \ bar-hboth.png - -EXTRA_DIST = $(icon_DATA) diff --git a/lib/goffice/pixmaps/area.xpm b/lib/goffice-0.0.4/pixmaps/area.xpm similarity index 100% rename from lib/goffice/pixmaps/area.xpm rename to lib/goffice-0.0.4/pixmaps/area.xpm diff --git a/lib/goffice/pixmaps/bar-hboth.png b/lib/goffice-0.0.4/pixmaps/bar-hboth.png similarity index 100% rename from lib/goffice/pixmaps/bar-hboth.png rename to lib/goffice-0.0.4/pixmaps/bar-hboth.png diff --git a/lib/goffice/pixmaps/bar-hminus.png b/lib/goffice-0.0.4/pixmaps/bar-hminus.png similarity index 100% rename from lib/goffice/pixmaps/bar-hminus.png rename to lib/goffice-0.0.4/pixmaps/bar-hminus.png diff --git a/lib/goffice/pixmaps/bar-hplus.png b/lib/goffice-0.0.4/pixmaps/bar-hplus.png similarity index 100% rename from lib/goffice/pixmaps/bar-hplus.png rename to lib/goffice-0.0.4/pixmaps/bar-hplus.png diff --git a/lib/goffice/pixmaps/bar-none.png b/lib/goffice-0.0.4/pixmaps/bar-none.png similarity index 100% rename from lib/goffice/pixmaps/bar-none.png rename to lib/goffice-0.0.4/pixmaps/bar-none.png diff --git a/lib/goffice/pixmaps/bar-vboth.png b/lib/goffice-0.0.4/pixmaps/bar-vboth.png similarity index 100% rename from lib/goffice/pixmaps/bar-vboth.png rename to lib/goffice-0.0.4/pixmaps/bar-vboth.png diff --git a/lib/goffice/pixmaps/bar-vminus.png b/lib/goffice-0.0.4/pixmaps/bar-vminus.png similarity index 100% rename from lib/goffice/pixmaps/bar-vminus.png rename to lib/goffice-0.0.4/pixmaps/bar-vminus.png diff --git a/lib/goffice/pixmaps/bar-vplus.png b/lib/goffice-0.0.4/pixmaps/bar-vplus.png similarity index 100% rename from lib/goffice/pixmaps/bar-vplus.png rename to lib/goffice-0.0.4/pixmaps/bar-vplus.png diff --git a/lib/goffice/pixmaps/bar.xpm b/lib/goffice-0.0.4/pixmaps/bar.xpm similarity index 100% rename from lib/goffice/pixmaps/bar.xpm rename to lib/goffice-0.0.4/pixmaps/bar.xpm diff --git a/lib/goffice-0.0.4/pixmaps/boxplot.xpm b/lib/goffice-0.0.4/pixmaps/boxplot.xpm new file mode 100644 index 0000000000..885f36629e --- /dev/null +++ b/lib/goffice-0.0.4/pixmaps/boxplot.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * boxplot_xpm[] = { +"18 18 3 1", +" c None", +". c #000000", +"+ c #FF0000", +" ", +" ", +" ", +" ", +" .......... ", +" . .+++.++++. . ", +" . .+++.++++. . ", +" ...+++.++++... ", +" . .+++.++++. . ", +" . .+++.++++. . ", +" .......... ", +" ", +" ", +" ", +" ", +" ................ ", +" ", +" "}; diff --git a/lib/goffice/pixmaps/bubble.xpm b/lib/goffice-0.0.4/pixmaps/bubble.xpm similarity index 100% rename from lib/goffice/pixmaps/bubble.xpm rename to lib/goffice-0.0.4/pixmaps/bubble.xpm diff --git a/lib/goffice/pixmaps/chart_area_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_area_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_area_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_area_1_1.png diff --git a/lib/goffice/pixmaps/chart_area_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_area_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_area_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_area_1_2.png diff --git a/lib/goffice/pixmaps/chart_area_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_area_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_area_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_area_1_3.png diff --git a/lib/goffice/pixmaps/chart_bar_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_bar_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_bar_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_bar_1_1.png diff --git a/lib/goffice/pixmaps/chart_bar_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_bar_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_bar_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_bar_1_2.png diff --git a/lib/goffice/pixmaps/chart_bar_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_bar_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_bar_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_bar_1_3.png diff --git a/lib/goffice/pixmaps/chart_bar_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_bar_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_bar_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_bar_2_1.png diff --git a/lib/goffice/pixmaps/chart_bar_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_bar_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_bar_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_bar_2_2.png diff --git a/lib/goffice/pixmaps/chart_bar_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_bar_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_bar_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_bar_2_3.png diff --git a/lib/goffice-0.0.4/pixmaps/chart_boxplot_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_boxplot_1_1.png new file mode 100644 index 0000000000..be4f6d7a81 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_boxplot_1_1.png differ diff --git a/lib/goffice/pixmaps/chart_bubble_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_bubble_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_bubble_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_bubble_1_1.png diff --git a/lib/goffice/pixmaps/chart_column_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_column_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_column_1_1.png diff --git a/lib/goffice/pixmaps/chart_column_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_column_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_column_1_2.png diff --git a/lib/goffice/pixmaps/chart_column_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_column_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_column_1_3.png diff --git a/lib/goffice/pixmaps/chart_column_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_column_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_column_2_1.png diff --git a/lib/goffice/pixmaps/chart_column_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_column_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_column_2_2.png diff --git a/lib/goffice/pixmaps/chart_column_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_column_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_column_2_3.png diff --git a/lib/goffice/pixmaps/chart_column_3_1.png b/lib/goffice-0.0.4/pixmaps/chart_column_3_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_column_3_1.png rename to lib/goffice-0.0.4/pixmaps/chart_column_3_1.png diff --git a/lib/goffice/pixmaps/chart_cone_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_cone_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_1_1.png diff --git a/lib/goffice/pixmaps/chart_cone_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_cone_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_1_2.png diff --git a/lib/goffice/pixmaps/chart_cone_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_cone_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_1_3.png diff --git a/lib/goffice/pixmaps/chart_cone_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_cone_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_2_1.png diff --git a/lib/goffice/pixmaps/chart_cone_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_cone_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_2_2.png diff --git a/lib/goffice/pixmaps/chart_cone_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_cone_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_2_3.png diff --git a/lib/goffice/pixmaps/chart_cone_3_1.png b/lib/goffice-0.0.4/pixmaps/chart_cone_3_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_cone_3_1.png rename to lib/goffice-0.0.4/pixmaps/chart_cone_3_1.png diff --git a/lib/goffice-0.0.4/pixmaps/chart_contour_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_contour_1_1.png new file mode 100644 index 0000000000..c6d9a041a1 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_contour_1_1.png differ diff --git a/lib/goffice/pixmaps/chart_cylinder_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_1_1.png diff --git a/lib/goffice/pixmaps/chart_cylinder_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_1_2.png diff --git a/lib/goffice/pixmaps/chart_cylinder_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_1_3.png diff --git a/lib/goffice/pixmaps/chart_cylinder_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_2_1.png diff --git a/lib/goffice/pixmaps/chart_cylinder_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_2_2.png diff --git a/lib/goffice/pixmaps/chart_cylinder_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_2_3.png diff --git a/lib/goffice/pixmaps/chart_cylinder_3_1.png b/lib/goffice-0.0.4/pixmaps/chart_cylinder_3_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_cylinder_3_1.png rename to lib/goffice-0.0.4/pixmaps/chart_cylinder_3_1.png diff --git a/lib/goffice-0.0.4/pixmaps/chart_dropbar_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_dropbar_1_1.png new file mode 100644 index 0000000000..4f53fad3d7 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_dropbar_1_1.png differ diff --git a/lib/goffice-0.0.4/pixmaps/chart_dropbar_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_dropbar_1_2.png new file mode 100644 index 0000000000..54b28efc46 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_dropbar_1_2.png differ diff --git a/lib/goffice/pixmaps/chart_line_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_line_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_line_1_1.png diff --git a/lib/goffice/pixmaps/chart_line_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_line_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_line_1_2.png diff --git a/lib/goffice/pixmaps/chart_line_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_line_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_line_1_3.png diff --git a/lib/goffice/pixmaps/chart_line_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_line_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_line_2_1.png diff --git a/lib/goffice/pixmaps/chart_line_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_line_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_line_2_2.png diff --git a/lib/goffice/pixmaps/chart_line_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_line_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_line_2_3.png diff --git a/lib/goffice/pixmaps/chart_line_3_1.png b/lib/goffice-0.0.4/pixmaps/chart_line_3_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_line_3_1.png rename to lib/goffice-0.0.4/pixmaps/chart_line_3_1.png diff --git a/lib/goffice-0.0.4/pixmaps/chart_minmax_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_minmax_1_1.png new file mode 100644 index 0000000000..404af9a645 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_minmax_1_1.png differ diff --git a/lib/goffice-0.0.4/pixmaps/chart_minmax_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_minmax_1_2.png new file mode 100644 index 0000000000..adab842d4d Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_minmax_1_2.png differ diff --git a/lib/goffice-0.0.4/pixmaps/chart_minmax_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_minmax_2_1.png new file mode 100644 index 0000000000..c48ccc2313 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_minmax_2_1.png differ diff --git a/lib/goffice-0.0.4/pixmaps/chart_minmax_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_minmax_2_2.png new file mode 100644 index 0000000000..e3accc9031 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_minmax_2_2.png differ diff --git a/lib/goffice/pixmaps/chart_pie_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_pie_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_pie_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_pie_1_1.png diff --git a/lib/goffice/pixmaps/chart_pie_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_pie_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_pie_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_pie_1_2.png diff --git a/lib/goffice/pixmaps/chart_pie_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_pie_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_pie_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_pie_1_3.png diff --git a/lib/goffice/pixmaps/chart_pie_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_pie_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_pie_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_pie_2_1.png diff --git a/lib/goffice/pixmaps/chart_pie_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_pie_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_pie_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_pie_2_2.png diff --git a/lib/goffice/pixmaps/chart_pie_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_pie_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_pie_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_pie_2_3.png diff --git a/lib/goffice-0.0.4/pixmaps/chart_polar_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_polar_1_1.png new file mode 100644 index 0000000000..6b8967f503 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_polar_1_1.png differ diff --git a/lib/goffice/pixmaps/chart_pyramid_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_1_1.png diff --git a/lib/goffice/pixmaps/chart_pyramid_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_1_2.png diff --git a/lib/goffice/pixmaps/chart_pyramid_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_1_3.png diff --git a/lib/goffice/pixmaps/chart_pyramid_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_2_1.png diff --git a/lib/goffice/pixmaps/chart_pyramid_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_2_2.png diff --git a/lib/goffice/pixmaps/chart_pyramid_2_3.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_2_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_2_3.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_2_3.png diff --git a/lib/goffice/pixmaps/chart_pyramid_3_1.png b/lib/goffice-0.0.4/pixmaps/chart_pyramid_3_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_pyramid_3_1.png rename to lib/goffice-0.0.4/pixmaps/chart_pyramid_3_1.png diff --git a/lib/goffice/pixmaps/chart_radar_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_radar_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_radar_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_radar_1_1.png diff --git a/lib/goffice/pixmaps/chart_radar_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_radar_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_radar_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_radar_1_2.png diff --git a/lib/goffice/pixmaps/chart_radar_1_3.png b/lib/goffice-0.0.4/pixmaps/chart_radar_1_3.png similarity index 100% rename from lib/goffice/pixmaps/chart_radar_1_3.png rename to lib/goffice-0.0.4/pixmaps/chart_radar_1_3.png diff --git a/lib/goffice/pixmaps/chart_ring_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_ring_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_ring_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_ring_1_1.png diff --git a/lib/goffice/pixmaps/chart_ring_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_ring_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_ring_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_ring_1_2.png diff --git a/lib/goffice/pixmaps/chart_scatter_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_scatter_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_scatter_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_scatter_1_1.png diff --git a/lib/goffice/pixmaps/chart_scatter_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_scatter_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_scatter_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_scatter_2_1.png diff --git a/lib/goffice/pixmaps/chart_scatter_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_scatter_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_scatter_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_scatter_2_2.png diff --git a/lib/goffice/pixmaps/chart_scatter_3_1.png b/lib/goffice-0.0.4/pixmaps/chart_scatter_3_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_scatter_3_1.png rename to lib/goffice-0.0.4/pixmaps/chart_scatter_3_1.png diff --git a/lib/goffice/pixmaps/chart_scatter_3_2.png b/lib/goffice-0.0.4/pixmaps/chart_scatter_3_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_scatter_3_2.png rename to lib/goffice-0.0.4/pixmaps/chart_scatter_3_2.png diff --git a/lib/goffice-0.0.4/pixmaps/chart_scatter_3_3.png b/lib/goffice-0.0.4/pixmaps/chart_scatter_3_3.png new file mode 100644 index 0000000000..12706122ae Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/chart_scatter_3_3.png differ diff --git a/lib/goffice/pixmaps/chart_stock_1_1.png b/lib/goffice-0.0.4/pixmaps/chart_stock_1_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_stock_1_1.png rename to lib/goffice-0.0.4/pixmaps/chart_stock_1_1.png diff --git a/lib/goffice/pixmaps/chart_stock_1_2.png b/lib/goffice-0.0.4/pixmaps/chart_stock_1_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_stock_1_2.png rename to lib/goffice-0.0.4/pixmaps/chart_stock_1_2.png diff --git a/lib/goffice/pixmaps/chart_stock_2_1.png b/lib/goffice-0.0.4/pixmaps/chart_stock_2_1.png similarity index 100% rename from lib/goffice/pixmaps/chart_stock_2_1.png rename to lib/goffice-0.0.4/pixmaps/chart_stock_2_1.png diff --git a/lib/goffice/pixmaps/chart_stock_2_2.png b/lib/goffice-0.0.4/pixmaps/chart_stock_2_2.png similarity index 100% rename from lib/goffice/pixmaps/chart_stock_2_2.png rename to lib/goffice-0.0.4/pixmaps/chart_stock_2_2.png diff --git a/lib/goffice/pixmaps/column.xpm b/lib/goffice-0.0.4/pixmaps/column.xpm similarity index 100% rename from lib/goffice/pixmaps/column.xpm rename to lib/goffice-0.0.4/pixmaps/column.xpm diff --git a/lib/goffice/pixmaps/doughnut.xpm b/lib/goffice-0.0.4/pixmaps/doughnut.xpm similarity index 100% rename from lib/goffice/pixmaps/doughnut.xpm rename to lib/goffice-0.0.4/pixmaps/doughnut.xpm diff --git a/lib/goffice-0.0.4/pixmaps/dropbar.xpm b/lib/goffice-0.0.4/pixmaps/dropbar.xpm new file mode 100644 index 0000000000..1682415e93 --- /dev/null +++ b/lib/goffice-0.0.4/pixmaps/dropbar.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * dropbar_xpm[] = { +"18 18 5 1", +" c None", +". c #000000", +"+ c #008400", +"@ c #FF0000", +"# c #FF7BFF", +" ", +" ", +" . ... ", +" . .+. ", +" . .+. ", +" . .+. ", +" . .+. ", +" . ...+. ", +" . .@.+. ", +" . ... .@... ", +" . .#. .@. ", +" . ...#. ... ", +" . .@.#. ", +" . .@... ", +" . ... ", +" ................ ", +" ", +" "}; diff --git a/lib/goffice/pixmaps/linegraph.xpm b/lib/goffice-0.0.4/pixmaps/linegraph.xpm similarity index 100% rename from lib/goffice/pixmaps/linegraph.xpm rename to lib/goffice-0.0.4/pixmaps/linegraph.xpm diff --git a/lib/goffice-0.0.4/pixmaps/minmax.xpm b/lib/goffice-0.0.4/pixmaps/minmax.xpm new file mode 100644 index 0000000000..ab63a165a7 --- /dev/null +++ b/lib/goffice-0.0.4/pixmaps/minmax.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * minmax_xpm[] = { +"18 18 3 1", +" c None", +". c #000000", +"+ c #0000C0", +" ", +" ", +" . + ", +" . + ", +" . + ", +" . + ", +" . + ", +" . . + ", +" . . + ", +" . . + . + ", +" . . + . ", +" . . + . ", +" . . + ", +" . . + ", +" . . ", +" ................ ", +" ", +" "}; diff --git a/lib/goffice/pixmaps/pie.xpm b/lib/goffice-0.0.4/pixmaps/pie.xpm similarity index 100% rename from lib/goffice/pixmaps/pie.xpm rename to lib/goffice-0.0.4/pixmaps/pie.xpm diff --git a/lib/goffice-0.0.4/pixmaps/polar.png b/lib/goffice-0.0.4/pixmaps/polar.png new file mode 100644 index 0000000000..73d48707f8 Binary files /dev/null and b/lib/goffice-0.0.4/pixmaps/polar.png differ diff --git a/lib/goffice/pixmaps/radar.xpm b/lib/goffice-0.0.4/pixmaps/radar.xpm similarity index 100% rename from lib/goffice/pixmaps/radar.xpm rename to lib/goffice-0.0.4/pixmaps/radar.xpm diff --git a/lib/goffice/pixmaps/scatter.xpm b/lib/goffice-0.0.4/pixmaps/scatter.xpm similarity index 100% rename from lib/goffice/pixmaps/scatter.xpm rename to lib/goffice-0.0.4/pixmaps/scatter.xpm diff --git a/lib/goffice/pixmaps/stock.xpm b/lib/goffice-0.0.4/pixmaps/stock.xpm similarity index 100% rename from lib/goffice/pixmaps/stock.xpm rename to lib/goffice-0.0.4/pixmaps/stock.xpm diff --git a/lib/goffice/pixmaps/surface.xpm b/lib/goffice-0.0.4/pixmaps/surface.xpm similarity index 100% rename from lib/goffice/pixmaps/surface.xpm rename to lib/goffice-0.0.4/pixmaps/surface.xpm diff --git a/lib/goffice-0.0.4/plugins/Makefile.am b/lib/goffice-0.0.4/plugins/Makefile.am new file mode 100644 index 0000000000..420ad152f9 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = \ + plot_pie \ + plot_barcol \ + plot_xy \ + plot_radar \ + plot_surface \ + plot_boxes \ + reg_linear diff --git a/lib/goffice/graph/plugins/plot_barcol/Makefile.am b/lib/goffice-0.0.4/plugins/plot_barcol/Makefile.am similarity index 58% rename from lib/goffice/graph/plugins/plot_barcol/Makefile.am rename to lib/goffice-0.0.4/plugins/plot_barcol/Makefile.am index f5e4af24d9..3006000546 100644 --- a/lib/goffice/graph/plugins/plot_barcol/Makefile.am +++ b/lib/goffice-0.0.4/plugins/plot_barcol/Makefile.am @@ -1,30 +1,36 @@ -goffice_graph_barcoldir = $(gnumeric_plugindir)/plot_barcol +goffice_graph_barcoldir = $(goffice_plugindir)/plot_barcol xmldir = $(goffice_graph_barcoldir) gladedir = $(goffice_graph_barcoldir) goffice_graph_barcol_LTLIBRARIES = barcol.la barcol_la_LDFLAGS = -module $(GOFFICE_PLUGIN_FLAGS) +barcol_la_LIBADD = $(GOFFICE_PLUGIN_LIBADD) + barcol_la_SOURCES = gog-1.5d.c \ gog-1.5d.h \ gog-line.c \ gog-line.h \ gog-barcol.c \ gog-barcol.h \ - gog-barcol-prefs.c + gog-barcol-prefs.c \ + gog-dropbar.c \ + gog-dropbar.h \ + gog-minmax.c \ + gog-minmax.h xml_in_files = plugin.xml.in plot-types.xml.in -xml_DATA = $(xml_in_files:.xml.in=.xml) gog-barcol-prefs.glade +xml_DATA = $(xml_in_files:.xml.in=.xml) @INTLTOOL_XML_RULE@ -glade_DATA = gog-barcol-prefs.glade +dist_glade_DATA = gog-barcol-prefs.glade gog-minmax-prefs.glade # do not use the intl-tool stuff to merge the text back # its simpler to just use gettext directly plot-types.xml : plot-types.xml.in cp $< $@ -EXTRA_DIST = $(xml_in_files) $(glade_DATA) +EXTRA_DIST = $(xml_in_files) DISTCLEANFILES = $(xml_in_files:.xml.in=.xml) -include $(srcdir)/../../../goffice-plugins.mk +include $(top_srcdir)/lib/goffice-0.0.4/goffice-plugins.mk diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-1.5d.c b/lib/goffice-0.0.4/plugins/plot_barcol/gog-1.5d.c similarity index 68% rename from lib/goffice/graph/plugins/plot_barcol/gog-1.5d.c rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-1.5d.c index db63a1f1c1..76cc382fad 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-1.5d.c +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-1.5d.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -25,21 +25,24 @@ #include "gog-1.5d.h" #include "gog-line.h" #include "gog-barcol.h" +#include "gog-dropbar.h" +#include "gog-minmax.h" +#include #include #include #include #include -#include +#include #include #include #include +#include -#include #include #include #include -GNUMERIC_MODULE_PLUGIN_INFO_DECL; +GOFFICE_PLUGIN_MODULE_HEADER; enum { GOG_1_5D_PROP_0, @@ -91,6 +94,7 @@ gog_plot1_5d_set_property (GObject *obj, guint param_id, if ((gog_1_5d->in_3d != 0) == (tmp != 0)) return; gog_1_5d->in_3d = tmp; + break; } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); @@ -189,6 +193,15 @@ gog_plot1_5d_update (GogObject *obj) else go_data_vector_get_minmax (GO_DATA_VECTOR ( series->base.values[1].data), &minima, &maxima); + if (series->base.plot->desc.series.num_dim == 3) { + double tmp_min, tmp_max; + go_data_vector_get_minmax (GO_DATA_VECTOR ( + series->base.values[2].data), &tmp_min, &tmp_max); + if (minima > tmp_min ) + minima = tmp_min; + if (maxima < tmp_max) + maxima = tmp_max; + } if (model->minima > minima) model->minima = minima; if (model->maxima < maxima) @@ -228,11 +241,14 @@ gog_plot1_5d_update (GogObject *obj) vals[i] = go_data_vector_get_values ( GO_DATA_VECTOR (series->base.values[1].data)); g_object_get (G_OBJECT (series), "errors", errors + i, NULL); + if (errors[i]) + g_object_unref (errors[i]); lengths[i] = go_data_vector_get_len ( GO_DATA_VECTOR (series->base.values[1].data)); } - klass->update_stacked_and_percentage (model, vals, errors, lengths); + if (klass->update_stacked_and_percentage) + klass->update_stacked_and_percentage (model, vals, errors, lengths); } if (old_minima != model->minima || old_maxima != model->maxima) @@ -267,9 +283,9 @@ gog_plot1_5d_axis_get_bounds (GogPlot *plot, GogAxisType axis, } else if (axis == gog_axis_get_atype (gog_plot1_5d_get_index_axis (model))) { GSList *ptr; - bounds->val.minima = 0.; - bounds->val.maxima = model->num_elements - 1.; - bounds->logical.minima = 0.; + bounds->val.minima = 1.; + bounds->val.maxima = model->num_elements; + bounds->logical.minima = 1.; bounds->logical.maxima = go_nan; bounds->is_discrete = TRUE; @@ -283,24 +299,6 @@ gog_plot1_5d_axis_get_bounds (GogPlot *plot, GogAxisType axis, return NULL; } -static GogAxisSet -gog_plot1_5d_axis_set_pref (GogPlot const *plot) -{ - return GOG_AXIS_SET_XY; /* do some magic later for 3d */ -} - -static gboolean -gog_plot1_5d_axis_set_is_valid (GogPlot const *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_XY; /* do some magic later for 3d */ -} - -static gboolean -gog_plot1_5d_axis_set_assign (GogPlot *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_XY; /* do some magic later for 3d */ -} - static gboolean gog_1_5d_supports_vary_style_by_element (GogPlot const *plot) { @@ -324,7 +322,7 @@ gog_plot1_5d_class_init (GogPlotClass *plot_klass) "How to group multiple series, normal, stacked, as_percentage", "normal", G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, GOG_1_5D_PROP_IN_3D, - g_param_spec_boolean ("in_3d", "in_3d", + g_param_spec_boolean ("in-3d", "in-3d", "Place holder to all us to round trip pseudo 3d state", FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); @@ -348,10 +346,8 @@ gog_plot1_5d_class_init (GogPlotClass *plot_klass) plot_klass->desc.num_series_min = 1; plot_klass->desc.num_series_max = G_MAXINT; plot_klass->series_type = gog_series1_5d_get_type (); - plot_klass->axis_get_bounds = gog_plot1_5d_axis_get_bounds; - plot_klass->axis_set_pref = gog_plot1_5d_axis_set_pref; - plot_klass->axis_set_is_valid = gog_plot1_5d_axis_set_is_valid; - plot_klass->axis_set_assign = gog_plot1_5d_axis_set_assign; + plot_klass->axis_get_bounds = gog_plot1_5d_axis_get_bounds; + plot_klass->axis_set = GOG_AXIS_SET_XY; plot_klass->supports_vary_style_by_element = gog_1_5d_supports_vary_style_by_element; } @@ -360,11 +356,94 @@ gog_plot1_5d_init (GogPlot1_5d *plot) { plot->fmt = NULL; plot->in_3d = FALSE; + plot->support_series_lines = FALSE; + plot->support_drop_lines = FALSE; + plot->support_lines = FALSE; } -GSF_CLASS_ABSTRACT (GogPlot1_5d, gog_plot1_5d, - gog_plot1_5d_class_init, gog_plot1_5d_init, - GOG_PLOT_TYPE) +GSF_DYNAMIC_CLASS_ABSTRACT (GogPlot1_5d, gog_plot1_5d, + gog_plot1_5d_class_init, gog_plot1_5d_init, + GOG_PLOT_TYPE) + +/*****************************************************************************/ + +static gboolean +series_lines_can_add (GogObject const *parent) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + GogPlot1_5d *plot = GOG_PLOT1_5D (series->base.plot); + /* series lines are supported to implement excel series lines in barcol + plots and lines with dropbars and high-low lines */ + if (GOG_IS_PLOT_BARCOL (plot) && plot->type == GOG_1_5D_NORMAL) + return FALSE; + return (plot->support_series_lines && + !series->has_series_lines); +} + +static void +series_lines_post_add (GogObject *parent, GogObject *child) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + series->has_series_lines = TRUE; + gog_object_request_update (child); +} + +static void +series_lines_pre_remove (GogObject *parent, GogObject *child) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + series->has_series_lines = FALSE; +} + +/*****************************************************************************/ + +static gboolean +drop_lines_can_add (GogObject const *parent) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + return (GOG_PLOT1_5D (series->base.plot)->support_drop_lines && + !series->has_drop_lines); +} + +static void +drop_lines_post_add (GogObject *parent, GogObject *child) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + series->has_drop_lines = TRUE; + gog_object_request_update (child); +} + +static void +drop_lines_pre_remove (GogObject *parent, GogObject *child) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + series->has_drop_lines = FALSE; +} + +/*****************************************************************************/ + +static gboolean +lines_can_add (GogObject const *parent) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + return (GOG_PLOT1_5D (series->base.plot)->support_lines && + !series->has_lines); +} + +static void +lines_post_add (GogObject *parent, GogObject *child) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + series->has_lines = TRUE; + gog_object_request_update (child); +} + +static void +lines_pre_remove (GogObject *parent, GogObject *child) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (parent); + series->has_lines = FALSE; +} /*****************************************************************************/ @@ -397,6 +476,17 @@ gog_series1_5d_update (GogObject *obj) } series->base.num_elements = len; + if (series->base.plot->desc.series.num_dim == 3) { + int tmp = 0; + if (series->base.values[2].data != NULL) { + vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[2].data)); + tmp = go_data_vector_get_len + (GO_DATA_VECTOR (series->base.values[2].data)); + } + if (tmp < len) + len = tmp; + } + /* queue plot for redraw */ gog_object_request_update (GOG_OBJECT (series->base.plot)); if (old_num != series->base.num_elements) @@ -449,34 +539,82 @@ gog_series1_5d_get_property (GObject *obj, guint param_id, } static void -gog_series1_5d_populate_editor (GogSeries *series, - GtkNotebook *book, +gog_series1_5d_populate_editor (GogObject *obj, + GogEditor *editor, GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { + GogSeries *series = GOG_SERIES (obj); GtkWidget * error_page; gboolean horizontal; + + (GOG_OBJECT_CLASS (gog_series1_5d_parent_klass)->populate_editor) (obj, editor, dalloc, cc); + + if (series->plot->desc.series.num_dim == 3) + return; + if (g_object_class_find_property (G_OBJECT_GET_CLASS (series->plot), "horizontal") == NULL) horizontal = FALSE; else g_object_get (G_OBJECT (series->plot), "horizontal", &horizontal, NULL); error_page = gog_error_bar_prefs (series, "errors", horizontal, dalloc, cc); - gtk_notebook_prepend_page (book, error_page, gtk_label_new (_("Error bars"))); + gog_editor_add_page (editor, error_page, _("Error bars")); +} + +static void +gog_series1_5d_finalize (GObject *obj) +{ + GogSeries1_5d *series = GOG_SERIES1_5D (obj); + if (series->errors) { + g_object_unref (series->errors); + series->errors = NULL; + } + G_OBJECT_CLASS (gog_series1_5d_parent_klass)->finalize (obj); } static void gog_series1_5d_class_init (GogObjectClass *obj_klass) { + static GogObjectRole const roles[] = { + { N_("Series lines"), "GogSeriesLines", 0, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + series_lines_can_add, + NULL, + NULL, + series_lines_post_add, + series_lines_pre_remove, NULL }, + { N_("Drop lines"), "GogSeriesLines", 1, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + drop_lines_can_add, + NULL, + NULL, + drop_lines_post_add, + drop_lines_pre_remove, + NULL }, + { N_("Lines"), "GogSeriesLines", 1, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + lines_can_add, + NULL, + NULL, + lines_post_add, + lines_pre_remove, + NULL }, + }; + GObjectClass *gobject_klass = (GObjectClass *) obj_klass; GogSeriesClass *gog_series_klass = (GogSeriesClass*) obj_klass; gog_series1_5d_parent_klass = g_type_class_peek_parent (obj_klass); - obj_klass->update = gog_series1_5d_update; + gobject_klass->set_property = gog_series1_5d_set_property; gobject_klass->get_property = gog_series1_5d_get_property; - gog_series_klass->populate_editor = gog_series1_5d_populate_editor; + gobject_klass->finalize = gog_series1_5d_finalize; + obj_klass->update = gog_series1_5d_update; + obj_klass->populate_editor = gog_series1_5d_populate_editor; gog_series_klass->dim_changed = gog_series1_5d_dim_changed; + gog_object_register_roles (obj_klass, roles, G_N_ELEMENTS (roles)); + g_object_class_install_property (gobject_klass, SERIES_PROP_ERRORS, g_param_spec_object ("errors", "errors", "GogErrorBar *", @@ -490,24 +628,37 @@ gog_series1_5d_init (GObject *obj) series->errors = NULL; series->index_changed = FALSE; + series->has_series_lines = FALSE; + series->has_drop_lines = FALSE; + series->has_lines = FALSE; } -GSF_CLASS (GogSeries1_5d, gog_series1_5d, - gog_series1_5d_class_init, gog_series1_5d_init, - GOG_SERIES_TYPE) +GSF_DYNAMIC_CLASS (GogSeries1_5d, gog_series1_5d, + gog_series1_5d_class_init, gog_series1_5d_init, + GOG_SERIES_TYPE) /* Plugin initialization */ -void -plugin_init (void) +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) { - gog_plot1_5d_get_type (); - gog_line_plot_get_type (); - gog_area_plot_get_type (); - gog_barcol_plot_get_type (); + GTypeModule *module = go_plugin_get_type_module (plugin); + gog_plot1_5d_register_type (module); + gog_series1_5d_register_type (module); + gog_barcol_plot_register_type (module); + gog_barcol_view_register_type (module); + gog_dropbar_plot_register_type (module); + gog_dropbar_view_register_type (module); + gog_line_series_register_type (module); + gog_line_plot_register_type (module); + gog_area_plot_register_type (module); + gog_line_view_register_type (module); + gog_minmax_series_register_type (module); + gog_minmax_plot_register_type (module); + gog_minmax_view_register_type (module); } -void -plugin_cleanup (void) +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) { } diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-1.5d.h b/lib/goffice-0.0.4/plugins/plot_barcol/gog-1.5d.h similarity index 88% rename from lib/goffice/graph/plugins/plot_barcol/gog-1.5d.h rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-1.5d.h index b396a5dcd0..e83bea75f4 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-1.5d.h +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-1.5d.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -43,6 +43,9 @@ typedef struct { unsigned num_series, num_elements; double maxima, minima; /* meaning varies depending on type */ gboolean implicit_index; + int support_series_lines:1; + int support_drop_lines:1; + int support_lines:1; GOFormat *fmt; } GogPlot1_5d; typedef struct { @@ -62,6 +65,7 @@ typedef struct { #define GOG_PLOT1_5D_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_PLOT1_5D_TYPE, GogPlot1_5dClass)) GType gog_plot1_5d_get_type (void); +void gog_plot1_5d_register_type (GTypeModule *module); GogAxis * gog_plot1_5d_get_index_axis (GogPlot1_5d *model); @@ -71,6 +75,9 @@ typedef struct { GogSeries base; GogErrorBar *errors; gboolean index_changed; + int has_series_lines:1; + int has_drop_lines:1; + int has_lines:1; } GogSeries1_5d; typedef GogSeriesClass GogSeries1_5dClass; @@ -79,6 +86,7 @@ typedef GogSeriesClass GogSeries1_5dClass; #define IS_GOG_SERIES1_5D(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_SERIES1_5D_TYPE)) GType gog_series1_5d_get_type (void); +void gog_series1_5d_register_type (GTypeModule *module); G_END_DECLS diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-barcol-prefs.c b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol-prefs.c similarity index 74% rename from lib/goffice/graph/plugins/plot_barcol/gog-barcol-prefs.c rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol-prefs.c index 215c8db2f9..e471733c0b 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-barcol-prefs.c +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol-prefs.c @@ -15,42 +15,39 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "gog-barcol.h" -//#include -//#include -#include -#include +#include +#include -#include #include -GtkWidget *gog_barcol_plot_pref (GogBarColPlot *plot, GnmCmdContext *cc); +GtkWidget *gog_barcol_plot_pref (GogBarColPlot *plot, GOCmdContext *cc); static void cb_gap_changed (GtkAdjustment *adj, GObject *barcal) { - g_object_set (barcal, "gap_percentage", (int)adj->value, NULL); + g_object_set (barcal, "gap-percentage", (int)adj->value, NULL); } static void cb_overlap_changed (GtkAdjustment *adj, GObject *barcol) { - g_object_set (barcol, "overlap_percentage", (int)adj->value, NULL); + g_object_set (barcol, "overlap-percentage", (int)adj->value, NULL); } GtkWidget * -gog_barcol_plot_pref (GogBarColPlot *barcol, GnmCmdContext *cc) +gog_barcol_plot_pref (GogBarColPlot *barcol, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_barcol")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_barcol")); char *path = g_build_filename (dir, "gog-barcol-prefs.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_barcol_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_barcol_prefs", NULL, cc); g_free (path); if (gui == NULL) diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-barcol-prefs.glade b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol-prefs.glade similarity index 100% rename from lib/goffice/graph/plugins/plot_barcol/gog-barcol-prefs.glade rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol-prefs.glade diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-barcol.c b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol.c similarity index 75% rename from lib/goffice/graph/plugins/plot_barcol/gog-barcol.c rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol.c index 8608a36ab8..88ec0808f4 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-barcol.c +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol.c @@ -15,17 +15,19 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "gog-barcol.h" -#include -#include -#include #include -#include +#include +#include +#include +#include +#include +#include #include #include @@ -97,13 +99,17 @@ gog_barcol_plot_type_name (G_GNUC_UNUSED GogObject const *item) return N_("PlotBarCol"); } -extern gpointer gog_barcol_plot_pref (GogBarColPlot *barcol, GnmCmdContext *cc); -static gpointer -gog_barcol_plot_editor (GogObject *item, +extern gpointer gog_barcol_plot_pref (GogBarColPlot *barcol, GOCmdContext *cc); +static void +gog_barcol_plot_populate_editor (GogObject *item, + GogEditor *editor, G_GNUC_UNUSED GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { - return gog_barcol_plot_pref (GOG_BARCOL_PLOT (item), cc); + gog_editor_add_page (editor, + gog_barcol_plot_pref (GOG_BARCOL_PLOT (item), cc), + _("Properties")); + (GOG_OBJECT_CLASS(gog_barcol_parent_klass)->populate_editor) (item, editor, dalloc, cc); } static gboolean @@ -175,6 +181,7 @@ gog_barcol_axis_get_bounds (GogPlot *plot, GogAxisType axis, bounds->val.minima -= .5; bounds->val.maxima += .5; bounds->logical.minima = -.5; + bounds->center_on_ticks = FALSE; } return data; @@ -192,11 +199,11 @@ gog_barcol_plot_class_init (GogPlot1_5dClass *gog_plot_1_5d_klass) gobject_klass->get_property = gog_barcol_plot_get_property; g_object_class_install_property (gobject_klass, BARCOL_PROP_GAP_PERCENTAGE, - g_param_spec_int ("gap_percentage", "gap percentage", + g_param_spec_int ("gap-percentage", "gap percentage", "The padding around each group as a percentage of their width", 0, 500, 150, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, BARCOL_PROP_OVERLAP_PERCENTAGE, - g_param_spec_int ("overlap_percentage", "overlap percentage", + g_param_spec_int ("overlap-percentage", "overlap percentage", "The distance between series as a percentage of their width", -100, 100, 0, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, BARCOL_PROP_HORIZONTAL, @@ -206,7 +213,7 @@ gog_barcol_plot_class_init (GogPlot1_5dClass *gog_plot_1_5d_klass) G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); gog_object_klass->type_name = gog_barcol_plot_type_name; - gog_object_klass->editor = gog_barcol_plot_editor; + gog_object_klass->populate_editor = gog_barcol_plot_populate_editor; gog_object_klass->view_type = gog_barcol_view_get_type (); plot_klass->desc.series.style_fields = GOG_STYLE_OUTLINE | GOG_STYLE_FILL; @@ -221,11 +228,12 @@ static void gog_barcol_plot_init (GogBarColPlot *model) { model->gap_percentage = 150; + GOG_PLOT1_5D (model)->support_series_lines = TRUE; } -GSF_CLASS (GogBarColPlot, gog_barcol_plot, - gog_barcol_plot_class_init, gog_barcol_plot_init, - GOG_PLOT1_5D_TYPE) +GSF_DYNAMIC_CLASS (GogBarColPlot, gog_barcol_plot, + gog_barcol_plot_class_init, gog_barcol_plot_init, + GOG_PLOT1_5D_TYPE) /*****************************************************************************/ typedef GogPlotView GogBarColView; @@ -255,15 +263,15 @@ barcol_draw_rect (GogRenderer *rend, gboolean flip, double x0, x1, y0, y1; if (flip) { - x0 = gog_axis_map_to_canvas (x_map, rect->y); - x1 = gog_axis_map_to_canvas (x_map, rect->y + rect->h); - y0 = gog_axis_map_to_canvas (y_map, rect->x); - y1 = gog_axis_map_to_canvas (y_map, rect->x + rect->w); + x0 = gog_axis_map_to_view (x_map, rect->y); + x1 = gog_axis_map_to_view (x_map, rect->y + rect->h); + y0 = gog_axis_map_to_view (y_map, rect->x); + y1 = gog_axis_map_to_view (y_map, rect->x + rect->w); } else { - x0 = gog_axis_map_to_canvas (x_map, rect->x); - x1 = gog_axis_map_to_canvas (x_map, rect->x + rect->w); - y0 = gog_axis_map_to_canvas (y_map, rect->y); - y1 = gog_axis_map_to_canvas (y_map, rect->y + rect->h); + x0 = gog_axis_map_to_view (x_map, rect->x); + x1 = gog_axis_map_to_view (x_map, rect->x + rect->w); + y0 = gog_axis_map_to_view (y_map, rect->y); + y1 = gog_axis_map_to_view (y_map, rect->y + rect->h); } path[0].x = path[3].x = path[4].x = x0; @@ -278,8 +286,7 @@ barcol_draw_rect (GogRenderer *rend, gboolean flip, path[5].code = ART_END; gog_renderer_draw_sharp_polygon (rend, path, - fabs (x1 - x0) < 3. || fabs (y1 - y0) < 3. - , NULL); + fabs (x1 - x0) < 3. || fabs (y1 - y0) < 3.); } typedef struct { @@ -295,9 +302,12 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) GogBarColPlot const *model = GOG_BARCOL_PLOT (view->model); GogPlot1_5d const *gog_1_5d_model = GOG_PLOT1_5D (view->model); GogSeries1_5d const *series; + GogChart *chart = GOG_CHART (view->model->parent); + GogChartMap *chart_map; GogViewAllocation work; + GogViewAllocation const *area; GogRenderer *rend = view->renderer; - GogAxisMap *x_map, *y_map; + GogAxisMap *x_map, *y_map, *map; gboolean is_vertical = ! (model->horizontal); double **vals, sum, neg_base, pos_base, tmp; double x; @@ -309,30 +319,39 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) GogStyle **styles; ErrorBarData **error_data; GogErrorBar **errors; + GogSeriesLines **lines; + ArtVpath **paths; GSList *ptr; unsigned *lengths; double plus, minus; + GogObjectRole const *role = NULL; + if (num_elements <= 0 || num_series <= 0) return; - x_map = gog_axis_map_new (GOG_PLOT (model)->axis[0], - view->allocation.x, view->allocation.w); - y_map = gog_axis_map_new (GOG_PLOT (model)->axis[1], view->allocation.y + view->allocation.h, - -view->allocation.h); - - if (!(gog_axis_map_is_valid (x_map) && - gog_axis_map_is_valid (y_map))) { - gog_axis_map_free (x_map); - gog_axis_map_free (y_map); + area = gog_chart_view_get_plot_area (view->parent); + chart_map = gog_chart_map_new (chart, area, + GOG_PLOT (model)->axis[GOG_AXIS_X], + GOG_PLOT (model)->axis[GOG_AXIS_Y], + NULL, FALSE); + if (!gog_chart_map_is_valid (chart_map)) { + gog_chart_map_free (chart_map); return; } + + x_map = gog_chart_map_get_axis_map (chart_map, 0); + y_map = gog_chart_map_get_axis_map (chart_map, 1); + + map = is_vertical ? y_map : x_map; vals = g_alloca (num_series * sizeof (double *)); lengths = g_alloca (num_series * sizeof (unsigned)); styles = g_alloca (num_series * sizeof (GogStyle *)); errors = g_alloca (num_series * sizeof (GogErrorBar *)); error_data = g_alloca (num_series * sizeof (ErrorBarData *)); + lines = g_alloca (num_series * sizeof (GogSeriesLines *)); + paths = g_alloca (num_series * sizeof (ArtVpath *)); i = 0; for (ptr = gog_1_5d_model->base.series ; ptr != NULL ; ptr = ptr->next) { @@ -349,6 +368,20 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) error_data[i] = g_malloc (sizeof (ErrorBarData) * lengths[i]); else error_data[i] = NULL; + if (series->has_series_lines) { + if (!role) + role = gog_object_find_role_by_name ( + GOG_OBJECT (series), "Series lines"); + lines[i] = GOG_SERIES_LINES ( + gog_object_get_child_by_role (GOG_OBJECT (series), role)); + paths[i] = g_new (ArtVpath, lengths[i] * 2 - 1); + for (j = 0; j < lengths[i] - 1; j++) { + paths[i][j * 2].code = ART_MOVETO; + paths[i][j * 2 + 1].code = ART_LINETO; + } + paths[i][j * 2].code = ART_END; + } else + lines[i] = NULL; i++; } @@ -367,7 +400,7 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) if (i >= lengths[j]) continue; tmp = vals[j][i]; - if (!go_finite (tmp)) + if (!gog_axis_map_finite (map, tmp)) continue; if (tmp > 0.) sum += tmp; @@ -381,12 +414,12 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) pos_base = neg_base = 0.0; for (j = 0 ; j < num_series ; j++) { - work.y = (double) j * col_step + (double) i - offset; + work.y = (double) j * col_step + (double) i - offset + 1.0; if (i >= lengths[j]) continue; tmp = vals[j][i]; - if (!go_finite (tmp)) + if (!gog_axis_map_finite (map, tmp)) continue; if (gog_error_bar_is_visible (errors[j])) { gog_error_bar_get_bounds (errors[j], i, &minus, &plus); @@ -411,7 +444,7 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) if (gog_error_bar_is_visible (errors[j])) { x = tmp > 0 ? work.x + work.w: work.x; error_data[j][i].plus = plus * data_scale; - error_data[j][i].minus =minus * data_scale; + error_data[j][i].minus = minus * data_scale; if (is_vertical) { error_data[j][i].x = work.y + work.h / 2.0; error_data[j][i].y = x; @@ -420,6 +453,24 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) error_data[j][i].y = work.y + work.h / 2.0; } } + if (lines[j] != NULL) { + x = tmp > 0 ? work.x + work.w: work.x; + if (is_vertical) { + if (i > 0) { + paths[j][i * 2 - 1].x = gog_axis_map_to_view (x_map, work.y); + paths[j][i * 2 - 1].y = gog_axis_map_to_view (y_map, x); + } + paths[j][i * 2].x = gog_axis_map_to_view (x_map, work.y + work.h); + paths[j][i * 2].y = gog_axis_map_to_view (y_map, x); + } else { + if (i > 0) { + paths[j][i * 2 - 1].x = gog_axis_map_to_view (x_map, x); + paths[j][i * 2 - 1].y = gog_axis_map_to_view (y_map, work.y); + } + paths[j][i].x = gog_axis_map_to_view (x_map, x); + paths[j][i].x = gog_axis_map_to_view (y_map, work.y + work.h); + } + } } } /*Now draw error bars and clean*/ @@ -434,8 +485,14 @@ gog_barcol_view_render (GogView *view, GogViewAllocation const *bbox) g_free (error_data[i]); } - gog_axis_map_free (x_map); - gog_axis_map_free (y_map); + /* Draw series lines if any */ + for (i = 0; i < num_series; i++) + if (lines[i] != NULL) { + gog_series_lines_render (lines[i], view->renderer, bbox, paths[i], FALSE); + g_free (paths[i]); + } + + gog_chart_map_free (chart_map); } static gboolean @@ -458,6 +515,6 @@ gog_barcol_view_class_init (GogViewClass *view_klass) view_klass->clip = TRUE; } -static GSF_CLASS (GogBarColView, gog_barcol_view, - gog_barcol_view_class_init, NULL, - GOG_PLOT_VIEW_TYPE) +GSF_DYNAMIC_CLASS (GogBarColView, gog_barcol_view, + gog_barcol_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-barcol.h b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol.h similarity index 87% rename from lib/goffice/graph/plugins/plot_barcol/gog-barcol.h rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol.h index ba59fd19d4..c96ac7043c 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-barcol.h +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-barcol.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -41,6 +41,8 @@ typedef GogPlot1_5dClass GogBarColPlotClass; #define GOG_IS_PLOT_BARCOL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_BARCOL_PLOT_TYPE)) GType gog_barcol_plot_get_type (void); +void gog_barcol_plot_register_type (GTypeModule *module); +void gog_barcol_view_register_type (GTypeModule *module); G_END_DECLS diff --git a/lib/goffice-0.0.4/plugins/plot_barcol/gog-dropbar.c b/lib/goffice-0.0.4/plugins/plot_barcol/gog-dropbar.c new file mode 100644 index 0000000000..7c711d0a5a --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-dropbar.c @@ -0,0 +1,293 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-dropbar.c + * + * Copyright (C) 2005 + * Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include "gog-dropbar.h" +#include +#include +#include +#include + +#include +#include + +static GogObjectClass *gog_dropbar_parent_klass; + +static GType gog_dropbar_view_get_type (void); + +static char const * +gog_dropbar_plot_type_name (G_GNUC_UNUSED GogObject const *item) +{ + /* xgettext : the base for how to name drop bar/col plot objects + * eg The 2nd drop bar/col plot in a chart will be called + * PlotDropBar2 */ + return N_("PlotDropBar"); +} + +static void +gog_dropbar_plot_class_init (GogPlot1_5dClass *gog_plot_1_5d_klass) +{ + GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_1_5d_klass; + GogPlotClass *plot_klass = (GogPlotClass *) gog_plot_1_5d_klass; + gog_dropbar_parent_klass = g_type_class_peek_parent (gog_plot_1_5d_klass); + + gog_object_klass->type_name = gog_dropbar_plot_type_name; + gog_object_klass->view_type = gog_dropbar_view_get_type (); + + { + static GogSeriesDimDesc dimensions[] = { + { N_("Labels"), GOG_SERIES_SUGGESTED, TRUE, + GOG_DIM_LABEL, GOG_MS_DIM_CATEGORIES }, + { N_("Start"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_START }, + { N_("End"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_END }, + }; + plot_klass->desc.series.dim = dimensions; + plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); + } + + gog_plot_1_5d_klass->update_stacked_and_percentage = NULL; +} + +static void +gog_dropbar_plot_init (GogPlot1_5d *plot) +{ + plot->support_series_lines = FALSE; + plot->support_lines = TRUE; +} + +GSF_DYNAMIC_CLASS (GogDropBarPlot, gog_dropbar_plot, + gog_dropbar_plot_class_init, gog_dropbar_plot_init, + GOG_BARCOL_PLOT_TYPE) + +/*****************************************************************************/ +typedef GogPlotView GogDropBarView; +typedef GogPlotViewClass GogDropBarViewClass; + +/** + * FIXME FIXME FIXME Wrong description + * barcol_draw_rect : + * @rend : #GogRenderer + * @flip : + * @base : #GogViewAllocation + * @rect : #GogViewAllocation + * + * A utility routine to build a vpath in @rect. @rect is assumed to be in + * coordinates relative to @base with 0,0 as the upper left. @flip transposes + * @rect and rotates it to put the origin in the bottom left. Play fast and + * loose with coordinates to keep widths >= 1. If we allow things to be less + * the background bleeds through. + **/ +static void +barcol_draw_rect (GogRenderer *rend, gboolean flip, + GogAxisMap *x_map, + GogAxisMap *y_map, + GogViewAllocation const *rect) +{ + ArtVpath path[6]; + double x0, x1, y0, y1; + + if (flip) { + x0 = gog_axis_map_to_view (x_map, rect->y); + x1 = gog_axis_map_to_view (x_map, rect->y + rect->h); + y0 = gog_axis_map_to_view (y_map, rect->x); + y1 = gog_axis_map_to_view (y_map, rect->x + rect->w); + if (fabs (x1 - x0) < .5) { + x1 += .25; + x0 -= .25; + } + } else { + x0 = gog_axis_map_to_view (x_map, rect->x); + x1 = gog_axis_map_to_view (x_map, rect->x + rect->w); + y0 = gog_axis_map_to_view (y_map, rect->y); + y1 = gog_axis_map_to_view (y_map, rect->y + rect->h); + if (fabs (y1 - y0) < .5) { + y1 += .25; + y0 -= .25; + } + } + + path[0].x = path[3].x = path[4].x = x0; + path[1].x = path[2].x = x1; + path[0].y = path[1].y = path[4].y = y0; + path[2].y = path[3].y = y1; + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[2].code = ART_LINETO; + path[3].code = ART_LINETO; + path[4].code = ART_LINETO; + path[5].code = ART_END; + + gog_renderer_draw_sharp_polygon (rend, path, + fabs (x1 - x0) < 3. || fabs (y1 - y0) < 3.); +} + +static void +gog_dropbar_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogBarColPlot const *model = GOG_BARCOL_PLOT (view->model); + GogPlot1_5d const *gog_1_5d_model = GOG_PLOT1_5D (view->model); + GogSeries1_5d const *series; + GogAxisMap *x_map, *y_map; + GogViewAllocation work; + double *start_vals, *end_vals; + double x; + double step, offset, group_step; + unsigned i, j; + unsigned num_elements = gog_1_5d_model->num_elements; + unsigned num_series = gog_1_5d_model->num_series; + GSList *ptr; + unsigned n, tmp; + GogStyle *neg_style; + ArtVpath **path1, **path2; + GogObjectRole const *role = NULL; + GogSeriesLines **lines; + + if (num_elements <= 0 || num_series <= 0) + return; + + x_map = gog_axis_map_new (GOG_PLOT (model)->axis[0], + view->allocation.x, view->allocation.w); + y_map = gog_axis_map_new (GOG_PLOT (model)->axis[1], view->allocation.y + view->allocation.h, + -view->allocation.h); + + if (!(gog_axis_map_is_valid (x_map) && + gog_axis_map_is_valid (y_map))) { + gog_axis_map_free (x_map); + gog_axis_map_free (y_map); + return; + } + + /* lines, if any will be rendered after the bars, so we build the paths + and render them at the end */ + path1 = g_alloca (num_series * sizeof (ArtVpath *)); + path2 = g_alloca (num_series * sizeof (ArtVpath *)); + lines = g_alloca (num_series * sizeof (GogSeriesLines *)); + j = 0; + step = 1. - model->overlap_percentage / 100.; + group_step = model->gap_percentage / 100.; + work.w = 1.0 / (1. + ((num_series - 1.0) * step) + group_step); + step *= work.w; + offset = - (step * (num_series - 1.0) + work.w) / 2.0; + + + for (ptr = gog_1_5d_model->base.series ; ptr != NULL ; ptr = ptr->next) { + series = ptr->data; + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + neg_style = gog_style_dup ((GOG_STYLED_OBJECT (series))->style); + neg_style->outline.color ^= 0xffffff00; + neg_style->fill.pattern.back ^= 0xffffff00; + neg_style->fill.pattern.fore ^= 0xffffff00; + x = offset; + start_vals = go_data_vector_get_values ( + GO_DATA_VECTOR (series->base.values[1].data)); + n = go_data_vector_get_len ( + GO_DATA_VECTOR (series->base.values[1].data)); + end_vals = go_data_vector_get_values ( + GO_DATA_VECTOR (series->base.values[2].data)); + tmp = go_data_vector_get_len ( + GO_DATA_VECTOR (series->base.values[2].data)); + if (n > tmp) + n = tmp; + + if (series->has_lines) { + if (!role) + role = gog_object_find_role_by_name ( + GOG_OBJECT (series), "Lines"); + lines[j] = GOG_SERIES_LINES ( + gog_object_get_child_by_role (GOG_OBJECT (series), role)); + path1[j] = g_new (ArtVpath, n + 1); + path2[j] = g_new (ArtVpath, n + 1); + path1[j][0].code = path2[j][0].code = ART_MOVETO; + for (i = 1; i < n; i++) + path1[j][i].code =path2[j][i].code = ART_LINETO; + path1[j][n].code = path2[j][n].code = ART_END; + } else + path1[j] = NULL; + for (i = 0; i < n; i++) { + work.x = x; + work.y = start_vals[i]; + work.h = end_vals[i] - work.y; + if (series->has_lines) { + if (model->horizontal) { + path1[j][i].y = path2[j][i].y = + gog_axis_map_to_view (y_map, work.x + work.w / 2.); + path1[j][i].x = gog_axis_map_to_view (x_map, start_vals[i]); + path2[j][i].x = gog_axis_map_to_view (x_map, end_vals[i]); + } else { + path1[j][i].x = path2[j][i].x = + gog_axis_map_to_view (x_map, work.x + work.w / 2.); + path1[j][i].y = gog_axis_map_to_view (y_map, start_vals[i]); + path2[j][i].y = gog_axis_map_to_view (y_map, end_vals[i]); + } + } + gog_renderer_push_style (view->renderer, (start_vals[i] <= end_vals[i])? + GOG_STYLED_OBJECT (series)->style: neg_style); + barcol_draw_rect (view->renderer, model->horizontal, x_map, y_map, &work); + barcol_draw_rect (view->renderer, model->horizontal, x_map, y_map, &work); + gog_renderer_pop_style (view->renderer); + x += 1; + } + offset += step; + g_object_unref (neg_style); + j++; + } + for (j = 0; j < num_series; j++) + if (path1[j] != NULL) { + gog_renderer_push_style (view->renderer, + gog_styled_object_get_style (GOG_STYLED_OBJECT (lines[j]))); + gog_series_lines_render (lines[j], view->renderer, bbox, path1[j], TRUE); + gog_series_lines_render (lines[j], view->renderer, bbox, path2[j], FALSE); + gog_renderer_pop_style (view->renderer); + g_free (path2[j]); + g_free (path1[j]); + } + + gog_axis_map_free (x_map); + gog_axis_map_free (y_map); +} + +static gboolean +gog_dropbar_view_info_at_point (GogView *view, double x, double y, + GogObject const *cur_selection, + GogObject **obj, char **name) +{ + if (obj != NULL) + *obj = view->model; + if (name != NULL) + *name = g_strdup (gog_object_get_name (GOG_OBJECT (view->model))); + return TRUE; +} + +static void +gog_dropbar_view_class_init (GogViewClass *view_klass) +{ + view_klass->render = gog_dropbar_view_render; + view_klass->info_at_point = gog_dropbar_view_info_at_point; + view_klass->clip = TRUE; +} + +GSF_DYNAMIC_CLASS (GogDropBarView, gog_dropbar_view, + gog_dropbar_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) diff --git a/lib/goffice-0.0.4/plugins/plot_barcol/gog-dropbar.h b/lib/goffice-0.0.4/plugins/plot_barcol/gog-dropbar.h new file mode 100644 index 0000000000..8d1563f875 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-dropbar.h @@ -0,0 +1,44 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-dropbar.h + * + * Copyright (C) 2005 + * Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_DROPBAR_H +#define GOG_DROPBAR_H + +#include "gog-barcol.h" + +G_BEGIN_DECLS + + +typedef GogBarColPlot GogDropBarPlot; +typedef GogPlot1_5dClass GogDropBarPlotClass; + +#define GOG_DROPBAR_PLOT_TYPE (gog_dropbar_plot_get_type ()) +#define GOG_DROPBAR_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_DROPBAR_PLOT_TYPE, GogDropBarPlot)) +#define GOG_IS_PLOT_DROPBAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_DROPBAR_PLOT_TYPE)) + +GType gog_dropbar_plot_get_type (void); +void gog_dropbar_plot_register_type (GTypeModule *module); +void gog_dropbar_view_register_type (GTypeModule *module); + +G_END_DECLS + +#endif /* GOG_DROPBAR_H */ diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-line.c b/lib/goffice-0.0.4/plugins/plot_barcol/gog-line.c similarity index 75% rename from lib/goffice/graph/plugins/plot_barcol/gog-line.c rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-line.c index a8b63b48d7..3f2363bb36 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-line.c +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-line.c @@ -15,18 +15,20 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "gog-line.h" #include "gog-1.5d.h" +#include #include +#include #include #include #include -#include +#include #include #include #include @@ -78,9 +80,11 @@ gog_line_series_class_init (GogStyledObjectClass *gso_klass) series_parent_klass = g_type_class_peek_parent (gso_klass); gso_klass->init_style = gog_line_series_init_style; } -static GSF_CLASS (GogLineSeries, gog_line_series, - gog_line_series_class_init, NULL, - GOG_SERIES1_5D_TYPE) + +GType gog_line_series_get_type (void); +GSF_DYNAMIC_CLASS (GogLineSeries, gog_line_series, + gog_line_series_class_init, NULL, + GOG_SERIES1_5D_TYPE) static char const * gog_line_plot_type_name (G_GNUC_UNUSED GogObject const *item) @@ -193,11 +197,12 @@ static void gog_line_plot_init (GogLinePlot *plot) { plot->default_style_has_markers = TRUE; + GOG_PLOT1_5D (plot)->support_drop_lines = TRUE; } -GSF_CLASS (GogLinePlot, gog_line_plot, - gog_line_plot_class_init, gog_line_plot_init, - GOG_PLOT1_5D_TYPE) +GSF_DYNAMIC_CLASS (GogLinePlot, gog_line_plot, + gog_line_plot_class_init, gog_line_plot_init, + GOG_PLOT1_5D_TYPE) /*****************************************************************************/ @@ -210,6 +215,7 @@ gog_area_plot_type_name (G_GNUC_UNUSED GogObject const *item) */ return N_("PlotArea"); } + static void gog_area_plot_class_init (GogObjectClass *gog_klass) { @@ -220,9 +226,17 @@ gog_area_plot_class_init (GogObjectClass *gog_klass) gog_klass->type_name = gog_area_plot_type_name; } -GSF_CLASS (GogAreaPlot, gog_area_plot, - gog_area_plot_class_init, NULL, - GOG_LINE_PLOT_TYPE) + +static void +gog_area_plot_init (GogPlot *plot) +{ + plot->render_before_axes = TRUE; + GOG_PLOT1_5D (plot)->support_drop_lines = TRUE; +} + +GSF_DYNAMIC_CLASS (GogAreaPlot, gog_area_plot, + gog_area_plot_class_init, gog_area_plot_init, + GOG_LINE_PLOT_TYPE) /*****************************************************************************/ @@ -242,6 +256,9 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) GogPlot1_5d const *model = GOG_PLOT1_5D (view->model); GogPlot1_5dType const type = model->type; GogSeries1_5d const *series; + GogChart *chart = GOG_CHART (view->model->parent); + GogChartMap *chart_map; + GogViewAllocation const *area; unsigned i, j, k; unsigned num_elements = model->num_elements; unsigned num_series = model->num_series; @@ -252,10 +269,12 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) ErrorBarData **error_data; GogStyle **styles; unsigned *lengths; - ArtVpath **path; + ArtVpath **path, **drop_paths; GogErrorBar **errors; + GogObjectRole const *role = NULL; + GogSeriesLines **lines; - double y_zero; + double y_zero, drop_lines_y_zero; double abs_sum, sum, value; gboolean is_null, is_area_plot; @@ -266,27 +285,34 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) if (num_elements <= 0 || num_series <= 0) return; - x_map = gog_axis_map_new (model->base.axis[0], - view->allocation.x, view->allocation.w); - y_map = gog_axis_map_new (model->base.axis[1], - view->allocation.y + view->allocation.h, - -view->allocation.h); - - if (!(gog_axis_map_is_valid (x_map) && - gog_axis_map_is_valid (y_map))) { - gog_axis_map_free (x_map); - gog_axis_map_free (y_map); + area = gog_chart_view_get_plot_area (view->parent); + chart_map = gog_chart_map_new (chart, area, + GOG_PLOT (model)->axis[GOG_AXIS_X], + GOG_PLOT (model)->axis[GOG_AXIS_Y], + NULL, FALSE); + if (!gog_chart_map_is_valid (chart_map)) { + gog_chart_map_free (chart_map); return; } - y_zero = gog_axis_map_to_canvas (y_map, .0); + x_map = gog_chart_map_get_axis_map (chart_map, 0); + y_map = gog_chart_map_get_axis_map (chart_map, 1); + + /* Draw drop lines from point to axis start. See comment in + * GogXYPlotView::render */ + + gog_axis_map_get_extents (y_map, &drop_lines_y_zero, NULL); + drop_lines_y_zero = gog_axis_map_to_view (y_map, drop_lines_y_zero); + y_zero = gog_axis_map_get_baseline (y_map); vals = g_alloca (num_series * sizeof (double *)); error_data = g_alloca (num_series * sizeof (ErrorBarData *)); lengths = g_alloca (num_series * sizeof (unsigned)); styles = g_alloca (num_series * sizeof (GogStyle *)); path = g_alloca (num_series * sizeof (ArtVpath *)); - errors = g_alloca (num_series * sizeof (GogErrorBar *)); + errors = g_alloca (num_series * sizeof (GogErrorBar *)); + lines = g_alloca (num_series * sizeof (GogSeriesLines *)); + drop_paths = g_alloca (num_series * sizeof (ArtVpath *)); i = 0; for (ptr = model->base.series ; ptr != NULL ; ptr = ptr->next) { @@ -313,6 +339,21 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) error_data[i] = g_malloc (sizeof (ErrorBarData) * lengths[i]); else error_data[i] = NULL; + if (series->has_drop_lines) { + if (!role) + role = gog_object_find_role_by_name ( + GOG_OBJECT (series), "Drop lines"); + lines[i] = GOG_SERIES_LINES ( + gog_object_get_child_by_role (GOG_OBJECT (series), role)); + drop_paths [i] = g_malloc (sizeof (ArtVpath) * (num_elements * 2 + 1)); + for (j = 0; j < num_elements; j++) { + drop_paths[i][2 * j].code = ART_MOVETO; + drop_paths[i][2 * j + 1].code = ART_LINETO; + drop_paths[i][2 * j + 1].y = drop_lines_y_zero; + } + drop_paths[i][2 * j].code = ART_END; + } else + lines[i] = NULL; i++; } @@ -320,7 +361,7 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) sum = abs_sum = 0.0; if (type == GOG_1_5D_AS_PERCENTAGE) { for (i = 0; i < num_series; i++) - if (go_finite (vals[i][j-1])) + if (gog_axis_map_finite (y_map, vals[i][j-1])) abs_sum += fabs (vals[i][j-1]); is_null = (go_sub_epsilon (abs_sum) <= 0.); } else @@ -330,7 +371,7 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) if (j > lengths[i]) continue; - if (vals[i] && go_finite (vals[i][j-1])) { + if (vals[i] && gog_axis_map_finite (y_map, vals[i][j-1])) { value = vals[i][j-1]; if (gog_error_bar_is_visible (errors[i])) { gog_error_bar_get_bounds (errors[i], j - 1, &minus, &plus); @@ -343,20 +384,24 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) k = 2 * lengths[i] - j + 1; if (is_area_plot && (type != GOG_1_5D_NORMAL)) { - path[i][k].x = gog_axis_map_to_canvas (x_map, j - 1); + path[i][k].x = gog_axis_map_to_view (x_map, j); path[i][k].code = ART_LINETO; if (type == GOG_1_5D_STACKED) - path[i][k].y = gog_axis_map_to_canvas (y_map, sum); + path[i][k].y = gog_axis_map_finite (y_map, sum) ? + gog_axis_map_to_view (y_map, sum): + y_zero; else path[i][k].y = is_null ? y_zero : - gog_axis_map_to_canvas (y_map, sum / abs_sum); + (gog_axis_map_finite (y_map, sum) ? + gog_axis_map_to_view (y_map, sum / abs_sum) : + y_zero); } - path[i][j].x = gog_axis_map_to_canvas (x_map, j - 1); + path[i][j].x = gog_axis_map_to_view (x_map, j); if (type == GOG_1_5D_NORMAL && !is_area_plot) - if (go_finite (vals[i][j-1])) + if (gog_axis_map_finite (y_map, vals[i][j-1])) if (j > 1 && path[i][j-1].code == ART_MOVETO_OPEN) path[i][j].code = ART_MOVETO; else @@ -369,11 +414,13 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) sum += value; if (gog_error_bar_is_visible (errors[i])) - error_data[i][j-1].x = j - 1; + error_data[i][j-1].x = j; switch (type) { case GOG_1_5D_NORMAL : - path[i][j].y = gog_axis_map_to_canvas (y_map, value); + path[i][j].y = gog_axis_map_finite (y_map, value) ? + gog_axis_map_to_view (y_map, value) : + y_zero; if (gog_error_bar_is_visible (errors[i])) { error_data[i][j - 1].y = value; error_data[i][j - 1].minus = minus; @@ -382,7 +429,9 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) break; case GOG_1_5D_STACKED : - path[i][j].y = gog_axis_map_to_canvas (y_map, sum); + path[i][j].y = gog_axis_map_finite (y_map, sum) ? + gog_axis_map_to_view (y_map, sum) : + y_zero; if (gog_error_bar_is_visible (errors[i])) { error_data[i][j - 1].y = sum; error_data[i][j - 1].minus = minus; @@ -393,7 +442,9 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) case GOG_1_5D_AS_PERCENTAGE : path[i][j].y = is_null ? y_zero : - gog_axis_map_to_canvas (y_map, sum / abs_sum); + (gog_axis_map_finite (y_map, sum) ? + gog_axis_map_to_view (y_map, sum / abs_sum) : + y_zero); if (gog_error_bar_is_visible (errors[i])) { error_data[i][j - 1].y = is_null ? 0. : sum / abs_sum; error_data[i][j - 1].minus = is_null ? -1. : minus / abs_sum; @@ -401,10 +452,16 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) } break; } + if (lines[i]) { + drop_paths[i][2 * j - 2].x = drop_paths[i][2 * j - 1].x = path[i][j].x; + drop_paths[i][2 * j - 2].y = path[i][j].y; + } + } } - - gog_renderer_clip_push (view->renderer, &view->allocation); + + gog_renderer_push_clip (view->renderer, + gog_renderer_get_rectangle_vpath (&view->allocation)); for (i = 0; i < num_series; i++) { @@ -420,8 +477,7 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) if (!is_area_plot) { path[i][lengths[i] +1].code = ART_END; - gog_renderer_draw_path (view->renderer, - path[i], NULL); + gog_renderer_draw_path (view->renderer, path[i]); } else { switch (type) { case GOG_1_5D_NORMAL : @@ -449,13 +505,22 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) path[i][j+1].code = ART_END; break; } - gog_renderer_draw_polygon (view->renderer, - path[i], FALSE, NULL); + gog_renderer_draw_polygon (view->renderer, path[i], FALSE); } gog_renderer_pop_style (view->renderer); } + /*Now draw drop lines */ + for (i = 0; i < num_series; i++) + if (lines[i] != NULL) { + gog_renderer_push_style (view->renderer, + gog_styled_object_get_style (GOG_STYLED_OBJECT (lines[i]))); + gog_series_lines_render (lines[i], view->renderer, bbox, drop_paths[i], FALSE); + gog_renderer_pop_style (view->renderer); + g_free (drop_paths[i]); + } + /*Now draw error bars */ for (i = 0; i < num_series; i++) if (gog_error_bar_is_visible (errors[i])) @@ -465,7 +530,7 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) error_data[i][j].minus, error_data[i][j].plus, FALSE); - gog_renderer_clip_pop (view->renderer); + gog_renderer_pop_clip (view->renderer); /*Now draw markers*/ if (!is_area_plot) { @@ -501,8 +566,7 @@ gog_line_view_render (GogView *view, GogViewAllocation const *bbox) g_free (error_data[i]); } - gog_axis_map_free (x_map); - gog_axis_map_free (y_map); + gog_chart_map_free (chart_map); } static gboolean @@ -516,6 +580,7 @@ gog_line_view_info_at_point (GogView *view, double x, double y, *name = g_strdup (gog_object_get_name (GOG_OBJECT (view->model))); return TRUE; } + static void gog_line_view_class_init (GogViewClass *view_klass) { @@ -523,6 +588,6 @@ gog_line_view_class_init (GogViewClass *view_klass) view_klass->info_at_point = gog_line_view_info_at_point; } -static GSF_CLASS (GogLineView, gog_line_view, - gog_line_view_class_init, NULL, - GOG_PLOT_VIEW_TYPE) +GSF_DYNAMIC_CLASS (GogLineView, gog_line_view, + gog_line_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) diff --git a/lib/goffice/graph/plugins/plot_barcol/gog-line.h b/lib/goffice-0.0.4/plugins/plot_barcol/gog-line.h similarity index 84% rename from lib/goffice/graph/plugins/plot_barcol/gog-line.h rename to lib/goffice-0.0.4/plugins/plot_barcol/gog-line.h index c020c16e7d..26d2a15d86 100644 --- a/lib/goffice/graph/plugins/plot_barcol/gog-line.h +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-line.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -34,6 +34,7 @@ typedef GogPlot1_5dClass GogLinePlotClass; #define GOG_IS_PLOT_LINE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_LINE_PLOT_TYPE)) GType gog_line_plot_get_type (void); +void gog_line_plot_register_type (GTypeModule *module); /*************************************************************************/ @@ -45,6 +46,10 @@ typedef GogLinePlot GogAreaPlot; typedef GogLinePlotClass GogAreaPlotClass; GType gog_area_plot_get_type (void); +void gog_area_plot_register_type (GTypeModule *module); + +void gog_line_series_register_type (GTypeModule *module); +void gog_line_view_register_type (GTypeModule *module); G_END_DECLS diff --git a/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax-prefs.glade b/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax-prefs.glade new file mode 100644 index 0000000000..740664f487 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax-prefs.glade @@ -0,0 +1,104 @@ + + + + + + + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + + + + 12 + True + 1 + 3 + False + 6 + 12 + + + + True + _Gap: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0 + 0 + 0 + gap_spinner + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + Separation between groups as a percentage of bar/col width + True + 10 + 0 + True + GTK_UPDATE_ALWAYS + True + False + 0 0 500 10 10 10 + + + 1 + 2 + 0 + 1 + fill + + + + + + + + diff --git a/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax.c b/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax.c new file mode 100644 index 0000000000..affcb558b1 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax.c @@ -0,0 +1,396 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-minmax.c + * + * Copyright (C) 2005 + * Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include "gog-minmax.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +enum { + MINMAX_PROP_0, + MINMAX_PROP_GAP_PERCENTAGE, + MINMAX_PROP_HORIZONTAL, + MINMAX_PROP_DEFAULT_STYLE_HAS_MARKERS +}; + +static GogObjectClass *gog_minmax_parent_klass; + +static GType gog_minmax_view_get_type (void); + +typedef GogSeries1_5d GogMinMaxSeries; +typedef GogSeries1_5dClass GogMinMaxSeriesClass; + +static GogStyledObjectClass *series_parent_klass; + +static void +gog_minmax_series_init_style (GogStyledObject *gso, GogStyle *style) +{ + GogSeries *series = GOG_SERIES (gso); + GogMinMaxPlot const *plot; + + series_parent_klass->init_style (gso, style); + if (series->plot == NULL) + return; + + plot = GOG_MINMAX_PLOT (series->plot); + if (!plot->default_style_has_markers) { + style->disable_theming |= GOG_STYLE_MARKER; + if (style->marker.auto_shape) { + GOMarker *m = go_marker_new (); + go_marker_set_shape (m, GO_MARKER_NONE); + gog_style_set_marker (style, m); + } + } +} + +static void +gog_minmax_series_class_init (GogStyledObjectClass *gso_klass) +{ + series_parent_klass = g_type_class_peek_parent (gso_klass); + gso_klass->init_style = gog_minmax_series_init_style; +} + +GSF_DYNAMIC_CLASS (GogMinMaxSeries, gog_minmax_series, + gog_minmax_series_class_init, NULL, + GOG_SERIES1_5D_TYPE) + +/*****************************************************************************/ + +static void +gog_minmax_plot_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogMinMaxPlot *minmax = GOG_MINMAX_PLOT (obj); + + switch (param_id) { + case MINMAX_PROP_GAP_PERCENTAGE: + minmax->gap_percentage = g_value_get_int (value); + break; + + case MINMAX_PROP_HORIZONTAL: + minmax->horizontal = g_value_get_boolean (value); + break; + + case MINMAX_PROP_DEFAULT_STYLE_HAS_MARKERS: + minmax->default_style_has_markers = g_value_get_boolean (value); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } + gog_object_emit_changed (GOG_OBJECT (obj), TRUE); +} + +static void +gog_minmax_plot_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogMinMaxPlot *minmax = GOG_MINMAX_PLOT (obj); + + switch (param_id) { + case MINMAX_PROP_GAP_PERCENTAGE: + g_value_set_int (value, minmax->gap_percentage); + break; + case MINMAX_PROP_HORIZONTAL: + g_value_set_boolean (value, minmax->horizontal); + break; + case MINMAX_PROP_DEFAULT_STYLE_HAS_MARKERS: + g_value_set_boolean (value, minmax->default_style_has_markers); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static char const * +gog_minmax_plot_type_name (G_GNUC_UNUSED GogObject const *item) +{ + /* xgettext : the base for how to name min/max line plot objects + * eg The 2nd min/max line plot in a chart will be called + * PlotMinMax2 */ + return N_("PlotMinMax"); +} + +static GOData * +gog_minmax_axis_get_bounds (GogPlot *plot, GogAxisType axis, + GogPlotBoundInfo *bounds) +{ + GogPlot1_5d *model = GOG_PLOT1_5D (plot); + GogPlot1_5dClass *plot1_5d_klass = GOG_PLOT1_5D_CLASS (gog_minmax_parent_klass); + GOData *data; + + data = (plot1_5d_klass->base.axis_get_bounds) (plot, axis, bounds); + + if (axis == gog_axis_get_atype (gog_plot1_5d_get_index_axis (model))) { + bounds->val.minima -= .5; + bounds->val.maxima += .5; + bounds->logical.minima = -.5; + bounds->center_on_ticks = FALSE; + } + + return data; +} + +static void +cb_gap_changed (GtkAdjustment *adj, GObject *minmax) +{ + g_object_set (minmax, "gap-percentage", (int)adj->value, NULL); +} + +static void +gog_minmax_plot_populate_editor (GogObject *item, + GogEditor *editor, + G_GNUC_UNUSED GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + GtkWidget *w; + GogMinMaxPlot *minmax = GOG_MINMAX_PLOT (item); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_barcol")); + char *path = g_build_filename (dir, "gog-minmax-prefs.glade", NULL); + GladeXML *gui = go_libglade_new (path, "gog_minmax_prefs", NULL, cc); + + g_free (path); + if (gui == NULL) + return; + + w = glade_xml_get_widget (gui, "gap_spinner"); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), minmax->gap_percentage); + g_signal_connect (G_OBJECT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w))), + "value_changed", + G_CALLBACK (cb_gap_changed), minmax); + + w = glade_xml_get_widget (gui, "gog_minmax_prefs"); + g_object_set_data_full (G_OBJECT (w), + "state", gui, (GDestroyNotify)g_object_unref); + + gog_editor_add_page (editor, w, _("Properties")); + (GOG_OBJECT_CLASS(gog_minmax_parent_klass)->populate_editor) (item, editor, dalloc, cc); +} + +static gboolean +gog_minmax_swap_x_and_y (GogPlot1_5d *model) +{ + return GOG_MINMAX_PLOT (model)->horizontal; +} + +static void +gog_minmax_plot_class_init (GogPlot1_5dClass *gog_plot_1_5d_klass) +{ + GObjectClass *gobject_klass = (GObjectClass *) gog_plot_1_5d_klass; + GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_1_5d_klass; + GogPlotClass *plot_klass = (GogPlotClass *) gog_plot_1_5d_klass; + gog_minmax_parent_klass = g_type_class_peek_parent (gog_plot_1_5d_klass); + + gobject_klass->set_property = gog_minmax_plot_set_property; + gobject_klass->get_property = gog_minmax_plot_get_property; + + g_object_class_install_property (gobject_klass, MINMAX_PROP_GAP_PERCENTAGE, + g_param_spec_int ("gap-percentage", "gap percentage", + "The padding around each group as a percentage of their width", + 0, 500, 150, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, MINMAX_PROP_HORIZONTAL, + g_param_spec_boolean ("horizontal", "horizontal", + "horizontal or vertical lines", + FALSE, + G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, MINMAX_PROP_DEFAULT_STYLE_HAS_MARKERS, + g_param_spec_boolean ("default-style-has-markers", NULL, + "Should the default style of a series include markers", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + + gog_object_klass->type_name = gog_minmax_plot_type_name; + gog_object_klass->view_type = gog_minmax_view_get_type (); + gog_object_klass->populate_editor = gog_minmax_plot_populate_editor; + + { + static GogSeriesDimDesc dimensions[] = { + { N_("Labels"), GOG_SERIES_SUGGESTED, TRUE, + GOG_DIM_LABEL, GOG_MS_DIM_CATEGORIES }, + { N_("Min"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_LOW }, + { N_("Max"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_HIGH }, + }; + plot_klass->desc.series.dim = dimensions; + plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); + } + plot_klass->desc.series.style_fields = GOG_STYLE_LINE | GOG_STYLE_MARKER; + plot_klass->axis_get_bounds = gog_minmax_axis_get_bounds; + plot_klass->series_type = gog_minmax_series_get_type (); + + gog_plot_1_5d_klass->swap_x_and_y = gog_minmax_swap_x_and_y; + gog_plot_1_5d_klass->update_stacked_and_percentage = NULL; +} + +static void +gog_minmax_plot_init (GogMinMaxPlot *minmax) +{ + minmax->default_style_has_markers = FALSE; + minmax->gap_percentage = 150; + GOG_PLOT1_5D (minmax)->support_lines = TRUE; +} + +GSF_DYNAMIC_CLASS (GogMinMaxPlot, gog_minmax_plot, + gog_minmax_plot_class_init, gog_minmax_plot_init, + GOG_PLOT1_5D_TYPE) + +/*****************************************************************************/ +typedef GogPlotView GogMinMaxView; +typedef GogPlotViewClass GogMinMaxViewClass; + +static void +gog_minmax_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogMinMaxPlot const *model = GOG_MINMAX_PLOT (view->model); + GogPlot1_5d const *gog_1_5d_model = GOG_PLOT1_5D (view->model); + GogSeries1_5d const *series; + GogAxisMap *x_map, *y_map; + gboolean is_vertical = ! (model->horizontal); + double *max_vals, *min_vals; + double x; + double step, offset; + unsigned i; + unsigned num_elements = gog_1_5d_model->num_elements; + unsigned num_series = gog_1_5d_model->num_series; + GSList *ptr; + unsigned n, tmp; + ArtVpath path[3], *Mpath, *mpath; + GogObjectRole const *role = NULL; + GogSeriesLines *lines; + + if (num_elements <= 0 || num_series <= 0) + return; + + x_map = gog_axis_map_new (GOG_PLOT (model)->axis[0], + view->allocation.x, view->allocation.w); + y_map = gog_axis_map_new (GOG_PLOT (model)->axis[1], view->allocation.y + view->allocation.h, + -view->allocation.h); + + if (!(gog_axis_map_is_valid (x_map) && + gog_axis_map_is_valid (y_map))) { + gog_axis_map_free (x_map); + gog_axis_map_free (y_map); + return; + } + + step = 1. / (num_series + model->gap_percentage / 100.); + offset = - step * (num_series - 1) / 2.; + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[2].code = ART_END; + + for (ptr = gog_1_5d_model->base.series ; ptr != NULL ; ptr = ptr->next) { + series = ptr->data; + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + x = offset; + min_vals = go_data_vector_get_values ( + GO_DATA_VECTOR (series->base.values[1].data)); + n = go_data_vector_get_len ( + GO_DATA_VECTOR (series->base.values[1].data)); + max_vals = go_data_vector_get_values ( + GO_DATA_VECTOR (series->base.values[2].data)); + tmp = go_data_vector_get_len ( + GO_DATA_VECTOR (series->base.values[2].data)); + if (n > tmp) + n = tmp; + Mpath = g_new (ArtVpath, n + 1); + mpath = g_new (ArtVpath, n + 1); + gog_renderer_push_style (view->renderer, GOG_STYLED_OBJECT (series)->style); + + for (i = 0; i < n; i++) { + + if (is_vertical) { + mpath[i].x = Mpath[i].x = path[0].x = path[1].x = gog_axis_map_to_view (x_map, x); + mpath[i].y = path[0].y = gog_axis_map_to_view (y_map, min_vals[i]); + Mpath[i].y = path[1].y = gog_axis_map_to_view (y_map, max_vals[i]); + } else { + mpath[i].y = Mpath[i].y = path[0].y = path[1].y = gog_axis_map_to_view (y_map, x); + mpath[i].x = path[0].x = gog_axis_map_to_view (x_map, min_vals[i]); + Mpath[i].x =path[1].x = gog_axis_map_to_view (x_map, max_vals[i]); + } + gog_renderer_draw_sharp_path (view->renderer, path); + x += 1; + } + if (series->has_lines) { + if (!role) + role = gog_object_find_role_by_name ( + GOG_OBJECT (series), "Lines"); + lines = GOG_SERIES_LINES ( + gog_object_get_child_by_role (GOG_OBJECT (series), role)); + mpath[0].code = Mpath[0].code = ART_MOVETO; + for (i = 1; i < n; i++) + mpath[i].code = Mpath[i].code = ART_LINETO; + mpath[n].code = Mpath[n].code = ART_END; + gog_renderer_push_style (view->renderer, + gog_styled_object_get_style (GOG_STYLED_OBJECT (lines))); + gog_series_lines_render (lines, view->renderer, bbox, mpath, TRUE); + gog_series_lines_render (lines, view->renderer, bbox, Mpath, FALSE); + gog_renderer_pop_style (view->renderer); + } + if (model->default_style_has_markers) + for (i = 0; i < n; i++) { + gog_renderer_draw_marker (view->renderer, mpath[i].x, mpath[i].y); + gog_renderer_draw_marker (view->renderer, Mpath[i].x, Mpath[i].y); + } + gog_renderer_pop_style (view->renderer); + g_free (Mpath); + g_free (mpath); + offset += step; + } + + gog_axis_map_free (x_map); + gog_axis_map_free (y_map); +} + +static gboolean +gog_minmax_view_info_at_point (GogView *view, double x, double y, + GogObject const *cur_selection, + GogObject **obj, char **name) +{ + if (obj != NULL) + *obj = view->model; + if (name != NULL) + *name = g_strdup (gog_object_get_name (GOG_OBJECT (view->model))); + return TRUE; +} + +static void +gog_minmax_view_class_init (GogViewClass *view_klass) +{ + view_klass->render = gog_minmax_view_render; + view_klass->info_at_point = gog_minmax_view_info_at_point; + view_klass->clip = TRUE; +} + +GSF_DYNAMIC_CLASS (GogMinMaxView, gog_minmax_view, + gog_minmax_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) diff --git a/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax.h b/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax.h new file mode 100644 index 0000000000..384e1eebd7 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_barcol/gog-minmax.h @@ -0,0 +1,53 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-minmax.h + * + * Copyright (C) 2005 + * Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_MINMAX_H +#define GOG_MINMAX_H + +#include "gog-1.5d.h" + +G_BEGIN_DECLS + + +typedef struct { + GogPlot1_5d base; + + gboolean horizontal; + int gap_percentage; + gboolean default_style_has_markers; + +} GogMinMaxPlot; +typedef GogPlot1_5dClass GogMinMaxPlotClass; + +#define GOG_MINMAX_PLOT_TYPE (gog_minmax_plot_get_type ()) +#define GOG_MINMAX_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_MINMAX_PLOT_TYPE, GogMinMaxPlot)) +#define GOG_IS_PLOT_MINMAX(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_MINMAX_PLOT_TYPE)) + +GType gog_minmax_plot_get_type (void); +void gog_minmax_plot_register_type (GTypeModule *module); +void gog_minmax_view_register_type (GTypeModule *module); +GType gog_minmax_series_get_type (void); +void gog_minmax_series_register_type (GTypeModule *module); + +G_END_DECLS + +#endif /* GOG_MINMAX_H */ diff --git a/lib/goffice/graph/plugins/plot_barcol/plot-types.xml.in b/lib/goffice-0.0.4/plugins/plot_barcol/plot-types.xml.in similarity index 66% rename from lib/goffice/graph/plugins/plot_barcol/plot-types.xml.in rename to lib/goffice-0.0.4/plugins/plot_barcol/plot-types.xml.in index e9a431fc1e..90616ea721 100644 --- a/lib/goffice/graph/plugins/plot_barcol/plot-types.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_barcol/plot-types.xml.in @@ -1,9 +1,11 @@ - - - - + + + + + + normal FALSE + backplane stacked FALSE + backplane as_percentage FALSE + backplane normal + backplane stacked + backplane as_percentage + backplane normal + backplane stacked + backplane as_percentage + backplane True normal + backplane True stacked 100 + backplane True as_percentage 100 + backplane + + + + + + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + + + + 12 + True + 1 + 3 + False + 6 + 12 + + + + True + _Gap: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0 + 0 + 0 + gap_spinner + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + % + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + Separation between groups as a percentage of bar/col width + True + 10 + 0 + True + GTK_UPDATE_ALWAYS + True + False + 0 0 500 10 10 10 + + + 1 + 2 + 0 + 1 + fill + + + + + + + + diff --git a/lib/goffice-0.0.4/plugins/plot_boxes/gog-boxplot.c b/lib/goffice-0.0.4/plugins/plot_boxes/gog-boxplot.c new file mode 100644 index 0000000000..7b38e41106 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_boxes/gog-boxplot.c @@ -0,0 +1,432 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-boxplot.c + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include "gog-boxplot.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +GOFFICE_PLUGIN_MODULE_HEADER; + +static GogObjectClass *gog_box_plot_parent_klass; + +static GType gog_box_plot_view_get_type (void); + +static void +cb_gap_changed (GtkAdjustment *adj, GObject *boxplot) +{ + g_object_set (boxplot, "gap-percentage", (int)adj->value, NULL); +} + +static gpointer +gog_box_plot_pref (GogObject *obj, + GogDataAllocator *dalloc, GOCmdContext *cc) +{ + GtkWidget *w; + GogBoxPlot *boxplot = GOG_BOX_PLOT (obj); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_boxes")); + char *path = g_build_filename (dir, "gog-boxplot-prefs.glade", NULL); + GladeXML *gui = go_libglade_new (path, "gog_box_plot_prefs", NULL, cc); + + g_free (path); + if (gui == NULL) + return NULL; + + w = glade_xml_get_widget (gui, "gap_spinner"); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), boxplot->gap_percentage); + g_signal_connect (G_OBJECT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w))), + "value_changed", + G_CALLBACK (cb_gap_changed), boxplot); + + w = glade_xml_get_widget (gui, "gog_box_plot_prefs"); + g_object_set_data_full (G_OBJECT (w), + "state", gui, (GDestroyNotify)g_object_unref); + + return w; +} + +static void +gog_box_plot_populate_editor (GogObject *item, + GogEditor *editor, + G_GNUC_UNUSED GogDataAllocator *dalloc, + GOCmdContext *cc) +{ + gog_editor_add_page (editor, gog_box_plot_pref (item, dalloc, cc), _("Properties")); + + (GOG_OBJECT_CLASS(gog_box_plot_parent_klass)->populate_editor) (item, editor, dalloc, cc); +} + +enum { + BOX_PLOT_PROP_0, + BOX_PLOT_PROP_GAP_PERCENTAGE, +}; + +typedef struct { + GogSeries base; + int gap_percentage; + double vals[5]; +} GogBoxPlotSeries; +typedef GogSeriesClass GogBoxPlotSeriesClass; + +#define GOG_BOX_PLOT_SERIES_TYPE (gog_box_plot_series_get_type ()) +#define GOG_BOX_PLOT_SERIES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_BOX_PLOT_SERIES_TYPE, GogBoxPlotSeries)) +#define IS_GOG_BOX_PLOT_SERIES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_BOX_PLOT_SERIES_TYPE)) + +GType gog_box_plot_series_get_type (void); + +static char const * +gog_box_plot_type_name (G_GNUC_UNUSED GogObject const *item) +{ + /* xgettext : the base for how to name box-plot objects + * eg The 2nd box-plot in a chart will be called + * BoxPlot2 */ + return N_("Box-Plot"); +} + +static void +gog_box_plot_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogBoxPlot *boxplot = GOG_BOX_PLOT (obj); + + switch (param_id) { + case BOX_PLOT_PROP_GAP_PERCENTAGE: + boxplot->gap_percentage = g_value_get_int (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } + gog_object_emit_changed (GOG_OBJECT (obj), TRUE); +} + +static void +gog_box_plot_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogBoxPlot *boxplot = GOG_BOX_PLOT (obj); + + switch (param_id) { + case BOX_PLOT_PROP_GAP_PERCENTAGE: + g_value_set_int (value, boxplot->gap_percentage); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static void +gog_box_plot_update (GogObject *obj) +{ + GogBoxPlot *model = GOG_BOX_PLOT (obj); + GogBoxPlotSeries *series; + GSList *ptr; + double min, max; + unsigned num_series = 0; + + min = DBL_MAX; + max = -DBL_MAX; + for (ptr = model->base.series ; ptr != NULL ; ptr = ptr->next) { + series = GOG_BOX_PLOT_SERIES (ptr->data); + if (!gog_series_is_valid (GOG_SERIES (series)) || + !go_data_vector_get_len (GO_DATA_VECTOR (series->base.values[0].data))) + continue; + num_series++; + if (series->vals[0] < min) + min = series->vals[0]; + if (series->vals[4] > max) + max = series->vals[4]; + } + if (min == DBL_MAX) + min = 0.; + if (max == -DBL_MAX) + max = 1.; + if (model->min != min || model->max != max || model->num_series != num_series) { + model->min = min; + model->max = max; + model->num_series = num_series; + gog_axis_bound_changed (model->base.axis[0], GOG_OBJECT (model)); + } + gog_object_emit_changed (GOG_OBJECT (obj), FALSE); +} + +static GOData * +gog_box_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, + GogPlotBoundInfo *bounds) +{ + GogBoxPlot *model = GOG_BOX_PLOT (plot); + + bounds->val.minima = model->min; + bounds->val.maxima = model->max; + bounds->is_discrete = FALSE; + + return NULL; +} + +static void +gog_box_plot_class_init (GogPlotClass *gog_plot_klass) +{ + GObjectClass *gobject_klass = (GObjectClass *) gog_plot_klass; + GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_klass; + GogPlotClass *plot_klass = (GogPlotClass *) gog_plot_klass; + + gog_box_plot_parent_klass = g_type_class_peek_parent (gog_plot_klass); + + gobject_klass->set_property = gog_box_plot_set_property; + gobject_klass->get_property = gog_box_plot_get_property; + g_object_class_install_property (gobject_klass, BOX_PLOT_PROP_GAP_PERCENTAGE, + g_param_spec_int ("gap-percentage", "gap percentage", + "The padding around each group as a percentage of their width", + 0, 500, 150, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + + gog_object_klass->type_name = gog_box_plot_type_name; + gog_object_klass->view_type = gog_box_plot_view_get_type (); + gog_object_klass->update = gog_box_plot_update; + gog_object_klass->populate_editor = gog_box_plot_populate_editor; + + { + static GogSeriesDimDesc dimensions[] = { + { N_("Values"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_VALUES }, + }; + plot_klass->desc.series.dim = dimensions; + plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); + } + plot_klass->desc.num_series_min = 1; + plot_klass->desc.num_series_max = G_MAXINT; + plot_klass->series_type = gog_box_plot_series_get_type (); + plot_klass->axis_set = GOG_AXIS_SET_X; + plot_klass->desc.series.style_fields = GOG_STYLE_LINE | GOG_STYLE_FILL; + plot_klass->axis_get_bounds = gog_box_plot_axis_get_bounds; +} + +static void +gog_box_plot_init (GogBoxPlot *model) +{ + model->gap_percentage = 150; +} + +GSF_DYNAMIC_CLASS (GogBoxPlot, gog_box_plot, + gog_box_plot_class_init, gog_box_plot_init, + GOG_PLOT_TYPE) + +/*****************************************************************************/ +typedef GogPlotView GogBoxPlotView; +typedef GogPlotViewClass GogBoxPlotViewClass; + +static void +gog_box_plot_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogBoxPlot const *model = GOG_BOX_PLOT (view->model); + GogAxisMap *x_map; + GogBoxPlotSeries const *series; + double hrect, hser, y, hbar; + double min, qu1, med, qu3, max; + ArtVpath path[6]; + GogViewAllocation rect; + GSList *ptr; + double line_width; + GogStyle *style; + + x_map = gog_axis_map_new (GOG_PLOT (model)->axis[0], + view->allocation.x, view->allocation.w); + + if (!gog_axis_map_is_valid (x_map)) { + gog_axis_map_free (x_map); + return; + } + + hser = view->allocation.h / model->num_series; + hrect = hser / (1. + model->gap_percentage / 100.); + y = view->allocation.y + view->allocation.h - hser / 2.; + hrect /= 2.; + hbar = hrect / 2.; + path[0].code = ART_MOVETO; + path[1].code = ART_LINETO; + path[3].code = ART_LINETO; + path[4].code = ART_LINETO; + path[5].code = ART_END; + + for (ptr = model->base.series ; ptr != NULL ; ptr = ptr->next) { + series = ptr->data; + if (!gog_series_is_valid (GOG_SERIES (series)) || + !go_data_vector_get_len (GO_DATA_VECTOR (series->base.values[0].data))) + continue; + style = GOG_STYLED_OBJECT (series)->style; + line_width = style->line.width / 2.; + gog_renderer_push_style (view->renderer, style); + min = gog_axis_map_to_view (x_map, series->vals[0]); + qu1 = gog_axis_map_to_view (x_map, series->vals[1]); + med = gog_axis_map_to_view (x_map, series->vals[2]); + qu3 = gog_axis_map_to_view (x_map, series->vals[3]); + max = gog_axis_map_to_view (x_map, series->vals[4]); + rect.x = qu1; + rect.w = qu3 - qu1; + rect.y = y - hrect; + rect.h = 2* hrect; + gog_renderer_draw_sharp_rectangle (view->renderer, &rect); + path[2].code = ART_END; + path[0].y = y + hbar; + path[1].y = y - hbar; + path[0].x = path[1].x = min; + gog_renderer_draw_sharp_path (view->renderer, path); + path[0].x = path[1].x = max; + gog_renderer_draw_sharp_path (view->renderer, path); + path[0].y = path[1].y = y; + path[0].x = qu3; + gog_renderer_draw_sharp_path (view->renderer, path); + path[0].x = min; + path[1].x = qu1; + gog_renderer_draw_sharp_path (view->renderer, path); + path[0].x = path[1].x = med; + path[0].y = y + hrect; + path[1].y = y - hrect; + gog_renderer_draw_sharp_path (view->renderer, path); + path[2].code = ART_LINETO; + path[0].x = path[3].x = path[4].x = qu1; + path[1].x = path[2].x = qu3; + path[0].y = path[1].y = path[4].y = y - hrect; + path[2].y = path[3].y = y + hrect; + gog_renderer_draw_sharp_path (view->renderer, path); + gog_renderer_pop_style (view->renderer); + y -= hser; + } + gog_axis_map_free (x_map); +} + +static void +gog_box_plot_view_class_init (GogViewClass *view_klass) +{ + view_klass->render = gog_box_plot_view_render; + view_klass->clip = TRUE; +} + +GSF_DYNAMIC_CLASS (GogBoxPlotView, gog_box_plot_view, + gog_box_plot_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) + +/*****************************************************************************/ + +static GogObjectClass *gog_box_plot_series_parent_klass; + +static gint +float_compare (const double *a, const double *b) +{ + if (*a < *b) + return -1; + else if (*a == *b) + return 0; + else + return 1; +} + +static void +gog_box_plot_series_update (GogObject *obj) +{ + double *vals = NULL; + int len = 0; + GogBoxPlotSeries *series = GOG_BOX_PLOT_SERIES (obj); + unsigned old_num = series->base.num_elements; + + if (series->base.values[0].data != NULL) { + vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[0].data)); + len = go_data_vector_get_len + (GO_DATA_VECTOR (series->base.values[0].data)); + } + series->base.num_elements = len; + + if (len > 0) { + double *svals = g_new (double, len), x, fpos, residual; + int n, pos; + memcpy (svals, vals, len * sizeof (double)); + qsort (svals, len, sizeof (double), (int (*) (const void *, const void *))&float_compare); + for (n = 0, x = 0.; n < 5; n++, x+= 0.25) { + fpos = (len - 1) * x; + pos = (int) fpos; + residual = fpos - pos; + + if (residual == 0.0 || pos + 1 >= len) + series->vals[n] = svals[pos]; + else + series->vals[n] = (1 - residual) * svals[pos] + residual * svals[pos + 1]; + } + g_free (svals); + } + /* queue plot for redraw */ + gog_object_request_update (GOG_OBJECT (series->base.plot)); + if (old_num != series->base.num_elements) + gog_plot_request_cardinality_update (series->base.plot); + + if (gog_box_plot_series_parent_klass->update) + gog_box_plot_series_parent_klass->update (obj); +} + +static void +gog_box_plot_series_init_style (GogStyledObject *gso, GogStyle *style) +{ + ((GogStyledObjectClass*) gog_box_plot_series_parent_klass)->init_style (gso, style); + + style->outline.dash_type = GO_LINE_NONE; +} + +static void +gog_box_plot_series_class_init (GogObjectClass *obj_klass) +{ + GogStyledObjectClass *gso_klass = (GogStyledObjectClass*) obj_klass; + + gog_box_plot_series_parent_klass = g_type_class_peek_parent (obj_klass); + obj_klass->update = gog_box_plot_series_update; + gso_klass->init_style = gog_box_plot_series_init_style; +} + +GSF_DYNAMIC_CLASS (GogBoxPlotSeries, gog_box_plot_series, + gog_box_plot_series_class_init, NULL, + GOG_SERIES_TYPE) + +/* Plugin initialization */ + +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) +{ + GTypeModule *module = go_plugin_get_type_module (plugin); + gog_box_plot_register_type (module); + gog_box_plot_view_register_type (module); + gog_box_plot_series_register_type (module); +} + +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) +{ +} diff --git a/lib/goffice-0.0.4/plugins/plot_boxes/gog-boxplot.h b/lib/goffice-0.0.4/plugins/plot_boxes/gog-boxplot.h new file mode 100644 index 0000000000..92bbe9edff --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_boxes/gog-boxplot.h @@ -0,0 +1,46 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * go-boxplot.h + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_BOX_PLOT_H +#define GOG_BOX_PLOT_H + +#include + +G_BEGIN_DECLS + +typedef struct { + GogPlot base; + + unsigned num_series; + double min, max; + int gap_percentage; +} GogBoxPlot; +typedef GogPlotClass GogBoxPlotClass; + +#define GOG_BOX_PLOT_TYPE (gog_box_plot_get_type ()) +#define GOG_BOX_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_BOX_PLOT_TYPE, GogBoxPlot)) +#define GOG_IS_BOX_PLOT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_BOX_PLOT_TYPE)) + +GType gog_box_plot_get_type (void); + +G_END_DECLS + +#endif /* GOG_BOX_PLOT_H */ diff --git a/lib/goffice-0.0.4/plugins/plot_boxes/plot-types.xml.in b/lib/goffice-0.0.4/plugins/plot_boxes/plot-types.xml.in new file mode 100644 index 0000000000..84b9d9fb3e --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_boxes/plot-types.xml.in @@ -0,0 +1,11 @@ + + + + + + backplane + + diff --git a/lib/goffice-0.0.4/plugins/plot_boxes/plugin.xml.in b/lib/goffice-0.0.4/plugins/plot_boxes/plugin.xml.in new file mode 100644 index 0000000000..e6864341cf --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_boxes/plugin.xml.in @@ -0,0 +1,23 @@ + + + + <_name>Charting : Box-Plots + <_description>Box-Plots + + + + + + + + <_description>Box-plot plotting engine + + + + plot-types.xml + + <_description>Default surface plot types + + + + diff --git a/lib/goffice/graph/plugins/plot_pie/Makefile.am b/lib/goffice-0.0.4/plugins/plot_pie/Makefile.am similarity index 52% rename from lib/goffice/graph/plugins/plot_pie/Makefile.am rename to lib/goffice-0.0.4/plugins/plot_pie/Makefile.am index 0cebf9305c..a3ff7b9386 100644 --- a/lib/goffice/graph/plugins/plot_pie/Makefile.am +++ b/lib/goffice-0.0.4/plugins/plot_pie/Makefile.am @@ -1,30 +1,29 @@ -goffice_graph_piedir = $(gnumeric_plugindir)/plot_pie +goffice_graph_piedir = $(goffice_plugindir)/plot_pie xmldir = $(goffice_graph_piedir) gladedir = $(goffice_graph_piedir) goffice_graph_pie_LTLIBRARIES = pie.la pie_la_LDFLAGS = -module $(GOFFICE_PLUGIN_FLAGS) +pie_la_LIBADD = $(GOFFICE_PLUGIN_LIBADD) + pie_la_SOURCES = \ gog-pie.c \ gog-pie.h \ gog-pie-prefs.c xml_in_files = plugin.xml.in plot-types.xml.in -xml_DATA = $(xml_in_files:.xml.in=.xml) gog-pie-prefs.glade gog-ring-prefs.glade gog-pie-series.glade +xml_DATA = $(xml_in_files:.xml.in=.xml) @INTLTOOL_XML_RULE@ -glade_DATA = gog-pie-prefs.glade gog-ring-prefs.glade gog-pie-series.glade +dist_glade_DATA = gog-pie-prefs.glade gog-ring-prefs.glade gog-pie-series.glade # do not use the intl-tool stuff to merge the text back # its simpler to just use gettext directly plot-types.xml : plot-types.xml.in cp $< $@ -EXTRA_DIST = $(xml_in_files) $(glade_DATA) +EXTRA_DIST = $(xml_in_files) DISTCLEANFILES = $(xml_in_files:.xml.in=.xml) -# AM_CFLAGS = ${GLIB_CFLAGS} ${XML_CFLAGS} ${GSF_CFLAGS} ${ART_CFLAGS} ${GNOME_CFLAGS} ${GDK_PIXBUF_CLFAGS} ${GLADE_CFLAGS} - -include $(srcdir)/../../../goffice-plugins.mk - +include $(top_srcdir)/lib/goffice-0.0.4/goffice-plugins.mk diff --git a/lib/goffice/graph/plugins/plot_pie/gog-pie-prefs.c b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie-prefs.c similarity index 77% rename from lib/goffice/graph/plugins/plot_pie/gog-pie-prefs.c rename to lib/goffice-0.0.4/plugins/plot_pie/gog-pie-prefs.c index 3fbc52c696..da8a24d440 100644 --- a/lib/goffice/graph/plugins/plot_pie/gog-pie-prefs.c +++ b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie-prefs.c @@ -15,20 +15,19 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "gog-pie.h" -#include -#include -#include +#include +#include #include #include -GtkWidget *gog_pie_series_element_pref (GogPieSeriesElement *element, GnmCmdContext *cc); +GtkWidget *gog_pie_series_element_pref (GogPieSeriesElement *element, GOCmdContext *cc); static void cb_element_separation_changed (GtkAdjustment *adj, GObject *element) @@ -37,13 +36,13 @@ cb_element_separation_changed (GtkAdjustment *adj, GObject *element) } GtkWidget * -gog_pie_series_element_pref (GogPieSeriesElement *element, GnmCmdContext *cc) +gog_pie_series_element_pref (GogPieSeriesElement *element, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_pie")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_pie")); char *path = g_build_filename (dir, "gog-pie-series.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_pie_series_element_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_pie_series_element_prefs", NULL, cc); g_free (path); if (gui == NULL) @@ -63,25 +62,25 @@ gog_pie_series_element_pref (GogPieSeriesElement *element, GnmCmdContext *cc) } /****************************************************************************/ -GtkWidget *gog_pie_plot_pref (GogPiePlot *plot, GnmCmdContext *cc); +GtkWidget *gog_pie_plot_pref (GogPiePlot *plot, GOCmdContext *cc); static void cb_default_separation_changed (GtkAdjustment *adj, GObject *pie) { - g_object_set (pie, "default_separation", adj->value / 100., NULL); + g_object_set (pie, "default-separation", adj->value / 100., NULL); } static void cb_rotation_changed (GtkAdjustment *adj, GObject *pie) { - g_object_set (pie, "initial_angle", adj->value, NULL); + g_object_set (pie, "initial-angle", adj->value, NULL); } static void cb_use_style_toggled (GtkToggleButton *button, GObject *series) { - g_object_set (series, "vary_style_by_element", + g_object_set (series, "vary-style-by-element", gtk_toggle_button_get_active (button), NULL); } @@ -110,13 +109,13 @@ gog_pie_plot_pref_signal_connect (GogPiePlot *pie, GladeXML *gui) } GtkWidget * -gog_pie_plot_pref (GogPiePlot *pie, GnmCmdContext *cc) +gog_pie_plot_pref (GogPiePlot *pie, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_pie")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_pie")); char *path = g_build_filename (dir, "gog-pie-prefs.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_pie_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_pie_prefs", NULL, cc); g_free (path); if (gui == NULL) @@ -133,23 +132,23 @@ gog_pie_plot_pref (GogPiePlot *pie, GnmCmdContext *cc) /****************************************************************************/ -GtkWidget *gog_ring_plot_pref (GogRingPlot *ring, GnmCmdContext *cc); +GtkWidget *gog_ring_plot_pref (GogRingPlot *ring, GOCmdContext *cc); static void cb_center_size_changed (GtkAdjustment *adj, GObject *ring) { - g_object_set (ring, "center_size", adj->value/100., NULL); + g_object_set (ring, "center-size", adj->value/100., NULL); } GtkWidget * -gog_ring_plot_pref (GogRingPlot *ring, GnmCmdContext *cc) +gog_ring_plot_pref (GogRingPlot *ring, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_pie")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_pie")); char *path = g_build_filename (dir, "gog-ring-prefs.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_ring_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_ring_prefs", NULL, cc); g_free (path); if (gui == NULL) @@ -172,7 +171,7 @@ gog_ring_plot_pref (GogRingPlot *ring, GnmCmdContext *cc) /****************************************************************************/ -GtkWidget *gog_pie_series_pref (GogPieSeries *series, GnmCmdContext *cc); +GtkWidget *gog_pie_series_pref (GogPieSeries *series, GOCmdContext *cc); static void cb_separation_changed (GtkAdjustment *adj, GObject *pie) @@ -181,13 +180,13 @@ cb_separation_changed (GtkAdjustment *adj, GObject *pie) } GtkWidget * -gog_pie_series_pref (GogPieSeries *pie, GnmCmdContext *cc) +gog_pie_series_pref (GogPieSeries *pie, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_pie")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_pie")); char *path = g_build_filename (dir, "gog-pie-prefs.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_pie_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_pie_prefs", NULL, cc); g_free (path); if (gui == NULL) diff --git a/lib/goffice/graph/plugins/plot_pie/gog-pie-prefs.glade b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie-prefs.glade similarity index 93% rename from lib/goffice/graph/plugins/plot_pie/gog-pie-prefs.glade rename to lib/goffice-0.0.4/plugins/plot_pie/gog-pie-prefs.glade index 4db3c182fe..a2b9e8eb7f 100644 --- a/lib/goffice/graph/plugins/plot_pie/gog-pie-prefs.glade +++ b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie-prefs.glade @@ -2,6 +2,7 @@ + window1 GTK_WINDOW_TOPLEVEL @@ -9,16 +10,21 @@ False True False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST - 5 + 12 True 3 3 False - 5 - 5 + 6 + 12 @@ -76,6 +82,7 @@ _Vary colors by slice True GTK_RELIEF_NORMAL + True False False True diff --git a/lib/goffice/graph/plugins/plot_pie/gog-pie-series.glade b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie-series.glade similarity index 88% rename from lib/goffice/graph/plugins/plot_pie/gog-pie-series.glade rename to lib/goffice-0.0.4/plugins/plot_pie/gog-pie-series.glade index 8616f7545a..e84a84dcc5 100644 --- a/lib/goffice/graph/plugins/plot_pie/gog-pie-series.glade +++ b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie-series.glade @@ -2,7 +2,6 @@ - window1 @@ -18,7 +17,14 @@ GDK_GRAVITY_NORTH_WEST - + + 12 + True + False + 6 + + + True 1 3 @@ -95,6 +101,13 @@ 1 fill + + + + + 0 + False + False diff --git a/lib/goffice/graph/plugins/plot_pie/gog-pie.c b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie.c similarity index 88% rename from lib/goffice/graph/plugins/plot_pie/gog-pie.c rename to lib/goffice-0.0.4/plugins/plot_pie/gog-pie.c index a7b68bbb0f..ffc5d867f9 100644 --- a/lib/goffice/graph/plugins/plot_pie/gog-pie.c +++ b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -25,12 +25,10 @@ #include #include #include -#include +#include #include #include - -#include -#include +#include #include #include @@ -77,12 +75,15 @@ gog_pie_series_element_get_property (GObject *obj, guint param_id, } } -extern gpointer gog_pie_series_element_pref (GogPieSeriesElement *element, GnmCmdContext *cc); +extern gpointer gog_pie_series_element_pref (GogPieSeriesElement *element, GOCmdContext *cc); static gpointer -gog_pie_series_element_editor (GogObject *gobj, - GnmCmdContext *cc) +gog_pie_series_element_populate_editor (GogObject *gobj, + GogEditor *editor, + GOCmdContext *cc) { - return gog_pie_series_element_pref (GOG_PIE_SERIES_ELEMENT (gobj), cc); + GtkWidget *widget = gog_pie_series_element_pref (GOG_PIE_SERIES_ELEMENT (gobj), cc); + gog_editor_add_page (editor, widget, _("Settings")); + return widget; } static void @@ -94,7 +95,7 @@ gog_pie_series_element_class_init (GogPieSeriesElementClass *klass) gobject_klass->get_property = gog_pie_series_element_get_property; ppe_parent_klass = g_type_class_peek_parent (klass); - klass->gse_editor = gog_pie_series_element_editor; + klass->gse_populate_editor = gog_pie_series_element_populate_editor; g_object_class_install_property (gobject_klass, ELEMENT_SEPARATION, g_param_spec_float ("separation", "separation", @@ -103,9 +104,9 @@ gog_pie_series_element_class_init (GogPieSeriesElementClass *klass) G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); } -GSF_CLASS (GogPieSeriesElement, gog_pie_series_element, - gog_pie_series_element_class_init, NULL /*gog_pie_series_element_init*/, - GOG_SERIES_ELEMENT_TYPE) +GSF_DYNAMIC_CLASS (GogPieSeriesElement, gog_pie_series_element, + gog_pie_series_element_class_init, NULL /*gog_pie_series_element_init*/, + GOG_SERIES_ELEMENT_TYPE) /*****************************************************************************/ @@ -120,7 +121,7 @@ enum { PLOT_PROP_IN_3D }; -GNUMERIC_MODULE_PLUGIN_INFO_DECL; +GOFFICE_PLUGIN_MODULE_HEADER; static GObjectClass *pie_parent_klass; static GType gog_pie_view_get_type (void); @@ -180,13 +181,16 @@ gog_pie_plot_type_name (G_GNUC_UNUSED GogObject const *item) return N_("PlotPie"); } -extern gpointer gog_pie_plot_pref (GogPiePlot *pie, GnmCmdContext *cc); -static gpointer -gog_pie_plot_editor (GogObject *item, +extern gpointer gog_pie_plot_pref (GogPiePlot *pie, GOCmdContext *cc); +static void +gog_pie_plot_populate_editor (GogObject *item, + GogEditor *editor, G_GNUC_UNUSED GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { - return gog_pie_plot_pref (GOG_PIE_PLOT (item), cc); + gog_editor_add_page (editor, + gog_pie_plot_pref (GOG_PIE_PLOT (item), cc), + _("Properties")); } static void @@ -207,21 +211,21 @@ gog_pie_plot_class_init (GogPlotClass *plot_klass) gog_klass->update = gog_pie_plot_update; gog_klass->type_name = gog_pie_plot_type_name; - gog_klass->editor = gog_pie_plot_editor; + gog_klass->populate_editor = gog_pie_plot_populate_editor; gog_klass->view_type = gog_pie_view_get_type (); g_object_class_install_property (gobject_klass, PLOT_PROP_INITIAL_ANGLE, - g_param_spec_float ("initial_angle", "initial_angle", + g_param_spec_float ("initial-angle", "initial-angle", "Degrees clockwise from 12 O'Clock.", 0, G_MAXFLOAT, 0., G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, PLOT_PROP_DEFAULT_SEPARATION, - g_param_spec_float ("default_separation", "default_separation", + g_param_spec_float ("default-separation", "default-separation", "Default amount a slice is extended as a percentage of the radius", 0, G_MAXFLOAT, 0., G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, PLOT_PROP_IN_3D, - g_param_spec_boolean ("in_3d", "in_3d", + g_param_spec_boolean ("in-3d", "in-3d", "Draw 3d wedges", FALSE, G_PARAM_READWRITE)); @@ -248,9 +252,9 @@ gog_pie_plot_init (GogPiePlot *pie) pie->base.vary_style_by_element = TRUE; } -GSF_CLASS (GogPiePlot, gog_pie_plot, - gog_pie_plot_class_init, gog_pie_plot_init, - GOG_PLOT_TYPE) +GSF_DYNAMIC_CLASS (GogPiePlot, gog_pie_plot, + gog_pie_plot_class_init, gog_pie_plot_init, + GOG_PLOT_TYPE) /*****************************************************************************/ @@ -303,13 +307,16 @@ gog_ring_plot_type_name (G_GNUC_UNUSED GogObject const *item) return N_("PlotRing"); } -extern gpointer gog_ring_plot_pref (GogRingPlot *ring, GnmCmdContext *cc); -static gpointer -gog_ring_plot_editor (GogObject *item, +extern gpointer gog_ring_plot_pref (GogRingPlot *ring, GOCmdContext *cc); +static void +gog_ring_plot_populate_editor (GogObject *item, + GogEditor *editor, G_GNUC_UNUSED GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { - return gog_ring_plot_pref (GOG_RING_PLOT (item), cc); + gog_editor_add_page (editor, + gog_ring_plot_pref (GOG_RING_PLOT (item), cc), + _("Properties")); } static void @@ -324,10 +331,10 @@ gog_ring_plot_class_init (GogPiePlotClass *pie_plot_klass) gobject_klass->get_property = gog_ring_plot_get_property; gog_klass->type_name = gog_ring_plot_type_name; - gog_klass->editor = gog_ring_plot_editor; + gog_klass->populate_editor = gog_ring_plot_populate_editor; g_object_class_install_property (gobject_klass, RING_PLOT_PROP_CENTER_SIZE, - g_param_spec_float ("center_size", "center_size", + g_param_spec_float ("center-size", "center-size", "Size of the center hole as a percentage of the radius", 0, 100., 0., G_PARAM_READWRITE)); @@ -343,9 +350,9 @@ gog_ring_plot_init (GogRingPlot *ring) ring->center_size = 0.5; } -GSF_CLASS (GogRingPlot, gog_ring_plot, - gog_ring_plot_class_init, gog_ring_plot_init, - GOG_PIE_PLOT_TYPE) +GSF_DYNAMIC_CLASS (GogRingPlot, gog_ring_plot, + gog_ring_plot_class_init, gog_ring_plot_init, + GOG_PIE_PLOT_TYPE) /*****************************************************************************/ typedef GogPlotView GogPieView; @@ -514,7 +521,7 @@ gog_pie_view_render (GogView *view, GogViewAllocation const *bbox) } gog_renderer_draw_polygon (view->renderer, path, - r * len < 5 /* drop outline for thin segments */, NULL); + r * len < 5 /* drop outline for thin segments */); if (gpse != NULL) gog_renderer_pop_style (view->renderer); @@ -604,9 +611,9 @@ gog_pie_view_class_init (GogViewClass *view_klass) view_klass->info_at_point = gog_pie_view_info_at_point; } -static GSF_CLASS (GogPieView, gog_pie_view, - gog_pie_view_class_init, NULL, - GOG_PLOT_VIEW_TYPE) +GSF_DYNAMIC_CLASS (GogPieView, gog_pie_view, + gog_pie_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) /*****************************************************************************/ @@ -700,7 +707,7 @@ gog_pie_series_class_init (GObjectClass *gobject_klass) gobject_klass->get_property = gog_pie_series_get_property; g_object_class_install_property (gobject_klass, SERIES_PROP_INITIAL_ANGLE, - g_param_spec_float ("initial_angle", "initial_angle", + g_param_spec_float ("initial-angle", "initial-angle", "Degrees clockwise from 12 O'Clock.", 0, G_MAXFLOAT, 0., G_PARAM_READWRITE)); @@ -711,19 +718,22 @@ gog_pie_series_class_init (GObjectClass *gobject_klass) G_PARAM_READWRITE)); } -GSF_CLASS (GogPieSeries, gog_pie_series, +GSF_DYNAMIC_CLASS (GogPieSeries, gog_pie_series, gog_pie_series_class_init, NULL, GOG_SERIES_TYPE) -void -plugin_init (void) +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) { - gog_pie_series_element_get_type (); - gog_pie_plot_get_type (); - gog_ring_plot_get_type (); + GTypeModule *module = go_plugin_get_type_module (plugin); + gog_pie_series_element_register_type (module); + gog_pie_plot_register_type (module); + gog_pie_view_register_type (module); + gog_pie_series_register_type (module); + gog_ring_plot_register_type (module); } -void -plugin_cleanup (void) +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) { } diff --git a/lib/goffice/graph/plugins/plot_pie/gog-pie.h b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie.h similarity index 97% rename from lib/goffice/graph/plugins/plot_pie/gog-pie.h rename to lib/goffice-0.0.4/plugins/plot_pie/gog-pie.h index cf6ca934c0..7ce06f9792 100644 --- a/lib/goffice/graph/plugins/plot_pie/gog-pie.h +++ b/lib/goffice-0.0.4/plugins/plot_pie/gog-pie.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ diff --git a/lib/goffice/graph/plugins/plot_pie/gog-ring-prefs.glade b/lib/goffice-0.0.4/plugins/plot_pie/gog-ring-prefs.glade similarity index 99% rename from lib/goffice/graph/plugins/plot_pie/gog-ring-prefs.glade rename to lib/goffice-0.0.4/plugins/plot_pie/gog-ring-prefs.glade index ea07444283..7e8ee0c0f4 100644 --- a/lib/goffice/graph/plugins/plot_pie/gog-ring-prefs.glade +++ b/lib/goffice-0.0.4/plugins/plot_pie/gog-ring-prefs.glade @@ -2,7 +2,6 @@ - window1 diff --git a/lib/goffice/graph/plugins/plot_pie/plot-types.xml.in b/lib/goffice-0.0.4/plugins/plot_pie/plot-types.xml.in similarity index 93% rename from lib/goffice/graph/plugins/plot_pie/plot-types.xml.in rename to lib/goffice-0.0.4/plugins/plot_pie/plot-types.xml.in index adf10ad2d1..e964d0532f 100644 --- a/lib/goffice/graph/plugins/plot_pie/plot-types.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_pie/plot-types.xml.in @@ -1,7 +1,7 @@ - - + + +#include "gog-radar.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +typedef struct { + GogPlotClass base; +} GogRTPlotClass; + +enum { + PLOT_PROP_0, + PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS +}; + +GOFFICE_PLUGIN_MODULE_HEADER; + +typedef struct { + GogSeries base; +} GogRTSeries; +typedef GogSeriesClass GogRTSeriesClass; + +#define GOG_RT_SERIES_TYPE (gog_rt_series_get_type ()) +#define GOG_RT_SERIES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RT_SERIES_TYPE, GogRTSeries)) +#define GOG_IS_RT_SERIES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_RT_SERIES_TYPE)) + +static GType gog_rt_series_get_type (void); +static GType gog_rt_view_get_type (void); + +/*----------------------------------------------------------------------------- + * + * GogRTPlot + * + *----------------------------------------------------------------------------- + */ + +/* + * Accessor for setting GOGRTPlot member variables. + * + * \param obj The rt plot as a GObject. Must not be NULL. + */ +static void +gog_rt_plot_set_property (GObject *obj, guint param_id, + GValue const *value, GParamSpec *pspec) +{ + GogRTPlot *rt = GOG_RT_PLOT (obj); + + switch (param_id) { + case PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS: + rt->default_style_has_markers = g_value_get_boolean (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + return; /* NOTE : RETURN */ + } + gog_object_emit_changed (GOG_OBJECT (obj), TRUE); +} + +/* + * Accessor for getting GOGRTPlot member variables. + */ +static void +gog_rt_plot_get_property (GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) +{ + GogRTPlot *rt = GOG_RT_PLOT (obj); + + switch (param_id) { + case PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS: + g_value_set_boolean (value, rt->default_style_has_markers); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); + break; + } +} + +static void +gog_rt_plot_update (GogObject *obj) +{ + GogRTPlot * model = GOG_RT_PLOT(obj); + GogRTSeries const *series; + unsigned num_elements = 0; + double val_min, val_max, tmp_min, tmp_max; + GSList *ptr; + + val_min = DBL_MAX; + val_max = -DBL_MAX; + for (ptr = model->base.series; ptr != NULL; ptr = ptr->next) { + series = ptr->data; + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + + if (num_elements < series->base.num_elements) + num_elements = series->base.num_elements; + go_data_vector_get_minmax (GO_DATA_VECTOR ( + series->base.values[1].data), &tmp_min, &tmp_max); + if (val_min > tmp_min) val_min = tmp_min; + if (val_max < tmp_max) val_max = tmp_max; + } + model->num_elements = num_elements; + + if (model->r.minima != val_min || model->r.maxima != val_max) { + model->r.minima = val_min; + model->r.maxima = val_max; + gog_axis_bound_changed (model->base.axis [GOG_AXIS_RADIAL], GOG_OBJECT (model)); + } + + model->t.minima = 1; + model->t.maxima = num_elements; + + gog_object_emit_changed (GOG_OBJECT (obj), FALSE); +} + +static void +gog_rt_plot_guru_helper (GogPlot *plot, char const *hint) +{ + if (strcmp (hint, "circular-no-line") == 0) { + GogAxis *axis = gog_plot_get_axis (plot, GOG_AXIS_CIRCULAR); + GogStyle *style; + + g_return_if_fail (GOG_AXIS (axis) != NULL); + + style = gog_styled_object_get_style (GOG_STYLED_OBJECT (axis)); + style->line.dash_type = GO_LINE_NONE; + style->line.auto_dash = FALSE; + }; +} + +static void +gog_rt_plot_class_init (GogPlotClass *gog_plot_klass) +{ + GObjectClass *gobject_klass = (GObjectClass *) gog_plot_klass; + GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_klass; + + /* Override methods of GObject */ + gobject_klass->set_property = gog_rt_plot_set_property; + gobject_klass->get_property = gog_rt_plot_get_property; + + /* Fill in GOGObject superclass values */ + gog_object_klass->update = gog_rt_plot_update; + gog_object_klass->view_type = gog_rt_view_get_type (); + + g_object_class_install_property (gobject_klass, + PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS, + g_param_spec_boolean ("default-style-has-markers", NULL, + "Should the default style of a series include markers", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + + /* Fill in GogPlotClass methods */ + gog_plot_klass->desc.num_series_min = 1; + gog_plot_klass->desc.num_series_max = G_MAXINT; + gog_plot_klass->series_type = gog_rt_series_get_type(); + + gog_plot_klass->axis_set = GOG_AXIS_SET_RADAR; + gog_plot_klass->guru_helper = gog_rt_plot_guru_helper; +} + +static void +gog_rt_plot_init (GogRTPlot *rt) +{ + rt->base.vary_style_by_element = FALSE; + rt->default_style_has_markers = FALSE; + rt->num_elements = 0; +} + +GSF_DYNAMIC_CLASS (GogRTPlot, gog_rt_plot, + gog_rt_plot_class_init, gog_rt_plot_init, + GOG_PLOT_TYPE) + +/*****************************************************************************/ + +typedef GogRTPlotClass GogRadarPlotClass; + +static char const * +gog_radar_plot_type_name (G_GNUC_UNUSED GogObject const *item) +{ + /* xgettext : the base for how to name rt plot objects + * eg The 2nd rt plot in a chart will be called + * PlotRT2 */ + return N_("PlotRadar"); +} + +static GOData * +gog_radar_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, + GogPlotBoundInfo * bounds) +{ + GSList *ptr; + GogRTPlot *rt = GOG_RT_PLOT (plot); + + switch (axis) { + case GOG_AXIS_CIRCULAR: + bounds->val.minima = rt->t.minima; + bounds->val.maxima = rt->t.maxima; + bounds->logical.minima = 0.; + bounds->logical.maxima = go_nan; + bounds->is_discrete = TRUE; + bounds->center_on_ticks = TRUE; + + for (ptr = plot->series; ptr != NULL ; ptr = ptr->next) + if (gog_series_is_valid (GOG_SERIES (ptr->data))) + return GOG_SERIES (ptr->data)->values[0].data; + break; + case GOG_AXIS_RADIAL: + bounds->val.minima = rt->r.minima; + bounds->val.maxima = rt->r.maxima; + bounds->logical.maxima = bounds->logical.minima = go_nan; + bounds->is_discrete = FALSE; + break; + default: + g_warning("[GogRadarPlot::axis_set_bounds] bad axis (%i)", axis); + break; + } + + return NULL; +} + +static void +gog_radar_plot_class_init (GogPlotClass *gog_plot_klass) +{ + GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_klass; + + /* Fill in GOGObject superclass values */ + gog_object_klass->type_name = gog_radar_plot_type_name; + + { + static GogSeriesDimDesc dimensions[] = { + { N_("Labels"), GOG_SERIES_SUGGESTED, TRUE, + GOG_DIM_LABEL, GOG_MS_DIM_CATEGORIES }, + { N_("Values"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_VALUES } + }; + gog_plot_klass->desc.series.dim = dimensions; + gog_plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); + gog_plot_klass->desc.series.style_fields = GOG_STYLE_LINE | GOG_STYLE_MARKER; + } + + gog_plot_klass->axis_get_bounds = gog_radar_plot_axis_get_bounds; +} + +GSF_DYNAMIC_CLASS (GogRadarPlot, gog_radar_plot, + gog_radar_plot_class_init, NULL, + GOG_RT_PLOT_TYPE) + +/*****************************************************************************/ + +#define GOG_RADAR_AREA_PLOT_TYPE (gog_radar_area_plot_get_type ()) +#define GOG_RADAR_AREA_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RADAR_AREA_PLOT_TYPE, GogRadarAreaPlot)) +#define GOG_IS_PLOT_RADAR_AREA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_RADAR_AREA_PLOT_TYPE)) + +typedef GogRadarPlot GogRadarAreaPlot; +typedef GogRadarPlotClass GogRadarAreaPlotClass; + +GType gog_radar_area_plot_get_type (void); + +static char const * +gog_radar_area_plot_type_name (G_GNUC_UNUSED GogObject const *item) +{ + /* xgettext : the base for how to name bar/col plot objects + * eg The 2nd line plot in a chart will be called + * PlotRadarArea2 + */ + return N_("PlotRadarArea"); +} +static void +gog_radar_area_plot_class_init (GogObjectClass *gog_klass) +{ + GogPlotClass *plot_klass = (GogPlotClass *) gog_klass; + + plot_klass->desc.series.style_fields = GOG_STYLE_OUTLINE | GOG_STYLE_FILL; + + gog_klass->type_name = gog_radar_area_plot_type_name; +} + +static void +gog_radar_area_plot_init (GogPlot *plot) +{ + plot->render_before_axes = TRUE; +} + +GSF_DYNAMIC_CLASS (GogRadarAreaPlot, gog_radar_area_plot, + gog_radar_area_plot_class_init, gog_radar_area_plot_init, + GOG_RADAR_PLOT_TYPE) + +/*****************************************************************************/ + +typedef GogRTPlotClass GogPolarPlotClass; + +static char const * +gog_polar_plot_type_name (G_GNUC_UNUSED GogObject const *item) +{ + /* xgettext : the base for how to name rt plot objects + * eg The 2nd rt plot in a chart will be called + * PlotPolar2 */ + return N_("PlotPolar"); +} + +static GOData * +gog_polar_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, + GogPlotBoundInfo * bounds) +{ + GogRTPlot *rt = GOG_RT_PLOT (plot); + + switch (axis) { + case GOG_AXIS_CIRCULAR: + bounds->val.minima = bounds->logical.minima= 0.; + bounds->val.maxima = bounds->logical.maxima= 360.0; + bounds->is_discrete = FALSE; + break; + case GOG_AXIS_RADIAL: + bounds->val.minima = bounds->logical.minima = 0.; + bounds->val.maxima = rt->r.maxima; + bounds->logical.maxima = go_nan; + bounds->is_discrete = FALSE; + break; + default: + g_warning("[GogPolarPlot::axis_set_bounds] bad axis (%i)", axis); + break; + } + + return NULL; +} + +static void +gog_polar_plot_class_init (GogPlotClass *gog_plot_klass) +{ + GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_klass; + + /* Fill in GOGObject superclass values */ + gog_object_klass->type_name = gog_polar_plot_type_name; + + { + static GogSeriesDimDesc dimensions[] = { + { N_("Angle"), GOG_SERIES_SUGGESTED, FALSE, + GOG_DIM_INDEX, GOG_MS_DIM_CATEGORIES }, + { N_("Magnitude"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_VALUES } + }; + gog_plot_klass->desc.series.dim = dimensions; + gog_plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); + gog_plot_klass->desc.series.style_fields = GOG_STYLE_LINE | GOG_STYLE_MARKER; + } + + gog_plot_klass->axis_get_bounds = gog_polar_plot_axis_get_bounds; +} + +GSF_DYNAMIC_CLASS (GogPolarPlot, gog_polar_plot, + gog_polar_plot_class_init, NULL, + GOG_RT_PLOT_TYPE) + +/*****************************************************************************/ + +typedef GogPlotView GogRTView; +typedef GogPlotViewClass GogRTViewClass; + +static double +//double +fmin (double a, double b) +{ + return (a < b) ? a : b; +} + +static void +gog_rt_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GogRTPlot const *model = GOG_RT_PLOT (view->model); + GogAxis *r_axis, *c_axis; + GogChart *chart = GOG_CHART (view->model->parent); + GogAxisMap *r_map, *c_map; + GogChartMap *chart_map; + GogChartMapPolarData *parms; + GogViewAllocation const *area; + GSList *ptr; + ArtVpath *path, *clip_path; + ArtBpath *bpath; + double th0, theta_min, theta_max, theta; + double rho_min, rho_max, rho; + gboolean const is_area = GOG_IS_PLOT_RADAR_AREA (model); + gboolean const is_polar = GOG_IS_PLOT_POLAR (model); + + r_axis = GOG_PLOT (model)->axis[GOG_AXIS_RADIAL]; + c_axis = GOG_PLOT (model)->axis[GOG_AXIS_CIRCULAR]; + g_return_if_fail (r_axis != NULL && c_axis != NULL); + + area = gog_chart_view_get_plot_area (view->parent); + chart_map = gog_chart_map_new (chart, area, c_axis, r_axis, NULL, FALSE); + if (!gog_chart_map_is_valid (chart_map)) { + gog_chart_map_free (chart_map); + return; + } + c_map = gog_chart_map_get_axis_map (chart_map, 0); + r_map = gog_chart_map_get_axis_map (chart_map, 1); + parms = gog_chart_map_get_polar_parms (chart_map); + + gog_axis_map_get_bounds (c_map, &theta_min, &theta_max); + th0 = theta_min; + gog_axis_map_get_bounds (r_map, &rho_min, &rho_max); + /* convert theta value to radians */ + theta_min = gog_axis_map_to_view (c_map, theta_min); + theta_max = gog_axis_map_to_view (c_map, theta_max); + if (theta_min > theta_max) { + /* angles may be inverted */ + theta = theta_min; + theta_min = theta_max; + theta_max = theta; + } + + path = g_alloca ((model->num_elements + 2) * sizeof (ArtVpath)); + for (ptr = model->base.series; ptr != NULL; ptr = ptr->next) { + + GogRTSeries *series = GOG_RT_SERIES (ptr->data); + GogStyle *style; + gboolean closed_shape; + unsigned count; + double *r_vals, *c_vals = NULL; + + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + + style = GOG_STYLED_OBJECT (series)->style; + + gog_renderer_push_style (view->renderer, style); + + closed_shape = (series->base.num_elements == model->num_elements); + r_vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[1].data)); + if (is_polar) + c_vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[0].data)); + for (count = 0; count < series->base.num_elements; count++) { + + if (!gog_axis_map_finite (r_map, r_vals [count])) { + closed_shape = FALSE; + continue; + } + + path[count].code = ((count != 0 && !isnan (r_vals[count-1])) + ? ART_LINETO : ART_MOVETO); + + rho = (!is_polar || (go_add_epsilon (r_vals[count] - rho_min) >= 0.0)) ? + r_vals[count] : rho_min; + gog_chart_map_2D_to_view (chart_map, + is_polar ? c_vals[count] : count + th0, rho, + &path[count].x, &path[count].y); + + if (is_polar) theta = gog_axis_map_to_view (c_map, c_vals[count]); + + if ( !is_polar || + (go_add_epsilon (r_vals[count] - rho_min) >= 0.0 && + go_add_epsilon (rho_max - r_vals[count]) >= 0.0 && + go_add_epsilon ((theta_max - theta_min) - fmod (theta_max - theta, 2 * M_PI)) >= 0.0 && + go_add_epsilon ((theta_max - theta_min) - fmod (theta - theta_min, 2 * M_PI)) >= 0.0)) + gog_renderer_draw_marker (view->renderer, path[count].x, path[count].y); + } + + if (!is_polar && series->base.num_elements == model->num_elements + && gog_axis_map_finite (r_map, r_vals[count-1])) { + path[count].code = ART_LINETO; + path[count].x = path[0].x; + path[count].y = path[0].y; + count++; + } + path[count].code = ART_END; + + if (is_polar) { + bpath = gog_renderer_get_ring_wedge_bpath (parms->cx, parms->cy, parms->rx, parms->ry, + 0.0, 0.0, -parms->th0, -parms->th1); + clip_path = art_bez_path_to_vec (bpath, .1); + g_free (bpath); + gog_renderer_push_clip (view->renderer, clip_path); + } + + if (closed_shape && is_area) { + gog_renderer_draw_polygon (view->renderer, path, FALSE); + } else + gog_renderer_draw_path (view->renderer, path); + + if (is_polar) + gog_renderer_pop_clip (view->renderer); + + gog_renderer_pop_style (view->renderer); + } + gog_chart_map_free (chart_map); +} + +static gboolean +gog_rt_view_info_at_point (GogView *view, double x, double y, + GogObject const *cur_selection, + GogObject **obj, char **name) +{ + double radius = fmin (view->allocation.h, view->allocation.w)/2.0; + + x -= view->allocation.x + view->allocation.w/2.; + y -= view->allocation.y + view->allocation.h/2.; + if ((x*x + y*y) > (radius*radius)) + return FALSE; + + return TRUE; +} + +static void +gog_rt_view_class_init (GogViewClass *view_klass) +{ + view_klass->render = gog_rt_view_render; + view_klass->info_at_point = gog_rt_view_info_at_point; + view_klass->clip = TRUE; +} + +GSF_DYNAMIC_CLASS (GogRTView, gog_rt_view, + gog_rt_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) + +/*****************************************************************************/ + +static GogStyledObjectClass *series_parent_klass; + +static void +gog_rt_series_update (GogObject *obj) +{ + GogRTSeries *series = GOG_RT_SERIES (obj); + unsigned old_num = series->base.num_elements; + double *vals; + unsigned len = 0; + + if (series->base.values[1].data != NULL) { + vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[1].data)); + len = go_data_vector_get_len ( + GO_DATA_VECTOR (series->base.values[1].data)); + } + series->base.num_elements = len; + + /* queue plot and axis for redraw */ + gog_object_request_update (GOG_OBJECT (series->base.plot)); + if (old_num != len) + gog_object_request_update (GOG_OBJECT (series->base.plot->axis[GOG_AXIS_CIRCULAR])); + + if (old_num != series->base.num_elements) + gog_plot_request_cardinality_update (series->base.plot); + + if (((GogObjectClass *)series_parent_klass)->update) + ((GogObjectClass *)series_parent_klass)->update(obj); +} + +static void +gog_rt_series_init_style (GogStyledObject *gso, GogStyle *style) +{ + GogSeries *series = GOG_SERIES (gso); + GogRTPlot const *plot; + + series_parent_klass->init_style (gso, style); + if (series->plot == NULL) + return; + + plot = GOG_RT_PLOT (series->plot); + + if (!plot->default_style_has_markers && + style->marker.auto_shape) + go_marker_set_shape (style->marker.mark, GO_MARKER_NONE); +} + +static void +gog_rt_series_class_init (GogStyledObjectClass *gso_klass) +{ + GogObjectClass * obj_klass = (GogObjectClass *) gso_klass; + + series_parent_klass = g_type_class_peek_parent (gso_klass); + gso_klass->init_style = gog_rt_series_init_style; + obj_klass->update = gog_rt_series_update; +} + +GSF_DYNAMIC_CLASS (GogRTSeries, gog_rt_series, + gog_rt_series_class_init, NULL, + GOG_SERIES_TYPE) + +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) +{ + GTypeModule *module = go_plugin_get_type_module (plugin); + gog_rt_plot_register_type (module); + gog_radar_plot_register_type (module); + gog_radar_area_plot_register_type (module); + gog_polar_plot_register_type (module); + gog_rt_view_register_type (module); + gog_rt_series_register_type (module); +} + +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) +{ +} diff --git a/lib/goffice/graph/plugins/plot_radar/gog-radar.h b/lib/goffice-0.0.4/plugins/plot_radar/gog-radar.h similarity index 66% rename from lib/goffice/graph/plugins/plot_radar/gog-radar.h rename to lib/goffice-0.0.4/plugins/plot_radar/gog-radar.h index aedf7ef9d2..cf35f2747c 100644 --- a/lib/goffice/graph/plugins/plot_radar/gog-radar.h +++ b/lib/goffice-0.0.4/plugins/plot_radar/gog-radar.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -37,8 +37,20 @@ typedef struct { GogPlot base; gboolean default_style_has_markers; unsigned num_elements; - double minima, maxima; -} GogRadarPlot; + struct { + double minima, maxima; + } r, t; +} GogRTPlot; + +typedef GogRTPlot GogRadarPlot; + +typedef GogRTPlot GogPolarPlot; + +#define GOG_RT_PLOT_TYPE (gog_rt_plot_get_type ()) +#define GOG_RT_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RT_PLOT_TYPE, GogRTPlot)) +#define GOG_IS_PLOT_RT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_RT_PLOT_TYPE)) + +GType gog_rt_plot_get_type (void); #define GOG_RADAR_PLOT_TYPE (gog_radar_plot_get_type ()) #define GOG_RADAR_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RADAR_PLOT_TYPE, GogRadarPlot)) @@ -46,6 +58,12 @@ typedef struct { GType gog_radar_plot_get_type (void); +#define GOG_POLAR_PLOT_TYPE (gog_polar_plot_get_type ()) +#define GOG_POLAR_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_POLAR_PLOT_TYPE, GogPolarPlot)) +#define GOG_IS_PLOT_POLAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_POLAR_PLOT_TYPE)) + +GType gog_polar_plot_get_type (void); + G_END_DECLS #endif /* GOG_RADAR_H */ diff --git a/lib/goffice/graph/plugins/plot_radar/plot-types.xml.in b/lib/goffice-0.0.4/plugins/plot_radar/plot-types.xml.in similarity index 55% rename from lib/goffice/graph/plugins/plot_radar/plot-types.xml.in rename to lib/goffice-0.0.4/plugins/plot_radar/plot-types.xml.in index 818c223f7c..db25d5500d 100644 --- a/lib/goffice/graph/plugins/plot_radar/plot-types.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_radar/plot-types.xml.in @@ -1,22 +1,32 @@ - + + + circular-no-line + circular-no-line True - True + circular-no-line + + + + major-grid;backplane diff --git a/lib/goffice/graph/plugins/plot_radar/plugin.xml.in b/lib/goffice-0.0.4/plugins/plot_radar/plugin.xml.in similarity index 74% rename from lib/goffice/graph/plugins/plot_radar/plugin.xml.in rename to lib/goffice-0.0.4/plugins/plot_radar/plugin.xml.in index b93ab61a57..4bd3d7e947 100644 --- a/lib/goffice/graph/plugins/plot_radar/plugin.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_radar/plugin.xml.in @@ -1,8 +1,8 @@ - <_name>Charting : Radial plots - <_description>Radial/Radar plots + <_name>Charting : Polar/Radar + <_description>Polar and Radar plots @@ -18,6 +18,11 @@ <_description>Radar Area plotting engine + + + <_description>Polar plotting engine + + plot-types.xml diff --git a/lib/goffice/graph/plugins/plot_surface/Makefile.am b/lib/goffice-0.0.4/plugins/plot_surface/Makefile.am similarity index 67% rename from lib/goffice/graph/plugins/plot_surface/Makefile.am rename to lib/goffice-0.0.4/plugins/plot_surface/Makefile.am index 1cc6c83db3..3096914694 100644 --- a/lib/goffice/graph/plugins/plot_surface/Makefile.am +++ b/lib/goffice-0.0.4/plugins/plot_surface/Makefile.am @@ -1,12 +1,16 @@ -goffice_graph_surfacedir = $(gnumeric_plugindir)/plot_surface +goffice_graph_surfacedir = $(goffice_plugindir)/plot_surface xmldir = $(goffice_graph_surfacedir) gladedir = $(goffice_graph_surfacedir) goffice_graph_surface_LTLIBRARIES = surface.la surface_la_LDFLAGS = -module $(GOFFICE_PLUGIN_FLAGS) +surface_la_LIBADD = $(GOFFICE_PLUGIN_LIBADD) + surface_la_SOURCES = \ gog-surface.c \ gog-surface.h \ + xl-surface.c \ + xl-surface.h \ gog-contour-prefs.c xml_in_files = plugin.xml.in plot-types.xml.in @@ -14,14 +18,14 @@ xml_DATA = $(xml_in_files:.xml.in=.xml) @INTLTOOL_XML_RULE@ -glade_DATA = gog-contour-prefs.glade +dist_glade_DATA = gog-contour-prefs.glade # do not use the intl-tool stuff to merge the text back # its simpler to just use gettext directly plot-types.xml : plot-types.xml.in cp $< $@ -EXTRA_DIST = $(xml_in_files) $(glade_DATA) +EXTRA_DIST = $(xml_in_files) DISTCLEANFILES = $(xml_in_files:.xml.in=.xml) -include $(srcdir)/../../../goffice-plugins.mk +include $(top_srcdir)/lib/goffice-0.0.4/goffice-plugins.mk diff --git a/lib/goffice/graph/plugins/plot_surface/gog-contour-prefs.c b/lib/goffice-0.0.4/plugins/plot_surface/gog-contour-prefs.c similarity index 60% rename from lib/goffice/graph/plugins/plot_surface/gog-contour-prefs.c rename to lib/goffice-0.0.4/plugins/plot_surface/gog-contour-prefs.c index a56f99dfec..ac78e410bd 100644 --- a/lib/goffice/graph/plugins/plot_surface/gog-contour-prefs.c +++ b/lib/goffice-0.0.4/plugins/plot_surface/gog-contour-prefs.c @@ -15,49 +15,46 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "gog-surface.h" -//#include -//#include -#include -#include +#include +#include -#include -#include +#include #include -GtkWidget *gog_contour_plot_pref (GogContourPlot *plot, GnmCmdContext *cc); +GtkWidget *gog_contour_plot_pref (GogContourPlot *plot, GOCmdContext *cc); static void -cb_levels_changed (GtkSpinButton *btn, GObject *plot) +cb_transpose (GtkToggleButton *btn, GObject *plot) { - g_object_set (plot, "levels", gtk_spin_button_get_value_as_int (btn), NULL); + g_object_set (plot, "transposed", gtk_toggle_button_get_active (btn), NULL); } GtkWidget * -gog_contour_plot_pref (GogContourPlot *plot, GnmCmdContext *cc) +gog_contour_plot_pref (GogContourPlot *plot, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_surface")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_surface")); char *path = g_build_filename (dir, "gog-contour-prefs.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_contour_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_contour_prefs", NULL, cc); g_free (path); if (gui == NULL) return NULL; - w = glade_xml_get_widget (gui, "levels"); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), plot->levels); + w = glade_xml_get_widget (gui, "transpose"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), plot->transposed); g_signal_connect (G_OBJECT (w), - "value_changed", - G_CALLBACK (cb_levels_changed), plot); + "toggled", + G_CALLBACK (cb_transpose), plot); w = glade_xml_get_widget (gui, "gog_contour_prefs"); g_object_set_data_full (G_OBJECT (w), diff --git a/lib/goffice-0.0.4/plugins/plot_surface/gog-contour-prefs.glade b/lib/goffice-0.0.4/plugins/plot_surface/gog-contour-prefs.glade new file mode 100644 index 0000000000..69909ada3d --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_surface/gog-contour-prefs.glade @@ -0,0 +1,54 @@ + + + + + + + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + + + + 5 + True + 1 + 1 + False + 5 + 5 + + + + True + True + Transpose + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + 1 + 0 + 1 + fill + + + + + + + + diff --git a/lib/goffice/graph/plugins/plot_surface/gog-surface.c b/lib/goffice-0.0.4/plugins/plot_surface/gog-surface.c similarity index 65% rename from lib/goffice/graph/plugins/plot_surface/gog-surface.c rename to lib/goffice-0.0.4/plugins/plot_surface/gog-surface.c index f5db8e6f46..938ba3f7f0 100644 --- a/lib/goffice/graph/plugins/plot_surface/gog-surface.c +++ b/lib/goffice-0.0.4/plugins/plot_surface/gog-surface.c @@ -2,7 +2,7 @@ /* * gog-surface.c * - * Copyright (C) 2004 Jean Brefort (jean.brefort@normalesup.org) + * Copyright (C) 2004-2005 Jean Brefort (jean.brefort@normalesup.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,32 +15,36 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include -#include +#include "gog-surface.h" +#include "xl-surface.h" + +#include #include +#include #include #include #include #include #include -#include "gog-surface.h" +#include -#include #include #include #include #include -typedef struct { - GogPlotClass base; -} GogContourPlotClass; +GOFFICE_PLUGIN_MODULE_HEADER; -GNUMERIC_MODULE_PLUGIN_INFO_DECL; +enum { + CONTOUR_PROP_0, + CONTOUR_PROP_TRANSPOSED +}; static GogObjectClass *plot_contour_parent_klass; @@ -93,6 +97,95 @@ vary_uniformly (GODataVector *vec) * *----------------------------------------------------------------------------- */ + +/** + * gog_contour_plot_build_matrix : + * @plot : + * + * builds a table of normalized values: first slice = 0-1 second = 1-2,... + **/ + +static double * +gog_contour_plot_build_matrix (GogContourPlot const *plot, gboolean *cardinality_changed) +{ + GogContourPlotClass *klass = GOG_CONTOUR_PLOT_GET_CLASS (plot); + return klass->build_matrix (plot, cardinality_changed); +} + +static double * +gog_contour_plot_real_build_matrix (GogContourPlot const *plot, gboolean *cardinality_changed) +{ + unsigned i, j; + GogAxisMap *map; + GogAxisTick *zticks; + GogAxis *axis = plot->base.axis[GOG_AXIS_PSEUDO_3D]; + unsigned nticks; + double x[2], val; + GogSeries *series = GOG_SERIES (plot->base.series->data); + GODataMatrix *mat = GO_DATA_MATRIX (series->values[2].data); + unsigned n = plot->rows * plot->columns; + double *data, minimum, maximum; + unsigned max; + + if (!gog_axis_get_bounds (axis, &minimum, &maximum)) + return NULL; + data = g_new (double, n); + nticks = gog_axis_get_ticks (axis, &zticks); + map = gog_axis_map_new (axis, 0, 1); + for (i = j = 0; i < nticks; i++) + if (zticks[i].type == GOG_AXIS_TICK_MAJOR) { + x[j++] = gog_axis_map_to_view (map, zticks[i].position); + if (j > 1) + break; + } + x[1] -= x[0]; + + for (i = 0; i < plot->rows; i++) + for (j = 0; j < plot->columns; j++) { + val = gog_axis_map_to_view (map, + go_data_matrix_get_value (mat, i, j)); + if (fabs (val) == DBL_MAX) + val = go_nan; + else { + val = val/ x[1] - x[0]; + if (val < 0) + val = go_nan; + } + if (plot->transposed) + data[j * plot->rows + i] = val; + else + data[i * plot->columns + j] = val; + } + max = (unsigned) ceil (1 / x[1]); + if (series->num_elements != max) { + series->num_elements = max; + *cardinality_changed = TRUE; + } + gog_axis_map_free (map); + return data; +} + +static void +gog_contour_plot_update_3d (GogPlot *plot) +{ + GogContourPlot *contour = GOG_CONTOUR_PLOT (plot); + gboolean cardinality_changed = FALSE; + + if (plot->series == NULL) + return; + + contour->plotted_data = gog_contour_plot_build_matrix (contour, &cardinality_changed); + if (cardinality_changed) { + /* gog_plot_request_cardinality_update can't be called from here + * since the plot might be updating. + */ + GogChart *chart = GOG_CHART (GOG_OBJECT (plot)->parent); + plot->cardinality_valid = FALSE; + if (chart != NULL) + gog_chart_request_cardinality_update (chart); + } +} + static char const * gog_contour_plot_type_name (G_GNUC_UNUSED GogObject const *item) { @@ -101,14 +194,18 @@ gog_contour_plot_type_name (G_GNUC_UNUSED GogObject const *item) return N_("PlotContour"); } -extern gpointer gog_contour_plot_pref (GogContourPlot *plot, GnmCmdContext *cc); -static gpointer -gog_contour_plot_editor (GogObject *item, +extern gpointer gog_contour_plot_pref (GogContourPlot *plot, GOCmdContext *cc); +static void +gog_contour_plot_populate_editor (GogObject *item, + GogEditor *editor, G_GNUC_UNUSED GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { - return gog_contour_plot_pref (GOG_CONTOUR_PLOT (item), cc); + gog_editor_add_page (editor, + gog_contour_plot_pref (GOG_CONTOUR_PLOT (item), cc), + _("Properties")); } + static void gog_contour_plot_clear_formats (GogContourPlot *plot) { @@ -120,102 +217,118 @@ gog_contour_plot_clear_formats (GogContourPlot *plot) go_format_unref (plot->y.fmt); plot->y.fmt = NULL; } + if (plot->z.fmt != NULL) { + go_format_unref (plot->z.fmt); + plot->z.fmt = NULL; + } } static void gog_contour_plot_update (GogObject *obj) { - unsigned i; GogContourPlot * model = GOG_CONTOUR_PLOT(obj); - GogSurfaceSeries * series = GOG_SURFACE_SERIES (model->base.series->data); + GogSurfaceSeries * series; GODataVector *vec; + GODataMatrix *mat; double tmp_min, tmp_max; - if (model->x.fmt == NULL) - model->x.fmt = go_data_preferred_fmt (series->base.values[0].data); - if (model->y.fmt == NULL) - model->y.fmt = go_data_preferred_fmt (series->base.values[1].data); + if (model->base.series == NULL) + return; - if (series->base.num_elements != model->levels) { - series->base.num_elements = model->levels; - gog_plot_request_cardinality_update (&(model->base)); + series = GOG_SURFACE_SERIES (model->base.series->data); + if (!gog_series_is_valid (GOG_SERIES (series))) + return; + + if ((vec = GO_DATA_VECTOR (series->base.values[0].data)) != NULL) { + if (model->x.fmt == NULL) + model->x.fmt = go_data_preferred_fmt (series->base.values[0].data); + if (vary_uniformly (vec)) + go_data_vector_get_minmax (vec, &tmp_min, &tmp_max); + else + tmp_min = tmp_max = go_nan; + } else { + tmp_min = 0; + tmp_max = series->columns - 1; } - vec = GO_DATA_VECTOR (series->base.values[0].data); - if (vary_uniformly (vec)) - go_data_vector_get_minmax (vec, &tmp_min, &tmp_max); - else - tmp_min = tmp_max = go_nan; if ((model->columns != series->columns) || (tmp_min != model->x.minima) || (tmp_max != model->x.maxima)) { model->columns = series->columns; model->x.minima = tmp_min; model->x.maxima = tmp_max; - gog_axis_bound_changed (model->base.axis[0], GOG_OBJECT (model)); + gog_axis_bound_changed (model->base.axis[(model->transposed)? GOG_AXIS_Y: GOG_AXIS_X], + GOG_OBJECT (model)); } - - vec = GO_DATA_VECTOR (series->base.values[1].data); - if (vary_uniformly (vec)) - go_data_vector_get_minmax (vec, &tmp_min, &tmp_max); - else - tmp_min = tmp_max = go_nan; + + if ((vec = GO_DATA_VECTOR (series->base.values[1].data)) != NULL) { + if (model->y.fmt == NULL) + model->y.fmt = go_data_preferred_fmt (series->base.values[1].data); + if (vary_uniformly (vec)) + go_data_vector_get_minmax (vec, &tmp_min, &tmp_max); + else + tmp_min = tmp_max = go_nan; + } else { + tmp_min = 0; + tmp_max = series->rows - 1; + } + if ((model->rows != series->rows) || (tmp_min != model->y.minima) || (tmp_max != model->y.maxima)) { model->rows = series->rows; model->y.minima = tmp_min; model->y.maxima = tmp_max; - gog_axis_bound_changed (model->base.axis[1], GOG_OBJECT (model)); + gog_axis_bound_changed (model->base.axis[(model->transposed)? GOG_AXIS_X: GOG_AXIS_Y], + GOG_OBJECT (model)); } - model->step = (model->zmax - model->zmin) / ((model->levels > 0)? model->levels: 1); - if (isnan (model->step) || model->step == 0.) - model->step = 1.; - for (i = 0; i <= model->levels; i++) - model->limits[i] = model->zmin + i * model->step; + g_free (model->plotted_data); + model->plotted_data = NULL; + mat = GO_DATA_MATRIX (series->base.values[2].data); + go_data_matrix_get_minmax (mat, &tmp_min, &tmp_max); + if ((tmp_min != model->z.minima) + || (tmp_max != model->z.maxima)) { + model->z.minima = tmp_min; + model->z.maxima = tmp_max; + gog_axis_bound_changed (model->base.axis[GOG_AXIS_PSEUDO_3D], GOG_OBJECT (model)); + } else + gog_contour_plot_update_3d (GOG_PLOT (model)); + gog_object_emit_changed (GOG_OBJECT (obj), FALSE); if (plot_contour_parent_klass->update) plot_contour_parent_klass->update (obj); } -static GogAxisSet -gog_contour_plot_axis_set_pref (GogPlot const *plot) -{ - return GOG_AXIS_SET_XY; -} - -static gboolean -gog_contour_plot_axis_set_is_valid (GogPlot const *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_XY; -} - -static gboolean -gog_contour_plot_axis_set_assign (GogPlot *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_XY; -} - static GOData * gog_contour_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, - GogPlotBoundInfo * bounds) + GogPlotBoundInfo * bounds) { - GogSurfaceSeries *series = GOG_SURFACE_SERIES (plot->series->data); + GogSurfaceSeries *series; GogContourPlot *contour = GOG_CONTOUR_PLOT (plot); - GODataVector *vec; + GODataVector *vec = NULL; double min, max; GOFormat *fmt; - if (axis == GOG_AXIS_X) { + if (!plot->series) + return NULL; + series = GOG_SURFACE_SERIES (plot->series->data); + if ((axis == GOG_AXIS_Y && contour->transposed) || + (axis == GOG_AXIS_X && !contour->transposed)) { vec = GO_DATA_VECTOR (series->base.values[0].data); fmt = contour->x.fmt; min = contour->x.minima; max = contour->x.maxima; - } else { + } else if (axis == GOG_AXIS_X || axis == GOG_AXIS_Y) { vec = GO_DATA_VECTOR (series->base.values[1].data); fmt = contour->y.fmt; min = contour->y.minima; max = contour->y.maxima; + } else { + if (bounds->fmt == NULL && contour->z.fmt != NULL) + bounds->fmt = go_format_ref (contour->z.fmt); + bounds->val.minima = contour->z.minima; + bounds->val.maxima = contour->z.maxima; + return NULL; } if (bounds->fmt == NULL && fmt != NULL) bounds->fmt = go_format_ref (fmt); @@ -229,7 +342,9 @@ gog_contour_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, bounds->logical.maxima = go_nan; bounds->is_discrete = TRUE; bounds->center_on_ticks = TRUE; - bounds->val.maxima = (axis == GOG_AXIS_X)? series->columns: series->rows; + bounds->val.maxima = (axis == GOG_AXIS_X) ? + series->columns - 1.: + series->rows - 1.; } return (GOData*) vec; } @@ -238,41 +353,55 @@ static void gog_contour_plot_foreach_elem (GogPlot *plot, gboolean only_visible, GogEnumFunc func, gpointer data) { - unsigned i; + unsigned i, j, nticks; char *label; static char separator = 0; GogStyle *style = gog_style_new (); GogTheme *theme = gog_object_get_theme (GOG_OBJECT (plot)); - GogContourPlot *contour = GOG_CONTOUR_PLOT (plot); + GogAxis *axis = plot->axis[GOG_AXIS_PSEUDO_3D]; GOColor *color; + GogAxisTick *zticks; + double *limits; + double minimum, maximum; + + gog_axis_get_bounds (axis, &minimum, &maximum); if (separator == 0) { struct lconv *lc = localeconv (); separator = (strcmp (lc->decimal_point, ","))? ',': ';'; } + nticks = gog_axis_get_ticks (axis, &zticks); + limits = g_new (double, nticks + 1); + for (i = j = 0; i < nticks; i++) + if (zticks[i].type == GOG_AXIS_TICK_MAJOR) + limits[j++] = zticks[i].position; + j--; + if (maximum > limits[j]) + limits[++j] = maximum; /* build the colors table */ - color = g_new0 (GOColor, (contour->levels > 0)? contour->levels: 1); - if (contour->levels < 2) + color = g_new0 (GOColor, (j > 0)? j: 1); + if (j < 2) color[0] = RGBA_WHITE; - else for (i = 0; i < contour->levels; i++) { + else for (i = 0; i < j; i++) { gog_theme_fillin_style (theme, style, GOG_OBJECT (plot->series->data), i, FALSE); color[i] = style->fill.pattern.back; } g_object_unref (style); - style = gog_style_new ();/*dup (GOG_STYLED_OBJECT (plot->series->data)->style);*/ + style = gog_style_new (); style->interesting_fields = GOG_STYLE_FILL; style->disable_theming = GOG_STYLE_ALL; style->fill.type = GOG_FILL_STYLE_PATTERN; style->fill.pattern.pattern = GO_PATTERN_SOLID; - for (i = 0; i < contour->levels; i++) { + for (i = 0; i < j; i++) { style->fill.pattern.back = color[i]; - label = g_strdup_printf ("[%g%c %g%c", contour->limits[i], separator, - contour->limits[i + 1], (i == contour->levels - 1)? ']':'['); + label = g_strdup_printf ("[%g%c %g%c", limits[i], separator, + limits[i + 1], (i == j - 1)? ']':'['); (func) (i, style, label, data); g_free (label); } + g_free (limits); g_object_unref (style); g_free (color); } @@ -282,85 +411,70 @@ gog_contour_plot_finalize (GObject *obj) { GogContourPlot *plot = GOG_CONTOUR_PLOT (obj); gog_contour_plot_clear_formats (plot); - if (plot->limits != NULL) - g_free (plot->limits); + if (plot->plotted_data) + g_free (plot->plotted_data); G_OBJECT_CLASS (plot_contour_parent_klass)->finalize (obj); } -enum { - GOG_CONTOUR_PROP_0, - GOG_CONTOUR_PROP_LEVELS -}; - static void gog_contour_plot_set_property (GObject *obj, guint param_id, - GValue const *value, GParamSpec *pspec) + GValue const *value, GParamSpec *pspec) { GogContourPlot *plot = GOG_CONTOUR_PLOT (obj); switch (param_id) { - case GOG_CONTOUR_PROP_LEVELS : { - unsigned levels = g_value_get_uint (value); - if (plot->levels != levels) { - unsigned i; - g_free (plot->limits); - plot->limits = g_new (double, levels + 1); - plot->levels = levels; - plot->step = (plot->zmax - plot->zmin) / levels; - if (isnan (plot->step) || plot->step == 0.) - plot->step = 1.; - for (i = 0; i < plot->levels; i++) - plot->limits[i] = plot->zmin + i * plot->step; - gog_plot_request_cardinality_update (GOG_PLOT (plot)); - } + case CONTOUR_PROP_TRANSPOSED : + plot->transposed = g_value_get_boolean (value); + gog_axis_bound_changed (plot->base.axis[GOG_AXIS_X], GOG_OBJECT (plot)); + gog_axis_bound_changed (plot->base.axis[GOG_AXIS_Y], GOG_OBJECT (plot)); + g_free (plot->plotted_data); + plot->plotted_data = NULL; break; - } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); return; /* NOTE : RETURN */ } - gog_object_emit_changed (GOG_OBJECT (obj), FALSE); } static void gog_contour_plot_get_property (GObject *obj, guint param_id, - GValue *value, GParamSpec *pspec) + GValue *value, GParamSpec *pspec) { GogContourPlot *plot = GOG_CONTOUR_PLOT (obj); switch (param_id) { - case GOG_CONTOUR_PROP_LEVELS : - g_value_set_uint (value, plot->levels); + case CONTOUR_PROP_TRANSPOSED : + g_value_set_boolean (value, plot->transposed); break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); break; } } static void -gog_contour_plot_class_init (GogPlotClass *gog_plot_klass) +gog_contour_plot_class_init (GogContourPlotClass *klass) { - GObjectClass *gobject_klass = (GObjectClass *) gog_plot_klass; - GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_klass; + GogPlotClass *gog_plot_klass = (GogPlotClass*) klass; + GObjectClass *gobject_klass = (GObjectClass *) klass; + GogObjectClass *gog_object_klass = (GogObjectClass *) klass; - plot_contour_parent_klass = g_type_class_peek_parent (gog_plot_klass); + plot_contour_parent_klass = g_type_class_peek_parent (klass); + gobject_klass->finalize = gog_contour_plot_finalize; gobject_klass->set_property = gog_contour_plot_set_property; gobject_klass->get_property = gog_contour_plot_get_property; - gobject_klass->finalize = gog_contour_plot_finalize; + g_object_class_install_property (gobject_klass, CONTOUR_PROP_TRANSPOSED, + g_param_spec_boolean ("transposed", "transposed", + "Transpose the plot", + FALSE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); /* Fill in GOGObject superclass values */ gog_object_klass->update = gog_contour_plot_update; gog_object_klass->type_name = gog_contour_plot_type_name; gog_object_klass->view_type = gog_contour_view_get_type (); - gog_object_klass->editor = gog_contour_plot_editor; - - g_object_class_install_property (gobject_klass, GOG_CONTOUR_PROP_LEVELS, - g_param_spec_uint ("levels", "levels", - "Number of slices.", - 1, 256, 6, /* max as 256 is not more stupid than another value */ - G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + gog_object_klass->populate_editor = gog_contour_plot_populate_editor; { static GogSeriesDimDesc dimensions[] = { @@ -378,48 +492,55 @@ gog_contour_plot_class_init (GogPlotClass *gog_plot_klass) /* Fill in GogPlotClass methods */ gog_plot_klass->desc.num_series_min = 1; - gog_plot_klass->desc.num_series_max = G_MAXINT; + gog_plot_klass->desc.num_series_max = 1; gog_plot_klass->series_type = gog_surface_series_get_type(); - gog_plot_klass->axis_set_pref = gog_contour_plot_axis_set_pref; - gog_plot_klass->axis_set_is_valid = gog_contour_plot_axis_set_is_valid; - gog_plot_klass->axis_set_assign = gog_contour_plot_axis_set_assign; + gog_plot_klass->axis_set = GOG_AXIS_SET_XY_pseudo_3d; gog_plot_klass->axis_get_bounds = gog_contour_plot_axis_get_bounds; gog_plot_klass->foreach_elem = gog_contour_plot_foreach_elem; + gog_plot_klass->update_3d = gog_contour_plot_update_3d; + + klass->build_matrix = gog_contour_plot_real_build_matrix; } static void gog_contour_plot_init (GogContourPlot *contour) { - contour->levels = 6; + GogPlot *plot = GOG_PLOT (contour); + contour->rows = contour->columns = 0; - contour->limits = g_new (double, 7); + contour->transposed = FALSE; contour->base.vary_style_by_element = TRUE; - contour->x.minima = contour->x.maxima = contour->y.minima = contour->y.maxima = go_nan; - contour->x.fmt = contour->y.fmt = NULL; + contour->x.minima = contour->x.maxima = contour->y.minima + = contour->y.maxima = contour->z.minima = contour->z.maxima = go_nan; + contour->x.fmt = contour->y.fmt = contour->z.fmt = NULL; + contour->plotted_data = NULL; + + plot->render_before_axes = TRUE; } -GSF_CLASS (GogContourPlot, gog_contour_plot, - gog_contour_plot_class_init, gog_contour_plot_init, - GOG_PLOT_TYPE) +GSF_DYNAMIC_CLASS (GogContourPlot, gog_contour_plot, + gog_contour_plot_class_init, gog_contour_plot_init, + GOG_PLOT_TYPE) /*****************************************************************************/ typedef GogPlotView GogContourView; typedef GogPlotViewClass GogContourViewClass; +#define CONTOUR_EPSILON 1e-10 static void gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) { GogContourPlot const *plot = GOG_CONTOUR_PLOT (view->model); - GogSurfaceSeries const *series = GOG_SURFACE_SERIES (plot->base.series->data); - GODataMatrix *mat = GO_DATA_MATRIX (series->base.values[2].data); + GogSeries const *series = GOG_SERIES (plot->base.series->data); GODataVector *x_vec = 0, *y_vec = 0; GogAxisMap *x_map, *y_map; - double zval0, zval1, zval2, zval3, t; + double zval0, zval1, zval2 = 0., zval3, t; double x[4], y[4], zval[4]; - unsigned z[4]; - unsigned z0 = 0, z1 = 0, z2 = 0, z3 = 0, zmin, zmax, nans, nan = 0; - unsigned i, j, k, kmax, l, lmax, p, r = 0, s, h; + int z[4]; + int z0 = 0, z1 = 0, z2 = 0, z3 = 0, zmin, zmax, nans, nan = 0; + int k, kmax, r = 0, s, h; + unsigned i, imax, j, jmax, l, lmax, p; GogRenderer *rend = view->renderer; GogStyle *style; GogTheme *theme = gog_object_get_theme (GOG_OBJECT (plot)); @@ -427,6 +548,19 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) ArtVpath *path, *lines; GOColor *color; gboolean cw; + double *data; + int max = series->num_elements; + gboolean xdiscrete, ydiscrete; + + if (plot->transposed) { + imax = plot->columns; + jmax = plot->rows; + } else { + imax = plot->rows; + jmax = plot->columns; + } + if (imax ==0 || jmax == 0) + return; x_map = gog_axis_map_new (plot->base.axis[0], view->residual.x , view->residual.w); @@ -441,75 +575,88 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) return; } + if (plot->plotted_data) + data = plot->plotted_data; + else + data = gog_contour_plot_build_matrix (plot, &cw); + /* Set cw to ensure that polygons will allways be drawn clockwise */ - if (gog_axis_is_discrete (plot->base.axis[0])) { - x0 = gog_axis_map_to_canvas(x_map, 0.); - x1 = gog_axis_map_to_canvas(x_map, 1.); + xdiscrete = gog_axis_is_discrete (plot->base.axis[0]) || + series->values[(plot->transposed)? 1: 0].data == NULL; + if (xdiscrete) { + x0 = gog_axis_map_to_view (x_map, 0.); + x1 = gog_axis_map_to_view (x_map, 1.); }else { - x_vec = GO_DATA_VECTOR (series->base.values[0].data); - x0 = gog_axis_map_to_canvas(x_map, go_data_vector_get_value (x_vec, 0)); - x1 = gog_axis_map_to_canvas(x_map, go_data_vector_get_value (x_vec, 1)); + x_vec = GO_DATA_VECTOR (series->values[(plot->transposed)? 1: 0].data); + x0 = gog_axis_map_to_view (x_map, go_data_vector_get_value (x_vec, 0)); + x1 = gog_axis_map_to_view (x_map, go_data_vector_get_value (x_vec, 1)); } - if (gog_axis_is_discrete (plot->base.axis[1])) { - y0 = gog_axis_map_to_canvas(y_map, 0.); - y1 = gog_axis_map_to_canvas(y_map, 1.); + ydiscrete = gog_axis_is_discrete (plot->base.axis[1]) || + series->values[(plot->transposed)? 0: 1].data == NULL; + if (ydiscrete) { + y0 = gog_axis_map_to_view (y_map, 0.); + y1 = gog_axis_map_to_view (y_map, 1.); }else { - y_vec = GO_DATA_VECTOR (series->base.values[1].data); - y0 = gog_axis_map_to_canvas(y_map, go_data_vector_get_value (y_vec, 0)); - y1 = gog_axis_map_to_canvas(y_map, go_data_vector_get_value (y_vec, 1)); + y_vec = GO_DATA_VECTOR (series->values[(plot->transposed)? 0: 1].data); + y0 = gog_axis_map_to_view (y_map, go_data_vector_get_value (y_vec, 0)); + y1 = gog_axis_map_to_view (y_map, go_data_vector_get_value (y_vec, 1)); } cw = (x1 > x0) == (y1 > y0); style = gog_style_new (); path = art_new (ArtVpath, 10); /* build the colors table */ - color = g_new0 (GOColor, (plot->levels > 0)? plot->levels: 1); - if (plot->levels < 2) + color = g_new0 (GOColor, max); + if (max < 2) color[0] = RGBA_WHITE; - else for (i = 0; i < plot->levels; i++) { + else for (i = 0; i < (unsigned) max; i++) { gog_theme_fillin_style (theme, style, GOG_OBJECT (series), i, FALSE); color[i] = style->fill.pattern.back; } g_object_unref (style); /* clip to avoid problems with logarithmic axes */ - gog_renderer_clip_push (rend, &(view->residual)); + gog_renderer_push_clip (rend, + gog_renderer_get_rectangle_vpath (&view->residual)); style = gog_style_new (); - style->interesting_fields = GOG_STYLE_FILL; + style->interesting_fields = GOG_STYLE_FILL | GOG_STYLE_OUTLINE; style->disable_theming = GOG_STYLE_ALL; style->fill.type = GOG_FILL_STYLE_PATTERN; style->fill.pattern.pattern = GO_PATTERN_SOLID; + style->outline.dash_type = GO_LINE_SOLID; + style->outline.auto_dash = FALSE; + style->outline.auto_color = FALSE; + style->outline.width = 0.5; + style->outline.color = RGBA_BLACK; lines = art_new (ArtVpath, lmax = 64); l = 0; - for (j = 1; j < series->columns; j++) { - if (gog_axis_is_discrete (plot->base.axis[0])) { - x0 = gog_axis_map_to_canvas(x_map, j - 1); - x1 = gog_axis_map_to_canvas(x_map, j); + for (j = 1; j < jmax; j++) { + if (xdiscrete) { + x0 = gog_axis_map_to_view (x_map, j - 1); + x1 = gog_axis_map_to_view (x_map, j); }else { - x0 = gog_axis_map_to_canvas(x_map, go_data_vector_get_value (x_vec, j - 1)); - x1 = gog_axis_map_to_canvas(x_map, go_data_vector_get_value (x_vec, j)); + x0 = gog_axis_map_to_view (x_map, go_data_vector_get_value (x_vec, j - 1)); + x1 = gog_axis_map_to_view (x_map, go_data_vector_get_value (x_vec, j)); } - for (i = 1; i < series->rows; i++) { - if (gog_axis_is_discrete (plot->base.axis[1])) { - y0 = gog_axis_map_to_canvas(y_map, i - 1); - y1 = gog_axis_map_to_canvas(y_map, i); + for (i = 1; i < imax; i++) { + if (ydiscrete) { + y0 = gog_axis_map_to_view (y_map, i - 1); + y1 = gog_axis_map_to_view (y_map, i); }else { - y0 = gog_axis_map_to_canvas(y_map, go_data_vector_get_value (y_vec, i - 1)); - y1 = gog_axis_map_to_canvas(y_map, go_data_vector_get_value (y_vec, i)); + y0 = gog_axis_map_to_view (y_map, go_data_vector_get_value (y_vec, i - 1)); + y1 = gog_axis_map_to_view (y_map, go_data_vector_get_value (y_vec, i)); } nans = 0; nan = 4; - zmin = plot->levels; + zmin = max; zmax = 0; - zval0 = go_data_matrix_get_value (mat, i - 1, j - 1); + zval0 = data[(i - 1) * jmax + j - 1]; if (!isnan (zval0)) { - z0 = floor ((zval0 - plot->zmin) / plot->step); - if (z0 == plot->levels && z0 > 0) - z0--; + z0 = floor (zval0); if (z0 > zmax) zmax = z0; if (z0 < zmin) { @@ -520,11 +667,9 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) nans++; nan = 0; } - zval1 = go_data_matrix_get_value (mat, i - 1, j); + zval1 = data[(i - 1) * jmax + j]; if (!isnan (zval1)) { - z1 = floor ((zval1 - plot->zmin) / plot->step); - if (z1 == plot->levels && z1 > 0) - z1--; + z1 = floor (zval1); if (z1 > zmax) zmax = z1; if (z1 < zmin) { @@ -535,11 +680,9 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) nans++; nan = 1; } - zval2 = go_data_matrix_get_value (mat, i, j); + zval2 = data[i * jmax + j]; if (!isnan (zval2)) { - z2 = floor ((zval2 - plot->zmin) / plot->step); - if (z2 == plot->levels && z2 > 0) - z2--; + z2 = floor (zval2); if (z2 > zmax) zmax = z2; if (z2 < zmin) { @@ -550,11 +693,9 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) nans++; nan = 2; } - zval3 = go_data_matrix_get_value (mat, i, j - 1); + zval3 = data[i * jmax + j - 1]; if (!isnan (zval3)) { - z3 = floor ((zval3 - plot->zmin) / plot->step); - if (z3 == plot->levels && z3 > 0) - z3--; + z3 = floor (zval3); if (z3 > zmax) zmax = z3; if (z3 < zmin) { @@ -610,6 +751,7 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) } while (k != r); if (zmin == zmax) { /* paint everything with one color*/ + style->outline.color = color[zmin]; style->fill.pattern.back = color[zmin]; gog_renderer_push_style (rend, style); path[0].code = ART_MOVETO; @@ -622,7 +764,7 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[k].y = y[0]; path[k + 1].code = ART_END; /* narrow parameter is TRUE below to avoid border effects */ - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } else { kmax = 3 - nans; @@ -630,28 +772,28 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) ((z0 > z1) && (z1 < z2) && (z2 > z3) && (z3 < z0)))) { /* we have a saddle point */ /* first find the most probable altitude of the saddle point */ - unsigned zn, zx; + int zn, zx; gboolean crossing = FALSE, up = FALSE, odd; double xl[8], yl[8]; /* crossing is TRUE if the saddle point occurs at a slices border */ zn = MAX (z[0], z[2]); if (zval[1] > zval[3]) - zx = (zval[3] == plot->limits[z[3]])? z[3] - 1: z[3]; + zx = (zval[3] == z[3])? z[3] - 1: z[3]; else - zx = (zval[1] == plot->limits[z[1]])? z[1] - 1: z[1]; + zx = (zval[1] == z[1])? z[1] - 1: z[1]; odd = (zx - zn) % 2; if (odd) { if ((zx - zn) == 1) { double sum = 0.; - sum += (z[0] == zn)? zval[0]: plot->limits[zn]; - sum += (z[1] == zx)? zval[1]: plot->limits[zx + 1]; - sum += (z[2] == zn)? zval[2]: plot->limits[zn]; - sum += (z[3] == zx)? zval[3]: plot->limits[zx + 1]; + sum += (z[0] == zn)? zval[0]: zn; + sum += (z[1] == zx)? zval[1]: zx + 1; + sum += (z[2] == zn)? zval[2]: zn; + sum += (z[3] == zx)? zval[3]: zx + 1; sum /= 4.; - if (fabs ((sum - plot->limits[zx]) / plot->step) < DBL_EPSILON) + if (fabs ((sum - zx)) < DBL_EPSILON) crossing = TRUE; else - up = (sum - plot->limits[zx]) < 0; + up = (sum - zx) < 0; } else crossing = TRUE; zn = (zn + zx) / 2; @@ -661,6 +803,7 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) /* low values slices */ if (z[0] < zn) { k = z[0]; + style->outline.color = color[k]; style->fill.pattern.back = color[k]; k++; path[0].code = ART_MOVETO; @@ -673,19 +816,20 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[0]) / (zval[3] - zval[0]); + t = (k - zval[0]) / (zval[3] - zval[0]); xl[7] = lines[l].x = path[1].x = x[0] + t * (x[3] - x[0]); yl[7] = lines[l++].y = path[1].y = y[0] + t * (y[3] - y[0]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[0]) / (zval[1] - zval[0]); + t = (k - zval[0]) / (zval[1] - zval[0]); xl[0] = lines[l].x = path[2].x = x[0] + t * (x[1] - x[0]); yl[0] = lines[l++].y = path[2].y = y[0] + t * (y[1] - y[0]); gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); path[4].code = ART_LINETO; path[5].code = ART_END; while (k < zn) { + style->outline.color = color[k]; style->fill.pattern.back = color[k]; k++; path[0].x = path[4].x = xl[7]; @@ -695,21 +839,22 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[0]) / (zval[3] - zval[0]); + t = (k - zval[0]) / (zval[3] - zval[0]); xl[7] = lines[l].x = path[1].x = x[0] + t * (x[3] - x[0]); yl[7] = lines[l++].y = path[1].y = y[0] + t * (y[3] - y[0]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[0]) / (zval[1] - zval[0]); + t = (k - zval[0]) / (zval[1] - zval[0]); xl[0] = lines[l].x = path[2].x = x[0] + t * (x[1] - x[0]); yl[0] = lines[l++].y = path[2].y = y[0] + t * (y[1] - y[0]); gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } } else xl[0] = xl[7] = -1.; if (z[2] < zn) { k = z[2]; + style->outline.color = color[k]; style->fill.pattern.back = color[k]; k++; path[0].code = ART_MOVETO; @@ -722,19 +867,20 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[2]) / (zval[1] - zval[2]); + t = (k - zval[2]) / (zval[1] - zval[2]); xl[3] = lines[l].x = path[1].x = x[2] + t * (x[1] - x[2]); yl[3] = lines[l++].y = path[1].y = y[2] + t * (y[1] - y[2]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[2]) / (zval[3] - zval[2]); + t = (k - zval[2]) / (zval[3] - zval[2]); xl[4] = lines[l].x = path[2].x = x[2] + t * (x[3] - x[2]); yl[4] = lines[l++].y = path[2].y = y[2] + t * (y[3] - y[2]); gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); path[4].code = ART_LINETO; path[5].code = ART_END; while (k < zn) { + style->outline.color = color[k]; style->fill.pattern.back = color[k]; k++; path[0].x = path[4].x = xl[3]; @@ -744,22 +890,22 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[2]) / (zval[1] - zval[2]); + t = (k - zval[2]) / (zval[1] - zval[2]); xl[3] = lines[l].x = path[1].x = x[2] + t * (x[1] - x[2]); yl[3] = lines[l++].y = path[1].y = y[2] + t * (y[1] - y[2]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[2]) / (zval[3] - zval[2]); + t = (k - zval[2]) / (zval[3] - zval[2]); xl[4] = lines[l].x = path[2].x = x[2] + t * (x[3] - x[2]); yl[4] = lines[l++].y = path[2].y = y[2] + t * (y[3] - y[2]); gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } } else xl[3] = xl[4] = -1.; /* high values slices */ k = z[1]; - if (zval[1] == plot->limits[k]) + if (zval[1] == k) k--; if (k > zx) { path[0].code = ART_MOVETO; @@ -772,16 +918,17 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[1]) / (zval[0] - zval[1]); + t = (k - zval[1]) / (zval[0] - zval[1]); xl[1] = lines[l].x = path[1].x = x[1] + t * (x[0] - x[1]); yl[1] = lines[l++].y = path[1].y = y[1] + t * (y[0] - y[1]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[1]) / (zval[2] - zval[1]); + t = (k - zval[1]) / (zval[2] - zval[1]); xl[2] = lines[l].x = path[2].x = x[1] + t * (x[2] - x[1]); yl[2] = lines[l++].y = path[2].y = y[1] + t * (y[2] - y[1]); + style->outline.color = color[k]; style->fill.pattern.back = color[k]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); path[4].code = ART_LINETO; path[5].code = ART_END; @@ -794,23 +941,24 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[1]) / (zval[0] - zval[1]); + t = (k - zval[1]) / (zval[0] - zval[1]); xl[1] = lines[l].x = path[1].x = x[1] + t * (x[0] - x[1]); yl[1] = lines[l++].y = path[1].y = y[1] + t * (y[0] - y[1]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[1]) / (zval[2] - zval[1]); + t = (k - zval[1]) / (zval[2] - zval[1]); xl[2] = lines[l].x = path[2].x = x[1] + t * (x[2] - x[1]); yl[2] = lines[l++].y = path[2].y = y[1] + t * (y[2] - y[1]); + style->outline.color = color[k]; style->fill.pattern.back = color[k]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); k--; } } else xl[1] = xl[2] = -1.; k = z[3]; - if (zval[3] == plot->limits[k]) + if (zval[3] == k) k--; if (k > zx) { path[0].code = ART_MOVETO; @@ -823,16 +971,17 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[3]) / (zval[2] - zval[3]); + t = (k - zval[3]) / (zval[2] - zval[3]); xl[5] = lines[l].x = path[1].x = x[3] + t * (x[2] - x[3]); yl[5] = lines[l++].y = path[1].y = y[3] + t * (y[2] - y[3]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[3]) / (zval[0] - zval[3]); + t = (k - zval[3]) / (zval[0] - zval[3]); xl[6] = lines[l].x = path[2].x = x[3] + t * (x[0] - x[3]); yl[6] = lines[l++].y = path[2].y = y[3] + t * (y[0] - y[3]); + style->outline.color = color[k]; style->fill.pattern.back = color[k]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); path[4].code = ART_LINETO; path[5].code = ART_END; @@ -845,16 +994,17 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 3) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[3]) / (zval[2] - zval[3]); + t = (k - zval[3]) / (zval[2] - zval[3]); xl[5] = lines[l].x = path[1].x = x[3] + t * (x[2] - x[3]); yl[5] = lines[l++].y = path[1].y = y[3] + t * (y[2] - y[3]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[3]) / (zval[0] - zval[3]); + t = (k - zval[3]) / (zval[0] - zval[3]); xl[6] = lines[l].x = path[2].x = x[3] + t * (x[0] - x[3]); yl[6] = lines[l++].y = path[2].y = y[3] + t * (y[0] - y[3]); + style->outline.color = color[k]; style->fill.pattern.back = color[k]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); k--; } @@ -866,7 +1016,7 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) double xb[4], yb[4], xc, yc; for (k = 0; k < 4; k++) { s = (k + 1) % 4; - t = (plot->limits[zx] - zval[s]) / (zval[k] - zval[s]); + t = (zx - zval[s]) / (zval[k] - zval[s]); xb[k] = x[s] + t * (x[k] - x[s]); yb[k] = y[s] + t * (y[k] - y[s]); } @@ -915,9 +1065,10 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[2].y = yc; path[3].x = xb[0]; path[3].y = yb[0]; + style->outline.color = color[zn]; style->fill.pattern.back = color[zn]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); if (xl[2] < 0.) { path[4].x = path[0].x = x[2]; path[4].y = path[0].y = y[2]; @@ -934,7 +1085,7 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[1].y = yb[1]; path[3].x = xb[2]; path[3].y = yb[2]; - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); if (xl[2] < 0.) { path[4].x = path[0].x = x[1]; @@ -952,9 +1103,10 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[1].y = yb[0]; path[3].x = xb[1]; path[3].y = yb[1]; + style->outline.color = color[zx]; style->fill.pattern.back = color[zx]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); if (xl[6] < 0.) { path[4].x = path[0].x = x[3]; path[4].y = path[0].y = y[3]; @@ -971,7 +1123,7 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[1].y = yb[2]; path[3].x = xb[3]; path[3].y = yb[3]; - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } else { if (up) { @@ -996,16 +1148,17 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 5) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[zx] - zval[1]) / (zval[0] - zval[1]); + t = (zx - zval[1]) / (zval[0] - zval[1]); xl[1] = lines[l].x = path[1].x = x[1] + t * (x[0] - x[1]); yl[1] = lines[l++].y = path[1].y = y[1] + t * (y[0] - y[1]); lines[l].code = ART_LINETO; - t = (plot->limits[zx] - zval[1]) / (zval[2] - zval[1]); + t = (zx - zval[1]) / (zval[2] - zval[1]); xl[2] = lines[l].x = path[2].x = x[1] + t * (x[2] - x[1]); yl[2] = lines[l++].y = path[2].y = y[1] + t * (y[2] - y[1]); + style->outline.color = color[zx]; style->fill.pattern.back = color[zx]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); if (xl[5] < 0.) { path[4].code = ART_END; path[0].x = path[3].x = x[3]; @@ -1021,14 +1174,14 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 5) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[zx] - zval[3]) / (zval[2] - zval[3]); + t = (zx - zval[3]) / (zval[2] - zval[3]); xl[5] = lines[l].x = path[1].x = x[3] + t * (x[2] - x[3]); yl[5] = lines[l++].y = path[1].y = y[3] + t * (y[2] - y[3]); lines[l].code = ART_LINETO; - t = (plot->limits[zx] - zval[3]) / (zval[0] - zval[3]); + t = (zx - zval[3]) / (zval[0] - zval[3]); xl[6] = lines[l].x = path[2].x = x[3] + t * (x[0] - x[3]); yl[6] = lines[l++].y = path[2].y = y[3] + t * (y[0] - y[3]); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } else { /* saddle point is in the upper slice */ @@ -1051,17 +1204,18 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) if ((l + 5) >= lmax) lines = art_renew (lines, ArtVpath, lmax += 64); lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[0]) / (zval[3] - zval[0]); + t = (k - zval[0]) / (zval[3] - zval[0]); xl[7] = lines[l].x = path[1].x = x[0] + t * (x[3] - x[0]); yl[7] = lines[l++].y = path[1].y = y[0] + t * (y[3] - y[0]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[0]) / (zval[1] - zval[0]); + t = (k - zval[0]) / (zval[1] - zval[0]); xl[0] = lines[l].x = path[2].x = x[0] + t * (x[1] - x[0]); yl[0] = lines[l++].y = path[2].y = y[0] + t * (y[1] - y[0]); + style->outline.color = color[zn]; style->fill.pattern.back = color[zn]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); - if (xl[2] < 0.) { + gog_renderer_draw_polygon (rend, path, FALSE); + if (xl[4] < 0.) { path[4].code = ART_END; path[0].x = path[3].x = x[2]; path[0].y = path[3].y = y[2]; @@ -1074,14 +1228,14 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[3].y = yl[4]; } lines[l].code = ART_MOVETO_OPEN; - t = (plot->limits[k] - zval[2]) / (zval[1] - zval[2]); + t = (k - zval[2]) / (zval[1] - zval[2]); xl[3] = lines[l].x = path[1].x = x[2] + t * (x[1] - x[2]); yl[3] = lines[l++].y = path[1].y = y[2] + t * (y[1] - y[2]); lines[l].code = ART_LINETO; - t = (plot->limits[k] - zval[2]) / (zval[3] - zval[2]); + t = (k - zval[2]) / (zval[3] - zval[2]); xl[4] = lines[l].x = path[2].x = x[2] + t * (x[3] - x[2]); yl[4] = lines[l++].y = path[2].y = y[2] + t * (y[3] - y[2]); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); zn = zx; } @@ -1106,9 +1260,10 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[k].x = path[0].x; path[k++].y = path[0].y; path[k].code = ART_END; + style->outline.color = color[zn]; style->fill.pattern.back = color[zn]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } } else { @@ -1132,9 +1287,10 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[k].x = path[0].x; path[k++].y = path[0].y; path[k].code = ART_END; + style->outline.color = color[zx]; style->fill.pattern.back = color[zx]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } } else { @@ -1149,59 +1305,87 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) s = 0; r = kmax; while (zmin < zmax) { + style->outline.color = color[zmin]; style->fill.pattern.back = color[zmin]; gog_renderer_push_style (rend, style); while (z[k] <= zmin && k < kmax) { - path[p].code = ART_LINETO; - path[p].x = x[k]; - path[p++].y = y[k++]; + if (fabs (path[p-1].x - x[k]) > CONTOUR_EPSILON || + fabs (path[p-1].y - y[k]) > CONTOUR_EPSILON) { + path[p].code = ART_LINETO; + path[p].x = x[k]; + path[p++].y = y[k++]; + } else + k++; } while (z[r] <= zmin && r > 0) r--; - zmin++; - t = (plot->limits[zmin] - zval[k - 1]) / (zval[k] - zval[k - 1]); + t = (zmin - zval[k - 1]) / (zval[k] - zval[k - 1]); path[p].code = ART_LINETO; lines[l].code = ART_MOVETO_OPEN; lines[l].x = path[p].x = x[k - 1] + t * (x[k] - x[k - 1]); - lines[l++].y = path[p++].y = y[k - 1] + t * (y[k] - y[k - 1]); + lines[l++].y = path[p].y = y[k - 1] + t * (y[k] - y[k - 1]); + if (fabs (path[p-1].x - path[p].x) > CONTOUR_EPSILON || + fabs (path[p-1].y - path[p].y) > CONTOUR_EPSILON) + p++; path[p].code = ART_LINETO; lines[l].code = ART_LINETO; if (r < kmax) { - t = (plot->limits[zmin] - zval[r]) / (zval[r + 1] - zval[r]); + t = (zmin - zval[r]) / (zval[r + 1] - zval[r]); lines[l].x = path[p].x = x[r] + t * (x[r + 1] - x[r]); - lines[l++].y = path[p++].y = y[r] + t * (y[r + 1] - y[r]); + lines[l++].y = path[p].y = y[r] + t * (y[r + 1] - y[r]); } else { - t = (plot->limits[zmin] - zval[r]) / (zval[0] - zval[r]); + t = (zmin - zval[r]) / (zval[0] - zval[r]); lines[l].x = path[p].x = x[r] + t * (x[0] - x[r]); - lines[l++].y = path[p++].y = y[r] + t * (y[0] - y[r]); + lines[l++].y = path[p].y = y[r] + t * (y[0] - y[r]); } + if (fabs (path[p-1].x - path[p].x) > CONTOUR_EPSILON || + fabs (path[p-1].y - path[p].y) > CONTOUR_EPSILON) + p++; if (s == 0) { for (h = r + 1; h <= kmax; h++) { - path[p].code = ART_LINETO; - path[p].x = x[h]; - path[p++].y = y[h]; + if (fabs (path[p-1].x - x[h]) > CONTOUR_EPSILON || + fabs (path[p-1].y - y[h]) > CONTOUR_EPSILON) { + path[p].code = ART_LINETO; + path[p].x = x[h]; + path[p++].y = y[h]; + } } } else { for (h = r + 1; h < s; h++) { - path[p].code = ART_LINETO; - path[p].x = x[h]; - path[p++].y = y[h]; + if (fabs (path[p-1].x - x[h]) > CONTOUR_EPSILON || + fabs (path[p-1].y - y[h]) > CONTOUR_EPSILON) { + path[p].code = ART_LINETO; + path[p].x = x[h]; + path[p++].y = y[h]; + } } } s = r + 1; - path[p].code = ART_LINETO; - path[p].x = path[0].x; - path[p++].y = path[0].y; + if (fabs (path[p-1].x - path[0].x) > CONTOUR_EPSILON || + fabs (path[p-1].y -path[0].y) > CONTOUR_EPSILON) { + path[p].code = ART_LINETO; + path[p].x = path[0].x; + path[p++].y = path[0].y; + } else { + /* use the exact values so that the polygon is closed */ + path[p-1].x = path[0].x; + path[p-1].y = path[0].y; + } path[p].code = ART_END; - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); path[0].x = lines[l - 1].x; path[0].y = lines[l - 1].y; path[1].x = lines[l - 2].x; path[1].y = lines[l - 2].y; - p = 2; + p = (fabs (path[0].x - path[1].x) > CONTOUR_EPSILON || + fabs (path[0].y - path[1].y) > CONTOUR_EPSILON)? + 2: 1; } + if (fabs (path[0].x - path[1].x) < CONTOUR_EPSILON + && fabs (path[0].y - path[1].y) < CONTOUR_EPSILON) + continue; while (k < s) { path[p].code = ART_LINETO; path[p].x = x[k]; @@ -1211,9 +1395,10 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) path[p].x = path[0].x; path[p++].y = path[0].y; path[p].code = ART_END; + style->outline.color = color[zmin]; style->fill.pattern.back = color[zmin]; gog_renderer_push_style (rend, style); - gog_renderer_draw_polygon (rend, path, TRUE, NULL); + gog_renderer_draw_polygon (rend, path, FALSE); gog_renderer_pop_style (rend); } } @@ -1221,9 +1406,9 @@ gog_contour_view_render (GogView *view, GogViewAllocation const *bbox) } lines[l].code = ART_END; gog_renderer_push_style (rend, GOG_STYLED_OBJECT (series)->style); - gog_renderer_draw_path (rend, lines, NULL); + gog_renderer_draw_path (rend, lines); gog_renderer_pop_style (rend); - gog_renderer_clip_pop (rend); + gog_renderer_pop_clip (rend); art_free (lines); art_free (path); g_object_unref (style); @@ -1237,9 +1422,9 @@ gog_contour_view_class_init (GogViewClass *view_klass) view_klass->render = gog_contour_view_render; } -static GSF_CLASS (GogContourView, gog_contour_view, - gog_contour_view_class_init, NULL, - GOG_PLOT_VIEW_TYPE) +GSF_DYNAMIC_CLASS (GogContourView, gog_contour_view, + gog_contour_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) /*****************************************************************************/ @@ -1249,8 +1434,7 @@ static void gog_surface_series_update (GogObject *obj) { GogSurfaceSeries *series = GOG_SURFACE_SERIES (obj); - GOMatrixSize size, old_size; - GogContourPlot *plot = GOG_CONTOUR_PLOT (series->base.plot); + GODataMatrixSize size, old_size; GODataMatrix *mat; GODataVector *vec; int length; @@ -1262,7 +1446,6 @@ gog_surface_series_update (GogObject *obj) mat = GO_DATA_MATRIX (series->base.values[2].data); go_data_matrix_get_values (mat); size = go_data_matrix_get_size (mat); - go_data_matrix_get_minmax (mat, &plot->zmin, &plot->zmax); } if (series->base.values[0].data != NULL) { vec = GO_DATA_VECTOR (series->base.values[0].data); @@ -1280,11 +1463,10 @@ gog_surface_series_update (GogObject *obj) } series->rows = size.rows; series->columns = size.columns; - series->base.num_elements = plot->levels; /* queue plot for redraw */ gog_object_request_update (GOG_OBJECT (series->base.plot)); - gog_plot_request_cardinality_update (series->base.plot); +/* gog_plot_request_cardinality_update (series->base.plot);*/ if (series_parent_klass->base.update) series_parent_klass->base.update (obj); @@ -1307,17 +1489,22 @@ gog_surface_series_class_init (GogStyledObjectClass *gso_klass) } -GSF_CLASS (GogSurfaceSeries, gog_surface_series, - gog_surface_series_class_init, NULL, - GOG_SERIES_TYPE) +GSF_DYNAMIC_CLASS (GogSurfaceSeries, gog_surface_series, + gog_surface_series_class_init, NULL, + GOG_SERIES_TYPE) -void -plugin_init (void) +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) { - gog_contour_plot_get_type (); + GTypeModule *module = go_plugin_get_type_module (plugin); + gog_contour_plot_register_type (module); + gog_contour_view_register_type (module); + gog_surface_series_register_type (module); + xl_contour_plot_register_type (module); + xl_surface_series_register_type (module); } -void -plugin_cleanup (void) +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) { } diff --git a/lib/goffice/graph/plugins/plot_surface/gog-surface.h b/lib/goffice-0.0.4/plugins/plot_surface/gog-surface.h similarity index 75% rename from lib/goffice/graph/plugins/plot_surface/gog-surface.h rename to lib/goffice-0.0.4/plugins/plot_surface/gog-surface.h index 5ed01f283b..80232134c9 100644 --- a/lib/goffice/graph/plugins/plot_surface/gog-surface.h +++ b/lib/goffice-0.0.4/plugins/plot_surface/gog-surface.h @@ -2,7 +2,7 @@ /* * gog-surface.h * - * Copyright (C) 2004 Jean Brefort (jean.brefort@normalesup.org) + * Copyright (C) 2004-2005 Jean Brefort (jean.brefort@normalesup.org) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -36,14 +36,13 @@ G_BEGIN_DECLS typedef struct { GogPlot base; - unsigned levels; unsigned rows, columns; - double zmin, zmax; - double step, *limits; + gboolean transposed; struct { double minima, maxima; GOFormat *fmt; - } x, y; + } x, y, z; + double *plotted_data; } GogContourPlot; #define GOG_CONTOUR_PLOT_TYPE (gog_contour_plot_get_type ()) @@ -52,6 +51,14 @@ typedef struct { GType gog_contour_plot_get_type (void); +typedef struct { + GogPlotClass base; + + double * (*build_matrix) (GogContourPlot const *plot, gboolean *cardinality_changed); +} GogContourPlotClass; + +#define GOG_CONTOUR_PLOT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GOG_CONTOUR_PLOT_TYPE, GogContourPlotClass)) + G_END_DECLS #endif /* GOG_SURFACE_H */ diff --git a/lib/goffice/graph/plugins/plot_surface/plot-types.xml.in b/lib/goffice-0.0.4/plugins/plot_surface/plot-types.xml.in similarity index 64% rename from lib/goffice/graph/plugins/plot_surface/plot-types.xml.in rename to lib/goffice-0.0.4/plugins/plot_surface/plot-types.xml.in index 7263186a48..9a9970bd49 100644 --- a/lib/goffice/graph/plugins/plot_surface/plot-types.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_surface/plot-types.xml.in @@ -1,10 +1,10 @@ - + + sample_image_file="chart_contour_1_1.png"> diff --git a/lib/goffice/graph/plugins/plot_surface/plugin.xml.in b/lib/goffice-0.0.4/plugins/plot_surface/plugin.xml.in similarity index 72% rename from lib/goffice/graph/plugins/plot_surface/plugin.xml.in rename to lib/goffice-0.0.4/plugins/plot_surface/plugin.xml.in index 5ca4775791..9005206d8b 100644 --- a/lib/goffice/graph/plugins/plot_surface/plugin.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_surface/plugin.xml.in @@ -5,7 +5,7 @@ <_description>Surface charts - + @@ -13,6 +13,11 @@ <_description>Contour plotting engine + + + <_description>Excel compatibility contour plotting engine + + plot-types.xml diff --git a/lib/goffice-0.0.4/plugins/plot_surface/xl-surface.c b/lib/goffice-0.0.4/plugins/plot_surface/xl-surface.c new file mode 100644 index 0000000000..231441fa92 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_surface/xl-surface.c @@ -0,0 +1,310 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * xl-surface.c + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include "xl-surface.h" + +#include +#include + +#include +#include +#include +#include + +static GogObjectClass *xl_contour_parent_klass; +typedef GogSeries XLSurfaceSeries; +typedef GogSeriesClass XLSurfaceSeriesClass; + +#define XL_SURFACE_SERIES_TYPE (xl_surface_series_get_type ()) +#define XL_SURFACE_SERIES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), XL_SURFACE_SERIES_TYPE, XLSurfaceSeries)) +#define XL_IS_SURFACE_SERIES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), XL_SURFACE_SERIES_TYPE)) + +static GType xl_surface_series_get_type (void); + +/*****************************************************************************/ + +typedef GogContourPlotClass XLContourPlotClass; + +static double * +xl_contour_plot_build_matrix (GogContourPlot const *plot, + gboolean *cardinality_changed) +{ + unsigned i, j, length; + GogAxisMap *map; + GogAxisTick *zticks; + GogAxis *axis = plot->base.axis[GOG_AXIS_PSEUDO_3D]; + unsigned nticks; + double x[2], val; + GogSeries *series = NULL; + GODataVector *vec; + unsigned n = plot->rows * plot->columns; + double *data, minimum, maximum; + unsigned max; + GSList *ptr; + + if (!gog_axis_get_bounds (axis, &minimum, &maximum)) + return NULL; + data = g_new (double, n); + nticks = gog_axis_get_ticks (axis, &zticks); + map = gog_axis_map_new (axis, 0, 1); + for (i = j = 0; i < nticks; i++) + if (zticks[i].type == GOG_AXIS_TICK_MAJOR) { + x[j++] = gog_axis_map_to_view (map, zticks[i].position); + if (j > 1) + break; + } + x[1] -= x[0]; + + for (i = 0, ptr = plot->base.series ; ptr != NULL ; ptr = ptr->next) { + series = ptr->data; + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + vec = GO_DATA_VECTOR (series->values[1].data); + length = go_data_vector_get_len (vec); + for (j = 0; j < plot->columns; j++) { + /* The vector might be too short, excel is so ugly ;-) */ + val = (j < length)? gog_axis_map_to_view (map, + go_data_vector_get_value (vec, j)): 0.; + /* This is an excel compatible plot, so let's be compatible */ + if (val == go_nan || !go_finite (val)) + val = 0.; + if (fabs (val) == DBL_MAX) + val = go_nan; + else { + val = val/ x[1] - x[0]; + if (val < 0) { + val = go_nan; + } + } + data[i * plot->columns + j] = val; + } + i++; + } + g_return_val_if_fail (series != NULL, NULL); + max = (unsigned) ceil (1 / x[1]); + series = plot->base.series->data; + if (series->num_elements != max) { + series->num_elements = max; + *cardinality_changed = TRUE; + } + gog_axis_map_free (map); + return data; +} + +static void +xl_contour_plot_update (GogObject *obj) +{ + GogContourPlot * model = GOG_CONTOUR_PLOT(obj); + XLSurfaceSeries * series; + double zmin = DBL_MAX, zmax = -DBL_MAX, tmp_min, tmp_max; + GSList *ptr; + model->rows = 0; + model->columns = 0; + + for (ptr = model->base.series ; ptr != NULL ; ptr = ptr->next) { + series = ptr->data; + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + if (series->num_elements > model->columns) + model->columns = series->num_elements; + model->rows++; + go_data_vector_get_minmax (GO_DATA_VECTOR ( + series->values[1].data), &tmp_min, &tmp_max); + if (zmin > tmp_min) zmin = tmp_min; + if (zmax < tmp_max) zmax = tmp_max; + } + g_free (model->plotted_data); + model->plotted_data = NULL; + if ((zmin != model->z.minima) + || (zmax != model->z.maxima)) { + model->z.minima = zmin; + model->z.maxima = zmax; + gog_axis_bound_changed (model->base.axis[GOG_AXIS_PSEUDO_3D], GOG_OBJECT (model)); + } else + gog_plot_update_3d (GOG_PLOT (model)); + + gog_axis_bound_changed (model->base.axis[GOG_AXIS_X], obj); + gog_axis_bound_changed (model->base.axis[GOG_AXIS_Y], obj); +} + +static GODataVector * +get_y_vector (GogPlot *plot) +{ + XLContourPlot *contour = XL_CONTOUR_PLOT (plot); + GSList *ptr; + int i; + + if (contour->y_labels) + g_free (contour->y_labels); + contour->y_labels = g_new0 (char const *, contour->base.rows); + + for (ptr = plot->series, i = 0 ; ptr != NULL ; ptr = ptr->next, i++) { + XLSurfaceSeries *series = ptr->data; + + if (!gog_series_is_valid (GOG_SERIES (series))) + continue; + contour->y_labels[i] = go_data_scalar_get_str (GO_DATA_SCALAR ( + series->values[-1].data)); + } + + return GO_DATA_VECTOR (go_data_vector_str_new (contour->y_labels, i, NULL)); +} + +static GOData * +xl_contour_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, + GogPlotBoundInfo * bounds) +{ + XLContourPlot *contour = XL_CONTOUR_PLOT (plot); + GODataVector *vec = NULL; + GOFormat *fmt; + + if (axis == GOG_AXIS_X) { + XLSurfaceSeries *series = XL_SURFACE_SERIES (plot->series->data); + vec = GO_DATA_VECTOR (series->values[0].data); + fmt = contour->base.x.fmt; + } else if (axis == GOG_AXIS_Y) { + if (!contour->base.rows) + return NULL; + vec = get_y_vector (plot); + fmt = contour->base.y.fmt; + } else { + if (bounds->fmt == NULL && contour->base.z.fmt != NULL) + bounds->fmt = go_format_ref (contour->base.z.fmt); + bounds->val.minima = contour->base.z.minima; + bounds->val.maxima = contour->base.z.maxima; + return NULL; + } + if (bounds->fmt == NULL && fmt != NULL) + bounds->fmt = go_format_ref (fmt); + bounds->val.minima = 0.; + bounds->logical.minima = 0.; + bounds->logical.maxima = go_nan; + bounds->is_discrete = TRUE; + bounds->center_on_ticks = TRUE; + bounds->val.maxima = (axis == GOG_AXIS_X)? + contour->base.columns - 1.: + contour->base.rows - 1.; + return (GOData*) vec; +} + +static void +xl_contour_plot_finalize (GObject *obj) +{ + XLContourPlot *plot = XL_CONTOUR_PLOT (obj); + if (plot->y_labels) + g_free (plot->y_labels); + G_OBJECT_CLASS (xl_contour_parent_klass)->finalize (obj); +} + +static void +xl_contour_plot_class_init (GogContourPlotClass *klass) +{ + GogPlotClass *gog_plot_klass = (GogPlotClass*) klass; + GogObjectClass *gog_object_klass = (GogObjectClass *) klass; + GObjectClass *gobject_klass = (GObjectClass *) klass; + + xl_contour_parent_klass = g_type_class_peek_parent (klass); + + gobject_klass->finalize = xl_contour_plot_finalize; + + /* Fill in GOGObject superclass values */ + gog_object_klass->update = xl_contour_plot_update; + gog_object_klass->populate_editor = NULL; + + { + static GogSeriesDimDesc dimensions[] = { + { N_("X"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_LABEL, GOG_MS_DIM_CATEGORIES }, + { N_("Z"), GOG_SERIES_REQUIRED, FALSE, + GOG_DIM_VALUE, GOG_MS_DIM_VALUES }, + }; + gog_plot_klass->desc.series.dim = dimensions; + gog_plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); + gog_plot_klass->desc.series.style_fields = 0; + } + /* Fill in GogPlotClass methods */ + gog_plot_klass->axis_get_bounds = xl_contour_plot_axis_get_bounds; + gog_plot_klass->series_type = xl_surface_series_get_type(); + + klass->build_matrix = xl_contour_plot_build_matrix; +} + +static void +xl_contour_plot_init (XLContourPlot *contour) +{ + contour->y_labels = NULL; +} + +GSF_DYNAMIC_CLASS (XLContourPlot, xl_contour_plot, + xl_contour_plot_class_init, xl_contour_plot_init, + GOG_CONTOUR_PLOT_TYPE) + +/*****************************************************************************/ + +static GogStyledObjectClass *series_parent_klass; + +static void +xl_surface_series_update (GogObject *obj) +{ + XLSurfaceSeries *series = XL_SURFACE_SERIES (obj); + int x_len = 0, z_len = 0; +/* unsigned old_num = series->num_elements;*/ + + if (series->values[1].data != NULL) + z_len = go_data_vector_get_len ( + GO_DATA_VECTOR (series->values[1].data)); + if (series->values[0].data != NULL) + x_len = go_data_vector_get_len ( + GO_DATA_VECTOR (series->values[0].data)); + else + x_len = z_len; + series->num_elements = MIN (x_len, z_len); + + /* queue plot for redraw */ + gog_object_request_update (GOG_OBJECT (series->plot)); +/* if (old_num != series->base.num_elements) + gog_plot_request_cardinality_update (series->plot);*/ + + if (series_parent_klass->base.update) + series_parent_klass->base.update (obj); +} + +static void +xl_surface_series_init_style (GogStyledObject *gso, GogStyle *style) +{ + series_parent_klass->init_style (gso, style); +} + +static void +xl_surface_series_class_init (GogStyledObjectClass *gso_klass) +{ + GogObjectClass * obj_klass = (GogObjectClass *) gso_klass; + + series_parent_klass = g_type_class_peek_parent (gso_klass); + gso_klass->init_style = xl_surface_series_init_style; + obj_klass->update = xl_surface_series_update; +} + + +GSF_DYNAMIC_CLASS (XLSurfaceSeries, xl_surface_series, + xl_surface_series_class_init, NULL, + GOG_SERIES_TYPE) diff --git a/lib/goffice-0.0.4/plugins/plot_surface/xl-surface.h b/lib/goffice-0.0.4/plugins/plot_surface/xl-surface.h new file mode 100644 index 0000000000..accf28248e --- /dev/null +++ b/lib/goffice-0.0.4/plugins/plot_surface/xl-surface.h @@ -0,0 +1,51 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * xl-contour.h + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef XL_CONTOUR_H +#define XL_CONTOUR_H + +#include "gog-surface.h" + +G_BEGIN_DECLS + +/*----------------------------------------------------------------------------- + * + * XLContourPlot + * + *----------------------------------------------------------------------------- + */ + +typedef struct { + GogContourPlot base; + char const **y_labels; +} XLContourPlot; + +#define XL_CONTOUR_PLOT_TYPE (xl_contour_plot_get_type ()) +#define XL_CONTOUR_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), XL_CONTOUR_PLOT_TYPE, XLContourPlot)) +#define XL_PLOT_CONTOUR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), XL_CONTOUR_PLOT_TYPE)) + +GType xl_contour_plot_get_type (void); +void xl_contour_plot_register_type (GTypeModule *plugin); +void xl_surface_series_register_type (GTypeModule *plugin); + +G_END_DECLS + +#endif /* XL_CONTOUR_H */ diff --git a/lib/goffice/graph/plugins/plot_xy/Makefile.am b/lib/goffice-0.0.4/plugins/plot_xy/Makefile.am similarity index 64% rename from lib/goffice/graph/plugins/plot_xy/Makefile.am rename to lib/goffice-0.0.4/plugins/plot_xy/Makefile.am index d1d9579550..52b3bb0902 100644 --- a/lib/goffice/graph/plugins/plot_xy/Makefile.am +++ b/lib/goffice-0.0.4/plugins/plot_xy/Makefile.am @@ -1,27 +1,29 @@ -goffice_graph_xydir = $(gnumeric_plugindir)/plot_xy +goffice_graph_xydir = $(goffice_plugindir)/plot_xy xmldir = $(goffice_graph_xydir) gladedir = $(goffice_graph_xydir) goffice_graph_xy_LTLIBRARIES = xy.la xy_la_LDFLAGS = -module $(GOFFICE_PLUGIN_FLAGS) +xy_la_LIBADD = $(GOFFICE_PLUGIN_LIBADD) + xy_la_SOURCES = \ gog-xy.c \ gog-xy.h \ gog-bubble-prefs.c xml_in_files = plugin.xml.in plot-types.xml.in -xml_DATA = $(xml_in_files:.xml.in=.xml) gog-bubble-prefs.glade +xml_DATA = $(xml_in_files:.xml.in=.xml) @INTLTOOL_XML_RULE@ -glade_DATA = gog-bubble-prefs.glade +dist_glade_DATA = gog-bubble-prefs.glade # do not use the intl-tool stuff to merge the text back # its simpler to just use gettext directly plot-types.xml : plot-types.xml.in cp $< $@ -EXTRA_DIST = $(xml_in_files) $(glade_DATA) +EXTRA_DIST = $(xml_in_files) DISTCLEANFILES = $(xml_in_files:.xml.in=.xml) -include $(srcdir)/../../../goffice-plugins.mk +include $(top_srcdir)/lib/goffice-0.0.4/goffice-plugins.mk diff --git a/lib/goffice/graph/plugins/plot_xy/gog-bubble-prefs.c b/lib/goffice-0.0.4/plugins/plot_xy/gog-bubble-prefs.c similarity index 80% rename from lib/goffice/graph/plugins/plot_xy/gog-bubble-prefs.c rename to lib/goffice-0.0.4/plugins/plot_xy/gog-bubble-prefs.c index fa41e20175..73375431e0 100644 --- a/lib/goffice/graph/plugins/plot_xy/gog-bubble-prefs.c +++ b/lib/goffice-0.0.4/plugins/plot_xy/gog-bubble-prefs.c @@ -15,69 +15,66 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include "gog-xy.h" -//#include -//#include -#include -#include +#include +#include -#include #include #include #include #include -GtkWidget *gog_bubble_plot_pref (GogBubblePlot *bubble, GnmCmdContext *cc); +GtkWidget *gog_bubble_plot_pref (GogBubblePlot *bubble, GOCmdContext *cc); static void cb_type_changed (GtkToggleButton* button, GObject *bubble) { if (gtk_toggle_button_get_active (button)) - g_object_set (bubble, "size_as_area", + g_object_set (bubble, "size-as-area", strcmp (gtk_widget_get_name ((GtkWidget*) button), "area")? FALSE: TRUE, NULL); } static void cb_style_changed (GtkToggleButton* button, GObject *bubble) { - g_object_set (bubble, "vary_style_by_element", + g_object_set (bubble, "vary-style-by-element", gtk_toggle_button_get_active (button), NULL); } static void cb_3d_changed (GtkToggleButton* button, GObject *bubble) { - g_object_set (bubble, "in_3d", + g_object_set (bubble, "in-3d", gtk_toggle_button_get_active (button), NULL); } static void cb_negatives_changed (GtkToggleButton* button, GObject *bubble) { - g_object_set (bubble, "show_negatives", + g_object_set (bubble, "show-negatives", gtk_toggle_button_get_active (button), NULL); } static void cb_scale_changed (GtkAdjustment *adj, GObject *bubble) { - g_object_set (bubble, "bubble_scale", adj->value / 100., NULL); + g_object_set (bubble, "bubble-scale", adj->value / 100., NULL); } GtkWidget * -gog_bubble_plot_pref (GogBubblePlot *bubble, GnmCmdContext *cc) +gog_bubble_plot_pref (GogBubblePlot *bubble, GOCmdContext *cc) { GtkWidget *w; - char const *dir = gnm_plugin_get_dir_name ( - plugins_get_plugin_by_id ("GOffice_plot_xy")); + char const *dir = go_plugin_get_dir_name ( + go_plugins_get_plugin_by_id ("GOffice_plot_xy")); char *path = g_build_filename (dir, "gog-bubble-prefs.glade", NULL); - GladeXML *gui = gnm_glade_xml_new (cc, path, "gog_bubble_prefs", NULL); + GladeXML *gui = go_libglade_new (path, "gog_bubble_prefs", NULL, cc); g_free (path); if (gui == NULL) @@ -106,9 +103,7 @@ gog_bubble_plot_pref (GogBubblePlot *bubble, GnmCmdContext *cc) g_signal_connect (G_OBJECT (w), "toggled", G_CALLBACK (cb_3d_changed), bubble); -#ifdef GOG_WARN_TODO -#warning "Hide 3d button while not supported" -#endif +//#warning "Hide 3d button while not supported" gtk_widget_hide (w); w = glade_xml_get_widget (gui, "scale"); diff --git a/lib/goffice/graph/plugins/plot_xy/gog-bubble-prefs.glade b/lib/goffice-0.0.4/plugins/plot_xy/gog-bubble-prefs.glade similarity index 100% rename from lib/goffice/graph/plugins/plot_xy/gog-bubble-prefs.glade rename to lib/goffice-0.0.4/plugins/plot_xy/gog-bubble-prefs.glade diff --git a/lib/goffice/graph/plugins/plot_xy/gog-xy.c b/lib/goffice-0.0.4/plugins/plot_xy/gog-xy.c similarity index 65% rename from lib/goffice/graph/plugins/plot_xy/gog-xy.c rename to lib/goffice-0.0.4/plugins/plot_xy/gog-xy.c index 37e894936f..d11f9d4f0a 100644 --- a/lib/goffice/graph/plugins/plot_xy/gog-xy.c +++ b/lib/goffice-0.0.4/plugins/plot_xy/gog-xy.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -26,14 +26,17 @@ #include #include #include -#include #include +#include +#include +#include #include #include #include #include +#include +#include -#include #include #include #include @@ -49,7 +52,7 @@ typedef Gog2DPlotClass GogXYPlotClass; typedef Gog2DPlotClass GogBubblePlotClass; -GNUMERIC_MODULE_PLUGIN_INFO_DECL; +GOFFICE_PLUGIN_MODULE_HEADER; static GogObjectClass *plot2d_parent_klass; static void gog_2d_plot_adjust_bounds (Gog2DPlot *model, double *x_min, double *x_max, double *y_min, double *y_max); @@ -162,24 +165,6 @@ gog_2d_plot_adjust_bounds (Gog2DPlot *model, double *x_min, double *x_max, doubl klass->adjust_bounds (model, x_min, x_max, y_min, y_max); } -static GogAxisSet -gog_2d_plot_axis_set_pref (GogPlot const *plot) -{ - return GOG_AXIS_SET_XY; -} - -static gboolean -gog_2d_plot_axis_set_is_valid (GogPlot const *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_XY; -} - -static gboolean -gog_2d_plot_axis_set_assign (GogPlot *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_XY; -} - static GOData * gog_2d_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, GogPlotBoundInfo *bounds) @@ -240,11 +225,9 @@ gog_2d_plot_class_init (GogPlotClass *plot_klass) plot_klass->desc.num_series_min = 1; plot_klass->desc.num_series_max = G_MAXINT; - plot_klass->series_type = gog_xy_series_get_type (); - plot_klass->axis_set_pref = gog_2d_plot_axis_set_pref; - plot_klass->axis_set_is_valid = gog_2d_plot_axis_set_is_valid; - plot_klass->axis_set_assign = gog_2d_plot_axis_set_assign; - plot_klass->axis_get_bounds = gog_2d_plot_axis_get_bounds; + plot_klass->series_type = gog_xy_series_get_type (); + plot_klass->axis_set = GOG_AXIS_SET_XY; + plot_klass->axis_get_bounds = gog_2d_plot_axis_get_bounds; } static void @@ -254,14 +237,15 @@ gog_2d_plot_init (Gog2DPlot *plot2d) plot2d->x.fmt = plot2d->y.fmt = NULL; } -GSF_CLASS (Gog2DPlot, gog_2d_plot, - gog_2d_plot_class_init, gog_2d_plot_init, - GOG_PLOT_TYPE) +GSF_DYNAMIC_CLASS (Gog2DPlot, gog_2d_plot, + gog_2d_plot_class_init, gog_2d_plot_init, + GOG_PLOT_TYPE) enum { GOG_XY_PROP_0, GOG_XY_PROP_DEFAULT_STYLE_HAS_MARKERS, - GOG_XY_PROP_DEFAULT_STYLE_HAS_LINES + GOG_XY_PROP_DEFAULT_STYLE_HAS_LINES, + GOG_XY_PROP_USE_SPLINES }; static GogObjectClass *xy_parent_klass; @@ -289,6 +273,9 @@ gog_xy_set_property (GObject *obj, guint param_id, case GOG_XY_PROP_DEFAULT_STYLE_HAS_LINES: xy->default_style_has_lines = g_value_get_boolean (value); break; + case GOG_XY_PROP_USE_SPLINES: + xy->use_splines = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); break; } @@ -305,6 +292,9 @@ gog_xy_get_property (GObject *obj, guint param_id, case GOG_XY_PROP_DEFAULT_STYLE_HAS_LINES: g_value_set_boolean (value, xy->default_style_has_lines); break; + case GOG_XY_PROP_USE_SPLINES: + g_value_set_boolean (value, xy->use_splines); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); break; } @@ -329,6 +319,10 @@ gog_xy_plot_class_init (GogPlotClass *plot_klass) g_param_spec_boolean ("default-style-has-lines", NULL, "Should the default style of a series include lines", TRUE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); + g_object_class_install_property (gobject_klass, GOG_XY_PROP_USE_SPLINES, + g_param_spec_boolean ("use-splines", NULL, + "Should the plot use splines instead of linear interpolation", + FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); gog_klass->type_name = gog_xy_plot_type_name; @@ -361,9 +355,9 @@ gog_xy_plot_init (GogXYPlot *xy) xy->default_style_has_lines = TRUE; } -GSF_CLASS (GogXYPlot, gog_xy_plot, - gog_xy_plot_class_init, gog_xy_plot_init, - GOG_2D_PLOT_TYPE) +GSF_DYNAMIC_CLASS (GogXYPlot, gog_xy_plot, + gog_xy_plot_class_init, gog_xy_plot_init, + GOG_2D_PLOT_TYPE) /*****************************************************************************/ @@ -379,12 +373,18 @@ gog_bubble_plot_type_name (G_GNUC_UNUSED GogObject const *item) return N_("PlotBubble"); } -extern gpointer gog_bubble_plot_pref (GogBubblePlot *bubble, GnmCmdContext *cc); -static gpointer -gog_bubble_plot_editor (GogObject *item, G_GNUC_UNUSED GogDataAllocator *dalloc, - GnmCmdContext *cc) +extern gpointer gog_bubble_plot_pref (GogBubblePlot *bubble, GOCmdContext *cc); +static void +gog_bubble_plot_populate_editor (GogObject *obj, + GogEditor *editor, + G_GNUC_UNUSED GogDataAllocator *dalloc, + GOCmdContext *cc) { - return gog_bubble_plot_pref (GOG_BUBBLE_PLOT (item), cc); + gog_editor_add_page (editor, + gog_bubble_plot_pref (GOG_BUBBLE_PLOT (obj), cc), + _("Properties")); + + (GOG_OBJECT_CLASS(bubble_parent_klass)->populate_editor) (obj, editor, dalloc, cc); } enum { @@ -456,31 +456,32 @@ gog_bubble_plot_class_init (GogPlotClass *plot_klass) Gog2DPlotClass *gog_2d_plot_klass = (Gog2DPlotClass*) plot_klass; bubble_parent_klass = g_type_class_peek_parent (plot_klass); + gobject_klass->set_property = gog_bubble_plot_set_property; gobject_klass->get_property = gog_bubble_plot_get_property; - gog_2d_plot_klass->adjust_bounds = gog_bubble_plot_adjust_bounds; gog_klass->type_name = gog_bubble_plot_type_name; + gog_klass->populate_editor = gog_bubble_plot_populate_editor; - gog_klass->editor = gog_bubble_plot_editor; + gog_2d_plot_klass->adjust_bounds = gog_bubble_plot_adjust_bounds; g_object_class_install_property (gobject_klass, GOG_BUBBLE_PROP_AS_AREA, - g_param_spec_boolean ("size_as_area", "size_as_area", + g_param_spec_boolean ("size-as-area", "size-as-area", "Display size as area instead of diameter", TRUE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, GOG_BUBBLE_PROP_SHOW_NEGATIVES, - g_param_spec_boolean ("show_negatives", "show_negatives", + g_param_spec_boolean ("show-negatives", "show-negatives", "Draw bubbles for negative values", FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, GOG_BUBBLE_PROP_IN_3D, - g_param_spec_boolean ("in_3d", "in_3d", + g_param_spec_boolean ("in-3d", "in-3d", "Draw 3d bubbles", FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); g_object_class_install_property (gobject_klass, GOG_BUBBLE_PROP_SCALE, - g_param_spec_float ("bubble_scale", "bubble_scale", + g_param_spec_float ("bubble-scale", "bubble-scale", "Fraction of default radius used for display.", 0., 2., 1., G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); @@ -532,9 +533,9 @@ gog_bubble_plot_init (GogBubblePlot *bubble) bubble->bubble_scale = 1.0; } -GSF_CLASS (GogBubblePlot, gog_bubble_plot, - gog_bubble_plot_class_init, gog_bubble_plot_init, - GOG_2D_PLOT_TYPE) +GSF_DYNAMIC_CLASS (GogBubblePlot, gog_bubble_plot, + gog_bubble_plot_class_init, gog_bubble_plot_init, + GOG_2D_PLOT_TYPE) /*****************************************************************************/ typedef GogPlotView GogXYView; @@ -551,9 +552,7 @@ bubble_draw_circle (GogView *view, double x, double y, double radius) path[0].x = path[MAX_ARC_SEGMENTS].x = x + radius; path[0].y = path[MAX_ARC_SEGMENTS].y = y; path[0].code = ART_MOVETO; -#ifdef GOG_WARN_TODO -#warning what about small bubbles. With a very small radius, libart emits lot of warnings. -#endif +//#warning what about small bubbles. With a very small radius, libart emits lot of warnings. if (radius < 1.) radius = 1.; for (i = 1, theta = dt; i < MAX_ARC_SEGMENTS; i++, theta += dt) { path[i].x = x + radius * cos (theta); @@ -563,7 +562,7 @@ bubble_draw_circle (GogView *view, double x, double y, double radius) } path[MAX_ARC_SEGMENTS].code = ART_LINETO; path[MAX_ARC_SEGMENTS + 1].code = ART_END; - gog_renderer_draw_polygon (view->renderer, path, FALSE, &view->residual); + gog_renderer_draw_polygon (view->renderer, path, FALSE); } typedef struct { @@ -575,48 +574,58 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) { Gog2DPlot const *model = GOG_2D_PLOT (view->model); unsigned num_series; + GogChart *chart = GOG_CHART (view->model->parent); + GogChartMap *chart_map; GogAxisMap *x_map, *y_map; GogXYSeries const *series = NULL; unsigned i ,j ,k ,n, tmp; GogTheme *theme = gog_object_get_theme (GOG_OBJECT (model)); GogStyle *neg_style = NULL; + GogViewAllocation const *area; GSList *ptr; double const *y_vals, *x_vals = NULL, *z_vals = NULL; double x = 0., y = 0., z, x_canvas = 0., y_canvas = 0.; - double zmax, rmax = 0.; + double zmax, rmax = 0., x_zero, y_zero; double x_margin_min, x_margin_max, y_margin_min, y_margin_max, margin; double xerrmin, xerrmax, yerrmin, yerrmax; - double prev_x = 0., prev_y = 0.; - double prev_x_canvas = 0., prev_y_canvas = 0.; - ArtVpath path[3]; GogStyle *style = NULL; - gboolean valid, prev_valid, show_marks, show_lines, show_negatives, in_3d, size_as_area = TRUE; + gboolean show_marks, show_lines, show_negatives, in_3d, size_as_area = TRUE; MarkerData **markers; unsigned *num_markers; - x_map = gog_axis_map_new (model->base.axis[0], - view->residual.x , view->residual.w); - y_map = gog_axis_map_new (model->base.axis[1], - view->residual.y + view->residual.h, - -view->residual.h); - - if (!(gog_axis_map_is_valid (x_map) && - gog_axis_map_is_valid (y_map))) { - gog_axis_map_free (x_map); - gog_axis_map_free (y_map); + area = gog_chart_view_get_plot_area (view->parent); + chart_map = gog_chart_map_new (chart, area, + GOG_PLOT (model)->axis[GOG_AXIS_X], + GOG_PLOT (model)->axis[GOG_AXIS_Y], + NULL, FALSE); + if (!gog_chart_map_is_valid (chart_map)) { + gog_chart_map_free (chart_map); return; } - gog_renderer_clip_push (view->renderer, &view->allocation); + x_map = gog_chart_map_get_axis_map (chart_map, 0); + y_map = gog_chart_map_get_axis_map (chart_map, 1); + + /* Draw drop lines from point to axis start. To change this behaviour + * and draw drop lines from point to zero, we can use gog_axis_map_get_baseline: + * x_zero = gog_axis_map_get_baseline (x_map); + * What we really want is to draw drop lines from point to + * a selected axis. But for this purpose, we need a GogAxisBase selector in + * GogSeriesLine, which doesn't really know what it's supposed to do with it. */ + + gog_axis_map_get_extents (x_map, &x_zero, NULL); + x_zero = gog_axis_map_to_view (x_map, x_zero); + gog_axis_map_get_extents (y_map, &y_zero, NULL); + y_zero = gog_axis_map_to_view (y_map, y_zero); + + gog_renderer_push_clip (view->renderer, + gog_renderer_get_rectangle_vpath (&view->allocation)); for (num_series = 0, ptr = model->base.series ; ptr != NULL ; ptr = ptr->next, num_series++); markers = g_alloca (num_series * sizeof (MarkerData *)); num_markers = g_alloca (num_series * sizeof (unsigned)); - path[0].code = ART_MOVETO; - path[1].code = ART_LINETO; - path[2].code = ART_END; for (j = 0, ptr = model->base.series ; ptr != NULL ; ptr = ptr->next, j++) { series = ptr->data; markers[j] = NULL; @@ -637,6 +646,63 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) n = tmp; } style = GOG_STYLED_OBJECT (series)->style; + + if (n <= 0) + continue; + + /* plot drop lines if any */ + if (series->hdroplines) { + ArtVpath droppath[3]; + droppath[0].code = ART_MOVETO; + droppath[1].code = ART_LINETO; + droppath[2].code = ART_END; + droppath[0].x = x_zero; + gog_renderer_push_style (view->renderer, + gog_styled_object_get_style (GOG_STYLED_OBJECT (series->hdroplines))); + for (i = 0; i < n; i++) { + if (!gog_axis_map_finite (y_map, y_vals[i])) + continue; + x = x_vals ? x_vals[i] : i + 1; + if (!gog_axis_map_finite (x_map, x)) + continue; + droppath[1].x = gog_axis_map_to_view (x_map, x); + droppath[0].y = droppath[1].y = gog_axis_map_to_view (y_map, y_vals[i]); + gog_series_lines_render (GOG_SERIES_LINES (series->hdroplines), + view->renderer, bbox, droppath, FALSE); + } + gog_renderer_pop_style (view->renderer); + } + if (series->vdroplines) { + ArtVpath droppath[3]; + droppath[0].code = ART_MOVETO; + droppath[1].code = ART_LINETO; + droppath[2].code = ART_END; + droppath[0].y = y_zero; + gog_renderer_push_style (view->renderer, + gog_styled_object_get_style (GOG_STYLED_OBJECT (series->vdroplines))); + for (i = 0; i < n; i++) { + if (!gog_axis_map_finite (y_map, y_vals[i])) + continue; + x = x_vals ? x_vals[i] : i + 1; + if (!gog_axis_map_finite (x_map, x)) + continue; + droppath[1].y = gog_axis_map_to_view (y_map, y_vals[i]); + droppath[0].x = droppath[1].x = gog_axis_map_to_view (x_map, x); + gog_series_lines_render (GOG_SERIES_LINES (series->vdroplines), + view->renderer, bbox, droppath, FALSE); + } + gog_renderer_pop_style (view->renderer); + } + + show_marks = gog_style_is_marker_visible (style); + show_lines = gog_style_is_line_visible (style); + if (!show_marks && !show_lines) + continue; + + if (model->base.vary_style_by_element) + style = gog_style_dup (style); + gog_renderer_push_style (view->renderer, style); + if (GOG_IS_BUBBLE_PLOT (model)) { double zmin; go_data_vector_get_minmax (GO_DATA_VECTOR (series->base.values[2].data), &zmin, &zmax); @@ -654,8 +720,6 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) neg_style->fill.pattern.pattern = GO_PATTERN_SOLID; neg_style->fill.pattern.back = RGBA_WHITE; } - if (model->base.vary_style_by_element) - style = gog_style_dup (style); z_vals = go_data_vector_get_values ( GO_DATA_VECTOR (series->base.values[2].data)); @@ -663,21 +727,35 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) GO_DATA_VECTOR (series->base.values[2].data)); if (n > tmp) n = tmp; + } else if (show_lines) { + double *x_splines = g_new (double, n), *y_splines = g_new (double, n); + for (i = 0; i < n; i++) { + x = x_vals ? x_vals[i] : i + 1; + x_splines[i] = gog_axis_map_finite (x_map, x) ? + gog_axis_map_to_view (x_map, x): + go_nan; + y_splines[i] = gog_axis_map_finite (y_map, y_vals[i]) ? + gog_axis_map_to_view (y_map, y_vals[i]): + go_nan; + } + if (GOG_XY_PLOT (view->model)->use_splines) { + ArtBpath *path; + path = go_line_build_bpath (x_splines, y_splines, n); + gog_renderer_draw_bezier_path (view->renderer, path); + art_free (path); + } else { + ArtVpath *path; + path = go_line_build_vpath (x_splines, y_splines, n); + gog_renderer_draw_path (view->renderer, path); + art_free (path); + } + g_free (x_splines); + g_free (y_splines); } - if (n <= 0) - continue; - - show_marks = gog_style_is_marker_visible (style); - show_lines = gog_style_is_line_visible (style); - if (!show_marks && !show_lines) - continue; - if (show_marks && !GOG_IS_BUBBLE_PLOT (model)) markers[j] = g_new (MarkerData, n); - prev_valid = FALSE; - gog_renderer_push_style (view->renderer, style); margin = gog_renderer_line_size (view->renderer, 1); x_margin_min = view->allocation.x - margin; x_margin_max = view->allocation.x + view->allocation.w + margin; @@ -688,104 +766,62 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) for (i = 1 ; i <= n ; i++) { x = x_vals ? *x_vals++ : i; y = *y_vals++; - valid = !isnan (y) && !isnan (x); - if (valid) { - /* We are checking with go_finite here because isinf - if not available everywhere. Note, that NANs - have been ruled out. */ - if (!go_finite (y)) - y = 0; /* excel is just sooooo consistent */ - if (!go_finite (x)) - x = i; - x_canvas = gog_axis_map_to_canvas (x_map, x); - y_canvas = gog_axis_map_to_canvas (y_map, y); - if (GOG_IS_BUBBLE_PLOT(model)) { - z = *z_vals++; - if (!go_finite (z)) continue; - if (z < 0) { - if (GOG_BUBBLE_PLOT(model)->show_negatives) { - gog_renderer_push_style (view->renderer, neg_style); - bubble_draw_circle (view, x_canvas, y_canvas, - ((size_as_area)? sqrt (- z / zmax): - z / zmax) * rmax); - gog_renderer_pop_style (view->renderer); - } else continue; - } else { - if (model->base.vary_style_by_element) - gog_theme_fillin_style (theme, style, GOG_OBJECT (series), - model->base.index_num + i - 1, FALSE); - bubble_draw_circle (view, x_canvas, y_canvas, ((size_as_area)? sqrt (z / zmax): z / zmax) * rmax); - } - } else if (prev_valid && show_lines) { - path[0].x = prev_x_canvas; - path[0].y = prev_y_canvas; - path[1].x = x_canvas; - path[1].y = y_canvas; - gog_renderer_draw_path (view->renderer, path, NULL); + if (isnan (y) || isnan (x)) + continue; + /* We are checking with go_finite here because isinf + if not available everywhere. Note, that NANs + have been ruled out. */ + if (!gog_axis_map_finite (y_map, y)) + y = 0; /* excel is just sooooo consistent */ + if (!gog_axis_map_finite (x_map, x)) + x = i; + x_canvas = gog_axis_map_to_view (x_map, x); + y_canvas = gog_axis_map_to_view (y_map, y); + if (GOG_IS_BUBBLE_PLOT(model)) { + z = *z_vals++; + if (!go_finite (z)) continue; + if (z < 0) { + if (GOG_BUBBLE_PLOT(model)->show_negatives) { + gog_renderer_push_style (view->renderer, neg_style); + bubble_draw_circle (view, x_canvas, y_canvas, + ((size_as_area)? sqrt (- z / zmax): - z / zmax) * rmax); + gog_renderer_pop_style (view->renderer); + } else continue; + } else { + if (model->base.vary_style_by_element) + gog_theme_fillin_style (theme, style, GOG_OBJECT (series), + model->base.index_num + i - 1, FALSE); + bubble_draw_circle (view, x_canvas, y_canvas, ((size_as_area)? sqrt (z / zmax): z / zmax) * rmax); } } /* draw error bars after line */ - if (prev_valid) { - if (gog_error_bar_is_visible (series->x_errors)) { - GogErrorBar const *bar = series->x_errors; - if (gog_error_bar_get_bounds (bar, i - 2, &xerrmin, &xerrmax)) { - gog_error_bar_render (bar, view->renderer, - x_map, y_map, - prev_x, prev_y, - xerrmin, xerrmax, TRUE); - } - } - if (gog_error_bar_is_visible (series->y_errors)) { - GogErrorBar const *bar = series->y_errors; - if (gog_error_bar_get_bounds (bar, i - 2, &yerrmin, &yerrmax)) { - gog_error_bar_render (bar, view->renderer, - x_map, y_map, prev_x, prev_y, - yerrmin, yerrmax, FALSE); - } - } + if (gog_error_bar_is_visible (series->x_errors)) { + GogErrorBar const *bar = series->x_errors; + if (gog_error_bar_get_bounds (bar, i - 1, &xerrmin, &xerrmax)) { + gog_error_bar_render (bar, view->renderer, + x_map, y_map, + x, y, + xerrmin, xerrmax, TRUE); + } + } + if (gog_error_bar_is_visible (series->y_errors)) { + GogErrorBar const *bar = series->y_errors; + if (gog_error_bar_get_bounds (bar, i - 1, &yerrmin, &yerrmax)) { + gog_error_bar_render (bar, view->renderer, + x_map, y_map, x, y, + yerrmin, yerrmax, FALSE); + } } /* draw marker after line */ - if (prev_valid && show_marks && - x_margin_min <= prev_x_canvas && prev_x_canvas <= x_margin_max && - y_margin_min <= prev_y_canvas && prev_y_canvas <= y_margin_max) { - markers[j][k].x = prev_x_canvas; - markers[j][k].y = prev_y_canvas; + if (show_marks && + x_margin_min <= x_canvas && x_canvas <= x_margin_max && + y_margin_min <= y_canvas && y_canvas <= y_margin_max) { + markers[j][k].x = x_canvas; + markers[j][k].y = y_canvas; k++; } - - prev_x_canvas = x_canvas; - prev_y_canvas = y_canvas; - prev_x = x; - prev_y = y; - prev_valid = valid; - } - - /* draw error bars after line */ - if (gog_error_bar_is_visible (series->x_errors)) { - GogErrorBar const *bar = series->x_errors; - if (gog_error_bar_get_bounds (bar, i - 2, &xerrmin, &xerrmax)) { - gog_error_bar_render (bar, view->renderer, - x_map, y_map, prev_x, prev_y, - xerrmin, xerrmax, TRUE); - } - } - if (gog_error_bar_is_visible (series->y_errors)) { - GogErrorBar const *bar = series->y_errors; - if (gog_error_bar_get_bounds (bar, i - 2, &yerrmin, &yerrmax)) { - gog_error_bar_render (bar, view->renderer, - x_map, y_map, prev_x, prev_y, - yerrmin, yerrmax, FALSE); - } - } - - /* draw marker after line */ - if (prev_valid && show_marks && - x_margin_min <= prev_x_canvas && prev_x_canvas <= x_margin_max && - y_margin_min <= prev_y_canvas && prev_y_canvas <= y_margin_max) { - markers[j][k].x = x_canvas; - markers[j][k].y = y_canvas; - k++; } gog_renderer_pop_style (view->renderer); @@ -799,7 +835,7 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) g_object_unref (neg_style); } - gog_renderer_clip_pop (view->renderer); + gog_renderer_pop_clip (view->renderer); if (!GOG_IS_BUBBLE_PLOT (model)) for (j = 0, ptr = model->base.series ; ptr != NULL ; ptr = ptr->next, j++) { @@ -816,8 +852,11 @@ gog_xy_view_render (GogView *view, GogViewAllocation const *bbox) } } - gog_axis_map_free (x_map); - gog_axis_map_free (y_map); + /* Now render children, may be should come before markers? */ + for (ptr = view->children ; ptr != NULL ; ptr = ptr->next) + gog_view_render (ptr->data, bbox); + + gog_chart_map_free (chart_map); } static gboolean @@ -828,20 +867,119 @@ gog_xy_view_info_at_point (GogView *view, double x, double y, return FALSE; } +static GogViewClass *xy_view_parent_klass; + +static void +gog_xy_view_size_allocate (GogView *view, GogViewAllocation const *allocation) +{ + GSList *ptr; + for (ptr = view->children; ptr != NULL; ptr = ptr->next) + gog_view_size_allocate (GOG_VIEW (ptr->data), allocation); + (xy_view_parent_klass->size_allocate) (view, allocation); +} + static void gog_xy_view_class_init (GogViewClass *view_klass) { + xy_view_parent_klass = (GogViewClass*) g_type_class_peek_parent (view_klass); view_klass->render = gog_xy_view_render; + view_klass->size_allocate = gog_xy_view_size_allocate; view_klass->info_at_point = gog_xy_view_info_at_point; view_klass->clip = FALSE; } -static GSF_CLASS (GogXYView, gog_xy_view, - gog_xy_view_class_init, NULL, - GOG_PLOT_VIEW_TYPE) +GSF_DYNAMIC_CLASS (GogXYView, gog_xy_view, + gog_xy_view_class_init, NULL, + GOG_PLOT_VIEW_TYPE) /*****************************************************************************/ +typedef GogView GogXYSeriesView; +typedef GogViewClass GogXYSeriesViewClass; + +#define GOG_XY_SERIES_VIEW_TYPE (gog_xy_series_view_get_type ()) +#define GOG_XY_SERIES_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_XY_SERIES_VIEW_TYPE, GogXYSeriesView)) +#define IS_GOG_XY_SERIES_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_XY_SERIES_VIEW_TYPE)) + +static void +gog_xy_series_view_render (GogView *view, GogViewAllocation const *bbox) +{ + GSList *ptr; + for (ptr = view->children ; ptr != NULL ; ptr = ptr->next) + gog_view_render (ptr->data, bbox); +} + +static void +gog_xy_series_view_size_allocate (GogView *view, GogViewAllocation const *allocation) +{ + GSList *ptr; + + for (ptr = view->children; ptr != NULL; ptr = ptr->next) + gog_view_size_allocate (GOG_VIEW (ptr->data), allocation); +} + +static void +gog_xy_series_view_class_init (GogXYSeriesViewClass *gview_klass) +{ + GogViewClass *view_klass = GOG_VIEW_CLASS (gview_klass); + view_klass->render = gog_xy_series_view_render; + view_klass->size_allocate = gog_xy_series_view_size_allocate; +} + +GSF_DYNAMIC_CLASS (GogXYSeriesView, gog_xy_series_view, + gog_xy_series_view_class_init, NULL, + GOG_VIEW_TYPE) + +/*****************************************************************************/ + +static gboolean +horiz_drop_lines_can_add (GogObject const *parent) +{ + GogXYSeries *series = GOG_XY_SERIES (parent); + return (series->hdroplines == NULL); +} + +static void +horiz_drop_lines_post_add (GogObject *parent, GogObject *child) +{ + GogXYSeries *series = GOG_XY_SERIES (parent); + series->hdroplines = child; + gog_object_request_update (child); +} + +static void +horiz_drop_lines_pre_remove (GogObject *parent, GogObject *child) +{ + GogXYSeries *series = GOG_XY_SERIES (parent); + series->hdroplines = NULL; +} + +/*****************************************************************************/ + +static gboolean +vert_drop_lines_can_add (GogObject const *parent) +{ + GogXYSeries *series = GOG_XY_SERIES (parent); + return (series->vdroplines == NULL); +} + +static void +vert_drop_lines_post_add (GogObject *parent, GogObject *child) +{ + GogXYSeries *series = GOG_XY_SERIES (parent); + series->vdroplines = child; + gog_object_request_update (child); +} + +static void +vert_drop_lines_pre_remove (GogObject *parent, GogObject *child) +{ + GogXYSeries *series = GOG_XY_SERIES (parent); + series->vdroplines = NULL; +} + +/****************************************************************************/ + typedef GogSeriesClass GogXYSeriesClass; enum { @@ -859,6 +997,7 @@ gog_xy_series_update (GogObject *obj) int x_len = 0, y_len = 0; GogXYSeries *series = GOG_XY_SERIES (obj); unsigned old_num = series->base.num_elements; + GSList *ptr; if (series->base.values[1].data != NULL) { y_vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[1].data)); @@ -883,6 +1022,11 @@ gog_xy_series_update (GogObject *obj) x_len = y_len; series->base.num_elements = MIN (x_len, y_len); + /* update children */ + for (ptr = obj->children; ptr != NULL; ptr = ptr->next) + if (!IS_GOG_SERIES_LINES (ptr->data)) + gog_object_request_update (GOG_OBJECT (ptr->data)); + /* queue plot for redraw */ gog_object_request_update (GOG_OBJECT (series->base.plot)); if (old_num != series->base.num_elements) @@ -898,6 +1042,9 @@ gog_xy_series_init (GObject *obj) GogXYSeries *series = GOG_XY_SERIES (obj); series->x_errors = series->y_errors = NULL; + (GOG_SERIES (series))->acceptable_children = + GOG_SERIES_ACCEPT_REGRESSION_CURVE; + series->hdroplines = series->vdroplines = NULL; } static void @@ -930,23 +1077,14 @@ gog_xy_series_init_style (GogStyledObject *gso, GogStyle *style) return; plot = GOG_XY_PLOT (series->plot); - if (!plot->default_style_has_markers) { - style->disable_theming |= GOG_STYLE_MARKER; - if (style->marker.auto_shape) { - GOMarker *m = go_marker_new (); - go_marker_set_shape (m, GO_MARKER_NONE); - gog_style_set_marker (style, m); - } - } - if (!plot->default_style_has_lines) { - style->disable_theming |= GOG_STYLE_LINE; - if (style->line.auto_dash) - style->line.dash_type = GO_LINE_NONE; - if (style->line.auto_color) { - style->line.width = 0; - style->line.color = RGBA_BLACK; - } - } + + if (!plot->default_style_has_markers && + style->marker.auto_shape) + go_marker_set_shape (style->marker.mark, GO_MARKER_NONE); + + if (!plot->default_style_has_lines && + style->line.auto_dash) + style->line.dash_type = GO_LINE_NONE; } static void @@ -1013,32 +1151,58 @@ gog_xy_series_get_property (GObject *obj, guint param_id, } static void -gog_xy_series_populate_editor (GogSeries *series, - GtkNotebook *book, +gog_xy_series_populate_editor (GogObject *obj, + GogEditor *editor, GogDataAllocator *dalloc, - GnmCmdContext *cc) + GOCmdContext *cc) { GtkWidget *error_page; - error_page = gog_error_bar_prefs (series, "y-errors", FALSE, dalloc, cc); - gtk_notebook_prepend_page (book, error_page, gtk_label_new (_("Y Error bars"))); - error_page = gog_error_bar_prefs (series,"x-errors", TRUE, dalloc, cc); - gtk_notebook_prepend_page (book, error_page, gtk_label_new (_("X Error bars"))); + + (GOG_OBJECT_CLASS(series_parent_klass)->populate_editor) (obj, editor, dalloc, cc); + + error_page = gog_error_bar_prefs (GOG_SERIES (obj), "x-errors", TRUE, dalloc, cc); + gog_editor_add_page (editor, error_page, _("X error bars")); + error_page = gog_error_bar_prefs (GOG_SERIES (obj), "y-errors", FALSE, dalloc, cc); + gog_editor_add_page (editor, error_page, _("Y error bars")); } static void gog_xy_series_class_init (GogStyledObjectClass *gso_klass) { + static GogObjectRole const roles[] = { + { N_("Horizontal drop lines"), "GogSeriesLines", 2, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + horiz_drop_lines_can_add, + NULL, + NULL, + horiz_drop_lines_post_add, + horiz_drop_lines_pre_remove, + NULL }, + { N_("Vertical drop lines"), "GogSeriesLines", 3, + GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, + vert_drop_lines_can_add, + NULL, + NULL, + vert_drop_lines_post_add, + vert_drop_lines_pre_remove, + NULL }, + }; GogObjectClass *gog_klass = (GogObjectClass *)gso_klass; GObjectClass *gobject_klass = (GObjectClass *) gso_klass; - GogSeriesClass *gog_series_klass = (GogSeriesClass*) gso_klass; series_parent_klass = g_type_class_peek_parent (gso_klass); gog_klass->update = gog_xy_series_update; + gog_klass->view_type = gog_xy_series_view_get_type (); gso_klass->init_style = gog_xy_series_init_style; + gobject_klass->finalize = gog_xy_series_finalize; gobject_klass->set_property = gog_xy_series_set_property; gobject_klass->get_property = gog_xy_series_get_property; - gog_series_klass->populate_editor = gog_xy_series_populate_editor; + gog_klass->update = gog_xy_series_update; + gog_klass->populate_editor = gog_xy_series_populate_editor; + gso_klass->init_style = gog_xy_series_init_style; + + gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); g_object_class_install_property (gobject_klass, SERIES_PROP_XERRORS, g_param_spec_object ("x-errors", "x-errors", @@ -1050,18 +1214,23 @@ gog_xy_series_class_init (GogStyledObjectClass *gso_klass) GOG_ERROR_BAR_TYPE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); } -static GSF_CLASS (GogXYSeries, gog_xy_series, - gog_xy_series_class_init, gog_xy_series_init, - GOG_SERIES_TYPE) +GSF_DYNAMIC_CLASS (GogXYSeries, gog_xy_series, + gog_xy_series_class_init, gog_xy_series_init, + GOG_SERIES_TYPE) -void -plugin_init (void) +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) { - gog_xy_plot_get_type (); - gog_bubble_plot_get_type (); + GTypeModule *module = go_plugin_get_type_module (plugin); + gog_2d_plot_register_type (module); + gog_xy_plot_register_type (module); + gog_bubble_plot_register_type (module); + gog_xy_view_register_type (module); + gog_xy_series_view_register_type (module); + gog_xy_series_register_type (module); } -void -plugin_cleanup (void) +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) { } diff --git a/lib/goffice/graph/plugins/plot_xy/gog-xy.h b/lib/goffice-0.0.4/plugins/plot_xy/gog-xy.h similarity index 93% rename from lib/goffice/graph/plugins/plot_xy/gog-xy.h rename to lib/goffice-0.0.4/plugins/plot_xy/gog-xy.h index 4c04a65746..9bcb8c7eb1 100644 --- a/lib/goffice/graph/plugins/plot_xy/gog-xy.h +++ b/lib/goffice-0.0.4/plugins/plot_xy/gog-xy.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ @@ -40,6 +40,7 @@ typedef struct { Gog2DPlot base; gboolean default_style_has_markers; gboolean default_style_has_lines; + gboolean use_splines; } GogXYPlot; typedef struct { @@ -71,6 +72,7 @@ GType gog_bubble_plot_get_type (void); typedef struct { GogSeries base; GogErrorBar *x_errors, *y_errors; + GogObject *hdroplines, *vdroplines; } GogXYSeries; #define GOG_XY_SERIES_TYPE (gog_xy_series_get_type ()) @@ -79,4 +81,4 @@ typedef struct { G_END_DECLS -#endif /* GOG_XY_SERIES_H */ +#endif /* GOG_XY_PLOT_H */ diff --git a/lib/goffice/graph/plugins/plot_xy/plot-types.xml.in b/lib/goffice-0.0.4/plugins/plot_xy/plot-types.xml.in similarity index 67% rename from lib/goffice/graph/plugins/plot_xy/plot-types.xml.in rename to lib/goffice-0.0.4/plugins/plot_xy/plot-types.xml.in index f35c94a984..b77139e4fa 100644 --- a/lib/goffice/graph/plugins/plot_xy/plot-types.xml.in +++ b/lib/goffice-0.0.4/plugins/plot_xy/plot-types.xml.in @@ -1,30 +1,42 @@ - - + + FALSE + backplane + backplane FALSE + backplane + + + FALSE + TRUE + backplane + backplane diff --git a/lib/goffice/graph/plugins/plot_xy/plugin.xml.in b/lib/goffice-0.0.4/plugins/plot_xy/plugin.xml.in similarity index 100% rename from lib/goffice/graph/plugins/plot_xy/plugin.xml.in rename to lib/goffice-0.0.4/plugins/plot_xy/plugin.xml.in diff --git a/lib/goffice-0.0.4/plugins/reg_linear/Makefile.am b/lib/goffice-0.0.4/plugins/reg_linear/Makefile.am new file mode 100644 index 0000000000..31324af504 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/reg_linear/Makefile.am @@ -0,0 +1,25 @@ +goffice_graph_linregdir = $(goffice_plugindir)/reg_linear +xmldir = $(goffice_graph_linregdir) +gladedir = $(goffice_graph_linregdir) + +goffice_graph_linreg_LTLIBRARIES = linreg.la +linreg_la_LDFLAGS = -module $(GOFFICE_PLUGIN_FLAGS) +linreg_la_LIBADD = $(GOFFICE_PLUGIN_LIBADD) + +linreg_la_SOURCES = gog-lin-reg.c \ + gog-lin-reg.h + +xml_in_files = plugin.xml.in reg-types.xml.in +xml_DATA = $(xml_in_files:.xml.in=.xml) + +@INTLTOOL_XML_RULE@ + +# do not use the intl-tool stuff to merge the text back +# its simpler to just use gettext directly +reg-types.xml : reg-types.xml.in + cp $< $@ + +EXTRA_DIST = $(xml_in_files) +DISTCLEANFILES = $(xml_in_files:.xml.in=.xml) + +include $(top_srcdir)/lib/goffice-0.0.4/goffice-plugins.mk diff --git a/lib/goffice-0.0.4/plugins/reg_linear/gog-lin-reg.c b/lib/goffice-0.0.4/plugins/reg_linear/gog-lin-reg.c new file mode 100644 index 0000000000..2260f833e3 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/reg_linear/gog-lin-reg.c @@ -0,0 +1,173 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-lin-reg.c : + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#include +#include "gog-lin-reg.h" +#include +#include +#include +#include +#include + +#include + +GOFFICE_PLUGIN_MODULE_HEADER; + +static GogObjectClass *gog_lin_reg_curve_parent_klass; + +static void +gog_lin_reg_curve_update (GogObject *obj) +{ + GogLinRegCurve *rc = GOG_LIN_REG_CURVE (obj); + GogSeries *series = GOG_SERIES (obj->parent); + double const *y_vals, *x_vals = NULL; + double *vx, *vy; + double x, y; + double xmin, xmax; + int i, used, tmp, nb; + + g_return_if_fail (gog_series_is_valid (GOG_SERIES (series))); + + gog_reg_curve_get_bounds (&rc->base, &xmin, &xmax); + y_vals = go_data_vector_get_values ( + GO_DATA_VECTOR (series->values[1].data)); + nb = go_data_vector_get_len ( + GO_DATA_VECTOR (series->values[1].data)); + if (series->values[0].data) { + x_vals = go_data_vector_get_values ( + GO_DATA_VECTOR (series->values[0].data)); + tmp = go_data_vector_get_len ( + GO_DATA_VECTOR (series->values[0].data)); + if (nb > tmp) + nb = tmp; + } + vx = g_new (double, nb); + vy = g_new (double, nb); + for (i = 0, used = 0; i < nb; i++) { + x = (x_vals)? x_vals[i]: i; + y = y_vals[i]; + if (!go_finite (x) || !go_finite (y)) { + if (rc->base.skip_invalid) + continue; + used = 0; + break; + } + if (x < xmin || x > xmax) + continue; + vx[used] = x; + vy[used] = y; + used++; + } + rc->R2 = rc->a0 = rc->a1 = go_nan; + if (used > 1) { + double a[2]; + regression_stat_t *stats = go_regression_stat_new (); + RegressionResult res = go_linear_regression (&vx, 1, vy, used, + TRUE, a, stats); + if (res == REG_ok) { + rc->R2 = stats->sqr_r; + rc->a0 = a[0]; + rc->a1 = a[1]; + } + go_regression_stat_destroy (stats); + } + g_free (vx); + g_free (vy); + if (rc->equation) { + g_free (rc->equation); + rc->equation = NULL; + } + gog_object_emit_changed (GOG_OBJECT (obj), FALSE); +} + +static double +gog_lin_reg_curve_get_value_at (GogRegCurve *curve, double x) +{ + GogLinRegCurve *lin = GOG_LIN_REG_CURVE (curve); + return lin->a0 + lin->a1 * x; +} + +static gchar const* +gog_lin_reg_curve_get_equation (GogRegCurve *curve) +{ + GogLinRegCurve *lin = GOG_LIN_REG_CURVE (curve); + if (!lin->equation) + lin->equation = (lin->a0 > 0.)? + g_strdup_printf ("y = %g x + %g", lin->a1, lin->a0): + g_strdup_printf ("y = %g x - %g", lin->a1, -lin->a0); + return lin->equation; +} + +static double +gog_lin_reg_curve_get_R2 (GogRegCurve *curve) +{ + return (GOG_LIN_REG_CURVE (curve))->R2; +} + +static void +gog_lin_reg_curve_finalize (GObject *obj) +{ + GogLinRegCurve *model = GOG_LIN_REG_CURVE (obj); + if (model->equation) + g_free (model->equation); + (G_OBJECT_CLASS (gog_lin_reg_curve_parent_klass))->finalize (obj); +} + +static void +gog_lin_reg_curve_class_init (GogRegCurveClass *reg_curve_klass) +{ + GObjectClass *g_object_klass = (GObjectClass *) reg_curve_klass; + GogObjectClass *gog_object_klass = (GogObjectClass *) reg_curve_klass; + + gog_lin_reg_curve_parent_klass = g_type_class_peek_parent (reg_curve_klass); + + g_object_klass->finalize = gog_lin_reg_curve_finalize; + + gog_object_klass->update = gog_lin_reg_curve_update; + + reg_curve_klass->get_value_at = gog_lin_reg_curve_get_value_at; + reg_curve_klass->get_equation = gog_lin_reg_curve_get_equation; + reg_curve_klass->get_R2 = gog_lin_reg_curve_get_R2; +} + +static void +gog_lin_reg_curve_init (GogLinRegCurve *model) +{ + model->a0 = model->a1 = model->R2 = go_nan; + model->equation = NULL; +} + +GSF_DYNAMIC_CLASS (GogLinRegCurve, gog_lin_reg_curve, + gog_lin_reg_curve_class_init, gog_lin_reg_curve_init, + GOG_REG_CURVE_TYPE) + +/* Plugin initialization */ + +G_MODULE_EXPORT void +go_plugin_init (GOPlugin *plugin, GOCmdContext *cc) +{ + gog_lin_reg_curve_register_type (go_plugin_get_type_module (plugin)); +} + +G_MODULE_EXPORT void +go_plugin_shutdown (GOPlugin *plugin, GOCmdContext *cc) +{ +} diff --git a/lib/goffice-0.0.4/plugins/reg_linear/gog-lin-reg.h b/lib/goffice-0.0.4/plugins/reg_linear/gog-lin-reg.h new file mode 100644 index 0000000000..353086b9a6 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/reg_linear/gog-lin-reg.h @@ -0,0 +1,45 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gog-lin-reg.h : + * + * Copyright (C) 2005 Jean Brefort (jean.brefort@normalesup.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +#ifndef GOG_LIN_REG_H +#define GOG_LIN_REG_H + +#include + +G_BEGIN_DECLS + +typedef struct { + GogRegCurve base; + + double a0, a1, R2; + char *equation; +} GogLinRegCurve; +typedef GogRegCurveClass GogLinRegCurveClass; + +#define GOG_LIN_REG_CURVE_TYPE (gog_lin_reg_curve_get_type ()) +#define GOG_LIN_REG_CURVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_LIN_REG_CURVE_TYPE, GogLinRegCurve)) +#define GOG_IS_LIN_REG_CURVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_LIN_REG_CURVE_TYPE)) + +GType gog_lin_reg_curve_get_type (void); + +G_END_DECLS + +#endif /* GOG_LIN_REG_H */ diff --git a/lib/goffice-0.0.4/plugins/reg_linear/plugin.xml.in b/lib/goffice-0.0.4/plugins/reg_linear/plugin.xml.in new file mode 100644 index 0000000000..e5066618e5 --- /dev/null +++ b/lib/goffice-0.0.4/plugins/reg_linear/plugin.xml.in @@ -0,0 +1,23 @@ + + + + <_name>Regression curve : linear + <_description>Linear regression curves + + + + + + + + <_description>Linear regression curve engine + + + + reg-types.xml + + <_description>Linear regression curves types + + + + diff --git a/lib/goffice-0.0.4/plugins/reg_linear/reg-types.xml.in b/lib/goffice-0.0.4/plugins/reg_linear/reg-types.xml.in new file mode 100644 index 0000000000..fea3792e5e --- /dev/null +++ b/lib/goffice-0.0.4/plugins/reg_linear/reg-types.xml.in @@ -0,0 +1,7 @@ + + + + + diff --git a/lib/goffice-0.0.4/po/ChangeLog b/lib/goffice-0.0.4/po/ChangeLog new file mode 100644 index 0000000000..05090ad189 --- /dev/null +++ b/lib/goffice-0.0.4/po/ChangeLog @@ -0,0 +1,53 @@ +2005-09-08 Jody Goldberg + + * Release 0.0.4 + +2005-09-06 Jody Goldberg + + * POTFILES.in: Add goffice/gtk/go-rotation-sel.c, + goffice/gtk/go-rotation-sel.glade, and goffice/gtk/go-rotation-sel.h. + +2005-09-01 Stepan Kasal + + * POTFILES.in: Remove goffice/utils/format.h + +2005-08-13 Morten Welinder + + * Release 0.0.3 + +2005-07-31 Ilkka Tuohela + + * fi.po: Bulk updates to Finnish translation + for new gnome.fi website. + +2005-07-04 Hendrik Richter + + * de.po: Fixed German translation by + Jens Seidel . + +2005-06-15 J.H.M. Dassen (Ray) + + * de.po: Minor fix. (Debian #313747) + +2005-06-12 Jody Goldberg + + * Release 0.0.2 + +2005-05-09 Jody Goldberg + + * Release 0.0.1 + +2005-03-29 Stepan Kasal + + * POTFILES.in: Remove goffice/utils/go-locale.[ch]. + +2005-03-07 Stepan Kasal + + * POTFILES.skip: Deleted. + * POTFILES.in: Delete goffice/cut-n-paste/egg-recent-files/* + add goffice/app/go-app.h again. + +2005-03-04 Stepan Kasal + + * POTFILES.in: Move goffice/app/go-app.h ... + * POTFILES.skip: ... here. diff --git a/lib/goffice-0.0.4/po/Makefile.in.in b/lib/goffice-0.0.4/po/Makefile.in.in new file mode 100644 index 0000000000..1a6961e7c1 --- /dev/null +++ b/lib/goffice-0.0.4/po/Makefile.in.in @@ -0,0 +1,263 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. +# +# - Modified by Owen Taylor to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize +# +# - Modified by Rodney Dawes for use with intltool +# +# We have the following line for use by intltoolize: +# INTLTOOL_MAKEFILE + +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +datarootdir = @datarootdir@ +libdir = @libdir@ +localedir = $(libdir)/locale +gnulocaledir = $(datadir)/locale +gettextsrcdir = $(datadir)/glib-2.0/gettext/po +subdir = po +install_sh = @install_sh@ +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +CC = @CC@ +GENCAT = @GENCAT@ +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist +GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = ChangeLog Makefile.in.in POTFILES.in \ +$(POFILES) $(SOURCES) +EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: $(CATALOGS) +all-no: + +$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(GENPOT) + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ + fi + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "glib"; then \ + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + done + if test "$(PACKAGE)" = "glib"; then \ + rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + fi + +check: all $(GETTEXT_PACKAGE).pot + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp + rm -fr *.o + rm -f .intltool-merge-cache + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES + rm -f *.mo *.msg *.cat *.cat.m $(GMOFILES) + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f Makefile.in.in + +distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) +dist distdir: $(DISTFILES) + dists="$(DISTFILES)"; \ + extra_dists="$(EXTRA_DISTFILES)"; \ + for file in $$extra_dists; do \ + test -f $$file && dists="$$dists $$file"; \ + done; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(GETTEXT_PACKAGE).pot + tmpdir=`pwd`; \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + echo "$$lang:"; \ + result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ + if $$result; then \ + if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi; \ + done + +# POTFILES is created from POTFILES.in by stripping comments, empty lines +# and Intltool tags (enclosed in square brackets), and appending a full +# relative path to them +POTFILES: POTFILES.in + ( posrcprefix='$(top_srcdir)/'; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' \ + -e 's/^[[].*] *//' \ + -e '/^[ ]*$$/d' \ + -e "s@^@ $$posrcprefix@" $(srcdir)/$@.in \ + | sed -e '$$!s/$$/ \\/') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lib/goffice-0.0.4/po/POTFILES.in b/lib/goffice-0.0.4/po/POTFILES.in new file mode 100644 index 0000000000..9cb43326a9 --- /dev/null +++ b/lib/goffice-0.0.4/po/POTFILES.in @@ -0,0 +1,280 @@ +# List of source files containing translatable strings. +# Please keep this file sorted alphabetically. +# +[encoding: UTF-8] +goffice/app/error-info.c +goffice/app/error-info.h +goffice/app/file.c +goffice/app/file.h +goffice/app/file-priv.h +goffice/app/go-app.h +goffice/app/go-cmd-context.c +goffice/app/go-cmd-context.h +goffice/app/go-cmd-context-impl.h +goffice/app/go-doc.c +goffice/app/go-doc-control.c +goffice/app/go-doc-control.h +goffice/app/go-doc-control-impl.h +goffice/app/go-doc.h +goffice/app/go-doc-impl.h +goffice/app/go-error-stack.h +goffice/app/goffice-app.h +goffice/app/go-object.c +goffice/app/go-object.h +goffice/app/go-plugin.c +goffice/app/go-plugin.h +goffice/app/go-plugin-loader.c +goffice/app/go-plugin-loader.h +goffice/app/go-plugin-loader-module.c +goffice/app/go-plugin-loader-module.h +goffice/app/go-plugin-service.c +goffice/app/go-plugin-service.h +goffice/app/go-plugin-service-impl.h +goffice/app/go-service.c +goffice/app/go-service.h +goffice/app/go-service-impl.h +goffice/app/io-context.c +goffice/app/io-context.h +goffice/app/io-context-priv.h +goffice/app/module-plugin-defs.h +goffice/cut-n-paste/pcre/get.c +goffice/cut-n-paste/pcre/internal.h +goffice/cut-n-paste/pcre/maketables.c +goffice/cut-n-paste/pcre/pcre.c +goffice/cut-n-paste/pcre/pcre.h +goffice/cut-n-paste/pcre/pcreposix.c +goffice/cut-n-paste/pcre/pcreposix.h +goffice/cut-n-paste/pcre/study.c +goffice/data/go-data.c +goffice/data/go-data.h +goffice/data/go-data-impl.h +goffice/data/go-data-simple.c +goffice/data/go-data-simple.h +goffice/data/goffice-data.h +goffice/drawing/god-anchor.c +goffice/drawing/god-anchor.h +goffice/drawing/god-default-attributes.c +goffice/drawing/god-default-attributes.h +goffice/drawing/god-drawing.c +goffice/drawing/god-drawing-group.c +goffice/drawing/god-drawing-group.h +goffice/drawing/god-drawing.h +goffice/drawing/god-drawing-renderer-gdk.c +goffice/drawing/god-drawing-renderer-gdk.h +goffice/drawing/god-drawing-view.c +goffice/drawing/god-drawing-view.h +goffice/drawing/god-image.c +goffice/drawing/god-image.h +goffice/drawing/god-image-store.c +goffice/drawing/god-image-store.h +goffice/drawing/god-paragraph-attributes.c +goffice/drawing/god-paragraph-attributes.h +goffice/drawing/god-property-table.c +goffice/drawing/god-property-table.h +goffice/drawing/god-shape.c +goffice/drawing/god-shape.h +goffice/drawing/god-text-model.c +goffice/drawing/god-text-model.h +goffice/goffice.c +goffice/goffice.h +goffice/goffice-priv.h +goffice/graph/goffice-graph.h +goffice/graph/gog-axis.c +goffice/graph/gog-axis.h +goffice/graph/gog-axis-prefs.glade +goffice/graph/gog-chart.c +goffice/graph/gog-chart.h +goffice/graph/gog-chart-impl.h +goffice/graph/gog-chart-prefs.glade +goffice/graph/gog-control-foocanvas.c +goffice/graph/gog-control-foocanvas.h +goffice/graph/gog-data-allocator.c +goffice/graph/gog-data-allocator.h +goffice/graph/gog-data-set.c +goffice/graph/gog-data-set.h +goffice/graph/gog-error-bar.c +goffice/graph/gog-error-bar.h +goffice/graph/gog-error-bar-prefs.glade +goffice/graph/gog-graph.c +goffice/graph/gog-graph.h +goffice/graph/gog-graph-impl.h +goffice/graph/gog-grid.c +goffice/graph/gog-grid.h +goffice/graph/gog-grid-line.c +goffice/graph/gog-grid-line.h +goffice/graph/gog-guru.c +goffice/graph/gog-guru.glade +goffice/graph/gog-guru.h +goffice/graph/gog-guru-type-selector.glade +goffice/graph/gog-label.c +goffice/graph/gog-label.h +goffice/graph/gog-legend.c +goffice/graph/gog-legend.h +goffice/graph/gog-object.c +goffice/graph/gog-object.h +goffice/graph/gog-object-xml.c +goffice/graph/gog-object-xml.h +goffice/graph/gog-object-prefs.glade +goffice/graph/gog-outlined-object.c +goffice/graph/gog-outlined-object.h +goffice/graph/gog-plot.c +goffice/graph/gog-plot-engine.c +goffice/graph/gog-plot-engine.h +goffice/graph/gog-plot.h +goffice/graph/gog-plot-impl.h +goffice/graph/gog-reg-curve-prefs.glade +goffice/graph/gog-reg-eqn-prefs.glade +goffice/graph/gog-renderer.c +goffice/graph/gog-renderer-gnome-print.c +goffice/graph/gog-renderer-gnome-print.h +goffice/graph/gog-renderer.h +goffice/graph/gog-renderer-impl.h +goffice/graph/gog-renderer-pixbuf.c +goffice/graph/gog-renderer-pixbuf.h +goffice/graph/gog-renderer-svg.c +goffice/graph/gog-renderer-svg.h +goffice/graph/gog-series.c +goffice/graph/gog-series.h +goffice/graph/gog-series-impl.h +goffice/graph/gog-style.c +goffice/graph/gog-styled-object.c +goffice/graph/gog-styled-object.h +goffice/graph/gog-style.h +goffice/graph/gog-style-prefs.glade +goffice/graph/gog-theme.c +goffice/graph/gog-theme.h +goffice/graph/gog-view.c +goffice/graph/gog-view.h +goffice/gtk/go-action-combo-color.c +goffice/gtk/go-action-combo-color.h +goffice/gtk/go-action-combo-pixmaps.c +goffice/gtk/go-action-combo-pixmaps.h +goffice/gtk/go-action-combo-stack.c +goffice/gtk/go-action-combo-stack.h +goffice/gtk/go-action-combo-text.c +goffice/gtk/go-action-combo-text.h +goffice/gtk/go-charmap-sel.c +goffice/gtk/go-charmap-sel.h +goffice/gtk/go-color-group.c +goffice/gtk/go-color-group.h +goffice/gtk/go-color-palette.c +goffice/gtk/go-color-palette.h +goffice/gtk/go-combo-box.c +goffice/gtk/go-combo-box.h +goffice/gtk/go-combo-color.c +goffice/gtk/go-combo-color.h +goffice/gtk/go-combo-pixmaps.c +goffice/gtk/go-combo-pixmaps.h +goffice/gtk/go-combo-text.c +goffice/gtk/go-combo-text.h +goffice/gtk/go-dock-band.c +goffice/gtk/go-dock-band.h +goffice/gtk/go-dock.c +goffice/gtk/go-dock.h +goffice/gtk/go-dock-item.c +goffice/gtk/go-dock-item-grip.c +goffice/gtk/go-dock-item-grip.h +goffice/gtk/go-dock-item.h +goffice/gtk/go-dock-layout.c +goffice/gtk/go-dock-layout.h +goffice/gtk/goffice-gtk.c +goffice/gtk/goffice-gtk.h +goffice/gtk/go-font-sel.c +goffice/gtk/go-font-sel.glade +goffice/gtk/go-font-sel.h +goffice/gtk/go-format-sel.c +goffice/gtk/go-format-sel.glade +goffice/gtk/go-format-sel.h +goffice/gtk/go-rotation-sel.c +goffice/gtk/go-rotation-sel.glade +goffice/gtk/go-rotation-sel.h +goffice/gtk/go-locale-sel.c +goffice/gtk/go-locale-sel.h +goffice/gtk/go-optionmenu.c +goffice/gtk/go-optionmenu.h +goffice/utils/win32-stub.c +goffice/utils/win32-stub.h +goffice/ms-compat/god-drawing-ms.c +goffice/ms-compat/god-drawing-ms-client-handler.c +goffice/ms-compat/god-drawing-ms-client-handler.h +goffice/ms-compat/god-drawing-ms.h +goffice/ms-compat/god-image-ms.c +goffice/ms-compat/god-image-ms.h +goffice/ms-compat/go-ms-parser.c +goffice/ms-compat/go-ms-parser.h +goffice/utils/datetime.c +goffice/utils/datetime.h +goffice/utils/format.c +goffice/utils/format-impl.h +goffice/utils/formats.c +goffice/utils/go-color.c +goffice/utils/go-color.h +goffice/utils/goffice-utils.h +goffice/utils/go-file.c +goffice/utils/go-file.h +goffice/utils/go-font.c +goffice/utils/go-font.h +goffice/utils/go-format.c +goffice/utils/go-format.h +goffice/utils/go-format-match.c +goffice/utils/go-format-match.h +goffice/utils/go-glib-extras.c +goffice/utils/go-glib-extras.h +goffice/utils/go-gradient.c +goffice/utils/go-gradient.h +goffice/utils/go-libxml-extras.c +goffice/utils/go-libxml-extras.h +goffice/utils/go-line.c +goffice/utils/go-line.h +goffice/utils/go-marker.c +goffice/utils/go-marker.h +goffice/utils/go-math.c +goffice/utils/go-math.h +goffice/utils/go-pattern.c +goffice/utils/go-pattern.h +goffice/utils/go-units.h +goffice/utils/regutf8.c +goffice/utils/regutf8.h +plugins/plot_barcol/gog-1.5d.c +plugins/plot_barcol/gog-1.5d.h +plugins/plot_barcol/gog-barcol.c +plugins/plot_barcol/gog-barcol.h +plugins/plot_barcol/gog-barcol-prefs.c +plugins/plot_barcol/gog-barcol-prefs.glade +plugins/plot_barcol/gog-line.c +plugins/plot_barcol/gog-line.h +plugins/plot_barcol/plot-types.xml.in +plugins/plot_barcol/plugin.xml.in +plugins/plot_boxes/gog-boxplot.c +plugins/plot_boxes/gog-boxplot.h +plugins/plot_boxes/gog-boxplot-prefs.glade +plugins/plot_boxes/plot-types.xml.in +plugins/plot_boxes/plugin.xml.in +plugins/plot_pie/gog-pie.c +plugins/plot_pie/gog-pie.h +plugins/plot_pie/gog-pie-prefs.c +plugins/plot_pie/gog-pie-prefs.glade +plugins/plot_pie/gog-pie-series.glade +plugins/plot_pie/gog-ring-prefs.glade +plugins/plot_pie/plot-types.xml.in +plugins/plot_pie/plugin.xml.in +plugins/plot_radar/gog-radar.c +plugins/plot_radar/gog-radar.h +plugins/plot_radar/plot-types.xml.in +plugins/plot_radar/plugin.xml.in +plugins/plot_surface/gog-contour-prefs.c +plugins/plot_surface/gog-contour-prefs.glade +plugins/plot_surface/gog-surface.c +plugins/plot_surface/gog-surface.h +plugins/plot_surface/plot-types.xml.in +plugins/plot_surface/plugin.xml.in +plugins/plot_xy/gog-bubble-prefs.c +plugins/plot_xy/gog-bubble-prefs.glade +plugins/plot_xy/gog-xy.c +plugins/plot_xy/gog-xy.h +plugins/plot_xy/plot-types.xml.in +plugins/plot_xy/plugin.xml.in +plugins/reg_linear/gog-lin-reg.c +plugins/reg_linear/gog-lin-reg.h +plugins/reg_linear/reg-types.xml.in +plugins/reg_linear/plugin.xml.in diff --git a/lib/goffice-0.0.4/po/am.po b/lib/goffice-0.0.4/po/am.po new file mode 100644 index 0000000000..c208c36f47 --- /dev/null +++ b/lib/goffice-0.0.4/po/am.po @@ -0,0 +1,4278 @@ +# Translations into the Amharic Language. +# Copyright (C) 2002 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnumeric package. +# Ge'ez Frontier Foundation , 2002. +# +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-02-07 17:46+EDT\n" +"Last-Translator: Ge'ez Frontier Foundation \n" +"Language-Team: Amharic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "áŽáˆ­áˆ›á‰µ" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "አጠቃላይ" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "ገጾች" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "አዲስ አንቀጽ" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "áˆáˆáŒ" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "ኩáˆáŠ©áˆ" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "á‹«áˆá‰³á‹ˆá‰€ á‹áˆ­á‹«" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "መስመር" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "የተጨማሪዠá•ሮáŒáˆ«áˆ á‹áˆ­á‹áˆ®á‰½" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "አá‹á‰¶áˆ›á‰²áŠ­" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "áˆá‹µá‰¥" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "መደቡ" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "á‹áŒ‹ (_C)" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "áŽáˆ­áˆ›á‰µ" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "መለያ" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "ዓርብ" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "ዓርብ" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "ንድá" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "ንድá" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "ደብቅ (_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "ደብቅ (_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "እርá‹áˆ›áŠ”" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "አስገባ (_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "አስገባ (_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "ረድá (_R)" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "ደብቅ (_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "áˆáˆ‰áŠ•áˆ áŠ áˆ³á‹­ (_S)" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "á‹“á‹­áŠá‰µ" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "ላክ" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr " አርእስትá¦" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "ዓርብ" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "áŠáŒ¥á‰¥" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "እርá‹áˆ›áŠ”" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "በ" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "ናሙና" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "ቀለáˆ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "መለያ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "በ" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "የá‹á‹­á‹­á‰µ መድረክ" + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "ሰርá‹" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "ስáˆ" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "ቀለáˆ" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "አስገባ (_I)" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "á‹“á‹­áŠá‰µ" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "ወሰን" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "አቀማመጥ" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "ንድá" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "ናሙና" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "&መáŒáˆˆáŒ«" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "ጽሑá" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "ዳታ (_D)" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "áˆáˆ­áŒ«á‹Žá‰½... (_T)" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "á‹“á‹­áŠá‰µ" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "አዲስ አንቀጽ" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "áˆáˆ¨áŒ" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "áŠáŒ¥á‰¥" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "የáŠá‹°áˆ ቅርጽ" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "ዘይቤ" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "ንድá" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "ቅድመ ዕይታ" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "ቀለáˆ" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "ቀለáˆ" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "አስቀáˆáŒ¥ (_S)" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "መጠንá¦" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "ዘይቤ" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "á‹“á‹­áŠá‰µ" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "መደቡ" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "ማá‹áŒ«" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "እና" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "ቀለáˆ" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "በ" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "áŠá‰µ ለáŠá‰µ" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "ንድá" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "áˆáˆ¨áŒ¥ (_S)" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "መጠንá¦" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "áˆáŠ”á‰³" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "ቀáŠ" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "ወሰን" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "&áˆáˆ­áŒ«á‹Žá‰½" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "የáŠá‰ áˆ¨á‹" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "የá‹á‹­á‹­á‰µ መድረክ" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "አይታሊክ ማድረጊያ" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "አረንጓዴ" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "አዲስ አንቀጽ" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "ገጾች" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "ቡáˆá‹«áŠ•" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "áˆá‹•ራብ" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "ኦክተá‹á‰ áˆ­" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "መለኪያ" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "ማá‹áŒ«" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "ጥá‰áˆ­" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "ሰኞ" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "ደማቅ" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "ሰማያዊ" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "ቀይ" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "ቡáˆá‹«áŠ•" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "ሰዓት" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "ዓርብ" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "ብጫ" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "አረንጓዴ" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "ማያያዣ á‰áˆáŽá‰½" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "በቀአኰáˆáŠ®á‹«" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "በቀአኰáˆáŠ®á‹«" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "በቀአኰáˆáŠ®á‹«" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "áŠáŒ­" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "በዕሴት" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "&የተለየá¦" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "ቀለáˆ" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "አቀማመጥ" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "á‹á‹­áˆ (_F)" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "áˆáˆµáˆ... (_I)" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "áˆáˆµáˆ አስገባ" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "áˆáˆ‰áŠ•áˆ áŠ áˆµá‰€áˆáŒ¥" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "á‹á‹­áˆá¦ (_F)" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "የተለመደ" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "ደማቅ" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "á‹°áˆá‰† የሚታይ እና ዘመሠያለ አጻጻá" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "አይታሊክ ማድረጊያ" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "የáŠá‹°áˆ ቅርጽ ዘይቤá¦" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "የáŠá‹°áˆ ቅርጽá¦" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "ቅድመ ዕይታ" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "መጠንá¦" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "á‰áŒ¥áˆ­" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "ቀን" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "ሰዓት" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "&መረጃ" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "ጽሑá" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "የተለየ (_P)" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "&የተለየá¦" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "áˆá‹µá‰¥á¦" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "áŽáˆ­áˆ›á‰µ" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "ቅድመ ዕይታ" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "áˆáˆáŠ­á‰µ" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "áŽáˆ­áˆ›á‰µ" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "áˆá‹•ራብ" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "የዛሬዠቀን" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "nu$" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "sun" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "እሑድ" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "ሰኞ" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "ማክሰኞ" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "ረቡዕ" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "áˆáˆ™áˆµ" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "ዓርብ" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "ቅዳሜ" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "ሜይ" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "dec#" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "ጃንዩወሪ" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "áŒá‰¥áˆ©á‹ˆáˆª" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "ማርች" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "ኤá•ረáˆ" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "ሜይ" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "áŒáŠ•" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "áŒáˆ‹á‹­" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ኦገስት" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "ሴá•ቴáˆá‰ áˆ­" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "ኦክተá‹á‰ áˆ­" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "ኖቬáˆá‰ áˆ­" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "ዲሴáˆá‰ áˆ­" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "እá‹áŠá‰µ" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "á‹áˆ¸á‰µ" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "ጥá‰áˆ­" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "ሰማያዊ" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "አረንጓዴ" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "ቀይ" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "áŠáŒ­" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "ብጫ" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "áˆáŠ•áˆ" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "አá‹á‰¶áˆ›á‰²áŠ­" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "áˆáŠ•áˆ" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "አዲስ አንቀጽ" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "á‹á‹­áˆ" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "ለጥá" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "ማርች" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "ዕሴቶች" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "አáˆá‹" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "áŠáŒ¥á‰¥" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "አድራሻ" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "ቋሚ" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "á‹áˆá‹µ" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "መስመር" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "መስመር" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "መቶኛ" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "መቶኛ" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "መቶኛ" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "መቶኛ" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "መቶኛ" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "á‹áˆá‹¶á‰½ አጥá‰" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "áˆáŠ•áˆ á‹¨áˆáˆ" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "መለያ" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "መለያ" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "áˆá‹µá‰¥á¦" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "ማተሚያ" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "ቀáŠ" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "áˆáˆ¨áŒ" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "áŠáŒ¥á‰¥" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "መቶኛ" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "መለያ" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "ቆጠራ" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "áˆáŠ•áŒ­" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "áˆáŠ•áŒ­" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "áˆáŠ•áŒ­" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% የተለመደ መጠን (_N)" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "መሀከáˆ" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "áˆáŠ•áŒ­" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "áŠáŒ¥á‰¥" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "ድርብ" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "ድርብ" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "መስመር" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "áŠáŒ¥á‰¦á‰½" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "መስመር" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/az.po b/lib/goffice-0.0.4/po/az.po new file mode 100644 index 0000000000..a2a0fe3912 --- /dev/null +++ b/lib/goffice-0.0.4/po/az.po @@ -0,0 +1,4171 @@ +# gnumeric.HEAD.po faylının AzÉ™rbaycan dilinÉ™ tÉ™rcümÉ™si +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# MÉ™tin Æmirov , 2003 +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric.HEAD\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-08-24 19:47+0300\n" +"Last-Translator: MÉ™tin Æmirov \n" +"Language-Team: Azerbaijani \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.1\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "ŞəkillÉ™ndirmÉ™" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Ümumi" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Fayllar" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Int" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +msgid "Space Before" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Yer" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "TÉ™rÉ™flÉ™mÉ™" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +msgid "Bullet Character" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "SÉ™tir" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "TÉ™fÉ™rruatlar" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Avtomatik" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "_BaÄŸla" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "ŞəkillÉ™ndirmÉ™" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etiket" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "_GizlÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "_GizlÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "Hündürlük" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "_Daxil Et" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Daxil Et" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "Alçalt" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "_GizlÉ™t" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Növ:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "BaÅŸlıq" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "KÉ™s" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Hündürlük" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "E" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "En" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "SÉ™hifÉ™ ardıcıllığı" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "RÉ™ng:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "MÉ™'lumat" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "En" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diaqram" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Ad" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Daxil Et" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "İstiqamÉ™t" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "SÉ™hifÉ™ ardıcıllığı" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Åžablon" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "İzahat" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_GizlÉ™t" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Qatar" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punto" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Yazı Növü" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "TÉ™rz" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "RÉ™ng:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "RÉ™_ng:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Qeyd Et" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Böyüklük:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "TÉ™rz:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Arxa plan:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "RÉ™_ng:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "Ö_n plan:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Naxış:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Seç..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Böyüklük:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Æsas" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ÆrÉ™b dili" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltik dillÉ™r" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "MÉ™rkÉ™zi Avropa dillÉ™ri" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Çin Dili" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kiril dillÉ™ri" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Yunan dili" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "YÉ™hudi dili" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Yapon dili" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreya dili" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Türk dili" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Yunikod" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vyetnam dili" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "QÉ™rb dillÉ™ri" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "DigÉ™r" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Yunikod (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "İstifadəçi TÉ™'yinli" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "yaşıl" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "xüsusi" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "İstiqamÉ™t" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Fayllar" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "RÉ™sm" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Qeyd Et" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Qalın" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Æyik" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Yazı növü:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Ön NümayiÅŸ" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Böyüklük:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "ÆdÉ™d" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Tarix" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Vaxt" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Faiz" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fraksiya" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "MÉ™tn" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Xüsusi" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Xüsusi" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "NümayiÅŸ:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Avstraliya" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menyu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "SeçimlÉ™r menyusu" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "İndikator Böyüklüyü" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Dropdown indikator böyüklüyü" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "İndikator BoÅŸluÄŸu" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "İndikator É™trafındakı boÅŸluq" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Yanvar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Fevral" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mart" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Aprel" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "May" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "İyun" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "İyul" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Avqust" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Sentyabr" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktyabr" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Noyabr" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Dekabr" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Qara" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Mavi" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Yaşıl" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Qırmızı" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "AÄŸ" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Yoxdur" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Avtomatik" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Yoxdur" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Yapışdır" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "Çubuq" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "KÉ™s" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "KÉ™s" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Çubuq" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "SÉ™tir" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "SÉ™tir" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "KÉ™s" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Hökmsüz ÅŸifrÉ™" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "KÉ™s" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "KÉ™s" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "KÉ™s" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "_Axtar:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "KÉ™s" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "KÉ™s" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "inumber" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Say" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "MÉ™nbÉ™" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "MÉ™nbÉ™" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "MÉ™nbÉ™" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Tarix" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "MÉ™nbÉ™" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "KÉ™s" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Mavi" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Mavi" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "SÉ™tir" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Punto" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "SÉ™tir" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/bg.po b/lib/goffice-0.0.4/po/bg.po new file mode 100644 index 0000000000..a77e4557d3 --- /dev/null +++ b/lib/goffice-0.0.4/po/bg.po @@ -0,0 +1,4256 @@ +# Bulgarian translation for gnumeric. +# Copyright (C) 2002 Free Software Foundation, Inc. +# Borislav Aleksandrov , 2002. +# Vladimir Petkov , small updates for standartization, 2004 +# +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-08-03 13:19+0300\n" +"Last-Translator: Vladimir \"Kaladan\" Petkov \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Запазването върху Ñтари файлове за този тип е забранено поради безопаÑноÑÑ‚." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Вие може да изключите тази възможноÑÑ‚ като редактирате ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ plugin.xml " +"файл." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Обектен" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, fuzzy, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "Файла Ñъдържа Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° plugin Ñ Ð½ÐµÐ²Ñрно id (%s), очакваше Ñе %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Ðе мога да чета Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° plugin от файл." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "ÐеизвеÑтно име" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ðеподържан тип на програма за зареждане \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Грешка докато подготвÑм програмата за зареждане \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Гешка по време на четене на инфо за обÑлужане #%d" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ðе мога да чета plugin инфо файл (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Файл \"%s\" не е валиден plugin инфо файл." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Грешки при четене на обÑÐ»ÑƒÐ¶Ð²Ð°Ð½Ð¸Ñ Ð·Ð° plugin Ñ id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "ÐеизвеÑтно име на plugin" + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Ðе е зададена програма за зареждане на plugin Ñ id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin-ÑŠÑ‚ нÑма id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Грешка при инициализиране на зареждане на plugin (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Грешка при зареждане завиÑимоÑтите на plugin." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ðе мога да активирам plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ðе е зададена програма за зареждане на plugin Ñ id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Грешка при зареждане завиÑимоÑтите на plugin." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Грешка при активиране на plugin обÑлужване #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Грешка при деактивиране на plugin обÑлужване #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ðе мога да Ð·Ð°Ñ€ÐµÐ´Ñ plugin." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ðе е зададена програма за зареждане на plugin Ñ id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Грешка при зареждане завиÑимоÑтите на plugin." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "ПоÑви Ñе грешка при четене на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° plugin от файл \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ðе мога да активирам plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ðе мога да деактивирам plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Грешка при четене на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° наличните plugins." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Грешка при деактивиране на plugin обÑлужване #%d." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Грешка при активиране на plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Грешка по време на инициализиране на plugin' ÑиÑтема." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "ОбÑлужването не Ñе поддържа от програмата за зареждане." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Име на модулен файл не е зададено." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ðе мога да Ð¾Ñ‚Ð²Ð¾Ñ€Ñ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ½ файл \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Модулен файл \"%s\" има грешен формат." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Файла не Ñъдържа (\"plugin_file_struct\" Ñимвол)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Файла има грешен \"magic\" номер." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "ВерÑÐ¸Ñ Ð½Ð° \"Plugin\" \"%s\" е различна от приложениета \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Динамично зареждане на модул не Ñе поддържа в тази ÑиÑтема." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ðе мога да Ð·Ð°Ñ‚Ð²Ð¾Ñ€Ñ Ð¼Ð¾Ð´ÑƒÐ» файл \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Файла не Ñъдържа Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Модула не Ñъдържа Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ \"%s\"" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Грешка по време на зареждане на plugin обÑлужване." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Инициализираща Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²ÑŠÑ‚Ñ€Ðµ в plugin върна грешка." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "ФункциÑта за чиÑтене в plugin върна грешка." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "ОÑновни" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Файла отворен Ñ id=\"%s\" нÑма опиÑание" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Грешка по време на четене на файл." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Файа, запазен Ñ id=\"%s\" нÑма опиÑание" + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Програмата за запазване на файл нÑма id" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Грешка по време на запазване на файл." + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Програма за зареждане на plugin за Python " + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Обектна СтойноÑÑ‚" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "ÐеизвеÑтен лиÑÑ‚ '%s'" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Гешка по време на четене на инфо за обÑлужане #%d" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Ñтраници" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_ОтÑтъп:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_ТърÑене за" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "ПодравнÑване" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Символ на кавички:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Проблем Ñ Ð Ð°Ð·Ð¼ÐµÑ€" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "ДиÑкретно" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "ДиÑкретно" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "ЛиниÑ" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Логични" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "ПодробноÑти" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Ðвтоматично" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Категории" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Фон" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "М_ин" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "МакÑимално" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_ПреÑичане" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Форматиране" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Етикет" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Мрежа" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Мрежа" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Шаблон" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Предварителен преглед" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð° грешка" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "ОриентациÑ" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "Ð’_ътре" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Отвън" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "Ð’_иÑоко" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "Ð’ÑŠÑ‚_ре" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Обръщане" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_ÐиÑко" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Отвън" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Показване на Етикетите" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Тип:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Легенда" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Заглавие" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Мрежа" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Плот" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "ВиÑочина" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Ширина" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð° грешка" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Стил" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Стил" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "ЦвÑÑ‚:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Ширина на Колона" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_С:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Диаграма" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Диаграма" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Име" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Стъпка 1 от 3: Избор на тип графика" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Стъпка 3 от 3: ÐаÑтройка на графика" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "ÐаÑтройка поле над Ñтраница" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Вмъкване" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Име на графика" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Ред" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "ОриентациÑ" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Плочка" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Стил" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Размер на Избор:" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "ОпиÑание" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "Те_кÑÑ‚:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Данни" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Серии" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Име на графика" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Име на графика" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_ОтÑтъп:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Ðизове" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Точка" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Шрифт" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Стил" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Запълване" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Предварителен преглед" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Шаблон" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Предварителен преглед" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Ц_вÑÑ‚:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Структури _Долу" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Форма" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Раз_мер:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Стил:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Тип:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "Фон:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_ПоÑока:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Край:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_ЦвÑÑ‚ за запълване:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Изпълване:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "Преден план:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Плочка:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Избор..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Размер:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Ðачало:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_по-Ñрко" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "по-тъмно" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "тчк" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "По подразбиране" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Гупи" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ÐрабÑки" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "БалтийÑки" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Централно европейÑки" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Гръцки" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "ИндийÑки" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "ЯпонÑки" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "КорейÑки" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "ТурÑки" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Уникод" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "ВиетнамÑки" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Западен" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Друг" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Подчертава" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Локал: " + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "ÐšÐ¾Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ð½Ð° ПирÑон" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "черен" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "морÑко Ñиньо" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "червено-оранжево" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "златно" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "тъмно Ñиньо" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "Ñиньо" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "тъмно Ñиво" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "червено" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "оранжево" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "време" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "Ñиво" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "пурпурно" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "жълто" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "зелено" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "циан" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "розово" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "ДÑÑно подравнÑване" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "ДÑÑно подравнÑване" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "ДÑÑно подравнÑване" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "бÑло" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "небеÑно Ñиньо" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "ÐаÑтройка" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "ÐаÑтройка поле под Ñтраница" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "СÑнка" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "ОриентациÑ" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Копира текущото избрано в буфера за обмен" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ðемога да Ð¾Ñ‚Ð²Ð¾Ñ€Ñ Ñ„Ð°Ð¹Ð» \"%s\"" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Файлове" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Изображение" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Избор на изображение" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Запазване на вÑичко" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Тип файл:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"е име на директориÑ" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Вие нÑмате права за запазване на\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Работна книга %s вече ÑъщеÑтвува.\n" +"ИÑкате ли да Ð·Ð°Ð¿Ð°Ð·Ñ Ð²ÑŠÑ€Ñ…Ñƒ неÑ?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Ðормално" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Удебелено" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Удебелен italic" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Ðаклонено" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Стил на Шрифт:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Шрифт:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Предварителен преглед" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Размер:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "ЧиÑло" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Пари" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "ОтчетноÑÑ‚" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Дата" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Време" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Проценти" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "Дробна" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Ðаучно" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "ТекÑÑ‚" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Специално" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "ÐаÑтройка" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Отрицателно чиÑло:" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "ЧиÑлови формати" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "КатегориÑ:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "ДеÑетични позиции:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "Евро" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Показва Структура" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Покзава ÑтойноÑтта точно както е въведена" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Формат:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Отрицателно чиÑло:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Предварителен преглед:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "С_имвол:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Формат:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Използва Разделител за 1000-ни" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Западна Европа" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Източна Европа" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "ÐзиÑ" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Ðфрика" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "ÐвÑтралиÑ" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Южна Ðфрика, ÐÑ„Ñ€Ð¸ÐºÐ°Ð°Ð½Ñ (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Бахрейн (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Йордан (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Кувейт (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Ð›Ð¸Ð±Ð¸Ñ (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "СуадитÑка ÐÑ€Ð°Ð±Ð¸Ñ (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Ð¢ÑƒÐ½Ð¸Ñ (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Ð‘ÐµÐ»Ð°Ñ€ÑƒÑ (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Ð‘ÑŠÐ»Ð³Ð°Ñ€Ð¸Ñ (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Бангладеш (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Чешка Република (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "ЛюкÑембург/ÐемÑки (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Ðова Ð—ÐµÐ»Ð°Ð½Ð´Ð¸Ñ (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Филипини (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Южна Ðфрика/ÐнглийÑки (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Ðржентина (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Чили (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "ÐšÐ¾Ð»ÑƒÐ¼Ð±Ð¸Ñ (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "КоÑта Рика (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "ДоминиканÑка Република (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Еквадор (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Гватемала (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Ð¥Ð¾Ð½Ð´ÑƒÑ€Ð°Ñ (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "МекÑико (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "Салвадор (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Уругвай (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Венецуела (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Ð˜Ð½Ð´Ð¾Ð½ÐµÐ·Ð¸Ñ (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Ð¥Ð¾Ð»Ð°Ð½Ð´Ð¸Ñ (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Ð¡Ð»Ð¾Ð²ÐºÐ¸Ñ (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Ð¡Ð»Ð¾Ð²ÐµÐ½Ð¸Ñ (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "ÐÐ»Ð±Ð°Ð½Ð¸Ñ (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "ЮгоÑÐ»Ð°Ð²Ð¸Ñ (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "ТаджикиÑтан (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Тайланд (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "ПакиÑтан (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Текущ локал:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Меню" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Вътрешна ГРЕШКÐ" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ðед" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Пнд" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Втр" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Срд" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Чтв" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Птк" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Сбт" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ÐеделÑ" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Понеделник" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Вторник" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "СрÑда" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Четвъртък" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Петък" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Събота" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Янр" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Фев" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Мрт" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Ðпр" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Май" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Юни" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Юли" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ðвг" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Сеп" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Окт" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Ðов" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Дек" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Януари" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Февруари" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Март" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Ðприл" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Май" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Юни" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Юли" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ÐвгуÑÑ‚" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Септември" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Октомври" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Ðоември" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Декември" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ИСТИÐÐ" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "ЛЪЖÐ" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Черно" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Синьо" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Циан" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Зелено" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Пурпурно" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Червено" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "БÑло" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Жълто" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "ÐфганиÑтанÑки, авгани" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "ÐлбанÑки, лек" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "ХоландÑки Ðнтилиан, гуилдер" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Ðнгола, кванза" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Ðржентина, пеÑо" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "ÐвÑтралиÑ, долар" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "ÐрубаниÑ, гуилдер" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "БарбадоÑ, долар" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Бангладеш, така" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "БългариÑ, лев" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Бахрейн, динар" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Бурунди, франк" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Бермуди, долар" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Бруней, долар" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "БоливиÑ, боливано" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "БразилиÑ, реал" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Бахами, долар" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Бутан, нгултрум" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "БотÑвана, пула" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "БеларуÑ, рубла" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Билиз, долар" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Канада, долар" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Чили, пеÑо" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Китай, юан" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "КолумбиÑ, пеÑо" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "КоÑта Рика, колон" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Куба, пеÑо" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Капе Верде, еÑкудо" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Кипър, паунд" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ЧехиÑ, крона" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Джибути, франк" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "ДоминиканÑка Република, пеÑо" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Ðлжир, алжирÑки динар" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Египет, паунд" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "ЕтиопиÑ, бир" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Фиджи, долар" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "ФолкландÑки оÑтвори, паунд" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Судан, паунд" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Гана, цеди" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Гибралтар, паунд" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "ГамбиÑ, далаÑи" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "ГвинеÑ, франк" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Гватемала, куетзал" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Гвиана, долар" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Хонк Конг, долар" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "ХондураÑ, лемпира" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "ХърватÑко, куна" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Хаити, гоуребе" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "УнгариÑ, форинт" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "ИндонезиÑ, рупии" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Израел, шекел" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "ИндиÑ, рупиÑ" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Ирак, динар" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Иран, риал" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "ИÑландиÑ, крона" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Ямайка, долар" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "ЙорданиÑ, динар" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "ЯпониÑ, йена" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "КениÑ, шилинг" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "КоморÑки, франк" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Кувейт, динар" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "КайманÑки оÑтрови, долар" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "КазакÑтан, тенге" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "ЛаоÑ, кип" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Ливан, паунд" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Шри ЛанÑка, рупии" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "ЛибериÑ, долар" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "ЛеÑото, малоти" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "ЛибиÑ, динар" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Мароко, дирхам" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Молдова, леÑ" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "МадагаÑкар, малагазийÑки франк" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Майнмар, куати" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "МонголиÑ, тунгрик" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Макао, патака" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "МавританиÑ, оугуÑ" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Малта, лира" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Мавриций, рупи" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Малави, квача" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "МекÑико, пеÑо" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "МалайзиÑ, рингит" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Мозамбик, метикал" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "ÐамибиÑ, долар" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "ÐигериÑ, ниар" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Ðикарагуа, златни кордоба" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "ÐорвегиÑ, крона" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Ðепал, рупи" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Ðова ЗеландиÑ, долар" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Панама, балбоа" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Папуа и Ðова ГвинеÑ, кина" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "ФилипинÑки оÑтрови, пеÑо" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "ПакиÑтан, рупи" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Парагвай, гуарани" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Катар, реал" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "РумъниÑ, леа" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "РуÑиÑ, рубла" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Руанда, франк" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "СуадитÑка ÐрабиÑ, риал" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Соломонови оÑтрови, долар" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "СейшелÑки оÑтрови, рупи" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Сингапур, долар" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Св. Елена, паунд" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "СловениÑ, толар" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "СловакиÑ, коруни" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Сиера Леоне, леоне" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "СомалиÑ, шилинг" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Суринам, гуйлдер" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Сан Томе и Принципи, добра" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "Салвадор, колон" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "СирийÑ, паунд" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Свазиленд, лилингжени" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Тайланд, бахт" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "ТаджикиÑтан, рубла" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "ТуниÑ, динар" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Тонга, панга" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "ТурциÑ, лира" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Тринидат и Тобаго, долар" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Тайван, нов долар" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "ТанзаниÑ, шилинг" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Украийна, гривни" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Уганда, шилинг" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Уругвай, пеÑо" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Венецуела, боливар" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Виетнам, донг" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Ванути, вату" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Самоа, тала" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Източни Караиби, долар" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Йемен, риал" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "ЮгоÑлавиÑ, нов динар" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Южна Ðфрика, ранд" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "ЗамбиÑ, квач" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Зимбабве, долар" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Без" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Плътен" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +#, fuzzy +msgid "Dash dot" +msgstr "ДатÑка крона" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Ðвтоматично" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "без" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "диаманд" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "обхват" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Структури в _ДÑÑно" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "кръг" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "кръÑÑ‚" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "звездичка" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "лента" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Сиво" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Сиво" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Сиво" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Сиво" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Сиво" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Хоризонтална Щриха" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Вертикални щрихи" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Обратни Диагонални щрихи" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Диагонални Щрихи" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Диагонални ПреÑечени" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Дебели Диагонално-преÑечени щрихи" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Тънки Хоризонтални Щрихи" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Тънки Вертикални щрихи" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Тънки обратни диагонални щрихи" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Тънки Диагонални щрихи" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Тънки Хоризонтално-преÑечени" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Тънки Диагонално-преÑечени щрихи" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Плътен Преден план" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Малки окръжноÑти" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "ПолуокръжноÑти" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Сламена" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Големи Кръгове" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Тухла" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Етикети" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "ЗначениÑ" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Грешка при обработка на ред" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Диаграма..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Вмъква Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Вмъква Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "ОблаÑÑ‚" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "ОблаÑти" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Лента" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Колона" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ЛиниÑ" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Редове за импортиране" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Линии" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "Про_центи" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "Про_центи" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Изтрива Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "Про_центи" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "Про_центи" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "Про_центи" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Изтрива Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Изтрива Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Изтрива Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "_Линейна мрежа" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Изтрива Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Изтрива Колони" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "_Линейна мрежа" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "Про_центи" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "_Линейна мрежа" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Дифинира имена" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Ред и _Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° колони" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Плот" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Грешна парола" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Плот" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Плот" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Плот" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "ПромÑна цвета на лиÑтата" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Дифинира имена" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Ðачертай" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Ðищо" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Разделител:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "градуÑи" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Разделител:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "КатегориÑ:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "_Линейна мрежа" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "РазделÑ" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Умножение" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "МножеÑтво грешки\n" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Цена" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "_Диапазон" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "РазделÑ" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "РазделÑ" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "Плот" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Про_центи" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Изтрива Колони" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Дифинира имена" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Цели чиÑла" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "КоличеÑтво" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Подръжка по Контракт" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Източник" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "ОблаÑÑ‚ на източник" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "ОблаÑÑ‚ на източник" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% от мормален размер" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Ñантиметър" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Източник" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Ðачертай" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Двойно" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Двойно" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Грешка при обработка на ред" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Грешка при обработка на ред" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Изтрива Колони" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ЛиниÑ" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Точка" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ЛиниÑ" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/ca.po b/lib/goffice-0.0.4/po/ca.po new file mode 100644 index 0000000000..762474000f --- /dev/null +++ b/lib/goffice-0.0.4/po/ca.po @@ -0,0 +1,5234 @@ +# gnumeric translation to Catalan. +# Copyright (C) 2000,2004,2005 Free Software Foundation, Inc. +# Softcatalà , 2000-2002. +# Jordi Negrevernis i Font , 2002, 2003. +# Xavier Conde Rueda , 2004,2005 +# Jordi Ivars , 2004,2005 +# Albert Gasset , 2004,2005 +# fitxer: ca.po +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-1-5 18:34+0100\n" +"Last-Translator: Softcatalà \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +# +# fitxer: src.ca.po.2 +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"S'ha deshabilitat l'opció per desar sobre fitxers antics per seguretat." + +# fitxer: src.ca.po.2 +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Podeu desactivar aquesta característica de seguretat editant el fitxer " +"plugin.xml corresponent." + +# fitxer: src.ca.po.5 +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objectiu" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"El fitxer conté informació dels connectors amb un identificador invàlid (%" +"s). S'esperava %s." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "No s'ha pogut llegir la informació dels connectors del fitxer." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nom desconegut" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Tipus de carregador \"%s\" no permès." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "S'ha produït un error mentre es preparava el carregador \"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "S'ha produït un error mentre s'escrivia la informació del servei #%d." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "No es pot llegir el fitxer d'informació dels connectors (\"%s\")." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "El fitxer \"%s\" no és un fitxer d'informació dels connectors vàlid." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" +"S'han produït errors mentre es llegia els serveis per al connector amb " +"l'identificador=\"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "L'id del connector conté caràcters invàlids (%s)." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nom de connector desconegut." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"No s'ha definit cap carregador o l'identificador és invàlid per al connector " +"amb l'identificador=\"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "El connector no té cap identificador." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "S'ha produït un error en iniciar el carregador de connector (\"%s\")." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "S'han detectat dependències de connectors cícliques." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "No s'ha pogut activar el connector amb l'identificador=\"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "No s'ha pogut trobat el connectador amb l'identificador=\"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "S'ha produït un error en activar les dependències dels connectors." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "S'ha produït un error en activar el servei dels connectors #%d." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "S'ha produït un error en desactivar el servei dels connectors #%d." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "No s'ha pogut carregar el carregador dels connectors" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "No s'ha pogut carregar el connector amb l'identificador=\"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "S'ha produït un error en carregar les dependències dels connectors." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"S'han produït errors en llegir les informacions dels connectors del fitxer " +"\"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "No s'ha pogut activar el connector \"%s\" (identificador: %s)." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "No s'ha pogut desactivar el connector \"%s\" (identificador: %s)." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" +"S'han produït errors mentre es llegia la informació sobre els connectors " +"disponibles." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"S'ha produït un error mentre es desactivava els connectors que ja no estan " +"en disc." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Els següents connectors ja no estan en disc però encara estan actius:\n" +"%s.\n" +"Hauríeu de reiniciar Gnumeric ara." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "S'han produït errors mentre s'activaven els connectors." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "S'han produït errors mentre s'iniciava el sistema de connectors" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "El carregador no té mètode set_attributes.\n" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "El carregador no té mètode load_base.\n" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "El servei '%s' no està suportat pel carregador." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "No s'ha donat el nom del fitxer del mòdul." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "No s'ha pogut obrir el fitxer del mòdul \"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "El fitxer del mòdul \"%s\" té un format invàlid." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "El fitxer no conté el símbol \"plugin_file_struct\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "El fitxer té un número màgic dolent." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "La versió del connector \"%s\" és diferent a la de l'aplicació \"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "La càrrega de mòduls dinàmicament no està suportada en aquest sistema." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "No s'ha pogut tancar el fitxer del mòdul \"%s\"." + +# fitxer: plugins.ca.po.10 +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "El fitxer no conté la funció \"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "El mòdul no conté la funció \"%s\"." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "S'ha produït un error en carregar el servei del connector." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "La funció d'inicialització dins del connector ha tornat un error." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "La funció de neteja dins del connector ha tornat un error." + +# fitxer: src.ca.po.11 +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "General" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "L'obridor de fitxers no té cap descripció" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Obridor de fitxers - %s" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "S'ha produït un error en llegir el fitxer." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "El desador de fitxers no té descripció" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Desador de fitxers - %s" + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "S'ha produït un error en desar el fitxer." + +# +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Carregador de connectors" + +# +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Carregador GObject " + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "No hi ha un atribut \"type\" en l'element \"service\"" + +# src/functions/fn-information.c:317 +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Tipus de servei desconegut: '%s'." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "S'ha produït un error mentre es llegia informació del servei." + +# fitxer: src.ca.po.4 +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"S'han de carregar els serveis abans d'activar-los (PLUGIN_ALWAYS_LOAD és " +"actiu), però la càrrega ha fallat." + +# fitxer: src.ca.po.4 +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "pàgines" + +# fitxer: src.ca.po.13 +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Sagna:" + +# +# fitxer: src.ca.po.2 +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Cerca" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +# fitxer: src.ca.po.11 +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alineació" + +# +# fitxer: src.ca.po.14 +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "_Caràcter de coma:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +# fitxer: src.ca.po.7 +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Mida del problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discreta" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Correspondència discreta" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Linial" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Correspondència lineal" + +# src/functions/fn-logical.c:231 +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Logarítmica" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Correspondència logarítmica" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detalls" + +# src/functions/fn-information.c:308 src/workbook-format-toolbar.c:649 +# fitxer: plugins.ca.po.4 +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automàtic" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categories entre eti_quetes" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Límits" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "Mí_n" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "Mà_x" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "" + +# fitxer: src.ca.po.9 +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etiqueta" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Correspondència" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Posició" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nterior" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "E_xterior" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "Al_t" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Interior" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Inverteix l'eix" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Baix" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "Exteri_or" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "Mo_stra etiquetes" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tipus:" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Llegenda" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Títol" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Graella" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Eix X" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Eix Y" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Eix Z" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Eix circular" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Eix radial" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Traça" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Alçada" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Amplada" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "No es visualitza la barra d'errors" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Es visualitza la barra d'error positiva" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Es visualitza la barra d'error negativa" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Es visualitza la barra d'error sencera" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Categoria d'error" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Estil" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Valors" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Colo_r:" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "Visualit_za:" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Cap\n" +"Absolut\n" +"Relatiu\n" +"Percentatge" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "Amplada de _línia:" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "Am_plada:" + +# fitxer: src.ca.po.9 +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Gràfic" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Gràfic" + +# fitxer: plugins.ca.po.8 +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nom" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Pas 1 de 2: seleccioneu el tipus de gràfic" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Pas 2 de 2: personalitzeu el gràfic" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Personalitza el gràfic" + +# fitxer: src.ca.po.1 +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Insereix" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Ti_pus de traçat" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Gràfic del GNOME Office" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "M_ou endavant" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Mou al _davant de tot" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Mou end_arrere" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Mou al darrere de _tot" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Ordena" + +# fitxer: src.ca.po.1 +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definició" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Patró" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Estil" + +# fitxer: src.ca.po.5 +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Mostra" + +# fitxer: src.ca.po.13 +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Descripció" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dades" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Sèries" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Motor de traçat" + +# +# fitxer: src.ca.po.9 +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Tipus de traçat" + +# fitxer: src.ca.po.9 +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Tema de gràfic" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Ãndex:" + +# +# fitxer: src.ca.po.11 +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Paràmetres" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punt" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Tipus de lletra" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Estil" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 colors\n" +"Brillantor" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Omple" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Línia" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marcador" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Contorn" + +# +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Co_lor:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Cap\n" +"Patró\n" +"Gradient\n" +"Imatge" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "C_olor del contorn:" + +# +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Forma:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_Mida:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "_Estil:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Tipus:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "F_ons:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Direcció:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Final:" + +# +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Color de _farciment:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Adapta:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Primer pla:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Patró:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Selecciona..." + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Mida:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Principi:" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "més _brillant" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "més _fosc" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +# fitxer: src.ca.po.11 +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"estirat\n" +"empaperat" + +# +# fitxer: src.ca.po.11 +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Per defecte" + +# fitxer: src.ca.po.11 +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Àrab" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Bàltic" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Centreeuropeu" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Xinès" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Ciríl·lic" + +# +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grec" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebreu" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indi" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonès" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Coreà" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turc" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamita" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Occidental" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Altres" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Àrab (IBM-864)" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Àrab (IBM-864-I)" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Àrab (ISO-8859-6)" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Àrab (ISO-8859-6-E)" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Àrab (ISO-8859-6-I)" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Àrab (MacArabic)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Àrab (Windows-1256)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armeni (ARMSCII-8)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Bàltic (ISO-8859-13)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Bàltic (ISO-8859-4)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Bàltic (Windows-1257)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Cèltic (ISO-8859-14)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Centreeuropeu (IBM-852)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Centreeuropeu (ISO-8859-2)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Centreeuropeu (MacCE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Centreeuropeu (Windows-1250)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Xinès simplificat (GB18030)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Xinès simplificat (GB2312)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Xinès simplificat (GBK)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Xinès simplificat (HZ)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Xinès simplificat (Windows-936)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Xinès tradicional (Big5)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Xinès tradicional (Big5-HKSCS)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Xinès tradicional (EUC-TW)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croata (MacCroatian)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Ciríl·lic (IBM-855)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Ciríl·lic (ISO-8859-5)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Ciríl·lic (ISO-IR-111)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Ciríl·lic (KOI8-R)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Ciríl·lic (MacCyrillic)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Ciríl·lic (Windows-1251)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Rus (CP-866)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ucraïnès (KOI8-U)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ucraïnès (MacUkrainian)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Anglès (ASCII)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgià (GEOSTD8)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grec (ISO-8859-7)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grec (MacGreek)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grec (Windows-1253)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebreu (IBM-862)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebreu (ISO-8859-8-E)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebreu (ISO-8859-8-I)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebreu (MacHebrew)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebreu (Windows-1255)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandès (MacIcelandic)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonès (EUC-JP)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonès (ISO-2022-JP)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonès (Shift_JIS)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Coreà (EUC-KR)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Coreà (ISO-2022-KR)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Coreà (JOHAB)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Coreà (UHC)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nòrdic (ISO-8859-10)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Romanès (MacRomanian)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Romanès (ISO-8859-16)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Europa del sud (ISO-8859-3)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tailandès (TIS-620)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turc (IBM-857)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turc (ISO-8859-9)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turc (MacTurkish)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turc (Windows-1254)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Definit per l'usuari" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamita (TCVN)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamita (VISCII)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamita (VPS)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamita (Windows-1258)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hebreu visual (ISO-8859-8)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Occidental (IBM-850)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Occidental (ISO-8859-1)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Occidental (ISO-8859-15)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Occidental (MacRoman)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Occidental (Windows-1252)" + +# src/functions/fn-logical.c:231 +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Localització: " + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Direcció de la conversió" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Aquest valor determina quin test de l'iconv es realitzarà." + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "negre" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "marró clar" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "or marró" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "verd fosc #2" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "blau marí" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "blau fosc" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "porpra #2" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "gris molt fosc" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "vermell fosc" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "vermell taronja" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "or" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "verd fosc" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "blau apagat" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blau" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "porpra apagat" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "gris fosc" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "vermell" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "taronja" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "llima" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "verd apagat" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "blau apagat #2" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "blau cel #2" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "porpra" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "gris" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "taronja brillant" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "groc" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "verd" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cian" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "blau brilant" + +# fitxer: src.ca.po.10 +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "vermell porpra" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "gris clar" + +# +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "taronja clar" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "groc clar" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "verd clar" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "cian clar" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "blau clar" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "porpra clar" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "blanc" + +# fitxer: src.ca.po.12 +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "blau porpra" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "porpra fosc" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "blau cel" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "personalitzat" + +# +# fitxer: src.ca.po.12 +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Color personalitzat..." + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Tipus d'ombra" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientació" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Amplada preferida" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Alçada preferida" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Enganxa la barra d'eines" + +# fitxer: src.ca.po.12 +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Desenganxa la barra d'eines" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "No es pot obrir el fitxer '%s'" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Tots els fitxers" + +# +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Imatges" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Selecciona una imatge" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Anomena i desa" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Tipus de fitxer:" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"L'extensió del fitxer proporcionada no concorda amb la del tipus de fitxer " +"escollit. Voleu utilitzar aquest nom de totes maneres?" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"és el nom d'un directori" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"No teniu els permisos necessaris per desar a\n" +"%s" + +# fitxer: src.ca.po.3 +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Existeix un fitxer anomenat %s a %s.\n" +"\n" +"Voleu desar-hi a sobre?" + +# fitxer: src.ca.po.13 +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Negreta" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Negreta cursiva" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Cursiva" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +# fitxer: src.ca.po.11 +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Estil del tipus de lletra:" + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Tipus de lletra:" + +# fitxer: src.ca.po.11 +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Previsualització" + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Mida:" + +# fitxer: src.ca.po.14 +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Nombre" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Moneda" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Financer" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Data" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Hora" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentatge" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fracció" + +# fitxer: src.ca.po.7 +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Científic" + +# +# fitxer: src.ca.po.14 +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Especial" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personalitzat" + +# +# fitxer: src.ca.po.8 +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format de nombre negatiu" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formats de nombres" + +# +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegoria:" + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Nombre de deci_mals:" + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Mostra quantitats en estils tradicionals financers." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Mostra i entra valors com a cadenes sense interpretació." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Mostra quantitats monetàries." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Mostra dates i opcionalment l'hora del dia." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Mostra valors numèrics amb un nombre fixat de decimals." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Mostra les hores del dia." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Mostra valors en la millor aproximació fraccional." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Mostra els valors com a percentatges." + +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Mostra valors en escala de potència de 10." + +# +# fitxer: src.ca.po.2 +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "C_odi de format:" + +# +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Format de nombre negatiu:" + +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Previsualització:" + +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "_Símbol:" + +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Selecciona un format apropiat automàticament." + +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Especifica un format d'estil XL directament" + +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +# fitxer: src.ca.po.1 +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Usa el separador per als milers" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europa occidental" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europa oriental" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Amèrica del nord" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Amèrica central i del sud" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Àsia" + +# +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Àfrica" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Austràlia" + +# fitxer: src.ca.po.8 +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Estats Units/Anglès (C)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sudàfrica Africà (af_ZA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiòpia/Amàric (am_ET)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Emirats Àrabs Units (ar_AE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algèria (ar_DZ)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egipte (ar_EG)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Ãndia/Aràbic (ar_IN)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq (ar_IQ)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordània (ar_JO)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Lebanon (ar_LB)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Líbia (ar_LY)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marroc (ar_MA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Aràbia Saudí (ar_SA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Síria (ar_SY)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tuníssia (ar_TN)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Ièmen (ar_YE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaijan (az_AZ)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Bielorússia (be_BY)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgària (bg_BG)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Ãndia/Bengalí (bn_IN)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "França/Bretó (br_FR)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bòsnia i Herzegovina (bs_BA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Espanya/Català (ca_ES)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "República txeca (cs_CZ)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Gran Bretanya/Gal·lès (cy_GB)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dinamarca (da_DK)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Àustria (de_AT)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Bèlgica/Alemany (de_BE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Suïssa/Alemany (de_CH)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Alemanya (de_DE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburg/Alemany (de_LU)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grècia (el_GR)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Austràlia (en_AU)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canadà/Anglès (en_CA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Gran Bretanya (en_GB)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Anglès (en_HK)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlanda (en_IE)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Ãndia/Anglès (en_IN)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nova Zelanda (en_NZ)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipines (en_PH)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/Anglès (en_SG)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Estats Units/Anglès (en_US)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Sudafricà/Anglès (en_ZA)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +# +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolívia (es_BO)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Xile (es_CL)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colòmbia (es_CO)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "República Dominicana (es_DO)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Equador (es_EC)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Espanya (es_ES)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +# fitxer: src.ca.po.8 +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Hondures (es_HN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mèxic (es_MX)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panamà (es_PA)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Perú (es_PE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Estats Units/Espanyol (es_US)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Veneçuela (es_VE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estònia (et_EE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Espanya/Basc (eu_ES)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlàndia/Finès (fi_FI)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Illes Faroe (fo_FO)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Bèlgica/Francès (fr_BE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canadà/Francès (fr_CA)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Suïssa/Francès (fr_CH)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "França (fr_FR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlanda/Gaèlic (ga_IE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Gran Bretanya/Escocès Gaèlic (gd_GB)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Espanya/Gallec (gl_ES)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Gran Bretanya/Manx Gaèlic (gv_GB)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Ãndia/Hindú (hi_IN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croàcia (hr_HR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hungria (hu_HU)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armènia (hy_AM)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonèsia (id_ID)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islàndia (is_IS)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Suïssa/Italià (it_CH)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Itàlia (it_IT)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebreu (iw_IL)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japó (ja_JP)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Geòrgia (ka_GE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Groenlàndia (kl_GL)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Corea (ko_KR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Gran Bretanya/Cornish (kw_GB)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lituània (lt_LT)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Letònia (lv_LV)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nova Zelanda/Maorí (mi_NZ)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedònia (mk_MK)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Ãndia/Marathi (mr_IN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malàisia (ms_MY)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Bèlgica/Flamenc (nl_BE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Països Baixos (nl_NL)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Noruega/Nynorsk (nn_NO)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Noruega/Bokmal (no_NO)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "França/Occità (oc_FR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polònia (pl_PL)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasil (pt_BR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rússia (ru_RU)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ucraïna/Rus (ru_UA)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Noruega/Saami (se_NO)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Eslovàquia (sk_SK)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Eslovènia (sl_SI)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albània (sq_AL)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Iugoslàvia (sr_YU)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlàndia/Suec (sv_FI)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Suècia (sv_SE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Ãndia/Tamil (ta_IN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Ãndia/Telugu (te_IN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tajikistan (tg_TJ)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tailàndia (th_TH)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiòpia/Tigrinya (ti_ET)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipines/Tagalog (tl_PH)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turquia (tr_TR)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rússia/Tartar (tt_RU)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ucraïna (uk_UA)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Paquistan (ur_PK)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Bèlgica/Való (wa_BE)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Estats Units/Yiddish (yi_US)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Xina (zh_CN)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Xinès (zh_HK)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/Xinès (zh_SG)" + +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +# +# fitxer: src.ca.po.15 +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Localització actual:" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menú" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "El menú d'opcions" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Mida de l'indicador" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Espaiat de l'indicador" + +# fitxer: src.ca.po.9 +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Espai al voltant de l'indicador" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dg" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Dl" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Dt" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Dc" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Dj" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Dv" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Ds" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Diumenge" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Dilluns" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Dimarts" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Dimecres" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Dijous" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Divendres" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Dissabte" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Gen" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Març" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Abr" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Maig" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Juny" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ago" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Set" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Oct" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Des" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Gener" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Febrer" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Març" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Abril" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Maig" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juny" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juliol" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Agost" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Setembre" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Octubre" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Novembre" + +# fitxer: src.ca.po.11 +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Desembre" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "cert" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "fals" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Negre" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Blau" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cian" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Verd" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Vermell" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Blanc" + +# fitxer: src.ca.po.2 +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Groc" + +# fitxer: src.ca.po.2 +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Emirats Àrabs Units, dirhams" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistan, afgans" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albània, leke" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armènia, drams" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Antilles Holandeses, guilders" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanza" + +# +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, pesos" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Austràlia, dòl·lars" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, guilders" + +# fitxer: src.ca.po.2 +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaijan, manats" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bòsnia i Herzegovina, Marka Convertible" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dòl·lars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangla Desh, taka" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgària, leva" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, dinars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, francs" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermudes, dòl·lars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei, dòl·lars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolívia, bolivià" + +# +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasil, reial" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahames, dòl·lars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrum" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pulas" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dòl·lars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canadà, dòl·lars" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo/Kinshasa, francs congolenys" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Suïssa, francs" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Xile, pes" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Xina, yuan renminbi" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colòmbia, pes" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, colones" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, pes cubà" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cap Verd, escuts" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Xipre, lliura" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "República txeca, corona" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, francs" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dinamarca, corona" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "República dominicana, pes dominicà" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algèria, dinar algerià" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estònia, corona" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egipte, lliures" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nakfa" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiòpia, birr" + +# fitxer: src.ca.po.4 +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Països de la zona euro, euro" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Illes Falkland (Malvines), lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Regne Unit, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Geòrgia, lari" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedis" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gàmbia, dalasi" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, francs" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzals" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guaiana, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Hondures, lempires" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croàcia, kuna" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haití, gourdes" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hongria, florins" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonèsia, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, shekels" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Illa de Man, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Ãndia, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rials" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islàndia, corones" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordània, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japò, iens" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstan, soms" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambòia, riels" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comoros, francs" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Corea (Nord), wons" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Corea (Sud), wons" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Illes Caiman, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakstan, tenges" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kips" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanesa, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Libèria, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, malotis" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lituània, litais" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Letònia, latis" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Líbia, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marroc, dirhams" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldàvia, leis" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedònia, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), kiyats" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongòlia, tugrikis" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, pataques" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritània, ouguiyas" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Maurici, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldives (Illes Maldives), rufiyaa" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwachas" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mèxic, pesos" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malàisia, ringgits" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Moçambic, meticais" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namíbia, dòl·lar" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigèria, nairas" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaràgua, or de Còrdoba" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Noruega, corona" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rúpia del Nepal" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nova Zelanda, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rial" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panamà, balboa" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Perú, nous sols" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nova Guinea, kina" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipines, pesos" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Paquistan, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguai, guaraní" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatari, rials" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, leis" + +# +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, francs de ruanda" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Arabia Saudí, riyals" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Illes Salomó, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seixels, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Suècia, corones" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Sta. Helena, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Eslovènia, tòlars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Eslovàquia, corones" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leones" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luiginis" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, guilders" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tomé i Príncipe, dobras" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, colons" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Síria, lliures" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swazilàndia, lilangeni" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tailàndia, bahts" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tajikistan, rúpies" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manats" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tuníssia, dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'anga" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turquia, lires" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinitat i Tobago, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, dòl·lar de tuvalu" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, nou dòl·lar" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ucraïna, hryvnia" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Estats Units d'Amèrica, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, pes" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, sums" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Veneçolà, bolívar" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, dong" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Carib Oriental, dòl·lars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Iemen, rials" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Iugoslàvia, nous dínars" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Sudàfricà, rands" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zàmbia, kwacha" + +# fitxer: src.ca.po.3 +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dòl·lar de Zimbabwe" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Cap" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Sòlid" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Ratlla" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Punt" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Ratlla punt" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Ratlla punt punt" + +# src/functions/fn-information.c:308 src/workbook-format-toolbar.c:649 +# fitxer: src.ca.po.12 +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automàtica (%s)" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "cap" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "quadrat" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamant" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triangle abaix" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triangle amunt" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triangle a la dreta" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triangle a l'esquerra" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "cercle" + +# fitxer: plugins.ca.po.9 +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "creu" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisc" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "barra" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "mitja barra" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "papallona" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "Gris 75%" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "Gris 50%" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "Gris 25%" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "Gris 12.5%" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "Gris 6.25%" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Línia horitzontal" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Línia vertical" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Línia diagonal invertida" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Línia diagonal" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Línies creuades en diagonal" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Línies gruixudes creuades en diagonal" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Línia horitzontal prima" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Línia vertical prima" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Línia diagonal invertida prima" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Línia diagonal prima" + +# fitxer: src.ca.po.12 +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Línies primes creuades en horitzontal" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Línies creuades en diagonal primes" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Sòlid en primer pla" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Cercles petits" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semicercles" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Cercles grans" + +# fitxer: src.ca.po.11 +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Maons" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiquetes" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valors" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Barres d'error" + +# fitxer: src.ca.po.11 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "Traçat bar/col" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "So_breposa:" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Separació entre grups com a percentatge de l'amplada de barra/columna" + +# +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Buit:" + +# +# fitxer: src.ca.po.11 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "Traçat línia" + +# +# fitxer: src.ca.po.11 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "Traçat àrea" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Barres adjacents en 3D" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Columnes adjacents en 3D" + +# +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Barres de percentatge en 3D" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Columnes de percentatge en 3D" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Barres apilades en 3D" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Columnes apilades en 3D" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Barres adjacents" + +# fitxer: src.ca.po.11 +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Columnes adjacents" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Barres horitzontals en 3D adjacents agrupades per categories majors i menors." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Barres horitzontals adjacents agrupades per categories majors i menors." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Columnes verticals en 3D adjacents agrupades per categories majors i menors." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Columnes verticals adjacents agrupades per categories majors i menors." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Àrea" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Traçat d'àrees." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Àrees" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Barra" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Columna" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Línia" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Traçat de línia." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Línies" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Categories menors apilades com a percentatges del total menor, en barres " +"horitzontals en 3D, agrupades per categoria major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Categories menors apilades com a percentatges del total menor, en barres " +"verticals en 3D, agrupades per categoria major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Categories menors apilades com a percentatges del total menor, en barres " +"horitzontals, agrupades per categoria major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Categories menors apilades com a percentatges del total menor, en barres " +"verticals, agrupades per categoria major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Categories menors apilades en barres horitzontals en 3D, agrupades per " +"categoria major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Categories menors apilades en barres horitzontals agrupades per categoria " +"major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Categories menors apilades en columnes verticals en 3D, agrupades per " +"categoria major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Categories menors apilades en columnes verticals agrupades per categoria " +"major." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Àrees de percentatge" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Barres de percentatge" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Columnes de percentatges" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Línies de percentatge" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Traçat d'àrees de percentage." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Traçat de línies de pecentatge." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Àrees apilades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Barres apilades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Columnes apilades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Línies apilades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Traçat d'àrees apilades." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Traçat de línies apilades." + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Línies no marcades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Línies de percentatge no marcades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Línies apilades no marcades" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Motor de traçador d'àrees" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Motor de traçador de bar/col" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Gràfic : barra/columna/línia/àrea" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Tipus de traçat 1.5d per defecte" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Motor de traçador de línia" + +# fitxer: src.ca.po.10 +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Traçats de línia, d'àrees, de barres i de columnes." + +# +# fitxer: src.ca.po.9 +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Traça" + +# fitxer: src.ca.po.4 +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "El patró de cerca és invàlid." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +# +# fitxer: src.ca.po.9 +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Traça" + +# +# fitxer: src.ca.po.9 +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Traça" + +# +# fitxer: src.ca.po.9 +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Traça" + +# fitxer: src.ca.po.10 +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Motor de traçador de bar/col" + +# fitxer: src.ca.po.10 +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Gràfic: traçats radials" + +# fitxer: src.ca.po.10 +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Tipus de traçat de superfície per defecte" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "Traçat de pastís" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "Traçat d'anells" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s punt %d\n" +"Valor %g (%g)" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Graus en el sentit horari des de les 3 en punt" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Els trossos comencen _a:" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"La distància que cada tros se separa del centre mesurada com a percentatge " +"del radi del pastís" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Separació del tros:" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Varia colors segons el tros" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "graus" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"La distància que aquest tros se separa del centre mesurada com a percentatge " +"del radi del pastís" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separació:" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Mida del cen_tre" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Pastís en 3D" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Pastís separat en 3D" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Totals majors com a percentatges amb cada tros subdividit en pastissos " +"secundaris." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Totals majors com a percentatges amb cada tros subdividit en barres apilades " +"secundàries." + +# +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Pastís múltiple" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Barres pastís múltiple" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Percentatge de cada contribuïdor mostrat en un anell per a cada sèrie amb " +"els trossos de l'últim anell separats." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Percentatge de cada contribuïdor mostrat en un anell per a cada sèrie." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentatge de cada contribuïdor en un pastís en 3D." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Percentatge de cada contribuïdor amb trossos en 3D separats a part." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentatge de cada contribuïdor amb trossos separats a part." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentatge de cada contribuïdor." + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Pastís" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Anell" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Pastís separat" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Anell separat" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Gràfic: pastís/anell" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Tipus de pastís per defecte" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Traçats de pastís i d'anell" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Motor de traçador de pastissos" + +# fitxer: src.ca.po.10 +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Motor de traçador d'anells" + +# +# fitxer: src.ca.po.10 +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "Traçat radar" + +# +# fitxer: src.ca.po.10 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "Traçat radar d'àrees" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Radar d'àrees" + +# +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Traçat de radar d'àrees" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Radar de punts" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Traçat de radar amb punts" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Traçat de radar." + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Gràfic: traçats radials" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Tipus de traçat de radar per defecte" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Motor de traçador d'àrees de radar" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Motor de traçador de radar" + +# fitxer: src.ca.po.10 +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Traçats radials/de radar" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "Nombre de tro_ssos:" + +# fitxer: src.ca.po.10 +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "Contorn del traçat" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contorn" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Traçat de contorn." + +# +# fitxer: src.ca.po.10 +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Superfície" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Motor de traçador de contorn" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Gràfics de superfície" + +# fitxer: src.ca.po.10 +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Gràfics de superfície" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% de la mida predeterminada" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_D" + +# +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dià_metre" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Mostra els valors _negatius" + +# +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Super_fície" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bombolles escalades a" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "Mida repre_sentada per:" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Varia colors segons la bombolla" + +# +# fitxer: src.ca.po.10 +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "Traçat XY" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "Traçat bombolla" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bombolla" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Barres d'error Y" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "Barres d'error X" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Interpola linealment entre punts multidimensionals, amb marques a cada punt." + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:3 +#, fuzzy +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpola linealment entre punts multidimensionals, amb marques a cada punt." + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:4 +#, fuzzy +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Interpola linealment entre punts multidimensionals." + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Marques a cada punt." + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "Punts multidimensionals amb cercle a cada punt." + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Traça X, Y i mida de la bombolla." + +# fitxer: src.ca.po.10 +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Línies XY" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Punts XY" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Línies XY" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "Traçats en 2D" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "Motor de traçador dispers en 2D" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Motor de traçador de bombolles" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Gràfic: XY/dispers/bombolla" + +# fitxer: src.ca.po.10 +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Tipus de traçat dispers per defecte" diff --git a/lib/goffice-0.0.4/po/cs.po b/lib/goffice-0.0.4/po/cs.po new file mode 100644 index 0000000000..38f448ea18 --- /dev/null +++ b/lib/goffice-0.0.4/po/cs.po @@ -0,0 +1,4200 @@ +# Gnumeric Czech translation +# Copyright (c) 1999,2000,2001,2002 The Free Software Foundation +# Copyright (C) 2003, 2004, 2005 Miloslav Trmac +# Petr Vyhnalek , 1999. +# David Sauer , 1999. +# Partially based on Slovak translation by Stanislav Visnovsky , 2002. +# Michal Bukovjan , 2002,2003. +# Miloslav Trmac , 2003, 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-02-22 14:20+0100\n" +"Last-Translator: Miloslav Trmac \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "Není platný název souboru v UTF-8." + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "Uložení pÅ™es staré soubory tohoto typu je kvůli bezpeÄnosti vypnuto." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Tuto bezpeÄnostní funkci lze vypnout úpravou odpovídajícího souboru plugin." +"xml." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektivní" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Soubor obsahuje informace o zásuvném modulu s neplatným id (%s), oÄekáváno %" +"s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Nelze pÅ™eÄíst informaci o zásuvném modulu ze souboru." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Neznámý název" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Nepodporovaný typ naÄítaÄe \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Chyba pÅ™i přípravÄ› naÄítaÄe \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Chyba pÅ™i Ätení informací o službÄ› #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Není možné pÅ™eÄíst soubor s informací o zásuvném modulu (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Soubor \"%s\" není platný soubor s informací o zásuvném modulu." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Chyby pÅ™i Ätení služeb pro zásuvný modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Id zásuvného modulu obsahuje neplatné znaky (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Neznámý název zásuvného modulu." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Pro zásuvný modul s id=\"%s\" není definovaný naÄítaÄ nebo má neplatné id." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Zásuvný modul nemá id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Chyba pÅ™i inicializaci naÄítaÄe modulu (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "ZjiÅ¡tÄ›na cyklická závislost mezi zásuvnými moduly." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Nelze aktivovat zásuvný modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Nelze nalézt zásuvný modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Chyba pÅ™i aktivaci závislostí zásuvného modulu." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Chyba pÅ™i aktivaci služby zásuvného modulu #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Chyba pÅ™i deaktivaci služby zásuvného modulu #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Nelze naÄíst naÄítaÄ zásuvného modulu." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Nelze naÄíst zásuvný modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Chyba pÅ™i naÄítání závislostí zásuvného modulu." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Nastala chyba pÅ™i naÄítání informací o zásuvném modulu se souboru \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Nelze aktivovat zásuvný modul \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Nelze deaktivovat zásuvný modul \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Chyby pÅ™i Ätení informací o dostupných zásuvných modulech." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Chyba pÅ™i deaktivaci zásuvných modulů, které již nejsou na disku." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Následující zásuvné moduly již nejsou na disku, ale jsou stále aktivní:\n" +"%s.\n" +"MÄ›li byste nyní restartovat aplikaci Gnumeric." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Chyby pÅ™i aktivaci zásuvných modulů." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Chyby pÅ™i inicializaci systému zásuvných modulů." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "NaÄítaÄ nemá metodu set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "NaÄítaÄ nemá metodu load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "Služba '%s' není podporována l." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nezadaný název souboru s modulem." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Soubor s modulem \"%s\" nelze otevřít." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Soubor s modulem \"%s\" má neplatný formát." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Soubor neobsahuje (symbol \"plugin_file_struct\")." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Soubor má chybné magické Äíslo." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Verze modulu \"%s\" je jiná než verze aplikace \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamické naÄítání modulů není na tomto systému podporováno." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Nelze uzavřít soubor s modulem \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Soubor neobsahuje funkci \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modul neobsahuje funkci \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Chyba pÅ™i naÄítání služby pro zásuvné moduly." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "InicializaÄní funkce v zásuvném modulu vrátila chybu." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "ÄŒistící funkce v zásuvném modulu vrátila chybu." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "VÅ¡eobecné" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "OtvíraÄ souborů nemá popis" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "OtvíraÄ souborů - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Chyba pÅ™i Ätení souboru." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "UkladaÄ souborů s nemá popis" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "UkladaÄ souborů - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Chyba pÅ™i ukládání souboru." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "NaÄítaÄ zásuvných modulů" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "NaÄítaÄ GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Chybí atribut \"type\" v elementu \"service\"." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Neznámý typ služby: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Chyba pÅ™i Ätení informací o službÄ›." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"PÅ™ed aktivací je nutné službu naÄíst (je nastaven PLUGIN_ALWAYS_LOAD), ale " +"naÄítání selhalo." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "stran" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Odsazení:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Hledat" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Zarovnání" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Znak u_vozovek:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Velikost problému" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskrétní" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Diskrétní mapování" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineární" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Lineární mapování" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logaritmické mapování" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Podrobnosti" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatické" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Kategorie mezi _znaÄkami" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Kategorie mezi _titulky" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategorie" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Hranice" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "H_lavní znaÄky" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Ve_dlejší znaÄky" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_NapříÄ" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formát" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Titulek" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "VedlejšíMřížka" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "HlavníMřížka" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Hlavní znaÄky" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mapování" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Vedlejší znaÄky" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "UmístÄ›ní" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "Uv_nitÅ™" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Okolo" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Vysoko" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_UvnitÅ™" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Invertovat osu" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "Ní_zko" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Okolo" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Zobrazit jmenovky" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Typ:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titulek" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Mřížka" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Osa X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Osa Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Osa Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Kruhová osa" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radiální osa" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Graf" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "V" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Výška" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "Å " + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Šířka" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Sloupec chyby nezobrazován" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Zobrazován kladný sloupec chyby" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Zobrazován záporný sloupec chyby" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Zobrazován celý sloupec chyby" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Kategorie chyby" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Styl" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Hodnoty" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "_Barva:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "Z_obrazovat:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Žádné\n" +"Absolutní\n" +"Relativní\n" +"Procenta" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "Šířka _Äáry:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Šířka:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Graf" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Název" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Krok 1 ze 2: Vyberte typ grafu" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Krok 2 ze 2: Upravte graf" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Upravit graf" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Vlož_it" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "_Typ grafu" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Graf GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Táhnout v_pÅ™ed" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "_Vytáhnout dopÅ™edu" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "T_laÄit vzad" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "_ZatlaÄit dozadu" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Řád" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definice" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Vzorek" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Styl" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Zobrazit\n" +"ukázku" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Popis" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Řady" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Kreslicí engine" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Typ grafu" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Téma grafu" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Index:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Nastavení" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Hodnota" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d × %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Písmo" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Styl" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 barvy\n" +"Jas" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Výplň" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Čára" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "OznaÄení" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Obrys" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Barva:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Žádné\n" +"Vzorek\n" +"PÅ™echod\n" +"Obrázek" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Barva _okraje:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Tvar:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_Velikost:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "_Styl:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Typ:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Pozadí" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_SmÄ›r:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Konec:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Barva vyplnÄ›ní:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_PÅ™izpůsobit:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_PopÅ™edí:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Vzorek:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Vybrat..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Velikost:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_PoÄátek:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_jasnÄ›jší" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_tmavší" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "bodů" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"roztažený\n" +"tapeta" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Výchozí" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabské" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltské" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "StÅ™edoevropské" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Čínské" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Azbuka" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Řecké" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebrejské" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indické" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonské" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korejské" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turecké" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamské" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Západní" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Jiné" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabské (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabské (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabské (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabské (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabské (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabské (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabské (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Arménské (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltské (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltské (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltské (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltské (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "StÅ™edoevropské (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "StÅ™edoevropské (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "StÅ™edoevropské (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "StÅ™edoevropské (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "ZjednoduÅ¡ené Äínské (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "ZjednoduÅ¡ené Äínské (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "ZjednoduÅ¡ené Äínské (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "ZjednoduÅ¡ené Äínské (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "ZjednoduÅ¡ené Äínské (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "TradiÄní Äínské (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "TradiÄní Äínské (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "TradiÄní Äínské (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Chorvatské (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Azbuka (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Azbuka (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Azbuka (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Azbuka (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Azbuka (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Azbuka (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Ruské (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrajinské (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrajinské (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Anglické (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgian (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Řecké (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Řecké (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Řecké (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrejské (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebrejské (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrejské (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrejské (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrejské (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindské (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandské (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonské (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonské (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonské (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korejské (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korejské (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korejské (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korejské (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Severské (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumunské (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumunské (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Jihoevropské (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thajské (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turecké (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turecké (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turecké (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turecké (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Uživatelem definované" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamské (TVCN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamské (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamské (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamské (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Vizuální hebrejské (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Západní (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Západní (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Západní (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Západní (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Západní (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "SmÄ›r konverze" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Tato hodnota urÄuje, který test iconv provádÄ›t." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "Äerná" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "svÄ›tle hnÄ›dá" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "zlatohnÄ›dá" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "tmavÄ› zelená #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "námoÅ™ní modÅ™" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "tmavÄ› modrá" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "fialová #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "velice tmavÄ› Å¡edá" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "tmavÄ› Äervená" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "Äervenooranžová" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "zlatá" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "tmavÄ› zelená" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "matnÄ› modrá" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "modrá" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "matnÄ› fialová" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "tmavÄ› Å¡edá" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "Äervená" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oranžová" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "citrusová" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "matnÄ› zelená" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "matnÄ› modrá #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "nebesky modrá #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "fialová" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "Å¡edá" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "jasnÄ› oranžová" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "Žlutá" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "zelená" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "modrozelená" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "jasnÄ› modrá" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "Äervenofialová" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "svÄ›tle Å¡edá" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "růžová" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "svÄ›tle oranžová" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "svÄ›tle žlutá" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "svÄ›tle zelená" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "svÄ›tle modrozelená" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "svÄ›tle modrá" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "svÄ›tle fialová" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "bílá" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "modrá do fialova" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "tmavÄ› fialová" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "nebesky modrá" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "vlastní" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Vlastní barva..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Typ stínu" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientace" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Preferovaná šířka" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Preferovaná výška" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Zadokovat liÅ¡tu nástrojů" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Oddokovat liÅ¡tu nástrojů" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Soubor '%s' nelze otevřít" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "VÅ¡echny soubory" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Obrázky" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Zvolte obrázek" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Uložit jako" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Typ souboru:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Zadaná přípona souboru neodpovídá vybranému typu souboru. Chcete pÅ™esto " +"použít tento název souboru?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"je název adresáře" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Nemáte práva pro ukládaní do\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Soubor nazvaný %s již v %s existuje.\n" +"\n" +"Chcete jej pÅ™epsat?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normální" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "TuÄné" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "TuÄná kurzíva" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kurzíva" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "AaÃáBbCcÄŒÄDdÄŽd12345" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Styl písma:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Písmo:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Náhled" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Velikost:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Číslo" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "MÄ›na" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "ÚÄetnictví" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Datum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "ÄŒas" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Procenta" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Zlomek" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "VÄ›decké" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Speciální" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Vlastní" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Formát záporného Äísla" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formáty Äísla" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "_Kategorie:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "PoÄet desetinných _míst:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Zobrazovat Äástky v tradiÄních úÄetních stylech." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Zobrazovat a vkládat hodnoty jako Å™etÄ›zce bez interpretace." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Zobrazovat finanÄní Äástky." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Zobrazovat data a volitelnÄ› Äas." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Zobrazovat Äíselné hodnoty s pevným poÄtem desetinných míst." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Zobrazovat Äasy." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Zobrazovat hodnoty jako nejbližší finanÄní aproximaci." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Zobrazovat hodnotu jako procenta." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Zobrazovat hodnoty s posunem v mocninách deseti." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "_Kód formátu:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Formát zá_porného Äísla:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Náhled:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "_Symbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Automaticky vybrat vhodný formát." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Přímo urÄit formát stylu XL" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formát:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Po_užívat oddÄ›lovaÄ pro tisíce" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Západní Evropa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Východní Evropa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Severní Amerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Jižní a stÅ™ední Amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ãsie" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Austrálie" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Spojené státy americké/angliÄtina (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Jižní Afrika Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopie/amharic (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Spojené Arabské Emiráty (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrajn (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Alžírsko (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Indie/arabÅ¡tina (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irák (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordánsko (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuvajt (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libye (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Omán (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Katar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saúdská Arábie (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Súdán (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Sýrie (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisko (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Ãzerbájdžán (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "BÄ›lorusko (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulharsko (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladéš (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Indie/bengálÅ¡tina (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francie/bretonÅ¡tina (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosna a Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Å panÄ›lsko/katalánÅ¡tina (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ÄŒeská republika (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Velká Británie/VelÅ¡tina (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dánsko (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Rakousko (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgie/nÄ›mÄina (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Å výcarsko/nÄ›mÄina (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "NÄ›mecko (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Lucembursko/nÄ›mÄina (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Řecko (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Austrálie (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/angliÄtina (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Velká Británie (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/angliÄtina (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irsko (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Indie/angliÄtina (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nový Zéland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipíny (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/angliÄtina (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Spojené státy americké/angliÄtina (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Jižní Afrika/angliÄtina (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolívie (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "ÄŒile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbie (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Kostarika (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikánská republika (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekvádor (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Å panÄ›lsko (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nikaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Portoriko (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Spojené státy americké/Å¡panÄ›lÅ¡tina (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonsko (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Å panÄ›lsko/baskiÄtina (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Ãrán (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finsko/finÅ¡tina (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Faerské ostrovy (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgie/FrancouzÅ¡tina (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/francouzÅ¡tina (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Å výcarsko/francouzÅ¡tina (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francie (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irsko/galÅ¡tina (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Velká Británie/Skotská galÅ¡tina (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Å panÄ›lsko/GaliÄtina (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Velká Británie/ManÅ¡tina (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Indie/HindÅ¡tina (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Chorvatsko (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "MaÄarsko (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Arménie (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonésie (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Å výcarsko/italÅ¡tina (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Itálie (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Izrael/HebrejÅ¡tina (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japonsko (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grónsko (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Velká Británie/cornwallÅ¡tina (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litva (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "LotyÅ¡sko (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nový Zéland/maorÅ¡tina (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "MakedonÅ¡tina (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Indie/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malajsie (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgie/vlámÅ¡tina (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Nizozemsko (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norsko/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norsko/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francie/occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polsko (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazílie (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugalsko (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumunsko (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rusko (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukrajina/ruÅ¡tina (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norsko/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovensko (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovinsko (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albánie (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslávie (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finsko/Å¡védÅ¡tina (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Å védsko (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Indie/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Indie/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadžikistán (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thajsko (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopie/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipíny/tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turecko (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rusko/tatarÅ¡ina (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukrajina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pákistán (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistán (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgie/valonÅ¡tina (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Spojené státy americké/yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Čína (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/ÄínÅ¡tina (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/ÄínÅ¡tina (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Aktuální locale: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Menu možností" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Velikost indikátoru" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Velikost indikátoru rozbalení" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Výplň indikátoru" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Výplň kolem indikátoru" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ned" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Pon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Úte" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Str" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*ÄŒtv" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Pát" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sob" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "NedÄ›le" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "PondÄ›lí" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Úterý" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "StÅ™eda" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "ÄŒtvrtek" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Pátek" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sobota" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Led" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Úno" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*BÅ™e" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Dub" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*KvÄ›" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*ÄŒen" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*ÄŒec" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Srp" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Zář" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Říj" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Lis" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Pro" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Leden" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Únor" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "BÅ™ezen" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Duben" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "KvÄ›ten" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "ÄŒerven" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "ÄŒervenec" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Srpen" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Září" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Říjen" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Listopad" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Prosinec" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "ÄŒerná" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Modrá" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Modrozelená" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Zelená" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Fialová" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "ÄŒervená" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Bílá" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Žlutá" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Spojené Arabské Emiráty, Dirhamy" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghánistán, Afghanis" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albánie, Lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Arménie, Dramy" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Nizozemské Antily, Guldeny" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, Peseta" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Austrálie, Dolary" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Guldeny" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Ãzerbájdžán, Manaty" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosna a Hercegovina, SmÄ›nitelná marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dolary" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladéš, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulharsko, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrajn, Dináry" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Franky" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermudy, Dolary" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunej Darussalam, Dolary" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolívie, Bolivianos" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazílie, Brazilský real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamy, Dolary" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhútán, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "BÄ›lorusko, Rubly" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dolary" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, Dolary" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/Kinshasa, Konžské franky" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Å výcarsko, Franky" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ÄŒile, Peseta" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Čína, Juan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbie, Peseta" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Kostarika, Kolony" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, Peseta" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde, Escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Kypr, Libra" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ÄŒeská republika, Koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Džibuti, Franky" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dánsko, Koruny" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikánská republika, Peseta" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Alžírsko, Alžírské dináry" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonsko, Koruny" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt, Libry" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopie, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Evropské Älenské zemÄ›, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidži, Dolary" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falklandské ostrovy, Libry" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Spojené království, Libry" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgie, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, Libry" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, Cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, Libry" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambie, Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, Franky" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, Quetzaly" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guajana, Dolary" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, Dolary" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Chorvatsko, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gourdy" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "MaÄarsko, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonésie, Rupie" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Izrael, Nový Å¡ekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, Libry" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Indie, Rupie" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irák, Dináry" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Ãrán, Rialy" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, Koruny" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Libry" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamajka, Dolary" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordánsko, Dináry" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japonsko, Jeny" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Keňa, Å ilinky" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstán, Somy" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodža, Riely" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komory, Franky" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (severní), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (jižní), Wony" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuvajt, Dináry" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kajmanské ostrovy, Dolary" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazachstán, Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kipy" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, Libry" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Srí Lanka, Rupie" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Libérie, Dolary" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, Maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litva, Litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "LotyÅ¡sko, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libye, Dináry" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroko, Dirhamy" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldávie, Lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, Franky" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonie, Denáry" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), Kyaty" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolsko, Tugriky" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, Patacas" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauretánie, Ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Liry" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, Rupie" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maledivy (Maledivské ostrovy), Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, Kwachas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexiko, Peseta" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malajsie, Ringgity" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambik, Meticaly" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibie, Dolary" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigérie, Nairas" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikaragua, Zlaté cordoby" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norsko, Koruny" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepál, Nepálské rupie" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nový Zéland, Dolary" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omán, Rialy" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, Nuevos Soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nová Guinea, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipíny, Peseta" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pákistán, Rupie" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polsko, Zloté" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar, Rialy" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumunsko, Lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusko, Rubly" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, Rwandské franky" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saúdská Arábie, Riyaly" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomonské ostrovy, Dolary" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "SeyÅ¡ely, Rupie" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Súdán, Dináry" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Å védsko, Kronor" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, Dolary" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Ostrov sv. Heleny, Libry" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovinsko, Tolary" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovensko, Koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, Leones" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somálsko, Å ilink" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, Guldeny" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome a Principe, Dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Kolony" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Sýrie, Libry" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Svahilsko, Emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thajsko, Bahty" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadžikistán, Rubly" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistán, Manaty" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisko, Dináry" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turecko, Liry" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad a Tobago, Dolary" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalské dolary" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, Nové dolary" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzanie, Å ilinky" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukrajina, HÅ™ivna" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Å ilinky" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Spojené státy americké, Dolary" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Peseta" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistán, Sumy" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, Bolivares" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Franky" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Stříbro, Unce" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Zlato, Unce" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Východokaribské dolary" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Zvláštní Äerpací práva Mezinárodního mÄ›nového fondu (MMF)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Franky" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Paladium, Unce" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique, Franky" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platina, Unce" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, Rialy" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslávie, Nové dináry" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Jižní Afrika, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambie, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, Zimbabwské dolary" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Nic" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Plné" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Čárka" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "TeÄka" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Čárka teÄka" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Čárka teÄka teÄka" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatické (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "nic" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "Ätverec" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "kosoÄtverec" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "trojúhelník dolů" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "trojúhelník nahoru" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "trojúhelník doprav" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "trojúhelník doleva" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "kruh" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "křížek" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "hvÄ›zdiÄka" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "sloupec" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "poloviÄní sloupec" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "motýl" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "pÅ™esýpací hodiny" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Å¡edé" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Å¡edé" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Å¡edé" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12,5% Å¡edé" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6,25% Å¡edé" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontální pruhy" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertikální pruhy" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "OpaÄné diagonální pruhy" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonální pruhy" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonální křížové Å¡rafování" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "TuÄné diagonální křížové Å¡rafování" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tenké horizontální pruhy" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tenké vertikální pruhy" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tenké opaÄné diagonální pruhy" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tenké diagonální pruhy" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tenké horizontální křížové Å¡rafování" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tenké diagonální křížové Å¡rafování" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Plná barva popÅ™edí" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Malé kruhy" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Půlkruhy" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "DoÅ¡ky" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Velké kruhy" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Cihly" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Titulky" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Hodnoty" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Sloupce chyby" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "SloupecSloucovéhoGrafu" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Jak moc se pruhy/sloupce pÅ™ekrývají jako procenta šířky" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "_PÅ™ekrytí:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "OddÄ›lení mezi skupinami jako procenta šířky pruhu/sloupce" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Mezera:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "ČárovýGraf" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "PloÅ¡nýGraf" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D sousedící pruhy" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3E sousedící sloupce" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D pruhy procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D sloupce procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D pruhy vedle sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D sloupce nad sebou" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Sousedící pruhy" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Sousedící sloupce" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Sousedící vodorovné 3D pruhy seskupené podle hlavních a vedlejších kategorií." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Sousedící vodorovné pruhy seskupené podle hlavních a vedlejších kategorií." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Sousedící svislé 3D sloupce seskupené podle hlavních a vedlejších kategorií." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Sousedící svislé sloupce seskupené podle hlavních a vedlejších kategorií." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Plocha" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "PloÅ¡ný graf." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Plochy" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Pruh" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Sloupec" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Čára" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Čárový graf." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Čáry" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako procenta vedlejšího souÄtu, v 3D vodorovných " +"pruzích, seskupené podle hlavní kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako procenta vedlejšího souÄtu, v 3D svislých " +"sloupcích, seskupené podle hlavní kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako procenta vedlejšího souÄtu, ve vodorovných " +"pruzích, seskupené podle hlavní kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako procenta vedlejšího souÄtu, ve svislých " +"sloupcích, seskupené podle hlavní kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako vodorovné 3D pruhy, seskupené podle hlavní " +"kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako vodorovné pruhy, seskupené podle hlavní " +"kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako svislé 3D sloupce, seskupené podle hlavní " +"kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Vedlejší kategorie rovnané jako svislé sloupce, seskupené podle hlavní " +"kategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Oblasti procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Pruhy procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Sloupce procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Čáry procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "PloÅ¡ný graf procent." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Čárový graf procent." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Oblasti nad sebou" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Pruhy vedle sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Sloupce nad sebou" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Čáry nad sebou" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Graf ploch nad sebou." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Graf Äas nad sebou." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "NeoznaÄené Äáry" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "NeoznaÄené Äáry procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "NeoznaÄené Äáry nad sebou" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Engine kreslení oblastí" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Engine kreslení pruhů/sloupců" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Kreslení grafů: pruh/sloup/Äáry/oblast" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Implicitní typy grafů 1.5d" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Engine kreslení Äar" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Čárové, ploÅ¡né, pruhové a sloupcové grafy" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Graf" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "Neplatná data." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Graf" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Graf" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Graf" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Engine kreslení pruhů/sloupců" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Kreslení grafů : Kruhové grafy" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Implicitní typy radarových grafů" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "KoláÄovýGraf" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "PlotRing" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s bod %d\n" +"Hodnota %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "ČítaÄ stupňů po smÄ›ru hodinových ruÄiÄek od 3 hodin" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Dílky zaÄínají _na:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"Implicitní velikost, kterou je každý dílek oddÄ›len od stÅ™edu, měřená jako " +"procenta polomÄ›ru koláÄe" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_OddÄ›lení dílů:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_MÄ›nit barvy podle dílu" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "stupňů" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"Velikost, kterou je tento dílek oddÄ›len od stÅ™edu, měřená jako procenta " +"polomÄ›ru koláÄe" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_OddÄ›lení:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Velikost _stÅ™edu:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D rozdÄ›lený koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Hlavní souÄty jako procenta s každým dílem rozdÄ›leným do sekundárních koláÄů." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Hlavní souÄty jako procenta s každým dílem rozdÄ›leným do sekundárních pruhů " +"nad sebou." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Více-koláÄů" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Více-koláÄů-a-pruhů" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Procenta každého pÅ™ispÄ›vatele zobrazovaná v prstenci pro každou sérii s díly " +"posledního prstence oddÄ›lenými." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Procenta každého pÅ™ispÄ›vatele zobrazovaná v prstenci pro každou sérii." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Procenta každého pÅ™ispÄ›vatele v 3D koláÄi." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Procenta každého pÅ™ispÄ›vatele v oddÄ›lených 3D dílech." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Procenta každého pÅ™ispÄ›vatele v oddÄ›lených dílech." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Procenta každého pÅ™ispÄ›vatele." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "KoláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Prstenec" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "RozdÄ›lený koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "RozdÄ›lený prstenec" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Kreslení grafů : KoláÄ/prstenec" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Výchozí typ koláÄe" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "KoláÄové a prstencové grafy" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Engine kreslení koláÄů" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Engine kreslení prstenců" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "RadarovýGraf" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "OblastRadarovéhoGrafu" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "PloÅ¡ný radarový" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "PloÅ¡ný radarový graf." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Bodový radarový" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radarový" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Radarový graf s body." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radarový graf." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Kreslení grafů : Kruhové grafy" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Implicitní typy radarových grafů" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Engine kreslení oblastí radaru" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Engine kreslení radarů" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Kruhové/radarové grafy" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "_Dílky Äíslo:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "PoÄet" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "PloÅ¡ný graf." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Povrch" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Engine kreslení prstenců" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Z_drojové oblasti:" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Z_drojové oblasti:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% normální velikosti" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "_PrůmÄ›r" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Zobrazovat _záporné hodnoty" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "_Povrch" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Měřítko bublin zmÄ›nÄ›no na" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Velikost je reprezentována pomocí:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_MÄ›nit barvy podle bubliny" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "GrafXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "GrafBublina" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bublina" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Sloupce chyby Y" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "Sloupce chyby X" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpolovat mezi vícerozmÄ›rnými body Beziérovými spliny." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"LineárnÄ› interpolovat mezi vícerozmÄ›rnými body s oznaÄeními v každém bodÄ›." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "LineárnÄ› interpolovat mezi vícerozmÄ›rnými body." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "ZnaÄky v každém bodÄ›." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "VícerozmÄ›rné body s kroužkem v každém bodÄ›." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Kreslit X, Y a velikost bubliny." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Čáry XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Body XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +msgid "XY Splines" +msgstr "Spliny XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D grafy" + +#: plugins/plot_xy/plugin.xml.in.h:2 +#, fuzzy +msgid "2D scatter plotting engine" +msgstr "Engine kreslení koláÄů" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Engine kreslení bublin" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/da.po b/lib/goffice-0.0.4/po/da.po new file mode 100644 index 0000000000..490e8cc5c6 --- /dev/null +++ b/lib/goffice-0.0.4/po/da.po @@ -0,0 +1,4594 @@ +# Danish translation of Gnumeric. +# Copyright (C) 1999-2001 Free Software Foundation, Inc. +# Jan Normann Nielsen , 1999. +# Kenneth Christiansen , 1999-2000. +# Birger Langkjer , 1999. +# Keld Simonsen , 2000-2002. +# Morten Welinder , 2000-2001. +# Ole Laursen , 2001. +# +# Kontakt dansk@klid.dk før du ændrer i denne fil. +# +# Læs README - vigtigt! +# +# BEMÆRK at tekster fra 'command.c' skal oversættes med navneord og ikke +# - direkte fra engelsk - med verber da de indgÃ¥r som +# +# fortryd/gentag: 'handlingstekst' +# +# +# Konventioner: +# +# sheet -> ark +# workbook -> arbejdsbog +# evaluate -> finde værdien af +# range -> interval, (dog til tider) omfang +# plugin -> [udvidelses]modul (indstik el. lign. bliver for kryptisk) +# constraint -> begrænsning (fx "x < 10") +# truncate -> afkorte (fx 2.79 -> 2) +# validate -> gyldighedskontrol +# array -> matrix, vektor +# custom -> selvvalgt, brugerdefineret (afhængig af sammenhæng) +# paste special -> avanceret indsætning +# df (degree freedom) -> fg (frihedsgrader) +# formulae/formulas -> formler (ikke "formularer", altsÃ¥ "blanketter") +# +# Formater og formatér er med ét 't'. Eksemplerne under tekstrutinerne +# er danskificerede. Den mærkelige mani med at sætte et mellemrum foran +# kolon (som i "Cell :") er ikke bevaret i oversættelserne. +# +# Læg mærke til de omkringstÃ¥ende tekster, især i forbindelse med +# hjælpeteksterne til de indbyggede funktioner i Gnumeric, f.eks. bruges +# +# equals -> er lig med +# +# i stedet for f.eks. blot "lig" eller "lig med" eller "er lig". +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 0.71\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2002-01-16 11:31+0100\n" +"Last-Translator: Keld Simonsen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Overskrivelse af gamle filer af denne type er deaktiveret af " +"sikkerhedsgrunde." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Du kan slÃ¥ denne sikkerhedsfacilitet fra ved at redigere de tilsvarende " +"plugin.xml-filer" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "MÃ¥l" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, fuzzy, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "Fil indeholder modelinfo med ugyldigt id (%s), forventede %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Kunne ikke læse modulinfo fra fil." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ukendt navn" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ikke-understøttet indlæsertype \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Fejl ved forberedelse af indlæseren \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Fejl ved læsning af oplysninger om tjeneste nr. %d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Kan ikke læse modulinfofil (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Filen \"%s\" er ikke en gyldig modulinfofil." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Fejl ved læsning af tjenester for udvidelsesmodulet med id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ukendt udvidelsesmodulnavn." + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Ingen indlæser defineret for udvidelsesmodulet med id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Udvidelsesmodulet har ingen id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Fejl ved klargøring af udvidelsesmodulindlæser (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Fejl ved indlæsning af modulafhængigheder." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Kunne ikke aktivere udvidelsesmodul \"%s\" (id: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ingen indlæser defineret for udvidelsesmodulet med id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Fejl ved indlæsning af modulafhængigheder." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Fejl ved aktivering udvidelsesmodultjeneste nr. %d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Fejl ved deaktivering af udvidelsesmodultjeneste nr. %d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Kan ikke indlæse udvidelsesmodulindlæser." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ingen indlæser defineret for udvidelsesmodulet med id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Fejl ved indlæsning af modulafhængigheder." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Der opstod fejl ved læsning af udvidelsesmoduloplysninger fra filen \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikke aktivere udvidelsesmodul \"%s\" (id: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikke deaktivere udvidelsesmodul \"%s\" (id: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Fejl ved læsning af oplysninger om tilgængelige udvidelsesmoduler." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Fejl ved deaktivering af udvidelsesmodultjeneste nr. %d." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Fejl ved aktivering af udvidelsesmoduler." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Fejl ved klargøring af udvidelsesmodulsystemet." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Tjeneste ikke understøttet af indlæser." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Navn pÃ¥ modulfil ikke angivet." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Kan ikke Ã¥bne modulfilen \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Modulfilen \"%s\" har et ugyldigt format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Filen indeholder ikke \"plugin_fil_struct\"-symbolet." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Filen indeholder et ugyldigt magisk tal." + +# passer med kildekoden +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Modulversionen \"%s\" er forskellig fra programmets \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamisk modulindlæsning er ikke understøttet pÃ¥ dette system." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Kan ikke lukke modulfilen \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Filen indeholder ikke en \"%s\"-funktion." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modulet indeholder ikke en \"%s\"-funktion." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Fejl ved indlæsning af udvidelsesmodultjeneste." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Klargøringsfunktionen i udvidelsesmodulet meldte en fejl." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Oprydningsfunktionen i udvidelsesmodulet meldte en fejl." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Generelt" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "FilÃ¥bner med id=\"%s\" har ingen beskrivelse" + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "FilÃ¥bner har ingen id" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Fejl ved læsning af fil." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Filgemmer med id=\"%s\" har ingen beskrivelse" + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Filgemmer har ingen id" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Fejl ved gemning af fil." + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Python-udvidelsesmodulindlæser" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Værdi af mÃ¥l" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Ukendt ark '%s'" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Fejl ved læsning af oplysninger om tjeneste nr. %d." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "sider" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indryk" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Søg efter" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Justering" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Anførselstegn:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Linje" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logisk" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "_Skjul detaljer" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisk" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategori" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Baggrund" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_inimal værdi" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Maks" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "_Luk" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etiket" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "fredag" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "fredag" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Mønster" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Eksempel" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Mønster" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Eksempel" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Indvendig" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Omrids" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "Hø_jde..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Indvendig" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Indsæt" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Række" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Omrids" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Mærkater" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Faldende" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Titel" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "fredag" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Plot" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "Hø_jde..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "_Med:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Fejlbesked" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Eksempel" + +# stikprøve kolliderer med at det bruges i betydningen "et eksempel" +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Prøve" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Farve:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Linjebredde" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Med:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_Graf..." + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "Graf%d" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Navn" + +# vist graf snarere end grafik +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Trin 1 af 3: Vælg graftype" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Trin 3 af 3: Tilpas grafen" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Tilpas sidehoved" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Indsæt" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Plottenavn" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "_Omrokér..." + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Orientering" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Mønster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Eksempel" + +# stikprøve kolliderer med at det bruges i betydningen "et eksempel" +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Prøve" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Beskrivelse" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "Te_kst" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Data" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "_Serier" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Plottenavn" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Plottenavn" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Indryk" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Tekster" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Point" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dLx%dK" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Skrifttype" + +#: goffice/graph/gog-style.c:966 +#, fuzzy +msgid "Style" +msgstr "_Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Eksempel" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Eksempel" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Mønster" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Eksempel" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Farve:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Omridsfarve" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "Virkefelt: " + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Størrelse:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "_Stil" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "_Type:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Baggrund" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Katalog" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "Slut" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Udfyldningsfarve" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "_Tilpas til:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Forgrund" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Mønster" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_Markér" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Størrelse:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "_Sortér" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "_Højre" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "Matrix" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pkt" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +#, fuzzy +msgid "Default" +msgstr "Slet" + +# udsagnsord +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "Gruppér" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "Areal %i" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "Kursiv" + +#: goffice/gtk/go-charmap-sel.c:76 +#, fuzzy +msgid "Central European" +msgstr "Centrér pÃ¥ side" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "grøn" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "_Middel:" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "Japanske yen" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Boolsk" + +#: goffice/gtk/go-charmap-sel.c:84 +#, fuzzy +msgid "Turkish" +msgstr "Tyrkiske lire" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "_Vis igen" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "Omdøb ark" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "vest" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "oktober" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Understregning" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "Logisk" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Korrelation" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "sort" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "mandag" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "Interval" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "Fed" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Celleværdi" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "blÃ¥" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "Matrix" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rød" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "Interval" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "tid" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "Matrix" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "lilla" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "gul" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "grøn" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "Redigér udtryk" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Højrejustér" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Højrejustér" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Højrejustér" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "hvid" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "Værdi" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "Tilpasset" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Tilpas sidefod" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Skygge" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orientering" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Kopiér det markerede til klippebordet" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "kan ikke Ã¥bne filen '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "_Fil" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "_Gem..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Markér en hel kolonne" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Gem" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "_Fil" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"er navnet pÃ¥ et katalog" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Du har ikke rettighed til at gemme som\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Arbejdsbogen %s eksisterer allerede.\n" +"Vil du gemme oven i den?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Fed" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Fed kursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Skriftstil:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Skrift:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Eksempel" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Størrelse:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Tal" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "_Valuta" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "_Bogføring" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dato" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tid" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "_Procentdel" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "_Brøk" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "_Videnskabelig" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "Te_kst" + +# specielle giver et forkert indtryk +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "_Andet" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Tilpasset" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Negativt tal:" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "Anvend _talformater" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Kategori:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Antal deci_maler:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "Europæisk valutaenhed" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Vis _omridsgrupper" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Vis værdien præcis som den blev indtastet" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Negativt tal:" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "Eksempel" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Benyt adskillelse mellem 1000'er" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "vest" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "Centrér pÃ¥ side" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "Generelt" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "Areal %i" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "Australske dollar" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sydafrikanske rand" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Bahrainske dinar" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "Jordanske dinarer" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "Kuwaitiske dinarer" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "Libyske dinarer" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi Arabiske riyal" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "Tunesiske dinarer" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Hviderussiske rubler" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "Bulgarske lev" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "Bangladeshiske taka" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "Tjekkiske koruna" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +#, fuzzy +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourgske franc" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "New Zealand-dollar" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Filippinske peso" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "Sydafrikanske rand" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Argentinske peso" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Chilenske peso" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Colombianske peso" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Costa Ricanske colon" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Dominikanske peso" + +#: goffice/gtk/go-locale-sel.c:164 +#, fuzzy +msgid "Ecuador (es_EC)" +msgstr "Ecuadorianske sucre" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Stikprøveudtagning" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "Guatemalanske quetzal" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "Honduranske lempira" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "Mexicanske peso" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "El Salvadoranske colon" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Uruguayanske peso" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "Venezuelanske bolivar" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Stikprøveudtagning" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "Indonesiske rupiah" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +#, fuzzy +msgid "The Netherlands (nl_NL)" +msgstr "Hollandske gylden" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "Slovenske tolar" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "Slovenske tolar" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Albanske lek" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "Ny jugoslaviske dinarer" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "Pakistanske rupier" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "Thailandske baht" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "Pakistanske rupier" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Aktuel værdi:" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "_Middel:" + +#: goffice/gtk/go-optionmenu.c:198 +#, fuzzy +msgid "The menu of options" +msgstr "OAF-indstillinger" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Intern FEJL" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*søn" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*man" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*tir" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*ons" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*tor" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*fre" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*lør" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "søndag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "mandag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "tirsdag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "onsdag" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "torsdag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "fredag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "lørdag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*maj" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "januar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "februar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "marts" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "april" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "maj" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "august" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "september" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "november" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "december" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +# RETMIG: er dette rigtigt? +#: goffice/utils/format.c:757 +#, fuzzy +msgid "Black" +msgstr "Slækkelse" + +#: goffice/utils/format.c:758 +#, fuzzy +msgid "Blue" +msgstr "blÃ¥" + +#: goffice/utils/format.c:759 +#, fuzzy +msgid "Cyan" +msgstr "cyan" + +#: goffice/utils/format.c:760 +#, fuzzy +msgid "Green" +msgstr "grøn" + +#: goffice/utils/format.c:761 +#, fuzzy +msgid "Magenta" +msgstr "lilla" + +#: goffice/utils/format.c:762 +#, fuzzy +msgid "Red" +msgstr "Gentag" + +#: goffice/utils/format.c:763 +#, fuzzy +msgid "White" +msgstr "hvid" + +#: goffice/utils/format.c:764 +#, fuzzy +msgid "Yellow" +msgstr "gul" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +#, fuzzy +msgid "Afghanistan, Afghanis" +msgstr "Afghanske afghani" + +#: goffice/utils/formats.c:391 +#, fuzzy +msgid "Albania, Leke" +msgstr "Albanske lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +#, fuzzy +msgid "Netherlands Antilles, Guilders" +msgstr "Hollandsk-antilske gylden" + +#: goffice/utils/formats.c:394 +#, fuzzy +msgid "Angola, Kwanza" +msgstr "Angolanske nye kwanza" + +#: goffice/utils/formats.c:395 +#, fuzzy +msgid "Argentina, Pesos" +msgstr "Argentinske peso" + +#: goffice/utils/formats.c:396 +#, fuzzy +msgid "Australia, Dollars" +msgstr "Australske dollar" + +#: goffice/utils/formats.c:397 +#, fuzzy +msgid "Aruba, Guilders" +msgstr "Arubanske gylden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +#, fuzzy +msgid "Barbados, Dollars" +msgstr "Barbados-dollar" + +#: goffice/utils/formats.c:401 +#, fuzzy +msgid "Bangladesh, Taka" +msgstr "Bangladeshiske taka" + +#: goffice/utils/formats.c:402 +#, fuzzy +msgid "Bulgaria, Leva" +msgstr "Bulgarske lev" + +#: goffice/utils/formats.c:403 +#, fuzzy +msgid "Bahrain, Dinars" +msgstr "Bahrainske dinar" + +#: goffice/utils/formats.c:404 +#, fuzzy +msgid "Burundi, Francs" +msgstr "Burundi-franc" + +#: goffice/utils/formats.c:405 +#, fuzzy +msgid "Bermuda, Dollars" +msgstr "Bermuda-dollar" + +#: goffice/utils/formats.c:406 +#, fuzzy +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei-dollar" + +#: goffice/utils/formats.c:407 +#, fuzzy +msgid "Bolivia, Bolivianos" +msgstr "Bolivianske boliviano" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "Brasilianske real" + +#: goffice/utils/formats.c:409 +#, fuzzy +msgid "Bahamas, Dollars" +msgstr "Bahamanske dollar" + +#: goffice/utils/formats.c:410 +#, fuzzy +msgid "Bhutan, Ngultrum" +msgstr "Bhutan ngultrum" + +#: goffice/utils/formats.c:411 +#, fuzzy +msgid "Botswana, Pulas" +msgstr "Botswanske pula" + +#: goffice/utils/formats.c:412 +#, fuzzy +msgid "Belarus, Rubles" +msgstr "Hviderussiske rubler" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "Belize-dollar" + +#: goffice/utils/formats.c:414 +#, fuzzy +msgid "Canada, Dollars" +msgstr "Canadiske dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +#, fuzzy +msgid "Chile, Pesos" +msgstr "Chilenske peso" + +#: goffice/utils/formats.c:418 +#, fuzzy +msgid "China, Yuan Renminbi" +msgstr "Kinesiske juan renminbi" + +#: goffice/utils/formats.c:419 +#, fuzzy +msgid "Colombia, Pesos" +msgstr "Colombianske peso" + +#: goffice/utils/formats.c:420 +#, fuzzy +msgid "Costa Rica, Colones" +msgstr "Costa Ricanske colon" + +#: goffice/utils/formats.c:421 +#, fuzzy +msgid "Cuba, Pesos" +msgstr "Cubanske peso" + +#: goffice/utils/formats.c:422 +#, fuzzy +msgid "Cape Verde, Escudos" +msgstr "Cape Verde-escudo" + +#: goffice/utils/formats.c:423 +#, fuzzy +msgid "Cyprus, Pounds" +msgstr "Cypriotiske pund" + +#: goffice/utils/formats.c:424 +#, fuzzy +msgid "Czech Republic, Koruny" +msgstr "Tjekkiske koruna" + +#: goffice/utils/formats.c:425 +#, fuzzy +msgid "Djibouti, Francs" +msgstr "Djibouti-franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +#, fuzzy +msgid "Dominican Republic, Pesos" +msgstr "Dominikanske peso" + +#: goffice/utils/formats.c:428 +#, fuzzy +msgid "Algeria, Algeria Dinars" +msgstr "Algeriske dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +#, fuzzy +msgid "Egypt, Pounds" +msgstr "Egyptiske pund" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +#, fuzzy +msgid "Ethiopia, Birr" +msgstr "Etiopiske birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "Fiji dollar" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland-øernes pund" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +#, fuzzy +msgid "Guernsey, Pounds" +msgstr "Sudanesiske pund" + +#: goffice/utils/formats.c:439 +#, fuzzy +msgid "Ghana, Cedis" +msgstr "Ghanesiske cedi" + +#: goffice/utils/formats.c:440 +#, fuzzy +msgid "Gibraltar, Pounds" +msgstr "Gibraltar-pund" + +#: goffice/utils/formats.c:441 +#, fuzzy +msgid "Gambia, Dalasi" +msgstr "Gambiske dalasi" + +#: goffice/utils/formats.c:442 +#, fuzzy +msgid "Guinea, Francs" +msgstr "Guinea-franc" + +#: goffice/utils/formats.c:443 +#, fuzzy +msgid "Guatemala, Quetzales" +msgstr "Guatemalanske quetzal" + +#: goffice/utils/formats.c:444 +#, fuzzy +msgid "Guyana, Dollars" +msgstr "Guyananske dollar" + +#: goffice/utils/formats.c:445 +#, fuzzy +msgid "Hong Kong, Dollars" +msgstr "Hong Kong-dollar" + +#: goffice/utils/formats.c:446 +#, fuzzy +msgid "Honduras, Lempiras" +msgstr "Honduranske lempira" + +#: goffice/utils/formats.c:447 +#, fuzzy +msgid "Croatia, Kuna" +msgstr "Kroatiske kuna" + +#: goffice/utils/formats.c:448 +#, fuzzy +msgid "Haiti, Gourdes" +msgstr "Haitianske gourde" + +#: goffice/utils/formats.c:449 +#, fuzzy +msgid "Hungary, Forint" +msgstr "Ungarske forint" + +#: goffice/utils/formats.c:450 +#, fuzzy +msgid "Indonesia, Rupiahs" +msgstr "Indonesiske rupiah" + +#: goffice/utils/formats.c:451 +#, fuzzy +msgid "Israel, New Shekels" +msgstr "Israelske shekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +#, fuzzy +msgid "India, Rupees" +msgstr "Indiske rupier" + +#: goffice/utils/formats.c:454 +#, fuzzy +msgid "Iraq, Dinars" +msgstr "Irakiske dinarer" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "Iranske rial" + +#: goffice/utils/formats.c:456 +#, fuzzy +msgid "Iceland, Kronur" +msgstr "Islandske kroner" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +#, fuzzy +msgid "Jamaica, Dollars" +msgstr "Jamaicanske dollar" + +#: goffice/utils/formats.c:459 +#, fuzzy +msgid "Jordan, Dinars" +msgstr "Jordanske dinarer" + +#: goffice/utils/formats.c:460 +#, fuzzy +msgid "Japan, Yen" +msgstr "Japanske yen" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "Kenyanske shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +#, fuzzy +msgid "Comoros, Francs" +msgstr "Comoros-franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +#, fuzzy +msgid "Kuwait, Dinars" +msgstr "Kuwaitiske dinarer" + +#: goffice/utils/formats.c:468 +#, fuzzy +msgid "Cayman Islands, Dollars" +msgstr "Cayman-øernes dollar" + +#: goffice/utils/formats.c:469 +#, fuzzy +msgid "Kazakstan, Tenge" +msgstr "Pakistanske rupier" + +#: goffice/utils/formats.c:470 +#, fuzzy +msgid "Laos, Kips" +msgstr "Laotiske kip" + +#: goffice/utils/formats.c:471 +#, fuzzy +msgid "Lebanon, Pounds" +msgstr "Libanesiske pund" + +#: goffice/utils/formats.c:472 +#, fuzzy +msgid "Sri Lanka, Rupees" +msgstr "Sri Lankanske rupee" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "Liberianske dollar" + +#: goffice/utils/formats.c:474 +#, fuzzy +msgid "Lesotho, Maloti" +msgstr "Lesotho loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +#, fuzzy +msgid "Libya, Dinars" +msgstr "Libyske dinarer" + +#: goffice/utils/formats.c:478 +#, fuzzy +msgid "Morocco, Dirhams" +msgstr "Marokkanske dirham" + +#: goffice/utils/formats.c:479 +#, fuzzy +msgid "Moldova, Lei" +msgstr "Moldoviske leu" + +#: goffice/utils/formats.c:480 +#, fuzzy +msgid "Madagascar, Malagasy Francs" +msgstr "Malagaskiske franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +#, fuzzy +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmarske kyat" + +#: goffice/utils/formats.c:483 +#, fuzzy +msgid "Mongolia, Tugriks" +msgstr "Mongolske tugrik" + +#: goffice/utils/formats.c:484 +#, fuzzy +msgid "Macau, Patacas" +msgstr "Macau pacata" + +#: goffice/utils/formats.c:485 +#, fuzzy +msgid "Mauritania, Ouguiyas" +msgstr "Mauretanske ouguiya" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "Maltesiske lire" + +#: goffice/utils/formats.c:487 +#, fuzzy +msgid "Mauritius, Rupees" +msgstr "Mauritiske rupier" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +#, fuzzy +msgid "Malawi, Kwachas" +msgstr "Malawiske kwacha" + +#: goffice/utils/formats.c:490 +#, fuzzy +msgid "Mexico, Pesos" +msgstr "Mexicanske peso" + +#: goffice/utils/formats.c:491 +#, fuzzy +msgid "Malaysia, Ringgits" +msgstr "Malaysiske ringgit" + +#: goffice/utils/formats.c:492 +#, fuzzy +msgid "Mozambique, Meticais" +msgstr "Mozambisiske metical" + +#: goffice/utils/formats.c:493 +#, fuzzy +msgid "Namibia, Dollars" +msgstr "Liberianske dollar" + +#: goffice/utils/formats.c:494 +#, fuzzy +msgid "Nigeria, Nairas" +msgstr "Nigerianske naira" + +#: goffice/utils/formats.c:495 +#, fuzzy +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaraguanske cordoba oro" + +#: goffice/utils/formats.c:496 +#, fuzzy +msgid "Norway, Krone" +msgstr "Norske kroner" + +#: goffice/utils/formats.c:497 +#, fuzzy +msgid "Nepal, Nepal Rupees" +msgstr "Nepalesiske rupier" + +#: goffice/utils/formats.c:498 +#, fuzzy +msgid "New Zealand, Dollars" +msgstr "New Zealand-dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +#, fuzzy +msgid "Panama, Balboa" +msgstr "Panamanske balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +#, fuzzy +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea kina" + +#: goffice/utils/formats.c:503 +#, fuzzy +msgid "Philippines, Pesos" +msgstr "Filippinske peso" + +#: goffice/utils/formats.c:504 +#, fuzzy +msgid "Pakistan, Rupees" +msgstr "Pakistanske rupier" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +#, fuzzy +msgid "Paraguay, Guarani" +msgstr "Paraguayske guarani" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "Qatari rial" + +#: goffice/utils/formats.c:508 +#, fuzzy +msgid "Romania, Lei" +msgstr "Rumænske leu" + +#: goffice/utils/formats.c:509 +#, fuzzy +msgid "Russia, Rubles" +msgstr "Russiske rubler" + +#: goffice/utils/formats.c:510 +#, fuzzy +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda-franc" + +#: goffice/utils/formats.c:511 +#, fuzzy +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Arabiske riyal" + +#: goffice/utils/formats.c:512 +#, fuzzy +msgid "Solomon Islands, Dollars" +msgstr "Solomon-øernes dollar" + +#: goffice/utils/formats.c:513 +#, fuzzy +msgid "Seychelles, Rupees" +msgstr "Seycheller rupier" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +#, fuzzy +msgid "Singapore, Dollars" +msgstr "Singapore-dollar" + +#: goffice/utils/formats.c:517 +#, fuzzy +msgid "Saint Helena, Pounds" +msgstr "St. Helena-pund" + +#: goffice/utils/formats.c:518 +#, fuzzy +msgid "Slovenia, Tolars" +msgstr "Slovenske tolar" + +#: goffice/utils/formats.c:519 +#, fuzzy +msgid "Slovakia, Koruny" +msgstr "Slovenske tolar" + +#: goffice/utils/formats.c:520 +#, fuzzy +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone leone" + +#: goffice/utils/formats.c:521 +#, fuzzy +msgid "Somalia, Shillings" +msgstr "Somaliske shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +#, fuzzy +msgid "Suriname, Guilders" +msgstr "Surinamske gylden" + +#: goffice/utils/formats.c:524 +#, fuzzy +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome og Principe dobra" + +#: goffice/utils/formats.c:525 +#, fuzzy +msgid "El Salvador, Colones" +msgstr "El Salvadoranske colon" + +#: goffice/utils/formats.c:526 +#, fuzzy +msgid "Syria, Pounds" +msgstr "Syriske pund" + +#: goffice/utils/formats.c:527 +#, fuzzy +msgid "Swaziland, Emalangeni" +msgstr "Swazilandske lilangeni" + +#: goffice/utils/formats.c:528 +#, fuzzy +msgid "Thailand, Baht" +msgstr "Thailandske baht" + +#: goffice/utils/formats.c:529 +#, fuzzy +msgid "Tajikistan, Rubles" +msgstr "Pakistanske rupier" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +#, fuzzy +msgid "Tunisia, Dinars" +msgstr "Tunesiske dinarer" + +#: goffice/utils/formats.c:532 +#, fuzzy +msgid "Tonga, Pa'anga" +msgstr "Tonganske pa'anga" + +#: goffice/utils/formats.c:533 +#, fuzzy +msgid "Turkey, Liras" +msgstr "Tyrkiske lire" + +#: goffice/utils/formats.c:534 +#, fuzzy +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad og Tobago-dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +#, fuzzy +msgid "Taiwan, New Dollars" +msgstr "Nye Taiwan-dollar" + +#: goffice/utils/formats.c:537 +#, fuzzy +msgid "Tanzania, Shillings" +msgstr "Tanzanianske shilling" + +#: goffice/utils/formats.c:538 +#, fuzzy +msgid "Ukraine, Hryvnia" +msgstr "Ukrainske hryvnia" + +#: goffice/utils/formats.c:539 +#, fuzzy +msgid "Uganda, Shillings" +msgstr "Ugandiske shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +#, fuzzy +msgid "Uruguay, Pesos" +msgstr "Uruguayanske peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +#, fuzzy +msgid "Venezuela, Bolivares" +msgstr "Venezuelanske bolivar" + +#: goffice/utils/formats.c:544 +#, fuzzy +msgid "Viet Nam, Dong" +msgstr "Vietnamesiske dong" + +#: goffice/utils/formats.c:545 +#, fuzzy +msgid "Vanuatu, Vatu" +msgstr "Vanuatu vatu" + +#: goffice/utils/formats.c:546 +#, fuzzy +msgid "Samoa, Tala" +msgstr "Samoanske tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +#, fuzzy +msgid "East Caribbean Dollars" +msgstr "Østkaribiske dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +#, fuzzy +msgid "Yemen, Rials" +msgstr "Yemenske rial" + +#: goffice/utils/formats.c:557 +#, fuzzy +msgid "Yugoslavia, New Dinars" +msgstr "Ny jugoslaviske dinarer" + +#: goffice/utils/formats.c:558 +#, fuzzy +msgid "South Africa, Rand" +msgstr "Sydafrikanske rand" + +#: goffice/utils/formats.c:559 +#, fuzzy +msgid "Zambia, Kwacha" +msgstr "Zambiske kwacha" + +#: goffice/utils/formats.c:560 +#, fuzzy +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwianske dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ingen" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Fast" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +#, fuzzy +msgid "Dash dot" +msgstr "Danske kroner" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatisk" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Ingen" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "_Middel:" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "Interval" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Omrids til _højre" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "fixed" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "rækker" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Indsæt kæde" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*mar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% grÃ¥" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% grÃ¥" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% grÃ¥" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% grÃ¥" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% grÃ¥" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Vandret stribe" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Lodret stribe" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Omvendt diagonal stribe" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonal stribe" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonal krydsskravering" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Tyk diagonal krydsskravering" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tynd vandret stribe" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tynd lodret stribe" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tynd omvendt diagonal stribe" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tynd diagonal stribe" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tynd vandret krydsskravering" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tynd diagonal krydsskravering" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Ensfarvet forgrund" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "SmÃ¥ cirkler" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halvcirkler" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "StrÃ¥tag" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Store cirkler" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Mursten" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiketter" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Værdier" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Fejl ved fortolkning af linje" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Graf..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Plot" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Plot" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Indsæt kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Indsæt kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "_Arealer" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Arealer" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +#, fuzzy +msgid "Column" +msgstr "_Kolonne" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linje" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Linjer at importere" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "Linje" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "_Gitterlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Slet kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "_Gitterlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Procentdele" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "_Gitterlinjer" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Definér navne" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Række- og kolonnehoveder" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Plot" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ugyldige parametre" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Plot" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Plot" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Plot" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Fejl ved fortolkning af linje" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Ændring af formatering af %s" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Definér navne" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Plot" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Ingenting" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Separator:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "_Slet" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Separator:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Kategori:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "_Gitterlinjer" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Opsplit" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Gang" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Gang" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Pris" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "_Interval" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Opsplit" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Opsplit" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Plot" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Plot" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "_Procentdele" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Standardafvigelse" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Slet kolonner" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Definér navne" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Fejl ved fortolkning af linje" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Hele tal" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Antal" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Linjer at importere" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Kilde" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Fejl ved fortolkning af linje" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "KildeomrÃ¥der" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "KildeomrÃ¥der" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% af normal størrelse" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "centimeter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "Vis detaljer" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Kilde" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Plot" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Dobbelt" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Dobbelt" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Fejl ved fortolkning af linje" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Fejl ved fortolkning af linje" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Slet kolonner" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Linje" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Point" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Linje" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/de.po b/lib/goffice-0.0.4/po/de.po new file mode 100644 index 0000000000..434281c25c --- /dev/null +++ b/lib/goffice-0.0.4/po/de.po @@ -0,0 +1,4215 @@ +# German Gnumeric translation. +# Copyright (C) 1998-2000 Miguel de Icaza, 2001-2005 Jody Goldberg. +# This file is distributed under the same license as the Gnumeric package. +# Ralf Baechle , 1999. +# Karsten Weiss , 1999. +# Matthias Warkus , 1999-2000. +# Karl Eichwalder , 1999-2001. +# Andreas J. Guelzow , 2001. +# Christian Meyer , 2001. +# Christian Neumair , 2002, 2003, 2004. +# Frank Arnold , 2005. +# Hendrik Richter , 2005. +# +# Thanks for improvements to "Andreas J. Guelzow" , 2001. +# +# Future translators, please take care to translate error messages correctly: +# #3D MULT? == #3D-MULT? +# #ARG! == #ARG! +# #DIV/0! == #DIV/0! +# #N/A == #-/- +# #NAME? == #NAME? +# #NULL! == #NULL! +# #NUM! == #ZAHL! +# #RECALC! == #NEU-BER! +# #REF! == #BEZUG! +# #UNKNOWN! == #UNBEKANNT! +# #VALUE! == #WERT! +# +# TODO: +# +# - translate all functions (the untranslated ones are translated with LATER) +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-07-04 19:10+0200\n" +"Last-Translator: Hendrik Richter \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "Kein gültiger UTF-8-Dateiname." + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Das Speichern über alte Dateien in diesem Format ist aus Sicherheitsgründen " +"abgeschaltet." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Sie können dieses Sicherheitsmerkmal ausschalten, indem Sie die " +"entsprechende »plugin.xml«-Datei bearbeiten." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektiv" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Datei enthält Plugin-Information mit ungültiger Kennung (%s), %s erwartet." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Plugin-Info konnte nicht von Datei gelesen werden" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Unbekannter Name." + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Nicht unterstützter Startertyp »%s«." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Fehler beim Vorbereiten des Starters »%s«." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Fehler beim Lesen der Info des Dienstes #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" +"Es ist nicht möglich, die Datei (»%s«) mit den Plugin-Informationen zu lesen." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Die Datei »%s« ist keine gültige Datei mit Plugin-Informationen." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Fehler beim Lesen des Dienstes für Plugin mit id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Plugin-Kennung enthält ungültige Zeichen (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Unbekannter Pluginname." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Für das Plugin mit der Kennung »%s« wurde kein Starter festgelegt oder die " +"Starterkennung ist ungültig." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin hat keine Kennung." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Fehler beim Initialisieren des Plugin-Starters (»%s«)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" +"Fehler beim Laden der Plugin-Abhängigkeiten: Zyklische Abhängigkeiten " +"gefunden." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Plugin mit Kennung »%s« konnte nicht aktiviert werden." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Plugin mit Kennung »%s« konnte nicht gefunden werden." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Fehler beim Aktivieren der Plugin-Abhängigkeiten." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Fehler beim Aktivieren der Plugin-Dienstes #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Fehler beim Deaktivieren des Plugin-Dienstes #%d" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Der Plugin-Starter konnte nicht geladen werden." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Plugin mit Kennung »%s« konnte nicht geladen werden." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Fehler beim Laden der Plugin-Abhängigkeiten." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Beim Lesen der Plugin-Informationen aus Datei »%s« traten Fehler auf." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Das Plugin »%s« konnte nicht aktiviert werden (Kennung: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Das Plugin »%s« konnte nicht deaktiviert werden (Kennung: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Fehler beim Lesen der Informationen zu den verfügbaren Plugins." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"Fehler beim Deaktivieren von Plugins, die nicht mehr auf der Platte sind" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Folgende Plugins sind nicht mehr auf der Platte aber immer noch aktiv:\n" +"%s.\n" +"Sie sollten Gnumeric jetzt neu starten." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Fehler beim Aktivieren der Plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Fehler beim Initialisieren des Plugin-Systems." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Starter besitzt keine »set_attributes«-Methode.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Starter besitzt keine »load_base«-Methode.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "Dienst »%s« wird von »l« nicht unterstützt." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Kein Dateiname des Moduls angegeben." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Die Modul-Datei »%s« kann nicht geöffnet werden." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Die Module-Datei »%s« hat ein ungültiges Format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Datei weist kein (»plugin_file_struct«-Symbol) auf." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Datei hat eine falsche Magic-Nummer" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" +"Version des Plugins »%s« unterscheidet sich von der der Anwendung »%s«." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" +"Das dynamische Laden von Modulen wird von diesem System nicht unterstützt." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Es ist nicht möglich, die Modul-Datei »%s« zu schließen." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Datei weist die »%s«-Funktion nicht auf." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modul weist keine »%s«-Funktion auf." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Fehler beim Laden des Plugin-Dienstes." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Die Initialisierungsfunktion beim Plugin gab Fehler zurück." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Die Aufräumfunktion im Plugin »%s« lieferte einen Fehler." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Allgemein" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Dateiöffner hat keine Beschreibung" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Dateiöffner - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Fehler beim Lesen der Datei." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Dateispeicherer hat keine Beschreibung" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Dateispeicherer - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Fehler beim Speichern der Datei." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Plugin-Starter" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject-Starter" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Kein »Typ«-Attribut beim »Service«-Element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Unbekannter Diensttyp: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Fehler beim Lesen Dienstinformationen." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Ein Dienst vor dem Aktivieren geladen werden (PLUGIN_ALWAYS_LOAD ist " +"gesetzt), aber das Laden ist fehlgeschlagen." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Seiten" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Einzug:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Suchen _nach" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Ausrichtung" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Anführungs_zeichen:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problemgröße" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Diskrete Abbildung" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Linear" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Lineare Abbildung" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logarithmische Abbildung" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Details" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisch" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Kategorien zwischen Skalens_trichen" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Kategorien zwischen _Beschriftungen" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Kreuzen bei Kategorie Nr." + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Grenzen" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "_Hauptskalenstriche:" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Neben_skalenstriche:" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Kreuz" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Beschriftung" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "Nebengitter" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "Hauptgitter" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Hauptskalenstriche" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Abbildung" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Nebenskalenstriche" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Position" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nnen" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "A_ußen" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Hoch" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Innen" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "Achse _invertieren" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Tief" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "Auß_en" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Beschriftungen anzeigen" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Typ:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legende" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Gitter" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-Achse" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-Achse" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-Achse" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Kreis-Achse" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radial-Achse" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Graph" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Höhe" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "B" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Breite" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Kein Fehlerbalken angezeigt" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Positiver Fehlerbalken angezeigt" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Negativer Fehlerbalken angezeigt" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Voller Fehlerbalken angezeigt" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Fehlerkategorie" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Werte" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "_Farbe:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "Anzei_ge:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Keine\n" +"Absolut\n" +"Relativ\n" +"Prozent" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Linienbreite:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Breite:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Ausgabe" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diagramm" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Name" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Schritt 1 von 2: Diagrammtyp wählen" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Schritt 2 von 2: Diagramm anpassen" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Diagramm anpassen" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Einfügen" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "_Graphtyp" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office-Ausgabe" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Nach v_orn" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Nach ganz _vorn" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Nach hi_nten" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Nach ganz _hinten" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Reihenfolge" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definition" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Muster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stil" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Vorschau" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Beschreibung" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Daten" + +# CHECK +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Datenreihe" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Graph-Engine" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Graphtyp" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Diagrammthema" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Index:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Einstellungen" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Schrift" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"Zweifarbig\n" +"Helligkeit" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Füllen" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linie" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Kennzeichnung" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Rahmen" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Fa_rbe:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Nichts\n" +"Muster\n" +"Verlauf\n" +"Bild" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "_Umrandungsfarbe:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Form:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "G_röße:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_il:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_yp:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Hintergrund:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Richtung:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Ende:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Fü_llfarbe:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Einpassen:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Vordergrund:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Muster:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "Aus_wählen..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Größe:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "A_nfang:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_heller" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_dunkler" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "Pkt" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"Gestreckt\n" +"Tapezieren" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Vorgabe" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabisch" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltisch" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Zentraleuropäisch" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinesisch" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kyrillisch" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Griechisch" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebräisch" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indisch" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japanisch" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreanisch" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Türkisch" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamesisch" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Westeuropäisch" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Sonstige" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabisch (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabisch (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabisch (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabisch (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabisch (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabisch (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabisch (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armenisch (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltisch (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltisch (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltisch (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltisch (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Zentraleuropäisch (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Zentraleuropäisch (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Zentraleuropäisch (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Zentraleuropäisch (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Vereinfachtes Chinesisch (GB18030)" + +# CHECK +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Vereinfachtes Chinesisch (GB2312)" + +# CHECK +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Vereinfachtes Chinesisch (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Vereinfachtes Chinesisch (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Vereinfachtes Chinesisch (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Traditionelles Chinesisch (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Traditionelles Chinesisch (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Traditionelles Chinesisch (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Kroatisch (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Kyrillisch (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Kyrillisch (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Kyrillisch (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Kyrillisch (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Kyrillisch (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Kyrillisch (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russisch (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainisch (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainisch (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Englisch (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgisch (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Griechisch (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Griechisch (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Griechisch (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebräisch (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebräisch (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebräisch (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebräisch (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebräisch (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Isländisch (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanisch (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanisch (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanisch (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Koreanisch (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Koreanisch (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Koreanisch (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Koreanisch (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordisch (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumänisch (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumänisch (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Südeuropäisch (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Türkisch (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Türkisch (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Türkisch (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Türkisch (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Benutzerdefiniert" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamesisch (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamesisch (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamesisch (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamesisch (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hebräisch, visuell (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Westlich (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Westlich (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Westlich (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Westlich (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Westlich (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Standorteinstellungen: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Konvertierungsrichtung" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Dieser Wert legt fest, welcher iconv-Test durchgeführt werden soll." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "Schwarz" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "Hellbraun" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "Goldbraun" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "Dunkelgrün #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "Marineblau" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "Dunkelblau" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "Purpur #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "Sehr dunkles Grau" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "Dunkelrot" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "Rot-Orange" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "Gold" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "Dunkelgrün" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "Graublau" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "Blau" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "Graupurpur" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "Dunkelgrau" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "Rot" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "Orange" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "Limette" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "Graugrün" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "Graublau #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "Himmelblau #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "Purpur" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "Grau" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "Magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "Strahlendes Orange" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "Gelb" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "Grün" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "Cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "Strahlendes Blau" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "Purpurrot" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "Hellgrau" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "Pink" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "Hellorange" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "Hellgelb" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "Hellgrün" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "Hellcyan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "Hellblau" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "Hellpurpur" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "Weiß" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "Purpurblau" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "Dunkelpurpur" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "Himmelblau" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "benutzerdefiniert" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Benutzerdefinierte Farbe..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Schattentyp" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Ausrichtung" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Bevorzugte Breite" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Bevorzugte Höhe" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Die Werkzeugleiste andocken" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Die Werkzeugleiste abdocken" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Datei »%s« kann nicht geöffnet werden." + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Alle Dateien" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Bilder" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Ein Bild wählen" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Speichern unter" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Datei_typ:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Die angegebene Erweiterung des Dateinamens stimmt nicht mit dem gewählten " +"Dateityp überein. Wollen Sie dennoch diesen Namen verwenden?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"ist ein Verzeichnisname." + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Sie haben nicht die Rechte nach\n" +"%s zu speichern." + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Eine Datei mit dem Namen %s existiert bereits in %s.\n" +"\n" +"Soll sie beim Speichern überschrieben werden?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Fett" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Fett-kursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "AaBbCcDdEe12345" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Schriftstil:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Schrift:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Vorschau" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Größe:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Zahl" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Währung" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Buchhaltung" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Datum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Zeit" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Prozentsätze" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Bruch" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Wissenschaftlich" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Besonderes" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Benutzerdefiniert" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Negatives Zahlenformat" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Zahlenformate" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "_Kategorien:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "_Dezimalstellen:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Beträge in traditionellen Buchhaltungsstilen anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Zahlen und Eingabewerte als nicht verarbeitete Zeichenketten anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Währungsbeträge anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Daten und optional Uhrzeiten anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Numerische Werte mit einer festen Anzahl von Dezimalen anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Uhrzeiten anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Werte näherungsweise als Brüche anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Werte als Prozentsätze anzeigen." + +# CHECK +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Werte als Zehnerpotenzen anzeigen." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Format-_Code:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Negatives Zahlen_format:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Vorschau:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Automatisch das passende Format wählen." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Direkt einen Excel-Stil angeben" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Trennzeichen für Tausender verwenden" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Westeuropäisch" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Osteuropäisch" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Nordamerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Süd- und Mittelamerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asien" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australien" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Vereinigte Staaten/Englisch (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Südafrika/Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Äthiopien/Amharisch (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Vereinigte Arab. Emirate (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algerien (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Ägypten (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Indien/Arabisch (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordanien (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libyen (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marokko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Katar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi-Arabien (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syrien (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunesien (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Aserbaidschan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Weißrussland (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgarien (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesch (bn_BG)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Indien/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Frankreich/Bretonisch (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnien-Herzigowina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spanien/Katalanisch (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tschechische Republik (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Großbritannien/Walisisch (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dänemark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Österreich (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgien/Deutsch (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Schweiz/Deutsch (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Deutschland (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburg/Deutsch (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Griechenland (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australien (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kannada/Englisch (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Großbritannien (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Englisch (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Indien/Englisch (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Neuseeland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Philippinen (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/Englisch (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Vereinigte Staaten/Englisch (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Südafrika/Englisch (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Simbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentinien (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivien (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbien (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikanische Republik (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Equador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spanien (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Vereinigte Staaten/Spanisch (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estland (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spanien/Baskisch (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finnland/Finnisch (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Faröerinseln (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgien/Französisch (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kannada/Französisch (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Schweiz/Französisch (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Frankreich (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irland/Gälisch (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Großbritannien/Schottisches Gälisch (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spanien/Galizisch (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Großbritannien/Manx-Gälisch (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Indien/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Kroatien (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ungarn (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenien (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesien (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Schweiz/Italienisch (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italien (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebräisch (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgien (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grönland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Großbritannien/Kornisch (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litauen (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Lettland (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Neuseeland/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Mazedonien (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Indien/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaysia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgien/Flämisch (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Niederlande (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norwegen/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norwegen/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Frankreich/Okzitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polen (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasilien (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumänien (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russisch (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraine/Russisch (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norwegen/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slowakei (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slowenien (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albanien (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslawien (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finnland/Schwedisch (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Schweden (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Indien/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Indien/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadschikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Äthiopien/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Philippinen/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Türkei (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russland/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraine (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Usbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgien/Wallonisch (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Vereinigte Staaten/Jiddisch (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinesisch (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/Chinesisch (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Derzeitige Standorteinstellungen: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menü" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Das Optionsmenü" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Indikatorgröße" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Größe des Aufklappindikators" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indikatorabstand" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Abstand um den Indikator" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*So" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Mo" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Di" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Mi" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Do" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Fr" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sa" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Sonntag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Montag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Dienstag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Mittwoch" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Donnerstag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Freitag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Samstag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mär" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dez" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "März" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Dezember" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "WAHR" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSCH" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Schwarz" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Blau" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Zyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Grün" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rot" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Weiß" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Gelb" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Vereinigte Arab. Emirate-Dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanischer Afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albanischer Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenischer Dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Niederländische Antillen-Gulden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angolanischer Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentinischer Peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australischer Dollar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba-Gulden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Aserbaidschan-Manat" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnisch-Herzegowinische konvertierbare Marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados-Dollar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladeschischer Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgarischer Lew" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain-Dinar" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi-Franc" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda-Dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei-Dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivianischer Boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasilianischer Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahama-Dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutanischer Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botsuanischer Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Weißrussischer Rubel" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize-Dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanadischer Dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongolesische Francs" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Schweizer Franken" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chilenischer Peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Chinesischer Renminbi Yuan" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbianischer Peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa-Rica-Colón" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kubanischer Peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Kap-Verde-Escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Zypern-Pfund" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Tschechische Krone" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Dschibuti-Franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dänische Kronen" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikanischer Peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algerischer Dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estnische Krone" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Ägyptisches Pfund" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritreische Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Äthiopischer Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidschi-Dollar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland-Pfund" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Britisches Pfund" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georga-Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey-Pfund" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghanaischer Cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar-Pfund" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambischer Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea-Franc" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemaltekischer Quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana-Dollar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hongkong-Dollar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduranische Lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Kroatische Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haitianische Gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Ungarischer Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesische Rupiah" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israelischer Neuer Schekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man-Pfund" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Indische Rupie" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irakischer Dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iranischer Rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Isländische Krone" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey-Pfund" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaikanischer Dollar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordanischer Dinar" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japanischer Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenianischer Schilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgisistan-Som" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kampodschanischer Riel" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komoren-Franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Südkoreanischer Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Nordkoreanischer Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwaitischer Dinar" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kaiman-Dollar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kasachischer Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laotischer Kip" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanesisches Pfund" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri-Lanka-Rupie" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberianischer Dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesothischer Loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litauischer Litas" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Lettischer Lats" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libyscher Dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marokkanischer Dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldawischer Leu" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar-Franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Mazedonischer Denar" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmarischer (Burmesischer) Kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolischer Tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macauische Pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauretanische Ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Maltesische Lire" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius-Rupie" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maledivische Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi-Kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexikanischer Peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysischer Ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mosambikanischer Metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namimbischer Dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigerianische Naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaraguanischer Gold-Córdoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norwegische Krone" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepalesische Rupie" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Neuseeländischer Dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omanischer Rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panamaischer Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peruanischer Sol" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua-Neuguinea-Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippinischer Peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistanische Rupie" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polnischer Zloty" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguayischer Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar-Rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumänischer Leu" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russischer Rubel" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda-Franc" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomon-Dollar " + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychellen-Rupie" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudanesischer Denar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Schwedische Krone" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur-Dollar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "St. Helena-Pfund" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slowenischer Tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slowakische Krone" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierraleonische Leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalischer Schilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborganischer Lugigino" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname-Gulden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "São-Tomé/Príncipe-Dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El-Salvador-Colón" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syrisches Pfund" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziländischer Lilangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailändischer Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadschikischer Rubel" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan-Manat" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunesischer Dinar" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tongaische Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Türkische Lire" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad/Tobago-Dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu-Dollar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwanesischer Dollar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tansania-Schilling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukrainische Griwna" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda-Schilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "US-Dollar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguayischer Peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Usbekistan-Sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezolanischer Bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnamesischer Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu-Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoanischer Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "CFA-Francs (BEAC)" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Silber, Unze" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Gold, Unzen" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Ostkaribik-Dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "International Monetary Fund (IMF) Sonderziehungsrechte" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "CFA-Francs (BEACO)" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, Unzen" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Français du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, Unzen" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen-Rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslawischer Dinar" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Südafrikanischer Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Sambischer Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Simbabwe-Dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Keine" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Einfarbig" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Strich" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Punkt" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Strich-Punkt" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Strich-Punkt-Punkt" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatisch (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "Keine" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "Quadrat" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "Diamant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "Dreieck nach unten" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "Dreieck nach oben" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "Dreieck nach rechts" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "Dreieck nach links" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "Kreis" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "Kreuz" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "Asterisk" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "Balken" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "halber Balken" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "Schmetterling" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "Sanduhr" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% grau" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% grau" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% grau" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12,5% grau" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6,25% grau" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontale Streifen" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertikale Streifen" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Diagonale Streifen rückwärts" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonale Streifen" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonale Schraffen" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Dicke diagonale Schraffen" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Dünne horizontale Streifen" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Dünne vertikale Streifen" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Dünne diagonale Streifen rückwärts" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Dünne diagonale Streifen" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Dünne horizontale Schraffen" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Dünne diagonale Schraffen" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Einfarbiger Vordergrund" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Kleine Kreise" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halbkreise" + +# auch mgl.: Reet -fa- +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Stroh" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Große Kreise" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Backsteine" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Beschriftungen" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Werte" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Fehlerbalken" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "GraphBalSäul" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Wie weit die Balken/Säulen überlappen, als Prozentsatz der Breite" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "Ü_berlappung:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Abstand zwischen Gruppen als Prozentsatz der Balken-/Säulenbreite" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Abstand:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "GraphLinie" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "GraphFläche" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Benachbarte 3D-Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Benachbarte 3D-Säulen" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D-Prozentsatz-Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D-Prozentsatz-Säulen" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Gestapelte 3D-Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Gestapelte 3D-Säulen" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Benachbarte Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Benachbarte Säulen" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "Benachbarte 3D-Balken, gruppiert nach Haupt- und Unterkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "Benachbarte Balken, gruppiert nach Haupt- und Unterkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "Benachbarte 3D-Säulen, gruppiert nach Haupt- und Unterkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Benachbarte Säulen, gruppiert nach Haupt- und Unterkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Bereich" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Flächengraph." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Bereiche" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Spalte" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linie" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Liniengraph." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linien" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"In 3D-Säulen angeordnete Unterkategorien als Prozentsätze der Gesamtsumme " +"dieser Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"In 3D-Balken angeordnete Unterkategorien als Prozentsätze der Gesamtsumme " +"dieser Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"In Balken angeordnete Unterkategorien als Prozentsätze der Gesamtsumme " +"dieser Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"In Säulen angeordnete Unterkategorien als Prozentsätze der Gesamtsumme " +"dieser Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"In 3D-Balken angeordnete Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "In Balken angeordnete Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "In Säulen angeordnete Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "In Säulen angeordnete Unterkategorien, gruppiert nach Hauptkategorien." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Prozentsatz-Bereiche" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Prozentsatz-Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Prozentsatz-Säulen" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Prozentsatz-Linien" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Prozentsatz-Flächengraph." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Prozentsatz-Liniengraph." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Gestapelte Bereiche" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Gestapelte Balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Gestapelte Säulen" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Gestapelte Linien" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Gestapelter Flächengraph." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Gestapelter Liniengraph." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Unmarkierte Linien" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Unmarkierte Prozentsatz-Linien" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Unmarkierte, gestapelte Linien" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Flächengraph-Engine" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Balken-/Säulengraph-Engine" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Diagrammdartellung : Balken/Säulen/Linien/Flächen" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "1.5d-Vorgabediagrammtypen" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Liniengraph-Engine" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Linien-, Flächen-, Balken- und Säulengraphen" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "Kasten-Graph" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "Ungültige Daten." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" +"Kasten-Graph. An die Graph-Engine müssen fünf Variablen in dieser " +"Reihenfolge übergeben werden: Minimum, erstes Quartil, Median, drittes " +"Quartil und Maximum (nicht die Rohdaten)." + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "KastenGraph" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "KastenGraphen" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "Kasten-Graphen" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "Kastengraph-Engine" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "Diagrammdarstellung : Kastengraphen" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Vorgabe-Oberflächengraphtypen" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "GraphKreis" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "GraphRing" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s Punkt %d\n" +"Wert %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Grad gegen den Uhrzeigersinn von 3 Uhr aus" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Segmente _beginnen bei:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"Der Vorgabeabstand, den die Segmente vom Zentrum haben, als Prozentsatz des " +"Kreisradius." + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Segmentabstand:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "Farben segmentweise _variieren" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "Grad" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"Der Vorgabeabstand, den dieses Segment zum Zentrum hat, als Prozentsatz vom " +"Radius des Kreises." + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "Ab_trennung:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "_Zentrumsgröße:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Torte" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Geteilte 3D-Torte" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Hauptkategorien als Prozentsätze der Gesamtsumme, wobei jeder Keil in " +"untergeordnete Kreise unterteilt ist." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Hauptkategorien als Prozentsätze der Gesamtsumme, wobei jeder Keil in " +"untergeordnete, angeordnete Balken unterteilt ist." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Mehrfach-Kreis" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Mehrfach-Kreis-Balken" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Prozentsatz jedes einfließenden Wertes in jeweils in einem Ring pro " +"Datenreihe angezeigt, wobei der letzte Ring abgetrennt ist." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" +"Prozentsatz jedes einfließenden Wertes in jeweils in einem Ring pro " +"Datenreihe angezeigt." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Prozentsatz jedes einfließenden Wertes in einer Torte." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Prozentsatz jedes einfließenden Wertes mit abgetrennten 3D-Keilen." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Prozentsatz jedes einfließenden Wertes mit abgetrennten Keilen." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Prozentsatz jedes einfließenden Wertes." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Kreis" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Geteilter Kreis" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Geteilter Ring" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Diagrammdarstellung : Kreis/Ring" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Vorgabe-Kreistypen" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Kreis- und Ringgraphen" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Kreisgraph-Engine" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Ringgraph-Engine" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "GraphRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "GraphRadarFläche" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Flächenradar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Flächenradar-Graph." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Gepunktetes Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Radargraph mit Punkten." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radargraph." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Diagrammdarstellung : Radiale Graphen" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Vorgabe-Radargraphtypen" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Radarflächengraph-Engine" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Radargraph-Engine" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Radiale/Radargraphen" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "_Scheibenanzahl:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "GraphKontur" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Kontur" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Konturgraph." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Oberfläche" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Konturgraph-Engine" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Oberflächendiagramme" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Oberflächendiagramme" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% der Vorgabegröße" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_D" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Durch_messer" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "_Negative Werte anzeigen" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Ober_fläche" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Blasen skaliert auf" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Größe dargestellt durch:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "Farben nach Blasen _variieren" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "GraphXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "GraphBlase" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Blase" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Y-Fehlerbalken" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "X-Fehlerbalken" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Zwischen mehrdimensionalen Punkten mit Bezierkurven interpolieren." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Linear zwischen mehrdimensionalen Punkten interpolieren, wobei jeder Punkt " +"gekennzeichnet wird." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Linear zwischen mehrdimensionalen Punkten interpolieren." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Alle Punkte kennzeichnen." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Mehrdimensionale Punkte mit einem Kreis an jedem Punkt." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "X-, Y- und Blasengröße ausgeben." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY-Linien" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY-Punkte" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +msgid "XY Splines" +msgstr "XY-Kurven" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D-Graphen" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D-Streugraph-Engine" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Blasengraph-Engine" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Diagrammdarstellung : XY/Streuung/Blasen" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Vorrätige Streugraphtypen" diff --git a/lib/goffice-0.0.4/po/el.po b/lib/goffice-0.0.4/po/el.po new file mode 100644 index 0000000000..b3dfd248a7 --- /dev/null +++ b/lib/goffice-0.0.4/po/el.po @@ -0,0 +1,4417 @@ +# translation of gnumeric.el.po to Greek +# Gnumeric Greek translation. +# Copyright (C) 2000,2003 Free Software Foundation, Inc. +# ######################################################### +# Spiros initial translation 431 messages translated +# +# ######################################################### +# Gnumeric 1.2.x +# jun 2003 Nikos start fixing erros and updating 557 translated +# 14Sep2003 Nikos a small update 606 translated +# 19Sep2003 Nikos a small update 637 translated +# 23Sep2003 Nikos update 755 translated +# 27Nov2003 Nikos update 827 translated +# Dec2003 Petros update XXX translated +# +# Spiros Papadimitriou , 2000. +# Nikos Charonitakis , 2003 +# Kostas Papadimas , 2003 +# Petros Velonis , 2004 +# +# +msgid "" +msgstr "" +"Project-Id-Version: Gnumeric 1.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-03-24 17:03+0200\n" +"Last-Translator: Petros Velonis \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +# # NOTE: Help text for financial and statistical functions +# # is untranslated (I am not familiar with all the terminology, +# # nor do I know of anyone who is). - Spiros +#: goffice/app/file.c:510 +#, fuzzy +msgid "Saving over old files of this type is disabled for safety." +msgstr "Αποθήκευση πάνω από παλία αÏχεία ανενεÏγή για λόγους ασφαλείας" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Αντικείμεν_ο..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Άγνωστο όνομα" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +#, fuzzy +msgid "Unknown plugin name." +msgstr "Άγνωστο σφάλμα εκτίμησης" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +#, fuzzy +msgid "Plugin has no id." +msgstr "Το άÏθÏωμα είναι ακόμα σε χÏήση.\n" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +#, fuzzy +msgid "Cannot load plugin loader." +msgstr "Άγνωστο σφάλμα εκτίμησης" + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Άγνωστο σφάλμα εκτίμησης'%s'" + +#: goffice/app/go-plugin.c:1112 +#, fuzzy +msgid "Error while loading plugin dependencies." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin.c:1288 +#, fuzzy, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο'%s'" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +#, fuzzy +msgid "Module file name not given." +msgstr "Όνομα αÏχείου:" + +#: goffice/app/go-plugin-loader-module.c:80 +#, fuzzy, c-format +msgid "Unable to open module file \"%s\"." +msgstr "άνοιγμα αÏχείου αÏθÏώματος αδÏνατο: '%s'" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +#, fuzzy +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Το άÏθÏωμα Ï€Ïέπει να πεÏιλαμβάνει τη συνάÏτηση init_plugin." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, fuzzy, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" +"Άνοιγμα αÏθÏώματος αδÏνατο\n" +"Η έκδοση του αÏθÏώματος '%s' και της εφαÏμογής '%s' διαφέÏουν." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, fuzzy, c-format +msgid "Unable to close module file \"%s\"." +msgstr "άνοιγμα αÏχείου αÏθÏώματος αδÏνατο: '%s'" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, fuzzy, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Το άÏθÏωμα Ï€Ïέπει να πεÏιλαμβάνει τη συνάÏτηση init_plugin.'%s'" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +#, fuzzy +msgid "Error while loading plugin service." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin-service.c:164 +#, fuzzy +msgid "Initializing function inside plugin returned error." +msgstr "Η init_plugin επέστÏεψε σφάλμα" + +#: goffice/app/go-plugin-service.c:182 +#, fuzzy +msgid "Cleanup function inside plugin returned error." +msgstr "Η init_plugin επέστÏεψε σφάλμα" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Γενικό" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Το άÏθÏωμα είναι ακόμα σε χÏήση.\n" + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "" +"Το άÏθÏωμα είναι ακόμα σε χÏήση.\n" +"'%s'" + +#: goffice/app/go-plugin-service.c:495 +#, fuzzy +msgid "Error while reading file." +msgstr "" +"Σφάλμα κατά την ανάγνωση του αÏχείου %s:\n" +"%s" + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Το άÏθÏωμα είναι ακόμα σε χÏήση.\n" + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Όνομα αÏχείου: %s" + +#: goffice/app/go-plugin-service.c:767 +#, fuzzy +msgid "Error while saving file." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "ΦοÏτωτής επιπÏ. λειτουÏγίας" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "ΦοÏτωτής GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Άγνωστο σÏστημα'%s'" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Σφάλμα: ανÏπαÏκτο φÏλλο" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Εξισώσεις" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "&Στοίχιση" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Αναζήτηση για" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Κενό" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "ΕυθυγÏάμμιση" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Άγνωστος τελεστής" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "ΔιακÏιτή" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "ΔιακÏιτή" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "ΓÏαμικός" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Λογικές" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "ΛογαÏιθμικό" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "ΛεπτομέÏειες" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Αυτόματο" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_ΚατηγοÏία" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Φόντο" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "Ελάχ_ιστο" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Μέγιστο" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "ΣταυÏός" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "ΜοÏφοποίηση" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Ετικέτα" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Πλέγμα" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Πλέγμα" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Μοτίβο" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "ΓÏαμμή" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Μοτίβο" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "ΓÏαμμή" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "ΈσωτεÏικό" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "ΠεÏίγÏαμμα" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "Υψηλή" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "ΈσωτεÏικό" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "Α&ντιστÏοφή" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "Χαμηλή" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "ΠεÏίγÏαμμα" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "Εμφάνιση Ε_τικετών" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_ΤÏπος:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Λεζάντα" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Τίτλος" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Πλέγμα" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Άξονας Χ" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Άξονας Î¥" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Άξονας Ζ" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "Ταξινόμιση" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Ύψος" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "W" +msgstr "Δ" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Πλάτος" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Βέλος" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Στυλ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Δείγμα" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "ΧÏώμα:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Πλάτος ΓÏαμμής:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Με:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "ΓÏάφημα" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "ΔιάγÏαμμα" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Όνομα" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Ρυθμίσεις ε_πικεφαλίδας" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Ει_σαγωγή" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "ΦÏλλο 1" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "&ΣειÏά" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "ΠÏοσανατολισμός" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Μοτίβο" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Στυλ" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Δείγμα" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "ΠεÏιγÏαφή" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Κείμενο:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Δεδομένα" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "ΣειÏά" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "ΦÏλλο 1" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "ΦÏλλο 1" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "&Στοίχιση" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Ακολουθίες χαÏακτήÏων" + +#: goffice/graph/gog-series.c:452 +#, fuzzy +msgid "Point" +msgstr "Σημείο" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "ΓÏαμματοσειÏά" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "ΣτÏλ" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Φωτεινότητα" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Γέμισμα" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "ΓÏαμμή" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Μοτίβο" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "ΠεÏίγÏαμμα" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "ΧÏώμα:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "ΠεÏίγÏαμμα" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "&ΜοÏφή" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Μέγε_θος:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "ΣτÏλ:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "Τ_Ïπος:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Π_αÏασκήνιο:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "ΚατεÏθυνση" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "Τέλος" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "ΧÏώμα γεμίσματος" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "ΤαίÏιασμα" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_ΠÏοσκήνιο" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Μοτίβο:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Επιλογή..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Μέγεθος:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "Ένα_Ïξη" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "Δε_ξιά" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "Πιο σκοÏÏο" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "Pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "Τεντωμένη" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Εξ οÏισμοÏ" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ΑÏαβικά" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Βαλτικά" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "ΚεντÏικής ΕυÏώπης" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Κινέζικα" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "ΚυÏιλλικά" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Ελληνικά" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "ΕβÏαϊκά" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Ινδιάνικα" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Ιαπωνικά" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "ΚοÏεάτικα" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "ΤουÏκικά" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Βιετναμέζικα" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Δυτική" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Άλλη" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "ΑÏαβικά (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "ΑÏαβική (IBM-864-Ι)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "ΑÏαβικά (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "ΑÏαβικά (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "ΑÏαβικά (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "ΑÏαβική (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "ΑÏαβικά (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "ΑÏμενική (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltic (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltic (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Βαλτικής (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Κελτική (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "ΚεντÏικής ΕυÏώπης (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "ΚεντÏικής ΕυÏώπης(ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "ΚεντÏικής ΕυÏώπης (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "ΚεντÏικής ΕυÏώπης (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Απλοποιημένη Κινέζικη (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Κινεζική απλοποιημένη (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Κινέζικα Απλοποιημένα (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Κινέζικα Απλοποιημένα (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Κινεζική παÏαδοσιακή (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Κινεζική παÏαδοσιακή (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "ΚÏοατική (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "ΚυÏιλλικά (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "ΚυÏιλλική (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "ΚυÏιλλική (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "ΚυÏιλλική (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "ΚυÏιλλική (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "ΚυÏιλλική (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "ΓεωÏγιανή (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Ελληνική (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Ελληνική (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Ελληνική (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "ΕβÏαϊκά (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "ΕβÏαϊκά (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "ΕβÏαϊκά (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "ΕβÏαϊκή (_MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "ΕβÏαϊκή (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Ισλανδικά (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Ιαπωνική (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Ιαπωνική (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Ιαπωνική (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "ΚοÏεατική (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "ΚοÏεάτικη (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "ΚοÏεάτικη (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "ΚοÏεάτικη (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "ÎοÏβηγική (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Ρουμανική (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Îότιας ΕυÏώπης (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Ταϊλανδική (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "ΤουÏκικά (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "ΤουÏκική (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "ΤουÏκική (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "ΤουÏκική (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "ΟÏισμένο από το χÏήστη" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Βιετναμέζικα (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Βιετναμική (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Βιετναμική (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Βιετναμική (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Οπτικά ΕβÏαϊκά (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Δυτικής ΕυÏώπης (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Δυτική (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Δυτική (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Δυτική (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Δυτική (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "&Κωδικοποίηση" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Συσχέτιση" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "μαÏÏο" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "ανοιχτό καφέ" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "χÏυσαφί καφέ" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "σκοÏÏο Ï€Ïάσινο #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "ναυτικό μπλε" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "σκοÏÏο μπλέ" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "μωβ #2" + +#: goffice/gtk/go-color-palette.c:102 +#, fuzzy +msgid "very dark gray" +msgstr "Ï€Î¿Î»Ï ÏƒÎºÎ¿ÏÏο γκÏι" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "σκοÏÏο κόκκινο" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "κόκκινο-ποÏτοκαλί" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "χÏυσαφί" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "σκοÏÏο Ï€Ïάσινο" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "ξεθωÏιασμένο μπλε" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "μπλε" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "ξεθωÏιασμένο μωβ" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "σκοÏÏο γκÏι" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "κόκκινο" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "ποÏτοκαλί" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "λεμονί" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "ξεθωÏιασμένο Ï€Ïάσινο" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "ξεθωÏιασμένο μπλε #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "μπλε ουÏÎ±Î½Î¿Ï #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "μωβ" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "γκÏι" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "Ματζέντα:" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "φωτεινό ποÏτοκαλί" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "κίτÏινο" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "Ï€Ïάσινο" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "κυανό" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "φωτεινό μπλέ" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "κόκκινο-μωβ" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "ανοιχτό ΓκÏι" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "Ïοζ" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "ανοιχτό ποÏτοκαλί" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "ανοιχτό κίτÏινο" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "ανοιχτό Ï€Ïάσινο" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "ανοιχτό κυανό" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "ανοιχτό μπλε" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "ανοιχτό μωβ" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "λευκό" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "μωβέ μπλέ" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "σκοÏÏο μωβ" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "μπλε ουÏανοÏ" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "Ï€ÏοσαÏμοσμένο" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "ΠÏοσαÏμοσμένο ΧÏώμα:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Σκιά" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "ΠÏοσανατολισμός" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, fuzzy, c-format +msgid "Unable to open file '%s'" +msgstr "Δεν είναι δυνατό το άνοιγμα του αÏχείου '%1'." + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "ΑÏχεία" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Εικόνα" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Επιλογή εικόνας" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Αποθήκευση όλων" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_ΤÏπος αÏχείου:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Κανονική" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Έντονο" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Έντονο πλάγιο" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Πλάγιο" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "ΣτÏλ γÏαμ/σειÏάς:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "ΓÏαμματοσειÏά:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "ΠÏοεπισκόπηση" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Μέγεθος:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "ΑÏιθμός" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Îόμισμα" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "Λογιστικά" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "ΗμεÏομηνία" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "ÎÏα" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Ποσοστό" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "Κλάσμα" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "Επιστημονική" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Κείμενο" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "Ειδικό" + +#: goffice/gtk/go-format-sel.c:85 +#, fuzzy +msgid "Custom" +msgstr "ΠαÏαμετÏοποιημένο" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "ΑÏνητ_ικός αÏιθμός:" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "ΑντιγÏαφή μοÏφοποίησης" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Κα_τηγοÏίες:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Δεκα_δικά ψηφία:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Εμφάνιση Ε_ξισώσεων" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Απεικόνιση τιμής όπως ακÏιβώς εισήχθη" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "ΜοÏ_φοποίηση" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "ΑÏνητ_ικός αÏιθμός:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "ΠÏοεπισκόπηση:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "ΣÏμ_βολο:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "&ΜοÏφή:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Δια_χωÏισμός 1000άδων" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "ΚεντÏάÏισμα στη σελίδα" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ασία" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "ΑφÏική" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "ΑυστÏαλία" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "ΔηνάÏιο ΜπαχÏέιν" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "ΔηνάÏιο ΙοÏδανίας" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "ΔηνάÏιο Κουβέιτ" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "ΔηνάÏιο ΛιβÏης" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "ΔηνάÏιο Τυνησίας" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Λέβ ΒουλγαÏίας" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "ΔολλάÏιο Îέας Ζηλανδίας" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Πέσος Φιλιππίνων" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Πέσος ΜεξικοÏ" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Πέσος Χιλής" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Πέσος Κολομβίας" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Πέσος Δομηνίκου" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Δειγματοληψία (%s)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "Πέσος ΜεξικοÏ" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Πέσος ΟυÏουγουάης" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Δειγματοληψία (%s)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Λέκ Αλβανίας" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "ΤÏέχον Locale (%s)" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "ΜενοÏ" + +#: goffice/gtk/go-optionmenu.c:198 +#, fuzzy +msgid "The menu of options" +msgstr "Το Î¼ÎµÎ½Î¿Ï Ï„Ï‰Î½ επιλογών" + +#: goffice/gtk/go-optionmenu.c:204 +#, fuzzy +msgid "Indicator Size" +msgstr "Μέγεθος σήμανσης" + +#: goffice/gtk/go-optionmenu.c:205 +#, fuzzy +msgid "Size of dropdown indicator" +msgstr "Μέγεθος του δείκτη κÏλισης Ï€Ïος τα κάτω" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Διαστήματα επισήμανσης" + +#: goffice/gtk/go-optionmenu.c:211 +#, fuzzy +msgid "Spacing around indicator" +msgstr "Διάστημα γÏÏω από το δείκτη" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Κυ" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Δε" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*ΤÏ" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Τε" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Πε" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Πα" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Σα" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ΚυÏιακή" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "ΔευτέÏα" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "ΤÏίτη" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "ΤετάÏτη" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Πέμπτη" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "ΠαÏασκευή" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Σάββατο" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Ιαν" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Φεβ" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*ΜαÏ" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*ΑπÏ" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Μαι" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Ιουν" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Ιουλ" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Αυγ" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Σεπ" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Οκτ" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Îοε" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Δεκ" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "ΙανουάÏιος" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "ΦεβÏουάÏιος" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "ΜάÏτιος" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "ΑπÏίλιος" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Μάιος" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "ΙοÏνιος" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "ΙοÏλιος" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ΑÏγουστος" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "ΣεπτέμβÏιος" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "ΟκτώβÏιος" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "ÎοέμβÏιος" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "ΔεκέμβÏιος" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ΑΛΗΘΕΣ" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "ΨΕΥΔΕΣ" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "ΜαÏÏο" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Μπλε" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Κυανό" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "ΠÏάσινο" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Μωβ" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Κόκκινο" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Λευκό" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "ΚίτÏινο" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +#, fuzzy +msgid "Albania, Leke" +msgstr "Λέκ Αλβανίας" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +#, fuzzy +msgid "Netherlands Antilles, Guilders" +msgstr "Ολλανδικές στεÏλίνες Αντίλλων" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +#, fuzzy +msgid "Argentina, Pesos" +msgstr "Πέσος ΜεξικοÏ" + +#: goffice/utils/formats.c:396 +#, fuzzy +msgid "Australia, Dollars" +msgstr "ΔολλάÏιο ΑυστÏαλίας" + +#: goffice/utils/formats.c:397 +#, fuzzy +msgid "Aruba, Guilders" +msgstr "ΣτεÏλίνες ΑÏοÏμπας" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +#, fuzzy +msgid "Barbados, Dollars" +msgstr "ΔολλάÏιο ΜπαÏμπέιντος" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +#, fuzzy +msgid "Bulgaria, Leva" +msgstr "Λέβ ΒουλγαÏίας" + +#: goffice/utils/formats.c:403 +#, fuzzy +msgid "Bahrain, Dinars" +msgstr "ΔηνάÏιο ΜπαχÏέιν" + +#: goffice/utils/formats.c:404 +#, fuzzy +msgid "Burundi, Francs" +msgstr "ΦÏάγκο ΜπουÏοÏντι" + +#: goffice/utils/formats.c:405 +#, fuzzy +msgid "Bermuda, Dollars" +msgstr "ΔολλάÏιο ΒεÏμοÏδων" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "Ιταλική λίÏα" + +#: goffice/utils/formats.c:409 +#, fuzzy +msgid "Bahamas, Dollars" +msgstr "ΔολλάÏιο Μπαχαμών" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +#, fuzzy +msgid "Belarus, Rubles" +msgstr "Λέβ ΒουλγαÏίας" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "ΔολλάÏιο Μπελίζ" + +#: goffice/utils/formats.c:414 +#, fuzzy +msgid "Canada, Dollars" +msgstr "Καναδικό δολλάÏιο" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +#, fuzzy +msgid "Chile, Pesos" +msgstr "Πέσος Χιλής" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +#, fuzzy +msgid "Colombia, Pesos" +msgstr "Πέσος Κολομβίας" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +#, fuzzy +msgid "Cuba, Pesos" +msgstr "Πέσος ΚοÏβας" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +#, fuzzy +msgid "Cyprus, Pounds" +msgstr "ΛίÏα ΚÏÏ€Ïου" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +#, fuzzy +msgid "Djibouti, Francs" +msgstr "ΦÏάγκο ΤζιμποÏτι" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +#, fuzzy +msgid "Dominican Republic, Pesos" +msgstr "Πέσος Δομηνίκου" + +#: goffice/utils/formats.c:428 +#, fuzzy +msgid "Algeria, Algeria Dinars" +msgstr "ΔηνάÏιο ΑλγεÏίας" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +#, fuzzy +msgid "Egypt, Pounds" +msgstr "ΛίÏα ΑιγÏπτου" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "ΔολλάÏιο Φίτζι" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "ΛίÏα Îήσων Φώκλαντ" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +#, fuzzy +msgid "Guernsey, Pounds" +msgstr "ΛίÏα Σουδάν" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +#, fuzzy +msgid "Gibraltar, Pounds" +msgstr "ΛίÏες ΓιβÏαλτάÏ" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +#, fuzzy +msgid "Guinea, Francs" +msgstr "ΦÏάγκο Γουινέας" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +#, fuzzy +msgid "Guyana, Dollars" +msgstr "ΔολλάÏιο Γουιάνας" + +#: goffice/utils/formats.c:445 +#, fuzzy +msgid "Hong Kong, Dollars" +msgstr "ΔολλάÏιο Χόνγκ Κόνγκ" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +#, fuzzy +msgid "India, Rupees" +msgstr "Ινδικά ÏοÏπια" + +#: goffice/utils/formats.c:454 +#, fuzzy +msgid "Iraq, Dinars" +msgstr "ΔηνάÏιο ΙÏάκ" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "ΔημιουÏγία γÏαμμής" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +#, fuzzy +msgid "Jamaica, Dollars" +msgstr "ΔολλάÏιο Τζαμάικα" + +#: goffice/utils/formats.c:459 +#, fuzzy +msgid "Jordan, Dinars" +msgstr "ΔηνάÏιο ΙοÏδανίας" + +#: goffice/utils/formats.c:460 +#, fuzzy +msgid "Japan, Yen" +msgstr "Ιαπωνικό γιεν" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "Σελίνι Κένυας" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +#, fuzzy +msgid "Kuwait, Dinars" +msgstr "ΔηνάÏιο Κουβέιτ" + +#: goffice/utils/formats.c:468 +#, fuzzy +msgid "Cayman Islands, Dollars" +msgstr "ΔολλάÏιο Îήσων Κέυμαν" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +#, fuzzy +msgid "Lebanon, Pounds" +msgstr "ΛίÏα Λιβάνου" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "ΔολλάÏιο ΛιβεÏίας" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +#, fuzzy +msgid "Libya, Dinars" +msgstr "ΔηνάÏιο ΛιβÏης" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "ΛίÏα Μάλτας" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +#, fuzzy +msgid "Mexico, Pesos" +msgstr "Πέσος ΜεξικοÏ" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +#, fuzzy +msgid "Namibia, Dollars" +msgstr "ΔολλάÏιο ΛιβεÏίας" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +#, fuzzy +msgid "New Zealand, Dollars" +msgstr "ΔολλάÏιο Îέας Ζηλανδίας" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +#, fuzzy +msgid "Philippines, Pesos" +msgstr "Πέσος Φιλιππίνων" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "ΑπÏίλιος" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +#, fuzzy +msgid "Russia, Rubles" +msgstr "Λέβ ΒουλγαÏίας" + +#: goffice/utils/formats.c:510 +#, fuzzy +msgid "Rwanda, Rwanda Francs" +msgstr "ΦÏάγκο Ρουάντας" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +#, fuzzy +msgid "Solomon Islands, Dollars" +msgstr "ΔολλάÏιο Îήσων Σολομώντα" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +#, fuzzy +msgid "Singapore, Dollars" +msgstr "ΔολλάÏιο ΣιγκαποÏÏης" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +#, fuzzy +msgid "Somalia, Shillings" +msgstr "Σελίνι Σομαλίας" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +#, fuzzy +msgid "Syria, Pounds" +msgstr "ΛίÏα ΣυÏίας" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +#, fuzzy +msgid "Tunisia, Dinars" +msgstr "ΔηνάÏιο Τυνησίας" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +#, fuzzy +msgid "Turkey, Liras" +msgstr "ΛίÏες ΤουÏκίας" + +#: goffice/utils/formats.c:534 +#, fuzzy +msgid "Trinidad and Tobago, Dollars" +msgstr "ΔολλάÏιο ΤÏινιδάδ και Τομπάγκο" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +#, fuzzy +msgid "Taiwan, New Dollars" +msgstr "Îέο δολλάÏιο Ταϊβάν" + +#: goffice/utils/formats.c:537 +#, fuzzy +msgid "Tanzania, Shillings" +msgstr "Σελίνι Τανζανίας" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +#, fuzzy +msgid "Uganda, Shillings" +msgstr "Σελίνι Ουγκάντας" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +#, fuzzy +msgid "Uruguay, Pesos" +msgstr "Πέσος ΟυÏουγουάης" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +#, fuzzy +msgid "Silver, Ounces" +msgstr "Επιλογές Επίλυσης" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +#, fuzzy +msgid "East Caribbean Dollars" +msgstr "ΔολλάÏιο Αν. ΚαÏαϊβικής" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +#, fuzzy +msgid "Yugoslavia, New Dinars" +msgstr "Îέο δηνάÏιο Γιουγκοσλαβίας" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +#, fuzzy +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "ΔολλάÏιο Ζιμπάμπουε" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Καμία" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "ΣτεÏεό" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Αυτόματο" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "κανένα" + +#: goffice/utils/go-marker.c:221 +#, fuzzy +msgid "square" +msgstr "ΤετÏάγωνο" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "διαμάντι" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "διάστημα" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Δε_ξιά" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "κÏκλος" + +#: goffice/utils/go-marker.c:228 +#, fuzzy +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "ΣταυÏός" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "αστεÏίσκος" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "ΡαβδόγÏαμμα" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "πεταλοÏδα" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% ΓκÏι" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% γκÏι" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% γκÏι" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% γκÏι" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% γκÏι" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "ΟÏιζόντιες Ρίγες" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "ΚατακόÏυφες Ρίγες" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Ανάποδες Διαγώνιες Ρίγες" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Διαγώνιες Ρίγες" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Διαγώνια Ψάθα" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Παχειά Διαγώνια Ψάθα" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Λεπτές ΟÏιζόντιες Ρίγες" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Λεπτές ΚατακόÏυφες Ρίγες" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Λεπτές Ανάποδες Διαγώνιες Ρίγες" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Λεπτές Διαγώνιες Ρίγες" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Λεπτή ΟÏιζόντια Ψάθα" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Λεπτή Διαγώνια Ψάθα" + +#: goffice/utils/go-pattern.c:113 +#, fuzzy +msgid "Foreground Solid" +msgstr "Φόντος" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +#, fuzzy +msgid "Bricks" +msgstr "ΤοÏβλα" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +#, fuzzy +msgid "Labels" +msgstr "Ετικέτες" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Τιμές" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "σφάλμα συντακτικής ανάλυσης\n" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "Επικάλυψη" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "σειÏές" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "Ταξινόμιση" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "Ταξινόμιση" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Ποσοστό" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "ΠαÏεμβολή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "ΠαÏεμβολή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "ΠεÏιοχή" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "ΠεÏιοχές" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +#, fuzzy +msgid "Bar" +msgstr "ΡαβδόγÏαμμα" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Στήλη" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ΓÏαμμή" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Τίτλοι Ï€Ïος εκτÏπωση" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "ΓÏαμμές" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Ποσοστό" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Ποσοστό" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Ποσοστό" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Ποσοστό" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Ποσοστό" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "ΟÏισμός Ονόματος" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Τίτλοι σειÏών και στη_λών" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Ταξινόμιση" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Μη έγκυÏο συνθηματικό" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Ταξινόμιση" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Ταξινόμιση" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Ταξινόμιση" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "σφάλμα συντακτικής ανάλυσης\n" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "ΟÏισμός Ονόματος" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "Ταξινόμιση" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "ΑλφαÏιθμ." + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "ΠεÏιγÏαφή:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "βαθμοί" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "ΔιαχωÏιστικό:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "ΚατηγοÏία:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "Πίτα 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Δειγματοληψία" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Πολ/μος" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Πολ/μος" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Κυκλικό" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Δακτυλίδι" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Δειγματοληψία" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Δειγματοληψία" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "Ταξινόμιση" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Ταξινόμιση" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "_Ποσοστό" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "κανονικό-σφάλμα" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "ΟÏισμός Ονόματος" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "σφάλμα συντακτικής ανάλυσης\n" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "ΑκέÏαιοι ΑÏιθμοί" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "Χ" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Ψ" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Πλήθος" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Τίτλοι Ï€Ïος εκτÏπωση" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Πηγή" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "σφάλμα συντακτικής ανάλυσης\n" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Ταξινόμιση" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Ταξινόμιση" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "Κανο&νικό μέγεθος" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "ΠαÏάμετÏοι" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Πηγή" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "Ταξινόμιση" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Διπλή" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Διπλή" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "σφάλμα συντακτικής ανάλυσης\n" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "σφάλμα συντακτικής ανάλυσης\n" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "ΔιαγÏαφή στη_λών" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "ΧΨ" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ΓÏαμμές" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "ΕκτÏπωση" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ΓÏαμμές" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/en_CA.po b/lib/goffice-0.0.4/po/en_CA.po new file mode 100644 index 0000000000..062e61d933 --- /dev/null +++ b/lib/goffice-0.0.4/po/en_CA.po @@ -0,0 +1,4171 @@ +# English/Canada translation of gnumeric. +# Copyright (C) 2004-2005 Adam Weinberger and the GNOME Foundation +# This file is distributed under the same licence as the gnumeric package. +# Andreas J. Guelzow , 2003. +# Adam Weinberger , 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-02-16 11:36-0400\n" +"Last-Translator: Adam Weinberger \n" +"Language-Team: English/Canada \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "Not a valid UTF-8 filename." + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "Saving over old files of this type is disabled for safety." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"You can turn this safety feature off by editing appropriate plugin.xml file." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objective" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "File contains plugin info with invalid id (%s), expected %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Couldn't read plugin info from file." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Unknown name" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Unsupported loader type \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Error while preparing loader \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Error while reading service #%d info." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Can't read plugin info file (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "File \"%s\" is not valid plugin info file." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Errors while reading services for plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Plugin id contains invalid characters (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Unknown plugin name." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "No loader defined or loader id invalid for plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin has no id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Error initializing plugin loader (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Detected cyclic plugin dependencies." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Couldn't activate plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Couldn't find plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Error while activating plugin dependencies." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Error while activating plugin service #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Error while deactivating plugin service #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Cannot load plugin loader." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Couldn't load plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Error while loading plugin dependencies." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Errors occurred while reading plugin informations from file \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Couldn't activate plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Couldn't deactivate plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Errors while reading info about available plugins." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Errors while deactivating plugins that are no longer on disk." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Errors while activating plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Errors while initializing plugin system." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Loader has no set_attributes method.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Loader has no load_base method.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "Service '%s' not supported by l." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Module file name not given." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Unable to open module file \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Module file \"%s\" has invalid format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "File doesn't contain (\"plugin_file_struct\" symbol)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "File has a bad magic number." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Plugin version \"%s\" is different from application \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamic module loading is not supported in this system." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Unable to close module file \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "File doesn't contain \"%s\" function." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Module doesn't contain \"%s\" function." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Error while loading plugin service." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initializing function inside plugin returned error." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Cleanup function inside plugin returned error." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "General" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "File opener has no description" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "File opener - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Error while reading file." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "File saver has no description" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "File saver - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Error while saving file." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Plugin loader" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject loader" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "No \"type\" attribute on \"service\" element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Unknown service type: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Error reading service information." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "pages" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indent:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Search for" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alignment" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Quote _character:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problem Size" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discrete" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Discrete mapping" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Linear" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Linear mapping" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logarithm mapping" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Details" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatic" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Categories between _ticks" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categories between _labels" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Cross at category #" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Bounds" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Ma_jor Ticks" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Mi_nor Ticks" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Cross" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Label" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "MinorGrid" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "MajorGrid" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Major ticks" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mapping" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Minor ticks" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Position" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nside" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "O_utside" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_High" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Inside" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Invert axis" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Low" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Outside" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Show Labels" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legend" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Title" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Grid" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-Axis" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-Axis" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-Axis" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Circular-Axis" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radial-Axis" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Plot" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Height" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Width" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "No error bar displayed" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Positive error bar displayed" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Negative error bar displayed" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Full error bar displayed" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Error category" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Style" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Values" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Colo_ur:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "Dis_play:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Line width:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Width:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graph" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Chart" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Name" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Step 1 of 2: Select Chart Type" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Step 2 of 2: Customize Chart" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Customize Chart" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Insert" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "_Plot Type" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office Graph" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Pull f_orward" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Pull to _front" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Push b_ackward" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Push to _back" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Order" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definition" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Pattern" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Style" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Sample" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Description" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Series" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Plot Engine" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Plot Type" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Chart Theme" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Index:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Settings" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Point" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Font" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Style" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 Colours\n" +"Brightness" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Fill" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Line" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marker" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Outline" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Co_lour:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "O_utline colour:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "Sha_pe:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Si_ze:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_yle:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Background:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Direction:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_End:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Fill colour:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Fit:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Foreground:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Pattern:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Select..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Size:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Start:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_brighter" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_darker" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"stretched\n" +"wallpaper" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Default" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabic" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltic" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Central European" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinese" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cyrillic" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Greek" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebrew" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indian" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japanese" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korean" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turkish" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamese" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Western" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Other" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabic (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabic (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabic (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabic (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabic (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabic (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabic (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armenian (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltic (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltic (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltic (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celtic (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Central European (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Central European (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Central European (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Central European (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chinese Simplified (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chinese Simplified (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chinese Simplified (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chinese Simplified (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chinese Simplified (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chinese Traditional (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chinese Traditional (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chinese Traditional (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croatian (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cyrillic (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillic (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cyrillic (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrillic (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cyrillic (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrillic (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russian (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainian (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainian (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "English (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgian (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Greek (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Greek (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Greek (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrew (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebrew (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrew (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrew (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrew (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Icelandic (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanese (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanese (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanese (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korean (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korean (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korean (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korean (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordic (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Romanian (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Romanian (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "South European (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turkish (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turkish (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turkish (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turkish (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "User Defined" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamese (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamese (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamese (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamese (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Visual Hebrew (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Western (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Western (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Western (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Western (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Western (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Conversion Direction" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "This value determines which iconv test to perform." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "black" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "light brown" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "brown gold" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "dark green #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "navy" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "dark blue" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purple #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "very dark grey" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "dark red" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "red-orange" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "gold" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "dark green" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "dull blue" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blue" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "dull purple" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "dark grey" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "red" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "orange" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "lime" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "dull green" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "dull blue #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "sky blue #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purple" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grey" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "bright orange" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "yellow" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "green" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "bright blue" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "red purple" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "light grey" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "pink" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "light orange" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "light yellow" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "light green" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "light cyan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "light blue" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "light purple" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "white" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purplish blue" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "dark purple" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "sky blue" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "custom" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Custom Colour..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Shadow type" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientation" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Preferred width" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Preferred height" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Dock the toolbar" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Un-dock the toolbar" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Unable to open file '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "All Files" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Images" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Select an Image" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Save as" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "File _type:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"is a directory name" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"You do not have permission to save to\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"A file named %s already exists in %s.\n" +"\n" +"Do you want to overwrite it?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Bold" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Bold italic" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Italic" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "AaBbCcDdEe12345" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Font style:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Preview" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Size:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Number" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Currency" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Accounting" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Date" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Time" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentage" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fraction" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Scientific" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Special" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Custom" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Negative Number Format" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Number Formats" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegories:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Deci_mal places:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Display amounts in traditional accounting styles." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Display and input values as strings with no interpretation." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Display currency amounts." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Display dates and optionally times of day." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Display numeric values with a fixed number of decimals." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Display times of day." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Display values as closest fractional approximation." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Display values as percentages." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Display values with power-of-ten scaling." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Format c_ode:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Negative number _format:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Preview:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Select an appropriate format automatically." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Specify an XL-style format directly" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Use Separator for 1000's" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Western Europe" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Eastern Europe" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "North America" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "South & Central America" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Africa" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "United States/English (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "South Africa Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Ethiopia/Amharic (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "United Arab Emirates (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algeria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/Arabic (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordan (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Lebanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libya (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Morocco (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi Arabia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaijan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Belarus (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "France/Breton (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia and Herzegowina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spain/Catalan (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Czech Republic (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Great Britain/Welsh (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Denmark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgium/German (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Switzerland/German (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Germany (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg/German (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Greece (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canada/English (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Great Britain (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/English (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Ireland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/English (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "New Zealand (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Philippines (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/English (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "United States/English (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "South Africa/English (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominican Republic (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spain (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexico (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "United States/Spanish (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonia (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spain/Basque (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finland/Finnish (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Faroe Islands (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgium/French (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canada/French (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Switzerland/French (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "France (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Ireland/Gaelic (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Great Britain/Scottish Gaelic (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spain/Galician (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Great Britain/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croatia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hungary (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Iceland (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Switzerland/Italian (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italy (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebrew (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Greenland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Great Britain/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lithuania (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "New Zealand/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaysia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgium/Flemish (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "The Netherlands (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norway/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norway/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "France/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poland (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russia (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraine/Russian (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norway/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Yugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finland/Swedish (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Sweden (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tajikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Ethiopia/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Philippines/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turkey (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russia/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraine (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgium/Walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "United States/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinese (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/Chinese (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Current Locale: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "The menu of options" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Indicator Size" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Size of dropdown indicator" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indicator Spacing" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Spacing around indicator" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Sun" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Mon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Tue" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Wed" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Thu" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Fri" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sat" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Sunday" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Monday" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Tuesday" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Wednesday" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Thursday" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Friday" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Saturday" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*May" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Oct" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "January" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "February" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "March" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "May" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "June" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "July" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "October" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "December" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Black" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Blue" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Green" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Red" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "White" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Yellow" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "United Arab Emirates, Dirhams" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, Afghanis" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, Drams" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Netherlands Antilles, Guilders" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, Pesos" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, Dollars" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Guilders" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaijan, Manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia and Herzegovina, Convertible Marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dollars" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, Dinars" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Francs" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, Dollars" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, Dollars" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, Bolivianos" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazil, Brazil Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, Dollars" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, Pulas" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belarus, Rubles" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dollars" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, Dollars" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo/Kinshasa, Congolese Francs" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Switzerland, Francs" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, Pesos" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China, Yuan Renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, Pesos" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, Colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, Pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde, Escudos" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cyprus, Pounds" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Czech Republic, Koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, Francs" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Denmark, Kroner" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominican Republic, Pesos" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algeria, Algeria Dinars" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, Krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt, Pounds" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Ethiopia, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro Member Countries, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, Dollars" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland Islands (Malvinas), Pounds" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "United Kingdom, Pounds" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, Pounds" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, Cedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, Pounds" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, Francs" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, Quetzales" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, Dollars" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, Dollars" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempiras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croatia, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gourdes" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hungary, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, Rupiahs" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, New Shekels" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, Pounds" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, Rupees" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq, Dinars" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, Rials" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Iceland, Kronur" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Pounds" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, Dollars" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, Dinars" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, Shillings" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstan, Soms" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambodia, Riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comoros, Francs" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (North), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (South), Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, Dinars" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Cayman Islands, Dollars" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakstan, Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kips" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Lebanon, Pounds" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, Rupees" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, Dollars" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, Maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lithuania, Litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya, Dinars" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Morocco, Dirhams" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldova, Lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar, Malagasy Francs" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonia, Denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), Kyats" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, Tugriks" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, Patacas" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania, Ouguiyas" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Liri" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, Rupees" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldives (Maldive Islands), Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, Kwachas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexico, Pesos" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia, Ringgits" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambique, Meticais" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, Dollars" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, Nairas" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, Gold Cordobas" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norway, Krone" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, Nepal Rupees" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "New Zealand, Dollars" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, Rials" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, Nuevos Soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippines, Pesos" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, Rupees" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poland, Zlotys" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, Rials" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, Lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russia, Rubles" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, Rwanda Francs" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Arabia, Riyals" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomon Islands, Dollars" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychelles, Rupees" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, Dinars" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Sweden, Kronor" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, Dollars" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, Pounds" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia, Tolars" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakia, Koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, Leones" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, Shillings" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname, Guilders" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome and Principe, Dobras" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Colones" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria, Pounds" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, Emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tajikistan, Rubles" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, Manats" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia, Dinars" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkey, Liras" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad and Tobago, Dollars" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalu Dollars" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, New Dollars" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, Shillings" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraine, Hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Shillings" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "United States of America, Dollars" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Pesos" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, Sums" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, Bolivares" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Viet Nam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Francs" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Silver, Ounces" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Gold, Ounces" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "East Caribbean Dollars" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "International Monetary Fund (IMF) Special Drawing Rights" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Francs" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, Ounces" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, Ounces" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, Rials" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Yugoslavia, New Dinars" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "South Africa, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, Zimbabwe Dollars" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "None" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Solid" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Dash" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Dot" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Dash dot" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Dash dot dot" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatic (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "none" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "square" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamond" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triangle down" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triangle up" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triangle right" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triangle left" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "circle" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "cross" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisk" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "bar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "half bar" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "butterfly" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "hourglass" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% Grey" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% Grey" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% Grey" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% Grey" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% Grey" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontal Stripe" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertical Stripe" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Reverse Diagonal Stripe" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonal Stripe" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonal Crosshatch" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Thick Diagonal Crosshatch" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Thin Horizontal Stripe" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Thin Vertical Stripe" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Thin Reverse Diagonal Stripe" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Thin Diagonal Stripe" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Thin Horizontal Crosshatch" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Thin Diagonal Crosshatch" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Foreground Solid" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Small Circles" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semi Circles" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Thatch" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Large Circles" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Bricks" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Labels" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Values" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Error bars" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "PlotBarCol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "How far the bars/cols overlap as a percentage of the width" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "O_verlap:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Separation between groups as a percentage of bar/col width" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Gap:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "PlotLine" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "PlotArea" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D Adjacent Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D Adjacent Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D Percentage Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D Percentage Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D Stacked Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D Stacked Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Adjacent Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Adjacent Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "Adjacent horizontal 3D bars grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "Adjacent horizontal bars grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "Adjacent vertical 3D columns grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Adjacent vertical columns grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Area" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Area plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Areas" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Bar" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Column" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Line" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Line plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "Minor categories stacked in horizontal bars grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Minor categories stacked in vertical 3D columns, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Minor categories stacked in vertical columns grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Percentage Areas" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Percentage Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Percentage Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Percentage Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Percentage area plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Percentage line plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Stacked Areas" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Stacked Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Stacked Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Stacked Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Stacked area plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Stacked line plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Unmarked Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Unmarked Percentage Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Unmarked Stacked Lines" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Area plotting engine" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Bar/Col plotting engine" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Charting : Bar/Col/Line/Area" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Default 1.5d plot types" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Line plotting engine" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Line, Area, Bar and Column plots" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "Box-Plot" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "Invalid data." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "BoxPlot" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "BoxPlots" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "Box-Plots" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "Box-plot plotting engine" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "Charting : Box-Plots" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Default surface plot types" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "PlotPie" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "PlotRing" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s point %d\n" +"Value %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Degrees counter clockwise from 3 O'Clock" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Slices start _at:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"The default amount each slice is separated from the centre measured as a " +"percentage of the radius of the pie" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Slice Separation:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Vary colours by slice" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "degrees" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"The amount this slice is separated from the centre measured as a percentage " +"of the radius of the pie" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separation:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Cen_tre size:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D Split Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Major totals as percentages with each wedge subdivided into secondary pies." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Multi-Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multi-pie-bars" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Percentage of each contributor displayed in ring for each serie." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentage of each contributor in 3D pie." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Percentage of each contributor with 3D wedges split apart." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentage of each contributor with wedges split apart." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentage of each contributor." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Split Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Split Ring" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Charting : Pie/Ring" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Default pie types" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Pie and Ring plots" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Pie plotting engine" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Ring plotting engine" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "PlotRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "PlotRadarArea" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Area Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Area radar plot." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Dotted Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Radar plot with dots." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radar plot." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Charting : Radial plots" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Default radar plot types" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Radar Area plotting engine" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Radar plotting engine" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Radial/Radar plots" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "_Slices number:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "PlotContour" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contour" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Contour plot." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Surface" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Contour plotting engine" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Surface Charts" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Surface charts" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% of default size" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_meter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Show _negative values" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Sur_face" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bubbles scaled to" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Size represented by:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Vary colours by bubble" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "PlotXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "PlotBubble" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bubble" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Y Error bars" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "X Error bars" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpolate between multi-dimensional points with Bezier splines." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Linearly interpolate between multi-dimensional points." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Markers at each point." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Multi-dimensional points with circle at each point." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Plot X, Y and bubble size." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY Lines" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY Points" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +msgid "XY Splines" +msgstr "XY Splines" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D plots" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D scatter plotting engine" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Bubble plotting engine" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Charting : XY/Scatter/Bubble" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Stock Scatter plot types" diff --git a/lib/goffice-0.0.4/po/en_GB.po b/lib/goffice-0.0.4/po/en_GB.po new file mode 100644 index 0000000000..248e071585 --- /dev/null +++ b/lib/goffice-0.0.4/po/en_GB.po @@ -0,0 +1,4171 @@ +# gnumeric en_GB.po +# Copyright (C) 1999 Free Software Foundation, Inc. +# Karl Eichwalder , 2001. +# Robert Brady , 2001. +# +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-02-15 22:58+0100\n" +"Last-Translator: David Lodge \n" +"Language-Team: English/GB \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "Not a valid UTF-8 filename." + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "Saving over old files of this type is disabled for safety." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"You can turn this safety feature off by editing appropriate plugin.xml file." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objective" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "File contains plugin info with invalid id (%s), expected %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Couldn't read plugin info from file." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Unknown name" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Unsupported loader type \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Error while preparing loader \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Error while reading service #%d info." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Can't read plugin info file (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "File \"%s\" is not valid plugin info file." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Errors while reading services for plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Plugin id contains invalid characters (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Unknown plugin name." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "No loader defined or loader id invalid for plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin has no id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Error initialising plugin loader (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Detected cyclic plugin dependencies." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Couldn't activate plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Couldn't find plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Error while activating plugin dependencies." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Error while activating plugin service #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Error while deactivating plugin service #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Cannot load plugin loader." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Couldn't load plugin with id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Error while loading plugin dependencies." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Errors occurred while reading plugin informations from file \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Couldn't activate plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Couldn't deactivate plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Errors while reading info about available plugins." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Errors while deactivating plugins that are no longer on disk." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Errors while activating plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Errors while initialising plugin system." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Loader has no set_attributes method.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Loader has no load_base method.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "Service '%s' not supported by l." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Module file name not given." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Unable to open module file \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Module file \"%s\" has invalid format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "File doesn't contain (\"plugin_file_struct\" symbol)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "File has a bad magic number." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Plugin version \"%s\" is different from application \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamic module loading is not supported in this system." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Unable to close module file \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "File doesn't contain \"%s\" function." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Module doesn't contain \"%s\" function." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Error while loading plugin service." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initialising function inside plugin returned error." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Cleanup function inside plugin returned error." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "General" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "File opener has no description" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "File opener - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Error while reading file." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "File saver has no description" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "File saver - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Error while saving file." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Plugin loader" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject loader" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "No \"type\" attribute on \"service\" element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Unknown service type: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Error reading service information." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "pages" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indent:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Search for" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alignment" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Quote _character:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problem Size" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discrete" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Discrete mapping" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Linear" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Linear mapping" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logarithm mapping" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Details" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatic" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Categories between _ticks" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categories between _labels" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Cross at category #" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Bounds" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Ma_jor Ticks" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Mi_nor Ticks" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Cross" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Label" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "MinorGrid" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "MajorGrid" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Major ticks" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mapping" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Minor ticks" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Position" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nside" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "O_utside" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_High" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Inside" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Invert axis" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Low" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Outside" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Show Labels" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legend" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Title" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Grid" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-Axis" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-Axis" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-Axis" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Circular-Axis" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radial-Axis" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Plot" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Height" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Width" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "No error bar displayed" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Positive error bar displayed" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Negative error bar displayed" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Full error bar displayed" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Error category" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Style" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Values" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Colo_ur:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "Dis_play:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Line width:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Width:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graph" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Chart" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Name" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Step 1 of 2: Select Chart Type" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Step 2 of 2: Customise Chart" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Customise Chart" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Insert" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "_Plot Type" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office Graph" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Pull f_orward" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Pull to _front" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Push b_ackward" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Push to _back" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Order" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definition" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Pattern" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Style" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Sample" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Description" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Series" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Plot Engine" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Plot Type" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Chart Theme" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Index:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Settings" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Point" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Font" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Style" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 Colours\n" +"Brightness" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Fill" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Line" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marker" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Outline" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Co_lour:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "O_utline colour:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "Sha_pe:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Si_ze:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_yle:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Background:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Direction:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_End:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Fill colour:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Fit:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Foreground:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Pattern:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Select..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Size:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Start:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_brighter" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_darker" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"stretched\n" +"wallpaper" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Default" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabic" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltic" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Central European" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinese" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cyrillic" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Greek" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebrew" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indian" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japanese" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korean" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turkish" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamese" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Western" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Other" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabic (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabic (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabic (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabic (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabic (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabic (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabic (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armenian (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltic (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltic (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltic (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celtic (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Central European (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Central European (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Central European (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Central European (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chinese Simplified (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chinese Simplified (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chinese Simplified (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chinese Simplified (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chinese Simplified (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chinese Traditional (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chinese Traditional (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chinese Traditional (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croatian (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cyrillic (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillic (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cyrillic (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrillic (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cyrillic (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrillic (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russian (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainian (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainian (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "English (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgian (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Greek (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Greek (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Greek (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrew (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebrew (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrew (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrew (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrew (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Icelandic (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanese (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanese (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanese (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korean (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korean (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korean (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korean (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordic (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Romanian (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Romanian (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "South European (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turkish (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turkish (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turkish (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turkish (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "User Defined" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamese (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamese (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamese (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamese (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Visual Hebrew (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Western (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Western (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Western (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Western (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Western (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Conversion Direction" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "This value determines which iconv test to perform." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "black" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "light brown" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "brown gold" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "dark green #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "navy" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "dark blue" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purple #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "very dark grey" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "dark red" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "red-orange" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "gold" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "dark green" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "dull blue" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blue" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "dull purple" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "dark grey" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "red" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "orange" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "lime" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "dull green" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "dull blue #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "sky blue #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purple" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grey" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "bright orange" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "yellow" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "green" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "bright blue" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "red purple" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "light grey" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "pink" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "light orange" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "light yellow" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "light green" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "light cyan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "light blue" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "light purple" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "white" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purplish blue" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "dark purple" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "sky blue" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "custom" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Custom Colour..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Shadow type" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientation" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Preferred width" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Preferred height" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Dock the toolbar" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Un dock the toolbar" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Unable to open file '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "All Files" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Images" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Select an Image" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Save as" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "File _type:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"is a directory name" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"You do not have permission to save to\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Bold" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Bold italic" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Italic" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "AaBbCcDdEe12345" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Font style:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Preview" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Size:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Number" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Currency" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Accounting" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Date" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Time" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentage" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fraction" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Scientific" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Special" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Custom" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Negative Number Format" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Number Formats" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegories:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Deci_mal places:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Display amounts in traditional accounting styles." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Display and input values as strings with no interpretation." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Display currency amounts." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Display dates and optionally times of day." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Display numeric values with a fixed number of decimals." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Display times of day." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Display values as closest fractional approximation." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Display values as percentages." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Display values with power-of-ten scaling." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Format c_ode:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Negative number _format:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Preview:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Select an appropriate format automatically." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Specify an XL-style format directly" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Use Separator for 1000's" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Western Europe" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Eastern Europe" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "North America" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "South & Central America" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Africa" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "United States/English (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "South Africa Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Ethiopia/Amharic (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "United Arab Emirates (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algeria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/Arabic (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordan (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Lebanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libya (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Morocco (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi Arabia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaijan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Belarus (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "France/Breton (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia and Herzegowina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spain/Catalan (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Czech Republic (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Great Britain/Welsh (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Denmark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgium/German (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Switzerland/German (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Germany (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg/German (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Greece (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canada/English (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Great Britain (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/English (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Ireland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/English (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "New Zealand (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Philippines (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/English (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "United States/English (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "South Africa/English (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominican Republic (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spain (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexico (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "United States/Spanish (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonia (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spain/Basque (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finland/Finnish (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Faroe Islands (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgium/French (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canada/French (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Switzerland/French (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "France (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Ireland/Gaelic (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Great Britain/Scottish Gaelic (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spain/Galician (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Great Britain/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croatia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hungary (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Iceland (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Switzerland/Italian (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italy (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebrew (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Greenland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Great Britain/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lithuania (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "New Zealand/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaysia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgium/Flemish (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "The Netherlands (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norway/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norway/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "France/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poland (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russia (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraine/Russian (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norway/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Yugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finland/Swedish (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Sweden (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tajikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Ethiopia/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Philippines/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turkey (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russia/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraine (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgium/Walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "United States/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinese (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/Chinese (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Current Locale: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "The menu of options" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Indicator Size" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Size of dropdown indicator" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indicator Spacing" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Spacing around indicator" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Sun" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Mon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Tue" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Wed" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Thu" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Fri" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sat" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Sunday" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Monday" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Tuesday" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Wednesday" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Thursday" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Friday" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Saturday" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*May" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Oct" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "January" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "February" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "March" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "May" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "June" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "July" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "October" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "December" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Black" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Blue" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Green" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Red" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "White" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Yellow" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "United Arab Emirates, Dirhams" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, Afghanis" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, Drams" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Netherlands Antilles, Guilders" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, Pesos" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, Dollars" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Guilders" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaijan, Manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia and Herzegovina, Convertible Marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dollars" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, Dinars" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Francs" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, Dollars" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, Dollars" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, Bolivianos" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazil, Brazil Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, Dollars" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, Pulas" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belarus, Rubles" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dollars" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, Dollars" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo/Kinshasa, Congolese Francs" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Switzerland, Francs" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, Pesos" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China, Yuan Renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, Pesos" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, Colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, Pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde, Escudos" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cyprus, Pounds" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Czech Republic, Koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, Francs" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Denmark, Kroner" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominican Republic, Pesos" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algeria, Algeria Dinars" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, Krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt, Pounds" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Ethiopia, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro Member Countries, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, Dollars" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland Islands (Malvinas), Pounds" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "United Kingdom, Pounds" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, Pounds" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, Cedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, Pounds" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, Francs" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, Quetzales" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, Dollars" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, Dollars" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempiras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croatia, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gourdes" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hungary, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, Rupiahs" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, New Shekels" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, Pounds" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, Rupees" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq, Dinars" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, Rials" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Iceland, Kronur" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Pounds" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, Dollars" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, Dinars" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, Shillings" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstan, Soms" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambodia, Riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comoros, Francs" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (North), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (South), Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, Dinars" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Cayman Islands, Dollars" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakstan, Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kips" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Lebanon, Pounds" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, Rupees" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, Dollars" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, Maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lithuania, Litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya, Dinars" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Morocco, Dirhams" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldova, Lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar, Malagasy Francs" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonia, Denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), Kyats" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, Tugriks" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, Patacas" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania, Ouguiyas" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Liri" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, Rupees" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldives (Maldive Islands), Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, Kwachas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexico, Pesos" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia, Ringgits" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambique, Meticais" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, Dollars" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, Nairas" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, Gold Cordobas" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norway, Krone" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, Nepal Rupees" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "New Zealand, Dollars" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, Rials" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, Nuevos Soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippines, Pesos" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, Rupees" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poland, Zlotys" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, Rials" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, Lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russia, Rubles" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, Rwanda Francs" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Arabia, Riyals" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomon Islands, Dollars" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychelles, Rupees" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, Dinars" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Sweden, Kronor" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, Dollars" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, Pounds" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia, Tolars" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakia, Koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, Leones" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, Shillings" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname, Guilders" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome and Principe, Dobras" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Colones" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria, Pounds" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, Emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tajikistan, Rubles" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, Manats" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia, Dinars" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkey, Liras" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad and Tobago, Dollars" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalu Dollars" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, New Dollars" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, Shillings" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraine, Hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Shillings" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "United States of America, Dollars" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Pesos" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, Sums" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, Bolivares" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Viet Nam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Francs" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Silver, Ounces" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Gold, Ounces" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "East Caribbean Dollars" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "International Monetary Fund (IMF) Special Drawing Rights" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Francs" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, Ounces" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, Ounces" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, Rials" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Yugoslavia, New Dinars" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "South Africa, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, Zimbabwe Dollars" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "None" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Solid" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Dash" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Dot" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Dash dot" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Dash dot dot" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatic (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "none" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "square" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamond" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triangle down" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triangle up" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triangle right" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triangle left" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "circle" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "cross" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisk" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "bar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "half bar" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "butterfly" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "hourglass" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% Grey" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% Grey" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% Grey" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% Grey" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% Grey" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontal Stripe" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertical Stripe" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Reverse Diagonal Stripe" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonal Stripe" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonal Crosshatch" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Thick Diagonal Crosshatch" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Thin Horizontal Stripe" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Thin Vertical Stripe" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Thin Reverse Diagonal Stripe" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Thin Diagonal Stripe" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Thin Horizontal Crosshatch" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Thin Diagonal Crosshatch" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Foreground Solid" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Small Circles" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semi Circles" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Thatch" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Large Circles" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Bricks" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Labels" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Values" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Error bars" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "PlotBarCol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "How far the bars/cols overlap as a percentage of the width" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "O_verlap:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Separation between groups as a percentage of bar/col width" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Gap:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "PlotLine" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "PlotArea" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D Adjacent Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D Adjacent Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D Percentage Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D Percentage Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D Stacked Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D Stacked Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Adjacent Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Adjacent Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "Adjacent horizontal 3D bars grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "Adjacent horizontal bars grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "Adjacent vertical 3D columns grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Adjacent vertical columns grouped by major and minor categories." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Area" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Area plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Areas" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Bar" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Column" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Line" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Line plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "Minor categories stacked in horizontal bars grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Minor categories stacked in vertical 3D columns, grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Minor categories stacked in vertical columns grouped by major category." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Percentage Areas" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Percentage Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Percentage Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Percentage Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Percentage area plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Percentage line plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Stacked Areas" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Stacked Bars" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Stacked Columns" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Stacked Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Stacked area plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Stacked line plot." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Unmarked Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Unmarked Percentage Lines" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Unmarked Stacked Lines" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Area plotting engine" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Bar/Col plotting engine" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Charting : Bar/Col/Line/Area" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Default 1.5d plot types" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Line plotting engine" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Line, Area, Bar and Column plots" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "Box-Plot" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "Invalid data." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "BoxPlot" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "BoxPlots" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "Box-Plots" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "Box-plot plotting engine" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "Charting : Box-Plots" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Default surface plot types" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "PlotPie" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "PlotRing" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s point %d\n" +"Value %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Degrees anti-clockwise from 3 O'Clock" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Slices start _at:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"The default amount each slice is separated from the centre measured as a " +"percentage of the radius of the pie" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Slice Separation:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Vary colours by slice" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "degrees" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"The amount this slice is separated from the centre measured as a percentage " +"of the radius of the pie" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separation:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Cen_tre size:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D Split Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Major totals as percentages with each wedge subdivided into secondary pies." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Multi-Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multi-pie-bars" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Percentage of each contributor displayed in ring for each series with wedges " +"of the last ring split apart." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Percentage of each contributor displayed in ring for each serie." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentage of each contributor in 3D pie." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Percentage of each contributor with 3D wedges split apart." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentage of each contributor with wedges split apart." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentage of each contributor." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Split Pie" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Split Ring" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Charting : Pie/Ring" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Default pie types" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Pie and Ring plots" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Pie plotting engine" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Ring plotting engine" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "PlotRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "PlotRadarArea" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Area Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Area radar plot." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Dotted Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Radar plot with dots." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radar plot." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Charting: Radial plots" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Default radar plot types" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Radar Area plotting engine" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Radar plotting engine" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Radial/Radar plots" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "_Slices number:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "PlotContour" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contour" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Contour plot." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Surface" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Contour plotting engine" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Surface Charts" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Surface charts" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% of default size" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_meter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Show _negative values" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Sur_face" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bubbles scaled to" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Size represented by:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Vary colours by bubble" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "PlotXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "PlotBubble" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bubble" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Y Error bars" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "X Error bars" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpolate between multi-dimensional points with Bezier splines." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Linearly interpolate between multi-dimensional points." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Markers at each point." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Multi-dimensional points with circle at each point." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Plot X, Y and bubble size." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY Lines" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY Points" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +msgid "XY Splines" +msgstr "XY Splines" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D plots" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D scatter plotting engine" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Bubble plotting engine" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Charting : XY/Scatter/Bubble" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Stock Scatter plot types" diff --git a/lib/goffice-0.0.4/po/es.po b/lib/goffice-0.0.4/po/es.po new file mode 100644 index 0000000000..7210b56be9 --- /dev/null +++ b/lib/goffice-0.0.4/po/es.po @@ -0,0 +1,4217 @@ +# Spanish translation of gnumeric +# Copyright © 1998,2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnumeric package. +# Alfonso Pedereño García-LaPuya, 2002. +# Federico Mena Quintero,Pregonero , 1998. +# Pablo Saratxaga , 1999-2000. +# Germán Poo Caamaño , 2001. +# Juan Manuel García Molina , 2002. +# Francisco Javier F. Serrador , 2004, 2005. +# +# +msgid "" +msgstr "" +"Project-Id-Version: es\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-01-11 02:27+0100\n" +"Last-Translator: Francisco Javier F. Serrador \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Por seguridad, se ha deshabilitado la opción de guardar sobre un archivo " +"antiguo de este tipo." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Puede desactivar esta característica en forma segura, editando el archivo " +"plugin.xml apropiado." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objetivo" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"El archivo contiene información del complemento con un identificador " +"inválido (%s). Se esperaba %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "No se puede leer la información del complemento del archivo." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nombre desconocido" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "No hay soporte para el tipo de cargador «%s»." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Error al intentar cargar «%s»." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Ha ocurrido un error al leer la información del servicio #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "No se puede leer el archivo de información del complemento («%s»)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" +"El archivo «%s» no es un archivo válido de información de complementos." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" +"Han ocurrido errores al leer los servicios del complemento con " +"identificador=«%s»." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "El identificador del complemento contiene caracteres inválidos (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nombre desconocido del complemento." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"No se encuentra definido un cargador para el complemento con identificador=«%" +"s»." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "El complemento no tiene identificador." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Error inicializando el cargador del complemento («%s» )." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Se han detectado dependencias cíclicas del complemento." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "No se puede activar el complemento con identificador=«%s»." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "No se encuentra el complemento con identificador=«%s»." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Error al activar las dependencias del complemento." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Ha ocurrido un error al activar el servicio de complementos #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Ha ocurrido un error al desactivar el servicio de complementos #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "No se puede cargar el cargador de complementos." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "No se pudo cargar el complemento con identificador=«%s»." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Error al intentar cargar las dependencias del complemento." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Han ocurrido errores al leer la información del complemento desde el archivo " +"«%s»." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "No se puede activar el complemento «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "No se puede desactivar el complemento «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" +"Ha ocurrido un error al leer la información sobre los complementos " +"disponibles." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"Ha ocurrido un error al desactivar el complementos que ya no están en el " +"disco." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Los siguientes complementos no están más en el disco pero están todavía " +"activos:\n" +"%s\n" +"Debería reiniciar Gnumeric ahora." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Han ocurrido errores al activar los complementos." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Han ocurrido errores al inicializar el sistema de complementos." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "El cargador no tiene el método set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "El cargado no tiene el método load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "El servicio «%s» no está soportado por el cargador." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "No se dado el nombre del archivo." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Es imposible abrir el archivo del módulo «%s»." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "El archivo del módulo «%s» no tiene un formato válido." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "El archivo no contiene el símbolo ·\"plugin_file_struct\"." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "El archivo tiene un número mágico erróneo." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "La versión del complemento «%s» es diferente de la aplicación «%s»." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "El módulo de carga dinámica no se encuentra soportado en el sistema." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Es imposible cerrar el archivo del módulo «%s»." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "El archivo no contiene la función «%s»." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "El módulo no contiene la función «%s»." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Ha ocurrido un error al cargar el servicio de complementos." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "La función de inicialización del complemento ha devuelto un error." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "La función de limpieza interna del complemento ha devuelto un error." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "General" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "El abridor de archivos no tiene descripción" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Abridor de archivos - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Error al leer archivo." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "El guardador de archivos no tiene descripción" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Guardador de archivos %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Error al guardar archivo." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Cargador de complementos" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Cargador GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "No hay atributo «tipo» en el elemento «servicio»." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "El tipo de servicio es desconocido: «%s»." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Ha ocurrido un error al leer la información del servicio." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Se debe cargar un servicio antes de activarlo (PLUGIN_ALWAYS_LOAD está " +"establecido) pero la carga ha fallado." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "páginas" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Sangrado:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Buscar" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alineación" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "_Carácter de cita:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Tamaño del problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discreto" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Mapeo discreto" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineal" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Mapeado lineal" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Mapeo logarítmico" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detalles" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automático" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Categorías entre _tics" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categorías entre _etiquetas" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Cruzar en la categoría #" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Bordes" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "Mí_n" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_áx" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Tics ma_yores" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Tics me_nores" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Cruzar" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formato" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etiqueta" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "RejillaMenor" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "RejillaMayor" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Tics mayores" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mapeo" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Tics menores" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Posición" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nterior" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Exterior" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Alto" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Interior" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Invertir eje" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Bajo" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Exterior" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "Mo_strar etiquetas" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tipo:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Leyenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Título" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Rejilla" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Eje-X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Eje-Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Eje-Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Eje circular" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Eje radial" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Gráfico" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Altura" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "O" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Anchura" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Ninguna barra de error mostrada" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Barra de error positiva mostrada" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Barra de error negativa mostrada" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Barra de error completa mostrada" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Categoría del error" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Estilo" + +# Muestra o ejemplo? serrador@arrakis.es +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Valores" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "_Color:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "_Pantalla:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Ninguno\n" +"Absoluto\n" +"Relativo\n" +"Porcentaje" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "Anchura de la _línea:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Anchura:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Gráfico" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diagrama" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nombre" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Paso 1 de 2: Seleccione el tipo de diagrama" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Paso 2 de 2: Personalice su diagrama" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Personalizar diagrama" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Insertar" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Tipo de _gráfico" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Diagrama de GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Tirar hacia _adelante" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Tirar hasta el _frente" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Empujar _atrás" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Empujar hasta el fon_do" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Orden" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definición" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Patrón" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Estilo" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Ejemplo" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Descripción" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Texto:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Datos" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Series" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Motor de gráficos" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Tipo de gráfico" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Tema de diagrama" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Ãndice:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Configuración" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punto" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Tipografía" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Estilo" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 colores\n" +"Brillo" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Relleno" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Línea" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marcador" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Línea exterior" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Co_lor:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Ninguno\n" +"Patrón\n" +"Degradado\n" +"Imagen" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Color del _borde exterior:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Forma:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_Tamaño:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "_Estilo:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ipo:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Fondo:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Dirección:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Fin:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Color de _relleno:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Ajuste:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Primer plano:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Patrón:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Seleccionar..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Tamaño:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Principio:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "más _brillante" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "más _oscuro" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "puntos" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"tapiz\n" +"estirado" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Predeterminado" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Ãrabe" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Báltico" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Centroeuropeo" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chino" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cirílico" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Griego" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebreo" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indio" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonés" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Coreano" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turco" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Occidental" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Otro" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Ãrabe (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Ãrabe (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Ãrabe (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Ãrabe (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Ãrabe (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Ãrabe (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Ãrabe (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armenio (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Báltico (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Báltico (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Báltico (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celta (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Centroeuropeo (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Centroeuropeo (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Centroeuropeo (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Centroeuropeo (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chino simplificado (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chino simplificado (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chino simplificado (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chino simplificado (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chino simplificado (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chino tradicional (Big 5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chino tradicional (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chino tradicional (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croata (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cirílico (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cirílico (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cirílico (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Ruso (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ucraniano (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ucraniano (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Inglés (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgiano (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Griego (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Griego (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Griego (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebreo (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebreo (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebreo (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebreo (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebreo (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandés (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonés (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonés (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonés (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Coreano (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Coreano (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Coreano (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nórdico (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumano (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumano (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Sur de Europa (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tailandés (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turco (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turco (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turco (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Definido por el usuario" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamita (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamita (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamita (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamita (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hebreo visual (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Occidental (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Occidental (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Occidental (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Occidental (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Occidental (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Localización: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Dirección de conversión" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Esta variable determina qué test de iconv realizar." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "negro" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "marrón pálido" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "marrón dorado" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "verde oscuro nº2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "azul marino" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "azul oscuro" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "púrpura nº2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "gris muy oscuro" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "rojo oscuro" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "rojo anaranjado" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "dorado" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "verde oscuro" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "azul mate" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "azul" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "púrpura mate" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "gris oscuro" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rojo" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "naranja" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "lima" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "verde mate" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "azul mate #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "azul cielo #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "púrpura" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "gris" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "naranja brillante" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "amarillo" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "verde" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "océano" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "azul brillante" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "rojo púrpura" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "gris pálido" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "naranja pálido" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "amarillo pálido" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "verde pálido" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "océano pálido" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "azul pálido" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "púrpura pálido" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "blanco" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "azul purpúreo" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "púrpura oscuro" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "azul cielo" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "personalizado" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Color personalizado..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Tipo de sombra" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientación" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Anchura preferida" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Altura preferida" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Acoplar la barra de herramientas" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Desacoplar la barra de herramientas" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Es imposible abrir el archivo «%s»" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Todos los archivos" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Imágenes" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Seleccione una imagen" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Guardar como" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Tipo de archivo:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"La extensión de archivo dada no coincide con el tipo de archivo elegido. " +"¿Quiere usar este nombre de todas formas?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"es un nombre de directorio" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"No tiene permisos para guardar a\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Un archivo llamado %s ya existe en %s.\n" +"\n" +"¿Desea sobreescribirlo?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Negrita" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Negritas cursivas" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Cursiva" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Estilo de tipografía:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Tipografía:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Vista previa" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Tamaño:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Número" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Divisa" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Financiero" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Fecha" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Hora" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Porcentaje" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fracción" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Científico" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Texto" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Especial" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personalizado" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Formato del número negativo" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formatos numéricos" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegorías:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Lugares deci_males:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Mostrar cantidades en estilos de cuenta tradicionales." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Mostrar y entrar valores como cadenas sin interpretación." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Mostrar cantidades monetarias." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Mostrar fechas y opcionalmente horas del día." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Mostrar los valores numéricos con un número fijo de decimales." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Mostrar horas del día." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Mostrar valores como la aproximación fraccional más cercana." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Mostrar valores como porcentajes." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Mostrar valores con escala en potencia de diez." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Formato del _código:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Formato del número negativo:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Vista previa:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "_Símbolo:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Seleccionar un formato apropiado automáticamente." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Especificar un estilo XL de formato directamente" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formato:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Usar separador de miles" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europa occidental" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europa oriental" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Norteamérica" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Centroamérica y sudamérica" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Ãfrica" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Estados Unidos/Inglés (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sudáfrica/Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopía/Amharico (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Emiratos Ãrabes Unidos/Ãrabe (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Baharein/Ãrabe (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Argelia/Ãrabe (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egipto/Ãrabe (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/Ãrabe (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq/Ãrabe (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordania/Ãrabe (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait/Ãrabe (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Líbano/Ãrabe (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libia/Ãrabe (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marruecos/Ãrabe (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Omán/Ãrabe (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar/Ãrabe (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Arabia Saudí/Ãrabe (ar_SA) " + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudán/Ãrabe (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Siria/Ãrabe (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Túnez/Ãrabe (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen/Ãrabe (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaiján/Ãrabe (ar_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Bielorrusia/Bielorruso (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria/Búlgaro (bg_GB)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh/Bangladesí (bn_BN)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengalí (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francia/Bretón (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia y Herzegovina/Bosnio (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "España/Catalán (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "República Checa/Checo (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Gran Bretaña/Galés (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dinamarca/Danés (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austria/Alemán (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Bélgica/Alemán (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Suiza/Alemán (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Alemania/Alemán (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburgo/Alemán (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grecia/Griego (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia/Inglés (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana/Inglés (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canadá/Inglés (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Gran Bretaña/Inglés (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Inglés (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlanda/Ingles (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/Inglés /en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nueva Zelanda/Inglés (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipinas/Inglés (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/Inglés (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Estados Unidos/Inglés (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Sudáfrica/Inglés (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe/Inglés (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina/Español (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia/Español (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile/Español (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia/Español (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica/Español (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "República Dominicana/Español (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador/Español (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "España/Español (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala/Español (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras/Español (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "México/Español (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua/Español (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panamá/Español (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Perú/Español (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico/Español (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay/Español (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador/Español (es_PY)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Estados Unidos/Español (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay/Español (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela/Español (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonia/Estonio (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "España/Vasco (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Irán (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlandia/Finlandés (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Islas Faroe (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Bélgica/Francés (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canadá/Francés (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Suiza/Francés (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francia/Francés (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlanda/Gaélico (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Gran Bretaña/Escocés gaélico (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "España/Gallego (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Gran Bretaña/Gaélico Manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindú (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croacia/Croata (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hungría/Húngaro (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia/Indonesio (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islandia/Islandés (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Suiza/Italiano (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italia/Italiano (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebreo (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japón/Japonés (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia/Georgiano (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Groenlandia (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Corea/Coreano (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Gran Bretaña/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lithuania/Lituano (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nueva Zelanda/Maorí (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malasia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Bélgica/Flamenco (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holanda/Holandés (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Noruega/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Noruega/Bokmaal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francia/Occitano (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polonia/Polaco (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasil/Portugués (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal/Portugués (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumanía (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rusia/Ruso (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ucraniano/Ruso (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Noruega/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Eslovaquia/Eslovaco (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Eslovenia/Esloveno (sl_SL)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Yugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlandia/Sueco (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Suecia/Sueco (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tajikistán (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tailandia (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopía/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipinas/Tagalo (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turquía (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rusia/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ucrania (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistán (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistán (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Bélgica/Balón (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Estados Unidos/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chino (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/Chino (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwán (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Localización actual (i18n): " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menú" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "El menú de opciones" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Tamaño del indicador" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Tamaño del indicador de despliegue" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indicador de espaciado" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Espaciado alrededor del indicador" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dom" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Lun" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Mar" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Mié" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Jue" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Vie" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sáb" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Domingo" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Lunes" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Martes" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Miércoles" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Jueves" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Viernes" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sábado" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Ene" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Abr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*May" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ago" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Oct" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dic" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Enero" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Febrero" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Marzo" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Abril" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mayo" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Junio" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Julio" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Agosto" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Septiembre" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Octubre" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Noviembre" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Diciembre" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "VERDADERO" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSO" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Negro" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Azul" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Océano" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Verde" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Rosa" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rojo" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Blanco" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Amarillo" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Emiratos Ãrabes Unidos, Dirhams" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistán, afganí" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Antillas holandesas, florín" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, pesos" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, dólares" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, florín" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaiyán, manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia y Herzegovina, marco convertible" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dólares" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, lev" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahráin, dinares" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, francos" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermudas, dólares" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei, dólares" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasil, reales" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, dólares" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bután, ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Bostwana, pulas" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Bielorrusia, rublos" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dólares" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canadá, dólares" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo/Kinshasa, francos" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Suiza, francos" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, pesos" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China, yuan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, pesos" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cabo Verde, escudos" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Chipre, libras" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "República Checa, coronas" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Dijibouti, francos" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dinamarca, coronas" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "República Dominicana, pesos" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Argelia, dinares" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, coronas" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egipto, libras" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopía, birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Países zona Euro, euros" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dólares" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Islas Malvinas, libras" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Reino Unido, libras" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, libras" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, libras" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, francos" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzales" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, dólares" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dólares" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempiras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croacia, kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haití, gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hungría, forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, rupias" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, nuevo sheqel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isla de Man, libras" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, rupias" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq, dinares" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Irán, rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islandia, coronas" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, libras" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dólares" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordania, dinares" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japón, yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, chelines" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirguizistán, soms" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Camboya, riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comoras, francos" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Corea (Norte), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Corea (Sur), Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dinares" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Islas Caimán, dólares" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazajistán, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kips" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Líbano, libras" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, rupias" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, dólares" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesoto, maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lituania, litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Letonia, lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libia, dinares" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marruecos, dirhams" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavia, leu" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar, franco malgache" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonia, denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), kyats" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, tugriks" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macao, patacas" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania, ouguiyas" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lira" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauricio, rupia mauriciana" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldivas (Islas Maldivas), rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwachas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "México, pesos" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malasia, ringgits" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambique, metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dólares" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, nairas" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, córdoba de oro" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Noruega, corona" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rupia nepalesa" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nueva Zelanda, dólares" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omán, Riel omaní" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panamá, balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Perú, nuevos soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papúa Nueva Guinea, kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipinas, pesos" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistán, rupias" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polonia, zlotys" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, guaraní" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, riels" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumanía, leu" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusia, rublos" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, franco ruandés" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Arabia Saudí, rials " + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Islas Solomón, dólares" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychelles, rupias" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudán, dinares" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Suecia, coronas" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, dólares" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Sta. Helena, libras" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Eslovenia, tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Eslovaquia, coronas" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leona, leones" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, chelines" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, florínes" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Santo Tomé y Príncipe, dobras" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El salvador, colones" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Siria, libras" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swazilandia, emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tailandia, baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tajikistán, rublos" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistán, manats" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Túnez, dinares" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turquía, liras" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad y Tobago, dólares" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, dólares de Tuvalu" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwán, nuevo dólar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, chelines" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ucrania, hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, chelines" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Estados Unidos de América, dólares" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, pesos" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbequistán, Sums" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, bolívares" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, francos" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Plata, onzas" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Oro, onzas" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Dólares del Caribe oriental" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Derechos especiales de cobro del Fondo Monetario Internacional (FMI)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Comunidad Financiera Africana (BCEAO), francos" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Paladio, onzas" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Francos de las Comores francesas del Pacífico" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platino, onzas" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Yugoslavia, nuevo dinar" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Sudáfrica, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dólar de Zimbabwe" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ninguno" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Sólido" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Dash" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Dot" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Guión punto" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Guión punto punto" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automático (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ninguno" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "cuadrado" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamante" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triángulo hacia abajo" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triángulo hacia arriba" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triángulo a la derecha" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triángulo a la izquierda" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "círculo" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "cruz" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisco" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "barra" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "media barra" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "mariposa" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "reloj de arena" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "Gris 75% " + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "Gris 50%" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "Gris 25%" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "Gris 12.5%" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "Gris 6.25%" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Línea horizontal" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Línea vertical" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Línea diagonal inversa" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Línea diagonal" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Línea sombreada diagonal" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Línea sombreada diagonal gruesa" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Línea horizontal fina" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Línea vertical fina" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Línea diagonal inversa fina" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Línea diagonal fina" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Línea sombreada horizontal fina" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Línea diagonal sombreada fina" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Primer plano sólido" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Pequeños círculos" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semicírculos" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Techo" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Grandes círculos" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Ladrillos" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiquetas" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valores" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Barras de error" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "GráficoBarCol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" +"Hasta donde las barras/columnas se superponen como un porcentaje del ancho" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "_Solapar:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Separación entre grupos como un porcentaje del ancho de barra/columna" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Hueco:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "GráficoLínea" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "GráficoÃrea" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Barras adyacentes 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Columnas 3D adyacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Barras 3D de porcentaje" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Columnas 3D de porcentaje" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Barras 3D apiladas" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Columnas 3D apiladas" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Barras adyacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Columnas adyacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Barras 3D horizontales adyacentes agrupadas por categorías mayores y menores." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Barras horizontales adyacentes agrupadas por categorías mayores y menores." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "Columnas 3D adyacentes agrupadas por categorías mayores y menores." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Columnas verticales adyacentes agrupadas por categorías mayores y menores." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Ãrea" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Gráfico de áreas." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Ãreas" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Barra" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Línea" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Gráfico de líneas." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Líneas" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Categorías menores apiladas como porcentajes del total menor, en barras " +"horizontales 3D, agrupadas por categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Categorías menores apiladas como porcentajes del total menor, en barras " +"verticales 3D, agrupadas por categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Categorías menores apiladas como porcentajes del total menor, en barras " +"horizontales, agrupadas por categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Categorías menores apiladas como porcentajes del menor total, en columnas " +"verticales, agrupadas por categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Categorías menores apiladas en barras 3D horizontales, agrupadas por " +"categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Categorías menores apiladas en barras horizontales agrupadas por categoría " +"mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Categorías menores apiladas en columnas 3D verticales, agrupadas por " +"categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Categorías menores apiladas en columnas verticales agrupadas por la " +"categoría mayor." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Ãreas de porcentaje" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Barras de porcentaje" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Columnas de porcentaje" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Líneas de porcentajes" + +# Sobra el punto final +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Gráfico de área de porcentual." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Gráfica de líneas porcentuales." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Ãreas apiladas" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Barras apiladas" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Columnas apiladas" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Líneas apiladas" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Gráfico de áreas apiladas." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Gráfica de líneas apiladas." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Líneas no marcadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Líneas de porcentajes no marcadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Líneas apiladas no marcadas" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Motor de dibujo de áreas" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Motor de dibujo de barras/columnas" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Diagrama: Bar/Col/Linea/Ãrea" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Tipos de gráficas preestablecidas para 1.5d" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Motor de dibujo de líneas" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Diagramas de línea, área, barras y columnas" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Gráfico" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "El patrón de búsqueda no es válido." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Gráfico" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Gráfico" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Gráfico" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Motor de dibujo de barras/columnas" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Gráficas: Diagramas radiales" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Tipos de gráficas de superficie predeterminadas" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "GráficoTarta" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "GráficoAnillo" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s punto %d\n" +"Valor %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" +"Grados contando en el sentido de las agujas del reloj desde las 3 en punto" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Las rodajas _empiezan en:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"La cantidad preestablecida que cada rodaja está separada del centro, medido " +"como un porcentaje del radio de la tarta" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Separación de rodajas:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Variar colores por rodaja" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "grados" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"La cantidad preestablecida que cada rodaja está separada del centro, medido " +"como un porcentaje del radio de la tarta" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separación:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Tamaño cen_tral:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Tarta 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Tarta partida 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Totales mayores como porcentajes con cada cuña subdividida en tartas " +"secundarias." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Totales mayores como porcentajes con cada cuña subdividida en barras " +"secundarias apiladas." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Tarta múltiple" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Barras multi-tarta" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Porcentaje de cada contribuyente mostrado en anillo para cada serie con " +"cuñas del último anillo a parte." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" +"Porcentaje de cada contribuyente mostrado en un anillo para cada serie." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "El porcentaje de cada contribuyente en una tarta 3D." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Porcentaje de cada contribuyente con cuñas 3D aparte." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Porcentaje de cada contribuyente con cuñas divididas a parte." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Porcentaje de cada contribuyente." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Tarta" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Anillo" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Dividir tarta" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Dividir anillo" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Diagrama: Tarta/Anillo" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Tipos de tarta predeterminados" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Diag de tartas y anillos" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Motor de dibujo de tartas" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Motor de dibujo de anillos" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "GráficoRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "GráficoÃreaRadar" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Ãrea de radar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Gráfico de áreas de radar." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Radar de puntos" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Gráfico de radar con puntos." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Gráfica de radar." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Gráficas: Diagramas radiales" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Tipos de gráficas de radar preestablecidas" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Motor de dibujo de áreas de radar" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Motor de dibujo de radares" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Gráficas radiales/radar" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "Número de _rodajas:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "Contorno de ploteo" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contorno" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Gráfico de contorno." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Superficie" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Motor de dibujo de contornos" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Diagramas de superficie" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Diagramas de superficie" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% del tamaño original" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Diá_metro" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Mostrar valores _negativos" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "_Superficie" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Burbujas escaladas a" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Tamaño representado por:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Variar colores por burbuja" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "GráficoXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "GráficoBurbuja" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Burbuja" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Barras de error de Y" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "Barras de error de X" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Interpolar linealmente entre puntos multidimensionales, con marcadores en " +"cada punto." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpolar linealmente entre puntos multidimensionales, con marcadores en " +"cada punto." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Interpolar linealmente entre puntos multidimensionales." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Marcas en cada punto." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Puntos multidimensionales con un círculo en cada punto." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Gráfico X, Y y tamaño burbuja." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Líneas XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Puntos XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Líneas XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "Gráficos 2D" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "Motor de dibujo de diagramas de dispersión 2D" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Motor de dibujo de burbujas" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Gráficas: XY/Dispersión/Burbuja" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Inventario de tipos de gráficas de dispersión" diff --git a/lib/goffice-0.0.4/po/et.po b/lib/goffice-0.0.4/po/et.po new file mode 100644 index 0000000000..59c1ce86dc --- /dev/null +++ b/lib/goffice-0.0.4/po/et.po @@ -0,0 +1,4248 @@ +# translation of gnumeric.po to Estonian +# Gnumericu eestikeelne tõlge. +# Copyright (C) 2001-2003 Free Software Foundation, Inc. +# Ain Vagula , 2000-2004. +# Priit Laes , 2003, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.1.20CVS\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-01-06 16:06+0300\n" +"Last-Translator: Priit Laes \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Seda tüüpi vanade failide ülekirjutamine ei ole ohutuskaalutlustel toetatud." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Sa saad selle ettevaatusabinõu välja lülitada muutes vastavat plugin.xml " +"faili." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektiivne" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, fuzzy, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "Fail sisaldab plugina infot, mille id (%s) on vigane, oodati %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Failist ei suudetud lugeda plugina infot." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Tundmatu nimi" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Toetamata laadija tüüp \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Viga laadija \"%s\" ettevalmistamisel." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Viga teenuse #%d info lugemisel." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ei suuda lugeda plugina info faili (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Fail \"%s\" ei ole sobiv plugina info fail." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Viga plugina, mille id=\"%s\" jaoks teenuste lugemisel." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Tundmatu plugina nimi." + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Plugina, mille id=\"%s\", jaoks pole laadijat määratud." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Pluginal ei ole id-d." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Viga plugina laadija (\"%s\") initsialiseerimisel." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Viga plugina sõltuvuste laadimisel." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ei suudetud aktiveerida pluginat \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Plugina, mille id=\"%s\", jaoks pole laadijat määratud." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Viga plugina sõltuvuste laadimisel." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Viga plugina teenuse #%d aktiveerimisel." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Viga plugina teenuse #%d deaktiveerimisel." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ei suuda laadida plugina laadijat." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Plugina, mille id=\"%s\", jaoks pole laadijat määratud." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Viga plugina sõltuvuste laadimisel." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Failist \"%s\" plugina infot lugedes tekkisid vead." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ei suudetud aktiveerida pluginat \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ei suudetud deaktiveerida pluginat \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Vead saadaolevate pluginate kohta info lugemisel." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Viga plugina teenuse #%d deaktiveerimisel." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Vead pluginate aktiveerimisel." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Vead pluginate süsteemi initsialiseerimisel." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Teenus ei ole laadija poolt toetatud." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Mooduli nimi andmata" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ei saa avada mooduli faili \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Moodulifaili \"%s\" formaat on sobimatu." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Fail ei sisalda (\"plugin_file_struct\" sümbolit)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Failil pole õige maagiline arv." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Plugina versioon \"%s\" erineb rakendusest \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dünaamiliste mooduliste laadimine ei ole süsteemi poolt toetatud." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ei saa sulgeda mooduli faili \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Fail ei sisalda funktsiooni \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Moodul ei sisalda \"%s\" funktsiooni." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Viga plugina teenuse laadimisel." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Pluginasisese funktsiooni laadimisel tekkis viga." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Pluginasisene puhastusfunktsioon andis veateate." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Üldine" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Faili avaja, mille id=\"%s\", ei ole kirjeldatud." + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "Faili avajal pole id-d" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Viga faili lugemisel." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Faili salvestaja, mille id=\"%s\", ei ole kirjeldatud." + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Faili salvestajal pole id-d" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Viga faili salvestamisel." + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Ei suuda laadida plugina laadijat." + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Objektiivne väärtus" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Tundmatu leht '%s'" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Viga teenuse #%d info lugemisel." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "lehti" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Taandus" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Otsi" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Joondus" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Kvootimissümbol:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Probleemi suurus" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskreetne" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Diskreetne mäppimine" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineaarne" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Lineaarne mäppimine" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logaritmiline mäppimine" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Üksikasjad" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automaatne" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategooria" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Sidemed" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Sul_ge" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Vorming" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Pealdis" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Reede" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Reede" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Muster" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mäppimine" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Muster" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Paigutus" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Sisemine" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Esiletoodud" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Kõrge" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Sisemine" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Lisa" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Madal" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Esiletoodud" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Pealdised" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tüüp:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legend" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Tiitel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Alusvõrk" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X telg" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y telg" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z telg" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radiaaltelg" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Trüki" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Kõrgus" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Laius" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Vea kategooria" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stiil" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Väärtused" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Vä_rv:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Joone laius:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Laius:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Diagramm" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diagramm" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nimi" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Samm 1 3-st: Vali diagrammi tüüp" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Samm 3 3-st: Kohanda diagrammi" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Kohanda diagrammi" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Sisesta" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Trüki nimi" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Või" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definitsioon" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Muster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stiil" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Valim" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Kirjeldus" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Andmed" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Jadad" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Trüki nimi" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Trüki nimi" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Indeks:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Sätted" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Font" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stiil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "erkoranž" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Täidis" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Joon" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marker" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Eelvaade" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Vä_rv:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Äärejoone värv" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "Ku_ju:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_Suurus:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "S_tiil:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "Tüü_p:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "T_aust:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "S_uund:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Lõpp:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Täitmise värv" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Mahuta:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Esiplaan" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Muster:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Vali..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Suurus:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Algus:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_heledam" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_tumedam" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Vaikimisi" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Araabia" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Balti" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Kesk-Euroopa" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Hiina" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kirillitsa" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Kreeka" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Heebrea" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "India" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Jaapani" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korea" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Türgi" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "vietnami" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Lääne" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Teised" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Araabia (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Araabia (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Araabia (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Araabia (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Araabia (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Araabia (Macintosh-araabia)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Araabia (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armeenia (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Balti (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltic (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltic (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keldi (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Kesk-Euroopa (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Kesk-Euroopa (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Kesk-Euroopa (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Kesk-Euroopa (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Lihtsustatud hiina (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Lihtsustatud hiina (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Lihtsustatud hiina (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Lihtsustatud hiina (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Lihtsustatud hiina (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Tavaline hiina (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Tavaline hiina (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Tavaline hiina (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Horvaatia (Macintosh-Horvaatia)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Kirillitsa (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Kirillitsa (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Kirillitsa (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Kirillitsa (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Kirillitsa (Macintosh-kirillitsa)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Kirillitsa (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Vene (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukraina (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukraina (Macintosh-ukraina)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Inglise (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (Macintosh-farsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Gruusia (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Kreeka (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Kreeka (Macintosh-kreeka)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Kreeka (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (Macintosh-gujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmuki (Macintosh-gurmuki)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Heebrea (IBM-862" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Heebrea (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Heebrea (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Heebrea (Macintosh-heebrea)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Heebrea (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (Macintosh-devanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandi (Macintos-islandi)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Jaapani (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Jaapani (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Jaapani (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korea (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korea (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korea (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korea (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Skandinaavia (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumeenia (Macintosh-rumeenia)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumeenia (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Lõuna-Euroopa (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Türgi (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Türgi (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Türgi (Macintosh-türgi)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Türgi (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Kasutaja määratletud" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnami (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnami (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnami (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnami (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Visuaalne heebrea (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Lääne (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Lääne (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Lääne (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Lääne (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Lääne (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Lokaat: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Teisendamise suund" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "must" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "helepruun" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "kuldpruun" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "tumeroheline #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "tumesinine" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "tumesinine" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purpurne #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "väga tume hall" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "tumepunane" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "punakasoranž" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "kuldne" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "tumeroheline" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "tuhmsinine" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "sinine" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "tuhmpurpurne" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "tumehall" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "punane" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oranž" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "erkvalge" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "tuhmroheline" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "tuhmsinine #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "taevasinine #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purpur" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "hall" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "fuksiin" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "erkoranž" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "kollane" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "roheline" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "tsüaan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "erksinine" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "purpurpunane" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "helehall" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "roosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "heleoranž" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "helekollane" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "heleroheline" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "heletsüaan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "helesinine" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "helepurpurne" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "valge" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purpurne sinine" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "tumelilla" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "taevasinine" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "kohandatud" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Kohandatud värv:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Varju tüüp" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Suund" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Eelistatud laius" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Eelistatud kõrgus" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Kopeeri valik lõikepuhvrisse" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ei saa avada faili '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Kõik failid" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Pildid" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Vali pilt" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Salvesta kui" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Faili _tüüp:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"on kataloogi nimi" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Sul ei ole lubatud salvestada\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Fail nimega %s on kataloogis %s juba olemas.\n" +"\n" +"Tahad sa selle üle kirjutada?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normaalne" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Rasvane" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Rasvane kaldkiri" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kaldkiri" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Fondi stiil:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Eelvaade" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Suurus:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Arv" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "_Raha" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "_Bilanss" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Kuupäev" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Aeg" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "_Protsent" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Murd" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "Teaduslik" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Eri" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Kohandatud" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Negatiivse arvu vorming" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Arvude vorming" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Kategooria:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Kümnend_kohti:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "Euroopa rahaühik" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Näita _gruppe" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Näita väärtust täpselt nagu see sisestati" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Vorming :" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Negat_iivne arv" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "Eelvaade:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Sü_mbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "_Vorming :" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Kasuta tuhandete eraldajat" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Lääne-Euroopa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Ida-Euroopa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Põhja-Ameerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Lõuna- ja Kesk-Ameerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Aasia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Aafrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Austraalia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Ühendriigid/inglise (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Lõuna-Aafrika afrikaani (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etioopia/amhaara (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Araabia Ühendemiraadid (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrein (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Alžeeria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egiptus (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/araabia (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordaania (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuveit (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Liibanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Liibüa (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Omaan (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Katar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi Araabia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudaan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Süüria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tuneesia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jeemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Aserbaidžaan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Valgevene (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Prantsusmaa/bretooni (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia ja Hertsegoviina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Hispaania/kataloonia (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "TÅ¡hehhi (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Suurbritannia/kõmri (cy_GB" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Taani (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgia/saksa (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Å veits/saksa (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Saksamaa (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luksemburg/saksa (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Kreeka (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Austraalia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/inglise (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Suurbritannia (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/inglise (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Iirimaa (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/inglise (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Uus-Meremaa (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipiinid (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/inglise (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Ühendriigid/inglise (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Lõuna-Aafrika/inglise (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentiina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Boliivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "TÅ¡iili (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikaani vabariik (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Hispaania (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduuras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mehhiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nikaraagua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peruu (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puertoriiko (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguai (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Ühendriigid/hispaania (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguai (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venetsueela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Eesti (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Hispaania/baski (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iraan (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Soome/soome (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Fääri saared (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgia/prantsuse (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/prantsuse (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Å veits/prantsuse (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Prantsusmaa (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Iirimaa/gaeli (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Suurbritannia/Å oti gaeli (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Hispaania/galiitsia (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Suurbritannia/mänksi gaeli (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/hindi (hi_IN" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Horvaatia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ungari (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armeenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indoneesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "SveitÅ¡/itaalia (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Itaalia (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Iisrael/heebrea (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Jaapan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Gruusia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Gröönimaa (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Suurbritannia/korni (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Leedu (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Läti (lv_LV" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Uus Meremaa/maoori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedoonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaisia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgia/flaami (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holland (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norra/uusnorra (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norra/bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Prantsusmaa/oksitaani (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poola (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasiilia (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumeenia (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Venemaa (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraina/vene (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norra/saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakkia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Sloveenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albaania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslaavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Soome/rootsi (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Rootsi (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/tamili (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadžikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tai (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etioopia/tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipiinid/tagali (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Türgi (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Venemaa/tatari (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Usbekistan, (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgia/vallooni (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Ühendriigid/juudi (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Hiina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/hiina (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/hiina (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Praegune lokaat: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menüü" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Valikuvõimaluste menüü" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Indikaatori suurus" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Rippindikaatori suurus" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indikaatori asetsus" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Asetus indikaatori ümbruses" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*P" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*E" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*T" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*K" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*N" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*R" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*L" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Pühapäev" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Esmaspäev" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Teisipäev" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Kolmapäev" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Neljapäev" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Reede" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Laupäev" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jaan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Veebr" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Märts" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Juuni" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Juuli" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sept" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dets" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Jaanuar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "veebruar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Märts" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Aprill" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juuni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juuli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktoober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Detsember" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "must" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "sinine" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Tsüaan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "roheline" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Lilla" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "punane" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "valge" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "kollane" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Araabia Ühendemiraadid, dirhamid" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistan, afgaanid" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albaania, lekid" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armeenia, dramid" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Hollandi Antillid, guldenid" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanzad" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentiina, peesod" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Austraalia, dollarid" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, guldenid" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Aserbaidæaan, manatid" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia ja Hertsegoviina, konverteeritavad margad" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dollarid" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, takad" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaaria, levid" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrein, dinaarid" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, frangid" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuuda, dollarid" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei, dollarid" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Boliivia, bolivianod" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasiilia, brasiilia reaalid" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahama, dollarid" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrumid" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pulad" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Valgevene, rublad" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dollarid" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, dollarid" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/Kinshasa, kongo frangid" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Å veits, frangid" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "TÅ¡iili, peesod" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Hiina, Renminbi jüaanid" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbia, peesod" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, Colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuuba, peesod" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Roheneemesaared, eskuudod" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Küpros, naelad" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "TÅ¡ehhi Vabariik, kroonid" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, frangid" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Taani, kroonid" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikaani vabariik, peesod" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Alžeeria, Alžeeria dinaarid" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Eesti, kroonid" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egiptus, naelad" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nakfad" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etioopia, birrid" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euroliidu liikmesmaad, eurod" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidži, dollarid" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falklandi Saared, naelad" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Ühendatud Kuningriik, naelad" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Gruusia, larid" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, naelad" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedid" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, naelad" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasid" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, frangid" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzalid" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, dollarid" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hongkong, dollarid" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempirad" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Horvaatia, kunad" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gourde'id" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Ungari, forindid" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indoneesia, ruupiad" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Iisrael, uusseeklid" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Mani saar, naelad" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, ruupiad" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraak, dinaarid" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iraan, riaalid" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, kroonid" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, naelad" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dollarid" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordaania, dinaarid" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Jaapan, jeenid" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Keenia, Å¡illingid" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kõrgõstan, somid" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodža, rieelid" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komoorid, frangid" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Põhja Korea, wonid" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Lõuna Korea, wonid" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuveit, dinaarid" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kaimani Saared, dollarid" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kasahstan, tenged" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kipid" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Liibanon, naelad" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, ruupiad" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Libeeria, dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, malotid" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Leedu, litid" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Läti, latid" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Liibüa, dinaarid" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroko, dirhamid" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldaavia, leud" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, malagassi frangid" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedoonia, dinaarid" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Birma), kyatid" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongoolia, tugrikud" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macao, patacad" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritaania, ouguiyad" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, liirid" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, ruupiad" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Malediivid, rufiyaad" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwachad" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mehhiko, peesod" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaisia, ringgitid" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mosambiik, meticalid" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namiibia, dollarid" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeeria, nairad" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, kuldkordobad" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norra, kroonid" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepaal, nepaali ruupiad" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Uus-Meremaa, dollarid" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omaan, riaalid" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboad" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peruu, uued solid" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Paapua - Uus-Ginea, kinad" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipiinid, peesod" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, ruupiad" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poola, zlotid" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguai, guaranid" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar, riaalid" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumeenia, leud" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Venemaa, rublad" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, ruanda frangid" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Araabia, riaalid" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Saalomoni Saared, dollarid" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seishellid, ruupiad" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudaan, dinaarid" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Rootsi, kroonid" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, dollarid" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, naelad" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Sloveenia, tolaarid" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakkia, kroonid" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leoned" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somaalia, Å¡illingid" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luiginid" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname, guldenid" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sćo Tomé ja PrÄ·ncipe, dobrad" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, kolonid" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Süüria, naelad" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Svaasimaa, emalangenid" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tai, bahtid" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadžikistan, rublad" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Türkmenistan, manatid" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tuneesia, dinaarid" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'angad" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Türgi, liirid" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad ja Tobago, dollarid" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalu dollarid" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, uued dollarid" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tansaania, Å¡illingid" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraina, grivnad" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Å¡illingid" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Ameerika Ühendriigid, dollarid" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguai, peesod" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Usbekistan, sumid" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venetsueela, bolivarid" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, dongid" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatud" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Hõbe, untsid" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Kuld, untsid" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Ida-Kariibi dollarid" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Pallaadium, untsid" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Plaatina, untsid" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jeemen, riaalid" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslaavia, uusdinaarid" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Lõuna-Aafrika, randid" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Sambia, kwachad" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, zimbabwe dollarid" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Puudub" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Ühtlane" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Kriips" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Punkt" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Kriips-punkt" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Kriips-punkt-punkt" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automaatne (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "puudub" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "ruut" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "briljant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "Vahemik" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Grupid paremal" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "ring" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "rist" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "tärn" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Märts" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "liblikas" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "liivakell" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% hall" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% hall" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% hall" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% hall" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% hall" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Rõhttriip" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Püsttriip" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Pööratud kaldtriibud" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Kaldtriibud" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Kaldviirutus" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Jäme kaldu ristviirutus" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Peened rõhtsad triibud" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Peened püsttriibud" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Peened pööratud kaldtriibud" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Peened kaldtriibud" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Peen rõhtne ristviirutus" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Peen kaldu ristviirutus" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Esiplaani värv" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Väikesed ringid" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Poolringid" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Tähnid" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Suured ringid" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Tellised" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Pealdised" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Väärtused" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Viga rea analüüsil" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Diagramm" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Trüki" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Trüki" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Lisa veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Lisa veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Ala" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Alad" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Veerg" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Joon" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Imporditavad read" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Read" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "_Alusvõrk" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Kustuta veerud" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "_Alusvõrk" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Protsent" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "_Alusvõrk" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Vaikimisi fondi nimi" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Rea ja ve_eru päised" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Trüki" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Vigane otsingumuster" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Trüki" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Trüki" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Trüki" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Viga rea analüüsil" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Muudetakse %s formaati" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Vaikimisi fondi nimi" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Trüki" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Eimiski" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Eraldaja :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "_Kustuta" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Eraldamine:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Kategooria:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Ruumiline sektor" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Lahuta" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Korruta" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Korruta" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Sektor" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Lahuta" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Lahuta" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Trüki" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Trüki" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "_Protsent" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "_Standardhälbed" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Kustuta veerud" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Vaikimisi fondi nimi" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Viga rea analüüsil" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Täisarvud" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Kontuur" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Imporditavad read" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Pind" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Viga rea analüüsil" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Lähtealad" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Lähtealad" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% normaalsuurusest" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "sentimeeter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "Näita üksikasju" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Lähtealad" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Trüki" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Topelt" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Topelt" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Viga rea analüüsil" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Viga rea analüüsil" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Kustuta veerud" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Joon" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Punkt" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Joon" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/fi.po b/lib/goffice-0.0.4/po/fi.po new file mode 100644 index 0000000000..4164d9e9b0 --- /dev/null +++ b/lib/goffice-0.0.4/po/fi.po @@ -0,0 +1,4189 @@ +# Gnumeric Finnish translation. +# Suomennos: http://gnome.fi/ +# Copyright (C) 1998-2001,2003-2004 Free Software Foundation, Inc. +# Sami Kuhmonen , 1999. +# Jarkko Ranta , 2001. +# Pauli Virtanen , 2003. +# Tommi Vainikainen , 2003-2004. +# +# +# workbook = työkirja +# spreadsheet = sheet = taulukko +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric gnumeric-1-2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-09-08 15:04+0300\n" +"Last-Translator: Tommi Vainikainen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Tämän tyyppisten vanhojen tiedostojen päälle tallentaminen kielletty " +"turvallisuuden takia." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Tavoite" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Tuntematon nimi" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Tuntematon liitännäisen nimi." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +#, fuzzy +msgid "Cannot load plugin loader." +msgstr "Tuntematon laskentavirhe" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Tiedosto ei sisällä funktiota \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, fuzzy, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Lisiössä pitää olla init_plugin-funktio." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Yleistä" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Virhe tallennettaessa tiedostoa." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Liitännäislaturi" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject-laturi" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Kaavat" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Sisennä:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Aseta reunukset" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Välilyönti" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Tasaus" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Lainausmerkki:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Ongelman koko" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskreetti" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diskreetti" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Lineaarinen" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logiikka" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "logaritminen" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Yksityiskohdat" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automaattinen" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategoria" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Raja-arvot" + +#: goffice/graph/gog-axis.c:1475 +#, fuzzy +msgid "M_in" +msgstr "Minimi" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Maksimi" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "_Sulje" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Muotoile" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Nimiö" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Ruudukko" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Ruudukko" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Virheilmoitukset" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Viiva" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Virheilmoitukset" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Suunta" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Sisällä" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Ulkoviiva" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "_Korkeus..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Sisällä" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Käännä" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Rivi" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Ulkoviiva" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Näytä nimiöt" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tyyppi:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Nimi" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Ruudukko" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-akseli" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-akseli" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-akseli" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "K" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Korkeus" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "L" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Leveys" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Virheilmoitukset" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Tyyli" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Otos" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Väri:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "_Päivä" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Viivanleveys:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_tekstillä:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Kaavio" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nimi" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Vaihe 1/2: Valitse kaavion tyyppi" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Vaihe 2/2: Muokkaa kaaviota" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Muokkaa kaaviota" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Lisää" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Reunaviiva" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Suunta" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Tyyli" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Tyyli" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Näytä\n" +"otos" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Kuvaus" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Teksti:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Tieto" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "_Taulu" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "_Taulu" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Sisennä:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Varoitus" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Piste" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d × %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Kirjasin" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Tyyli" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Täyttö" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Viiva" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Väri:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Oikea" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "K_oko:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Tyyli:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_yyppi:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Tausta:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Suunta:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Väri:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Sovita:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Edustaväri:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Kuvio:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Valitse..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Koko:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pist" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Oletus" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "arabia" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "balttilainen" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "keskieurooppalainen" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "kiina" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "kyrillinen" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "kreikka" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "heprea" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "intialainen" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "japani" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "korea" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "turkki" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "vietnam" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "läntinen" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Muu" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabialainen (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabialainen (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabialainen (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabialainen (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabialainen (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabialainen (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabialainen (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armenialainen (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltian maiden (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltian maiden (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltian maiden (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Kelttiläinen (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Keskieurooppalainen (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Keskieurooppalainen (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Keskieurooppalainen (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Keskieurooppalainen (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Yksinkertaistettu kiinalainen (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Yksinkertaistettu kiinalainen (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Yksinkertaistettu kiinalainen (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Yksinkertaistettu kiinalainen (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Yksinkertaistettu kiinalainen (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Perinteinen kiinalainen (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Perinteinen kiinalainen (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Perinteinen kiinalainen (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Kroatialainen (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Kyrillinen (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Kyrillinen (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Kyrillinen (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Kyrillinen (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Kyrillinen (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Kyrillinen (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Venäläinen (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainalainen (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainalainen (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Englanti (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgialainen (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Kreikkalainen (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Kreikkalainen (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Kreikkalainen (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Heprealainen (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Heprealainen (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Heprealainen (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Heprealainen (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Heprealainen (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islantilainen (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanilainen (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanilainen (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanilainen (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korealainen (EUC_KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korealainen (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korealainen (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korealainen (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Pohjoismainen (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Romanialainen (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Romanialainen (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Eteläeurooppalainen (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turkkilainen (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turkkilainen (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turkkilainen (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turkkilainen (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Käyttäjän määrittelemä" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamilainen (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamilainen (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamilainen (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamilainen (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Kuvallinen heprea (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Läntinen (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Läntinen (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Läntinen (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Läntinen (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Läntinen (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Maa-asetusto: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Muunnossuunta" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Tämä arvo määrittää mitkä iconv-testit ajetaan." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "musta" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "vaalean ruskea" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "ruskean kultainen" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "tumman vihreä #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "laivasto" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "tumman sininen" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purppurainen #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "erittäin tumman harmaa" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "tumman punainen" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "punaoranssi" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "kulta" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "tumman vihreä" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "mattasininen" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "sininen" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "mattapurppura" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "tumman harmaa" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "punainen" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oranssi" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "limetti" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "mattavihreä" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "mattasininen #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "taivaan sininen #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purppura" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "harmaa" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "kirkkaan oranssi" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "keltainen" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "vihreä" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "sinivihreä" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "kirkkaan sininen" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "punapurppurainen" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "vaalean harmaa" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "pinkki" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "vaalean oranssi" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "vaalean keltainen" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "vaalean vihreä" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "vaalean sinivihreä" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "vaalean sininen" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "vaalean purppurainen" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "valkoinen" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purppurainen sininen" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "tumman purppurainen" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "taivaan sininen" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "muu" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Mukautettu väri..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Varjotyyppi" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Asento" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Tiedoston avaaminen epäonnistui: '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Kuva" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Tallenna kaikki" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Tiedoston _tyyppi:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"on hakemistonimi" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Työkirja %s on jo olemassa.\n" +"Haluatko tallentaa sen päälle?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normaali" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Lihavointi" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Lihava kursiivi" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursivointi" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "×" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Kirjasintyyli:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Kirjasin:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Esikatselu" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Koko:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Luku" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuutta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Kirjanpito" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Päiväys" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Aika" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Prosentti" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Murtoluku" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Tieteellinen" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Teksti" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Erityinen" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Muu" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Negatiivisen luvun muoto" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Lukumuodot" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "_Luokat:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "_Desimaaleja:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Esikatselu:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymboli:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Muotoilut:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Käytä tuhaterotinta" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Länsi-Eurooppa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Itä-Eurooppa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Pohjoisamerikka" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Etelä- ja Keski-Amerikka" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Aasia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrikka" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Yhdysvallat/englanti (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Etelä-Afrikka/afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopia/Amhara (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Arabiemiirikuntien liitto (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algeria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypti (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Intia/arabia (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordania (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libya (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marokko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi-Arabia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syyria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaidžan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Valko-Venäjä (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Intia/bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Ranska/bretoni (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia ja Hertsegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Espanja/katalaani (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "TÅ¡ekin tasavalta (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Iso-Britannia/wales (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Tanska (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Itävalta (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgia/saksa (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Sveitsi/saksa (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Saksa (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburg/saksa (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Kreikka (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/englanti (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Iso-Britannia (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/englanti (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlanti (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Intia/englanti (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Uusi-Seelanti (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filippiinit (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/englanti (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Yhdysvallat/englanti (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Etelä-Afrikka/englanti (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentiina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikaaninen tasavalta (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Espanja (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Meksiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Yhdysvallat/espanja (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Viro (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Espanja/baski (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Suomi/suomi (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Färsaaret (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgia/ranska (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/ranska (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Sveitsi/ranska (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Ranska (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlanti/gaeli (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Iso-Britannia/skotti (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Espanja/galicia (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Iso-Britannia/manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Intia/hindi (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Kroatia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Unkari (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islanti (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Sveitsi/italia (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italia (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/heprea (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japani (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grönlanti (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Iso-Britannia/korni (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Liettua (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Uusi-Seelanti/maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Intia/marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malesia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgia/flaami (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Alankomaat (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norja/uusnorja (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norja/kirjanorja (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Ranska/oksitaani (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Puola (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasilia (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugali (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Venäjä (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraina/venäjä (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norja/saame (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Suomi/ruotsi (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Ruotsi (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Intia/tamili (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Intia/telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadžikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thaimaa (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopia/tigrinja (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filippiinit/tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turkki (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Venäjä/tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgia/wallon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Yhdysvallat/jiddiÅ¡ (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Kiina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/kiina (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/kiina (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Tämänhetkinen maa-asetusto: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Valikko" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Vaihtoehtojen valikko" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Su" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Ma" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Ti" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Ke" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*To" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Pe" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*La" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Sunnuntai" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Maanantai" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Tiistai" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Keskiviikko" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Torstai" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Perjantai" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Lauantai" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Tammi" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Helmi" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Maalis" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Huhti" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Touko" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Kesä" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Heinä" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Elo" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Syys" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Loka" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Marras" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Joulu" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Tammikuu" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Helmikuu" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Maaliskuu" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Huhtikuu" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Toukokuu" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Kesäkuu" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Heinäkuu" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Elokuu" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Syyskuu" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Lokakuu" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Marraskuu" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Joulukuu" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TOSI" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "EPÄTOSI" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "musta" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "sininen" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "syaani" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "vihreä" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "punainen" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "valkoinen" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "keltainen" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentiina, peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, dollari" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, dinari" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dollari" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahama, dollari" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Valko-Venäjä, rupla" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, dollari" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbia, peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuuba, peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Kypros, punta" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Tanska, kruunu" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikaaninen tasavalta, peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Viro, kruunu" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypti, punta" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro-jäsenmaat, euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dollari" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Yhdistynyt kuningaskunta, punta" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, punta" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dollari" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Unkari, florintti" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinari" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "Liitännäisluettelo" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islanti, kruunu" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, punta" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dollari" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordania, dinari" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japani, jeni" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenia, Å¡illinki" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dinari" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, punta" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia, lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya, dinari" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Meksiko, peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dollari" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norja, kruunu" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Uusi-Seelanti, dollari" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filippiinit, peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Puola, sloti" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "Huhtikuu" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Venäjä, rupla" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +#, fuzzy +msgid "Seychelles, Rupees" +msgstr "Siirrä soluja ylöspäin" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Ruotsi, kruunu" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, dollari" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, Å¡illinki" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia, dinari" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkki, liira" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tansania, Å¡illinki" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Å¡illinki" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Yhdysvallat, dollari" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Hopea, unssi" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Kulta, unssi" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ei mikään" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Yhtenäinen" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automaattinen (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ei mikään" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "neliö" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75 % harmaa" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50 % harmaa" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25 % harmaa" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12,5 % harmaa" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6,25 % harmaa" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Vaakaraita" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Pystyviiva" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Käänteinen vinoraita" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Vinoraita" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Vinot ristiviivat" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Paksut vinot ristiviivat" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Ohut vaakaraita" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Ohut vaakaraita" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Ohut käänteinen vinoraita" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Ohut vinoraita" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Ohuet vaakasuuntaiset ristiviivat" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Ohuet vinot ristiviivat" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Yhtenäinen edustaväri" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Pienet ympyrät" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Puoliympyrät" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Suuret ympyrät" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Tiilet" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Nimiöt" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Arvot" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Virhe jäsennettäessä riviä" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr " %" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Alueet" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Sarake" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Viiva" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Viivoja" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Prosenttialueet" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Virheelliset parametrit" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Virhe jäsennettäessä riviä" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Muutetaan välilehtien värejä" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Oletuskirjasimen nimi" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "astetta" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Erotin:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D-piirakka" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Piirakka" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Virhe jäsennettäessä riviä" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Koko luvut" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Määrä" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Lähde" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Virhe jäsennettäessä riviä" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "_Lähdealueet:" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "_Lähdealueet:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% normaalista koosta" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "_Halkaisija" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Näytä _negatiiviset arvot" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "kupla" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Virhe jäsennettäessä riviä" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Virhe jäsennettäessä riviä" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY-viivat" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY-pisteet" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY-viivat" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/fr.po b/lib/goffice-0.0.4/po/fr.po new file mode 100644 index 0000000000..7cebdc4346 --- /dev/null +++ b/lib/goffice-0.0.4/po/fr.po @@ -0,0 +1,4287 @@ +# French translation of gnumeric. +# Copyright (C) 1998-2004 Free Software Foundation, Inc. +# This file is under the same license as the gnumeric package. +# +# Vincent Renardias , 1998-2000. +# Fabrice Bellet , 1999. +# Christophe Merlet (RedFox) , 2000-2004. +# maintainer: Olivier Jousselin , 2001-2003. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.3.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-12-16 09:27-0500\n" +"Last-Translator: Christophe Merlet (RedFox) \n" +"Language-Team: GNOME French Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"La sauvegarde en écrasant des anciens fichiers de ce type est désactivée " +"pour raison de sécurité" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Vous pouvez désactiver cette sécurité en modifiant le fichier plugin.xml " +"approprié." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objectif" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Le fichier contient des infos sur un greffon avec un identifiant non valide " +"(%s), %s attendu." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Impossible de lire les infos du greffon dans le fichier." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nom inconnu" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Type de chargeur « %s » non supporté." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Erreur lors de la préparation du chargeur « %s »." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Erreur lors de la lecture des infos sur le service #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Impossible de lire le fichier d'infos sur le greffon (« %s »)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Le fichier « %s » n'est pas un fichier valide d'infos sur un greffon." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" +"Erreur lors de la lecture des services pour le greffon d'identifiant \"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "L'identifiant de greffon contient des caractères invalides (%s)" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nom de greffon inconnu." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Aucun chargeur défini ou identifiant de chargeur invalide pour le greffon " +"d'identifiant \"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Le greffon n'a pas d'identifiant." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Erreur d'initialisation du chargeur de greffon (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Un cycle a été détecté dans les dépendances des greffons." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Impossible d'activer le greffon \"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Impossible de trouver le greffon d'identifiant \"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Erreur lors de l'activation des dépendances du greffon." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Erreur lors de l'activation du service de greffon #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Erreur lors de la désactivation du service de greffon #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Impossible de charger le chargeur de greffon." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Impossible de charger le greffon d'identifiant « %s »." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Erreur lors du chargement des dépendances du greffon." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Erreur lors de la lecture des infos de greffon dans le fichier « %s »." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Impossible d'activer le greffon « %s » (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Impossible de désactiver le greffon « %s » (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Erreurs lors de la lecture des infos sur les greffons disponibles." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Erreur lors de la désactivation des greffons supprimés du disque." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Les greffons suivants ne sont plus disponibles sur le disque, mais sont " +"toujours activés :\n" +"%s\n" +"Vous devez redémarrer Gnumeric maintenant." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Erreurs lors de l'activation des greffons." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Erreurs lors de l'initialisation du système de greffons." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Service « %s » non supporté par le chargeur." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nom du fichier module non fourni." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Impossible d'ouvrir le fichier module « %s »." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Le format du fichier module « %s » n'est pas valide." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Le fichier ne contient pas le symbole « plugin_file_struct »." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Le nombre magique du fichier est incorrect." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "La version du greffon « %s » est différente de l'application « %s »" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Le chargement dynamique de modules n'est pas supporté par ce système." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Impossible de fermer le fichier module « %s »." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Le fichier ne contient pas la fonction « %s »." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Le fichier ne contient pas la fonction « %s »." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Erreur de chargement du service de greffon." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "La fonction d'initialisation du greffon a renvoyé une erreur." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "La fonction de nettoyage du greffon a renvoyé une erreur." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Général" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "L'ouvreur de fichier n'a pas de description" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Ouvreur de fichier - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Erreur lors de la lecture du fichier." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "L'enregistreur de fichier n'a pas de description" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Enregistreur de fichier - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Erreur lors de l'enregistrement du fichier." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Chargeur de greffon" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Changeur de GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Pas d'attribut \"type\" pour l'élément \"service\"." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Type de service inconnu : %s" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Erreur lors de la lecture des infos de service." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Il faut charger le service avant de l'activer (PLUGIN_ALWAYS_LOAD est " +"positionné), mais le chargement a échoué." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "pages" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indenter :" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Rechercher" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alignement" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Caractères de citation :" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Taille du problème" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discrète" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Discrète" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Linéaire" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logique" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logarithmique" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Détails" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatique" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Catégorie" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Arrière-plan" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "_Fermer" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Titre" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Grille" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Grille" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Motif" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Ligne" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Motif" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Ligne" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "À l'_intérieur" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "À l'_extérieur" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "Hauteur" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Intérieur" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Insertion" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Ligne" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Extérieur" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Afficher les étiquettes" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type :" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Légende" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titre" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Grille" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Axe X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Axe Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Axe Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Tracé" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Hauteur" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "L" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Largeur" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Alertes" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Style" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Exemple" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Couleur :" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "_Jour" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Largeur de ligne :" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Avec :" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graphe" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Graphique" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nom" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Étape 1 sur 2 : choisissez le type de graphique" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Étape 2 sur 2 : personnalisez le graphique" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Personnaliser le graphique" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Insertion" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Type de _tracé" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Graphique de bureau GNOME" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Trier" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Orientation" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Motif" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Style" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Afficher\n" +"Exemple" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Description" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Texte:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Données" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Série" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Moteur de tracé" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Type de tracé" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Thème du tracé" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Indenter :" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Réglages" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Point" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Police" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Style" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Luminosité" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Remplir" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Ligne" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Motif" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Ligne" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Cou_leur :" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Couleur du conto_ur :" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Forme :" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_Taille :" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Style :" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype :" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Arrière-plan :" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Direction :" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Fin :" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Couleur de _remplissage :" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "A_juster à :" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Premier plan :" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Motif :" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Sélectionner..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Taille :" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Début :" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "plus _lumineux" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "plus _foncé" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "étiré" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Défaut" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabe" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltique" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Europe centrale" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinois" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cyrillique" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grec" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hébreu" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indien" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonais" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Coréen" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turc" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamien" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Occidental" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Autre" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabe (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabe (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabe (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabe (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabe (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabe (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabe (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Arménien (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltique (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltique (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltique (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celtique (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Europe centrale (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Europe centrale (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Europe centrale (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Europe centrale (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chinois simplifié (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chinois simplifié (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chinois simplifié (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chinois simplifié (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chinois simplifié (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chinois traditionnel (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chinois traditionnel (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chinois traditionnel (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croate (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cyrillique (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillique (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cyrillique (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrillique (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cyrillique (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrillique (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russe (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainien (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainien (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Anglais (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Géorgien (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grec (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grec (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grec (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hébreu (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hébreu (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hébreu (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hébreu (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hébreu (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandais (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonais (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonais (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonais (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Coréen (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Coréen (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Coréen (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Coréen (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordique (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Roumain (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Roumain (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Europe du Sud (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turc (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turc (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turc (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turc (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Défini par l'utilisateur" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamien (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamien (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamien (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamien (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hébreu visuel (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Occidental (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Occidental (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Occidental (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Occidental (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Occidental (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale :" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Direction de conversion" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Cette valeur indique quel test iconv réaliser." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "noir" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "marron clair" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "marron doré" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "vert foncé n°2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "bleu marine" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "bleu foncé" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "violet n°2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "anthracite" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "rouge foncé" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "rouge orangé" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "jaune d'or" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "vert foncé" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "bleu pâle" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "bleu" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "violet pâle" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "gris foncé" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rouge" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "orange" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "jaune-vert" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "vert pâle" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "bleu pâle n°2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "bleu ciel n°2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "violet" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "gris" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "orange vif" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "jaune" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "vert" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "bleu vif" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "violet-rouge" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "gris clair" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rose" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "orange clair" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "jaune clair" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "vert clair" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "cyan clair" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "bleu clair" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "violet clair" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "blanc" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "bleu violacé" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "bleu foncé" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "bleu ciel" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "personnalisé" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Couleur personnalisée :" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Type d'ombre" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orientation" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +#, fuzzy +msgid "Dock the toolbar" +msgstr "Comment dessiner la barre d'outils" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Comment dessiner la barre d'outils" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Impossible d'ouvrir le fichier « %s »" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Tous les fichiers" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Images" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Sélectionner une image" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Enregistrer sous" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Type de fichier :" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"L'extension fournie ne correspond pas au type de fichier choisi. Voulez-vous " +"utiliser ce nom quand même ?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"est un nom de répertoire" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Vous n'avez pas la permission d'enregistrer vers\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Le classeur %s existe déjà dans %s.\n" +"Êtes-vous sur de vouloir l'écraser ?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Gras" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Gras italique" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Italique" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Style de la police :" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Police :" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Aperçu" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Taille :" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Nombre" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Devise" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Comptabilité" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Date" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Heure" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Pourcentage" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fraction" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Scientifique" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Texte" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Spécial" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personnalisé" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format des nombres négatifs" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Format des nombres" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tégories :" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Chiffres après la _virgule :" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Affiche des montants dans le style habituel de la comptabilité" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Affiche et saisit les valeurs comme des chaînes, sans interprétation" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Affiche des montants en devises" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Affiche des dates et éventuellement des heures" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Affiche des valeurs numériques avec un nombre de décimales fixé." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Affiche des heures" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Affiche les valeurs sous forme de la fraction la plus proche" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Affiche les valeurs sous forme d'un pourcentage" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Affiche les valeurs en notation scientifique" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "C_ode de format :" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Format des nombres négatifs :" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Aperçu :" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol :" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Choisit le format approprié automatiquement" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Spécifie un format XL directement" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format :" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Utiliser un séparateur pour les miliers" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europe de l'Ouest" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europe de l'Est" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Amérique du Nord" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Amérique Centrale et du Sud" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asie" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrique" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australie" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "États-Unis/Anglais (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Afrique du Sud, Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Éthiopie/Amharic (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Émirats Arabes Unis (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahreïn (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algérie (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Égypte (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Inde/Arabe (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordanie (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Koweït (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Liban (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libye (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroc (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Arabie Saoudite (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Soudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syrie (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisie (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaidjan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Belarus (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgarie (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Inde/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "France/Breton (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnie Herzégovine (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Espagne/Catalan (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tchèquie (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Grande Bretagne/Gallois (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danemark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Autriche (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgique/Allemand (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Suisse/Allemand (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Allemagne (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg/Allemand (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grèce (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australie (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canada/Anglais (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Grande Bretagne (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Anglais (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlande (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Inde/Anglais (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nouvelle Zélande (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Philippines (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapour/Anglais (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "États-Unis/Anglais (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Afrique du Sud (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentine (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivie (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chili (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombie (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "République dominicaine (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Équateur (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Espagne (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatémala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexique (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Pérou (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "États-Unis/Espagnol (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Vénézuéla (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonie (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Espagne/Basque (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlande/Finnois (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "ÃŽles Féroé (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgique/Français (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canada/Français (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Suisse/Français (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "France (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlande/Gaëlique (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Grande Bretagne/Gaëlique Écossais (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Espagne/Galicien (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Grande Bretagne/Gaëlique Manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Inde/Hindou (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croatie (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hongrie (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Arménie (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonésie (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islande (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Suisse/Italien (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italie (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israël/Hébreu (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japon (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Géorgie (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Groënland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Corée (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Grande Bretagne/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lithuanie (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvie (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nouvelle Zélande/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macédoine (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Inde/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaisie (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malte (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgique/Flamand (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Pays-Bas (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norvège/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norvège/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "France/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Pologne (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brésil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Roumanie (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russie (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraine/Russe (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norvège/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovaquie (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovènie (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albanie (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Yougoslavie (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlande/Suédois (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Suède (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Inde/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Inde/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadjikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thaïlande (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Erythrée (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Éthiopie/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Philippines/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turquie (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russie/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraine (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Ouzbékistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgique/Wallon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "États-Unis/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Chine (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinois (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapour/Chinois (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Localisation courante :" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Menu des options" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Taille de l'indicateur" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Taille de l'indicateur de liste déroulante" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Espacement de l'indicateur" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Espacement autour de l'indicateur" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*dim" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*lun" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*mar" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*mer" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*jeu" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*ven" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*sam" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "dimanche" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "lundi" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "mardi" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "mercredi" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "jeudi" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "vendredi" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "samedi" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*fév" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*avr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*juin" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*juil" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*aoû" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*oct" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "janvier" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "février" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "mars" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "avril" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "juin" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "juillet" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "août" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "septembre" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "octobre" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "novembre" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "décembre" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "VRAI" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FAUX" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Noir" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Bleu" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Vert" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rouge" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Blanc" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Jaune" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Émirats Arabes Unis, Dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, Afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albanie, Lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Arménie, Drams" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Antilles néerlandaises, Florin" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentine, Peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australie, Dollar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Florin" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaidjan, Manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnie Herzégovine, Mark convertible" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "La Barbade, Dollar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgarie, Lev" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahreïn, Dinar" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Franc" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Les Bermudes, Dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei, Dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivie, Boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brésil, Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Les Bahamas, Dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhoutan, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belarus, Rouble" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, Dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo/Kinshasa, Franc Congolais" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Suisse, Francs" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chili, Peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Chine, Yuan renmimbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombie, Peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, Colon" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, Peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cap Vert, Escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Chypre, Livre" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Koruna, Tchèquie" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, Franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danemark, Couronne" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "République dominicaine, Peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algérie, Dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonie, Krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Égypte, Livre" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Erythrée, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Éthiopie, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Communauté Européenne, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidji, Dollar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "ÃŽles Falkland (Malouines), Livre" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Royaume Uni, Livre" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Géorgie, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernesey, Livres" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, Cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, Livre" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambie, Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinée, Franc" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatémala, Quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyane, Dollar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong-Kong, Dollar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croatie, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haïti, Gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hongrie, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonésie, Roupie" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, Shekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "ÃŽle de Man, Livre" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Inde, Roupie" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, Dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, Rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islande, Couronne" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Livre" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaïque, Dollar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordanie, Dinar" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japon, Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, Shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirghizistan, Soms" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambodge, Riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Les Comores, Franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Corée du Nord, Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Corée du Sud, Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Koweït, Dinar" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "ÃŽles Caïman, Dollar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakhstan, Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kip" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Liban, Livre" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri-Lanka, Roupie" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, Dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, Loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lithuanie, Litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvie, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libye, Dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroc, Dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavie, Leu" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar, Franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macédoine, Denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar, Kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolie, Tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, Pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritanie, Ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malte, Livre" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Maurice, Roupie" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "ÃŽles Maldives, Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, Kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexique, Peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaisie, Ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambique, Metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibie, Dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigéria, Naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, Cordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norvège, Couronne" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Népal, Roupie" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nouvelle Zélande, Dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, Rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Pérou, Nuevos Soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papouasie-Nouvelle-Guinée, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippines, Peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, Roupie" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Pologne, Zloti" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, Riyal" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Roumanie, Leu" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russie, Rouble" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, Franc" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Arabie Saoudite, Riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "ÃŽles Salomon, Dollar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychelles, Roupie" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Soudan, Dinar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Suède, Couronne" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapour, Dollar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Sainte-Hélène, Livre" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovènie, Tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovaquie, Koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, Leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalie, Shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, Guinée" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome et Principe, Dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Colon" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syrie, Livre" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, Lilangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thaïlande, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadjikistan, Rouble" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkménistan, Manat" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisie, Dinar" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turquie, Livre" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinité-et-Tobago, Dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Dollar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taïwain, Dollar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzanie, Shilling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraine, Grivna" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Ouganda, Shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Etats-Unis d'Amérique, Dollar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Ouzbékistan, Sums" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Vénézuéla, Bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communauté Financière Africaine BEAC, Francs" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Argent, Once" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Or, Once" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Caraïbes orientales, Dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Fonds Monétaire International (FMI), Droits Spéciaux" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communauté Financière Africaine BCEAO, Francs" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, Once" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Français du Pacifique, Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platine, Once" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, Rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Yougoslavie, Dinar" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Afrique du Sud, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambie, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, Dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Aucun" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Solide" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatique" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "aucun" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "carré" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Médian" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "intervalle" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Contours à _droite" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "cercle" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "croix" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "astérisque" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "barre" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "demi-barre" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "papillon" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "Gris 75%" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "Gris 50%" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "Gris 25%" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "Gris 12.5%" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "Gris 6.25%" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Rayures horizontales" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Rayures verticales" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Rayures diagonales inversées" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Rayures diagonales" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Trame diagonale" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Trame diagonale épaisse" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Rayures horizontales fines" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Rayures verticales fines" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Rayures diagonales fines inversées" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Rayure diagonale fine" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Trame horizontale fine" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Trame diagonale fine" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Premier plan uni" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Petits cercles" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Demi cercles" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Maille" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Grand cercles" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Briques" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Titres" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valeurs" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Erreur d'analyse de la ligne" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "PlotBarCol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Recouvrement des barres/colonnes, en pourcentage de la largeur" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "_Recouvrement :" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" +"Séparation entre les groupes, en pourcentage de la largeur des barres/" +"colonnes" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Espacement :" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "Tracé" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "Tracé" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Barres 3D adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Colonnes 3D adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Barres de pourcentage 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Colonnes de pourcentage 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Barres 3D empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Colonnes 3D empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Barres adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Colonnes adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Barres 3D horizontales, adjacentes, groupées par catégories majeures et " +"mineures." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Barres horizontales, adjacentes, groupées par catégories majeures et " +"mineures." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Colonnes 3D verticales, adjacentes, groupées par catégories majeures et " +"mineures." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Colonnes verticales, adjacentes, groupées par catégories majeures et " +"mineures." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Zone" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Zones" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Barre" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Colonne" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Ligne" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Lignes à imprimer" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Lignes" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Catégories mineures empilées sous forme de pourcentages des totaux mineurs, " +"en barres 3D horizontales, groupées par catégorie majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Catégories mineures empilées sous forme de pourcentages des totaux mineurs, " +"en barres 3D verticales, groupées par catégorie majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Catégories mineures empilées sous forme de pourcentages des totaux mineurs, " +"en barres horizontales, groupées par catégorie majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Catégories mineures empilées sous forme de pourcentages des totaux mineurs, " +"en colonnes verticales, groupées par catégorie majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Catégories mineures empilées en barres 3D horizontales, groupées par " +"catégorie majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Catégories mineures empilées en barres horizontales, groupées par catégorie " +"majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Catégories mineures empilées en colonnes 3D verticales, groupées par " +"catégorie majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Catégories mineures empilées en colonnes verticales, groupées par catégorie " +"majeure." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "Barres de pourcentages" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Barres de pourcentages" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Colonnes de pourcentages" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Lignes de pourcentage" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "Barres de pourcentages" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "Lignes de pourcentages" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Barres empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Barres empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Colonnes empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "Lignes empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Barres empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Lignes empilées" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "Lignes marquées" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "Lignes de pourcentages" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "Lignes empilées" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +#, fuzzy +msgid "Area plotting engine" +msgstr "Moteur de dessin de camembert" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Moteur de dessin barres/colonnes" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Type de dessin barres/colonnes par défaut" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +#, fuzzy +msgid "Line plotting engine" +msgstr "Moteur de dessin de camembert" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Barres et colonnes" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Tracé" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Chaîne cherchée invalide" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Tracé" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Tracé" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Tracé" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Moteur de dessin barres/colonnes" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Changement des couleurs des onglets" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Type de dessin barres/colonnes par défaut" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "Tracé" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Rien" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" +"Compteur de degrés, dans le sens des aiguilles d'une montre à partir de 3 " +"heures" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Les tr_anches commencent à :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "La distance entre chaque tranche et le centre, en pourcentage du rayon" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Séparation des tranches :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Changer les couleurs à chaque tranche" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "Degrés" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +#, fuzzy +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "La distance entre chaque tranche et le centre, en pourcentage du rayon" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Séparateur :" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Taille du cen_tre :" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Camembert 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Camembert partagé 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Totaux principaux sous forme de pourcentages, chaque tranche étant " +"subdivisée en un autre camembert." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Totaux principaux sous forme de pourcentages, chaque tranche étant " +"subdivisée en barres empilées." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Multi-camembert" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multi-camembert et barres" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Pourcentage de chaque contribution affiché sous forme d'anneau pour chaque " +"série, avec les tranches du dernier anneau séparées." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" +"Pourcentage de chaque contribution affiché sous forme d'anneau pour chaque " +"série." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Pourcentage de chaque contribution au camembert 3D." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" +"Pourcentage de chaque contribution, avec les tranches 3D partagées " +"séparément." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" +"Pourcentage de chaque contribution, avec les tranches partagées séparément." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Pourcentage de chaque contribution." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Camembert" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Anneau" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Camembert partagé" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Anneau partagé" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Types de camemberts par défaut" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Moteur de dessin de camembert" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Moteur de dessin d'anneau" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "PlotBarCol" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Tracé" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Barres de pourcentages" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Barres empilées" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Type de dessin barres/colonnes par défaut" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Moteur de dessin de camembert" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Moteur de dessin d'anneau" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Nombre complexe" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Compte" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Lignes à imprimer" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Source" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Moteur de dessin d'anneau" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Zones _sources :" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Zones _sources :" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% de la taille _normale" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "centimètre" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "Afficher les détails" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Source" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +#, fuzzy +msgid "_Vary colors by bubble" +msgstr "_Changer les couleurs à chaque tranche" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "Tracé" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Bulle" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bulle" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Erreur d'analyse de la ligne" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Erreur d'analyse de la ligne" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Interpolation linéaire entre des points multi-dimensionnels, avec des " +"marqueurs à chaque point." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +#, fuzzy +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpolation linéaire entre des points multi-dimensionnels, avec des " +"marqueurs à chaque point." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Interpolation linéaire entre des points multi-dimensionnels." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Points interpolés marqués" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "" +"Interpolation entre des points multi-dimensionnels, avec des marqueurs à " +"chaque point." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Tracer X, Y et la taille de la bulle." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Lignes XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Points XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Lignes XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +#, fuzzy +msgid "2D scatter plotting engine" +msgstr "Moteur de dessin de camembert" + +#: plugins/plot_xy/plugin.xml.in.h:3 +#, fuzzy +msgid "Bubble plotting engine" +msgstr "Moteur de dessin de camembert" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/ga.po b/lib/goffice-0.0.4/po/ga.po new file mode 100644 index 0000000000..aa4061f8da --- /dev/null +++ b/lib/goffice-0.0.4/po/ga.po @@ -0,0 +1,4144 @@ +# Irish (gaeilge) translation for gnumeric.pot (Gnome) +# Copyright (C) 1998,2004 Free Software Foundation, Inc. +# Alastair McKinstry , 1998. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric HEAD\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-01-02 21:38:13-0500\n" +"Last-Translator: Alastair McKinstry \n" +"Language-Team: Gaeilge \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Formóid" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Gnáth" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Foirmlaí" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Int" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +msgid "Space Before" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Spás" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Ailíniú" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +msgid "Bullet Character" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Líne" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "_Ãosta" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "Uasta" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formóid" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Líne" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Líne" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Líne" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Líne" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Airde" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Saghas:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Tideál" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "A" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Airde" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "L" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Leitheid" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Líne" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stíl" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Sampla" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Dath:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "_Lá" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "_Lucht" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "Leitheid" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graif" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Ainm" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Cairt féindheanamh" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Treoshuíomh" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Patrún" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stíl" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Sampla" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +msgid "Test de description" +msgstr "" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Teacs:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dáta" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr ":" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Ag sortáil %s" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Pointe" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Clófhoireann" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stíl" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Líne" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Dath:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Méid:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_Méid:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Stíl:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Saghas:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Dúlra:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Treoshuiomh:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Deireadh:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Cúlra:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Patrún:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Tóg..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Méid:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Gnáth" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicód" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Eile" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicód (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicód (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicód (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicód (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicód (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicód (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "dubh" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "gorm" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "dearg" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "óraiste" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "corcra" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "liath" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "buí" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "glas" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cian" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "bándearg" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "bán" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "féindheanamh" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Dath féindheanamh:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Treoshuíomh" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Comhaid" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "leathanaigh" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Sabháil gach rud" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Saghas Comhad:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Gnáth" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Trom" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Trom Iodálach" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Iodálach" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stíl Clófhoireann:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Clófhoireann:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Réamhthaispeántas" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Méid:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Uimhir" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "_Dáta" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Am" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Teacs" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Speisialta" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "_Féindheanamh" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Réamhthaispeántas:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formóid:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Clár" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dom" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Lua" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "Mai" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Cea" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Dea" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Aoi" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sat" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Domhnaigh" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Luain" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Mairt" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Ceádaoin" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Deárdaoin" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Ãoine" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sathairn" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Ean" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Fea" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Aib" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Bea" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Mei" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Iúl" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Lún" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*MFó" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*DFó" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Sam" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Nol" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Éanair" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Feabhra" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Marta" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Aibreáin" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Bealtaine" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Meitheamh" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Ãuil" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Lúnasa" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Méan Fomhair" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Deireadh Fomhair" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Samhain" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Nollag" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Dubh" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Gorm" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cian" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Glas" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Daearg" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Bán" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Buí" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Tada" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Trom" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "tada" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "cearnóg" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "ciorcáil" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Liath" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Liath" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Liath" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Liath" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Liath" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Luachaí" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Líne" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Líní" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Pasfhocal míchumasach" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Ainm chlófhoireann gnáth" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "_Lucht" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Fáinne" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Earriadh caighdeánach" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "uimhir-i" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Ãirigh" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "_Spás" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "_Spás" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "_Spás" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "_Dáta" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "_Spás" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Líní XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Pointí XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Líní XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/gl.po b/lib/goffice-0.0.4/po/gl.po new file mode 100644 index 0000000000..52821cc16c --- /dev/null +++ b/lib/goffice-0.0.4/po/gl.po @@ -0,0 +1,4496 @@ +# Galician translation of gnumeric. +# Copyright (C) 2000 Jesús Bravo Ãlvarez. +# Jesús Bravo Ãlvarez , 2000. +# +# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas +# colaborar connosco, podes atopar máis información en http://trasno.gpul.org +# +# First Version: Not finished yet!!! +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2000-05-16 23:20+0200\n" +"Last-Translator: Jesús Bravo Ãlvarez \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "_Obxecto..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +#, fuzzy +msgid "Unknown name" +msgstr "Erro de evaluación descoñecido" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, fuzzy, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Erro ó pecha-lo ficheiro, erro : %s" + +#: goffice/app/go-plugin.c:636 +#, fuzzy, c-format +msgid "Error while reading service #%d info." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +#, fuzzy +msgid "Unknown plugin name." +msgstr "Erro de evaluación descoñecido" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +#, fuzzy +msgid "Plugin has no id." +msgstr "O plugin aínda está a se usar." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +#, fuzzy +msgid "Cannot load plugin loader." +msgstr "Erro de evaluación descoñecido" + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Erro de evaluación descoñecido" + +#: goffice/app/go-plugin.c:1112 +#, fuzzy +msgid "Error while loading plugin dependencies." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin.c:1288 +#, fuzzy, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +#, fuzzy +msgid "Module file name not given." +msgstr "Nome de ficheiro:" + +#: goffice/app/go-plugin-loader-module.c:80 +#, fuzzy, c-format +msgid "Unable to open module file \"%s\"." +msgstr "non se puido abri-lo ficheiro de módulo: " + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +#, fuzzy +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "O plugin ten que conte-la función init_plugin." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, fuzzy, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" +"Non se puido abri-lo plugin '%s'\n" +"A versión '%s' do plugin é diferente da versión '%s' da aplicación." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, fuzzy, c-format +msgid "Unable to close module file \"%s\"." +msgstr "non se puido abri-lo ficheiro de módulo: " + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, fuzzy, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "O plugin ten que conte-la función init_plugin." + +#: goffice/app/go-plugin-loader-module.c:371 +#, fuzzy, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "O plugin ten que conte-la función init_plugin." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +#, fuzzy +msgid "Error while loading plugin service." +msgstr "Erro ó tentar preconverte-lo ficheiro" + +#: goffice/app/go-plugin-service.c:164 +#, fuzzy +msgid "Initializing function inside plugin returned error." +msgstr "init_plugin devolveu un erro" + +#: goffice/app/go-plugin-service.c:182 +#, fuzzy +msgid "Cleanup function inside plugin returned error." +msgstr "init_plugin devolveu un erro" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "O plugin aínda está a se usar." + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "O plugin aínda está a se usar." + +#: goffice/app/go-plugin-service.c:495 +#, fuzzy +msgid "Error while reading file." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "O plugin aínda está a se usar." + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Nome de ficheiro: %s" + +#: goffice/app/go-plugin-service.c:767 +#, fuzzy +msgid "Error while saving file." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Erro de evaluación descoñecido" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "_Obxecto..." + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Sistema descoñecido" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Erro ó tentar escribi-lo ficheiro csv" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "páxinas" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Inserir" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Separadores" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Aliñamento" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Operador descoñecido" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Liña" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "Detalles do _Ficheiro" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Categoría" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Fondo" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "Mí_n" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Máx" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Cor" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Fo" + +#: goffice/graph/gog-axis.c:1536 +#, fuzzy +msgid "Label" +msgstr "_Etiquetas" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Venres" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Venres" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Patrón" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Patrón" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Inserir" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "_Dereita" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "_Altura..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Inserir" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Inserir" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Ringleira" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "_Dereita" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Etiquetas" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tipo:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Ordenar Descendentemente" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Título" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Venres" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Ordenar..." + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "_Altura..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "_Con:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Erro" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Cor" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Anchura da columna" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Con:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_Arriba" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nome" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "_Dereita" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Inserir" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Nome da folla" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Bordo" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Orientación" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Patrón" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Número de Mostras:" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "_Descrición" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "Te_xto" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Datos" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "_Subliñado:" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Nome da folla" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Nome da folla" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Inserir" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Cadea" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Fonte" + +#: goffice/graph/gog-style.c:966 +#, fuzzy +msgid "Style" +msgstr "_Estilo" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Patrón" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Previsualización da impresión" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Cor" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "_Dereita" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "copiar" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Tamaño:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "_Estilo" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "_Tipo:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Fondo" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Descrición :" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "_Engadir" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Cor" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "_Axustar a:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Cor do Fondo" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Patrón" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_Folla" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Tamaño:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "_Ordenar..." + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "_Dereita" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "Array" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +#, fuzzy +msgid "Default" +msgstr "Borrar" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "_Arriba" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "_Subliñado:" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "Cursiva" + +#: goffice/gtk/go-charmap-sel.c:76 +#, fuzzy +msgid "Central European" +msgstr "Centrar na páxina" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "verde" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "Mín" + +# ¿Yen ou Ien? +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "Yen xaponés" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Booléano" + +#: goffice/gtk/go-charmap-sel.c:84 +#, fuzzy +msgid "Turkish" +msgstr "Lira turca" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "Inserir" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "Renomear folla" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "Cadea" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "Outubro" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Subliñar" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "Escala" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Correlación" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "negro" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "Luns" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "Crea un novo libro" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "Negriña" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Valor da Cela" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "azul" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "Array" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "vermello" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "Crea un novo libro" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "hora" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "Array" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "Valor da Cela" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "amarelo" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "verde" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "ciano" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "Aumentar" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Aliñar á dereita" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Aliñar á dereita" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Aliñar á dereita" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "branco" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "Valor" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "cortar" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "_Dereita" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orientación" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Copia a selección ó cartafol" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Non se puido abri-lo ficheiro '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "_Encher" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Gardar" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Seleccionar unha columna completa" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Gardar" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "_Encher" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"é un nome dun directorio" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Non ten permisos para gardar en\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"O libro %s xa existe.\n" +"¿Quere sobrescribilo?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Negriña" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Negriña cursiva" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Cursiva" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Estilo de fonte:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Fonte:" + +#: goffice/gtk/go-font-sel.glade.h:4 +#, fuzzy +msgid "Preview" +msgstr "Previsualización da impresión" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Tamaño:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Número" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "_Divisa" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "Comentarios" + +#: goffice/gtk/go-format-sel.c:78 +#, fuzzy +msgid "Date" +msgstr "_Data" + +#: goffice/gtk/go-format-sel.c:79 +#, fuzzy +msgid "Time" +msgstr "_Hora" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "_Porcentaxe" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "_Fracción" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "_Porcentaxe" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "Te_xto" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "Engadir decimais" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Número Negat_ivo:" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "Aplicar _Fontes" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Categoría :" + +#: goffice/gtk/go-format-sel.glade.h:2 +#, fuzzy +msgid "Deci_mal places:" +msgstr "Rem_prazar:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "Unidade de divisa europea" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Amosar _Fórmulas" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "Fo" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Número Negat_ivo:" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "Previsualización da impresión" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Sí_mbolo:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "Fo" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Usar Separadores para os milleiros" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "Cadea" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "Centrar na páxina" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "_Porcentaxe" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "_Subliñado:" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "Dólar de Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Rand de Sudáfrica" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Dinar de Bahrain" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "Dinar xordano" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "Dinar kuwaití" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "Dinar libio" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "Rial de Arabia Saudí" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "Dinar tuniciano" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "Lev búlgaro" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "Taka de Bangladesh" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "Won da República de Corea" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +#, fuzzy +msgid "Luxembourg/German (de_LU)" +msgstr "Franco luxemburgués" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "Dólar de Nova Celandia" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "Rand de Sudáfrica" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Austral arxentino" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Peso chileno" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Peso colombiano" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Peso dominicano" + +#: goffice/gtk/go-locale-sel.c:164 +#, fuzzy +msgid "Ecuador (es_EC)" +msgstr "Sucre de Ecuador" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Ordenando %s" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "Peso mexicano" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Peso de Uruguai" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "Bolívar de Venezuela" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Ordenando %s" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Lek de Albania" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "Dinar de Iugoslavia" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "_Data actual" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "Mín" + +#: goffice/gtk/go-optionmenu.c:198 +#, fuzzy +msgid "The menu of options" +msgstr "Opcións de Oaf" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "ERRO interno" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dom" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Lun" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Mar" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Mér" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Xov" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Ven" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sáb" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Domingo" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Luns" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Martes" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Mércores" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Xoves" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Venres" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sábado" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Xan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Abr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Xuñ" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Xul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ago" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Set" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Out" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Xaneiro" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Febreiro" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Marzo" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Abril" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Maio" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Xuño" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Xullo" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Agosto" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Setembro" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Outubro" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Novembro" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Decembro" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "" + +#: goffice/utils/format.c:757 +#, fuzzy +msgid "Black" +msgstr "negro" + +#: goffice/utils/format.c:758 +#, fuzzy +msgid "Blue" +msgstr "azul" + +#: goffice/utils/format.c:759 +#, fuzzy +msgid "Cyan" +msgstr "ciano" + +#: goffice/utils/format.c:760 +#, fuzzy +msgid "Green" +msgstr "verde" + +#: goffice/utils/format.c:761 +#, fuzzy +msgid "Magenta" +msgstr "Valor da Cela" + +#: goffice/utils/format.c:762 +#, fuzzy +msgid "Red" +msgstr "Refacer" + +#: goffice/utils/format.c:763 +#, fuzzy +msgid "White" +msgstr "branco" + +#: goffice/utils/format.c:764 +#, fuzzy +msgid "Yellow" +msgstr "amarelo" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +#, fuzzy +msgid "Afghanistan, Afghanis" +msgstr "Afghani de Afghanistán" + +#: goffice/utils/formats.c:391 +#, fuzzy +msgid "Albania, Leke" +msgstr "Lek de Albania" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +#, fuzzy +msgid "Netherlands Antilles, Guilders" +msgstr "Guilder das Antillas Holandesas" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +#, fuzzy +msgid "Argentina, Pesos" +msgstr "Austral arxentino" + +#: goffice/utils/formats.c:396 +#, fuzzy +msgid "Australia, Dollars" +msgstr "Dólar de Australia" + +#: goffice/utils/formats.c:397 +#, fuzzy +msgid "Aruba, Guilders" +msgstr "Guilder de Aruba" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +#, fuzzy +msgid "Barbados, Dollars" +msgstr "Dólar das Barbados" + +#: goffice/utils/formats.c:401 +#, fuzzy +msgid "Bangladesh, Taka" +msgstr "Taka de Bangladesh" + +#: goffice/utils/formats.c:402 +#, fuzzy +msgid "Bulgaria, Leva" +msgstr "Lev búlgaro" + +#: goffice/utils/formats.c:403 +#, fuzzy +msgid "Bahrain, Dinars" +msgstr "Dinar de Bahrain" + +#: goffice/utils/formats.c:404 +#, fuzzy +msgid "Burundi, Francs" +msgstr "Franco de Burundi" + +#: goffice/utils/formats.c:405 +#, fuzzy +msgid "Bermuda, Dollars" +msgstr "Dólar das Bermudas" + +#: goffice/utils/formats.c:406 +#, fuzzy +msgid "Brunei Darussalam, Dollars" +msgstr "Dólar de Brunei" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "Cruceiro brasileiro" + +#: goffice/utils/formats.c:409 +#, fuzzy +msgid "Bahamas, Dollars" +msgstr "Dólar das Bahamas" + +#: goffice/utils/formats.c:410 +#, fuzzy +msgid "Bhutan, Ngultrum" +msgstr "Ngultrum de Bután" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "Dólar de Belice" + +#: goffice/utils/formats.c:414 +#, fuzzy +msgid "Canada, Dollars" +msgstr "Dólar canadiano" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +#, fuzzy +msgid "Chile, Pesos" +msgstr "Peso chileno" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +#, fuzzy +msgid "Colombia, Pesos" +msgstr "Peso colombiano" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +#, fuzzy +msgid "Cuba, Pesos" +msgstr "Peso cubano" + +#: goffice/utils/formats.c:422 +#, fuzzy +msgid "Cape Verde, Escudos" +msgstr "Escudo de Cabo Verde" + +#: goffice/utils/formats.c:423 +#, fuzzy +msgid "Cyprus, Pounds" +msgstr "Libra de Chipre" + +#: goffice/utils/formats.c:424 +#, fuzzy +msgid "Czech Republic, Koruny" +msgstr "Won da República de Corea" + +#: goffice/utils/formats.c:425 +#, fuzzy +msgid "Djibouti, Francs" +msgstr "Franco de Djibouti" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +#, fuzzy +msgid "Dominican Republic, Pesos" +msgstr "Peso dominicano" + +#: goffice/utils/formats.c:428 +#, fuzzy +msgid "Algeria, Algeria Dinars" +msgstr "Dinar alxeriano" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +#, fuzzy +msgid "Egypt, Pounds" +msgstr "Libra exipcia" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "Dólar das fiji" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Libra das Illas Falkland" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +#, fuzzy +msgid "Gibraltar, Pounds" +msgstr "Libra de Xibraltar" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +#, fuzzy +msgid "Guinea, Francs" +msgstr "Franco guineano" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +#, fuzzy +msgid "Guyana, Dollars" +msgstr "Dólar da Güiana" + +#: goffice/utils/formats.c:445 +#, fuzzy +msgid "Hong Kong, Dollars" +msgstr "Dólar de Hong Kong" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +#, fuzzy +msgid "India, Rupees" +msgstr "Rupia india" + +#: goffice/utils/formats.c:454 +#, fuzzy +msgid "Iraq, Dinars" +msgstr "Dinar iraquí" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "Rial iraniano" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +#, fuzzy +msgid "Jamaica, Dollars" +msgstr "Dólar canadiano" + +#: goffice/utils/formats.c:459 +#, fuzzy +msgid "Jordan, Dinars" +msgstr "Dinar xordano" + +# ¿Yen ou Ien? +#: goffice/utils/formats.c:460 +#, fuzzy +msgid "Japan, Yen" +msgstr "Yen xaponés" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "Shilling queniano" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +#, fuzzy +msgid "Kuwait, Dinars" +msgstr "Dinar kuwaití" + +#: goffice/utils/formats.c:468 +#, fuzzy +msgid "Cayman Islands, Dollars" +msgstr "Dolar das illas caimán" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "Dólar liberiano" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +#, fuzzy +msgid "Libya, Dinars" +msgstr "Dinar libio" + +#: goffice/utils/formats.c:478 +#, fuzzy +msgid "Morocco, Dirhams" +msgstr "Dirham marroquí" + +#: goffice/utils/formats.c:479 +#, fuzzy +msgid "Moldova, Lei" +msgstr "Leu moldavo" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "Lira de Malta" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +#, fuzzy +msgid "Malawi, Kwachas" +msgstr "Kwacha de Malawi" + +#: goffice/utils/formats.c:490 +#, fuzzy +msgid "Mexico, Pesos" +msgstr "Peso mexicano" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +#, fuzzy +msgid "Namibia, Dollars" +msgstr "Dólar liberiano" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +#, fuzzy +msgid "New Zealand, Dollars" +msgstr "Dólar de Nova Celandia" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +#, fuzzy +msgid "Paraguay, Guarani" +msgstr "Guaraní de Paraguai" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "Rial de Qatar" + +#: goffice/utils/formats.c:508 +#, fuzzy +msgid "Romania, Lei" +msgstr "Leu romanés" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +#, fuzzy +msgid "Rwanda, Rwanda Francs" +msgstr "Franco ruandés" + +#: goffice/utils/formats.c:511 +#, fuzzy +msgid "Saudi Arabia, Riyals" +msgstr "Rial de Arabia Saudí" + +#: goffice/utils/formats.c:512 +#, fuzzy +msgid "Solomon Islands, Dollars" +msgstr "Dólar das Illas Salomón" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +#, fuzzy +msgid "Singapore, Dollars" +msgstr "Dólar de Singapur" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +#, fuzzy +msgid "Somalia, Shillings" +msgstr "Shilling de Tanzania" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +#, fuzzy +msgid "Syria, Pounds" +msgstr "Libra siria" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +#, fuzzy +msgid "Tunisia, Dinars" +msgstr "Dinar tuniciano" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +#, fuzzy +msgid "Turkey, Liras" +msgstr "Lira turca" + +#: goffice/utils/formats.c:534 +#, fuzzy +msgid "Trinidad and Tobago, Dollars" +msgstr "Dólar de Trinidad e Tobago" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +#, fuzzy +msgid "Tanzania, Shillings" +msgstr "Shilling de Tanzania" + +#: goffice/utils/formats.c:538 +#, fuzzy +msgid "Ukraine, Hryvnia" +msgstr "Hryvnia de Ucraína" + +#: goffice/utils/formats.c:539 +#, fuzzy +msgid "Uganda, Shillings" +msgstr "Shilling de Uganda" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +#, fuzzy +msgid "Uruguay, Pesos" +msgstr "Peso de Uruguai" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +#, fuzzy +msgid "Venezuela, Bolivares" +msgstr "Bolívar de Venezuela" + +#: goffice/utils/formats.c:544 +#, fuzzy +msgid "Viet Nam, Dong" +msgstr "Dong de Vietnám" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +#, fuzzy +msgid "Samoa, Tala" +msgstr "Tala de Samoa" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +#, fuzzy +msgid "East Caribbean Dollars" +msgstr "Dólar do Caribe Oriental" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +#, fuzzy +msgid "Yemen, Rials" +msgstr "Rial iemení" + +#: goffice/utils/formats.c:557 +#, fuzzy +msgid "Yugoslavia, New Dinars" +msgstr "Dinar de Iugoslavia" + +#: goffice/utils/formats.c:558 +#, fuzzy +msgid "South Africa, Rand" +msgstr "Rand de Sudáfrica" + +#: goffice/utils/formats.c:559 +#, fuzzy +msgid "Zambia, Kwacha" +msgstr "Kwacha de Zambia" + +#: goffice/utils/formats.c:560 +#, fuzzy +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Dólar de Cimbabue" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +#, fuzzy +msgid "Solid" +msgstr "Negriña" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Auto Corrixir" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Luns" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Mín" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "Crea un novo libro" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "_Dereita" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "Escala" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "ringleiras" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Follas" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Mar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% gris" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% gris" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% gris" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% gris" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% gris" + +#: goffice/utils/go-pattern.c:101 +#, fuzzy +msgid "Horizontal Stripe" +msgstr "Horizontal" + +#: goffice/utils/go-pattern.c:102 +#, fuzzy +msgid "Vertical Stripe" +msgstr "Aliñamento Vertical" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +#, fuzzy +msgid "Diagonal Stripe" +msgstr "Diagonal" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +#, fuzzy +msgid "Thin Horizontal Stripe" +msgstr "Horizontal" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +#, fuzzy +msgid "Foreground Solid" +msgstr "Cor do Fondo" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +#, fuzzy +msgid "Labels" +msgstr "_Etiquetas" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valores" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "erro analizando a liña\n" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "%" +msgstr "0%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Arriba" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Ordenar..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Ordenar..." + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Inserir Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Inserir Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "_Subliñado:" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Subliñado:" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +#, fuzzy +msgid "Column" +msgstr "C_olumna" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Liña" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Liñas para importar" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "Liña" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "Liñas do _enreixado" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Borrar Columna" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "Liñas do _enreixado" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Porcentaxe" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "Liñas do _enreixado" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Nome de ficheiro:" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Ordenar..." + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Aumentar" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Ordenar..." + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Ordenar..." + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Ordenar..." + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "erro analizando a liña\n" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Non se pode crear o ficheiro %s\n" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Nome de ficheiro:" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Ordenar..." + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Liñas do _enreixado" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Separador :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "Borrar" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Separador :" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Categoría :" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "Liñas do _enreixado" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Liñas do _enreixado" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Multiplicar" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Multiplicar" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Previsualización da impresión" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Rango de _Entrada:" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Liñas do _enreixado" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Ordenar..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Ordenar..." + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "_Porcentaxe" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Erro Estándar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Borrar Columna" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Nome de ficheiro:" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "erro analizando a liña\n" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Número" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Centrar" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Liñas para importar" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Modo" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "erro analizando a liña\n" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Modo" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Modo" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% do tamaño normal" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "centímetro" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "Detalles do _Ficheiro" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Modo" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Ordenar..." + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "azul" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "azul" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "erro analizando a liña\n" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "erro analizando a liña\n" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Borrar Columna" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Liña" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "puntos" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Liña" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/he.po b/lib/goffice-0.0.4/po/he.po new file mode 100644 index 0000000000..6ca6c8b3af --- /dev/null +++ b/lib/goffice-0.0.4/po/he.po @@ -0,0 +1,4243 @@ +# translation of gnumeric.HEAD.he.po to Hebrew +# translation of gnumeric.po to Hebrew +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# Gil 'Dolfin' Osher , 2003 +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric.HEAD.he\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-06-01 10:26+0300\n" +"Last-Translator: Gil 'Dolfin' Osher \n" +"Language-Team: Hebrew \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.1\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "מ_בנה" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "השרות '%s' ×œ× × ×ª×ž×š על-ידי הטוען." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "×œ× ×™×›×•×œ לסגור ×ת קובץ המודול \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "המודול ×œ× ×ž×›×™×œ פונקציית \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "שגי××” בזמן טעינת שירות התוסף." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "כללי" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "_קובץ" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "×”_×–×—×”:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "קבע גבולות" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "רווח" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "×ª×•×•×™× ×œ× ×ž×•×›×¨×™×:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_ליני×רי" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "לוגי" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "הסתר פרטי×" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "רקע" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "מקסימו×:" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "_סגור" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "מ_בנה" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "תווית" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "שישי" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "שישי" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "×”_סתר" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "×”_סתר" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "גובה" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "_הכנס" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_הכנס" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_שורה" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "×”_סתר" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "×”_צג פרטי×" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "כותרת:" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "שישי" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "גובה" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "רוחב" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "דוגמה" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "צבע:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "רוחב הקו:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "רוחב" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_גרף..." + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "טבלה" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "ש×" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "צבע קו _חיצוני:" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_הכנס" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "_×ו" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "דוגמה" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "תי×ור" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "טקסט" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_מידע" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "סדרה" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "×”_×–×—×”:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "מחרוזת" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dR x %dC" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "גופן" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "סגנון" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "תצוגה מקדימה" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "צבע:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "צבע קו _חיצוני:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "מ_שותף" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "גודל:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "סגנון" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "סוג" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "רקע" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "כיוון:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "_וג×" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "צבע _מילוי:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "מ_סנן" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "חזית" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "×”_דבק" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_בחר" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "גודל:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "_צבע:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "_ימין" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "מערך" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "×פשרויות" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "ברירת מחדל" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "גופי" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ערבית" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "בלטי" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "מרכז ×ירופ××™" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "סינית" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "סירלית" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "יוונית" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "עברית" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "הודית" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "יפנית" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "קורי×נית" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "טורקית" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "יוניקוד" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "וי×טנמית" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "מערבי" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "×חר" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "ערבית (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "ערבית (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "ערבית (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "ערבית (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "ערבית (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "ערבית (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "ערבית (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "×רמנית (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "בלטית (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "בלטית (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "בלטית (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "קלטית (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "מרכז ×ירופ××™ (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "מרכז ×ירופ××™ (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "מרכז ×ירופ××™ (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "מרכז ×ירופ××™ (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "רוסית (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "×נגלית (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "עברית (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "עברית (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "עברית (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "עברית (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "עברית (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "יוניקוד (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "יוניקוד (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "יוניקוד (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "יוניקוד (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "יוניקוד (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "יוניקוד (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "מוגדר ×ישית" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "עברית ויזו×לית (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "שני" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "מודגש" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "ערך" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "מערך" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "מ_שותף" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "קורי×נית" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "זמן" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "מערך" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "מטרה" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "ת×" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "יוונית" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "היפר קישור" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "יישור לימין" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "יישור לימין" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "יישור לימין" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "_מות×× ×ישית" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "צבע קו _חיצוני:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "תצוגה מקדימה" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "_קובץ" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "_תמונה..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "הכנס תמונה" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "שמור הכול" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "רגיל" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "מודגש" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "נטוי" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "גופן:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "תצוגה מקדימה" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "גודל:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "מספר" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "מ_טבע" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "ת×ריך" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "זמן" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "פונקציה" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "טקסט" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "_מיוחד" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "קטגוריה:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "מ_בנה" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "תצוגה מקדימה" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "מערבי" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "מרכז ×ירופ××™" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "ערבית" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +#, fuzzy +msgid "India/English (en_IN)" +msgstr "×נגלית (ASCII)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +#, fuzzy +msgid "Armenia (hy_AM)" +msgstr "×רמנית (ARMSCII-8)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +#, fuzzy +msgid "Russia (ru_RU)" +msgstr "רוסית (CP-866)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "_ת×ריך נוכחי" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*×'" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*ב'" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*×’'" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*ד'" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*×”'" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*ו'" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*ש'" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ר×שון" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "שני" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "שלישי" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "רביעי" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "חמישי" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "שישי" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "שבת" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*×™×× " + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*פבר" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*מרץ" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*×פר" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*מ××™" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*יונ" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*יול" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*×וג" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*ספט" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*×וק" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*נוב" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*דצמ" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "ינו×ר" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "פברו×ר" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "מרץ" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "×פריל" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "מ××™" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "יוני" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "יולי" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "×וגוסט" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "ספטמבר" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "×וקטובר" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "נובמבר" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "דצמבר" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "×מת" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "שקר" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "ישר×ל, ×©×§×œ×™× ×—×“×©×™×" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "לל×" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "מל×" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "לל×" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "הודית" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "הדבק" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*מרץ" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% ×פור" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% ×פור" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% ×פור" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% ×פור" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% ×פור" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "×¢×™×’×•×œ×™× ×§×˜× ×™×" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "חצ××™ עיגולי×" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "כלו×" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "כתובות" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "כתובות" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "קו" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "קו" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "×חוזי×" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "×חוזי×" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "×חוזי×" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "×חוזי×" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "×חוזי×" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "×חוזי×" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "כלו×" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "מפרידי×" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "קטגוריה:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "טבעת" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "פצל" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "כתובות" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "×חוזי×" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "×ž×¡×¤×¨×™× ×©×œ×ž×™×" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "מרכז" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "מקור" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "טבלה" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "מבנה המקור" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "ת×ריך" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "מקור" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "כפול" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "כפול" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "קו" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "קו" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/hr.po b/lib/goffice-0.0.4/po/hr.po new file mode 100644 index 0000000000..7d2696c754 --- /dev/null +++ b/lib/goffice-0.0.4/po/hr.po @@ -0,0 +1,4245 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# Translation of gnumeric to Croatiann +# Copyright (C) Croatiann team +# Translators: Antun Krasic ,Automatski Prijevod <>,Danijel Studen ,Denis Lackovic ,Diana Ćorluka ,Igor Jagec ,Ivan Jankovic ,Ivan Knežević ,Jerko Bakotin ,Ljubomir Božić ,Mato Kutlić ,pr pr ,Robert Avilov ,Robert Sedak ,Tanja Minarik ,Vedran Vyroubal , +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-02-09 15:30+CET\n" +"Last-Translator: Robert Sedak \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: TransDict server\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Spremanje preko starih datoteka ove vrste je onemogućeno zbog sigurnosnih " +"razloga." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Možete iskljuÄiti ovu zaÅ¡titu ureÄ‘ivanjem odgovarajuće plugin.xml datoteke." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Stvaran" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Datoteka sadrži opis umetka s netoÄnom identifikacijom (%s), oÄekivao sam %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Ne može proÄitati opis dodatka iz datoteke." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nepoznato ime" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Nepodržana vrsta za sustav za uÄitavanje „%s“." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "GreÅ¡ka prilikom pripremanja punioca „%s“" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "GreÅ¡ka prilikom Äitanja podataka o servisu #%d" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ne mogu proÄitati datoteku sa opisom dodatka („%s“)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Datoteka „%s“ nije ispravna datoteka opisa umetka." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "GreÅ¡ka pri uÄitavanju servisa za dodatak sa id=„%s“." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "ID umetka sadrži nedozvoljene znakove (%s)" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nepoznato ime dodatka." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Nije definiran sustav za uÄitavanje ili je ID sustava pogreÅ¡an za umetak s " +"ID=„%s“." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Umetak nema identifikacijski broj." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" +"GreÅ¡ka u postavljanju poÄetnih vrijednosti za uÄitavanje umetka (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "PronaÄ‘ene su kružne zavisnosti dodataka." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ne može pokrenuti dodatak sa identifikacijskim id=„%s“." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ne može pronaći dodatak sa identifikacijom id=„%s“." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "GreÅ¡ka tijkom pokretanja ovisnosti dodataka." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "GreÅ¡ka prilikom pokretanja servisa umetka #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "GreÅ¡ka prilikom zaustavljanja servisa dodatka #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ne mogu uÄitati pokretaÄ dodataka." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ne mogu proÄitati plugin s brojem \"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "GreÅ¡ka prilikom uÄitavanja zavisnosti umetka." + +#: goffice/app/go-plugin.c:1288 +#, fuzzy, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Trenutni _datum" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ne može pokrenuti dodatak „%s“ (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ne može prekinuti rad dodatka „%s“ (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "GreÅ¡ka prilikom Äitanja informacija o dostupnim umetcima" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "GreÅ¡ka prilikom zaustavljanja umetaka koji se viÅ¡e ne nalaze na disku." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Sledeći dodaci se viÅ¡e ne nalaze na disku ali su joÅ¡ uvijek pokrenuti:\n" +"%s.\n" +"Trebalo bi da sada ponovo pokrenete Gnumerik." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "GreÅ¡ke prilikom pokretanja umetaka." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "GreÅ¡ke prilikom pokretanja sustava umetaka." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Sustav za uÄitavanje ne podržava servis „%s“." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nije upisano modularno ime datoteke." + +#: goffice/app/go-plugin-loader-module.c:80 +#, fuzzy, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ne mogu stvoriti datoteku %s\n" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Datoteka modula „%s“ ima neispravan format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Datoteka ne sadrži („plugin_file_struct“ simbol)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Datoteka ima pogreÅ¡an magiÄni broj." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Verzija umetka „%s“ je razliÄita od programa „%s“." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Ovaj sustav ne podržava dinamiÄko uÄitavanje modula." + +#: goffice/app/go-plugin-loader-module.c:118 +#, fuzzy, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ne mogu stvoriti datoteku %s\n" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Datoteka ne sadrži „%s“ funkciju." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modul ne sadrži „%s“ funkciju." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "GreÅ¡ka tijekom uÄitavanja servisa dodataka." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" +"Funkcija unutar umetka koja postavlja poÄetne vrijednosti je vratila greÅ¡ku." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Cleanup funkcija unutar plugin-a je vratila greÅ¡ku." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Općenito" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Sustav za otvaranje datoteka nema opis" + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "Ime datoteke: %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "GreÅ¡ka tijekom Äitanja datoteke." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Sustav za spremanje datoteka nema opis" + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Ime datoteke: %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "GreÅ¡ka tijekom spremanja datoteke." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "PokretaÄ dodataka" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "PokretaÄ Gobjekta" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Ne postoji „vrsta“ atribut za element „servis“." + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Nepoznata funkcija" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "GreÅ¡ka kod Äitanja servisnih informacija." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Moramo uÄitati servis prije njegova pokretanja (PLUGIN_ALWAYS_LOAD je " +"postavljen) ali uÄitavanje nije uspjelo." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formule" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Uvlaka:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Razmak" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Razmak" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Poravnanje" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Znak citata:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "VeliÄina problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskretan" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diskretan" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Linearni" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "LogiÄki" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logaritamski" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detalji" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatski" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategorija" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Ocjene" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "_Maks" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Gla_vne crtice" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Sp_oredne crtice" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Križ" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Oblikovanje" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Oznaka" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Mreža" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Mreža" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Glavne oznake:" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Linija" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Sporedne oznake:" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Linija" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "U_nutra" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Vanjsko" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Visok" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Unutra" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Inverzno" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Nisko" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Vanjsko" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Prikaži oznake" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tip:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Naslov" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Mreža" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Osi" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Osi" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-os" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Crtanje" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Visina" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Å irina" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Dojava greÅ¡ke" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Uzorak" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Boja:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "_Dan" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Å irina linije:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Sa:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Graf" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Ime" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Korak 1 od 2: Odaberite tip grafikona" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Korak 2 od 2: Prilagodite grafikon" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Prilagodi dijagram" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Ubaci" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Vrsta _ispisa" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office grafikon" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Redoslijed" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Orijentacija" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Uzorak" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stil" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Prikaži\n" +"Uzorak" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Opis" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Podatak" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Serija" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Program za crtanje" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Vrsta crtanja" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Motiv grafika" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Uvlaka:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_String" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "ToÄka" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Pismo" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Svjetlina" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Popuni" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linija" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Oznaka" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Kontura" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Boja:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "_Konturna boja:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Oblik:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_VeliÄina:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Stil:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "Vrh" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Pozadina:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Smjer:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "Dodaj" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Boja _ispunjavanja:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Prilagodi:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Prvi plan:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Uzorak:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Odaberi..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_VeliÄina:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_ZapoÄni:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_svijetlije" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "tamnije" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "toÄ." + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "rastegnuto" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "UobiÄajeno" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arapski" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltik" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Srednjeeuropski" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kineski" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Ćirilica" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "GrÄki" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebrejski" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Min" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japanski" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korejski" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turski" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vijetnamska" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Zapadni" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Ostalo" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arapski (IBM" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arapski (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arapski (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arapski (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arapski (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arapski (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arapski (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armenijska (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltic (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "BaltiÄki (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "BaltiÄki (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltska (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Srednjeeuropski (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Srednje-europska (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Srednjeeuropski (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Srednjeeuropski (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Kineski pojednostavljeni (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Kineska pojednostavljena (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Pojednostavljeni kineski (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Pojednostavljeni kineski (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Kineski pojednostavljeni (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Kineska tradicionalna (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Kineski Tradicionalni (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Tradicionalni kineski (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Hrvatski (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "ĆiriliÄni (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "ÄŒirilićni (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "ĆiriliÄni (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "ÄŒirilićno (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "ĆiriliÄni (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "ÄŒirilica (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Ruski (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrajinski (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrajinski (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Engleski (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgijski (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "GrÄki (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "GrÄki (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "GrÄki (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrejski (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "hebrejski (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrejski (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrejski (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrejski (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindu (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandski (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanski (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanski (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanski (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korejski (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korejski (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korejski (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korejski (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordijska (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumunski (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumunjski (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Južno-europska (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tajlandska (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turski (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turski (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turski (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turski (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "KorisniÄki definirano" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vijetnamski (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vijetnamska (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vijetnamski (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vijetnamski (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Vizualni hebrejski (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Zapadni (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Zapadna (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Zapadna (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Zapadni (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Zapadni (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Lokali: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Smjer pretvorbe" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Ova vrijednost odluÄuje koji iconv test će se izvesti." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "crna" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "svjetlo smeÄ‘a" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "zlatno smeÄ‘a" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "tamno zelena #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "Nedjelja" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "tamno plava" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "ljubiÄasta #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "tamno siva" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "tamno crvena" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "crveno-naranÄ‘asta" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "zlatna" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "tamno zelena" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "plava" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "plava" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "tamno siva" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "crvena" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "naranÄasta" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "Vrijeme" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "zelena" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "plava" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "plava" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "siva" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "svjetlo narandžasta" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "žuta" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "zelena" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cijan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "svjetlo plava" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "svjetlo siva" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "Operacija" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "Desno poravnano" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "žuta" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "svijetlo zelena" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "Desno poravnano" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "svjetlo plava" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "svijetlo ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "bijela" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "svjetlo plava" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "tamno crvena" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "plava" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "prilagoÄ‘eno" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "PrilagoÄ‘ena boja:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Sjena" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orijentacija" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ne mogu otvoriti datoteku '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Datoteke" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Slika" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "OznaÄi sliku" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Spremi" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Vrsta datoteke:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Navedeni nastavak datoteke ne odgovara odabranoj vrsti datoteke. Želite li " +"svejedno koristiti ovo ime?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"je ime direktorija" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Ne posjedujete privilegije za spremanje u\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Radna knjiga %s već postoji.\n" +"Želite li je prebrisati?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "ObiÄno" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Masno" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Podebljano nakoÅ¡eno" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "NakoÅ¡eno" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stil pisma:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Pismo:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Pregled" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "VeliÄina:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Broj" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Rad s raÄunima" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Datum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Vrijeme" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Postotak" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Razlomak" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Znanstvena" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Posebno" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "PrilagoÄ‘eno" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Oblik negativnog broja" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Oblici brojeva" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegorije:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Deci_malna mjesta:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Prikaz vrijednosti u klasiÄnom raÄunovodstvenom stilu." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Prikaži ulazne vrijednosti kao tekst bez obrade." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Prikaži novÄane vrijednosti." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Prikaži datume i po želji vremena." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Prikaži brojevne vrijednosti sa fiksnim brojem decimala." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Prikaži vrijeme dana." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Prikaži vrijednosti kao najbližu razlomljenu vrijednost." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Prikaži vrijednost kao postotke." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Prikaži vrijednosti kao potencije broja 10." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Oblikuj _kod:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Oblik negativnog broja:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Pregled:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "_Simbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Sam odaberi odgovarajuće formatiranje." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Navedite neposredno formatiranje u XL stilu" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Koristi razdvojnik tisućica" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Tekst" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "IstoÄna Europa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Sjeverna Amerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Južna i srediÅ¡nja Amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Azija" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australija" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "SAD/engleski (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Južna Afrika/Afrikans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopija/Amharski (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Ujedinjeni Arapski Emirati (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Alžir (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egipat (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Indija/arapski (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordan (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuvajt (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Lebanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libija (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Kvatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudijska Arabija (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Sirija (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunis (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbejdžan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Bjelorusija (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bugarska (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Indija/bengalski (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francuska/bretanjski (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosna i Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Å panjolska/katalonski (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ÄŒeÅ¡ka republika (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Velika Britanija/velÅ¡ki (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danska (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austrija (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgija/njemaÄki (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Å vicarska/njemaÄki (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "NjemaÄka (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luksemburg/njemaÄki (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "GrÄka (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australija (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/engleski (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Velika Britanija (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/engleski (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irska (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Indija/engleski (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Novi Zeland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipini (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/engleski (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "SAD/engleski (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Južna Afrika/engleski (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabve (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivija (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "ÄŒile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbija (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikanska republika (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Å panjolska (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Gvatamala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Meksiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nikaragva (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Portoriko (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paragvaj (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "SAD/Å¡panjolski (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Urugvaj (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venecuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonija (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Å panjolska/Baskija (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finska/finski (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Farsko otoÄje (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgija/francuski (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/francuski (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Å vicarska/francuski (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francuska (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irska/irski (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Velika Britanija/Å¡kotski (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Å panolska/galicijski (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Velika Britanija/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Indija/hindi (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Hrvatska (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "MaÄ‘arska (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonezija (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Å vicarska/talijanski (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italija (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Izrael/hebrejski (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Gruzija (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grenland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Koreja (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Velika Britanija/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litva (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Letonija (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Novi Zeland/maorski (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedonija (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Indija/marati (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malezija (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgija/flamanski (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Nizozemska (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "NorveÅ¡ka/ninorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "NorveÅ¡ka/bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francuska/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poljska (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumunjska (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rusija (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukrajina/ruski (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "NorveÅ¡ka/sami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "SlovaÄka (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenija (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albanija (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Srbija i Crna Gora (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finska/Å¡vedski (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Å vedska (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Indija/tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Indija/telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadžikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tajland (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritreja (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopija/tigrinja (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipini/tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turska (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rusija/tatarski (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukrajina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vijetnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgija/valun (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "SAD/jidiÅ¡ (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Kina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/kineski (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/kineski (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Tajvan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Trenutne lokalne postavke:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Izbornik" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Operacija" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "VeliÄina pokazatelja" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "VeliÄina padajućeg pokazatelja" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "GreÅ¡ka u sintaksi" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Razmak oko pokazatelja" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ned" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Pon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Uto" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Sri" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*ÄŒet" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Pet" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sub" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Nedjelja" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Ponedjeljak" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Utorak" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Srijeda" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "ÄŒetvrtak" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Petak" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Subota" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Sij" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Vel" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Ožu" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Tra" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Svi" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Lip" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Srp" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Kol" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Ruj" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Lis" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Stu" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Pro" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "SijeÄanj" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "VeljaÄa" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Ožujak" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Travanj" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Svibanj" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Lipanj" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Srpanj" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Kolovoz" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Rujan" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Listopad" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Studeni" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Prosinac" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TOÄŒNO" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "NETOÄŒNO" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Crna" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Plava" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cijan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Zelena" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Crvena" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Bijela" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "žuta" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Ujedinjeni Arapski Emirati" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistan, Afganci" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albanija, Leka" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, Drams" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Nizozemski Antili, guldeni" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, pesosi" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australija, dolari" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, guldeni" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaijan, Manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosna i Hercegovina, konvertibilna marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dollars" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bugarska, leve" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, Dinars" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, franci" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dolari" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, dolari" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivija, bolivijanosi" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazil, brazilski real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, Dollars" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrumi" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pule" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Bjelorusija, rublji" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dolari" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, dolari" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/Kinshasa, kongonski franci" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Å vicarska, franak" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ÄŒile, pesosi" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Kina, Yuan Renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbija, pesosi" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, koloni" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, Pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Zelenortski Otoci, eskudosi" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cipar, funte" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ÄŒeÅ¡ka Republika, krune" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, franak" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danska, krune" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikanska Republika, pesosi" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Alžir , alžirski dinari" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonija, krune" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egipat, funte" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritreja, nakfe" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopija, birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Zemlje europske unije, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dolari" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Foklandsko otoÄje (Malvinas), funte" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Velika Britanija, funte" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Gruzija, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, funte" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Gana, cedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, funte" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambija, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Gvineja, franci" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Gvatamala, quetzales" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Gujana, dolari" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dolari" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempire" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Hrvatska, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gurde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "MaÄ‘arska, forinte" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonezija, rupiji" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Izrael, novi Å¡ekeli" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, funte" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Indija, rupiji" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, Rials" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, krune" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, funte" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamajka, dolari" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, dinari" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, jeni" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenija, Å¡iling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgistan, somi" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodža, rile" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komori, franak" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Sjeverna Koreja, voni" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Južna Koreja, voni" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuvajt, dinari" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kajmanski Otoci, dolari" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazahstan, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kipe" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Liban, funte" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Å ri Lanka, rupiji" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberija, dolari" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesoto, maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litva, litaje" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Letonija, lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libija, dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroko, drahme" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavija, lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, malagaski franci" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonija, denari" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Mianmar (Burma), kjate" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolija, tugrike" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Makau, patake" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritanija, ougije" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lire" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauricijus, rupje" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldivi (Maldivska otoÄja), Rufija" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malavi, kwachas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Meksiko, pezosi" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malezija, ringici" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambik, metikaje" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibija, dolari" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigerija, naire" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikaragva, zlatne kordobe" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "NorveÅ¡ka, krune" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, nepalski rupiji" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Novi Zeland, dolari" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rijale" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboe" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, nove sole" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nova Gvineja, kine" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipini, pezosi" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupiji" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poljska, zloti" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paragvaj, gvarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, Rials" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumunjska, leje" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusija, rublje" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, ruandski franci" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudijska Arabija, rijale" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomonsko otoÄje, dolari" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "SejeÅ¡eli, Rupees" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinari" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Å vedska, krune" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, dolari" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Sv. Helena, funte" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenija, tolari" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "SlovaÄka, krune" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Siera Leone, leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalija, Å¡ilinzi" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, LuiÄ‘ini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surine, guldeni" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome i Principe, dobre" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Colonesi" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Sirija, funte" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Svazilend, emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tajland, bati" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadžikistan, rublje" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manati" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunis, dinari" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pange" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turska, lire" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad i Tobago, dolari" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, tuvalski dolari" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Tajvan, novi dolari" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzanija, Å¡ilinzi" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukrajina, hrivne" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Å¡ilinzi" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Amerika, dolari" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Urugvaj, pezosi" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, sume" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venecuela, bolivare" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vijetnam, donge" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tale" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Franci" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Srebro, Unca" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Zlato, unce" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "IstoÄnokaripski dolari" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Posebna prava povlaÄenja MeÄ‘unarodnog monetarnog fonda (MMF)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Franci" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Paladijum, unce" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platina, unce" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, rijale" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Srbija i Crna Gora, dinari" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Južna Afrika, randi" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambija, kvaÄe" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabve, dolari" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Nijedan" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Puno" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatski" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "niÅ¡ta" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "kvadrat" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "dijamant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "donji trokut" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "trokut gore" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "trokut desno" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "lijevi trokut" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "kružnica" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "unakrsno" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "zvjezdica" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "traka" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "polutraka" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "leptir" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "pjeÅ¡Äani sat" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "25%" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "25%" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25%" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "25%" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "25%" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Vodoravne trake" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Okomite linije" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Traka obrnute dijagonale" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Dijagonalna traka" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Dijagonalna Crosshatch" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Debeli dijagonalni Crosshatch" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tanke vodoravne linije" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tanke okomite linije" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Obrnute tanke dijagonalne linije" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tanka dijagonalna linije" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tanki vodoravni Crosshatch" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tanki dijagonalni Crosshatch" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Prvi plan" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Mali krugovi" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Polukrugovi" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Pokrov" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Veliki krugovi" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Cigle" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Oznake" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Vrijednosti" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "GreÅ¡ka pri obradi linije" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "TrakaStupaca" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Koliko se trake/stupci preklapaju kao postotak Å¡irine" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "_Preklapanje:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Razmak meÄ‘u grupama kao postotak Å¡irine trake/stupci" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Praznina:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "Crtaj Liniju" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "Crtaj podruÄje" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D susjedne trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D susjedni stupci" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D postotne trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D postotni stupci" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D sljepljene trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D sljepljeni stupci" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Susjedne trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Susjedni stupaci" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Susjedne vodoravne 3D trake grupirane prema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Susjedne vodoravne trake grupirane prema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Susjedni uspravni 3D stupci grupiraniprema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Susjedni uspravni stupci grupiraniprema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "PodruÄje" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Crtanje podruÄja." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "PodruÄja" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Položeni stup." + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Stupac" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Crta" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Crtanje linije." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Sporedne kategorije posložene prema postotku ukupnog sporednog, u vodoravnim " +"3D trakama, grupirane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Sporedne kategorije posložene prema postotku ukupnog sporednog, u uspravnim " +"3D trakama, grupirane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Sporedne kategorije posložene prema postotku ukupnog sporednog, u vodoravnim " +"trakama, grupirane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Sporedne kategorije posložene prema postotku ukupnog sporednog, u uspravnim " +"trakama, grupirane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Sporedne kategorije posložene u vodoravnim 3D trakama, grupirane prema " +"glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Sporedne kategorije posložene u vodoravnim trakama, grupirane prema glavnoj " +"kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Sporedne kategorije posložene u uspravnim 3D stupcima, grupirane prema " +"glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Sporedne kategorije posložene u uspravnim stupcima, grupirane prema glavnoj " +"kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Postotno podruÄke" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Postne trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Postotni stupci" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Postotne linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Ispis postotnog podruÄja." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Ispis postotnih linija." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Spojena polja" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Spojene trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Spojen stupci" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Spojene linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Iscrtavanje spojenih polja." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Iscrtavanje spojenih linija." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Sistem za iscrtavanje podruÄja." + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Sistem za iscrtavanje traka/kolona" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Vrste uobiÄajenog 1.5d crtanja" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Sustav za iscrtavanje linija" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Gragovi za linije, podruÄja, trake i stupce" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Crtanje" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Neispravna lozinka" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Crtanje" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Crtanje" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Crtanje" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Sistem za iscrtavanje traka/kolona" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Mijenjam boju tabova" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Vrste uobiÄajenog 1.5d crtanja" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "Crtaj tortu" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "Crtaj prsten" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Stupnjevi, u smjeru suprotnog kazaljke na satu, od položaja 03:00" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Dijelovi poÄinju na:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"UobiÄajena vrijednost za koju je svaki dio odvojen od srediÅ¡ta mjereno u " +"postotcima polumjera pite" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Rastavljanje:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Mijenjaj boje po kriÅ¡kama:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "stupnjeva" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +#, fuzzy +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"UobiÄajena vrijednost za koju je svaki dio odvojen od srediÅ¡ta mjereno u " +"postotcima polumjera pite" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Razdjelnik:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "VeliÄina cen_tra:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D torta" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D odvojena torta" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"ZnaÄajniji zbrojevi kao postoci sa svakim dijelom podijeljenim u sekundarne " +"pite." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"ZnaÄajniji zbrojevi kao postoci sa svakim dijelom podijeljenim u sekundarne " +"pite" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "ViÅ¡e-torti" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "ViÅ¡e-tortnih-traka" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Postotak svakog uÄesnika prikazanog u prstenu za svaki red s izdvojenim " +"rubovima posljednjeg prstena." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Postotak svakog sudionika prikazan u prstenu za svaki slijed." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Postotak svakog sudionika u 3D piti." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Postotak svakog sudionika s izdvojenim 3D rubovima." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Postotak svakog sudionika s izdvojenim rubovima." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Postotak svakog sudionika." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Torta" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Zvoni" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Razdjeljena torta" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Razdjeljeni prsten" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "UobiÄajeni tip pite" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Sustav za iscrtavanje pita" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Sustav za iscrtavanje prstena" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "TrakaStupaca" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Crtaj podruÄje" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Crtanje podruÄja." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Stadardna greÅ¡ka" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Iscrtavanje spojenih polja." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Vrste uobiÄajenog 1.5d crtanja" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Sistem za iscrtavanje podruÄja." + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Sustav za iscrtavanje prstena" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Cijeli brojevi" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Brojanje" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Crtanje podruÄja." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Izvor" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Sustav za iscrtavanje prstena" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Pita grafikoni" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Pita grafikoni" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% od _normale veliÄine" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Parametri" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Izvor" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +#, fuzzy +msgid "_Vary colors by bubble" +msgstr "_Mijenjaj boje po kriÅ¡kama:" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "Crtaj XY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Mjehurić" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "GreÅ¡ka pri obradi linije" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "GreÅ¡ka pri obradi linije" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpoliraj izmeÄ‘u viÅ¡edimenzionalnih toÄaka." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Linearno interpoliraj izmeÄ‘u viÅ¡edimenzionalnih taÄaka, sa oznakama nasvakoj " +"toÄki." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Linearno interpoliraj izmeÄ‘u viÅ¡edimenzionalnih toÄaka." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Iscrtaj X, Y i veliÄinu mjehurića." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +msgid "XY Splines" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D sustav rasprÅ¡enog ispisivanja" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Vrste razbacanog iscrtavanja" diff --git a/lib/goffice-0.0.4/po/hu.po b/lib/goffice-0.0.4/po/hu.po new file mode 100644 index 0000000000..df7eb2ea38 --- /dev/null +++ b/lib/goffice-0.0.4/po/hu.po @@ -0,0 +1,4692 @@ +# gnumeric.gnumeric-1-2.po fordítása Hungarianra +# Gnumeric Hungarian translations +# Copyright (C) 1998-2000, 2004 Free Software Foundation, Inc. +# Emese Kovacs , 2000. +# Andras TIMAR , 2000. +# Gabor Kelemen , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric.gnumeric-1-2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-04-09 11:10+0200\n" +"Last-Translator: Gabor Kelemen \n" +"Language-Team: Hungarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3.1\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +#, fuzzy +msgid "Saving over old files of this type is disabled for safety." +msgstr "A régi fájlok felülírását biztonsági okokból kikapcsoltam" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Célfüggvény" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ismeretlen név" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Nem támogatott betöltÅ‘típus: \"%s\"" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Hiba történt \"%s\" betöltÅ‘ elÅ‘készítésekor." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Hiba történt %d. szolgáltatás információjának olvasása közben." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ismeretlen bÅ‘vítménynév" + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Nincs megadva betöltÅ‘ a \"%s\" azonosítójú bÅ‘vítményhez." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "A bÅ‘vítménynek nincs azonosítója." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Hiba a bÅ‘vítmények függÅ‘ségeinek betöltése közben." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Nincs megadva betöltÅ‘ a \"%s\" azonosítójú bÅ‘vítményhez." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Nincs megadva betöltÅ‘ a \"%s\" azonosítójú bÅ‘vítményhez." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Hiba a bÅ‘vítmények függÅ‘ségeinek betöltése közben." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Hiba történt a bÅ‘vítmény %d. szolgáltatásának aktiválása közben." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Hiba történt a bÅ‘vítmény %d. szolgáltatásának deaktiválása közben." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Nem sikerült betölteni a bÅ‘vítménzbetöltÅ‘t." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Nincs megadva betöltÅ‘ a \"%s\" azonosítójú bÅ‘vítményhez." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Hiba a bÅ‘vítmények függÅ‘ségeinek betöltése közben." + +#: goffice/app/go-plugin.c:1288 +#, fuzzy, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Hibák történtek a \"%s\" azonosítójú bÅ‘vítmény betöltÅ‘jének lekérdezése " +"közben." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Hiba történt a bÅ‘vítmény %d. szolgáltatásának deaktiválása közben." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "A betöltÅ‘ nem támogatja ezt a szolgáltatást." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nincs megadva a modulfájl neve." + +#: goffice/app/go-plugin-loader-module.c:80 +#, fuzzy, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Nem sikerült megnyitni a \"%s\" modulfájlt: %s" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "\"%s\" modulfájl formátuma érvénytelen." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "A fájl nem tartalmaz \"plugin_file_struct\" szimbólumot." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "A fájlnak rossz a mágikus száma." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "A bÅ‘vítmény verziója (%s) különbözik az alkalmazás verziójától (%s)." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "A dinamikus modulbetöltés nem támogatott ezen a rendszeren" + +#: goffice/app/go-plugin-loader-module.c:118 +#, fuzzy, c-format +msgid "Unable to close module file \"%s\"." +msgstr "nem sikerült bezárni \"%s\" modulfájlt: %s" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "A fájl nem tartalmaz \"%s\" függvényt." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "A modul nem tartalmaz \"%s\" függvényt." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +#, fuzzy +msgid "Error while loading plugin service." +msgstr "Hiba a bÅ‘vítmény betöltése közben." + +#: goffice/app/go-plugin-service.c:164 +#, fuzzy +msgid "Initializing function inside plugin returned error." +msgstr "\"%s\" init_plugin függvénye hibát jelez." + +#: goffice/app/go-plugin-service.c:182 +#, fuzzy +msgid "Cleanup function inside plugin returned error." +msgstr "\"%s\" init_plugin függvénye hibát jelez." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Ãltalános" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "A bÅ‘vítménynek nincs azonosítója." + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "A bÅ‘vítménynek nincs azonosítója." + +#: goffice/app/go-plugin-service.c:495 +#, fuzzy +msgid "Error while reading file." +msgstr "Hiba történt a DIF fájl beolvasása közben." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "A bÅ‘vítménynek nincs azonosítója." + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Fájlnév: %s" + +#: goffice/app/go-plugin-service.c:767 +#, fuzzy +msgid "Error while saving file." +msgstr "Hiba történt a DIF fájl mentése közben." + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Nem sikerült betölteni a bÅ‘vítménzbetöltÅ‘t." + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Célfüggvény" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Ismeretlem rendszer" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Hiba történt %d. szolgáltatás információjának olvasása közben." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Képletek" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Behúzás:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Keresés" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Szóköz" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Igazítás" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "IdézÅ‘jel karakter :" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diszkrét" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diszkrét" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Vonal" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logikai" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logaritmikus" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "_Részletek elrejtése" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatikus" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "K_ategória:" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# src/file-manager/nautilus-directory-view-ui.xml.h:30 +# src/nautilus-sidebar.c:490 +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Háttér" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_inimum" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Maximum" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Költség" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formátum" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Címke" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Péntek" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Péntek" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Minta" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Minta" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Minta" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Minta" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Belül" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Körvonal" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "Magasság" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Belül" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Beszúrás" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "So_r" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Körvonal" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Címkék" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Típus:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Jelmagyarázat" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:325 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:325 +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Cím" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Péntek" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X tengely" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y tengely" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z tengely" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Rendezés" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "M" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Magasság" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "Sz" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Szélesség" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Hiba _figyelmeztetés:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stílus" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Minta" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Szín:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Fi_x szélesség" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Jó szöveg:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "Csoportosítás" + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "K-adik legnagyobb:" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Név" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "_Egyéni fejléc" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Beszúrás" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Valamilyen név" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Ã_trendezés" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Irány" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Minta" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stílus" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Minta" + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/nameresolution.glade.h:25 +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Leírás" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "Szö_veg:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Adat" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Sorozat" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Valamilyen név" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Valamilyen név" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Behúzás:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Karakterláncok" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Pont" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Betűkészlet" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stílus" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "élénknarancs" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Minta" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Minta" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Minta" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Minta" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Szín:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Körvonal" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "Tartomány :" + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/memory.glade.h:18 interfaces/memory.glade.h:29 +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# src/file-manager/fm-properties-window.c:1502 +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Méret:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Stílus:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "_Típus:" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# src/file-manager/nautilus-directory-view-ui.xml.h:30 +# src/nautilus-sidebar.c:490 +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Háttér" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Irány:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "Vég" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Szín :" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "Legye_n:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "ElÅ‘tér" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Minta" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Kijelölés..." + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/memory.glade.h:18 interfaces/memory.glade.h:29 +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# src/file-manager/fm-properties-window.c:1502 +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Méret:" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# libnautilus-private/nautilus-program-chooser.c:1189 +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "Ãllapot" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "élénkkék" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_sötétebb" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "Kimutatások:" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/users.glade.h:63 +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Alapértelmezett" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:283 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:283 +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arab" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Balti" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:239 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:239 +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Közép-európai" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:220 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:220 +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kínai" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:243 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:243 +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cirill" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:299 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:299 +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Görög" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Héber" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indiai" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:222 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:222 +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japán" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:223 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:223 +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreai" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:316 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:316 +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Török" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:266 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:266 +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:270 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:270 +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnami" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Nyugati" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Egyéb" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:283 +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arab (IBM-864)" + +# src/trans.h:283 +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arab (IBM-864-I)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:230 +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arab (ISO-8859-6)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:230 +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arab (ISO-8859-6-E)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:230 +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arab (ISO-8859-6-I)" + +# src/trans.h:283 +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arab (MacArabic)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:231 +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arab (Windows-1256)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:228 src/trans.h:279 +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Örmény (ARMSCII-8)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:229 +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Balti (ISO-8859-13)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:230 +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Balti (ISO-8859-4)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:231 +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Balti (Windows-1257)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:232 +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Kelta (ISO-8859-14)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:233 +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Közép-európai (IBM-852)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:234 +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Közép-európai (ISO-8859-2)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:235 +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Közép-európai (MacCE)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:236 +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Közép-európai (Windows-1250)" + +# src/trans.h:238 +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Egyszerűsített kínai (GB18030)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:237 +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Egyszerűsített kínai (GB2312)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:238 +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Egyszerűsített kínai (GBK)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:238 +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Egyszerűsített kínai (HZ)" + +# src/trans.h:238 +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Egyszerűsített kínai (Windows-936)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:240 +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Hagyományos kínai (Big5)" + +# src/trans.h:240 +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Hagyományos kínai (Big5-HKSCS)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:241 +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Hagyományos kínai (EUC-TW)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:242 +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Horvát (MacCroatian)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:243 +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cirill (IBM-855)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:244 +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirill (ISO-8859-5)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:245 +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cirill (ISO-IR-111)" + +# src/trans.h:243 +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirill (KOI8-R)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:249 +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cirill (MacCyrillic)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:246 +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirill (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Orosz (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrán (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrán (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Angol (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Grúz (GEOSTD8)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:250 +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Görög (ISO-8859-7)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:251 +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Görög (MacGreek)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:252 +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Görög (Windows-1253)" + +# src/trans.h:242 +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +# src/trans.h:264 +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:274 +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Héber (IBM-862)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:272 +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Héber (ISO-8859-8-E)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:272 +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Héber (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrew (MacHebrew)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:252 +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Héber (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:253 +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Izlandi (MacIcelandic)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:254 +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japán (EUC-JP)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:255 +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japán (ISO-2022-JP)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:256 +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japán (Shift_JIS)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:257 +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Koreai (EUC-KR)" + +# src/trans.h:257 +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Koreai (ISO-2022-KR)" + +# src/trans.h:304 +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Koreai (JOHAB)" + +# src/trans.h:257 +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Koreai (UHC)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:258 +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Skandináv (ISO-8859-10)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:259 +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Román (MacRomanian)" + +# src/trans.h:230 +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Román (ISO-8859-16)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:260 +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Dél-európai (ISO-8859-3)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:261 +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:262 +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Török (IBM-857)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:263 +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Török (ISO-8859-9)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:264 +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Török (MacTurkish)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:265 +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Török (Windows-1254)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:266 +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:267 +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +# src/trans.h:266 +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +# src/trans.h:266 +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +# src/trans.h:266 +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +# src/trans.h:266 +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/prefs.c:378 +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Felhasználó által megadott" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:268 +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnami (TCVN)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:269 +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnami (VISCII)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:270 +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnami (VPS)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:271 +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnami (Windows-1258)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:272 +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Vizuális héber (ISO-8859-8)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:274 +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Nyugati (IBM-850)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:275 +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Nyugati (ISO-8859-1)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:276 +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Nyugati (ISO-8859-15)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:277 +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Nyugati (MacRoman)" + +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:278 +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Nyugati (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale: " + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Pearson-korreláció" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "fekete" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "világosbarna" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "aranybarna" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "sötétzöld #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "tengerészkék" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "sötétkék" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "bíbor #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "szürkésfekete" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "sötétvörös" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "sötétnarancs" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "arany" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "sötétzöld" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "fakókék" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "kék" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "fakó bíbor" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "sötétszürke" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "vörös" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "narancssárga" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "sárgászöld" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "fakózöld" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "fakókék #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "égszínkék #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "bíbor" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "szürke" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "lila" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "élénknarancs" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "sárga" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "zöld" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "ciánkék" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "élénkkék" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "bíborvörös" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "világosszürke" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rózsaszín" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "világos-narancssárga" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "világossárga" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "világoszöld" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "világoscián" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "világoskék" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "világosbíbor" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "fehér" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "kékeslila" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "sötétbíbor" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "égszínkék" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "egyéni" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Egyéni szín:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Ãrnyék" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Irány" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Nem sikerült megnyitni a fájlt: %s" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Fájlok" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# src/nautilus-property-browser.c:957 +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Kép" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Egy teljes oszlop kijelölése" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Mentés" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "_Fájl" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"egy könyvtárnév" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Nincsen jogosultságod a %s\n" +"mentéséhez." + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Már létezik %s nevű munkafüzet.\n" +"Szeretnéd felülírni?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normál" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Félkövér" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Félkövér dÅ‘lt" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "DÅ‘lt" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Betűstílus:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Betűkészlet:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "ElÅ‘nézet" + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/memory.glade.h:18 interfaces/memory.glade.h:29 +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# src/file-manager/fm-properties-window.c:1502 +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Méret:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Szám" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Pénznem" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Könyvvitel" + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/time.glade.h:9 +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dátum" + +# #-#-#-#-# gnome-system-tools.HEAD.hu.po-new.po (gnome-system-tools CVS) #-#-#-#-# +# interfaces/time.glade.h:10 +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "IdÅ‘" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Százalék" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Tört" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Tudományos" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# components/text/Nautilus_View_text.oaf.in.h:2 +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Szöveg" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Speciális" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Egyéni" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Nega_tív szám:" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "_Számok formázása" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegóriák:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Tize_desjegyek:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "euro" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "_Képlet megjelenítése" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Az érték pontosan úgy jelenik meg, ahogy beírtad" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "Cellák formázása" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Nega_tív szám:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "ElÅ‘nézet:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Pénzne_m:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "_Formátum :" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Ezres elválasztó használata" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Nyugat-Európa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Kelet-Európa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Észak-Amerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Dél- és Közép-Amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ãzsia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Ausztrália" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Egyesült Ãllamok/Angol (C)" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "dél-afrikai rand" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "bahraini dínár" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "jordániai dínár" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "kuvaiti dínár" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "líbiai dínár" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "szaud-arábiai rial" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "tunéziai dínár" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "belarusz rubel" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "bolgár leva" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "bangladesi taka" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "cseh korona" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +#, fuzzy +msgid "Luxembourg/German (de_LU)" +msgstr "luxemburgi frank" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "új-zélandi dollár" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Fülöp-szigeteki peso" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "dél-afrikai rand" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "argentin austral" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "chilei peso" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "kolumbiai peso" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica-i colon" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "dominikai peso" + +#: goffice/gtk/go-locale-sel.c:164 +#, fuzzy +msgid "Ecuador (es_EC)" +msgstr "equadori sucre" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Mintavételezés" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "guatemalai quetzal" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "hondurasi lempira" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "mexikói peso" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "El Salvador-i colon" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "uruguay-i peso" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "venezuelai bolivar" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Mintavételezés" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "indonéziai rúpia" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +#, fuzzy +msgid "The Netherlands (nl_NL)" +msgstr "Holland forint" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "Szlovén tolár" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "Szlovén tolár" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "albán lek" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "új jugoszláv dínár" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "pakisztáni rúpia" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "thai baht" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "pakisztáni rúpia" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Jelenlegi _dátum" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menü" + +#: goffice/gtk/go-optionmenu.c:198 +#, fuzzy +msgid "The menu of options" +msgstr "Oaf beállítások" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "BelsÅ‘ HIBA" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*V" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*H" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*K" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Sze" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Cs" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*P" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Szo" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Vasárnap" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "HétfÅ‘" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Kedd" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Szerda" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Csütörtök" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Péntek" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Szombat" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*jan." + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*febr." + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*márc." + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*ápr." + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*máj." + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*jún." + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*júl." + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*aug." + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*szept." + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*okt." + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*nov." + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*dec." + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "január" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "február" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "március" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "április" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "május" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "június" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "július" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "augusztus" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "szeptember" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "október" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "november" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "december" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "IGAZ" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "HAMIS" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# data/browser.xml.h:3 +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Fekete" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Kék" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Ciánkék" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Zöld" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Lila" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Vörös" + +# #-#-#-#-# nautilus.HEAD.hu.po-new.po (nautilus CVS-HEAD) #-#-#-#-# +# data/browser.xml.h:82 +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Fehér" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Sárga" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "afgán afgani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "albán lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "örmény dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "holland antilláki guilder" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "angolai kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "argentin peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "ausztrál dollár" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "arubai guilder" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "azerbajdzsáni manat" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +#, fuzzy +msgid "Barbados, Dollars" +msgstr "barbadosi dollár" + +#: goffice/utils/formats.c:401 +#, fuzzy +msgid "Bangladesh, Taka" +msgstr "bangladesi taka" + +#: goffice/utils/formats.c:402 +#, fuzzy +msgid "Bulgaria, Leva" +msgstr "bolgár leva" + +#: goffice/utils/formats.c:403 +#, fuzzy +msgid "Bahrain, Dinars" +msgstr "bahraini dínár" + +#: goffice/utils/formats.c:404 +#, fuzzy +msgid "Burundi, Francs" +msgstr "burundi frank" + +#: goffice/utils/formats.c:405 +#, fuzzy +msgid "Bermuda, Dollars" +msgstr "bermudai dollár" + +#: goffice/utils/formats.c:406 +#, fuzzy +msgid "Brunei Darussalam, Dollars" +msgstr "brunei dollár" + +#: goffice/utils/formats.c:407 +#, fuzzy +msgid "Bolivia, Bolivianos" +msgstr "bolíviai boliviano" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "brazil cruzeiro" + +#: goffice/utils/formats.c:409 +#, fuzzy +msgid "Bahamas, Dollars" +msgstr "bahamai dollár" + +#: goffice/utils/formats.c:410 +#, fuzzy +msgid "Bhutan, Ngultrum" +msgstr "butáni ngultrum" + +#: goffice/utils/formats.c:411 +#, fuzzy +msgid "Botswana, Pulas" +msgstr "botswanai pula" + +#: goffice/utils/formats.c:412 +#, fuzzy +msgid "Belarus, Rubles" +msgstr "belarusz rubel" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "Belize-i dollár" + +#: goffice/utils/formats.c:414 +#, fuzzy +msgid "Canada, Dollars" +msgstr "kanadai dollár" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +#, fuzzy +msgid "Chile, Pesos" +msgstr "chilei peso" + +#: goffice/utils/formats.c:418 +#, fuzzy +msgid "China, Yuan Renminbi" +msgstr "kínai jüan" + +#: goffice/utils/formats.c:419 +#, fuzzy +msgid "Colombia, Pesos" +msgstr "kolumbiai peso" + +#: goffice/utils/formats.c:420 +#, fuzzy +msgid "Costa Rica, Colones" +msgstr "Costa Rica-i colon" + +#: goffice/utils/formats.c:421 +#, fuzzy +msgid "Cuba, Pesos" +msgstr "kubai peso" + +#: goffice/utils/formats.c:422 +#, fuzzy +msgid "Cape Verde, Escudos" +msgstr "zöldfoki escudo" + +#: goffice/utils/formats.c:423 +#, fuzzy +msgid "Cyprus, Pounds" +msgstr "ciprusi font" + +#: goffice/utils/formats.c:424 +#, fuzzy +msgid "Czech Republic, Koruny" +msgstr "cseh korona" + +#: goffice/utils/formats.c:425 +#, fuzzy +msgid "Djibouti, Francs" +msgstr "dzsibuti frank" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +#, fuzzy +msgid "Dominican Republic, Pesos" +msgstr "dominikai peso" + +#: goffice/utils/formats.c:428 +#, fuzzy +msgid "Algeria, Algeria Dinars" +msgstr "algériai dínár" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +#, fuzzy +msgid "Egypt, Pounds" +msgstr "egyiptomi font" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +#, fuzzy +msgid "Ethiopia, Birr" +msgstr "etiópiai birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "fiji dollár" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland-szigeteki font" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +#, fuzzy +msgid "Guernsey, Pounds" +msgstr "szudáni font" + +#: goffice/utils/formats.c:439 +#, fuzzy +msgid "Ghana, Cedis" +msgstr "ghánai cedi" + +#: goffice/utils/formats.c:440 +#, fuzzy +msgid "Gibraltar, Pounds" +msgstr "gibraltári font" + +#: goffice/utils/formats.c:441 +#, fuzzy +msgid "Gambia, Dalasi" +msgstr "gambiai dalasi" + +#: goffice/utils/formats.c:442 +#, fuzzy +msgid "Guinea, Francs" +msgstr "guineai frank" + +#: goffice/utils/formats.c:443 +#, fuzzy +msgid "Guatemala, Quetzales" +msgstr "guatemalai quetzal" + +#: goffice/utils/formats.c:444 +#, fuzzy +msgid "Guyana, Dollars" +msgstr "guyanai dollár" + +#: goffice/utils/formats.c:445 +#, fuzzy +msgid "Hong Kong, Dollars" +msgstr "hongkongi dollár" + +#: goffice/utils/formats.c:446 +#, fuzzy +msgid "Honduras, Lempiras" +msgstr "hondurasi lempira" + +#: goffice/utils/formats.c:447 +#, fuzzy +msgid "Croatia, Kuna" +msgstr "horvát kuna" + +#: goffice/utils/formats.c:448 +#, fuzzy +msgid "Haiti, Gourdes" +msgstr "haiti gourde" + +#: goffice/utils/formats.c:449 +#, fuzzy +msgid "Hungary, Forint" +msgstr "magyar forint" + +#: goffice/utils/formats.c:450 +#, fuzzy +msgid "Indonesia, Rupiahs" +msgstr "indonéziai rúpia" + +#: goffice/utils/formats.c:451 +#, fuzzy +msgid "Israel, New Shekels" +msgstr "izraeli sékel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +#, fuzzy +msgid "India, Rupees" +msgstr "indiai rúpia" + +#: goffice/utils/formats.c:454 +#, fuzzy +msgid "Iraq, Dinars" +msgstr "iraki dínár" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "iráni rial" + +#: goffice/utils/formats.c:456 +#, fuzzy +msgid "Iceland, Kronur" +msgstr "izlandi korona" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +#, fuzzy +msgid "Jamaica, Dollars" +msgstr "jamaikai dollár" + +#: goffice/utils/formats.c:459 +#, fuzzy +msgid "Jordan, Dinars" +msgstr "jordániai dínár" + +#: goffice/utils/formats.c:460 +#, fuzzy +msgid "Japan, Yen" +msgstr "japán jen" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "kenyai shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +#, fuzzy +msgid "Comoros, Francs" +msgstr "Comore-szigeteki frank" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +#, fuzzy +msgid "Kuwait, Dinars" +msgstr "kuvaiti dínár" + +#: goffice/utils/formats.c:468 +#, fuzzy +msgid "Cayman Islands, Dollars" +msgstr "Kajmán-szigeteki dollár" + +#: goffice/utils/formats.c:469 +#, fuzzy +msgid "Kazakstan, Tenge" +msgstr "pakisztáni rúpia" + +#: goffice/utils/formats.c:470 +#, fuzzy +msgid "Laos, Kips" +msgstr "laoszi kip" + +#: goffice/utils/formats.c:471 +#, fuzzy +msgid "Lebanon, Pounds" +msgstr "libanoni font" + +#: goffice/utils/formats.c:472 +#, fuzzy +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka-i rúpia" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "libériai dolllár" + +#: goffice/utils/formats.c:474 +#, fuzzy +msgid "Lesotho, Maloti" +msgstr "lesothoi loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +#, fuzzy +msgid "Libya, Dinars" +msgstr "líbiai dínár" + +#: goffice/utils/formats.c:478 +#, fuzzy +msgid "Morocco, Dirhams" +msgstr "marokkói dirham" + +#: goffice/utils/formats.c:479 +#, fuzzy +msgid "Moldova, Lei" +msgstr "moldovai lej" + +#: goffice/utils/formats.c:480 +#, fuzzy +msgid "Madagascar, Malagasy Francs" +msgstr "madagaszkári frank" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +#, fuzzy +msgid "Myanmar (Burma), Kyats" +msgstr "myanmari kyat" + +#: goffice/utils/formats.c:483 +#, fuzzy +msgid "Mongolia, Tugriks" +msgstr "mongol tugrik" + +#: goffice/utils/formats.c:484 +#, fuzzy +msgid "Macau, Patacas" +msgstr "makaói pataca" + +#: goffice/utils/formats.c:485 +#, fuzzy +msgid "Mauritania, Ouguiyas" +msgstr "mauritániai ouguiya" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "máltai líra" + +#: goffice/utils/formats.c:487 +#, fuzzy +msgid "Mauritius, Rupees" +msgstr "mauritiusi rúpia" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +#, fuzzy +msgid "Malawi, Kwachas" +msgstr "malawi kwacha" + +#: goffice/utils/formats.c:490 +#, fuzzy +msgid "Mexico, Pesos" +msgstr "mexikói peso" + +#: goffice/utils/formats.c:491 +#, fuzzy +msgid "Malaysia, Ringgits" +msgstr "malajziai ringgit" + +#: goffice/utils/formats.c:492 +#, fuzzy +msgid "Mozambique, Meticais" +msgstr "mozambiki metical" + +#: goffice/utils/formats.c:493 +#, fuzzy +msgid "Namibia, Dollars" +msgstr "libériai dolllár" + +#: goffice/utils/formats.c:494 +#, fuzzy +msgid "Nigeria, Nairas" +msgstr "nigériai naira" + +#: goffice/utils/formats.c:495 +#, fuzzy +msgid "Nicaragua, Gold Cordobas" +msgstr "nicaraguai arany cordoba" + +#: goffice/utils/formats.c:496 +#, fuzzy +msgid "Norway, Krone" +msgstr "norvég korona" + +#: goffice/utils/formats.c:497 +#, fuzzy +msgid "Nepal, Nepal Rupees" +msgstr "nepáli rúpia" + +#: goffice/utils/formats.c:498 +#, fuzzy +msgid "New Zealand, Dollars" +msgstr "új-zélandi dollár" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +#, fuzzy +msgid "Panama, Balboa" +msgstr "panamai balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +#, fuzzy +msgid "Papua New Guinea, Kina" +msgstr "pápua új-guineai kina" + +#: goffice/utils/formats.c:503 +#, fuzzy +msgid "Philippines, Pesos" +msgstr "Fülöp-szigeteki peso" + +#: goffice/utils/formats.c:504 +#, fuzzy +msgid "Pakistan, Rupees" +msgstr "pakisztáni rúpia" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +#, fuzzy +msgid "Paraguay, Guarani" +msgstr "paraguay-i guarani" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "katari rial" + +#: goffice/utils/formats.c:508 +#, fuzzy +msgid "Romania, Lei" +msgstr "román lej" + +#: goffice/utils/formats.c:509 +#, fuzzy +msgid "Russia, Rubles" +msgstr "belarusz rubel" + +#: goffice/utils/formats.c:510 +#, fuzzy +msgid "Rwanda, Rwanda Francs" +msgstr "ruandai frank" + +#: goffice/utils/formats.c:511 +#, fuzzy +msgid "Saudi Arabia, Riyals" +msgstr "szaud-arábiai rial" + +#: goffice/utils/formats.c:512 +#, fuzzy +msgid "Solomon Islands, Dollars" +msgstr "Salamon-szigeteki dollár" + +#: goffice/utils/formats.c:513 +#, fuzzy +msgid "Seychelles, Rupees" +msgstr "Seychelles-i rúpia" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +#, fuzzy +msgid "Singapore, Dollars" +msgstr "szingapúri dollár" + +#: goffice/utils/formats.c:517 +#, fuzzy +msgid "Saint Helena, Pounds" +msgstr "St. Helena-i font" + +#: goffice/utils/formats.c:518 +#, fuzzy +msgid "Slovenia, Tolars" +msgstr "Szlovén tolár" + +#: goffice/utils/formats.c:519 +#, fuzzy +msgid "Slovakia, Koruny" +msgstr "Szlovén tolár" + +#: goffice/utils/formats.c:520 +#, fuzzy +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone-i leone" + +#: goffice/utils/formats.c:521 +#, fuzzy +msgid "Somalia, Shillings" +msgstr "szomáliai shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +#, fuzzy +msgid "Suriname, Guilders" +msgstr "szurinámi guilder" + +#: goffice/utils/formats.c:524 +#, fuzzy +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome és Principe-i dobra" + +#: goffice/utils/formats.c:525 +#, fuzzy +msgid "El Salvador, Colones" +msgstr "El Salvador-i colon" + +#: goffice/utils/formats.c:526 +#, fuzzy +msgid "Syria, Pounds" +msgstr "szíriai font" + +#: goffice/utils/formats.c:527 +#, fuzzy +msgid "Swaziland, Emalangeni" +msgstr "szváziföldi lilangeni" + +#: goffice/utils/formats.c:528 +#, fuzzy +msgid "Thailand, Baht" +msgstr "thai baht" + +#: goffice/utils/formats.c:529 +#, fuzzy +msgid "Tajikistan, Rubles" +msgstr "pakisztáni rúpia" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +#, fuzzy +msgid "Tunisia, Dinars" +msgstr "tunéziai dínár" + +#: goffice/utils/formats.c:532 +#, fuzzy +msgid "Tonga, Pa'anga" +msgstr "tongai pa'anga" + +#: goffice/utils/formats.c:533 +#, fuzzy +msgid "Turkey, Liras" +msgstr "török líra" + +#: goffice/utils/formats.c:534 +#, fuzzy +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad és Tobago-i dollár" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +#, fuzzy +msgid "Taiwan, New Dollars" +msgstr "új tajvani dollár" + +#: goffice/utils/formats.c:537 +#, fuzzy +msgid "Tanzania, Shillings" +msgstr "tanzániai shilling" + +#: goffice/utils/formats.c:538 +#, fuzzy +msgid "Ukraine, Hryvnia" +msgstr "ukrán hrivnya" + +#: goffice/utils/formats.c:539 +#, fuzzy +msgid "Uganda, Shillings" +msgstr "ugangai shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +#, fuzzy +msgid "Uruguay, Pesos" +msgstr "uruguay-i peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +#, fuzzy +msgid "Venezuela, Bolivares" +msgstr "venezuelai bolivar" + +#: goffice/utils/formats.c:544 +#, fuzzy +msgid "Viet Nam, Dong" +msgstr "vietnámi dong" + +#: goffice/utils/formats.c:545 +#, fuzzy +msgid "Vanuatu, Vatu" +msgstr "vanuatui vatu" + +#: goffice/utils/formats.c:546 +#, fuzzy +msgid "Samoa, Tala" +msgstr "szamoai tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +#, fuzzy +msgid "Silver, Ounces" +msgstr "A Megoldó beállításai" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +#, fuzzy +msgid "East Caribbean Dollars" +msgstr "kelet-karib dollár" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +#, fuzzy +msgid "Yemen, Rials" +msgstr "jemeni rial" + +#: goffice/utils/formats.c:557 +#, fuzzy +msgid "Yugoslavia, New Dinars" +msgstr "új jugoszláv dínár" + +#: goffice/utils/formats.c:558 +#, fuzzy +msgid "South Africa, Rand" +msgstr "dél-afrikai rand" + +#: goffice/utils/formats.c:559 +#, fuzzy +msgid "Zambia, Kwacha" +msgstr "zambiai kwacha" + +#: goffice/utils/formats.c:560 +#, fuzzy +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "zimbabwei dollár" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Nincs" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Tömör" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatikus" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Nincs" + +#: goffice/utils/go-marker.c:221 +#, fuzzy +msgid "square" +msgstr "Forrás" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Ãtlós" + +#: goffice/utils/go-marker.c:223 +#, fuzzy +msgid "triangle down" +msgstr "Tartomány" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "Tartomány" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Tartomány" + +#: goffice/utils/go-marker.c:226 +#, fuzzy +msgid "triangle left" +msgstr "Tartomány" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "Félkörök" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "Költség" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Link beillesztése" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*márc." + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Szürke" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Szürke" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Szürke" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12,5% Szürke" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6,25% Szürke" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Vízszintes csíkos" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "FüggÅ‘leges csíkos" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Fordított átlósan csíkos" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Ãtlósan csíkos" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Ãtlós keresztmintás" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Vastag átlós keresztmintás" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Vékony vízszintes csíkos" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Vékony függÅ‘leges csíkos" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Vékony fordított átlósan csíkos" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Vékony átlósan csíkos" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Vékony vízszintes keresztmintás" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Vékony átlós keresztmintás" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Tömör elÅ‘tér" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Kis körök" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Félkörök" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Zsúp" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Nagy körök" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Téglák" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Címkék" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Értékek" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Hiba a sor értelmezésénél" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +# #-#-#-#-# epiphany.HEAD.hu.po-new.po (Epiphany CVS) #-#-#-#-# +# src/trans.h:122 +# #-#-#-#-# galeon.HEAD.hu.po-new.po (Galeon 1.2) #-#-#-#-# +# src/trans.h:122 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Grafikon" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Rendezés" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Rendezés" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "S_zázalék" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Oszlopok beszúrása" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Oszlopok beszúrása" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "_Aláhúzás:" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Aláhúzás:" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Oszlop" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Vonal" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Sorok importálása" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "Vonal" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "S_zázalék" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "S_zázalék" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "S_zázalék" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "S_zázalék" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "S_zázalék" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "Oszlopok törlése" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Nevek definiálása" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Sor- és oszlopa_zonosítókkal" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Rendezés" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Érvénytelen keresÅ‘minta" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Rendezés" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Rendezés" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Rendezés" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Hiba a sor értelmezésénél" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Nem sikerült a fájl létrehozása: %s\n" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Nevek definiálása" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Rendezés" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Semmi" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Elválasztó :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "fok" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Elválasztó :" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Kategória :" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "_Cellarácsokkal" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Felosztás" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Szorzás" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Szorzás" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Ãr" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Tartomány" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Felosztás" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Felosztás" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Rendezés" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Rendezés" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "S_zázalék" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Oszlopok törlése" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Nevek definiálása" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Hiba a sor értelmezésénél" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Egész számok" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Darabszám" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Sorok importálása" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Forrás" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Hiba a sor értelmezésénél" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Tortadiagram" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Tortadiagram" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "%-a a normál méretnek" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Paraméterek" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Forrás" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Rendezés" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Kétszeres" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Kétszeres" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Hiba a sor értelmezésénél" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Hiba a sor értelmezésénél" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Oszlopok törlése" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Vonal" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Pont" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Vonal" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/it.po b/lib/goffice-0.0.4/po/it.po new file mode 100644 index 0000000000..92905d3a05 --- /dev/null +++ b/lib/goffice-0.0.4/po/it.po @@ -0,0 +1,4409 @@ +# Italian translation for GNUMERIC +# Copyright (C) 1999-2004 Free Software Foundation, Inc. +# Leandro Noferini 2002, 2203 +# Luca Ferretti , 2003, 2004 +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.3.9x\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-12-14 22:30+0100\n" +"Last-Translator: Luca Ferretti \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Il salvataggio sopra vecchi file di questo tipo è disabilitato per sicurezza." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"È possibile disattivare questa caratteristica di sicurezza editando il file " +"plugin.xml appropriato." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Oggettivo" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Il file contiene informazione plugin con id (%s) non valido, era atteso %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Impossibile leggere informazione plugin dal file." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nome sconosciuto" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Tipo di caricatore «%s» non supportato." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Errore durante la preparazione del caricatore «%s»." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Errore durante la lettura informazione servizio #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Impossibile leggere il file informazioni del plugin (%s)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Il file «%s» non è un file di informazioni plugin valido." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Errore durante la lettura dei servizi per il plugin con id=«%s»." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Carattere non valido (%s) nell'id del plugin" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nome di plugin sconosciuto." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Nessun caricatore definito o id del caricatore non valido per il plugin con " +"id=«%s»." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Il plugin non ha id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Errore nell'inizializzare il caricatore di plugin («%s»)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Rilevate dipendenze cicliche del plugin." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Impossibile attivare il plugin con id=«%s»." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Impossibile trovare il plugin con id=«%s»." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Errore durante l'attivazione delle dipendenze del plugin." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Errore durante l'attivazione del servizio di plugin #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Errore durante la disattivazione del servizio di plugin #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Impossibile caricare il caricatore di plugin." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Impossibile caricare il plugin con id=«%s»." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Errore durante il caricamento delle dipendenze del plugin." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Si è verificato un errore durante la lettura delle informazioni del plugin " +"dal file «%s»." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Impossibile attivare il plugin «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Impossibile disattivare il plugin «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Errore durante la lettura delle informazioni sui plugin disponibili." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Errore durante la disattivazione dei plugin che non sono più su disco." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"I seguenti plugin non sono più su disco, ma sono ancora attivi:\n" +"%s.\n" +"Si dovrebbe riavviare Gnumeric adesso." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Errore dutante l'applicazione dei plugin." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Errore durante l'inizializzazione del sistema di plugin" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Il caricatore non alcun metodo \"set_attribute\".\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Il caricatore non ha alcun metodo \"load_base\".\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Il servizio «%s» non è supportato dal caricatore." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nome del file modulo non fornito." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Impossibile aprire il file modulo «%s»." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Formato non valido nel file modulo «%s»." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Il file non contiene il simbolo «plugin_file_struct»." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Il file ha un magic number errato." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "La versione del plugin «%s» differisce dall'applicazione «%s»." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Il caricamento dinamico dei moduli non è supportato su questo sistema." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Impossibile chiudere il file del modulo «%s»." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Il file non contiene la funzione «%s»." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Il modulo non contien la funzione «%s»." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Errore durante il caricamento del servizio di plugin." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" +"Inizializzazione di funzione all'interno del plugin ha ritornato un errore." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Pulizia di funzione all'interno del plugin ha ritornato un errore." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Generale" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Il file opener non ha descrizione" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "File opener - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Errore durante la lettura del file." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Il file saver non ha descrizione" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "File saver - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Errore durante il salvataggio del file." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Caricatore plugin" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Caricatore GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Nessun attributo «type» nell'elemento «service»." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Tipo di servizio sconosciuto: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Errore nella lettura delle informazioni del servizio." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"È necessario caricare il servizio prima di attivarlo (è impostato " +"PLUGIN_ALWAYS_LOAD), ma il caricamento è fallito." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "pagine" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "R_ientro:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "C_erca" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Allineamento" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +msgid "Bullet Character" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Dimensione problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discreta" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Mappatura discreta" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineare" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Mappatura lineare" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Logaritmico" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Mappatura logaritmica" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Dettagli" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatico" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Categorie tra le tacc_he" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categorie tra le _etichette" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Estremi" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "_Min" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "Ma_x" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Tacche p_rincipali" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Tacche _secondarie" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Incrociato" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formato" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etichetta" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "GrigliaSecondaria" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "GrigliaPrincipale" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Tacche principali" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mappatura" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Tacche secondarie" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Posizione" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "All'i_nterno" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "All'e_sterno" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "In a_lto" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "All'intern_o" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "Assi in_vertiti" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "In _basso" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "All'_esterno" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "Mo_strare etichette" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tipo:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titolo" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Griglia" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Asse x" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Asse y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Asse z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Assi circolari" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Assi radiali" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Tracciato" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "A" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Altezza" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "L" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Larghezza" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Nessuna barra d'errore mostrata" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Mostrata barra d'errori positivi" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Mostrata barra d'errori negativi" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Mostrata barra d'errori piena" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Categoria di errore" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stile" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Valori" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Colo_re:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "_Mostra:" + +# dovrebbe essere categoria d'errore +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Nessuna\n" +"Assoluta\n" +"Relativa\n" +"Percentuale" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Larghezza della linea:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "Lar_ghezza:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Grafico" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diagramma" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nome" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Passo 1 di 2 - Selezione tipo diagramma" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Passo 2 di 2 - Personalizzazione diagramma" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Personalizzazione diagramma" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "I_nserisci" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Tipo di _tracciato" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Grafico GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Porta in _alto" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Porta _sopra a tutto" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Spingi in _basso" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Spingi in _fondo a tutto" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Ordina" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definizione" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Motivo" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stile" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Campione" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Descrizione" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "Te_sto:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dati" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Serie" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Motore tracciati" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Tipo tracciato" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Tema diagramma" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Indice:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Impostazioni" + +# Mmmmhhh questo termine è usato in due luoghi,per i grafici, dove è corretto +# e per lo strumento statistico "ranghi e percentili", nel creare l'output. +# +# Excello traduce l'ananogo termine con "Dato". +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punto" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Tipo di carattere" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stile" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 colori\n" +"Luminosità" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Riempimento" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linea" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Segnaposto" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Contorno" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Co_lore:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Nessuno\n" +"Modello\n" +"Gradiente\n" +"Immagine" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Colore co_rnice:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Figura:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Dimen_sione:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "S_tile:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Tipo:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "S_fondo:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "Dire_zione:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "Fi_ne:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Colore _riempimento:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "A_datta:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "Pri_mo piano:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Motivo:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Seleziona..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "D_imensione:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "Ini_zio:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "c_hiaro" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "sc_uro" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "punti" + +# non è la traduzione letterale, ma è quello che succede +# scegliendo una immagine come sfondo di uno dei vari elementi +# del grafico +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"stirata\n" +"ripetuta" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Predefinito" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabo" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltico" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Centro europeo" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Cinese" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cirillico" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Greco" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Ebraico" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indiano" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Giapponese" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Coreano" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turco" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Occidentale" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Altro" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabo (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabo (ISO-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabo (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabo (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabo (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabo (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabo (Windows-12-56)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armeno (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltico (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltico (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltico (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celtico (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Centro europeo (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Centro europeo (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Centro europeo (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Centro europeo (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Cinese semplificato (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Cinese semplificato (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Cinese semplificato (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Cinese semplificato (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Cinese semplificato (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Cinese tradizionale (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Cinese tradizionale (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Cinese tradizionale (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croato (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cirillico (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirillico (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cirillico (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirillico (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cirillico (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirillico (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russo (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ucraino (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ucraino (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Inglese (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgiano (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Greco (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Greco (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Greco (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Ebraico (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Ebraico (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Ebraico (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Ebreo (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Ebreo (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Indi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandese (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Giapponese (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Giapponese (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Giapponese (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Coreano (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Coreano (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Coreano (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordico (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumeno (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumeno (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Sud europeo (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tailandese (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turco (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turco (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turco (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Definito dall'utente" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamita (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamita (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamita (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamita (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Ebraico visuale (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Occidentale (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Occidentale (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Occidentale (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Occidentale (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Occidentale (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Localizzazione: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Direzione di conversione" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Questo valore determina quale test iconv eseguire." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "nero" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "marrone chiaro" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "marrone dorato" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "verde scuro n.2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "navy" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "blu scuro" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "viola n.2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "grigio molto scuro" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "rosso scuro" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "rosso arancio" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "oro" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "verde scuro" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "blu spento" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blu" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "viola spento" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "grigio scuro" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rosso" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "arancione" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "limone" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "verde spento" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "verde spento n.2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "blu cielo n.2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "viola" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grigio" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "arancione vivace" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "giallo" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "verde" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "ciano" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "blue spento" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "rosso porpora" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "grigio chiaro" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "arancione chiaro" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "giallo chiaro" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "verde chiaro" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "ciano chiaro" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "blu chiaro" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "viola chiaro" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "bianco" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "blu porpora" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "viola scuro" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "blu cielo" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "personalizzato" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Colore personalizzato..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Tipo di ombra" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientamento" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Larghezza preferita" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Altezza preferita" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Impossibile aprire il file «%s»" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Tutti i file" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Immagini" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Selezionare un'immagine" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Salva come" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Tipo di file:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"L'estensione fornita per il file non corrisponde col tipo di file scelto. " +"Usare comunque questo nome?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"è un nome di directory" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Permessi non sufficienti per salvare in\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Un file di nome %s esiste già in %s?\n" +"\n" +"Sovrascriverlo?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normale" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Grassetto" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Grassetto corsivo" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Corsivo" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stile del carattere:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Tipo di carattere:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Anteprima" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Dimensione:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Numero" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Contabilità" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Data" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Ora" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentuale" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Frazione" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Scientifico" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Testo" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Speciale" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personalizzato" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Formato numeri negativi" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formato numerico" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegorie:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Cifre deci_mali:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Mostra importi negli stili tradizionali di contabilità." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Mostra ed inserisce valori come stringhe senza alcuna interpretazione." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Mostra importi monetari." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Mostra date ed opzionalmente ore del giorno." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Mostra valori numerici con un numero fissato di cifre decimali." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Mostra ore del giorno." + +#: goffice/gtk/go-format-sel.glade.h:9 +#, fuzzy +msgid "Display values as closest fractional approximation." +msgstr "Mostra valori come approssimazione frazionaria più vicina." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Mostra valori come percentuali." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Mostra valori scalando in potenze di dieci." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Co_dice formato:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Formato numeri negativi:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Anteprima:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_imbolo:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Seleziona automaticamente il formato appropriato." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Specifica direttamente un formato in stile XL" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formato:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Usa il separatore per le migliaia" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europa occidentale" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europa orientale" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Nord America" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Sud e Centro America" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Africa" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Stati Uniti/Inglese (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sud Africa/Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopia/Aramaico (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Emirati Arabi Uniti (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algeria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egitto (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/Arabo (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Giordania (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libano (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libia (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marocco (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Arabia Saudita (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Siria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaijan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Bielorussia (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francia/Bretone (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia ed Erzegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spagna/Catalano (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Repubblica Ceca (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Gran Bretagna/Gallese (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danimarca (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgio/Tedesco (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Svizzera/Tedesco (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Germania (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Lussemburgo/Tedesco (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grecia (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canada/Inglese (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Gran Bretagna (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Inglese (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlanda (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/Inglese (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nuova Zelanda (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filippine (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/Inglese (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Stati Uniti/Inglese (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Sud Africa/Inglese (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Cile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Repubblica Dominicana (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spagna (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Messico (es_HN)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Perù (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Porto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Stati Uniti/Spagnolo (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonia (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spagna/Basco (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlandia/Finlandese (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Isole Faroe (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgio/Francese (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canada/Francese (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Svizzera/Francese (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francia (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlanda/Gaelico (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Gran Bretagna/Gaelico scozzese (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spagna/Galiziano (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Gran Bretagna/Gaelico Manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croazia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ungheria (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_IS)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islanda (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Svizzera/Italiano (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italia (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israele/Ebreo (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Giappone (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Groenlandia (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Gran Bretagna/Cornico (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lituania (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Lettonia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nuova Zelanda/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malesia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgio/Fiammingo (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Paesi Bassi (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norvegia/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norvegia/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francia/Occitano (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polonia (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasile (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portogallo (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russia (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ucraina/Russo (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norvegia/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovacchia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlandia/Svedese (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Svezia (sw_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tagikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailandia (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopia/Tigrino (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filippine/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turchia (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russia/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ucraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgio/Vallone (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Stati Uniti/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Cina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Cinese (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/Cinese (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Localizzazione attuale: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menù" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Il menù delle opzioni" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Dimensione indicatore" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Dimensione dell'indicatore a discesa" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Spaziatura indicatore" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Spaziatura intorno all'indicatore" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dom" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Lun" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Mar" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Mer" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Gio" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Ven" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sab" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Domenica" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Lunedì" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Martedì" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Mercoledì" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Giovedì" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Venerdì" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sabato" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Gen" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mag" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Giu" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Lug" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ago" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Set" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Ott" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dic" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Gennaio" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Febbraio" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Marzo" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Aprile" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mag" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Giugno" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Luglio" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Agosto" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Settembre" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Ottobre" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Novembre" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Dicembre" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "VERO" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSO" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Nero" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Blu" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Ciano" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Verde" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rosso" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Bianco" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Giallo" + +# UE +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Emirati arabi uniti, dirham degli EAU" + +# UE +# +# Le traduzioni italiane di stati e monete che presentano 'UE' +# nel commento sono state prese da +# http://europa.eu.int/comm/translation/currencies/ittable1.htm +# +# Un grazie ad Andrea Celli per il prezioso suggerimento +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, afghani" + +# UE +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, lek" + +# UE +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, dram" + +# UE +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Antille olandesi, fiorino delle Antille olandesi" + +# UE +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kuanza" + +# UE +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, peso argentino" + +# UE +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, dollaro australiano" + +# UE +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, fiorino arubano" + +# UE +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaigian, manat azero" + +# UE +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia-Erzegovina, marco bosniaco convertibile" + +# UE +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dollaro delle Barbados" + +# UE +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, taka" + +# UE +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, ev" + +# UE +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrein, dinaro del Bahrein" + +# UE +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, franco burundese" + +# UE +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dollaro delle Bermuda" + +# UE +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, dollaro del Brunei" + +# UE +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, boliviano" + +# UE +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasile, real brasiliano" + +# UE +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, dollaro delle Bahamas" + +# UE +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrum" + +# UE +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pula" + +# UE +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Bielorussia, rublo bielorusso" + +# UE +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dollaro belizeano" + +# UE +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, dollaro canadere" + +# UE +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo (ex Zaire), franco congolese" + +# UE +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Svizzera, franco svizzero" + +# UE +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Cile, peso cileno" + +# UE +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Cina, yuan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, peso colombiano" + +# UE +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, colón costaricano" + +# UE +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, peso cubano" + +# UE +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Capo Verde, escudo del Capo Verde" + +# UE +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cipro, sterlina cipriota" + +# UE +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Repubblica ceca, corona ceca" + +# UE +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Gibuti, franco gibutiano" + +# UE +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danimarca, corona danese" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Repubblica Dominicana, peso dominicano" + +# UE +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algeria, dinaro algerino" + +# UE +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, corona estone" + +# UE +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egitto, sterlina egiziana" + +# UE +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nafka" + +# UE +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopia, birr etiopico" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Stati dell'area euro, euro" + +# UE +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Figi, dollaro figiano" + +# UE +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Isole Falkland (Malvine), sterlina delle Falkland" + +# La UE dice che la moneta è "lira sterlina" .... ??? +#: goffice/utils/formats.c:436 +#, fuzzy +msgid "United Kingdom, Pounds" +msgstr "Regno Unito, sterlina" + +# UE +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, lari" + +# Anche questo appare intradotto nel mio vocabolario... +#: goffice/utils/formats.c:438 +#, fuzzy +msgid "Guernsey, Pounds" +msgstr "Sterlina sudanese" + +# UE +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedi" + +# UE +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibilterra, sterlina di Gibilterra" + +# UE +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasi" + +# UE +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, franco guineano" + +# UE +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzal" + +# UE +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, dollaro guianese" + +# UE +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dollaro di Hong Kong" + +# UE +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempira" + +# UE +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croazia, kuna" + +# UE +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gourde" + +# UE +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Ungheria, forint" + +# UE +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, rupia indonesiana" + +# UE +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israele, nuovo sheqel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isola di Man, sterlina" + +# UE +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, rupia indiana" + +# UE +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq, dinaro iracheno" + +# UE +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rial iraniano" + +# UE +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islansa, corona islandese" + +# Il mio dizionario riporta +# Jersey: Jersey (isola della Manica) +# ma mi sa che non è quella... +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +# UE +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Giamaica, dollaro giamaicano" + +# UE +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Giordania, dinaro giordano" + +# UE +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Giappone, yen" + +# UE +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, scellino keniota" + +# UE +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirghizistan, som" + +# UE +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambogia, riel" + +# UE +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comore, franco comoriano" + +# UE +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Corea del Nord, won nordcoreano" + +# UE +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Corea del Sud, won sudcoreano" + +# UE +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dinaro kuwaitiano" + +# UE +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Isole Cayman, dollaro delle Isole Cayman" + +# UE +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakistan, tenge" + +# UE +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kip" + +# UE +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libano, sterlina libanese" + +# UE +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, rupia singalese" + +# UE +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, dollaro liberiano" + +# UE +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, loti" + +# UE +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lituania, lita" + +# UE +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Lettonia, lat" + +# UE +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libia, dinaro libico" + +# UE +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marocco, dirham marocchino" + +# UE +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavia, leu moldavo" + +# UE +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar, franco malgascio" + +# UE +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonia, dinaro macedone" + +# UE +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Birmania), kyat" + +# UE +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, tughrik" + +# UE +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macao, pataca" + +# UE +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania, ouguiya" + +# UE +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lira maltese" + +# UE +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, rupia mauriziana" + +# UE +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldive (Isole Maldive), rufiya" + +# UE +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwacha malawiano" + +# UE +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Messico, peso messicano" + +# UE +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malesia, ringgit" + +# UE +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambico, metical" + +# UE +# +# in realtà ha anche il rand sudafricano come valuta valida +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dollaro namibiano" + +# UE +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, naira" + +# UE +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, córdoba" + +# UE +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norvegia, corona norvegese" + +# UE +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rupia nepalese" + +# UE +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nuova Zelanda, dollaro neozelandese" + +# UE +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rial omani" + +# UE +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboa" + +# UE +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Perù, nuovo sol" + +# UE +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nuova Guinea, kina" + +# UE +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filippine, peso filippino" + +# UE +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupia pakistana" + +# UE +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polonia, zloty" + +# UE +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, guaranì" + +# UE +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, rial qatariano" + +# UE +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, leu rumeno" + +# UE +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russia, rublo" + +# UE +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, franco ruandese" + +# UE +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Arabia Saudita, rial saudita" + +# UE +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Isole Salomone, dollaro delle Salomone" + +# UE +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seicelle, rupia seicellese" + +# UE +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinaro sudanese" + +# UE +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Svezia, corona svedere" + +# UE +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, dollaro di singapore" + +# UE +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Sant'Elena, sterlina di Sant'Elena" + +# UE +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia, tallero sloveno" + +# UE +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovacchia, corona slovacca" + +# UE +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leone" + +# UE +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, scellino somalo" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +# UE +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname, fiorino surinamese" + +# UE +# +# Cambiare la í in ì +#: goffice/utils/formats.c:524 +#, fuzzy +msgid "Sao Tome and Principe, Dobras" +msgstr "São Tomé e Prìncipe, dobra" + +# UE +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, colon salvadoregno" + +# UE +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Siria, sterlina siriana" + +# UE +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, lilageni" + +# UE +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailandia, bath" + +# UE +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tagikistan, somoni" + +# UE +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manat turkmeno" + +# UE +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia, dinaro tunisino" + +# UE +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, paanga" + +# UE +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turchia, lira turca" + +# UE +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad e Tobago, dollaro di Trinidad e Tobago" + +# UE +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, dollaro australiano" + +# UE +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, nuovo dollaro" + +# UE +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, scellino tanzaniano" + +# UE +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ucraina, grivna" + +# UE +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, scellino ugandese" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "USA, dollaro" + +# UE +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, peso uruguaiano" + +# UE +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, sum uzbeko" + +# UE +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, bolivar" + +# UE +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, dong" + +# UE +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanatu, vatu" + +# UE +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Argento, Once" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Oro, Once" + +# Sarebbe usato da Anguilla, Antigua e Barbuda, Dominica, Grenada, +# Monserrat, Saint Christopher e Nevis, Saint Lucia, Saint Vincent e Grenadine. +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Dollaro dei Caraibi orientali" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladio, once" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platino, once" + +# UE +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, rial yemenita" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslavia, nuovo dinaro" + +# UE +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Sudafrica, rand" + +# UE +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, kwacha zambiano" + +# UE +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dollaro zimbabwano" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Nessuno" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Pieno" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Tratto" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Punto" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Tratto punto" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Tratto punto punto" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatico (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "nessuno" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "quadrato" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamante" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triangolo giu" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triangolo su" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triangolo destra" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triangolo sinistra" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "cerchio" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "croce" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisco" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "barra" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "mezza barra" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "farfalla" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "clessidra" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "Grigio 75%" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "Grigio 50%" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "Grigio 25%" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "Grigio 12,5%" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "Grigio 6,25%" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Bande orizzontali" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Bande verticali" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Bande diagonali inverse" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Bande diagonali" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Croci diagonali" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Croci diagonali spesse" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Bande orizzontali sottili" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Bande verticali sottili" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Bande diagonali inverse sottili" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Bande diagonali sottili" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Croci orizzontali sottili" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Croci diagonali sottili" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Primo piano pieno" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Cerchi piccoli" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semicerchi" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Intrecciato" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Cerchi grandi" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Mattoncini" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etichette" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valori" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Barre d'errore" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "TracciatoBarraColon" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" +"Quantità di sovrapposizione di barre/colonne come percentuale della larghezza" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "So_vrapposizione:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" +"Separazione tra i gruppi come percentuale della larghezza di barre/colonne" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Gap:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "TracciatoLinea" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "TracciatoArea" + +# Come gnumeric descrive i tracciati. +# +# Ogni file .xml di nome plot-types.xml definisce i tipi base/standard di +# tracciati che si possono avere con gnumeric. In ognino di questi file vi è +# definita: +# * la o le famiglie di grafico fornito (Line, Area, Bar, Column +# * i vari tipi di grafico identificati da +# - Nome "Unmarked Lines" "Adjacent Columns" +# - descrizioe "Line plot." "Adjacent vertical columns grouped by major and minor categories." +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Barre 3D adiacenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Colonne 3D adiacenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Barre 3D percentuale" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Colonne 3D percentuale" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Barre 3D in pila" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Colonne 3D in pila" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Barre adiacenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Colonne adiacenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Barre 3D orizzontali adiacenti raggruppate per categorie principali e " +"secondarie." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Barre orizzontali adiacenti raggruppate per categorie principali e " +"secondarie." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Colonne 3D verticali adiacenti raggruppate per categorie principali e " +"secondarie." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Colonne verticali adiacenti raggruppate per categorie principali e " +"secondarie." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Area" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Tracciato area." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Aree" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Barra" + +# Excello lo definisce 'Istogramma' +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Colonna" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linea" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Tracciato linea." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linee" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Categorie secondarie in pila come percentuali del totale delle secondarie, " +"su bare 3D orizzontali, raggruppate per categoria principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Categorie secondarie in pila come percentuale del totale delle secondarie, " +"su barre verticali, raggruppate per categora principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Categorie secondarie in pila come percentuali del totale delle secondarie, " +"su barre orizzontali, raggrupate per categoria principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Categorie secondarie in pila come percentuali del totale delle secondarie, " +"su colonne verticali, raggruppate per categoria principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Categorie secondarie in pila su barre 3D orizzontali, raggruppate per " +"categoria principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Categorie secondarie in pila su barre orizzontali raggruppate per categoria " +"principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Categoria secondaria in pila su colonne 3D verticali, raggruppate per " +"categoria principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Categorie secondarie in pila su colonne verticali raggruppate per categoria " +"principale." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Aree percentuali" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Barre percentuali" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Colonne percentuali" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Linee percentuali" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Tracciato area percentuale." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Tracciato linea percentuale." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Aree in pila" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Barre in pila" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Colonne in pila" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Linee in pila" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Tracciato area in pila." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Tracciato linea in pila." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Linee senza indicatori" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Linee percentuali senza indicatori" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Linee in pila senza indicatori" + +# Tutto è un plugin. +# +# Ogni plugin ha un +# * nome "Charting : Bar/Col/Line/Area" +# * descrizione "Line, Area, Bar and Column plots" +# fornendo dei service di tipo engine +# - "Line plotting engine" +# - "Area plotting engine" +# - "Bar/Col plotting engine" +# ed un service di tipo type (definiti nel file plot-types.xml +# - "Default 1.5d plot type" +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Motore tracciati area" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Motore tracciati barra/colonna" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Grafici a barra/colonna/linea/area" + +# che cacchio vuol dire 1.5d ?? 1/2 di 3D ?? +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Tipi predefiniti di tracciati 1.5d" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Motore tracciati linea" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Tracciati di tipo linea, area, barra e colonna" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Tracciato" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Modello di ricerca non valido." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Tracciato" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Tracciato" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Tracciato" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Motore tracciati barra/colonna" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Grafici: rete" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Tipi di tracciati di superfice predefiniti" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "TracciatoTorta" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "TracciatoAnello" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Gradi in senso antiorario a partire da ore 3" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Le fe_tte cominciano a:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"L'ammontare predefinito di quanto ciascuana fetta è separata dal cento " +"misurato come una percentuale del raggio della torta" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Separazione delle fette:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "Colori _diversi per fetta" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "gradi" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"Di quanto questa fetta è separata dal centro, misurato come percentuale del " +"raggio della torta" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separazione:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "_Dimensione centro:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Torta 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Torta 3D a fette" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +#, fuzzy +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Totali principali come percentuale di ciascun cuneo suddiviso in torte " +"secondarie." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +#, fuzzy +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Totali principali come percentuale di ciascun cuneo suddiviso in barre in " +"pila." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Multi-torta" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multi-torta-barre" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Percentuale di ciascun contributore mostrata in anello per ciascuna serie " +"con le fette dell'ultimo anello staccate." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" +"Percentuale di ciascun contributore mostrata in anello per ciascuna serie." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentuale di ogni contributore in una torta tridimensionale." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" +"Percentuale di ciascun contributore con cunei tridimensionali staccati." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentuale di ciascun contributore con fette staccate." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentuale di ogni contributore." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Torta" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Anello" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Torta a fette" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Anello a fette" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Grafici: torta/anello" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Tipi di torta predefiniti" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Tracciati a torta ed anello" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Motore tracciati a torta" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Motore tracciati ad anello" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "TracciatoRete" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "TracciatoReteArea" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Area rete" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Tracciato tipo radar ad area." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Rete a punti" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Rete" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Tracciato tipo rete con punti." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Tracciato tipo rete." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Grafici: rete" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Tipi predefiniti grafici rete" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Motore traciati rete area" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Motore tracciati rete" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Tracciati rete/radiali" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "Numero di _fette:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "ContornoTracciato" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contorno" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Tracciato contorno." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Superfice" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Motore tracciati contorno" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Grafici superficie" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Grafici superficie" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% della dimensione predefinita" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_metro" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Mostra valori _negativi" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Super_fice" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bolle scalate al" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Dimensione rappresentatata per;" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Varia colori per bolla" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "TracciatoXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "TracciatoBolla" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bolla" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Barre errore Y" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "Barre errore X" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Interpolazione lineare tra punti multi-dimensionali, con segnaposto su " +"ciascun punto." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpolazione lineare tra punti multi-dimensionali, con segnaposto su " +"ciascun punto." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Interpolazione lineare tra punti multi dimensionali." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Segnaposto su ciascun punto." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Punti multi-dimensionali con un cerchi a ciascun punto." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Tracciato X, Y e dimensione bolla." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Linee XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Punti XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Linee XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "Tracciati 2D" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "Motore tracciati scatter 2D" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Motore tracciati bolle" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Grafici: XY/Scatter/Bolle" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Tipi predefiniti tracciati scatter" diff --git a/lib/goffice-0.0.4/po/ja.po b/lib/goffice-0.0.4/po/ja.po new file mode 100644 index 0000000000..75a7bce754 --- /dev/null +++ b/lib/goffice-0.0.4/po/ja.po @@ -0,0 +1,4206 @@ +# gnumeric ja.po. +# Copyright (C) 1998-2004 Free Software Foundation, Inc. +# Mitsuru Oka <95i44@is.kochi-u.ac.jp>, 1998. +# Mitsuru Oka , 1999-2000. +# Mitsuo Hamada , 2000. +# Yukihiro Nakai , 2000-2001,2003-2004. +# Takeshi Aihana , 2000-2002. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-10-28 18:30+0900\n" +"Last-Translator: Yukihiro Nakai \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "ã“ã®å½¢å¼ã®å¤ã„ファイルをä¿å­˜ã—ã¦ã—ã¾ã†ã¨ã€å®‰å…¨æ€§ãŒæãªã‚れã¾ã™ã€‚" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"é©åˆ‡ãªãƒ—ラグインファイル (plugin.xml) を修正ã™ã‚‹ã¨ã€ã“ã®å®‰å…¨æ©Ÿèƒ½ã‚’ OFF ã«ã™ã‚‹" +"ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "オブジェクティブ" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"䏿­£ãª ID (%s) ã®ãƒ—ラグイン情報ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚%sãŒæœŸå¾…ã•れã¦ã„ã¾ã™ã€‚" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "ファイルã‹ã‚‰ãƒ—ラグイン情報ãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "åå‰ãŒä¸æ˜Žã§ã™" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ローダー型 \"%s\" ã§ã™ã€‚" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "ローダー \"%s\" ã®æº–備中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "サービス #%d 情報ã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "プラグイン情報ファイル (\"%s\") ãŒèª­ã‚ã¾ã›ã‚“。" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "ファイル \"%s\" ã¯æ­£ã—ã„プラグイン情報ファイルã§ã¯ã‚りã¾ã›ã‚“。" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "プラグイン (ID=\"%s\") ã®ã‚µãƒ¼ãƒ“スã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "プラグインåãŒä¸æ˜Žã§ã™ã€‚" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"IDãŒ\"%s\"ã®ãƒ—ラグインã®ãƒ­ãƒ¼ãƒ€ãŒå®šç¾©ã•れã¦ã„ãªã„ã‹ã€IDãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "プラグイン㫠ID ãŒã‚りã¾ã›ã‚“。" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "プラグインローダー (\"%s\") ã®åˆæœŸåŒ–中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "プラグインã®å·¡å›žä¾å­˜ã‚’検出ã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "IDãŒ\"%s\"ã®ãƒ—ラグインを有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "IDãŒ\"%s\"ã®ãƒ—ラグインãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "ä¾å­˜ã™ã‚‹ãƒ—ラグインを有効ã«ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "プラグイン・サービス #%d ã®æœ‰åй䏭ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "プラグイン・サービス #%d ã®ç„¡åй䏭ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "プラグイン・ローダーãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“。" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "IDãŒ\"%s\"ã®ãƒ—ラグインをロードã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "プラグインä¾å­˜é–¢ä¿‚ã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "ファイル \"%s\" ã‹ã‚‰ãƒ—ラグイン情報をå–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "プラグイン \"%s\" (ID: %s) を有効ã«ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "プラグイン \"%s\" (ID: %s) を無効ã«ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "有効ãªãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æƒ…å ±ã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "ディスク上ã«ãªã„プラグインã®ç„¡åŠ¹åŒ–ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"次ã®ãƒ—ラグインã¯ãƒ‡ã‚£ã‚¹ã‚¯ä¸Šã«ã‚りã¾ã›ã‚“ãŒã¾ã æœ‰åйã«ãªã£ã¦ã„ã¾ã™:\n" +"%s\n" +"Gnumericã‚’ã™ãã«å†èµ·å‹•ã™ã‚‹ã¹ãã§ã™ã€‚" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "プラグインシステムã®åˆæœŸåŒ–中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "サービス '%s' ã¯ã€ãƒ­ãƒ¼ãƒ€ãƒ¼ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "モジュールåãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "モジュールファイル \"%s\" ãŒé–‹ã‘ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "モジュールファイル \"%s\" ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒæ­£ã—ãã‚りã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "ファイルã«ã¯ (\"plugin_file_struct\" シンボル) ãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "ãŠã‹ã—ãªãƒžã‚¸ãƒƒã‚¯ç•ªå·ã‚’ã‚‚ã£ãŸãƒ•ァイルã§ã™ã€‚" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" +"プラグイン・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ \"%s\" ã¯ã‚¢ãƒ—リケーション \"%s\" ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" +"ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ãƒ»ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®èª­ã¿è¾¼ã¿ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "モジュールファイル \"%s\" ã‚’é–‰ã˜ã‚Œã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "ファイルã«ã¯é–¢æ•° \"%s\" ãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "モジュールã«ã¯é–¢æ•° \"%s\" ãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "プラグイン・サービスã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "プラグイン内ã®é–¢æ•°ã®åˆæœŸåŒ–ã§ã‚¨ãƒ©ãƒ¼ãŒè¿”ã•れã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "プラグイン無ã„ã®é–¢æ•°ã®ã‚¯ãƒªãƒ³ãƒŠãƒƒãƒ—ã§ã‚¨ãƒ©ãƒ¼ãŒè¿”ã•れã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "標準" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "ファイルオープナーã«ã¯èª¬æ˜ŽãŒã‚りã¾ã›ã‚“" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "ファイルオープナー - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "ファイルã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "ファイルセーãƒãƒ¼ã«ã¯èª¬æ˜ŽãŒã‚りã¾ã›ã‚“" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "ファイルセーãƒãƒ¼ - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "ファイルセーãƒãƒ¼ã« ID ãŒã‚りã¾ã›ã‚“。" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "プラグイン・ローダー" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObjectローダー" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "\"type\"属性ãŒ\"service\"è¦ç´ ã‚りã¾ã›ã‚“。" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "䏿˜Žãªã‚µãƒ¼ãƒ“スタイプã§ã™: %s" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "サービス情報ã®èª­ã¿è¾¼ã¿ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"サービスを有効ã«ã™ã‚‹å‰ã«ãƒ­ãƒ¼ãƒ‰ã—ãªã‘れã°ãªã‚‰ãªã„(PLUGIN_ALWAYS_LOADãŒã‚»ãƒƒãƒˆã•" +"れã¦ã„ã‚‹)ã®ã§ã™ãŒã€ãƒ­ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "å…¬å¼" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "インデント(_I):" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "検索対象(_S)" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "スペース" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "é…ç½®" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "引用符文字(_C):" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "å•題ã®ã‚µã‚¤ã‚º" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "離散" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "離散写åƒ" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "ç·šå½¢" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "線型写åƒ" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "対数" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "対数写åƒ" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "詳細" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "自動" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "カテゴリ(_C):" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "背景" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "最å°(_I)" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "最大(_A)" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "é–‰ã˜ã‚‹(_C)" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "書å¼" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "ラベル" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "マイナーグリッド" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "メジャーグリッド" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "パターン" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "行" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "パターン" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "ä½ç½®" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "内å´(_N)" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "外å´(_U)" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "高(_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "内å´(_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "挿入(_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "低(_L)" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "外å´(_O)" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "ラベルã®è¡¨ç¤º(_S)" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "åž‹(_T):" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "凡例" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "題å" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "グリッド" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X軸" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y軸" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z軸" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "プロット" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "高ã•" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "å¹…" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "エラーカテゴリ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "スタイル" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "値" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "色(_R):" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "表示(_P):" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"ãªã—\n" +"絶対\n" +"相対\n" +"パーセント" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "ç·šã®å¹…(_L):" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "å¹…(_W):" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "グラフ" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "図表" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "åå‰" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "ステップ 1/2: 図表タイプã®é¸æŠž" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "ステップ 2/2: 図表ã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "図表ã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "挿入(_I)" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "プロットタイプ(_P)" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOMEオフィス グラフ" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "1ã¤å‰é¢ã«é€ã‚‹(_O)" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "最å‰é¢ã«é€ã‚‹(_F)" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "1ã¤èƒŒé¢ã«é€ã‚‹(_A)" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "最背é¢ã«é€ã‚‹(_B)" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "é †åº(_O)" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "定義" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "パターン" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "スタイル" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"表示\n" +"サンプル" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "説明" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "テキスト(_T)" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "データ" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "連続(_S)" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "プロットエンジン" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "プロットタイプ" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "グラフã®ãƒ†ãƒ¼ãƒž" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "インデックス:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "設定(_S)" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "点" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "フォント" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "スタイル" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2色\n" +"明るã•" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "フィル" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "行" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "マーカー" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "アウトライン" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "色(_L):" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"ãªã—\n" +"パターン\n" +"グラデーション\n" +"ç”»åƒ" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "アウトラインカラー(_U):" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "å½¢(_P):" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "サイズ(_Z):" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "スタイル:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "タイプ(_Y):" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "背景(_B):" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "æ–¹å‘(_D):" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "終了(_E):" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "塗りã¤ã¶ã—(_F):" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "åˆã‚ã›ã‚‹(_F):" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "文字色(_F):" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "パターン(_P):" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "é¸æŠž(_S)..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "サイズ(_S):" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "é–‹å§‹(_S):" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "明るãã™ã‚‹(_B)" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "æš—ãã™ã‚‹(_D)" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "å£ç´™" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "デフォルト" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "アラブ語" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "ãƒãƒ«ãƒˆè«¸èªž" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "中欧" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "中国語" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "キリル文字" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "ギリシャ語" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "ヘブライ語" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "インド語" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "日本語" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "韓国語" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "トルコ語" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "ユニコード" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "ベトナム語" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "西欧" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "ãã®ä»–" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "アラビア語 (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "アラビア語 (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "アラビア語 (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "アラビア語 (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "アラビア語 (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "アラビア語 (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "アラビア語 (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "アルメニア語 (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "ãƒãƒ«ãƒˆèªž (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "ãƒãƒ«ãƒˆèªž (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "ãƒãƒ«ãƒˆèªž (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "ケルト語 (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "中欧 (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "中欧 (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "中欧 (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "中欧 (Windwos-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "簡体字中国語 (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "簡体字中国語 (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "簡体字中国語 (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "簡体字中国語 (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "簡体字中国語 (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "ç¹ä½“字中国語 (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "ç¹ä½“字中国語 (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "ç¹ä½“字中国語 (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "クロアãƒã‚¢èªž (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "キリル文字 (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "キリル文字 (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "キリル文字 (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "キリル文字 (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "キリル文字 (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "キリル文字 (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "ロシア語 (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "ウクライナ語 (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "ウクライナ語 (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "英語 (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "ペルシア語 (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "グルジア語 (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "ギリシア語 (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "ギリシア語 (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "ギリシア語 (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "グジャラート語 (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "グルムキー文字 (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "ヘブライ語 (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "ヘブライ語 (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "ヘブライ語 (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "ヘブライ語 (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "ヘブライ語 (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "ヒンディー語 (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "アイスランド語 (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "日本語 (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "日本語 (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "日本語 (シフトJIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "韓国語 (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "韓国語 (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "韓国語 (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "韓国語 (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "北欧 (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "ルーマニア語 (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "ルーマニア語 (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "å—æ¬§ (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "タイ語 (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "トルコ語 (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "トルコ語 (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "トルコ語 (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "トルコ語 (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "ユニコード (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "ユニコード (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "ユニコード (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "ユニコード (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "ユニコード (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "ユニコード (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "ユーザ定義" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "ベトナム語 (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "ベトナム語 (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "ベトナム語 (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "ベトナム語 (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "ヘブライ語 (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "西欧 (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "西欧 (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "西欧 (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "西欧 (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "西欧 (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "ロケール: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "å¤‰æ›æ–¹å‘" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "ã“ã®å€¤ã¯å®Ÿè¡Œã™ã‚‹iconvテストを決定ã—ã¾ã™ã€‚" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "é»’" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "æ·¡ã„茶色" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "茶金色" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "æš—ã„ç·‘ #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "濃紺" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "æš—ã„é’" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "ç´« #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "赤橙" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "金" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "深緑" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "セル値" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "é’" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "ダークグレー" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "赤" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "æ©™" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "ライム" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "スカイブルー #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "ç´«" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "グレー" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "マゼンタ" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "明るã„オレンジ" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "黄" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "ç·‘" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "シアン" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "明るã„é’" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "赤紫" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "æ·¡ã„ç°è‰²" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "ピンク" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "æ·¡ã„オレンジ" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "æ·¡ã„黄" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "æ·¡ã„ç·‘" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "æ·¡ã„シアン" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "æ·¡ã„é’" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "æ·¡ã„ç´«" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "白" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "ç´«é’" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "æš—ã„ç´«" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "スカイブルー" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "カスタム" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "カスタムカラー..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "å½±ã®ã‚¿ã‚¤ãƒ—" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "æ–¹å‘" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "指定ã™ã‚‹å¹…" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "指定ã™ã‚‹é«˜ã•" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "ツールãƒãƒ¼ã‚’çµåˆã™ã‚‹" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "ツールãƒãƒ¼ã®çµåˆã‚’解除" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "ファイル'%s'ã‚’é–‹ã‘ã¾ã›ã‚“" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "ã™ã¹ã¦ã®ãƒ•ァイル" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "ç”»åƒ" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "ç”»åƒã®é¸æŠž" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "åå‰ã‚’付ã‘ã¦ä¿å­˜" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "ファイルタイプ(_T):" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"指定ã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µå­ã¯é¸æŠžã—ãŸãƒ•ァイルタイプã¨ä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。ã“ã®å" +"å‰ã‚’ã¨ã«ã‹ã使用ã—ã¾ã™ã‹?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåã§ã™" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "%s ã«ä¿å­˜ã™ã‚‹ãŸã‚ã®ãƒ‘ーミッションãŒã‚りã¾ã›ã‚“" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"ファイル %s ã¯ã™ã§ã« %s ã«å­˜åœ¨ã—ã¾ã™ã€‚\n" +"\n" +"上書ãä¿å­˜ã—ã¾ã™ã‹?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "標準" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "ボールド" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "ボールドイタリック" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "イタリック" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "フォントスタイル:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "フォント:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "プレビュー" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "サイズ:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "数値" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "通貨" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "会計" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "日付" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "時間" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "パーセンテージ" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "分数" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "科学技術" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "テキスト" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "特別" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "カスタム" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "è² ã®æ•°ã®ãƒ•ォーマット" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "数字フォーマット" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "カテゴリ(_T):" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "å°æ•°ã®ä½(_M):" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "é‡ã‚’ä¼çµ±çš„ãªä¼šè¨ˆã‚¹ã‚¿ã‚¤ãƒ«ã§è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "入力ã—ãŸå€¤ã‚’ã€æ–‡å­—列ã¨ã—ã¦ãã®ã¾ã¾è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "通貨ã®é‡ã‚’表示ã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "日付(ã¨ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æ™‚刻)を表示ã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "数値をæ¡å›ºå®šã—ãŸ10進数ã§è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "æ—¥ä»˜ã¨æ™‚刻を表示ã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "値を最も近ã„分数ã§è¿‘ä¼¼ã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "値をパーセンテージã§è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "値を精度ã¤ãã§è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "書å¼ã‚³ãƒ¼ãƒ‰(_O):" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "è² ã®æ•°ã®æ›¸å¼(_F):" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "プレビュー:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "記å·(_Y):" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "é©åˆ‡ãªãƒ•ォーマットを自動的ã«é¸æŠžã—ã¾ã™ã€‚" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "エクセルスタイルã®ãƒ•ォーマットを直接指定ã—ã¾ã™" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "書å¼(_F):" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "1000å˜ä½ã§ã‚»ãƒ‘レータを使用ã™ã‚‹(_U)" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "西欧" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "æ±æ¬§" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "北米" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "中å—ç±³" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "アジア" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "アフリカ" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "オーストラリア" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "アメリカåˆè¡†å›½/英語 (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "å—アフリカ アフリカーンス (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "エãƒã‚ªãƒ”ã‚¢/アムãƒãƒªã‚¯èªž (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "アラブ首長国連邦 (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "ãƒãƒ¼ãƒ¬ãƒ¼ãƒ³ (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "アルジェリア (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "エジプト (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "インド/アラブ語 (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "イラク (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "ヨルダン (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "クウェート (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "レãƒãƒŽãƒ³ (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "リビア (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "モロッコ (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "オマーン (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "カタール (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "サウジアラビア (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "スーダン (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "シリア (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "ãƒãƒ¥ãƒ‹ã‚¸ã‚¢ (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "イエメン (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "アゼルãƒã‚¤ã‚¸ãƒ£ãƒ³ (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "ベラルーシ (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "ブルガリア (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥ (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "インド/ベンガリ語 (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "フランス/ブルトン語 (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "ボスニア・ヘルツェゴビナ (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "スペイン/カタラン語 (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ãƒã‚§ã‚³å…±å’Œå›½ (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "グレートブリテン/ウェルシュ語 (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "デンマーク (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "オーストリア (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "ベルギー/ドイツ語 (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "スイス/ドイツ語 (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "ドイツ (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "ルクセンブルグ/ドイツ語 (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "ギリシャ (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "オーストラリア (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "ボスニア (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "カナダ/英語 (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "イギリス (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "香港/英語 (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "アイルランド (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "インド/英語 (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "ニュージーランド (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "フィリピン (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "シンガãƒãƒ¼ãƒ«/英語 (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "アメリカåˆè¡†å›½/英語 (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "å—アフリカ/英語 (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "ジンãƒãƒ–エ (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "エスペラント (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "アルゼンãƒãƒ³ (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "ボリビア (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "ãƒãƒª (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "コロンビア (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "コスタリカ (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "ドミニカ共和国 (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "エクアドル (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "スペイン (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "グアテマラ (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "ホンジュラス (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "メキシコ (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "ニカラグア (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "パナマ (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "ペルー (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "プエルトリコ (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "パラグアイ (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "エルサルãƒãƒ‰ãƒ« (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "アメリカåˆè¡†å›½/スペイン語 (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "ウルグアイ (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "ベãƒã‚ºã‚¨ãƒ© (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "エストニア (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "スペイン/ãƒã‚¹ã‚¯èªž (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "イラン (fa_UR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "フィンランド/フィン語 (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "フェロー諸島 (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "ベルギー/フランス語 (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "カナダ/フランス語 (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "スイス/フランス語 (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "フランス (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "アイルランド/ゲール語 (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "イギリス/スコットランド・ゲール語 (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "スペイン/ガリシア語 (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "イギリス/マン島語 (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "インド/ヒンズー語 (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "クロアãƒã‚¢ (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "ãƒãƒ³ã‚¬ãƒªãƒ¼ (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "アルメニア (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "インドãƒã‚·ã‚¢ (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "アイスランド (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "スイス/イタリア語 (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "イタリア(it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "イスラエル/ヘブライ (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "日本 (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "ジョージア (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "グリーンランド (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "韓国 (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "イギリス/コーンウォール語 (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "リトアニア (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "ラトビア (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "ニュージーランド/マオリ語 (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "マケドニア (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "インド/マラーティー語 (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "マレーシア (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "マルタ (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "ベルギー/フレミッシュ語 (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "オランダ (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "ノルウェー/ニーノシュク語 (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "ノルウェー/ボクモール語 (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "フランス/オック語 (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰ (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "ブラジル (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "ãƒãƒ«ãƒˆã‚¬ãƒ« (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "ルーマニア (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "ロシア (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "ウクラニア/ロシア語 (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "ノルウェー/サーミ語 (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "スロãƒã‚­ã‚¢ (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "スロベニア (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "アルãƒãƒ‹ã‚¢ (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "ユーゴスラビア (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "フィンランド/スウェーデン語 (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "スウェーデン (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "インド/タミル語 (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "インド/テルグ語 (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "タジキスタン (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "タイ (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "エリトリア (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "エãƒã‚ªãƒ”ã‚¢/ãƒã‚°ãƒªãƒ‹ã‚¢èªž (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "フィリピン/タガログ語 (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "トルコ語 (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "ロシア/タタール語 (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "ウクラニア (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "パキスタン (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "ウズベキスタン (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "ベトナム (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "ベルギー/ワロン語 (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "アメリカåˆè¡†å›½/イディッシュ語 (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "中国 (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "香港/中国語 (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "シンガãƒãƒ¼ãƒ«/中国語 (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "å°æ¹¾ (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "ç¾åœ¨ã®ãƒ­ã‚±ãƒ¼ãƒ«: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "メニュー" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "オプションメニュー" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "インジケータã®ã‚µã‚¤ã‚º" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "ドロップダウンインジケータã®ã‚µã‚¤ã‚º" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "インジケータスペーシング" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "インジケータã®ã¾ã‚りã®ã‚¹ãƒšãƒ¼ã‚·ãƒ³ã‚°" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*æ—¥" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*月" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*ç«" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*æ°´" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*木" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*金" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*土" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "日曜日" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "月曜日" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "ç«æ›œæ—¥" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "水曜日" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "木曜日" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "金曜日" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "土曜日" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*1" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*2" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*3" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*4" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*5" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*6" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*7" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*8" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*9" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*10" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*11" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*12" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "1月" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "2月" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "3月" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "4月" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "5月" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "6月" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "7月" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "8月" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "9月" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "10月" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "11月" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "12月" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "é»’" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "é’" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "シアン" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "ç·‘" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "マゼンタ" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "赤" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "白" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "黄" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "アラブ首長国連邦, ディルãƒãƒ " + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "アフガニスタン, アフガニ" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "アルãƒãƒ‹ã‚¢, レク" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "アルメニア, ドラム" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "オランダ領アンティル, ギルダー" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "アンゴラ, クワンザ" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "アルゼンãƒãƒ³, ペソ" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "オーストラリア, ドル" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "アルãƒ, ギルダー" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "アゼルãƒã‚¤ã‚¸ãƒ£ãƒ³, マナト" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "ボスニア・ヘルツェゴビナ, å…Œæ›ãƒžãƒ«ã‚«" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "ãƒãƒ«ãƒãƒ‰ã‚¹, ドル" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥, ã‚¿ã‚«" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "ブルガリア, レフ" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "ãƒãƒ¼ãƒ¬ãƒ¼ãƒ³, ディナール" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "ブルンジ, フラン" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "ãƒãƒ¼ãƒŸãƒ¥ãƒ¼ãƒ€, ドル" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "ブルãƒã‚¤ï¼ãƒ€ãƒ«ã‚µãƒ©ãƒ¼ãƒ , ドル" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "ボリビア, ボリビアーノ" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "ブラジル, ブラジルレアル" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "ãƒãƒãƒž, ドル" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "ブータン, ヌルタム" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "ボツワナ, プラ" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "ベラルーシ, ルーブル" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "ベリーズ, ドル" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "カナダ, ドル" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "コンゴ/キンシャサ, コンゴフラン" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "スイス, フラン" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ãƒãƒª, ペソ" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "中国, 元人民幣" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "コロンビア, ペソ" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "コスタリカ, コロン" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "キューãƒ, ペソ" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "カーボベルデ, エスクード" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "キプロス, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ãƒã‚§ã‚³å…±å’Œå›½, コルナ" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "ジブãƒ, フラン" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "デンマーク, クローãƒ" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "ドミニカ共和国, ペソ" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "アルジェリア, アルジェリア・ディナール" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "エストニア, クローン" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "エジプト, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "エリトリア, ナクファ" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "エãƒã‚ªãƒ”ã‚¢, ブル" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "ユーロ加盟国, ユーロ" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "フィジー, ドル" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "フォークランド諸島(マルビナス), ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "イギリス連åˆçދ国, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "グルジア, ラリ" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "ガーンジー, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "ガーナ, セディ" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "ジブラルタル, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "ガンビア, ダラシ" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "ギニア, フラン" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "グアテマラ, ケツァル" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "ガイアナ, ドル" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "香港, ドル" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "ホンジュラス, レンピラ" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "クロアãƒã‚¢, クーナ" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "ãƒã‚¤ãƒ, グールド" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "ãƒãƒ³ã‚¬ãƒªãƒ¼, フォリント" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "インドãƒã‚·ã‚¢, ルピア" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "イスラエル, 新シェケル" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "マン島, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "インド, ルピー" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "イラク, ディナール" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "イラン, リアル" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "アイスランド, クローナ" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "ジャージー, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "ジャマイカ, ドル" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "ヨルダン, ディナール" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "日本, 円" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "ケニア, シリング" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "キルギスタン, ソム" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "カンボジア, リエル" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "コモロ, フラン" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "北æœé®®, ウォン" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "韓国, ウォン" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "クウェート, ディナール" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "ケイマン諸島, ドル" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "カザフスタン, テンゲ" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "ラオス, キップ" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "レãƒãƒŽãƒ³, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "スリランカ, ルピー" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "リベリア, ドル" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "レソト, ロティ" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "リトアニア, リタス" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "ラトビア, ラト" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "リビア, ディナール" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "モロッコ, ディルãƒãƒ " + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "モルドãƒ, レイ" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "マダガスカル, マラガシー・フラン" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "マケドニア, デナール" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "ミャンマー(ビルマ), ãƒãƒ£ãƒƒãƒˆ" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "モンゴル, ツグリク" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "マカオ, パタカ" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "モーリタニア, ウギア" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "マルタ, リラ" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "モーリシャス, ルピー" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "モルジブ(モルジブ諸島), ルフィヤ" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "マラウィ, クワãƒãƒ£" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "メキシコ, ペソ" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "マレーシア, リンギット" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "モザンビーク, メティカル" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "ナミビア, ドル" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "ナイジェリア, ナイラ" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "ニカラグア, コルドãƒ" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "ノルウェー, クローãƒ" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "ãƒãƒ‘ール, ãƒãƒ‘ール・ルピー" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "ニュージーランド, ドル" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "オマーン, リアル" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "パナマ, ãƒãƒ«ãƒœã‚¢" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "ペルー, 新ソル" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "パプアニューギニア, キナ" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "フィリピン, ペソ" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "パキスタン, ルピー" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰, ズロãƒ" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "パラグアイ, グアラニ" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "カタール, リヤル" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "ルーマニア, レイ" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "ロシア, ルーブル" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "ルワンダ, ルワンダ・フラン" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "サウジアラビア, リヤル" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "ソロモン諸島, ドル" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "セイシェル, ルピー" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "スーダン, ディナール" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "スウェーデン, クローナ" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "シンガãƒãƒ¼ãƒ«, ドル" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "セントヘレナ, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "スロベニア, トラー" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "スロãƒã‚­ã‚¢, コルナ" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "シエラレオãƒ, レオン" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "ソマリア, シリング" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "セボルガ, ルイジーニ" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "スリナム, ギルダー" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "サントメ=プリンãƒãƒš, ドブラ" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "エルサルãƒãƒ‰ãƒ«, コロン" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "シリア, ãƒãƒ³ãƒ‰" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "スワジランド, リランゲニ" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "タイ, ãƒãƒ¼ãƒ„" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "タジキスタン, ルーブル" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "トルクメニスタン, マナト" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "ãƒãƒ¥ãƒ‹ã‚¸ã‚¢, ディナール" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "トンガ, パアンガ" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "トルコ, リラ" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "トリニダード=トãƒã‚´, ドル" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "ツãƒãƒ«, ツãƒãƒ«ãƒ‰ãƒ«" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "å°æ¹¾, 新ドル" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "タンザニア, シリング" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "ウクライナ, グリブナ" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "ウガンダ, シリング" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "アメリカåˆè¡†å›½, ドル" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "ウルグアイ, ペソ" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "ウズベキスタン, スム" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "ベãƒã‚ºã‚¨ãƒ©, ボリãƒãƒ«" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "ベトナム, ドン" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "ãƒãƒŒã‚¢ãƒ„, ãƒãƒ„" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "サモア, タラ" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "アフリカ財政å”åŒä½“(CFA) BEAC, フラン" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "銀, オンス" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "金, オンス" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "æ±ã‚«ãƒªãƒ–・ドル" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "国際通貨基金(IMF) 特別引ãå‡ºã—æ¨©(SDR)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "アフリカ財政å”åŒä½“(CFA) BCEAO, フラン" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "パラジウム, オンス" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "プラãƒãƒŠ, オンス" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "イエメン, リアル" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "ユーゴスラビア, ニューディナール" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "å—アフリカ, ランド" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "ザンビア, クワãƒãƒ£" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "ジンãƒãƒ–エ, ジンãƒãƒ–エ・ドル" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "ãªã—" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "色ãªã—" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "自動" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ãªã—" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "正方形" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "ダイヤモンド" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "範囲(_N)" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "å³ã®ã‚¢ã‚¦ãƒˆãƒ©ã‚¤ãƒ³(_R)" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "円形" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "行" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "アスタリスク" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "3月" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% グレー" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% グレー" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% グレー" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% グレー" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% グレー" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "横縞" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "縦縞" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "å³ä¸‹ãŒã‚Šæ–œç·šã®ç¸ž" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "左下ãŒã‚Šæ–œç·šã®ç¸ž" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "æ–œç·šã®æ ¼å­" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "å¤ªã„æ–œç·šã®æ ¼å­" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "ç´°ã„æ¨ªç¸ž" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "ç´°ã„縦縞" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "ç´°ã„å³ä¸‹ãŒã‚Šæ–œç·šã®ç¸ž" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "ç´°ã„左下ãŒã‚Šæ–œç·šã®ç¸ž" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "ç´°ã„æ¨ªç·šã®æ ¼å­" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "ç´°ã„æ–œç·šã®æ ¼å­" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "剿™¯è‰²ã§å¡—りã¤ã¶ã—" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "å°å††" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "åŠå††" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "ã‚らãµã" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "大ããªå††" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "レンガ" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "ラベル" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "値" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "エラーãƒãƒ¼" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "棒/列ã§ã®ãƒ—ロット" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "グラフ(_G)..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "ç·šã§ãƒ—ロット" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "エリアã§ãƒ—ロット" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "列を削除" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "列を削除" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "パーセント(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "列を削除" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "列を削除" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "列を削除" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "列を挿入" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "列を挿入" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "エリア" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "エリアã§ãƒ—ロットã—ã¾ã™ã€‚" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "エリア" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "棒" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "列" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ç·š" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "ç·šã§ãƒ—ロットã—ã¾ã™ã€‚" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "ç·š" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "パーセンテージエリア" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "パーセンテージãƒãƒ¼" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "パーセンテージ列" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "パーセント線" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "パーセンテージエリアプロット。" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "パーセント線プロット。" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "スタックエリア" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "スタックãƒãƒ¼" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "スタック列" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "スタック線" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "スタックエリアプロット。" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "スタック線プロット。" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "マークã•れã¦ã„ãªã„ç·š" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "マークã•れã¦ã„ãªã„パーセンテージ線" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "マークã•れã¦ã„ãªã„スタック線" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "エリアプロットエンジン" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "棒/列プロットエンジン" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "グラフ: 棒/列/行/エリア" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "デフォルト 1.5d プロットタイプ" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "線プロットエンジン" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "ç·šã€ã‚¨ãƒªã‚¢ã€æ£’ã€åˆ—ã§ãƒ—ロットã—ã¾ã™" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "プロット" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "æ¤œç´¢ãƒ‘ã‚¿ãƒ¼ãƒ³ãŒæ­£ã—ãã‚りã¾ã›ã‚“。" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "プロット" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "プロット" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "プロット" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "棒/列プロットエンジン" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "グラフ: 放射状プロット" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "デフォルト円グラフタイプ" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "パイã®ãƒ—ロット" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "円ã®ãƒ—ロット" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s 㯠%d を指ã—ã¦ã„ã¾ã™\n" +"値㯠%g (%g) ã§ã™" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "セパレータ" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "度" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "セパレータ" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "中心サイズ(_T):" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3次元パイグラフ" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3次元分割円グラフ" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "複数パイグラフ" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "複数パイ/棒グラフ" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "ãれãžã‚Œã®ã‚³ãƒ³ãƒˆãƒªãƒ“ュータã®ãƒ‘ーセンテージã§ã™ã€‚" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "パイ" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "円" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "分割パイ" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "分割円" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "グラフ: パイ/円" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "デフォルトパイグラフタイプ" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "パイã¨å††ã§ãƒ—ロットã—ã¾ã™ã€‚" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "パイグラフプロットエンジン" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "円グラフプロットエンジン" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "レーダープロット" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "レーダーエリアプロット" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "エリアレーダー" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "パーセンテージãƒãƒ¼" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "レーダー" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "列を削除" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "グラフ: 放射状プロット" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "デフォルト円グラフタイプ" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "円グラフプロットエンジン" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "リンググラフプロットエンジン" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "ã™ã¹ã¦ã®ç•ªå·" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "回数" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "インãƒãƒ¼ãƒˆã™ã‚‹è¡Œ" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "ソース" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "リンググラフプロットエンジン" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "円グラフ" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "円グラフ" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% (標準サイズã«å¯¾ã™ã‚‹æ¯”率)" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "センãƒãƒ¡ãƒ¼ãƒˆãƒ«" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "ソース" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "プロット" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "二é‡" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "ãƒãƒ–ル" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "è¡Œã®æ§‹æ–‡è§£æžä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "è¡Œã®æ§‹æ–‡è§£æžä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "列を削除" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XYç›´ç·š" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY点" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XYç›´ç·š" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2次元プロット" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2次元散布図プロットエンジン" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "ãƒãƒ–ルプロットエンジン" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "グラフ: XY/散布図/ãƒãƒ–ル" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/ko.po b/lib/goffice-0.0.4/po/ko.po new file mode 100644 index 0000000000..7a26ecf7e2 --- /dev/null +++ b/lib/goffice-0.0.4/po/ko.po @@ -0,0 +1,4352 @@ +# gnumeric ko. encoding="UTF-8"po +# Sung-Hyun Nam , 1998-2000 +# Jae-kyun Lee , 2002 +# Changwoo Ryu , 2003 +msgid "" +msgstr "" +"Project-Id-Version: AC_PACKAGE_NAME AC_PACKAGE_VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-08-12 22:15+0900\n" +"Last-Translator: Changwoo Ryu \n" +"Language-Team: GTP Korean \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +#, fuzzy +msgid "Saving over old files of this type is disabled for safety." +msgstr "ì•ˆì „ì„ ìœ„í•´ ì´ì „ 파ì¼ì— ë®ì–´ì“°ê¸°ê°€ 허용않ë¨." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "ê°ì²´(_O)..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "파ì¼ì—서 í”ŒëŸ¬ê·¸ì¸ ì´ë¦„ì„ ì½ì„ 수 없습니다." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "알 수 없는 ì´ë¦„" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, fuzzy, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "알 수 없는 í”ŒëŸ¬ê·¸ì¸ ì´ë¦„." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "플러그ì¸ì— idê°€ 없습니다." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +#, fuzzy +msgid "Cannot load plugin loader." +msgstr "모르는 계산 ì—러" + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "모르는 계산 ì—러" + +#: goffice/app/go-plugin.c:1112 +#, fuzzy +msgid "Error while loading plugin dependencies." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "사용가능한 플러그ì¸ì˜ 정보를 ì½ì€ì¤‘ ì—러" + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "í”ŒëŸ¬ê·¸ì¸ ì‹œìŠ¤í…œì„ ì´ˆê¸°í™” 하는 중 오류." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +#, fuzzy +msgid "Module file name not given." +msgstr "íŒŒì¼ ì´ë¦„:" + +#: goffice/app/go-plugin-loader-module.c:80 +#, fuzzy, c-format +msgid "Unable to open module file \"%s\"." +msgstr "모듈 íŒŒì¼ ì—´ 수 ì—†ìŒ: " + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +#, fuzzy +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "플러그ì¸ì€ 반드시 init_plugin 함수를 í¬í•¨í•´ì•¼ 합니다." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "파ì¼ì´ ìž˜ëª»ëœ ë§¤ì§ë„˜ë²„를 가지고 있습니다." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "ì´ ì‹œìŠ¤í…œì€ ë™ì  ëª¨ë“ˆë¡œë”©ì´ ì§€ì›ë˜ì§€ 않습니다." + +#: goffice/app/go-plugin-loader-module.c:118 +#, fuzzy, c-format +msgid "Unable to close module file \"%s\"." +msgstr "모듈 íŒŒì¼ ì—´ 수 ì—†ìŒ: " + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "파ì¼ì— \"%s\" 함수가 없습니다." + +#: goffice/app/go-plugin-loader-module.c:371 +#, fuzzy, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "플러그ì¸ì€ 반드시 init_plugin 함수를 í¬í•¨í•´ì•¼ 합니다." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +#, fuzzy +msgid "Error while loading plugin service." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin-service.c:164 +#, fuzzy +msgid "Initializing function inside plugin returned error." +msgstr "init_pluginì´ ì—러 ë˜ëŒë¦¼" + +#: goffice/app/go-plugin-service.c:182 +#, fuzzy +msgid "Cleanup function inside plugin returned error." +msgstr "init_pluginì´ ì—러 ë˜ëŒë¦¼" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "ì¼ë°˜" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "플러그ì¸ì´ ì•„ì§ ì‚¬ìš©ì¤‘ìž…ë‹ˆë‹¤." + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "플러그ì¸ì´ ì•„ì§ ì‚¬ìš©ì¤‘ìž…ë‹ˆë‹¤." + +#: goffice/app/go-plugin-service.c:495 +#, fuzzy +msgid "Error while reading file." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "플러그ì¸ì´ ì•„ì§ ì‚¬ìš©ì¤‘ìž…ë‹ˆë‹¤." + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +#, fuzzy +msgid "Error while saving file." +msgstr "íŒŒì¼ ë‹«ê¸° ì—러, ì—러: %s" + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "모르는 계산 ì—러" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "ê°ì²´(_O)..." + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "모르는 시스템" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "현재 ë‚ ì§œ(_d)" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "ì‹" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "내어쓰기(_I):" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "찾기" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "공백" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "ì •ë ¬" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "ì¸ìš© 문ìž:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "문제 í¬ê¸°" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "불연ì†" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "불연ì†" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "ì„ " + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "논리" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "로그 함수" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "íŒŒì¼ ìƒì„¸ì„¤ëª…(_F)" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "ìžë™" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "범주(_C):" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "바탕색" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "최소(_I)" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "최대값" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "닫기(_C)" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "형ì‹" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "꼬리표" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "금요ì¼" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "금요ì¼" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "무늬" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "미리보기" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "무늬" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "미리보기" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "삽입" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "외곽선" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "높ì´" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "삽입" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "넣기(_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "í–‰(_R)" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "외곽선" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "꼬리표(_L)" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "형ì‹(_T):" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "보냄" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "제목" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "금요ì¼" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Xì¶•" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Yì¶•" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Zì¶•" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "플롯 모드" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "높ì´" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "너비" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "오류 알림" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "미리보기" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "샘플" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "색:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "ì—´ 너비" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "무엇으로(_W):" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "그래프" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "ë„표" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "ì´ë¦„" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "3단계중 1단계: 그래프 í˜•ì‹ ì„ íƒ" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "3단계중 3단계: 그래프 고침" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "머릿글 고침" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "넣기(_I)" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "플롯 모드" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "그놈 오피스 그래프" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "가장ìžë¦¬" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "ë°©í–¥" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "무늬" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "미리보기" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"샘플\n" +"보기" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "설명" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "í…스트(_T):" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "ë°ì´í„°" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "문ìžì—´" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "플롯 모드" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "플롯 모드" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "내어쓰기(_I):" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "문ìžì—´(_S)" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dí–‰ x %dì—´" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "글꼴" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "모양" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "미리보기" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "미리보기" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "무늬" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "미리보기" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "색:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "색(_C):" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "범위(_S):" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "í¬ê¸°:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "모양(_S):" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "형ì‹:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "바탕색" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "디렉토리" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "ë”하기(_A)" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "색(_C):" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "최소" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "글ìžìƒ‰" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "무늬" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "ì„ íƒ(_S)" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "í¬ê¸°:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "ìƒíƒœ" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "오른쪽(_R)" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "ë°°ì—´" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "ì½ì–´ë“¤ì´ê¸°" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "벽지" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "기본값" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "묶ìŒ" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ì•„ëžì–´" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "기울임" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "중앙 유럽어" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "중국어" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "그리스어" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "히브리어" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "ì¸ë„ì–´" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "ì¼ë³¸ì–´" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "한국어" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "터키어" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "유니코드" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "베트남어" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "서양어" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "기타" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "ì•„ëžì–´ (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "ì•„ëžì–´ (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "ì•„ëžì–´ (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "ì•„ëžì–´ (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "ì•„ëžì–´ (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "ì•„ëžì–´ (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "ì•„ëžì–´ (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "발트어 (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "발트어 (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "발트어 (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "중앙 유럽 (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "중앙 유럽 (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "중앙 유럽 (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "중앙 유럽 (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "중국어 ê°„ì²´ (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "중국어 ê°„ì²´ (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "중국어 ê°„ì²´ (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "중국어 ê°„ì²´ (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "중국어 ê°„ì²´ (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "중국어 번체 (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "중국어 번체 (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "중국어 번체 (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "키릴어 (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "키릴어 (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "키릴어 (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "키릴어 (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "키릴어 (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "키릴어 (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "ì˜ì–´ (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "그리스어 (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "그리스어 (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "그리스어 (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "히브리어 (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "히브리어 (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "히브리어 (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "히브리어 (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "히브리어 (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "ì¼ë³¸ì–´ (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "ì¼ë³¸ì–´ (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "ì¼ë³¸ì–´ (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "한국어 (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "한국어 (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "한국어 (ì¡°í•©)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "한국어 (통합 한글)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "터키어 (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "터키어 (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "터키어 (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "터키어 (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "유니코드 (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "유니코드 (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "유니코드 (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "유니코드 (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "유니코드 (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "유니코드 (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "ì‚¬ìš©ìž ì •ì˜" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "베트남어 (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "베트남어 (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "베트남어 (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "베트남어 (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "서양어 (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "서양어 (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "서양어 (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "서양어 (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "서양어 (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "로케ì¼: " + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Pearson Correlation" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "검정색" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "월요ì¼" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "범위" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "ê°•ì¡°" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "ì…€ ê°’" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "청색" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "ë°°ì—´" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "ì ìƒ‰" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "범위" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "시간" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "ë°°ì—´" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "ì§„í™ìƒ‰" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "황색" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "녹색" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "ì²­ë¡ìƒ‰" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "하ì´í¼ë§í¬(_H)" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "오른쪽 ì •ë ¬" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "오른쪽 ì •ë ¬" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "오른쪽 ì •ë ¬" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "í°ìƒ‰" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "ê°’" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "사용ìž" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "꼬리글 고침" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "ë°©í–¥" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "íŒŒì¼ '%s'ì„(를) ì—´ 수 없습니다" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "파ì¼" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "그림" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "ì „ì²´ ì—´ ì„ íƒ" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "ëª¨ë‘ ì €ìž¥" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "파ì¼(_F)" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"는 디렉토리 ì´ë¦„입니다" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"%sì—\n" +"저장할 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤." + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Workbook %sì´(ê°€) ì´ë¯¸ 존재합니다.\n" +"ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "ì¼ë°˜" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "ê°•ì¡°" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "굵고 기울임" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "기울임" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "글꼴 형ì‹:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "글꼴:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "미리보기" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "í¬ê¸°:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "숫ìž" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "통화" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "í™”í(_A)" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "ë‚ ì§œ" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "시간" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "í¼ì„¼íЏ" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "분수(_F)" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "과학(_S)" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "í…스트(_x)" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "특별한 기능(_P)" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "사용ìž" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "ìŒìˆ˜(_i):" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "í˜•ì‹ ë³µì‚¬" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "범주" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "ì†Œìˆ˜ì  ìžë¦¬(_M):" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "í…Œë‘리 ë³´ì´ê¸°(_O)" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "형ì‹(_F):" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "ìŒìˆ˜(_i):" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "미리보기" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "기호(_Y):" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "형ì‹(_F):" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "1000ìžë¦¬ 마다 분리기호 넣기(_U)" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "서유럽" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "ë™ìœ ëŸ½" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "ë¶ë¯¸" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "중남미" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "아시아" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "아프리카" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "오스트레ì¼ë¦¬ì•„" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "미국/ì˜ì–´ (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "남아프리카 공화국 (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "ì—티오피아/암하ë¼ì–´ (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "ì•„ëž ì—미리트 (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "ë°”ë ˆì¸ (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "알제리아 (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "ì´ì§‘트 (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "ì¸ë„/ì•„ëžì–´ (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "ì´ë¼í¬ (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "요르단 (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "쿠웨ì´íЏ (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "레바논 (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "리비아 (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "모로코 (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "오만 (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "카타르 (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "사우디 ì•„ë¼ë¹„ì•„ (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "수단 (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "시리아 (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "튀니지 (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "예멘 (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "아제르바ì´ìž” (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "벨ë¼ë£¨ìФ (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "불가리아 (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "방글ë¼ë°ì‹œ (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "ì¸ë„/벵골어 (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "프랑스/브르타뉴어 (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "보스니아 헤르체고비나 (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "스페ì¸/카탈로니아어 (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ì²´ì½” (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "ì˜êµ­/웨ì¼ì¦ˆì–´ (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "ë´ë§ˆí¬ (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "오스트리아 (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "벨기ì—/ë…ì¼ì–´ (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "스위스/ë…ì¼ì–´ (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "ë…ì¼ (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "룩셈부르í¬/ë…ì¼ì–´ (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "그리스 (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "오스트레ì¼ë¦¬ì•„ (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "보츠와나 (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "ìºë‚˜ë‹¤/ì˜ì–´ (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "ì˜êµ­ (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "í™ì½©/ì˜ì–´ (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "ì•„ì¼ëžœë“œ (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "ì¸ë„/ì˜ì–´ (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "뉴질랜드 (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "필리핀 (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "싱가í¬ë¥´/ì˜ì–´ (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "미국/ì˜ì–´ (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "남아프리카공화국/ì˜ì–´ (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "ì§ë°”브웨 (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "ì—스페란토 (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "아르헨티나 (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "볼리비아 (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "ì¹ ë ˆ (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "콜로비아 (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "코스타리카 (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "ë„미니카 공화국 (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "ì—ì½°ë„르 (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "ìŠ¤íŽ˜ì¸ (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "과테ë§ë¼ (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "온ë‘ë¼ìФ (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "멕시코 (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "니카ë¼ê³¼ (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "파나마 (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "페루 (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "푸ì—르토 리코 (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "파ë¼ê³¼ì´ (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "엘살바ë„르 (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "미국/스페ì¸ì–´ (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "ìš°ë£¨ê³¼ì´ (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "ë² ë„¤ìˆ˜ì—˜ë¼ (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "ì—스토니아 (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "스페ì¸/바스í¬ì–´ (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "ì´ëž€ (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "핀란드/핀란드어 (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "페로스 ì œë„ (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "벨기ì—/프랑스어 (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "ìºë‚˜ë‹¤/프랑스어 (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "스위스/프랑스어 (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "프랑스 (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "ì•„ì¼ëžœë“œ/갈리시아어 (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "ì˜êµ­/스코틀랜드 갈리시아어 (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "스페ì¸/갈리시아어 (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "ì˜êµ­/Man 갈리시아어 (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "ì¸ë„/힌ë‘ì–´ (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "í¬ë¡œì•„í‹°ì•„ (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "í—가리 (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "아르메니아 (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "ì¸ë„네시아 (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "ì•„ì´ìŠ¬ëž€ë“œ (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "스위스/ì´íƒˆë¦¬ì•„ì–´ (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "ì´íƒˆë¦¬ì•„ (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "ì´ìФë¼ì—˜/히브리어 (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "ì¼ë³¸ (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "그루지아 (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "그린랜드 (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "한국 (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "ì˜êµ­/코니쉬 (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "리투아니아 (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "ë¼íŠ¸ë¹„ì•„ (lt_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "뉴질랜드/마오리 (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "마케ë„니아 (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "ì¸ë„/마ë¼í‹°ì–´ (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "ë§ë ˆì´ì§€ì•„ (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "몰타 (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "벨기ì—/플ë¼ë§ì–´ (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "네ëœëž€ë“œ (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "노르웨ì´/ë‰˜ë…¸ë¥´ìŠ¤í¬ (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "노르웨ì´/ë¶€í¬ëª° (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "프랑스/오í¬ì–´ (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "í´ëž€ë“œ (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "브ë¼ì§ˆ (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "í¬ë¥´íˆ¬ê°ˆ (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "루마니아 (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "러시아 (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "ìš°í¬ë¼ì´ë‚˜/러시아어 (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "노르웨ì´/사미 (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "슬로바키아 (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "슬로베니아 (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "알바니아 (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "유고슬ë¼ë¹„ì•„ (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "핀란드/스웨ë´ì–´ (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "ìŠ¤ì›¨ë´ (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "ì¸ë„/타밀어 (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "ì¸ë„/텔루그어 (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "타지키스탄 (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "íƒ€ì´ (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "ì—리트레아 (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "ì—디오피아/티그리ëƒì–´ (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "필리핀/타갈로그어 (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "터키 (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "러시아/타타르어 (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "ìš°í¬ë¼ì´ë‚˜ (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "파키스탄 (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "우즈베키스탄 (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "베트남 (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "벨기ì—/왈론어 (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "미국/ì´ë””시 (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "중국 (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "í™ì½©/중국어 (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "싱가í¬ë¥´/중국어 (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "타ì´ì™„ (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "현재 로케ì¼: " + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "í‰ê· (_M):" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*ì¼" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*ì›”" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*í™”" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*수" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*목" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*금" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*토" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ì¼ìš”ì¼" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "월요ì¼" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "화요ì¼" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "수요ì¼" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "목요ì¼" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "금요ì¼" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "토요ì¼" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*1ì›”" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*2ì›”" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*3ì›”" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*4ì›”" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*5ì›”" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*6ì›”" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*7ì›”" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*8ì›”" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*9ì›”" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*10ì›”" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*11ì›”" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*12ì›”" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "1ì›”" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "2ì›”" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "3ì›”" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "4ì›”" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "5ì›”" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "6ì›”" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "7ì›”" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "8ì›”" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "9ì›”" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "10ì›”" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "11ì›”" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "12ì›”" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ì°¸" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "ê±°ì§“" + +#: goffice/utils/format.c:757 +#, fuzzy +msgid "Black" +msgstr "검정색" + +#: goffice/utils/format.c:758 +#, fuzzy +msgid "Blue" +msgstr "청색" + +#: goffice/utils/format.c:759 +#, fuzzy +msgid "Cyan" +msgstr "ì²­ë¡ìƒ‰" + +#: goffice/utils/format.c:760 +#, fuzzy +msgid "Green" +msgstr "녹색" + +#: goffice/utils/format.c:761 +#, fuzzy +msgid "Magenta" +msgstr "ì§„í™ìƒ‰" + +#: goffice/utils/format.c:762 +#, fuzzy +msgid "Red" +msgstr "취소 복구" + +#: goffice/utils/format.c:763 +#, fuzzy +msgid "White" +msgstr "í°ìƒ‰" + +#: goffice/utils/format.c:764 +#, fuzzy +msgid "Yellow" +msgstr "황색" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "ì•„ëž ì—미리트 ì—°í•©, ë”히람" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "아프가니스탄, 아프가니" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "알바니아, ë ˆí¬" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "아르메니아, 드램" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "네ë¸ëž€ë“œë ¹ 앤틸리스 ì—´ë„, 길ë”" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "앙골ë¼, ì½´ìž" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "아르헨티나, 페소" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "오스트레ì¼ë¦¬ì•„, 달러" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "아루바, 길ë”" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "아제르바ì´ìž”, 마나트" + +#: goffice/utils/formats.c:399 +#, fuzzy +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "보스니아 헤르체고비아, " + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "바베ì´ë„스, 달러" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "방글ë¼ë°ì‹œ, 타카" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "불가리아, ë ›" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "바레ì¸, 디나르" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "부룬디, 프랑í¬" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "버무다, 달러" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "ë¸Œë£¨ë‚˜ì´ ë‹¤ë£¨ì‚´ëžŒ, 달러" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "볼리비아, 볼리비아노" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "브ë¼ì§ˆ, 브ë¼ì§ˆ 레알" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "바하마, 달러" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "부탄, 눌트눔" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "보츠와나, í’€ë¼" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "벨ë¼ë£¨ìФ, 루블" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "벨리즈, 달러" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "ìºë‚˜ë‹¤, 달러" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "콩고/킨샤사, 콩고프랑" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "스위스, 프랑í¬" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ì¹ ë ˆ, 페소" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "중국, 위엔 ì¸ë¯¼í" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "콜로비아, 페소" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "코스타리카, 콜론" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "ì¿ ë°”, 페소" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "ì¹´ë³´ 베르드, ì—스쿠ë„" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "사ì´í”„러스, 파운드" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ì²´ì½”, 코루나" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "지부티, 프랑í¬" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "í…마í¬, í¬ë¡œë„¤" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "ë„미니카 공화국, 페소" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "알제리, 알제리 디나르" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "ë°ìŠ¤í† ë‹ˆì•„, í¬ë£¬" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "ì´ì§‘트, 파운드" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "ì—리트리아, 나í¬íŒŒ" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "ì—티오피아, 비르" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "유럽 ê³µë™ì²´ 회ì›êµ­, 유로" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "피지, 달러" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "í¬í´ëžœë“œ 섬(ë§ë¹„나스), 파운드" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "ì˜êµ­, 파운드" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "그루지아, ë¼ë¦¬" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "ê±´ì§€, 파운드" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "가나, 세디" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "지브롤터, 파운드" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "ê°ë¹„ì•„, 달ë¼ì‹œ" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "기니, 프랑í¬" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "과테ë§ë¼, 케트살" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "ê°€ì´ì•„나, 달러" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "í™ì½©, 달러" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "온ë‘ë¼ìФ, 렘피ë¼" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "í¬ë¡œì•„í‹°ì•„, 쿠나" + +#: goffice/utils/formats.c:448 +#, fuzzy +msgid "Haiti, Gourdes" +msgstr "하ì´í‹°, " + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "í—가리, í¬ë¦°" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "ì¸ë„네시아, 루피아" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "ì´ìФë¼ì—˜, 뉴 쇄켈" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "만섬, 파운드" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "ì¸ë„, 루피" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "ì´ë¼í¬, 디나르" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "ì´ëž€, 리얄" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "ì•„ì´ìŠ¬ëž€ë“œ, í¬ë¡œë‚˜" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "져지, 파운드" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "ìžë©”ì´ì¹´, 달러" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "요르단, 디나르" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "ì¼ë³¸, ì—”" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "ì¼€ëƒ, 실ë§" + +#: goffice/utils/formats.c:462 +#, fuzzy +msgid "Kyrgyzstan, Soms" +msgstr "키르지스탄, " + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "캄보디아, 리엘" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "코모로스, 프랑í¬" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "한국 (ë¶í•œ), ì›" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "한국 (남한), ì›" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "쿠웨ì´íЏ, 디나르" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "ì¼€ì´ë§Œ 섬, 달러" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "ì¹´ìží스탄, í…ì§€" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "ë¼ì˜¤ìФ, ë‚" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "레바논, 파운드" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "스리랑카, 루피" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "ë¼ì´ë² ë¦¬ì•„, 달러" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "레소토, 몰로티" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "리투아니아, 리타스" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "ë¼íŠ¸ë¹„ì•„, ë¼ì¸ " + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "리비아, 디나르" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "모로코, ë”히람" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "몰ë„ë°”, 레우" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "마다가스카르, ë§ë¼ê°€ì‹œ 프랑" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "마케ë„니아, ë°ë‚˜ë¥´" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "미얀마 (버마), 차트" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "몽골, 투그릭" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "마카오, 파타가" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "모리타니, 우기야" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "몰타, 리ë¼" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "모리셔스, 루피" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "몰디브 (몰디브 섬), 루피아" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "ë§ë¼ìœ„, ê³¼ì³" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "멕시코, 페소" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "ë§ë ˆì´ì‹œì•„, ë§ê¸°íЏ" + +#: goffice/utils/formats.c:492 +#, fuzzy +msgid "Mozambique, Meticais" +msgstr "모잠비í¬, " + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "나미비아, 달러" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "나ì´ì§€ë¦¬ì•„, 나ì´ë¼" + +#: goffice/utils/formats.c:495 +#, fuzzy +msgid "Nicaragua, Gold Cordobas" +msgstr "니카ë¼ê³¼, " + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "노르웨ì´, í¬ë¡œë„¤" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "네팔, 네팔 루피" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "뉴질랜드, 달러" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "오만, 리얄" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "바나마, 발보아" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "페루, 누ì—보솔" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "파푸아 뉴기니, 키나" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "필리핀, 페소" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "파키스탄, 루피" + +#: goffice/utils/formats.c:505 +#, fuzzy +msgid "Poland, Zlotys" +msgstr "í´ëž€ë“œ, " + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "파ë¼ê³¼ì´, 구아ë¼ë‹ˆ" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "카타르, 리얄" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "루마니아, 레우" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "러시아, 루블" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "르완다, 르완다 프랑í¬" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "사우디 ì•„ë¼ë¹„ì•„, 리얄" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "솔로몬 ì œë„, 달러" + +#: goffice/utils/formats.c:513 +#, fuzzy +msgid "Seychelles, Rupees" +msgstr "세ì´ì²¼ìФ, 루피" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "수단, 디나르" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "스웨ë´, í¬ë¡œë‚˜" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "싱가í´, 달러" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "세ì¸íЏ 헬레나, 파운드" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "슬로베니아, 토ë¼ë¥´" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "슬로바키아, 코루나" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "시ì—ë¼ë¦¬ì˜¨, 리온" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "소ë§ë¦¬ì•„, 실ë§" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "수리남, 길ë”" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "ìƒíˆ¬ë©”프린시페, ë„브ë¼" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "엘살바ë„르, 콜론" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "시리아, 파운드" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "스와질랜드, 리랑기니" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "타ì´, 바트" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "타지키스탄, 루블" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "투르í¬ë©”니스탄, 마나트" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "튀니지, 디나르" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "통가, 파앙가" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "터키, 리ë¼" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "트리니나드토바고, 달러" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "투발루, 투발루 달러" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "대만, 대만 달러" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "탄ìžë‹ˆì•„, 실ë§" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "ìš°í¬ë¼ë‹ˆì•„, 린비아" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "우간다, 실ë§" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "미국, 달러" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "우루과ì´, 페소" + +#: goffice/utils/formats.c:542 +#, fuzzy +msgid "Uzbekistan, Sums" +msgstr "우즈베키스탄, " + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "베네수엘ë¼, 볼리바" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "베트남, ë™" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "바투아누, 바투" + +#: goffice/utils/formats.c:546 +#, fuzzy +msgid "Samoa, Tala" +msgstr "사모아, " + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "ì€í™”, 온스" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "금화, 온스" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "ë™ìºë¦¬ë¹„안 달러" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "êµ­ì œ 통화 기금 (IMF) 특수 발행권" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +#, fuzzy +msgid "Palladium, Ounces" +msgstr "팔ë¼ë“ 온스" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "백금화, 온스" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "예멘, 리얄" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "유고슬ë¼ë¹„ì•„, 뉴 디나르" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "남아프리카 공화국, 랜드" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "잠비아, ê³¼ì³" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "ì§ë°”브웨, ì§ë°”브웨 달러" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "ì—†ìŒ" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "채움" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "ìžë™" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "ì—†ìŒ" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "최소값" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "범위" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "파ì¼/" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "첨ë„" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "ë§í¬ 붙여 넣기" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "3ì›”" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% 회색" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% 회색" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% 회색" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% 회색" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% 회색" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "수í‰ì„ " + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "수ì§ì„ " + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "역대ê°ì„ " + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "대ê°ì„ " + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "ëŒ€ê° ì§êµí‰í–‰ì„ " + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "êµµì€ ëŒ€ê° ì§êµí‰í–‰ì„ " + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "가는 수í‰ì„ " + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "가는 수ì§ì„ " + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "가는 역대ê°ì„ " + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "가는 대ê°ì„ " + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "가는 ìˆ˜í‰ ì§êµí‰í–‰ì„ " + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "가는 ì—­ëŒ€ê° ì§êµí‰í–‰ì„ " + +#: goffice/utils/go-pattern.c:113 +#, fuzzy +msgid "Foreground Solid" +msgstr "ë°°ê²½ 색" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "ìž‘ì€ ì›" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "ë°˜ì›" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "í° ì›" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "ë²½ëŒ" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "꼬리표" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "ê°’" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "줄 ë¶„ì„ ì˜¤ë¥˜" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "그래프(_G)..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "플롯 모드" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "플롯 모드" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "í¼ì„¼íЏ(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3ì°¨ì› ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "ë”하기" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "ë”하기" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "막대형" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "ì—´" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ì„ " + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "ì¸ì‡„í•  제목" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "ì„ " + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "í¼ì„¼íЏ(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "í¼ì„¼íЏ(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "í¼ì„¼íЏ(_P)" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "í¼ì„¼íЏ(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "ì—´ 지움" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "í¼ì„¼íЏ(_P)" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "기본 í•´ì„기" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "플롯 모드" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "ì—´ì‡ ê¸€ì´ í‹€ë ¸ìŠµë‹ˆë‹¤" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "플롯 모드" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "플롯 모드" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "플롯 모드" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "줄 ë¶„ì„ ì˜¤ë¥˜" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "%s 파ì¼ì„ ìƒì„±í•  수 없습니다\n" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "기본 í•´ì„기" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "플롯 모드" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "ì—†ìŒ" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "구분ìž:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "지움(_D)" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "구분ìž:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "범주" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3ì°¨ì› ì›í˜•" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3ì°¨ì› ìª¼ê°œì§„ ì›í˜•" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "곱하기" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "다중 ì›í†µí˜•" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +#, fuzzy +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "쪼개진 ì›í˜• ê°ê°ì˜ 비율" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +#, fuzzy +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "3ì°¨ì› ì›í˜• ê°ê°ì˜ 비율" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "3ì°¨ì› ì›í˜• ê°ê°ì˜ 비율" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "3ì°¨ì› ìª¼ê°œì§„ ì›í˜• ê°ê°ì˜ 비율" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "쪼개진 ì›í˜• ê°ê°ì˜ 비율" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "ê°ê°ì˜ 비율" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "파ì´" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "범위" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "나누기" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "나누기" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +#, fuzzy +msgid "Default pie types" +msgstr "기본 í•´ì„기" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "플롯 모드" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "플롯 모드" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "í¼ì„¼íЏ(_C)" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "표준 ì—러" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "기본 í•´ì„기" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "줄 ë¶„ì„ ì˜¤ë¥˜" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "모든 숫ìž" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "개수" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "ì¸ì‡„í•  제목" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "ì •ë ¬" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "줄 ë¶„ì„ ì˜¤ë¥˜" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "ì •ë ¬" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "ì •ë ¬" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "매개변수" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "ì •ë ¬" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "플롯 모드" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "청색" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "청색" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "줄 ë¶„ì„ ì˜¤ë¥˜" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "줄 ë¶„ì„ ì˜¤ë¥˜" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "ëˆ„ì  ë§‰ëŒ€í˜•" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ì„ " + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ì„ " + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/lv.po b/lib/goffice-0.0.4/po/lv.po new file mode 100644 index 0000000000..262158b206 --- /dev/null +++ b/lib/goffice-0.0.4/po/lv.po @@ -0,0 +1,4263 @@ +# SOME DESCRIPTIVE TITL encoding="UTF-8"E. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR.#: plugins/fn-random/functions.c:1127 +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2002-08-13 05:20GMT+0020\n" +"Last-Translator: PÄ“teris KriÅ¡jÄnis \n" +"Language-Team: Latvian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "F_ormÄts" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "" + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Python iespraudņa ielÄdÄ“tajs" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "ObjektÄ«va VÄ“rtÄ«ba" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Izlikt" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +msgid "Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "UzstÄdÄ«t Robežas" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "NezinÄma versija" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "DrukÄt" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "SlÄ“pt Detaļas" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "AutomÄtisks" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Fons" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Matrica" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "rindas" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "F_ormÄts" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Fons" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Fons" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Fons" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "LoÄ£iskÄs Funkcijas" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Ievietot..." + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "RÄdÄ«t Detaļas" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "SÅ«tÄ«t" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Izlikt" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "Tips" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "LoÄ£iskÄs Funkcijas" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Fons" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Kombo" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Iekšēja KĻŪDA" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "Izlikt" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "GrupÄ“t" + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "Grafiks%d" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nosaukums" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Tips" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Robežas" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Fons" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Tips" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Fons" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Skaitļu Teorija" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +msgid "Test de description" +msgstr "" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "teksts" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "DatubÄze" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "Apvienot..." + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Tips" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Tips" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Virkne" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dR x %dC" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Fonts" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Fons" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Kombo" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Kombo" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "Ä’na" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Apvienot..." + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "UzstÄdÄ«t Fona KrÄsu" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "Tips" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Fons" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Funkcija" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "Kombo" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Kombo" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "Izlikt" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_RekvizÄ«ti..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Apvienot..." + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "Statuss" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "DrukÄt" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "virkne" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "PÄratsaukt" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "GrupÄ“t" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "SlÄ«praksts" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "VairÄk" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "virkne" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "VÄ“rtÄ«ba" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "virkne" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "PÄratsaukt" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "VairÄk" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "virkne" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "šūna" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "Noņemt robežas" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Novietojums pa labi" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Novietojums pa labi" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Novietojums pa labi" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Ä’na" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Funkcija" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Izlikt" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Izlikt" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Ievietot attÄ“lu" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "SaglabÄt Visu" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "Izlikt" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "ParesninÄts slÄ«praksts" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "SlÄ«praksts" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "Procenti" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "Funkcija" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "teksts" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "LietotÄjs" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "Skaitļu Teorija" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "FormÄts kÄ Nauda" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Skaitļu Teorija" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "DrukÄÅ¡anas pirmsapskate" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "virkne" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "LietotÄjs" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "PaÅ¡reizÄ“jais _datums" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Iekšēja KĻŪDA" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "" + +#: goffice/utils/format.c:758 +#, fuzzy +msgid "Blue" +msgstr "VÄ“rtÄ«ba" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "" + +#: goffice/utils/format.c:762 +#, fuzzy +msgid "Red" +msgstr "PÄratsaukt" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "" + +#: goffice/utils/format.c:764 +#, fuzzy +msgid "Yellow" +msgstr "šūna" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "AutomÄtisks" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Nauda" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "Izlikt" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "rindas" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Izlikt" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "Matrica" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Kļūda parsÄ“jot lÄ«niju" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "Tips" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "Tips" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "Procenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "Adrese" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "DrukÄt" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "Procenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "Procenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "Izveidot lÄ«niju" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "Procenti" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "Izveidot lÄ«niju" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "Izveidot lÄ«niju" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "_Ievietot Kolonnu(as)" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "UzstÄdÄ«t Fontu IzmÄ“ru" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Tips" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Nepareiza parole" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Tips" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Tips" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Tips" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Kļūda parsÄ“jot lÄ«niju" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "UzstÄdÄ«t Fontu IzmÄ“ru" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "Tips" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Nekas" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "MeklÄ“ kÄdu tekstu" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Fonta IzmÄ“rs" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "Cena" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Cena" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Virkne" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Virkne" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "Tips" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Tips" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Procenti" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "UzstÄdÄ«t Fontu IzmÄ“ru" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Kļūda parsÄ“jot lÄ«niju" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Gnumeric " + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "CentrÄ“t" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Statuss" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Kļūda parsÄ“jot lÄ«niju" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Skaitļu Teorija" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Skaitļu Teorija" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "Tips" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "VÄ“rtÄ«ba" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "VÄ“rtÄ«ba" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Kļūda parsÄ“jot lÄ«niju" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Kļūda parsÄ“jot lÄ«niju" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "DrukÄt" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "DrukÄt" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "DrukÄt" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/ml.po b/lib/goffice-0.0.4/po/ml.po new file mode 100644 index 0000000000..ac4404bb7d --- /dev/null +++ b/lib/goffice-0.0.4/po/ml.po @@ -0,0 +1,4321 @@ +# SOME DESCRIPTIVE TITL encoding="UTF-8"E. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FSF-India , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version:gnumeric.HEAD\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-07-05 10:29+0530\n" +"Last-Translator: FSF-India \n" +"Language-Team: Malayalam \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "വസàµà´¤àµ..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "രചനയിലൠനിനàµà´¨àµ സംയോജനി വിവരങàµà´™à´³àµ വായികàµà´•ാനൠകഴിയàµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "അറിയാതàµà´¤ പേ‌‌ര‌àµ" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "പിനàµà´¤àµà´£â€Œà´¯â€Œàµà´•àµà´•à´ªàµà´ªàµ†à´Ÿà´¾à´¤àµà´¤ ലോഡ‌രൠതരം \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "(\"%s\") സംയോജിനി വിവരരചന വായികàµà´•ാനൠകഴിയàµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "à´°à´šà´¨ \"%s\" സാധàµà´¤à´¯àµà´³àµà´³ ഒരൠസംയോജിനി വിവരരചനയലàµà´²." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "അറിയാതàµà´¤ സംയോജിനിനാമം" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "സംയോജിനി ലോഡ‌രൠനിറയ‌àµà´•àµà´•ാനàµâ€Œ à´•à´´à´¿à´¯àµà´¨àµà´¨à´¿à´²àµà´²" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "à´–à´£àµà´¡à´°à´šà´¨ നാമം നലàµà´•ിയിടàµà´Ÿà´¿à´²àµà´²." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "à´–à´£àµà´¡à´°à´šà´¨ \"%s\" à´¤àµà´±à´•àµà´•ാനൠകഴിയàµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "à´–à´£àµà´¡à´°à´šà´¨ \"%s\" സാധàµà´¤à´¯à´¿à´²àµà´²à´¾à´¤àµà´¤ à´•àµà´°à´®àµ€à´•രണമാണ‌àµâ€Œ." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "\"%s\"‌ ഖണ‌àµà´¡à´°à´šà´¨ അടയ‌àµà´•àµà´•ാനàµâ€Œ à´•à´´à´¿à´¯àµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "രചനയിലൠ\"%s\" à´Žà´¨àµà´¨ à´ªàµà´°à´µâ€Œà´°àµà´¤àµà´¤à´¨à´‚ ഉളàµâ€Œà´•àµà´•ൊളàµà´³àµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "രചനയിലൠ\"%s\" à´Žà´¨àµà´¨ à´ªàµà´°à´µâ€Œà´°àµà´¤àµà´¤à´¨à´‚ ഉളàµâ€Œà´•àµà´•ൊളàµà´³àµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "സാരàµâ€à´µà´¤àµà´°à´¿à´•മായ" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "à´°à´šà´¨ വായികàµà´•àµà´®àµà´ªàµ‹à´³àµâ€Œ തെറàµà´±àµà´¨àµà´¨àµ." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "രചനാനാമം: %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "à´°à´šà´¨ സംരകàµà´·à´¿à´•àµà´•àµà´®àµà´ªàµ‹à´³àµ തെറàµà´±àµà´¨àµà´¨àµ." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "സംയോജനി പാലകനàµâ€Œ" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "അറിയാതàµà´¤ സേവന തരം: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "രചനാ സൂചിക വായികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പരാജയം" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "സൂതàµà´°à´µà´¾à´•àµà´¯à´™àµà´™à´³àµâ€Œ" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "പൂ‌‌രàµà´£à´¸à´‚à´–àµà´¯" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "തെരയàµà´•" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "à´¸àµà´¥à´²à´¶àµˆà´²à´¿" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "à´•àµà´°à´®àµ€à´•രണം" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "à´…à´•àµà´·à´°à´™àµà´™à´³àµ" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "വിയàµà´•àµà´¤à´®à´¾à´•àµà´•àµà´•" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "വിയàµà´•àµà´¤à´®à´¾à´•àµà´•àµà´•" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "വരി‌" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "à´¯àµà´•àµà´¤à´¿à´¯àµà´•àµà´¤à´®à´¾à´¯" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "ലോഗരിതം" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "വിശദാംശങàµà´™à´³àµ കാണികàµà´•àµà´•" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "തനിയെയàµà´³àµà´³" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "വിഭാഗം" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "പശàµà´šà´¾à´¤àµà´¤à´²à´‚" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "à´à´±àµà´±à´µàµà´‚ à´•àµà´±à´žàµà´ž" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "പരമാവധി" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "à´…à´Ÿà´¯àµâ€à´•àµà´•àµà´•" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "à´•àµà´°à´®àµ€à´•രണം" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "ലിഖിതം" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "വെളàµà´³à´¿à´¯à´¾à´´àµà´š" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "വെളàµà´³à´¿à´¯à´¾à´´àµà´š" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "മാതൃക" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "മാതൃക" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "മാതൃക" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "à´¸àµà´¥à´¾à´¨ നിരàµà´£àµà´£à´¯à´‚" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "ഉളàµâ€Œà´¤à´²à´‚" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "ബാഹàµà´¯à´°àµ‡à´–" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "ഉയരം" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "ഉളàµâ€Œà´¤à´²à´‚" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "ഇടയàµà´•àµà´•ൠചേരàµà´•àµà´•àµà´•" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "വരി" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "ബാഹàµà´¯à´°àµ‡à´–" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "ലിഖിതങàµà´™à´³àµ" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "തരം:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "തലകàµà´•െടàµà´Ÿàµ:" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "വെളàµà´³à´¿à´¯à´¾à´´àµà´š" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "ഉയരം" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "വീതി" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "പിശകൠസൂചനാധàµà´µà´¨à´¿ " + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "മാതൃക" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "നിറം:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "à´¸àµà´¥à´¿à´°à´µàµ€à´¤à´¿" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "à´’à´ªàµà´ªà´‚:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "à´—àµà´°à´¾à´«àµ à´—àµà´°àµ" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "പേരâ€àµ" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "തലകàµà´•àµà´±à´¿à´ªàµà´ªàµ യഥേഷàµà´Ÿà´®à´¾à´•àµà´•àµà´•" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "ഇടയàµà´•àµà´•ൠചേരàµà´•àµà´•àµà´•" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr " തരം" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "à´…à´°à´¿à´•àµâ€Œ" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "à´¸àµà´¥à´¾à´¨ നിരàµà´£àµà´£à´¯à´‚" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "മാതൃക" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "മാതൃക" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"കാണികàµà´•àµà´•\n" +"മാതൃക" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "വിവരണം" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "വാചകം" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "വസàµà´¤àµà´¤" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr " തരം" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "ഉളàµâ€Œà´¤à´²à´‚" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "വാകàµà´¯à´™àµà´™à´³àµ" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "ബിനàµà´¦àµ" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "à´…à´•àµà´·à´°à´°àµ‚പം" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "രീതി" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "മാതൃക" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "മാതൃക" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "à´¸àµà´¥à´¾à´¨ നിരàµà´£àµà´£à´¯à´‚" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "നിറം:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "താഴെയàµà´³àµà´³ à´ªàµà´±à´‚വരകളàµâ€Œ" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "ഉദàµà´¦àµ‡à´¶àµà´¯à´‚:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "വലിപàµà´ªà´‚:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "രീതി" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "തരം:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "പശàµà´šà´¾à´¤àµà´¤à´²à´‚" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "ദിശ:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "ഉം" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "à´µâ€à´°àµà´£àµà´£â€à´™àµà´™à´³àµâ€Œ:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "ചേരàµà´šàµà´š:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "à´ªàµà´°àµ‹à´¤à´²à´‚" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "മാതൃക" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "തെരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "വലിപàµà´ªà´‚:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "അവസàµà´¥" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "വലതàµ" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "à´¶àµà´°àµ‡à´£à´¿" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "അറിയികàµà´•à´²àµ:" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "à´¸àµà´µà´¤àµ‡" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "അറബികàµ" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "ബാളàµà´Ÿàµà´Ÿà´¿à´•àµ" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "മധàµà´¯ യൂറോപàµà´¯à´¨àµ" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "ചൈനീസàµâ€Œ" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "സിറിലികàµ" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "à´—àµà´°àµ€à´•àµà´•àµ" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "ഹീബàµà´°â€àµ" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "ഇനàµâ€Œà´¡àµà´¯à´¨àµâ€Œ" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "ജാപàµà´ªà´¨à´¿à´¸àµ" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "കൊറിയനàµ" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "à´¤àµà´°àµà´•àµà´•à´¿à´·àµ" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "à´¯àµà´£à´¿à´•ോഡàµ" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "വിയറàµà´°àµà´¨à´¾à´®à´¿à´¸àµ" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "പടിഞàµà´žà´¾à´±à´¨àµâ€Œ" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "മറàµà´±àµà´³àµà´³à´µ" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "അറബികàµ(IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "അറബികàµ(IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "അറബികàµ(ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "അറബികàµ(ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "അറബികàµ(ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "അറബികàµ(മാകൠഅരബികàµ)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "അറബികàµ(Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "à´…à´°àµâ€Œà´®àµ‡à´¨à´¿à´¯à´¨àµâ€Œ(ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "ബാലàµâ€Œà´Ÿàµà´°à´¿à´•àµ(ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "ബാലàµâ€Œà´Ÿàµà´°à´¿à´•àµ(ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "ബാലàµâ€Œà´Ÿàµà´°à´¿à´•àµ(Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "സെലàµâ€Œà´Ÿà´¿à´•àµ(ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "സെനàµâ€Œà´Ÿàµà´°à´²àµ യൂറോപàµà´ªà´¿à´¯à´¨àµ(IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "സെനàµâ€Œà´Ÿàµà´°à´²àµ യൂറോപàµà´ªà´¿à´¯à´¨àµ(ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "സെനàµâ€Œà´Ÿàµà´°à´²àµ യൂറോപàµà´ªà´¿à´¯à´¨àµ" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "സെനàµâ€Œà´Ÿàµà´°à´²àµ യൂറോപàµà´ªà´¿à´¯à´¨àµ" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "ചൈനീസൠലളിതം/സിംപàµà´³à´¿à´«àµˆà´¡àµ" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "ചൈനീസൠലളിതം/സിംപàµà´³à´¿à´«àµˆà´¡àµ" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "ചൈനീസൠലളിതം/സിംപàµà´³à´¿à´«àµˆà´¡àµ" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "ചൈനീസൠലളിതം/സിംപàµà´³à´¿à´«àµˆà´¡àµ" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "ചൈനീസൠലളിതം/സിംപàµà´³à´¿à´«àµˆà´¡àµ" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "ചൈനീസൠടàµà´±à´¡à´¿à´·à´£à´²àµâ€Œ/പരനàµà´ªà´°à´¾à´—തം" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "ചൈനീസൠടàµà´±à´¡à´¿à´·à´£à´²àµâ€Œ/പരനàµà´ªà´°à´¾à´—തം" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "ചൈനീസൠടàµà´±à´¡à´¿à´·à´£à´²àµâ€Œ/പരനàµà´ªà´°à´¾à´—തം" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "സിറിലികàµ" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "സിറിലികàµ" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "ജോരàµâ€Œà´œàµà´œà´¿à´¯à´¨àµ" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "à´—àµà´°àµ€à´•àµà´•àµ(ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "à´—àµà´°àµ€à´•àµà´•ൠ(മാകൠഗàµà´°àµ€à´•àµà´•àµ)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "à´—àµà´°àµ€à´•àµà´•ൠ(ജാലകം-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "à´—àµà´œà´±à´¾à´¤àµà´¤à´¿(മാകൠഗàµà´œà´±à´¾à´¤àµà´¤à´¿)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "à´—àµà´°àµà´®àµà´–à´¿ (മാകൠഗàµà´°àµà´®àµà´–à´¿)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "ഹീബàµà´°àµ(IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "ഹീബàµà´°àµ(ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "ഹീബàµà´°àµ(ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "ഹീബàµà´°àµ (മാകൠഹീബàµà´°àµ)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "ഹീബàµà´°àµ‚ (ജാലകം-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "ഹിനàµà´¦à´¿ (മാകൠദേവനാഗിരി)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "ജാപàµà´ªà´¨à´¿à´¸àµ(EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "ജാപàµà´ªà´¨à´¿à´¸àµ(ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "ജാപàµà´ªà´¨à´¿à´¸àµ(Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "കൊറിയനàµâ€Œ(EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "കൊറിയനàµâ€Œ(ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "കൊറിയനàµâ€Œ(JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "കൊറിയനàµ" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "നോരàµâ€Œà´¡à´¿à´•àµ(ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "റൊമേനിയനàµâ€Œ(മാകൠറൊമേനിയനàµâ€Œ)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "റൊമേനിയനàµ(ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "ദകàµà´·à´¿à´£/സൌതàµà´¤àµ യൂറോപàµà´¯à´¨àµâ€Œ" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "തായàµ(TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "à´Ÿà´°àµâ€Œà´•àµà´•à´¿à´·àµ(IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "à´Ÿà´°àµâ€Œà´•àµà´•à´¿à´·àµ(ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "à´Ÿà´°àµâ€Œà´•àµà´•à´¿à´·àµ(MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "à´Ÿà´°àµâ€Œà´¿à´·àµ(ജാലകം-1245)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "à´¯àµà´£à´¿à´•ോഡàµ" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "à´¯àµà´£à´¿à´•ോഡàµ" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "ഉപയോകàµà´¤àµƒ നാമം" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "വിയറàµà´°àµà´¨à´¾à´®à´¿à´¸àµ" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "വിയറàµà´°àµà´¨à´¾à´®à´¿à´¸àµ" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "വിയറàµà´°àµà´¨à´¾à´®à´¿à´¸àµ" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "പടിഞàµà´žà´¾à´±à´¨àµ (മാകàµâ€Œà´±àµ‹à´®à´¨àµâ€Œ)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "അയഞàµà´ž" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "തിങàµà´•ളാഴàµà´š" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "പരിധി" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "à´¸àµà´¥àµ‚ലം" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "നീല" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "à´¶àµà´°àµ‡à´£à´¿" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "ചെമപàµà´ªàµ" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "പരിധി" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "സമയം" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "à´¶àµà´°àµ‡à´£à´¿" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "മജനàµà´¤" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "മഞàµà´ž" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "പചàµà´š" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "സിയനàµ" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "ഹൈപàµà´ªâ€Œà´°àµà´²à´¿à´‚à´—àµ" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "വലതൠകàµà´°à´®àµ€à´•രണം" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "വലതൠകàµà´°à´®àµ€à´•രണം" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "വലതൠകàµà´°à´®àµ€à´•രണം" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "ധവളം" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "മൂലàµà´¯à´®à´¨àµà´¸à´°à´¿à´šàµà´šàµ" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "യഥേഷàµà´Ÿà´‚" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "പാദകàµà´•àµà´±à´¿à´ªàµà´ªàµ യഥേഷàµà´Ÿà´®à´¾à´•àµà´•àµà´•" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "à´ªàµà´°à´¤à´¿à´¬à´¿à´‚ബതരം" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "à´¸àµà´¥à´¾à´¨ നിരàµà´£àµà´£à´¯à´‚" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +#, fuzzy +msgid "Dock the toolbar" +msgstr "à´Žà´™àµà´™à´¨àµ† ഉപകരണപàµà´ªà´Ÿàµà´Ÿ വരയ‌àµà´•àµà´•ാം" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "à´Žà´™àµà´™à´¨àµ† ഉപകരണപàµà´ªà´Ÿàµà´Ÿ വരയ‌àµà´•àµà´•ാം" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "'%s'à´°à´šà´¨ à´¤àµà´±â€à´•àµà´•ാനàµâ€Œ à´•à´´à´¿à´¯àµà´¨àµà´¨à´¿à´²àµà´²." + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "ശേഖരം" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "à´šà´¿à´¤àµà´°à´‚..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "à´®àµà´´àµà´µà´¨àµâ€Œ നിരകളàµà´‚ തെരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "സംരംകàµà´·à´¿à´•àµà´•àµà´•" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"à´ªàµà´°à´µâ€Œà´°àµà´¤àµà´¤à´¿à´ªàµà´¸àµà´¤à´•à´‚ %s നിലനിലàµâ€Œà´•àµà´•àµà´¨àµà´¨àµà´£àµà´Ÿàµ.\n" +" മാറàµà´±à´¿à´¯àµ†à´´àµà´¤à´£àµ‹?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "സാധാരണ" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "à´¸àµà´¥àµ‚ലം" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "à´šà´°à´¿à´žàµà´ž" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "à´…à´•àµà´·à´°à´¶àµˆà´²à´¿:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "à´…à´•àµà´·à´°à´°àµ‚പം:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "തിരനോടàµà´Ÿà´‚" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "വലിപàµà´ªà´‚:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "സംഖàµà´¯à´•à´³àµâ€Œ" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "നാണയം" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "കണകàµà´•െഴàµà´¤àµà´¤àµ" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "തിയàµà´¯à´¤à´¿" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "സമയം" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "ശതമാനം" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "ചെറàµà´­à´¾à´—à´‚" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "ശാസàµà´¤àµà´°àµ€à´¯à´®à´¾à´¯" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "വാചകം" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "സവിശേഷം" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "യഥേഷàµà´Ÿà´‚" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "à´‹à´£ സംഖàµà´¯à´¾à´°àµ€à´¤à´¿" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "സംഖàµà´¯à´¾à´°àµ€à´¤à´¿à´•à´³àµâ€Œ" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "വിഭാഗം:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "ദശാംശ à´¸àµà´¥à´¾à´¨à´™àµà´™à´³àµâ€Œ:‌" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "ബാഹàµà´¯â€Œà´°àµ‡à´–à´•à´³àµâ€Œ à´ªàµà´°à´¦à´°àµâ€Œà´¶à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "à´•àµà´°à´®àµ€à´•രണം:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "à´‹à´£ സംഖàµà´¯à´¾à´°àµ€à´¤à´¿" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "തിരനോടàµà´Ÿà´‚" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "അടയാളം:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "à´•àµà´°à´®àµ€à´•രണം:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "1000à´™àµà´™à´³àµâ€Œà´•àµà´•ൠവേ‌‌രàµà´¤à´¿à´°à´¿à´µàµ ഉപയോഗികàµà´•àµà´•" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "പടിഞàµà´žà´¾à´±à´¨àµâ€Œ" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "മധàµà´¯ യൂറോപàµà´¯à´¨àµ" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "സിഗàµà´®" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "അറബികàµ" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "à´“à´¸àµâ€Œà´Ÿàµà´°àµ‡à´²à´¿à´¯, ഡോളേഴàµà´¸àµ" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +#, fuzzy +msgid "United Arab Emirates (ar_AE)" +msgstr "à´¯àµà´£àµˆà´±àµà´±à´¡àµ അറബൠഎമിറൈറàµà´±àµà´¸àµ, ദിറം" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "ബഹറിനàµ, ദിനാഴàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "ജോ‌രàµà´¦à´¾à´¨àµ, ഡിനാരàµâ€Œà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "à´•àµà´µàµˆà´±àµà´±àµ, ദിനാരàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "ലിബിയ, ദിനാരàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "സൌദി അറേബàµà´¯, റിയാലàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:123 +#, fuzzy +msgid "Sudan (ar_SD)" +msgstr "à´¸àµà´¡à´¾à´¨àµ, ദിനാരàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "à´Ÿàµà´£àµ€à´·àµà´¯, ദിനാരàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +#, fuzzy +msgid "Azerbaijan (az_AZ)" +msgstr "അസ‌രàµâ€Œà´¬àµˆà´œà´¾à´¨àµ, മണറàµà´±àµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "ബെലാറസàµ, റൂബിളàµà´¸àµâ€Œ" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "ബളàµâ€Œà´—േറിയ, ലവ" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "ബംഗàµà´³à´¾à´¦àµ‡à´¶àµ, ധാകàµà´•" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +#, fuzzy +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "ബോസàµà´¨à´¿à´¯ ആനàµà´¡àµ ഹെ‌രàµà´¸à´¿à´—ോവിന, à´•à´£àµâ€Œà´µâ€Œà´°àµà´Ÿàµà´Ÿà´¿à´¬à´¿à´³àµ മാ‌രàµà´•àµà´•" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "ചെകàµà´•ൠറിപàµà´ªà´¬àµà´³à´¿à´•àµà´•àµ, കൊറൂണി" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +#, fuzzy +msgid "Denmark (da_DK)" +msgstr "ഡെനàµà´®à´¾à´°àµà´•àµà´•àµ, റോണരàµ" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +#, fuzzy +msgid "Switzerland/German (de_CH)" +msgstr "à´¸àµà´µà´¿à´±àµà´±àµà´¸â€Œà´°àµà´²à´¾à´¨àµà´¡àµ, à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "à´¨àµà´¯â€Œàµ‚സിലാനàµà´±àµ, ഡോളേഴàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "ഫിലിപàµà´ªàµˆà´¨àµâ€Œà´¸àµ, പെസോസàµ" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "à´…à´°àµâ€à´œà´¨àµà´±àµ€à´¨, പെസോസàµ" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "ചിലി, പെസോസàµ" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "കൊളംബിയ, പെസോസàµâ€Œ" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "കൊസàµà´±àµà´±à´±à´¿à´•àµà´•, കോളോണàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "ഡൊമിനിയàµâ€Œà´•àµà´•നൠറിപàµà´ªà´¬àµà´³à´¿à´•àµà´•àµ, പെസോസàµ" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "ഗോടàµà´Ÿà´¿à´®à´¾à´²" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "ഹോണàµâ€Œà´¡àµ‚റാസàµ, ലംപിരാസàµ" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "മെകàµà´¸à´¿à´•àµà´•ോ, പെസോസàµ" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "à´Žà´²àµâ€Œ സാലàµâ€Œà´µà´¡àµ‹à´°àµ, കോളോണàµà´¸àµâ€Œ" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +#, fuzzy +msgid "Switzerland/French (fr_CH)" +msgstr "à´¸àµà´µà´¿à´±àµà´±àµà´¸â€Œà´°àµà´²à´¾à´¨àµà´¡àµ, à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +#, fuzzy +msgid "Armenia (hy_AM)" +msgstr "à´…à´°àµâ€Œà´®àµ‡à´¨à´¿à´¯à´¨àµâ€Œ(ARMSCII-8)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "ഇനàµâ€Œà´¡àµ‹à´¨àµ‡à´·àµà´¯" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +#, fuzzy +msgid "Japan (ja_JP)" +msgstr "ജാപàµà´ªà´¨à´¿à´¸àµ(EUC-JP)" + +#: goffice/gtk/go-locale-sel.c:203 +#, fuzzy +msgid "Georgia (ka_GE)" +msgstr "ജോരàµâ€Œà´œàµà´œà´¿à´¯à´¨àµ" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +#, fuzzy +msgid "Korea (ko_KR)" +msgstr "കൊറിയനàµâ€Œ(EUC-KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +#, fuzzy +msgid "Lithuania (lt_LT)" +msgstr "ലിതàµà´µà´¾à´¨à´¿à´¯, ലിറàµà´±à´¾à´¯àµ" + +#: goffice/gtk/go-locale-sel.c:208 +#, fuzzy +msgid "Latvia (lv_LV)" +msgstr "ലാതàµâ€Œà´µà´¿à´¯,ലാറàµà´±à´¿" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "à´¸àµà´³àµ‹à´µà´¾à´•àµà´•à´¿à´¯, കൊറൂണി" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "à´¸àµà´²àµ‹à´µàµ€à´¨à´¿à´¯, ഡോളേഴàµà´¸àµ" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "à´…à´²àµâ€Œà´¬àµ‡à´¨à´¿à´¯. ലേകàµà´•àµ" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "താജàµà´•à´¿à´¸àµà´¥à´¾à´¨àµ, റൂബിളàµà´¸àµâ€Œ" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "തായàµâ€Œà´²à´¨àµà´±àµ, ബാഹàµà´Ÿàµà´Ÿàµ" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "പാകിസàµà´¥à´¾à´¨àµ, à´±àµà´ªàµà´ªàµ€à´¸àµâ€Œ" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +#, fuzzy +msgid "Vietnam (vi_VN)" +msgstr "വിയറàµà´°àµà´¨à´¾à´®à´¿à´¸àµ" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "സജീവ മൂലàµà´¯à´‚:‌" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "നമàµà´ªà´°àµâ€Œ" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "ആനàµà´¤à´°à´¿à´• വിടവàµ" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*ഞായരàµâ€" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*തിങàµà´•à´³àµ" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*ചൊവàµà´µ" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*à´¬àµà´§à´¨àµ" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*à´µàµà´¯à´¾à´´à´‚" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*വെളàµà´³à´¿" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*ശനി" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ഞായറാഴàµà´š" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "തിങàµà´•ളാഴàµà´š" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "ചൊവàµà´µà´¾à´´àµà´š" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "à´¬àµà´§à´¨à´¾à´´àµà´š" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "à´µàµà´¯à´¾à´´à´¾à´´àµà´š" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "വെളàµà´³à´¿à´¯à´¾à´´àµà´š" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "ശനിയാഴàµà´š" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*ജനàµà´µà´°à´¿â€Œ" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*ഫെബàµà´°â€Œàµà´µà´°à´¿" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*മാ‌രàµà´šàµà´šàµ" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*à´à´ªàµà´°à´¿à´²àµ" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*മെയàµ" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*ജൂണàµ" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*ജൂലൈ" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*ആഗസàµà´±àµà´±àµ" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*സെപàµà´¤à´‚ബ‌രàµ" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*à´’à´•àµà´Ÿàµ‹à´¬â€Œà´°àµ" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*നവംബ‌രàµ" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*ഡിസംബ‌രàµ" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "ജനàµà´µà´°à´¿" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "ഫെബàµà´°àµà´µà´°à´¿" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "മാ‌രàµà´šàµà´šàµ" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "à´à´ªàµà´°à´¿à´²àµ" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "മെയàµ" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "ജൂണàµ" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "ജൂലൈ" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ആഗസàµà´¤àµ" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "സെപàµà´¤à´‚ബ‌രàµ" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "à´’à´•àµâ€Œà´Ÿàµ‹à´¬â€Œà´°àµ" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "നവംബ‌രàµâ€Œ" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "ഡിസംബ‌രàµ" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "സതàµà´¯à´‚" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "അസതàµà´¯à´‚" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "à´•à´±àµà´ªàµà´ªàµ" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "നീല" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "സിയനàµ" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "പചàµà´š" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "മജനàµà´¤" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "ചെമപàµà´ªàµ" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "ധവളം" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "മഞàµà´ž" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "à´¯àµà´£àµˆà´±àµà´±à´¡àµ അറബൠഎമിറൈറàµà´±àµà´¸àµ, ദിറം" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "à´…à´«àµà´˜à´¾à´¨à´¿à´¸àµà´¥à´¾à´¨àµ, à´…à´«àµà´—ാനിസàµ" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "à´…à´²àµâ€Œà´¬àµ‡à´¨à´¿à´¯. ലേകàµà´•àµ" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "à´…à´°àµâ€à´®àµ‡à´¨à´¿à´¯, à´¡àµà´°à´¾à´‚à´¸àµ" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "നെത‌രàµà´²à´¨àµà´¡àµà´¸àµ ആനàµà´¡à´¿à´²àµà´¸àµ, à´—àµà´µà´¿à´²àµà´¡àµ‡à´´àµà´¸àµ" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "അംഗോള, വാനàµà´¸" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "à´…à´°àµâ€à´œà´¨àµà´±àµ€à´¨, പെസോസàµ" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "à´“à´¸àµâ€Œà´Ÿàµà´°àµ‡à´²à´¿à´¯, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "à´…à´±àµà´¬, à´—àµà´µà´¿à´²àµà´¡àµ‡à´´àµà´¸àµ" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "അസ‌രàµâ€Œà´¬àµˆà´œà´¾à´¨àµ, മണറàµà´±àµà´¸àµ" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "ബോസàµà´¨à´¿à´¯ ആനàµà´¡àµ ഹെ‌രàµà´¸à´¿à´—ോവിന, à´•à´£àµâ€Œà´µâ€Œà´°àµà´Ÿàµà´Ÿà´¿à´¬à´¿à´³àµ മാ‌രàµà´•àµà´•" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "ബാരàµà´¬à´¡àµ‹à´¸àµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "ബംഗàµà´³à´¾à´¦àµ‡à´¶àµ, ധാകàµà´•" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "ബളàµâ€Œà´—േറിയ, ലവ" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "ബഹറിനàµ, ദിനാഴàµà´¸àµ" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "ബറàµà´¨àµà´¡à´¿, à´«à´°àµà´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "ബെ‌രàµà´®àµà´¡, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "à´¬àµà´°â€Œàµ‚ണയൠഡാറàµà´¸àµà´¸à´²à´¾à´‚, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "ബൊളീവിയ, ബൊളിവീയനàµà´¸àµ" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "à´¬àµà´°à´¸àµ€à´²àµ, à´¬àµà´°à´¸àµ€à´²àµ റീലàµ" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "ബഹാമാസàµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "ഭൂടàµà´Ÿà´¾à´¨àµ, à´—àµà´²àµâ€Œà´Ÿàµà´°à´‚" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "ബോടàµà´¸àµà´µà´¾à´¨" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "ബെലാറസàµ, റൂബിളàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "ബെലിസàµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "à´•àµà´¯à´¾à´¨à´¡, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "à´¸àµà´µà´¿à´±àµà´±àµà´¸â€Œà´°àµà´²à´¾à´¨àµà´¡àµ, à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ചിലി, പെസോസàµ" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "ചൈന, à´¯àµà´µà´¾à´¨àµ റെനàµà´®à´¿à´¨àµà´¬à´¿" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "കൊളംബിയ, പെസോസàµâ€Œ" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "കൊസàµà´±àµà´±à´±à´¿à´•àµà´•, കോളോണàµà´¸àµ" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "à´•àµà´¯àµ‚à´¬, പെസോസàµ" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "കേപൠവെ‌രàµâ€Œà´¡àµ†, സിഡോസàµ" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "സൈപàµà´°à´¸àµ, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ചെകàµà´•ൠറിപàµà´ªà´¬àµà´³à´¿à´•àµà´•àµ, കൊറൂണി" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "ജിബൂടàµà´Ÿà´¿, à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "ഡെനàµà´®à´¾à´°àµà´•àµà´•àµ, റോണരàµ" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "ഡൊമിനിയàµâ€Œà´•àµà´•നൠറിപàµà´ªà´¬àµà´³à´¿à´•àµà´•àµ, പെസോസàµ" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "à´…à´²àµâ€Œà´œàµ€à´°à´¿à´¯, à´…à´²àµâ€Œà´œàµ€à´°à´¿à´¯ ഡിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "ഇസàµà´±àµà´±àµ‹à´¨à´¿à´¯, റൂണി" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "ഈജിപàµà´±àµà´±àµ, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "എറിടàµà´°à´¿à´¯, നാകàµà´«" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "à´Žà´¤àµà´¯àµ‹à´ªàµà´¯, ബിരàµ" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "ഫിജി, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "ഫാകàµà´•àµâ€Œà´²à´¾à´¨àµà´±àµ à´à´²à´¨àµà´±àµà´¸àµ (മാലàµâ€Œà´µà´¿à´¨à´¾à´¸àµ), പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "à´¯àµà´£àµˆà´±àµà´±à´¡àµ à´•à´¿à´‚à´—àµà´¡à´‚, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "ജോരàµâ€à´œàµà´œà´¿à´¯, ലാരി" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "ഘാന, സെഡിസàµ" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "ജിബàµà´°à´¾à´³àµâ€Œà´Ÿàµà´Ÿà´°àµ, പൌണàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "ഗാമàµà´ªà´¿à´¯, ഡലാസി" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "ഗിനിയ, à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "ഗോടàµà´Ÿà´¿à´®à´¾à´²" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "ഗയാന, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "ഹോംകോംഗàµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "ഹോണàµâ€Œà´¡àµ‚റാസàµ, ലംപിരാസàµ" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "à´•àµà´°àµŠà´¯àµ‹à´·àµà´¯à´¸ à´•àµà´¯àµ‚à´£" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "ഹെയ‌àµà´¤à´¿, ഗോരàµà´¡àµà´¸àµ" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "ഹംഗേറി, ഫോറിനàµà´±àµ" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "ഇനàµâ€Œà´¡àµ‹à´¨àµ‡à´·àµà´¯" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "ഇസàµà´°à´¾à´¯àµ‡à´²àµ, à´ªàµà´¤à´¿à´¯ ഷെകàµà´•à´²àµà´¸àµ" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "à´à´²àµ ഓഫൠമാനàµ, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "ഇനàµà´¡àµà´¯, à´±àµà´ªàµà´ªàµ€à´¸àµ" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "ഇറാഖàµ, ഡിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "ഇറാനàµ, റിയാലàµà´¸àµ" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "à´à´¸àµâ€à´²à´¾à´¨àµà´±àµ, റൊണൂ‌രàµ" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "ജെ‌രàµà´¸à´¿, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "ജമേയàµâ€Œà´•àµà´•, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "ജോ‌രàµà´¦à´¾à´¨àµ, ഡിനാരàµâ€Œà´¸àµ" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "ജാപàµà´ªà´¾à´¨àµ, യെനàµ" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "കെനിയ, à´·à´¿à´²àµà´²à´¿à´‚à´—àµà´¸àµ" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "à´•à´¿à´°àµâ€Œà´—à´¿à´¸àµà´¥à´¾à´¨àµ, സോംസàµâ€Œ" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "à´•à´®àµà´ªàµ‹à´¡à´¿à´¯, റിയാലàµà´¸àµ" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "കൊമറോസàµ, à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "വടകàµà´•നൠകൊറിയ, à´“à´£àµ" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "തെകàµà´•നൠകൊറിയ, à´“à´£àµ" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "à´•àµà´µàµˆà´±àµà´±àµ, ദിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "à´•àµà´¯à´¾à´®à´¨àµâ€Œ à´à´²à´¨àµà´±àµà´¸àµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "ഖസാകàµà´•à´¿à´¸àµà´¥à´¾à´¨àµ, ടെഞàµà´šàµâ€Œ" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "ലാവോസàµ, à´•à´¿à´ªàµà´¸àµ" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "ലെബനനàµ, പൌണàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "à´¶àµà´°àµ€à´²à´™àµà´•, à´±àµà´ªàµà´ªàµ€à´¸àµ" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "ലൈബീരിയ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "ലെസോതàµà´¤àµ‹, മാലോടàµà´Ÿà´¿" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "ലിതàµà´µà´¾à´¨à´¿à´¯, ലിറàµà´±à´¾à´¯àµ" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "ലാതàµâ€Œà´µà´¿à´¯,ലാറàµà´±à´¿" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "ലിബിയ, ദിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "മൊറോകàµà´•ോ, ദിറംസàµ" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "മോളàµâ€Œà´¡àµ‹à´µà´¾, ലയി" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "മഡഗാസàµà´•‌‌രàµ, മലഗാസി à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "മാസിഡോണിയ ദിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "à´®àµà´¯à´¾à´¨àµà´®â€Œà´°àµ (ബ‌രàµà´®àµà´®), à´•àµà´¯à´¾à´±àµà´±àµà´¸àµ" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "മംഗോളിയ, à´¤àµà´—àµà´°à´¿à´•àµà´¸àµ" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "മകàµà´•ാവàµ, പറàµà´±à´•àµà´•ാസàµ" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "മൌരിടàµà´Ÿà´¾à´¨à´¿à´¯," + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "മാളàµâ€Œà´Ÿàµà´Ÿ, ലിറി" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "മൌറീഷàµà´¯à´¸àµ, à´±àµà´ªàµà´ªàµ€à´¸àµ" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "മാലിദàµà´µàµ€à´ªàµà´¸àµ (മാലി à´¦àµà´µàµ€à´ªàµà´•à´³àµ), à´±àµà´«à´¿à´¯à´¾" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "മലാവി, à´•àµà´µà´¾à´šàµà´šà´¸àµ" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "മെകàµà´¸à´¿à´•àµà´•ോ, പെസോസàµ" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "മലേഷàµà´¯, റിങàµà´•à´¿à´±àµà´±àµà´¸àµ" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "മൊസാംബികàµ, മെറàµà´±à´¿à´·àµà´¯à´¾à´¸àµ" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "നമീബിയ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "നൈജീരിയ, നൈറാസàµ" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "നികàµà´•രാഗàµà´µ, ഗോളàµà´¡àµ കോ‌രàµà´¡à´¬à´¸àµ" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "നോ‌‌രàµâ€Œà´µàµà´µàµ‡, à´•àµà´°àµ‹à´£àµ" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "നേപàµà´ªà´¾à´³àµ, നേപàµà´ªà´¾à´³àµ à´±àµà´ªàµà´ªàµ€à´¸àµ" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "à´¨àµà´¯â€Œàµ‚സിലാനàµà´±àµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "ഒമാനàµ, റിയാലàµà´¸àµ" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "പനാമ, ബാലàµâ€Œà´¬àµ‹" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "പെറàµ, à´¨àµà´¯àµ‚വോസൠസോളàµà´¸àµ" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "പപàµà´µà´¾ à´¨àµà´¯â€Œàµ ഗിനി, കിനാ" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "ഫിലിപàµà´ªàµˆà´¨àµâ€Œà´¸àµ, പെസോസàµ" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "പാകിസàµà´¥à´¾à´¨àµ, à´±àµà´ªàµà´ªàµ€à´¸àµâ€Œ" + +#: goffice/utils/formats.c:505 +#, fuzzy +msgid "Poland, Zlotys" +msgstr "പോളണàµà´Ÿàµ, ലോടàµà´Ÿà´¿à´•àµ" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "പരാഗàµà´µàµ‡, à´—àµà´±à´¾à´¨à´¿" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "à´–à´¤àµà´¤à´°àµ, റിയാലàµà´¸àµ" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "റൊമേനിയ, ലി" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "റഷàµà´¯, റൂബിളàµà´¸àµ" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "à´±àµà´µà´¾à´£àµà´Ÿ, à´±àµà´µà´¾à´£àµà´Ÿ à´«àµà´°à´¾à´™àµà´•àµà´¸àµ" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "സൌദി അറേബàµà´¯, റിയാലàµà´¸àµ" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "സോളമനàµâ€Œ à´à´²à´¨àµà´±àµà´¸àµ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "സീഷെലàµâ€Œà´¸àµ, à´±àµà´ªàµà´ªàµ€à´¸àµ" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "à´¸àµà´¡à´¾à´¨àµ, ദിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "à´¸àµà´µàµ€à´¡à´¨àµ, à´•àµà´°àµ‹à´£àµ‹à´°àµ" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "സിങàµà´•à´ªàµà´ªàµ‚à´°àµ, ഡോളേഴàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "സെനàµà´±àµ ഹെലേന, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "à´¸àµà´²àµ‹à´µàµ€à´¨à´¿à´¯, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "à´¸àµà´³àµ‹à´µà´¾à´•àµà´•à´¿à´¯, കൊറൂണി" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "സിയറ ലിയോണàµâ€Œ, ലിയോണàµà´¸àµ" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "സോമാലിയ, à´·à´¿à´²àµà´²à´¿à´‚à´—àµà´¸àµ" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "സെബോരàµà´—, à´²àµà´µà´¿à´—ിനി" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "à´¸àµà´°à´¿à´¨à´¾à´‚, à´—àµà´µà´¿à´²àµâ€Œà´¡àµ‡à´´àµà´¸àµ" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "സാവോ ടോം ആനàµà´±àµ à´ªàµà´°à´¿à´¨àµâ€Œà´¸à´¿à´ªàµà´ªà´¿, ദോബàµà´°à´¾à´¸àµ" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "à´Žà´²àµâ€Œ സാലàµâ€Œà´µà´¡àµ‹à´°àµ, കോളോണàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "സിറിയ, പൌണàµà´¸àµ" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "à´¸àµà´µà´¾à´¸à´¿à´²à´¾à´¨àµà´±àµ, എമലാഞàµà´šà´¨à´¿" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "തായàµâ€Œà´²à´¨àµà´±àµ, ബാഹàµà´Ÿàµà´Ÿàµ" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "താജàµà´•à´¿à´¸àµà´¥à´¾à´¨àµ, റൂബിളàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "à´¤àµà´°àµà´•àµâ€Œà´®àµ†à´¨à´¿à´¸àµà´¥à´¾à´¨àµ, മണാടàµà´Ÿàµà´¸àµâ€Œ" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "à´Ÿàµà´£àµ€à´·àµà´¯, ദിനാരàµà´¸àµ" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "ടോംഗ, പാംഗ" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "à´¤àµà´°àµà´•àµà´•à´¿, ലിറാസàµ" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "à´Ÿàµà´°à´¿à´¨à´¿à´¡à´¾à´¡àµ ആനàµà´±àµ ടോബാഗോ, ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "à´¤àµà´µà´¾à´²àµ, à´¤àµà´µà´¾à´²àµ ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "തൈവാനàµ, à´¨àµà´¯â€Œàµ‚ ഡോളേഴàµà´¸àµ" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "ടാനàµà´¸à´¾à´¨à´¿à´¯, à´·à´¿à´²àµà´²à´¿à´‚à´—àµà´¸àµ" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "ഉകàµà´°à´¯à´¿à´¨àµ" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "ദൃഢമായ" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "തനിയെയàµà´³àµà´³" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "ഇനàµâ€Œà´¡àµà´¯à´¨àµâ€Œ" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "പരിധി" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "വലതàµà´µà´¶à´¤àµà´¤àµà´³àµà´³ à´ªàµà´±à´‚വരകളàµâ€Œ" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "à´’à´Ÿàµà´Ÿà´¿à´ªàµà´ªàµ ബനàµà´§à´‚" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*മാ‌രàµà´šàµà´šàµ" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% ചാരനിറം" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% ചാരനിറം" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% ചാരനിറം" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% ചാരനിറം" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% ചാരനിറം" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "തിരശàµà´šàµ€à´¨ പടàµà´Ÿ" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "ലംബപàµà´ªà´Ÿàµà´Ÿ" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "വിപരീത വിക‌‌‌‌രàµà´£à´ªàµà´ªà´Ÿàµà´Ÿ" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "വിക‌‌രàµà´£ പടàµà´Ÿ" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "വിക‌‌രàµà´£ രേഖാഖണ‌àµà´¡à´‚" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "à´•à´Ÿàµà´Ÿà´¿à´¯àµà´³àµà´³ വിക‌രàµà´£ രേഖാഖണ‌àµà´¡à´‚" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "നേ‌രàµà´¤àµà´¤ തിരശàµà´šàµ€à´¨à´ªàµà´ªà´Ÿàµà´Ÿ" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "നേ‌രàµà´¤àµà´¤ ലംബപàµà´ªà´Ÿàµà´Ÿ" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "നേ‌‌രàµà´¤àµà´¤ വിപരീത വിക‌രàµà´£à´ªàµà´ªà´Ÿàµà´Ÿ" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "നേ‌രàµà´¤àµà´¤ വിക‌രàµà´£à´ªàµà´ªà´Ÿàµà´Ÿ" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "നേ‌രàµà´¤àµà´¤ തിരശàµà´šàµ€à´¨ രേഖാഖണ‌àµà´¡à´‚" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "നേ‌രàµà´¤àµà´¤ വിക‌രàµà´£ രേഖാഖണ‌àµà´¡à´‚" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "à´ªàµà´°àµ‹à´¤à´² ദാ‌‌രàµà´¢àµà´¯à´‚" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "ചെറിയ വൃതàµà´¤à´™àµà´™à´³àµ" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "അ‌രàµà´¦àµà´§ വൃതàµà´¤à´™àµà´™à´³àµ" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "പിണയàµà´•" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "വലിയ വൃതàµà´¤à´™àµà´™à´³àµ" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "à´•à´Ÿàµà´Ÿ" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "ലിഖിതങàµà´™à´³àµâ€Œ" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "മൂലàµà´¯à´™àµà´™à´³àµâ€Œ" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "വരി ഖണ‌àµà´¡à´¨à´‚ചെയàµà´¯â€Œàµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പിശകàµ" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr " തരം" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr " തരം" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "വിസàµà´¤àµ€à´°àµà´£àµà´£à´‚" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "à´¸àµà´¥à´²à´™àµà´™à´³à´¿à´²àµâ€Œ" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "നിര" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "വരി‌" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "വരികളàµâ€Œ കൊണàµà´Ÿàµà´µà´°à´¿à´•" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "വരി‌" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "ശതമാനങàµà´™à´³àµ" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "ശതമാനങàµà´™à´³àµ" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "ശതമാനം" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "ശതമാനം" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "നി‌രàµà´®àµà´®à´¾à´£ കേനàµà´¦àµà´°à´‚" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "ശതമാനങàµà´™à´³àµ" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "ശതമാനങàµà´™à´³àµ" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "സാധàµà´¤à´¯à´¿à´²àµà´²à´¾à´¤àµà´¤ അടയാളവാകàµà´•àµ" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr " തരം" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "വരി ഖണ‌àµà´¡à´¨à´‚ചെയàµà´¯â€Œàµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പിശകàµ" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "ചെറàµà´œà´¾à´²à´•à´¤àµà´¤à´¿à´¨àµà´±àµ† നിറം മാറàµà´±àµà´¨àµà´¨àµ" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "à´¸àµà´µà´¤àµ‡à´¯àµà´³àµà´³ à´µàµà´¯à´¾à´–àµà´¯à´¾à´¤à´¾à´µàµ" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr " തരം" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "à´ªàµà´°à´¤à´¿à´¦â€Œà´°àµà´¶à´•à´‚" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "വേâ€à´°àµà´¤à´¿à´°à´¿:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "à´šà´¿à´¹àµà´¨ വലിപàµà´ªà´‚" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "à´ªàµà´°à´¤à´¿à´¦â€Œà´°àµà´¶à´•à´‚" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +#, fuzzy +msgid "Default pie types" +msgstr "à´¸àµà´µà´¤àµ‡à´¯àµà´³àµà´³ à´µàµà´¯à´¾à´–àµà´¯à´¾à´¤à´¾à´µàµ" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr " തരം" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "ശതമാനം" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "à´ªàµà´°à´¾à´®à´¾à´£à´¿à´• വീതി" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "à´¸àµà´µà´¤àµ‡à´¯àµà´³àµà´³ à´µàµà´¯à´¾à´–àµà´¯à´¾à´¤à´¾à´µàµ" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "വരി ഖണ‌àµà´¡à´¨à´‚ചെയàµà´¯â€Œàµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പിശകàµ" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "അഖണ‌àµà´¡à´¸à´‚à´–àµà´¯à´•à´³àµâ€Œ" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "à´Žà´£àµà´£àµà´•" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "വരികളàµâ€Œ കൊണàµà´Ÿàµà´µà´°à´¿à´•" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "ഉറവിടം" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "വരി ഖണ‌àµà´¡à´¨à´‚ചെയàµà´¯â€Œàµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പിശകàµ" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "നി‌രàµà´®àµà´®à´¾à´£ കേനàµà´¦àµà´°à´‚" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "നി‌രàµà´®àµà´®à´¾à´£ കേനàµà´¦àµà´°à´‚" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% സാധാരണ വലിപàµà´ªà´‚" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "à´ªàµà´°à´¾à´šà´²à´™àµà´™à´³àµ" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "ഉറവിടം" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr " തരം" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "ഡബിളàµ" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "ഡബിളàµ" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "വരി ഖണ‌àµà´¡à´¨à´‚ചെയàµà´¯â€Œàµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പിശകàµ" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "വരി ഖണ‌àµà´¡à´¨à´‚ചെയàµà´¯â€Œàµà´¨àµà´¨à´¤à´¿à´²àµâ€Œ പിശകàµ" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "വരി‌" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "ബിനàµà´¦àµ" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "വരി‌" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/mr.po b/lib/goffice-0.0.4/po/mr.po new file mode 100644 index 0000000000..dc5585c51c --- /dev/null +++ b/lib/goffice-0.0.4/po/mr.po @@ -0,0 +1,4302 @@ +# Marathi Translation of gnumeric.po +# This file is released under GPL +# Copyright (C) 2004, HBCSE&IndicTrans +# FIRST AUTHOR: Terna L10n Team +msgid "" +msgstr "" +"Project-Id-Version: gnumeric HEAD\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-03-03 20:40--530\n" +"Last-Translator: terna2 \n" +"Language-Team: terna localization Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "कारà¥à¤¯à¤°à¤¤" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +#, fuzzy +msgid "Unknown name" +msgstr "अजà¥à¤žà¤¾à¤¤" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, fuzzy, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "\"%s\" पà¥à¤²à¤—िन बंद करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:636 +#, fuzzy, c-format +msgid "Error while reading service #%d info." +msgstr "अॅपलिकà¥à¤¸ फाईल वाचताना तà¥à¤°à¥à¤Ÿà¥€ आली" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, fuzzy, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "\"%s\" पà¥à¤²à¤—िन बंद करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +#, fuzzy +msgid "Unknown plugin name." +msgstr "अजà¥à¤žà¤¾à¤¤ पà¥à¤²à¤—िन" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "" + +#: goffice/app/go-plugin.c:871 +#, fuzzy, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "\"%s\" पà¥à¤²à¤—िन सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "पà¥à¤²à¤—िन आधार" + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "id=\"%s\" अजà¥à¤žà¤¾à¤¤ पà¥à¤²à¤—िन बरोबर\n" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "id=\"%s\" अजà¥à¤žà¤¾à¤¤ पà¥à¤²à¤—िन बरोबर\n" + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "\"%s\" पà¥à¤²à¤—िन सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:953 +#, fuzzy, c-format +msgid "Error while activating plugin service #%d." +msgstr "\"%s\" पà¥à¤²à¤—िन सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:1006 +#, fuzzy, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "\"%s\" पà¥à¤²à¤—िन बंद करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "id=\"%s\" अजà¥à¤žà¤¾à¤¤ पà¥à¤²à¤—िन बरोबर\n" + +#: goffice/app/go-plugin.c:1112 +#, fuzzy +msgid "Error while loading plugin dependencies." +msgstr "\"%s\" पà¥à¤²à¤—िन सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:1288 +#, fuzzy, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "वरà¥à¤— सूची वाचताना चूक à¤à¤¾à¤²à¥€ आहे" + +#: goffice/app/go-plugin.c:1407 +#, fuzzy, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "\"%s\" पà¥à¤²à¤—िन सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:1442 +#, fuzzy, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "\"%s\" पà¥à¤²à¤—िन बंद करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +#, fuzzy +msgid "Errors while reading info about available plugins." +msgstr "पà¥à¤²à¤—िनà¥à¤¸ बंद करताना तà¥à¤°à¥à¤Ÿà¥€ आलà¥à¤¯à¤¾" + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "पà¥à¤²à¤—िनà¥à¤¸ बंद करताना तà¥à¤°à¥à¤Ÿà¥€ आलà¥à¤¯à¤¾" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +#, fuzzy +msgid "Errors while activating plugins." +msgstr "पà¥à¤²à¤—िनà¥à¤¸ सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€ आलà¥à¤¯à¤¾" + +#: goffice/app/go-plugin.c:1740 +#, fuzzy +msgid "Errors while initializing plugin system." +msgstr "पà¥à¤²à¤—िनà¥à¤¸ सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€ आलà¥à¤¯à¤¾" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +#, fuzzy +msgid "Error while loading plugin service." +msgstr "\"%s\" पà¥à¤²à¤—िन सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "सामानà¥à¤¯" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +#, fuzzy +msgid "Error while reading file." +msgstr "अॅपलिकà¥à¤¸ फाईल वाचताना तà¥à¤°à¥à¤Ÿà¥€ आली" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +#, fuzzy +msgid "Error while saving file." +msgstr "पà¥à¤²à¤—िनà¥à¤¸ सà¥à¤°à¥‚ करताना तà¥à¤°à¥à¤Ÿà¥€ आलà¥à¤¯à¤¾" + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "पà¥à¤²à¤—िनचे नाव" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "विसà¥à¤¤à¤¾à¤°à¤¿à¤¤ माहिती संपादित करा" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "सूतà¥à¤°" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "समाविषà¥à¤Ÿ करा" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "शोधा" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "रिकामà¥à¤¯à¤¾ जागेचा (सà¥à¤ªà¥‡à¤¸) पà¥à¤°à¤•ार" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "कà¥à¤°à¤® बदलणे" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +msgid "Bullet Character" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "लोगॅरिथमिक" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "ओळ" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "तरà¥à¤•शà¥à¤¦à¥à¤§" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "लोगॅरिथमिक" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "विसà¥à¤¤à¤¾à¤°à¤ªà¥‚रà¥à¤µà¤• दाखवा" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "सà¥à¤µà¤¯à¤‚चलित" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "वरà¥à¤—" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "पारà¥à¤¶à¥à¤µà¤­à¥à¤®à¥€" + +#: goffice/graph/gog-axis.c:1475 +#, fuzzy +msgid "M_in" +msgstr "कमीत कमी" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "कमाल" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "बंद करा" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "लेबल" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "शà¥à¤•à¥à¤°à¤µà¤¾à¤°" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "शà¥à¤•à¥à¤°à¤µà¤¾à¤°" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "चूक सावधान" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "दिशा" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "चूक सावधान" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "दिशा" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "आत" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "रूपरेषा" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "उजवे" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "आत" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "समाविषà¥à¤Ÿ करा" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "ओळ" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "रूपरेषा" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "लेबलà¥à¤¸" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "पà¥à¤°à¤•ार:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "पाठवा" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "शिरà¥à¤·à¤•" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "शà¥à¤•à¥à¤°à¤µà¤¾à¤°" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "पॉइंट" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "उंची" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "बरोबर" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "चूक सावधान" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "रंग:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "रकानà¥à¤¯à¤¾à¤šà¥€ रूंदी" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "बरोबर" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "गà¥à¤°à¤¾à¤« गà¥à¤°à¥‚" + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "साफ" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "नाव" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "हेडरला वà¥à¤¯à¤µà¤¹à¤¾à¤°à¤¿à¤¤ करा" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "समाविषà¥à¤Ÿ करा" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "पà¥à¤²à¥‰à¤Ÿ पà¥à¤°à¤•ार" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "किंवा" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "दिशा" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"दाखवा\n" +"नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "वरà¥à¤£à¤¨" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "विषय" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "डाटा" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "पà¥à¤²à¥‰à¤Ÿ पà¥à¤°à¤•ार" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "पà¥à¤²à¥‰à¤Ÿ पà¥à¤°à¤•ार" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "आत" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "ओळ" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "पॉइंट" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "फॉनà¥à¤Ÿ" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "सà¥à¤Ÿà¤¾à¤‡à¤² (पà¥à¤°à¤•ार)" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "रूपरेषा" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "रंग" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "रूपरेषा_खाली" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "आकार" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "सà¥à¤Ÿà¤¾à¤‡à¤² (पà¥à¤°à¤•ार)" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "पà¥à¤°à¤•ार:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "पारà¥à¤¶à¥à¤µà¤­à¥à¤®à¥€" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "भाग" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "आणि" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "रंग" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "बरोबर" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "फॉरगà¥à¤°à¤¾à¤‰à¤‚ड" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "नमà¥à¤¨à¤¾" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "निवड करा (_S)" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "आकार" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "दरà¥à¤œà¤¾" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "उजवे" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "विकलà¥à¤ª" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "डिफॉलà¥à¤Ÿ" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "इटालिक" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:77 +#, fuzzy +msgid "Chinese" +msgstr "चिसà¥à¤•" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "हिरवा" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "बूलियन" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "दाखवा" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "पशà¥à¤šà¤¿à¤®" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "ऑकà¥à¤Ÿà¥‹à¤¬à¤°" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "अधोरेखन वापरा" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "तरà¥à¤•शà¥à¤¦à¥à¤§" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "पिअरसन सहसंबंधी" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "काळा" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "रविवार" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "शà¥à¤°à¥‡à¤£à¥€" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "मोठे" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "निळा" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "लाल" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "शà¥à¤°à¥‡à¤£à¥€" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "वेळ" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "शà¥à¤•à¥à¤°à¤µà¤¾à¤°" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "पिवळे" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "हिरवा" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "हायपरलिंक" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "उजवीपà¥à¤°à¤®à¤¾à¤£à¥‡ कà¥à¤°à¤®à¤¾à¤¨à¥‡ लावा" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "उजवीपà¥à¤°à¤®à¤¾à¤£à¥‡ कà¥à¤°à¤®à¤¾à¤¨à¥‡ लावा" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "उजवीपà¥à¤°à¤®à¤¾à¤£à¥‡ कà¥à¤°à¤®à¤¾à¤¨à¥‡ लावा" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "शà¥à¤­à¥à¤°" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "मूलà¥à¤¯à¤¾ पà¥à¤°à¤®à¤¾à¤£à¥‡" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "रिती" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "फूटरला वà¥à¤¯à¤µà¤¹à¤¾à¤°à¤¿à¤¤ करा" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "सावलीचा पà¥à¤°à¤•ार" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "दिशा" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +#, fuzzy +msgid "Dock the toolbar" +msgstr "टूलबार कसा तयार करायचा" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "टूलबार कसा तयार करायचा" + +#: goffice/gtk/goffice-gtk.c:138 +#, fuzzy, c-format +msgid "Unable to open file '%s'" +msgstr "चिकटवता आले नाही" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "छोटी वरà¥à¤¤à¥à¤³à¥‡" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "चितà¥à¤°...(I)" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "चितà¥à¤°à¤¾à¤²à¤¾ समाविषà¥à¤Ÿ करा" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "संगà¥à¤°à¤¹à¤¿à¤¤ करा" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "सूचना_पà¥à¤°à¤•ार" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "सामानà¥à¤¯" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "मोठे" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "इटालिक" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +#, fuzzy +msgid "Font style:" +msgstr "फॉनà¥à¤Ÿà¤šà¤¾ आकार" + +#: goffice/gtk/go-font-sel.glade.h:3 +#, fuzzy +msgid "Font:" +msgstr "फॉनà¥à¤Ÿ" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "आकार" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "संखà¥à¤¯à¤¾" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "मà¥à¤¦à¥à¤°à¤¾" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "हिशोब" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "दिनांक" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "वेळ" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "टकà¥à¤•े" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "भाग" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "वैजà¥à¤žà¤¾à¤¨à¤¿à¤•" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "विषय" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "विशेष" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "रिती" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "असà¥à¤µà¤¿à¤•ारित संखà¥à¤¯à¤¾ रूपरेषा" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "संखà¥à¤¯à¤¾ रूपरेषा" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "वरà¥à¤—" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "दशांश सà¥à¤¥à¤¾à¤¨" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "दाखवा" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "मूलà¥à¤¯à¤¾à¤²à¤¾ जसे पाठवलेले तसे दाखवा" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "रकानà¥à¤¯à¤¾à¤‚ना बदला" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "असà¥à¤µà¤¿à¤•ारित संखà¥à¤¯à¤¾ रूपरेषा" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "रूपरेषा" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "1000's साठी विभाजक वापरा" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "सधà¥à¤¯à¤¾à¤šà¥‡ नाव" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "आंतरिक रिकामी जाग़ा" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*रवि" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*सोम" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*मंगळ" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*बà¥à¤§" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*गà¥à¤°à¥‚" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*शà¥à¤•à¥à¤°" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*शनि" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "रविवार" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "सोमवार" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "मंगळवार" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "बà¥à¤§à¤µà¤¾à¤°" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "गà¥à¤°à¥à¤µà¤¾à¤°" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "शà¥à¤•à¥à¤°à¤µà¤¾à¤°" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "शनिवार" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*जाने" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*फ़ेबà¥à¤°à¥ " + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*मारà¥à¤š" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*à¤à¤ªà¥à¤°à¤¿ " + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*मे" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*जून" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*जà¥à¤²à¥ˆ" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*ऑग" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "* सपà¥à¤Ÿà¥‡à¤‚ " + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*ऑकà¥à¤Ÿà¥‹" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*नोवà¥à¤¹à¥‡à¤‚" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*डिसें" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "जानेवारी" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "फेबà¥à¤°à¥à¤µà¤¾à¤°à¥€" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "मारà¥à¤š" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "à¤à¤ªà¥à¤°à¤¿à¤²" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "मे" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "जून" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "जà¥à¤²à¥ˆ" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ऑगसà¥à¤Ÿ" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "सपà¥à¤Ÿà¥‡à¤‚बर" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "ऑकà¥à¤Ÿà¥‹à¤¬à¤°" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "नोवà¥à¤¹à¥‡à¤‚बर" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "डिसेंबर" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "बरोबर" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "चà¥à¤•" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "काळा" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "निळा" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "हिरवा" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "लाल" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "शà¥à¤­à¥à¤°" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "पिवळे" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "यादित" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "कधीच नाही" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "पकà¥à¤•े" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "सà¥à¤µà¤¯à¤‚चलित" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "कधीच नाही" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "शà¥à¤°à¥‡à¤£à¥€" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "रूपरेषा_डावीकडे" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "लिंक चिकटवा" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% राखाडी" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% राखाडी" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% राखाडी" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% राखाडी" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% राखाडी" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "आडवी रेषा" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "उभी पटà¥à¤Ÿà¥€" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "ऊलटी कोणीय रेषा" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "कोणीय पटà¥à¤Ÿà¥€" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "कोणीय कà¥à¤°à¥‰à¤¸à¤¹à¥…च" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "जाड कोणीय कà¥à¤°à¤¾à¥…सहॅच" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "बारिक उभी ओळ" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "बारिक उभी पटà¥à¤Ÿà¥€" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "बारिका उलटी कोणीय पटà¥à¤Ÿà¥€" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "बारिक कोणीय पटà¥à¤Ÿà¥€" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "बारिक आडवी कà¥à¤°à¥‰à¤¸à¤¹à¥…च" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "बारिक कोणीय कà¥à¤°à¥‰à¤¸à¤¹à¥…च" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "फॉरगà¥à¤°à¤¾à¤‰à¤‚ड पकà¥à¤•े" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "छोटी वरà¥à¤¤à¥à¤³à¥‡" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "अरà¥à¤§à¤µà¤°à¥à¤¤à¥à¤³" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "छपà¥à¤ªà¤°" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "मोठे वरà¥à¤¤à¥‚ळ" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "लेबलà¥à¤¸" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "मूलà¥à¤¯" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "चूक सावधान" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_अलà¥à¤«à¤¾:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "ओळ" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "रकाने वगळा" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "टकà¥à¤•े" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "रकाने वगळा" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "रकाने वगळा" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "रकाने वगळा" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "पà¥à¤°à¤¾à¤‚त" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "पà¥à¤°à¤¾à¤‚त" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +#, fuzzy +msgid "Column" +msgstr "रकाना" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ओळ" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "ओळ" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "टकà¥à¤•े" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "टकà¥à¤•े" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "रकाने वगळा" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "टकà¥à¤•े" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "टकà¥à¤•े" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "टकà¥à¤•े" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "सà¥à¤¤à¥à¤°à¥‹à¤¤ भाग" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "रकाने वगळा" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "पॉइंट" + +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "पॉइंट" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "पॉइंट" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "पॉइंट" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "टॅबचे रंग बदलणे" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "पà¥à¤²à¥‰à¤Ÿ पà¥à¤°à¤•ार" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "कà¥à¤°à¤®à¤¬à¤¦à¥à¤§ करा" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "डिगà¥à¤°à¥€à¤¸" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "हजारांचा विभाजक" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "फॉनà¥à¤Ÿà¤šà¤¾ आकार" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "उजवे" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "वेगळे करा" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "वेगळे करा" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "पॉइंट" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "टकà¥à¤•े" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "पà¥à¤°à¤®à¤¾à¤£à¤¿à¤¤ रूंदी" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "पà¥à¤°à¥à¤£ संखà¥à¤¯à¤¾" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "मोजा" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "सà¥à¤¤à¥à¤°à¥‹à¤¤" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "सà¥à¤¤à¥à¤°à¥‹à¤¤ भाग" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "सà¥à¤¤à¥à¤°à¥‹à¤¤ भाग" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "ंमधà¥à¤¯à¤­à¤¾à¤—ी" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "सà¥à¤¤à¥à¤°à¥‹à¤¤" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "दà¥à¤ªà¥à¤ªà¤Ÿ" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "दà¥à¤ªà¥à¤ªà¤Ÿ" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "चूक सावधान" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "चूक सावधान" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ओळ" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "पॉइंट" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ओळ" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/ms.po b/lib/goffice-0.0.4/po/ms.po new file mode 100644 index 0000000000..49000f6963 --- /dev/null +++ b/lib/goffice-0.0.4/po/ms.po @@ -0,0 +1,4307 @@ +# Galeon Bahasa Melayu (m encoding="UTF-8"s) +# Jika takut risiko, Jangan bicara tentang Perjuangan +# Hasbullah Bin Pit (sebol) , 2001 +# +msgid "" +msgstr "" +"Project-Id-Version: Gnumeric HEAD\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-07-23 23:51+0800\n" +"Last-Translator: Hasbullah Bin Pit \n" +"Language-Team: Projek Gabai \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "_Objek..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "nama tidak diketahui" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "nama plugin tidak diketahui." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin tidak mempunyai no id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Ralat bila mengaktifkan kebergantungan plugin." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nama fail modul tidak diberi" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Tak dapat membuka fail modul \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Fail module \"%s\" mempunyai format tidak sah." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Fail tidak mengandungi simbol (\"plugin_file_struct\" )." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Tak dapat menutup fail modul \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Fail tidak mengandungi fungsi \"%s\". " + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Umum" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Pembuka fail - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Ralat berlaku bila membaca fail." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Ralat berlaku ketika menyimpan fail ." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Pemuat plugin" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Pemuat GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Ralat membaca maklumat servis." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formula" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Inden" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Cari " + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Ruang" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Jajaran" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Operator tidak diketahui" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Saiz Masalah" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Linear" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logik" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "Sorok Perincian" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatik" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategori:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "LatarBelakang" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Max" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "_Tutup" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Label" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Jumaat" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Jumaat" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Corak" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Corak" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Tak selamat" + +# ui/galeon.glade.h:134 +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "_Fail" + +# ui/galeon.glade.h:268 +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "_Tinggi..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Tak selamat" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "Sel_it" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "Ba_ris" + +# ui/galeon.glade.h:134 +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "_Fail" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Label" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Jenis:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Kirim" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Tajuk:" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Jumaat" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Plot" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +# ui/galeon.glade.h:268 +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "_Tinggi..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "_Dengan:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Sampel" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Warna:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Lebar Garisan" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Dengan:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_Graf..." + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "Carta%d" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nama" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Personalisasi pengepala" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Sel_it" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Jenis Plot" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Sempadan" + +# ui/galeon.glade.h:247 +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Opsyen" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Corak" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Papar\n" +"Samel" + +# ui/galeon.glade.h:247 +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Huraian" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "Teks alt" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Data" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "_Siri" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Nama plot" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Jenis Plot" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Inden" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Rentetan" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Titik" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dR x %dC" + +# src/prefs.c:618 +# ui/galeon.glade.h:140 +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Font" + +#: goffice/graph/gog-style.c:966 +#, fuzzy +msgid "Style" +msgstr "_Gaya" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Corak" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Pralihat cetakan" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Warna:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "_Warna:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "Ter_kongsi" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Saiz:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Gaya:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "Jenis:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "LatarBelakang" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Direktori" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "_Dan" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Warna _Isian:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "_Muatkan ke:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Latar Depan" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Corak" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_Pilih" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Saiz:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "Status" + +# ui/galeon.glade.h:268 +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "Ka_nan" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "kelabu gelap" + +# src/prefs.c:618 +# ui/galeon.glade.h:140 +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "Laporan" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arab" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltik" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Eropah Tengah" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Greek" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "India" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Jepun" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korea" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turki" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnam" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Barat" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Lain-lain" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Ditakrif Pengguna" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Lokaliti:" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Hala Pertukaran" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "hitam" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "Isnin" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "jingga kemerahan" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "emas" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Nilai Sel" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "biru" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "kelabu gelap" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "merah" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "jingga" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "masa" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "kelabu" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "kuning" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "hijau" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "merahjambu" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "jingga cair" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "hijau cair" + +# ui/galeon.glade.h:268 +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "cyan cair" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "putih" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "Nilai" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "tersendiri" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Warna Tersendiri:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Bayang" + +# ui/galeon.glade.h:247 +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Opsyen" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Tak dapat membuka fail '%s'" + +# ui/galeon.glade.h:134 +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Fail" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "_Imej..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Pilih satu fail imej" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Simpan Semua" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Jenis fail:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"adalah nama direktori" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Anda tidak mempunyai keizinan untuk menyimpan ke\n" +"%s." + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Bukukerja %s sudah ada.\n" +"Adakah anda ingin menyimpan ke atasnya?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Bold" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Italik" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Gaya font:" + +# src/prefs.c:618 +# ui/galeon.glade.h:140 +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +#, fuzzy +msgid "Preview" +msgstr "Pralihat cetakan" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Saiz:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Nombor" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Matawang" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Perakaunan" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Tarikh" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Masa" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Peratus" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Pecahan" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Saintifik" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Teks" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Istimewa" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Tersendiri" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format Nombor Negatif" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Format Nombor" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Kategori:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Te_mpat perpuluhan:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Borang" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Terap Format _Nombor" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Prebiu:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_imbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Eropah Barat" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Eropah Timur" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Afrikaan Afrika Selatan (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Emeriah Arab Bersatu (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Belarus (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "New Zealand (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filifina (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Inggeris Afrika Selatan (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Sepanyol (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Sepanyol/Basque (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Lokaliti Semasa:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Jarak Ruang Penunjuk" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ahd" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Isn" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Sel" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Rab" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Kha" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Jum" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sab" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Ahad" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Isnin" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Selasa" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Rabu" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Khamis" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Jumaat" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sabtu" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mac" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mei" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ogo" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dis" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januari" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Febuari" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mac" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mei" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Jun" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Julai" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Ogos" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Disember" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "BENAR" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "PALSU" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Hitam" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Biru" + +#: goffice/utils/format.c:759 +#, fuzzy +msgid "Cyan" +msgstr "cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Hijau" + +# ui/galeon.glade.h:176 +#: goffice/utils/format.c:761 +#, fuzzy +msgid "Magenta" +msgstr "magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Merah" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Putih" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Kuning" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Emeriah Arab Bersatu, Dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, Dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belarus, Ruble" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, Peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croatia, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hungary, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, Rupiah" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, Rupee" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, Rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (Utara), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (Selatan), Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, Rupee" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia, Ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, Dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norway, Krone" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "New Zealand, Dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, Rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippines, Peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, Rial" + +# ui/galeon.glade.h:272 +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, Lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russia, Ruble" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychelles, Rupee" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, Dinar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, Pound" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia, Tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakia, Koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, Shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria, Pound" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, Emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkey, Liras" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraine, Hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Viet Nam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +#, fuzzy +msgid "Palladium, Ounces" +msgstr "Palladium Ounces" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, Ounce" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, Rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "South Africa, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Tiada" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Tegar" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatik" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Tiada" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Median" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "julat" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "fail" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Tepek Pautan" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "Mac" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Kelabu" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Kelabu" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Kelabu" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +#, fuzzy +msgid "Foreground Solid" +msgstr "Latar Depan" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Label" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Nilai" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Ralat menghantar baris" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +# ui/galeon.glade.h:3 +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "Jumlah" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Plot" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Plot" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Sembunyi kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "_Kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Sembunyi kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Sembunyi kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Kawasan" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Kawasan" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Garisan" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "Garisan" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "Bar Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Bar Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Kolum Peratusan" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "Bar Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "Kolum Peratusan" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Bar Bertindan" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Bar Bertindan" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "_Kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "Bar Bertindan" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Bar Bertindan" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "_Kolum" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "Bar Bertindan" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Peratus" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "Bar Bertindan" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Nama font default" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Pengepala baris dan ko_lum" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Plot" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Katalaluan tidak sah" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Plot" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Plot" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Plot" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Ralat menghantar baris" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Menukar Warna Tab" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Nama font default" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Plot" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Tiada" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "darjah" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "_Cari :" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Kategori:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Pai 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Tapak" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Banyak ralat" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Banyak ralat" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Pai" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Range" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Tapak" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Tapak" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Plot" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Plot" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Bar Peratus" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "_Lebar Piawai" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Bar Bertindan" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Nama font default" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Ralat menghantar baris" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "nombor" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Kira" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Sumber" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Ralat menghantar baris" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Sumber" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Sumber" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% drpd saiz _normal" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Tarikh" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Sumber" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Plot" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Selesai" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Selesai" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Ralat menghantar baris" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Ralat menghantar baris" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Bar Bertindan" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Garisan" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Titik" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Garisan" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/nb.po b/lib/goffice-0.0.4/po/nb.po new file mode 100644 index 0000000000..c106a697dc --- /dev/null +++ b/lib/goffice-0.0.4/po/nb.po @@ -0,0 +1,4172 @@ +# Norwegian (bokmÃ¥l dialect) translation of gnumeric. +# Copyright (C) 1998-2004 Free Software Foundation, Inc. +# Kjartan Maraas , 1998-2004. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-02-15 00:04+0100\n" +"Last-Translator: Kjartan Maraas \n" +"Language-Team: Norwegian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Lagring over gamle filer av denne typen er deaktivert for sikkerhets skyld." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Du kan slÃ¥ av dette sikkerhetstiltaket ved Ã¥ redigere den relevante .xml-" +"filen." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektiv" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Filen inneholder informasjon om tillegg med ugyldig id (%s), forventet %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Kan ikke lese informasjon om tillegg fra fil." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ukjent navn" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ikke-støttet lastertype «%s»." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Feil under forberedelse av laster «%s»." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Feil under lesing info om tjeneste #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Kan ikke lese informasjonsfil for tillegg («%s»)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Filen «%s» er ikke en gyldig informasjonsfil for tillegg." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Feil under lesing av tjenester for tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Tilleggs-ID inneholder ugyldige tegn (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ukjent navn pÃ¥ tillegg." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Ingen laster definert, eller ugyldig id, for tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Tillegget har ingen id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Feil under initiering av tilleggslaster («%s»)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Fant løkke i tilleggsavhengigheter." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Kunne ikke aktivere tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Kunne ikke finne tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Feil ved aktivering av tilleggsavhengigheter." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Feil under aktivisering av tilleggstjeneste #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Feil under deaktivering av tileggstjeneste #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Kan ikke laste tilleggslaster." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Kunne ikke laste tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Feil under lasting av tilleggsavhengigheter." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Det oppsto feil under lesing av informasjon om tillegg fra filen «%s»." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikke aktivere tillegg «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikke deaktivere tillegg «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Feil under lesing av info om tilgjengelige tillegg." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Feil ved deaktivering av tillegg som ikke lenger finnes pÃ¥ disk." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Følgende tillegg er ikke pÃ¥ disk lenger, men er fremdeles aktive:\n" +"%s.\n" +"Du bør starte Gnumeric pÃ¥ nytt nÃ¥." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Feil under aktivisering av tillegg." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Feil under initiering av systemet for tillegg." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Tjeneste «%s» er ikke støttet av laster." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Modulens filnavn er ikke oppgitt." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Kunne ikke Ã¥pne modulfil «%s»." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Modulfil «%s» har ugyldig format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Filen inneholder ikke («plugin_file_struct» symbolet)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Filen har et ugyldig magisk nummer." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Tillegg versjon «%s» er forskjellig fra applikasjonen «%s»." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamisk lasting av moduler er ikke støttet i dette systemet." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Kunne ikke lukke modulfil «%s»." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Filen inneholder ikke «%s»-funksjonen." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modulen inneholder ikke «%s»-funksjonen." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Feil under lasting av tilleggstjeneste." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initiering av funksjon i tillegg returnerte en feil." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Oppryddingsfunksjon i tillegg returnerte en feil." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Generelt" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "FilÃ¥pner har ingen beskrivelse" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "FilÃ¥pner - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Feil under lesing av fil." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Fillagrer har ingen beskrivelse" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Fillagrer - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Feil under lagring av fil." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Tilleggslaster" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject-kaster" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Ingen «type»-attributt pÃ¥ «service»-element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Ukjent tjenestetype: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Feil ved innlesing av beskrivelse av tjeneste." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Vi mÃ¥ laste tjenesten før den aktiveres (PLUGIN_ALWAYS_LOAD er satt) men " +"lasting feilet." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formler" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Rykk _inn:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Søk etter" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Mellomrom" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Justering" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Sitatte_gn:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problemstørrelse" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineær" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detaljer" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisk" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Grenser" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_aks" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Kryss" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etikett" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Markør" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Linje" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Skriv ut" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Posisjon" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nnenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Utenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Høy" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Innenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Vend akse" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Lav" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Utenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Vis etiketter" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Bakgrunn" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Tittel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Rutenett" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-akse" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-akse" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-akse" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Plott" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Høyde" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Bredde" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Feilkategori" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Verdier" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Fa_rge:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "S_kjerm:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Ingen\n" +"Absolutt\n" +"Relativ\n" +"Prosent" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Linjebredde:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Bredde:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Plott" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Navn" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Steg 1 av 2: Velg type graf" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Steg 2 av 2: tilpass graf" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Tilpass graf" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Sett _inn" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Type _plott" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office graf" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Rekkefølge" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definisjon" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Mønster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stil" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Vis\n" +"Eksempel" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Beskrivelse" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Rekker" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Plottemotor" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Type plott" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Indeks:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Innstillinger" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Skrift" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 farger\n" +"lyststyrke" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Fyll" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linje" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Markør" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Omriss" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Farge:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Ingen\n" +"Mønster\n" +"Gradient\n" +"Bilde" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Farge for _omriss:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Form:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "St_ørrelse:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_il:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Bakgrunn:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "Re_tning:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "Sl_utt:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Fyllfarge:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Tilpass:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Forgrunn:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Mønster:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Velg..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Størrelse:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Start:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_lysere" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_mørkere" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "punkter" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"strukket\n" +"bakgrunn" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Forvalg" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabisk" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltisk" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Sentral-europeisk" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kinesisk" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kyrillisk" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Gresk" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebraisk" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indisk" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japansk" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreansk" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Tyrkisk" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamesisk" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Vestlig" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Annet" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabisk (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabisk (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabisk (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabisk (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabisk (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabisk (MacArabian)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabisk (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armensk (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltisk (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltisk (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltisk (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltisk (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Sentraleuropeisk (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Sentraleuropeisk (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Sentraleuropeisk (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Sentraleuropeisk (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Kinesisk, forenklet (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Kinesisk, forenklet (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Kinesisk, forenklet (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Kinesisk, forenklet (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Kinesisk, forenklet (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Kinesisk, tradisjonell (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Kinesisk, tradisjonell (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Kinesisk, tradisjonell (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Kroatisk (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Kyrillisk (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Kyrillisk (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Kyrillisk (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Kyrillisk (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Kyrillisk (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Kyrillisk (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russisk (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainsk (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainsk (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Engelsk (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgisk (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Gresk (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Gresk (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Gresk (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebraisk (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebraisk (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebraisk (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebraisk (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebraisk (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevangari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandsk (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japansk (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japansk (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japansk (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Koreansk (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Koreansk (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Koreansk (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Koreansk (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordisk (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumensk (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumensk (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Syd-europeisk (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Tyrkisk (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Tyrkisk (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Tyrkisk (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Tyrkisk (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Brukerdefinert" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamesisk (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamesisk (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamesisk (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamesisk (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Vestlig (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Vestlig (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Vestlig (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Vestlig (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Vestlig (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Konverteringsretning" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Denne verdien bestemmer hvilke iconv-tester som skal utføres." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "sort" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "lys brun" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "gullbrun" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "mørk grønn #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "marine" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "mørk blÃ¥" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purpur #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "meget mørk grÃ¥" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "mørk rød" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "rød-oransje" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "gull" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "mørk grønn" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "rund blÃ¥" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blÃ¥" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "rund purpur" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "mørk grÃ¥" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rød" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oransje" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "lime" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "rund grønn" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "rund blÃ¥ #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "himmelblÃ¥ #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purpur" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grÃ¥" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "lys oransje" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "gul" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "grønn" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "lys blÃ¥" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "rød-purpur" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "lys grÃ¥" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "lys oransje" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "lys gul" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "lys grønn" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "lys cyan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "lys blÃ¥" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "lys purpur" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "hvit" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purpuraktig blÃ¥" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "mørk purpur" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "himmelblÃ¥" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "egendefinert" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Egendefinert farge..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Skyggetype" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientering" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Foretrukket bredde" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Foretrukket høyde" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Kunne ikke Ã¥pne fil '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Alle filer" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Bilder" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Velg et bilde" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Lagre som" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Fil_type:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Filnavnet er ikke riktig for denne filtypen. Vil du bruke dette navnet " +"likevel?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"er et katalognavn" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Du har ikke rettigheter til Ã¥ lagre til\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"En fil med navn %s eksisterer allerede i %s.\n" +"\n" +"Vil du overskrive den?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Uthevet" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Fet kursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stil for skrift:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Skrift:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "ForhÃ¥ndsvisning" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Størrelse:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Tall" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Regnskap" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dato" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tid" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Prosent" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Brøk" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Vitenskapelig" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Spesiell" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Egendefinert" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format for negativt tall" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Tallformater" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegorier:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Desi_malplasser:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Vis tid pÃ¥ dagen." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Vis verdier i prosent." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Formatteringsk_ode:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Format for negative tall:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "ForhÃ¥ndsvisning:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Br_uk separator for tusener" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Vest-europa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Øst-europa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Nordamerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Syd- og sentral-amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "USA/engelsk (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sør-Afrika Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopia/Ahmarisk (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "De forente arabiske emirater (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Baharain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algerie (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/arabisk (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordan (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libya (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marokko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi-Arabia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Aserbajdsjan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Hviterussland (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Frankrike/breton (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia-Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spania/katalansk (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tjekkia (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Storbritannia/walisisk (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danmark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Østerrike (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgia/tysk (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Sveits/tysk (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Tyskland (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg/tysk (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Hellas (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/engelsk (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Storbritannia (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/engelsk (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/engelsk (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "New Zealand (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filippinene (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/engelsk (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "USA/engelsk (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Sør-Afrika/engelsk (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Den dominikanske republikk (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekvador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spaia (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexico (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "USA/spansk (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estland (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spaia/baskisk (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finnlandsk/finsk (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Færøyene (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgia/fransk (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/fransk (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Sveits/fransk (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Frankrike (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irland/gælisk (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Storbritannia/skotsk gaelisk (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spania/galisisk (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Storbritannia/manx gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Kroatia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ungarn (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Sveits/italiensk (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italia (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/hebraisk (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grønnland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Storbritannia/kornsk (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litauen (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Ny Zealand/maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaysia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgia/flamsk (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Nederland (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norge/nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norge/bokmÃ¥l (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Frankrike/occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polen (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russland (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraina (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norge/samisk (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finnland/svensk (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Sverige (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadsjikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopia/tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filippinene/tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Tyrkia (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russland/tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Usbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgia/walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "USA/yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Kina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/kinesisk (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/kinesisk (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Aktivt locale: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Meny" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Søn" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Man" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Tir" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Ons" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Tor" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Fre" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Lør" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Søndag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Mandag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Tirsdag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Onsdag" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Torsdag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Fredag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Lørdag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Des" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mars" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Desember" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "SANN" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "USANN" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Sort" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "BlÃ¥" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Grønn" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rød" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Hvit" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Gul" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "De forente arabiske emirater, dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "De nederlandske antillene, gylden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, dollar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, gylden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Aserbajdsjan, manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia-Hercegovina, marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dollar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Baharain, dinarer" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, franc" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei-Darussalam, dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasil, real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Hviterussland, rubler" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Sveits, francs" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Kina, yuan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, pesos" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Kapp Verde, escudos" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Kypros, pund" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Tjekkia, koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danmark, kroner" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Den dominikanske republikk, pesos" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Aleria, dinarer" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt, pund" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nafka" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopia, birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro-medlemsland, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dollar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falklandsøyenes, pund" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Storbritannia, pund" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, pund" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, pund" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, francs" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzales" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, dollar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hongkong, dollar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempiras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Kroatia, kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gourdes" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Ungarn, forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, rupiahs" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, shekels" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, pund" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, rupi" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinarer" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, kroner" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, pund" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dollar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, dinarer" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgisistan, som" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodsja, riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komorene, franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Nord-Korea, won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Sør-Korea, Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dinarer" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Caymanøyene, dollar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kasakhstan, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kips" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, pund" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri lanka, rupi" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litauen, litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia, lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya, dinarer" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marokko, dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldova, lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonia, denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar, kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania, ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, liri" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, rupi" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldivene, Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexico, peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia, ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mosambik, meticais" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, gull-cordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norge, krone" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rupi" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "New Zealand, dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, nuevos soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Ny-Guinea, kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filippinene, peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupi" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polen, sloty" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russland, rubel" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, franc" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi-Arabia, riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Salomonøyene, dollar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychellene, rupi" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinarer" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Sverige, kroner" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, dollar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, pund" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia, tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakia, koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, gylden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome og Principe, dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, colon" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria, pund" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadsjikistan, rubler" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manater" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia, dinarer" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Tyrkia, lire" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad og Tobago, dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalu dollar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, nye dollar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, shilling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraina, hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "USA, dollar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Usbekistan, sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Sølv, unser" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Gull, unser" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Øst-Karribia, dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, unser" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, unser" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslavia, nye dinarer" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Sør-Afrika, rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ingen" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Helfylt" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatisk (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ingen" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "firkant" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "trekant ned" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "trekant opp" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "trekant høyre" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "trekant venstre" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "sirkel" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "kryss" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisk" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "søyle" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "halvlinje" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "sommerfugl" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "timeglass" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% grÃ¥" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% grÃ¥" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% grÃ¥" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% grÃ¥" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% grÃ¥" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horisontal stripe " + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertikal stripe" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Omvendt diagonal stripe" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonal stripe" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonal krysslinje" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Tykk diagonal krysskravering" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tynn horisontal stripe" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tynn vertikal stripe" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tynn omvendt diagonal stripe" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tynn diagonal stripe" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tynn horisontal krysskravering" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tynn diagonal krysskravering" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Helfylt forgrunn" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "SmÃ¥ sirkler" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halvsirkler" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Thatch" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Store sirkler" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Murstein" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiketter" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Verdier" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Feillinjer" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "O_verlapp:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Mellomrom:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "Plottlinje" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "PlottomrÃ¥de" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Sidestilte søyler i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Sidestilte 3D-kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D prosentsøyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Prosentkolonner i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Stablede søyler i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Stablede kolonner i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Sidestilte søyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Sidestilte kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "OmrÃ¥de" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "OmrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Søyle" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolonne" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linje" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Linjeplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "ProsentomrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Prosentsøyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Prosentkolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Prosentlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "ProsentomrÃ¥deplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Prosentlinjeplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Stablede omrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Stablede søyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Stablede kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Stablede linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Stablet omrÃ¥deplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Stablet linjeplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Ikke-merkede linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Ikke-merkede prosentlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Ikke-merkede stablede linjer" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Forvalgte typer 1.5d plott" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Linje-, omrÃ¥de-, søyle- og kolonneplott" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Plott" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ugyldig passord" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Plott" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Plott" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Plott" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Motor for bobleplott" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Endrer farge pÃ¥ faner" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Forvalgte typer 1.5d plott" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "grader" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separasjon:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D kake" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D delt kake" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Kake" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Delt kake" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Delt sirkel" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Forvalgte kaketyper" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "PlottRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "PlottRadarOmrÃ¥de" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "OmrÃ¥deRadar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "ProsentomrÃ¥deplott." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radarplott." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Forvalgte typer 1.5d plott" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Hele tall" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Kontur" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Linjeplott." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Overflate" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "_KildeomrÃ¥der:" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "_KildeomrÃ¥der:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% av forvalgt størrelse" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_meter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Vis _negative verdier" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Over_flate" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "PlottXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "PlottBoble" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Boble" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Feil under lesing av linje" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Feil under lesing av linje" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Markører ved hvert punkt." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY-linjer" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY-punkter" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY-linjer" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D-plott" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Motor for bobleplott" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/nl.po b/lib/goffice-0.0.4/po/nl.po new file mode 100644 index 0000000000..6ee8ef52d3 --- /dev/null +++ b/lib/goffice-0.0.4/po/nl.po @@ -0,0 +1,4361 @@ +# De bestandderlandse vertaling van gnumeric CVS-vers encoding="UTF-8"ie +# Copyright (C) 1999-2002 Free Software Foundation, Inc. +# M.Meij +# Almer S. Tigelaar , 2001 +# Tino Meinen , 2001, 2002, 2003, 2004, 2005. +# Reinout van Schouwen , 2004 (kleine verbeteringen) +# +# TODO: +# sneltoetsen controleren, aanvullen, completeren. +# consistentie van functiebeschrijvingen controleren. +# woordsamenstellingen +# Niet Elk Woord Een Hoofdletter (hoeft niet overal worden aangepast) +# De Nederlandse MS-Excel equivalenten voor de functienamen +# vermelden in de beschrijving (dit zal in toekomstige versies van gnumeric +# vanzelf worden aangepast; functienamen zullen dan vertaalbaar worden) +# +# ------------ +# Woordenlijst +# ------------ +# LIN.AFSCHR +# PRIJS.NOM +# ACCRINT SAMENG.RENTE +# ACCRINTM SAMENG.RENTE.V +# ADDRESS ADRES +# COUPDAYS COUP.DAGEN +# COUPDAYSNC COUP.DAGEN.VV +# DB DB +# DDB DDB +# FV TW +# INTRATE RENTEPERCENTAGE +# IPMT ISBET +# IRR IR +# MIRR GIR +# NOMINAL NOMINALE.RENTE +# NPER NPER +# NPV NHW +# ODDFPRICE AFW.ET.PRIJS +# ODDFYIELD AFW.ET.REND +# ODDLPRICE AFW.LT.PRIJS +# ODDLYIELD AFW.LT.REND +# PMT BET +# PPMT IBET +# PPMT PBET +# PRICEDISC PRIJS.DISCONTO +# PRICEMAT PRIJS.VERVALDAG +# PV HW +# RATE RENTE +# SYD SYD +# TBILLYIELD SCHATK.REND +# VDB VDB +# YIELDDISC REND.DISCONTO +# YIELDMAT REND.VERVAL +# ------------------------------------------- +# accrued interest opgelopen rente +# asset activa +# basis soort_jaar +# bond obligatie +# call_put_flag call_put_keuze +# commodity +# cost kosten/prijs +# cost_of_carry +# coupon coupon +# coupon payments coupon-uitbetalingen +# coupon period coupon-termijn +# coupon rate coupon-rente +# deposit storting +# deprication afschrijving +# duration +# expiry expiratie +# face value nominale waarde +# finance_rate financieringsrente +# first_period eerste_termijn +# first_interest eerste_rente +# fully vested volgestord +# interest rate rentepercentage +# internal rate of return interne rentabiliteit +# investment investering +# issue uitgifte +# life duur +# loan lening +# maturity vervaldatum +# modified gewijzigde +# net present value netto huidige waarde +# option optie +# par value nominale waarde +# period termijn +# periodic interest rate discontopercentage +# price prijs +# purchase_date aankoopdatum +# rate rente +# redemption aflossingsprijs +# reinvest_rate herinvesteringsrente +# salvage restwaarde +# security waardepapier +# security bond verdisconteerd waardepapier +# settlement stortingsdatum +# spot prijs +# strike koers +# time resterende_looptijd +# treasury bill schatkistpapier +# underlying asset onderliggende waarde +# values waarden +# volatility volatiliteit +# yield rendement +# +# -------------------------------------------- +# workbook werkmap +# worksheet werkblad +# encrypted beveiligd +# -------------------------------------------- +# chart grafiek (staaf-grafiek, taartgrafiek cirkelgrafiek) +# graph diagram (of net andersom?) +# mapping schaalverdeling +# plot plot-tekening? +# In Gnumeric kan een 'graph' uit meerdere gedeelten bestaan. +# Elk gedeelte is een 'chart', en elke 'chart' kan een of +# meerdere 'plots' bevatten. +# tick marks verdeling?/streepjes +# major ticks hoofdverdeling +# minor ticks onderverdeling +# +# locked beveiligd-geblokkeerd? (excel gebruikt beveiligd) +# +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric CVS\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-01-09 02:01+0100\n" +"Last-Translator: Tino Meinen \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Veiligheidshalve is het opslaan over oude bestanden van dit type uitgezet." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"U kunt deze beveiliging uitzetten door het betreffende plugin.xml bestand te " +"bewerken." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objectief" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Bestand bevat plugin-informatie met ongeldige id. (%s), %s was verwacht." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Kon de plugin informatie niet uit het bestand lezen" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Onbekende naam" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Niet ondersteund ladertype \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Fout bij voorbereiden lader \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Fout bij lezen #%d service informatie." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Kan het info bestand (\"%s\") voor plugin niet lezen." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Bestand \"%s\" is geen geldig plugin infobestand." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Fouten bij lezen van services voor plugin met id=\"%s\"/" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Plugin id. bevat ongeldige tekens (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Onbekende pluginnaam." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Geen lader gedefinieerd, if ongeldig id voor plugin met id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin heeft geen id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Fout bij initialiseren pluginlader (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Cyclische plugin-afhankelijkheid gedetecteerd." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Kon plugin met id=\"%s\" niet activeren." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Kon plugin met id=\"%s\" niet vinden." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Fout tijdens activeren van plugin-afhankelijkheden." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Fout bij activeren plugin service #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Fout bij deactiveren plugin service #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Kan pluginlader niet laden" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Kon plugin met id=\"%s\" niet laden." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Fout bij het activeren van plugin afhankelijkheden." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Fouten bij lezen van plugininformatie van bestand \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Kon plugin \"%s\" (ID: %s) niet activeren." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Kon plugin \"%s\" (ID: %s) niet deactiveren." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Fouten bij lezen van informatie over beschikbare plugins." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"Fouten tijdens deactiveren plugin die niet langer op de harde schijf staan." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"De volgende plugins staan niet langer op harde-schijf maar zijn nog wel " +"actief:\n" +"%s\n" +"U moet Gnumeric nu opnieuw opstarten." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Fouten bij activeren plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Fouten bij initialiseren pluginsysteem." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Lader heeft geen methode set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Lader heeft geen methode load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Service '%s' wordt niet ondersteund door lader." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Geen module-bestandsnaam gegeven." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Niet in staat om module bestand \"%s\" te openen" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Module bestand \"%s\" heeft een ongeldig formaat." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Bestand bevat geen (\"plugin_file_struct\" symbool)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Bestand heeft een verkeerd magisch getal." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Pluginversie \"%s\" is anders dan die van programma \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamisch laden van modules wordt in dit systeem niet ondersteund." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Niet in staat om module bestand \"%s\" te sluiten." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Bestand bevat geen \"%s\" functie" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Module bevat \"%s\" functie niet." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Fout bij activeren plugin" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initialiseren van functie binnen plugin gaf een foutmelding." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Schoonmaak functie binnen plugin gaf een foutmelding." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Algemeen" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Bestandsopener heeft geen beschrijving" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Bestandsopener - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Fout bij lezen bestand." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Bestandsopslag heeft geen beschrijving" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Bestandsopslag - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Fout bij opslaan bestand." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Python pluginlader" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject-lader" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Geen \"type\"-attribuut op \"service\"-element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Onbekend servicetype: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Fout bij lezen service-informatie." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"We moeten de service laden voordat we het activeren (PLUGIN_ALWAYS_LOAD is " +"ingesteld) maar het laden is mislukt." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "pagina's" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Inspringen:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Zoek _naar" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Scheiders-stijl" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Uitlijning" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Aanhalings_teken:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Probleem Grootte" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discreet" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Discrete schaalverdeling" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineair" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Lineaire schaalverdeling" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logaritmische schaalverdeling" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Details" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisch" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Categorieën tussen _streepjes" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categorieën tussen _labels" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Kruis bij categorie #" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Grenzen" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "_Hoofdverdeling" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "_Onderverdeling" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Kruis" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Opmaak" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Label" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "HoofdRooster" + +# onder-rooster +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "TussenRooster" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Hoofdverdeling" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Schaalverdeling" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Onderverdeling" + +# was orientatie +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Positie" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "Bi_nnen" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "B_uiten" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Hoog" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "B_innen" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_As omkeren" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Laag" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Buiten" + +# de labels zijn hier getallen op de as +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Getallen tonen" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Rooster" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-as" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-as" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-as" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Circelvormige as" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radiale as" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Tekenen" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Hoogte" + +# Width-Breedte +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Breedte" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Geen foutbalken weergegeven" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Positieve foutbalk weergegeven" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Negatieve foutbalk weergegeven" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Volledige foutbalk weergegeven" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Foutcategorie" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stijl" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Waarden" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "_Kleur:" + +# type/weergave/soort +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "_Weergave:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Geen\n" +"Absoluut\n" +"Relatief\n" +"Percentage" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Lijnbreedte:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Breedte:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Diagram" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Grafiek" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Naam" + +# Dit zijn titels van de dialoogvensters, vandaar gebiedende wijs +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Stap 1 van 2: Kies het soort grafiek" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Stap 2 van 2: Pas de grafiek aan" + +# Venstertitel +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Grafiek aanpassen" + +# de I is een kleine letter voor de sneltoets +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Invoegen" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "_Plot type" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME-Office diagram" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "Volg_orde" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definitie" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Patroon" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stijl" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Voorbeeld" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Beschrijving" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +# Data +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Gegevens" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Series" + +# grafiekmotor +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Plotmotor" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Plot-type" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Grafiekthema" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Index:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Instellingen" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Lettertype" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stijl" + +# helheid? +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 kleuren\n" +"Helderheid" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Vultype" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Lijn" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Markering" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Omtrek" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "K_leur:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Geen\n" +"Patroon\n" +"Kleurverloop\n" +"Afbeelding" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Kleur o_mtrek:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Vorm:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Gr_ootte:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "_Stijl:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Achtergrond:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Richting:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Einde:" + +# vulkleur/opvulkleur +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Vulkleur:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Passen:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Voorgrond:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Patroon:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Selecteren..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Grootte:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Begin:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_lichter" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_donkerder" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "ptn" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"achtergrond\n" +"uitgerekt" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Standaard" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabisch" + +# oost europees? +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltisch" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Centraal-Europees" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinees" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cyrillisch" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grieks" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebreeuws" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indisch" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japans" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreaans" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turks" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +# trema? +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamees" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Westers" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Overige" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabisch (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabisch (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabisch (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabisch (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabisch (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabisch (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabisch (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armeens (ARMSCII-8)" + +# oost europees? +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltisch (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltisch (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltisch (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltisch (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Centraal Europees (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Centraal Europees (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Centraal Europees (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Centraal Europees (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chinees Vereenvoudigd (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chinees Vereenvoudigd (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chinees Vereenvoudigd (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chinees Vereenvoudigd (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chinees Vereenvoudigd (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chinees Traditioneel (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chinees Traditioneel (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chinees Traditioneel (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Kroatisch (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cyrillisch (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillisch (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cyrillisch (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrillisch (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cyrillisch (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrillisch (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russisch (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukraïns (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukraïns (MacUkraïns)<" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Engels (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgisch (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grieks (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grieks (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grieks (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebreeuws (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebreeuws (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebreeuws (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebreeuws (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebreeuws (Windows-1255)" + +# Hindoestaans? +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "IJslands (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japans (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japans (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japans (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Koreaans (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Koreaans (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Koreaans (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Koreaans (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Noors (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Roemeens (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Roemeens (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Zuid Europees (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thais (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turks (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turks (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turks (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turks (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Gebruikersbepaald" + +# trema? +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamees (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamees (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamees (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamees (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Visueel Hebreews (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Westers (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Westers (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Westers (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Westers (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Westers (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Taalinstelling: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Conversierichting" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Deze waarde bepaalt welke iconf-test wordt uitgevoerd." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "zwart" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "lichtbruin" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "goudbruin" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "donkergroen #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "marineblauw" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "donkerblauw" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "paars #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "zeer donkergrijs" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "donkerrood" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "rood-oranje" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "goud" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "donkergroen" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "dofblauw" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blauw" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "dofpaars" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "donkergrijs" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rood" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "orange" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "citroen" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "dofgroen" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "dofblauw #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "hemelsblauw #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "paars" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grijs" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "heloranje" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "geel" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "groen" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyaan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "helblauw" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "rood-paars" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "lichtgrijs" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "roze" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "lichtoranje" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "lichtgeel" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "lichtgroen" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "licht cyaan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "lichtblauw" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "lichtpaars" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "wit" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "paars-blauw" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "donkerpaars" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "hemelsblauw" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "aangepast" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Aangepaste kleur..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Shaduwtype" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Oriëntatie" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Voorkeursbreedte" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Voorkeurshoogte" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Werkbalk vastmaken" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Werkbalk losmaken" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Niet in staat om bestand '%s' te openen" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Alle bestanden" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Afbeeldingen" + +# Kies een afbeelding/Een afbeelding selecteren +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Een afbeelding selecteren" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Opslaan als" + +# bestandtype? +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Bestands_type:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"De opgegeven bestandsextensie komt niet overeen met het gekozen " +"bestandstype. Wilt u evengoed deze naam gebruiken?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"is een mapnaam" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"U heeft geen toestemming om op te slaan naar\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Een bestand %s bestaat al in %s.\n" +"\n" +"Wilt u het vervangen?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normaal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Vet" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Vet cursief" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Cursief" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Lettertypestijl:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Lettertype:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Voorbeeld" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Grootte:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Getal" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +# Financieel +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Boekhouden" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Datum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tijd" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentage" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Breuk" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Wetenschappelijk" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Speciaal" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Aangepast" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Opmaak negatieve getallen" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Getallen opmaak" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "_Categorieën:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "_Decimalen:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Hoeveelheden weergeven in traditionele boekhoudstijl" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Waarden weergeven en invoeren als tekenreeksen zonder interpretatie." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Geldbedragen weergeven." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Datums en optioneel ook tijden weergeven." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Numerieke waarden met een vast aantal decimalen weergeven." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Tijd weergeven." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Waarden als breuk-benadering weergeven" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Waarden weergevan als percentages." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Waarden weergeven in machten van tien." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Opmaak_code:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Opmaak _negatieve getallen" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Voorbeeld:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbool:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Automatisch een geschikte opmaak kiezen." + +# BUG: wat betekent XL hier? moet dat Excel zijn? +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Zelf een opmaak in XL-stijl opgeven " + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formaat:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Dui_zentallen scheiden door punten" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "West-Europa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Oost-Europa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Noord-Amerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Zuid & Centraal-Amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asië" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australië" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Verenigde staten/Engels (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Zuid Afrika Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Ethiopië/Amharisch (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Verenigde Arabische Emiraten (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bagrein (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algerije (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypte (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/Arabisch (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordanië (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Koeweit (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libië (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marokko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi-Arabië (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Soedan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syrië (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunesië (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbeijan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Belarus (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgarije (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengaals (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Frankrijk/Bretons (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnië-Herzegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spanje/Catalaans (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tsjechische Republiek (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Groot Britanië/Welsh (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Denemarken (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Oostenrijk (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "België/Duits (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Zwitserland/Duits (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Duitsland (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburg/Duits (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Griekenland (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australië (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canada/Engels (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Groot-Brittanië (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Engels (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Ierland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/Engels (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nieuw Zeeland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Philippijnen (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/Engels (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Verenigde staten/Engels (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Zuid Afrika/Engels (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentinië (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chili (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominicaanse Republiek (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spanje (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexico (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Verenigde Staten/Spaans (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estland (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spanje/Baskisch (es_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finland/Fins (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Farör eilanden (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "België/Frans (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canada/Frans (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Zwitserland/Frans (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Frankrijk (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Ierland/Gaelic (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Groot Britannië/Scottish Gaelic (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spanje/Galicië (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Groot Britannië/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Kroatië (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hongarije (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenië (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesië (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "IJsland (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Zwitserland/Italiaans (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italië (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebreews (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgië (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Groenland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Groot Britannië/Cornisch (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litouwen (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Letland (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nieuw Zeeland/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedonië (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Maleisië (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "België/Vlaams (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Nederland (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Noorwegen/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Noorwegen/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Frankrijk/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polen (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazilië (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Roemenië (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rusland (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraïne/Russisch (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Noorwegen/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slowakije (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenië (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albanië (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Joegoslavië (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finland/Zweeds (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Zweden (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadjikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Ethiopië/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Philippijnen/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turkije (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rusland/Tataars (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraïne (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Oezbekistan (uz_UZ)" + +# trema? +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnamees (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "België/Waals (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Verenigde Staten/Yiddisch (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinees (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/Chinees (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Huidige taalinstelling: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Het menu met opties" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Indicatorgrootte" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Grootte van de dropdown-indicator" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indicator opvulling" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Spatiëring rondom de indicator" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Zon" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Maa" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Din" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Woe" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Don" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Vry" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Zat" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Zondag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Maandag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Dinsdag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Woensdag" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Donderdag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Vrijdag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Zaterdag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mei" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januari" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februari" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Maart" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mei" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Augustus" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "December" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "WAAR" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "ONWAAR" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Zwart" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Blauw" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyaan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Groen" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rood" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Wit" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Geel" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Verenigde Arabische Emiraten, Dirhams" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistan, Afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albanië, Lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenië, Drams" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Nederlandse Antillen, Gulden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentinië, Peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australië, Dollar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Gulden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbeijan, Manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnië-Herzegovina, converteerbare Marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dollar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgarije, Lev" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bagrein, Dinar" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Frank" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, Dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, Dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, Boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazilië, Braziliaanse Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahama, Dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Boetan, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswanië, Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belarus, Roebel" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, Dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo/Kinshasa, Congolese Frank" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Zwitserland, Frank" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chili, Peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China, Yuan Renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, Peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Ricaanse, Colon" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, Peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Kaap Verdië, Escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cyprus, Pond" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Tsjechische Republiek, Koruna" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djiboeti, Franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Denemarken, Kroon" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominicaanse Republiek, Peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algerije, Alegerijnse dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estland, Krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypte, Pond" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Ethiopië, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro Lidstaten, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, Dollar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland eilanden (Malvinas), Pond" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Verenigd Koninkrijk, Pond" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, Pond" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, Cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, Pond" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, Frank" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, Quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, Dollar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong-Kong, Dollar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Kroatië, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hongarije, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesië, Roepie" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, Shekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, Pond" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, Roepie" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, Dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, Rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "IJsland, Kroon" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Pond" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaika, Dollar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordanië, Dinar" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenia, Shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstan, Soms" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambodja, Riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comoren, Frank" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (Noord), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (Zuid), Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Koeweit, Dinar" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kaaiman eilanden, Dollar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazachstan, Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kip" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, Pond" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, Rupies" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, Dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesoto, Maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litouwen, Litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Litouwen, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libië, Dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marokko, Dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavië, Lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar, Malagese Franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonië, Denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), Kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolië, Tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, Pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritanië, Ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Lire" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, Roepie" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maledieven, Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, Kwachas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexico, Peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Maleisië, Ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambique, Metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibië, Dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, Nairas" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, Gouden Cordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Noorwegen, Kroon" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, Nepalese Roepie" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nieuw Zeeland, Dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omaan, Rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, Nuevos Soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippijnen, Peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, Roepie" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polen, Zlotys" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, Rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Roemenië, Lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusland, Roebel" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, Rwandese Frank" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi-Arabië, Riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomon Eilanden, Dollar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychellen, Roepie" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Soedan, Dinar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Zweden, Kronen" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapor, Dollar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "St.Helena, Pond" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenië, Tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slowakije, Koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, Leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalië, Shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname, Gulden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome en Principe, Dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Colone" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syrië, Pound" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, Emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadjikistan, Roebel" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, Manats" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunesië, Dinar" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkije, Lire" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad en Tobago, Dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalu Dollar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, Nieuwe Dollar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, Shilling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Oekraïne, Hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Oeganda, Shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Verenigde staten van America, Dollar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Oesbekistan, Sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, Bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Francs" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Zilver, Ons" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Goud, Ons" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Oost Caribbië, Dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Internationaal Monetair Fonds (IMF) Special Drawing Rights" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Francs" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, Ons" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, Ons" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, Riaal" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Joegoslavië, Nieuwe Dinar" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Zuid Afrika, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, Zimbabwe dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Geen" + +# was eerst: effen +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Egaal" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Streep" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Punt" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Streep punt" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Streep punt punt" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatisch (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "geen" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "vierkant" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "ruit" + +# neerwaarts +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "driehoek neer" + +# opwaarts +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "driehoek op" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "driehoek rechts" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "driehoek links" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "cirkel" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "kruis" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "sterretje" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "balk" + +# Type markering voor punten in een grafiek +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "halve balk" + +# diabolo +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "vlindertje" + +# Type markering voor punten in een grafiek +# Diabolo? +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "zandloper" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% Grijs" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% Grijs" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% Grijs" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% Grijs" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% Grijs" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontaal gestreept" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Verticaal Gestreept" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Omgekeerd diagonaal gestreept" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonaal gestreept" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonaal gearceerd" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Dik diagonaal gearceerd" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Dun horizontaal gestreept" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Dun verticaal gestreept" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Dun omgekeerd diagonaal gestreept" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Dun diagonaal gestreept" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Dun horizontaal gearceerd" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Dun diagonaal gearceerd" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Voorgrond egaal" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Kleine cirkels" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halve Cirkels" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Riet" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Grote cirkels" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Stenen" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Labels" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Waarden" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Foutbalken" + +# besloten om overal 'plot' weg te laten in de vertaling +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "BalkKolom" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" +"Hoeveel de balken/kolommen overlappen als een percentage van de breedte" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "_Overlap:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Scheiding tussen groepen als een percentage van de balk/kolom-breedte" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Scheiding:" + +# dit is het basiswoord waar getallen achter komen. +# het is mooier om plot weg te laten bij deze dingen: +# dus ipv Taartplot1 enz.: Taart1 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "Lijn" + +# dit is het basiswoord waar getallen achter komen. +# het is mooier om plot weg te laten bij deze dingen: +# dus ipv Taartplot1 enz.: Taart1 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "Gebied" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D Aanliggende balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D Aanliggende kolommen" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D Percentage balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D Percentage kolommen" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D Gestapelde balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D Gestapelde kolommen" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Aanliggende balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Aanliggende kolommen" + +# CHECK is dit begrijpelijk? klopt het? +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Aanliggende horizontale 3D-balken gegroepeerd per hoofd- en subcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "Aanliggende horizontale balken gegroepeerd per hoofd- en subcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Aanliggende verticale 3D-kolommen gegroepeerd per hoofd- en subcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Aanliggende verticale kolommen gegroepeerd per hoofd- en subcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Gebied" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Gebiedgrafiek." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Gebieden" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Balk" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolom" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Lijn" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Lijngrafiek." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Lijnen" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Subcategorieën gestapeld als percentages van het subtotaal, in horizontale " +"3D-balken, gegroepeerd naar hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Subcategorieën gestapeld als percentages van het subtotaal, in verticale 3D-" +"balken, gegroepeerd naar hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Subcategorieën gestapeld als percentages van het subtotaal, in horizontale " +"balken, gegroepeerd naar hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Subcategorieën gestapeld als percentages van het subtotaal, in verticale " +"balken, gegroepeerd naar hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Subcategorieën gestapeld in horizontale 3D-balken, gegroepeerd naar " +"hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Subcategorieën gestapeld in horizontale balken, gegroepeerd naar " +"hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Subcategorieën gestapeld in verticale 3D-kolommen, gegroepeerd naar " +"hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Subcategorieën gestapeld in verticale kolommen, gegroepeerd naar " +"hoofdcategorie." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Percentagegebieden" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Percentagebalken" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Percentagekolommen" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Percentagelijnen" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Percentage-gebiedsgrafiek." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Percentage-lijngrafiek." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Gestapelde gebieden" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Gestapelde balken" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Gestapelde kolommen" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Gestapelde lijnen" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Gestapelde gebiedsgrafiek." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Gestapelde lijngrafiek." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Ongemarkeerde lijnen" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Ongemarkeerde percentagelijnen" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Ongemarkeerde gestapelde lijnen" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Gebiedsplot-module" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Balk/kolom plotmodule" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Grafiek maken: balk/kolom/lijn/gebied" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Standaard 1.5d plot-types" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Lijn plotmodule" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Lijn, gebied, balk en kolom-diagrammen" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Tekenen" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ongeldig wachtwoord" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Tekenen" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Tekenen" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Tekenen" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Balk/kolom plotmodule" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Grafiek maken : Radiale grafiek" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Standaard oppervlakgrafiek-types" + +# dit is het basiswoord waar getallen achter komen. +# het is mooier om plot weg te laten bij deze dingen: +# dus ipv Taartplot1 enz.: Taart1 +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "Taart" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "Ring" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s punt %d\n" +"Waarde %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Aantal graden kloksgewijs vanaf 3 uur" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Punten beginnen _bij:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"De standaardafstand die punten van het centrum zijn verwijderd gemeten als " +"een percentage van de straal van de cirkel." + +# de schijf van vijf! +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Scheiding punten:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "Elke punt een andere _kleur" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "graden" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"De afstand waarmee deze punt van het centrum is verwijderd gemeten als een " +"percentage van de straal van de cirkel." + +# afstand +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Scheiding:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Grootte cen_trum" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D Taart" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D Taart gesplitst" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Hoofdtotalen als percentages met elke punt onderverdeeld in secundaire " +"taarten." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Hoofdtotalen als percentages met elke punt onderverdeeld in secundaire " +"gestapelde balken." + +# wat is dit nu weer? +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Multi-taart" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multi-taart-balken" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Percentage van elk deel in de ring voor elke serie met de delen van de " +"laatste ring gesplitst." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Percentage van elk deel behorend bij de ring van de serie." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentage van elk deel in een 3D-cirkel." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Percentage van elk deel met de 3D-punten van elkaar gescheiden." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentage van elk deel met de punten van elkaar gescheiden." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentage van elk deel." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Taart" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Taart gesplitst" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Ring gesplitst" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Grafiek maken : Taart/Ring" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Standaard taarttypen" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Taart en Ring grafieken" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Taart plot-motor" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Ring plot-motor" + +# besloten om overal 'plot' weg te laten in de vertaling +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "Radar" + +# dit is het basiswoord waar getallen achter komen. +# het is mooier om plot weg te laten bij deze dingen: +# dus ipv Taartplot1 enz.: Taart1 +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "Radargebied" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Radargebied" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Radargebiedgrafiek." + +# met punten/markeringen +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Radar met punten" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Radargrafiek met puntjes." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radargrafiek." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Grafiek maken : Radiale grafiek" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Standaard radargrafiek-types" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Radargebied plot-motor" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Radar plot-motor" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Radiale/Radar grafiek" + +# aantal punten +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "_Aantal punten:" + +# plot niet meevertalen! +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "Contour" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contour" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Contourgrafiek." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Oppervlak" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Contourgrafiek-module" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Oppervlakgrafieken" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Oppervlakgrafieken" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% van normale grootte" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_meter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "_Negatieve waarden tonen" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Opper_vlak" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Ballonnen geschaald op" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Grootte gegeven door:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "Kleuren _wisselen per ballon" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "XY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "Ballonnen" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Ballonnen" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Y foutbalken" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "X foutbalken" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpoleren tussen mulitdimensionale punten." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Lineair interpoleren tussen multi-dimensionale punten, met markeringen bij " +"elk punt." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Lineair interpoleren tussen multi-dimensionale punten." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Markeringen bij elk punt." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Multidimensionale punten met een cirkel bij elke punt." + +# ballonnen ipv bellen +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "X, Y en ballonnen tekenen." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY-lijnen" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY-punten" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY-lijnen" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D plots" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D punten plot-motor" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Ballonnen plot-motor" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Grafiek maken : XY/Punten/Balonnen" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Standaard punten-grafiektypen" diff --git a/lib/goffice-0.0.4/po/nn.po b/lib/goffice-0.0.4/po/nn.po new file mode 100644 index 0000000000..b7382201c4 --- /dev/null +++ b/lib/goffice-0.0.4/po/nn.po @@ -0,0 +1,4443 @@ +# Norwegian (nynorsk) translation of gnumeric. +# Copyright (C) 2001-2002 Roy-Magne Mo +# Roy-Magne Mo , 2001-2002 +# Kjartan Maraas , 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 0.99.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-01-19 18:06+0100\n" +"Last-Translator: Roy-Magne Mo \n" +"Language-Team: Norwegian/Nynorsk \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Lagring over gamle filer av denne typa er ikkje mogleg av tryggleiksgrunnar." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Du kan slÃ¥ av denne tryggleiksfunksjonen ved Ã¥ redigere rett plugin.xml fil." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektiv" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, fuzzy, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Fila inneheld tilleggsmodul-informasjon med ugyldig id (%s), forventa %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Kunne ikkje laste tilleggsmodul-info frÃ¥ fil." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ukjend namn" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ustøtta laster-type «%s»." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Feil ved klargjering av lastar «%s»." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Feil ved lesing av info for teneste #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Kan ikkje lese tilleggsmodulinfo frÃ¥ («%s»)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Fila «%s» er ikkje ei gyldig tilleggsmodul-fil." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Feil ved lesing av tenester for tilleggsmodul med id=«%s»." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ukjent tilleggsmodulnamn." + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Ingen lastar defingert for tilleggsmodul med id=«%s»." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Tilleggsmodul har ikkje noken id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Feil ved initialisering av tilleggsmodullastar («%s»)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Feil ved lasting av tilleggsmodul-avhengigheiter." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Kunne ikkje kople inn tilleggsmodul «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ingen lastar defingert for tilleggsmodul med id=«%s»." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Feil ved lasting av tilleggsmodul-avhengigheiter." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Feil ved aktivisering av tilleggsmodul-teneste #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Feil ved deaktivering av tilleggsmodul-teneste #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Kan ikkje laste tilleggsmodul lastar." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ingen lastar defingert for tilleggsmodul med id=«%s»." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Feil ved lasting av tilleggsmodul-avhengigheiter." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Ein feil oppstod ved lesing av tilleggsmodul-informasjon frÃ¥ fil \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikkje kople inn tilleggsmodul «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikkje kople ut tilleggsmodul «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Feil ved lesing av informasjon om tilgjengeleg tilleggsmodular." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Feil ved deaktivering av tilleggsmodul-teneste #%d." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Feil ved aktivering av tilleggsmodular." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Feil ved initisialisering av tilleggsmodulsystemet." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Teneste ikkje støtta av lastar." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Modulfilnamn ikkje gitt." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ikkje i stand til Ã¥ opne modul fila «%s»." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Modulfila «%s» har ugyldig format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Fila inneheld ikkje («plugin_file_struct» symbolet)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Fila har feil magisk nummer." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Tilleggsmodul versjon «%s» er forskjellig frÃ¥ programmet «%s»." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamisk modullasting er ikkje støtta pÃ¥ dette systemet." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ikkje i stand til Ã¥ lukke modulfil «%s»." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Fila inneheld ikkje «%s» funksjon." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modulen inneheld ikkje «%s» funksjonen." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Feil ved lasting av pluggin teneste." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initialiseringsfunksjon i pluggin-modul returnerte feil." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Opprenskingsfunksjon i pluggin-modul returnerte feil." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Allment" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Filopnar med id=«%s» har ikkje nokon skildring" + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "Filopnar har ikkje nokon id" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Feil ved lesing av fil." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Fillagrar med id=«%s» has ikkje nokon skildring." + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Fillagrar har ikkje nokon id" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Feil ved lagring av fil." + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Python tilleggsmodullastar" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Objektiv verdi" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Ukjent ark «%s»" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Feil ved lesing av info for teneste #%d." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formlar" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Rykk _inn:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Søk etter" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Mellomrom" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Justering" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Siterin_gsteikn:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Linje" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detaljar" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisk" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategori" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Grenser" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_inimum" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_aks" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "L_ukk" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etikett" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Fredag" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Fredag" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Mønster" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Førehandsvisning" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Mønster" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Førehandsvisning" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "I_nnside" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Oversikt" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Høg" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Innside" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "Set _inn" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_LÃ¥g" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Oversikt" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Etikettar" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Forklaring" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Tittel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Rutenett" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-akse" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-akse" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-akse" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Høgd" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "B" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Breidd" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Feilmelding" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Førehandsvisning" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Verdiar" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Fa_rge:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Linjebreidd:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Breidd:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diagram" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Namn" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Steg 1 av 2: Vel graftype" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Steg 2 av 2: Tilpass graf" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Tilpass graf" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Set _inn" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Plott namn" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "_Omsorter ..." + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definisjonar" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Mønster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Førehandsvisning" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Prøve" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Skildring" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "Seriar" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Plott namn" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Plott namn" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Innrykk" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Innstillingar" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Skrifttype" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Førehandsvisning" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Line" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Mønster" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Førehandsvisning" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Farge:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Farge _pÃ¥ omriss:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "OmrÃ¥de :" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Storle_ik:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_il:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Bakgrunn:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Slutt:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Fyllfarge:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Tilpass til:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Framgrunn:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Mønster:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Vel..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Storleik:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Start:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "Høg_re" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "Tabell" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "punkt" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +#, fuzzy +msgid "Default" +msgstr "Slett" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabisk" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltisk" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Sentraleuropeisk" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kinesisk" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kyrillisk" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Gresk" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebraisk" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indisk" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japansk" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreansk" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Tyrkisk" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamesisk" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Vestlig" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Annan" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Brukjardefinert" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale:" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Pearson korrelasjon" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "svart" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "MÃ¥ndag" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "OmrÃ¥de" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "gull" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Celleverdi" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blÃ¥" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "Tabell" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "raud" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oransje" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grÃ¥" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "gul" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "grøn" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Høgrejustering" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Høgrejustering" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Høgrejustering" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "kvit" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "VilkÃ¥rleg verdi" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "eigendefinert" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Tilpass botntekst" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Skugge" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Retning" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Kopier vald omrÃ¥de til klippebord" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Kan ikkje opne fila «%s»" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Alle filer" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Bilete" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Vel eit bilete" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Lagre som" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Fil_type:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"er eit katalognamn" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Du har ikkje skriveløyve til fila:\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Arbeidsboka %s finnast allereide.\n" +"Vil du skrive over den?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Vanleg" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Feit" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Feit kursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Skriftstil:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Skrifttype:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Førehandsvisning" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Storleik:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Nummer" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Rekneskap" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dato" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tid" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Prosent" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Brøk" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Vitskapleg" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "Te_kst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Spesial" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Eigendefinert" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Negativt tal:" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "Bruk _nummerformat" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegoriar:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Desi_malteikn:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "Europesk valutaeining" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Vis _omriss" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Vis verdien eksakt som den vart skriven inn" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Negativt tal:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Førehandsvisning:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Bruk skiljelinje for tusnenar" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "Vest" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "Sentrer pÃ¥ side" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sør-Afrikansk rand" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Bahraini dinar" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "Jordansk dinar" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "Kuwaiti dinar" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "Libysk dinar" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi Arabisk riyal" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "Tunisisk dinar" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Kviterussisk ruble" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "Bulgarsk lev" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "Bangladeshi taka" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "Tjekkisk Koruna" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +#, fuzzy +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg franc" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "New Zealandsk dollar" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Filipinsk peso" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "Sør-Afrikansk rand" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Argentinsk peso" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Chilensk peso" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Colombiansk peso" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Costa Rican colon" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Dominikansk peso" + +#: goffice/gtk/go-locale-sel.c:164 +#, fuzzy +msgid "Ecuador (es_EC)" +msgstr "Ecuador sucre" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Prøving" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "Guatemalan quetzal" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "Honduran lempira" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "Meksikansk peso" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "El Salvador colon" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Uruguansk peso" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "Venezuleansk bolivar" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Prøving" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "Indonesisk rupiah" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +#, fuzzy +msgid "The Netherlands (nl_NL)" +msgstr "Nederlandsk guilder" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "Slovensk tolar" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "Slovensk tolar" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Albansk lek" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslavisk dinar" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "Pakistansk rupee" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "Thai baht" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "Pakistansk rupee" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Noverande verdi:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Meny" + +#: goffice/gtk/go-optionmenu.c:198 +#, fuzzy +msgid "The menu of options" +msgstr "Val for Oaf" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Intern feil" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Sun" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*MÃ¥n" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Tys" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Ons" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Tor" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Fre" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Lau" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Søndag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "MÃ¥ndag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Tysdag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Onsdag" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Torsdag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Fredag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Laurdag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Des" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mars" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Desember" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Svart" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "BlÃ¥" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Grøn" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Raud" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Kvit" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Gul" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +#, fuzzy +msgid "Afghanistan, Afghanis" +msgstr "Afghanistansk afghani" + +#: goffice/utils/formats.c:391 +#, fuzzy +msgid "Albania, Leke" +msgstr "Albansk lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +#, fuzzy +msgid "Netherlands Antilles, Guilders" +msgstr "Netherlands Antillian guilder" + +#: goffice/utils/formats.c:394 +#, fuzzy +msgid "Angola, Kwanza" +msgstr "Angolsk ny kwanza" + +#: goffice/utils/formats.c:395 +#, fuzzy +msgid "Argentina, Pesos" +msgstr "Argentinsk peso" + +#: goffice/utils/formats.c:396 +#, fuzzy +msgid "Australia, Dollars" +msgstr "Australsk dollar" + +#: goffice/utils/formats.c:397 +#, fuzzy +msgid "Aruba, Guilders" +msgstr "Arubisk guilder" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +#, fuzzy +msgid "Barbados, Dollars" +msgstr "Barbados dollar" + +#: goffice/utils/formats.c:401 +#, fuzzy +msgid "Bangladesh, Taka" +msgstr "Bangladeshi taka" + +#: goffice/utils/formats.c:402 +#, fuzzy +msgid "Bulgaria, Leva" +msgstr "Bulgarsk lev" + +#: goffice/utils/formats.c:403 +#, fuzzy +msgid "Bahrain, Dinars" +msgstr "Bahraini dinar" + +#: goffice/utils/formats.c:404 +#, fuzzy +msgid "Burundi, Francs" +msgstr "Burundisk franc" + +#: goffice/utils/formats.c:405 +#, fuzzy +msgid "Bermuda, Dollars" +msgstr "Bermudian dollar" + +#: goffice/utils/formats.c:406 +#, fuzzy +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei dollar" + +#: goffice/utils/formats.c:407 +#, fuzzy +msgid "Bolivia, Bolivianos" +msgstr "Bolivisk boliviano" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "Brasiliansk real" + +#: goffice/utils/formats.c:409 +#, fuzzy +msgid "Bahamas, Dollars" +msgstr "Bahamian dollar" + +#: goffice/utils/formats.c:410 +#, fuzzy +msgid "Bhutan, Ngultrum" +msgstr "Bhutan ngultrum" + +#: goffice/utils/formats.c:411 +#, fuzzy +msgid "Botswana, Pulas" +msgstr "Botswansk pula" + +#: goffice/utils/formats.c:412 +#, fuzzy +msgid "Belarus, Rubles" +msgstr "Kviterussisk ruble" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "Belisisk dollar" + +#: goffice/utils/formats.c:414 +#, fuzzy +msgid "Canada, Dollars" +msgstr "Kanadisk dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +#, fuzzy +msgid "Chile, Pesos" +msgstr "Chilensk peso" + +#: goffice/utils/formats.c:418 +#, fuzzy +msgid "China, Yuan Renminbi" +msgstr "Kinesisk yuan renminbi" + +#: goffice/utils/formats.c:419 +#, fuzzy +msgid "Colombia, Pesos" +msgstr "Colombiansk peso" + +#: goffice/utils/formats.c:420 +#, fuzzy +msgid "Costa Rica, Colones" +msgstr "Costa Rican colon" + +#: goffice/utils/formats.c:421 +#, fuzzy +msgid "Cuba, Pesos" +msgstr "Cubansk peso" + +#: goffice/utils/formats.c:422 +#, fuzzy +msgid "Cape Verde, Escudos" +msgstr "Cape Verde escudo" + +#: goffice/utils/formats.c:423 +#, fuzzy +msgid "Cyprus, Pounds" +msgstr "Kypriotisk pound" + +#: goffice/utils/formats.c:424 +#, fuzzy +msgid "Czech Republic, Koruny" +msgstr "Tjekkisk Koruna" + +#: goffice/utils/formats.c:425 +#, fuzzy +msgid "Djibouti, Francs" +msgstr "Djibouti franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +#, fuzzy +msgid "Dominican Republic, Pesos" +msgstr "Dominikansk peso" + +#: goffice/utils/formats.c:428 +#, fuzzy +msgid "Algeria, Algeria Dinars" +msgstr "Algerisk dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +#, fuzzy +msgid "Egypt, Pounds" +msgstr "Egyptisk pund" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +#, fuzzy +msgid "Ethiopia, Birr" +msgstr "Etiopisk birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "Fiji dollar" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland Islands pund" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +#, fuzzy +msgid "Guernsey, Pounds" +msgstr "Sudanesisk pund" + +#: goffice/utils/formats.c:439 +#, fuzzy +msgid "Ghana, Cedis" +msgstr "Ghanesisk cedi" + +#: goffice/utils/formats.c:440 +#, fuzzy +msgid "Gibraltar, Pounds" +msgstr "Gibraltar pund" + +#: goffice/utils/formats.c:441 +#, fuzzy +msgid "Gambia, Dalasi" +msgstr "Gambisk dalasi" + +#: goffice/utils/formats.c:442 +#, fuzzy +msgid "Guinea, Francs" +msgstr "Guinea franc" + +#: goffice/utils/formats.c:443 +#, fuzzy +msgid "Guatemala, Quetzales" +msgstr "Guatemalan quetzal" + +#: goffice/utils/formats.c:444 +#, fuzzy +msgid "Guyana, Dollars" +msgstr "Guyanan dollar" + +#: goffice/utils/formats.c:445 +#, fuzzy +msgid "Hong Kong, Dollars" +msgstr "Hong Kong dollar" + +#: goffice/utils/formats.c:446 +#, fuzzy +msgid "Honduras, Lempiras" +msgstr "Honduran lempira" + +#: goffice/utils/formats.c:447 +#, fuzzy +msgid "Croatia, Kuna" +msgstr "Kroatisk kuna" + +#: goffice/utils/formats.c:448 +#, fuzzy +msgid "Haiti, Gourdes" +msgstr "Haitisk gourde" + +#: goffice/utils/formats.c:449 +#, fuzzy +msgid "Hungary, Forint" +msgstr "Ungarsk forint" + +#: goffice/utils/formats.c:450 +#, fuzzy +msgid "Indonesia, Rupiahs" +msgstr "Indonesisk rupiah" + +#: goffice/utils/formats.c:451 +#, fuzzy +msgid "Israel, New Shekels" +msgstr "Israelsk shekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +#, fuzzy +msgid "India, Rupees" +msgstr "Indisk rupee" + +#: goffice/utils/formats.c:454 +#, fuzzy +msgid "Iraq, Dinars" +msgstr "Irakisk dinar" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "Iransk rial" + +#: goffice/utils/formats.c:456 +#, fuzzy +msgid "Iceland, Kronur" +msgstr "Islandsk krone" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +#, fuzzy +msgid "Jamaica, Dollars" +msgstr "Jamaican dollar" + +#: goffice/utils/formats.c:459 +#, fuzzy +msgid "Jordan, Dinars" +msgstr "Jordansk dinar" + +#: goffice/utils/formats.c:460 +#, fuzzy +msgid "Japan, Yen" +msgstr "Japansk yen" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "Kenyansk shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +#, fuzzy +msgid "Comoros, Francs" +msgstr "Comoros franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +#, fuzzy +msgid "Kuwait, Dinars" +msgstr "Kuwaiti dinar" + +#: goffice/utils/formats.c:468 +#, fuzzy +msgid "Cayman Islands, Dollars" +msgstr "Cayman Islands dollar" + +#: goffice/utils/formats.c:469 +#, fuzzy +msgid "Kazakstan, Tenge" +msgstr "Pakistansk rupee" + +#: goffice/utils/formats.c:470 +#, fuzzy +msgid "Laos, Kips" +msgstr "Lao kip" + +#: goffice/utils/formats.c:471 +#, fuzzy +msgid "Lebanon, Pounds" +msgstr "Lbanesisk pund" + +#: goffice/utils/formats.c:472 +#, fuzzy +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka rupee" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "Liberian dollar" + +#: goffice/utils/formats.c:474 +#, fuzzy +msgid "Lesotho, Maloti" +msgstr "Lesotho loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +#, fuzzy +msgid "Libya, Dinars" +msgstr "Libysk dinar" + +#: goffice/utils/formats.c:478 +#, fuzzy +msgid "Morocco, Dirhams" +msgstr "Marokkanske dirham" + +#: goffice/utils/formats.c:479 +#, fuzzy +msgid "Moldova, Lei" +msgstr "Moldoviske leu" + +#: goffice/utils/formats.c:480 +#, fuzzy +msgid "Madagascar, Malagasy Francs" +msgstr "Malagasy franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +#, fuzzy +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar kyat" + +#: goffice/utils/formats.c:483 +#, fuzzy +msgid "Mongolia, Tugriks" +msgstr "Mongolsk tugrik" + +#: goffice/utils/formats.c:484 +#, fuzzy +msgid "Macau, Patacas" +msgstr "Macau pataca" + +#: goffice/utils/formats.c:485 +#, fuzzy +msgid "Mauritania, Ouguiyas" +msgstr "Mauritanian ouguiya" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "Maltesisk lira" + +#: goffice/utils/formats.c:487 +#, fuzzy +msgid "Mauritius, Rupees" +msgstr "Mauritius rupee" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +#, fuzzy +msgid "Malawi, Kwachas" +msgstr "Malawi kwacha" + +#: goffice/utils/formats.c:490 +#, fuzzy +msgid "Mexico, Pesos" +msgstr "Meksikansk peso" + +#: goffice/utils/formats.c:491 +#, fuzzy +msgid "Malaysia, Ringgits" +msgstr "Malaysian ringgit" + +#: goffice/utils/formats.c:492 +#, fuzzy +msgid "Mozambique, Meticais" +msgstr "Mozambique metical" + +#: goffice/utils/formats.c:493 +#, fuzzy +msgid "Namibia, Dollars" +msgstr "Liberian dollar" + +#: goffice/utils/formats.c:494 +#, fuzzy +msgid "Nigeria, Nairas" +msgstr "Nigeriansk naira" + +#: goffice/utils/formats.c:495 +#, fuzzy +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikuragiansk cordoba oro" + +#: goffice/utils/formats.c:496 +#, fuzzy +msgid "Norway, Krone" +msgstr "Norsk krone" + +#: goffice/utils/formats.c:497 +#, fuzzy +msgid "Nepal, Nepal Rupees" +msgstr "Nepalsk rupee" + +#: goffice/utils/formats.c:498 +#, fuzzy +msgid "New Zealand, Dollars" +msgstr "New Zealandsk dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +#, fuzzy +msgid "Panama, Balboa" +msgstr "Panamanian balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +#, fuzzy +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea kina" + +#: goffice/utils/formats.c:503 +#, fuzzy +msgid "Philippines, Pesos" +msgstr "Filipinsk peso" + +#: goffice/utils/formats.c:504 +#, fuzzy +msgid "Pakistan, Rupees" +msgstr "Pakistansk rupee" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +#, fuzzy +msgid "Paraguay, Guarani" +msgstr "Paraguay guarani" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "Qatarsk rial" + +#: goffice/utils/formats.c:508 +#, fuzzy +msgid "Romania, Lei" +msgstr "Rumensk leu" + +#: goffice/utils/formats.c:509 +#, fuzzy +msgid "Russia, Rubles" +msgstr "Russisk rubel" + +#: goffice/utils/formats.c:510 +#, fuzzy +msgid "Rwanda, Rwanda Francs" +msgstr "Rwandisk franc" + +#: goffice/utils/formats.c:511 +#, fuzzy +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Arabisk riyal" + +#: goffice/utils/formats.c:512 +#, fuzzy +msgid "Solomon Islands, Dollars" +msgstr "Solomon Islands dollar" + +#: goffice/utils/formats.c:513 +#, fuzzy +msgid "Seychelles, Rupees" +msgstr "Seychelles rupee" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +#, fuzzy +msgid "Singapore, Dollars" +msgstr "Singapore dollar" + +#: goffice/utils/formats.c:517 +#, fuzzy +msgid "Saint Helena, Pounds" +msgstr "St.Helena pund" + +#: goffice/utils/formats.c:518 +#, fuzzy +msgid "Slovenia, Tolars" +msgstr "Slovensk tolar" + +#: goffice/utils/formats.c:519 +#, fuzzy +msgid "Slovakia, Koruny" +msgstr "Slovensk tolar" + +#: goffice/utils/formats.c:520 +#, fuzzy +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone leone" + +#: goffice/utils/formats.c:521 +#, fuzzy +msgid "Somalia, Shillings" +msgstr "Somali shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +#, fuzzy +msgid "Suriname, Guilders" +msgstr "Suriname guilder" + +#: goffice/utils/formats.c:524 +#, fuzzy +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome and Principe dobra" + +#: goffice/utils/formats.c:525 +#, fuzzy +msgid "El Salvador, Colones" +msgstr "El Salvador colon" + +#: goffice/utils/formats.c:526 +#, fuzzy +msgid "Syria, Pounds" +msgstr "Syrian pound" + +#: goffice/utils/formats.c:527 +#, fuzzy +msgid "Swaziland, Emalangeni" +msgstr "Swaziland lilangeni" + +#: goffice/utils/formats.c:528 +#, fuzzy +msgid "Thailand, Baht" +msgstr "Thai baht" + +#: goffice/utils/formats.c:529 +#, fuzzy +msgid "Tajikistan, Rubles" +msgstr "Pakistansk rupee" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +#, fuzzy +msgid "Tunisia, Dinars" +msgstr "Tunisisk dinar" + +#: goffice/utils/formats.c:532 +#, fuzzy +msgid "Tonga, Pa'anga" +msgstr "Tongisk pa'anga" + +#: goffice/utils/formats.c:533 +#, fuzzy +msgid "Turkey, Liras" +msgstr "Tyrkisk lira" + +#: goffice/utils/formats.c:534 +#, fuzzy +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad og Tobago dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +#, fuzzy +msgid "Taiwan, New Dollars" +msgstr "New Taiwan dollar" + +#: goffice/utils/formats.c:537 +#, fuzzy +msgid "Tanzania, Shillings" +msgstr "Tanzanisk shilling" + +#: goffice/utils/formats.c:538 +#, fuzzy +msgid "Ukraine, Hryvnia" +msgstr "Ukrainsk hryvnia" + +#: goffice/utils/formats.c:539 +#, fuzzy +msgid "Uganda, Shillings" +msgstr "Ugandisk shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +#, fuzzy +msgid "Uruguay, Pesos" +msgstr "Uruguansk peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +#, fuzzy +msgid "Venezuela, Bolivares" +msgstr "Venezuleansk bolivar" + +#: goffice/utils/formats.c:544 +#, fuzzy +msgid "Viet Nam, Dong" +msgstr "Vietnamese dong" + +#: goffice/utils/formats.c:545 +#, fuzzy +msgid "Vanuatu, Vatu" +msgstr "Vanuatu vatu" + +#: goffice/utils/formats.c:546 +#, fuzzy +msgid "Samoa, Tala" +msgstr "Samoansk tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +#, fuzzy +msgid "Silver, Ounces" +msgstr "Val for problemløysar" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +#, fuzzy +msgid "East Caribbean Dollars" +msgstr "Aust-karibisk dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +#, fuzzy +msgid "Yemen, Rials" +msgstr "Yemeni rial" + +#: goffice/utils/formats.c:557 +#, fuzzy +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslavisk dinar" + +#: goffice/utils/formats.c:558 +#, fuzzy +msgid "South Africa, Rand" +msgstr "Sør-Afrikansk rand" + +#: goffice/utils/formats.c:559 +#, fuzzy +msgid "Zambia, Kwacha" +msgstr "Zambian kwacha" + +#: goffice/utils/formats.c:560 +#, fuzzy +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ingen" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Einsfarga" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +#, fuzzy +msgid "Dash dot" +msgstr "Dansk krone" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatisk (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ingen" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "OmrÃ¥de" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Disponer til høg_re" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "sirkel" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "rader" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Lim inn lenke" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Mar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% grÃ¥" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% grÃ¥" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% grÃ¥" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12,5% grÃ¥" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6,25% grÃ¥" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Vassrett stripe" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Loddrett stripe" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Omvendt diagonal stripe" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonal stripe" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "SkrÃ¥tt rutenett" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Tjukk diagonal krysslinje" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tynn vassrett stripe" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tynn loddrett stripe" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tynn omvendt diagonal stripe" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tynn diagonal stripe" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tynn loddrett krysslinje" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tynn diagonal krysslinje" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Heilfyld forgrunn" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "SmÃ¥ sirklar" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halvsirklar" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Fletta" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Store sirklar" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Murstein" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etikettar" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Verdiar" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Feil ved lesing av linje" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Graf ..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Teikn" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Teikn" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Set inn kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Set inn kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "OmrÃ¥de" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "OmrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolonne" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linje" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Linjer som importerast:" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "_Rutenett" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Slett kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "_Rutenett" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Prosentar" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "_Rutenett" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Definer namn" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Rad og kolonne overskrifter" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ugyldig(e) argument" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Teikn" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Feil ved lesing av linje" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Endrar formatet pÃ¥ %s" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Definer namn" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Teikn" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Ingenting" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Delingslinje :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "grader" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Delingslinje :" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Kategori:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "Delelinjer" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Del opp" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Multipliser" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Multipliser" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Pris" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "_OmrÃ¥de" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Del opp" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Del opp" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Teikn" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Teikn" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "_Prosentar" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Standard feil" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Slett kolonner" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Definer namn" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Feil ved lesing av linje" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Heile tal" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Tal pÃ¥" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Linjer som importerast:" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Overflate" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Feil ved lesing av linje" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "KjeldeomrÃ¥de" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "KjeldeomrÃ¥de" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% av normal storleik" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "centimeter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "Vis detaljar" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "KjeldeomrÃ¥de" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Teikn" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Dobbel" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Dobbel" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Feil ved lesing av linje" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Feil ved lesing av linje" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Slett kolonner" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Linje" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Punkt" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Linje" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/no.po b/lib/goffice-0.0.4/po/no.po new file mode 100644 index 0000000000..c106a697dc --- /dev/null +++ b/lib/goffice-0.0.4/po/no.po @@ -0,0 +1,4172 @@ +# Norwegian (bokmÃ¥l dialect) translation of gnumeric. +# Copyright (C) 1998-2004 Free Software Foundation, Inc. +# Kjartan Maraas , 1998-2004. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-02-15 00:04+0100\n" +"Last-Translator: Kjartan Maraas \n" +"Language-Team: Norwegian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Lagring over gamle filer av denne typen er deaktivert for sikkerhets skyld." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Du kan slÃ¥ av dette sikkerhetstiltaket ved Ã¥ redigere den relevante .xml-" +"filen." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektiv" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Filen inneholder informasjon om tillegg med ugyldig id (%s), forventet %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Kan ikke lese informasjon om tillegg fra fil." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ukjent navn" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ikke-støttet lastertype «%s»." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Feil under forberedelse av laster «%s»." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Feil under lesing info om tjeneste #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Kan ikke lese informasjonsfil for tillegg («%s»)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Filen «%s» er ikke en gyldig informasjonsfil for tillegg." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Feil under lesing av tjenester for tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Tilleggs-ID inneholder ugyldige tegn (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ukjent navn pÃ¥ tillegg." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Ingen laster definert, eller ugyldig id, for tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Tillegget har ingen id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Feil under initiering av tilleggslaster («%s»)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Fant løkke i tilleggsavhengigheter." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Kunne ikke aktivere tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Kunne ikke finne tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Feil ved aktivering av tilleggsavhengigheter." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Feil under aktivisering av tilleggstjeneste #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Feil under deaktivering av tileggstjeneste #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Kan ikke laste tilleggslaster." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Kunne ikke laste tillegg med id=«%s»." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Feil under lasting av tilleggsavhengigheter." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Det oppsto feil under lesing av informasjon om tillegg fra filen «%s»." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikke aktivere tillegg «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Kunne ikke deaktivere tillegg «%s» (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Feil under lesing av info om tilgjengelige tillegg." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Feil ved deaktivering av tillegg som ikke lenger finnes pÃ¥ disk." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Følgende tillegg er ikke pÃ¥ disk lenger, men er fremdeles aktive:\n" +"%s.\n" +"Du bør starte Gnumeric pÃ¥ nytt nÃ¥." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Feil under aktivisering av tillegg." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Feil under initiering av systemet for tillegg." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Tjeneste «%s» er ikke støttet av laster." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Modulens filnavn er ikke oppgitt." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Kunne ikke Ã¥pne modulfil «%s»." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Modulfil «%s» har ugyldig format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Filen inneholder ikke («plugin_file_struct» symbolet)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Filen har et ugyldig magisk nummer." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Tillegg versjon «%s» er forskjellig fra applikasjonen «%s»." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamisk lasting av moduler er ikke støttet i dette systemet." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Kunne ikke lukke modulfil «%s»." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Filen inneholder ikke «%s»-funksjonen." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modulen inneholder ikke «%s»-funksjonen." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Feil under lasting av tilleggstjeneste." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initiering av funksjon i tillegg returnerte en feil." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Oppryddingsfunksjon i tillegg returnerte en feil." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Generelt" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "FilÃ¥pner har ingen beskrivelse" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "FilÃ¥pner - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Feil under lesing av fil." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Fillagrer har ingen beskrivelse" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Fillagrer - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Feil under lagring av fil." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Tilleggslaster" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject-kaster" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Ingen «type»-attributt pÃ¥ «service»-element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Ukjent tjenestetype: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Feil ved innlesing av beskrivelse av tjeneste." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Vi mÃ¥ laste tjenesten før den aktiveres (PLUGIN_ALWAYS_LOAD er satt) men " +"lasting feilet." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formler" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Rykk _inn:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Søk etter" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Mellomrom" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Justering" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Sitatte_gn:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problemstørrelse" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Lineær" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detaljer" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisk" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Grenser" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_aks" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Kryss" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etikett" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Markør" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Linje" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Skriv ut" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Posisjon" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nnenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Utenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Høy" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Innenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Vend akse" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Lav" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Utenfor" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Vis etiketter" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Type:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Bakgrunn" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Tittel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Rutenett" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-akse" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-akse" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-akse" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Plott" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Høyde" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Bredde" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Feilkategori" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Verdier" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Fa_rge:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "S_kjerm:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Ingen\n" +"Absolutt\n" +"Relativ\n" +"Prosent" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Linjebredde:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Bredde:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Plott" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Navn" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Steg 1 av 2: Velg type graf" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Steg 2 av 2: tilpass graf" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Tilpass graf" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Sett _inn" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Type _plott" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office graf" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Rekkefølge" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definisjon" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Mønster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stil" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Vis\n" +"Eksempel" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Beskrivelse" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Rekker" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Plottemotor" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Type plott" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Indeks:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Innstillinger" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Skrift" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 farger\n" +"lyststyrke" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Fyll" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linje" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Markør" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Omriss" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Farge:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Ingen\n" +"Mønster\n" +"Gradient\n" +"Bilde" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Farge for _omriss:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Form:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "St_ørrelse:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_il:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ype:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Bakgrunn:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "Re_tning:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "Sl_utt:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Fyllfarge:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Tilpass:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Forgrunn:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Mønster:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Velg..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Størrelse:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Start:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_lysere" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_mørkere" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "punkter" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"strukket\n" +"bakgrunn" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Forvalg" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabisk" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltisk" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Sentral-europeisk" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kinesisk" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kyrillisk" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Gresk" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebraisk" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indisk" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japansk" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreansk" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Tyrkisk" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamesisk" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Vestlig" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Annet" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabisk (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabisk (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabisk (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabisk (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabisk (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabisk (MacArabian)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabisk (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armensk (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltisk (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltisk (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltisk (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltisk (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Sentraleuropeisk (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Sentraleuropeisk (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Sentraleuropeisk (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Sentraleuropeisk (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Kinesisk, forenklet (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Kinesisk, forenklet (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Kinesisk, forenklet (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Kinesisk, forenklet (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Kinesisk, forenklet (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Kinesisk, tradisjonell (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Kinesisk, tradisjonell (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Kinesisk, tradisjonell (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Kroatisk (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Kyrillisk (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Kyrillisk (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Kyrillisk (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Kyrillisk (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Kyrillisk (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Kyrillisk (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russisk (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainsk (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainsk (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Engelsk (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgisk (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Gresk (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Gresk (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Gresk (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebraisk (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebraisk (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebraisk (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebraisk (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebraisk (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevangari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandsk (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japansk (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japansk (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japansk (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Koreansk (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Koreansk (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Koreansk (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Koreansk (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordisk (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumensk (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumensk (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Syd-europeisk (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Tyrkisk (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Tyrkisk (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Tyrkisk (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Tyrkisk (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Brukerdefinert" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamesisk (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamesisk (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamesisk (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamesisk (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Vestlig (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Vestlig (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Vestlig (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Vestlig (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Vestlig (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Locale: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Konverteringsretning" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Denne verdien bestemmer hvilke iconv-tester som skal utføres." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "sort" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "lys brun" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "gullbrun" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "mørk grønn #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "marine" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "mørk blÃ¥" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purpur #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "meget mørk grÃ¥" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "mørk rød" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "rød-oransje" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "gull" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "mørk grønn" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "rund blÃ¥" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blÃ¥" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "rund purpur" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "mørk grÃ¥" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "rød" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oransje" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "lime" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "rund grønn" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "rund blÃ¥ #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "himmelblÃ¥ #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purpur" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grÃ¥" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "lys oransje" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "gul" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "grønn" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "lys blÃ¥" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "rød-purpur" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "lys grÃ¥" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "lys oransje" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "lys gul" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "lys grønn" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "lys cyan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "lys blÃ¥" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "lys purpur" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "hvit" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purpuraktig blÃ¥" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "mørk purpur" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "himmelblÃ¥" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "egendefinert" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Egendefinert farge..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Skyggetype" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientering" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Foretrukket bredde" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Foretrukket høyde" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Kunne ikke Ã¥pne fil '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Alle filer" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Bilder" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Velg et bilde" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Lagre som" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Fil_type:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Filnavnet er ikke riktig for denne filtypen. Vil du bruke dette navnet " +"likevel?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"er et katalognavn" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Du har ikke rettigheter til Ã¥ lagre til\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"En fil med navn %s eksisterer allerede i %s.\n" +"\n" +"Vil du overskrive den?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Uthevet" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Fet kursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stil for skrift:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Skrift:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "ForhÃ¥ndsvisning" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Størrelse:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Tall" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Regnskap" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dato" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tid" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Prosent" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Brøk" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Vitenskapelig" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Spesiell" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Egendefinert" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format for negativt tall" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Tallformater" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegorier:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Desi_malplasser:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Vis tid pÃ¥ dagen." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Vis verdier i prosent." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Formatteringsk_ode:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Format for negative tall:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "ForhÃ¥ndsvisning:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Br_uk separator for tusener" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Vest-europa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Øst-europa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Nordamerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Syd- og sentral-amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "USA/engelsk (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sør-Afrika Afrikaans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopia/Ahmarisk (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "De forente arabiske emirater (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Baharain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algerie (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/arabisk (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordan (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libya (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marokko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi-Arabia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Aserbajdsjan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Hviterussland (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Frankrike/breton (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia-Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spania/katalansk (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tjekkia (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Storbritannia/walisisk (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danmark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Østerrike (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgia/tysk (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Sveits/tysk (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Tyskland (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg/tysk (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Hellas (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/engelsk (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Storbritannia (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/engelsk (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/engelsk (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "New Zealand (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filippinene (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/engelsk (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "USA/engelsk (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Sør-Afrika/engelsk (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Den dominikanske republikk (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekvador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spaia (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexico (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "USA/spansk (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estland (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spaia/baskisk (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finnlandsk/finsk (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Færøyene (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgia/fransk (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/fransk (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Sveits/fransk (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Frankrike (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irland/gælisk (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Storbritannia/skotsk gaelisk (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spania/galisisk (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Storbritannia/manx gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Kroatia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ungarn (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Sveits/italiensk (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italia (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/hebraisk (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grønnland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Storbritannia/kornsk (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litauen (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Latvia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Ny Zealand/maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaysia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgia/flamsk (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Nederland (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norge/nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norge/bokmÃ¥l (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Frankrike/occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polen (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romania (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russland (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraina (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norge/samisk (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslavia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finnland/svensk (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Sverige (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadsjikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopia/tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filippinene/tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Tyrkia (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Russland/tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Usbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgia/walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "USA/yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Kina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/kinesisk (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/kinesisk (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Aktivt locale: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Meny" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Søn" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Man" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Tir" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Ons" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Tor" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Fre" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Lør" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Søndag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Mandag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Tirsdag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Onsdag" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Torsdag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Fredag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Lørdag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Des" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mars" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Desember" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "SANN" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "USANN" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Sort" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "BlÃ¥" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Grønn" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Rød" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Hvit" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Gul" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "De forente arabiske emirater, dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "De nederlandske antillene, gylden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, dollar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, gylden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Aserbajdsjan, manats" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnia-Hercegovina, marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dollar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria, leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Baharain, dinarer" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, franc" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei-Darussalam, dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasil, real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Hviterussland, rubler" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Sveits, francs" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Kina, yuan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, pesos" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Kapp Verde, escudos" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Kypros, pund" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Tjekkia, koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danmark, kroner" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Den dominikanske republikk, pesos" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Aleria, dinarer" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt, pund" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nafka" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopia, birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro-medlemsland, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dollar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falklandsøyenes, pund" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Storbritannia, pund" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgia, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, pund" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, pund" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, francs" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzales" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, dollar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hongkong, dollar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempiras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Kroatia, kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gourdes" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Ungarn, forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia, rupiahs" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, shekels" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, pund" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, rupi" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinarer" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, kroner" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, pund" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dollar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, dinarer" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, shilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgisistan, som" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodsja, riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komorene, franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Nord-Korea, won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Sør-Korea, Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dinarer" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Caymanøyene, dollar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kasakhstan, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kips" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, pund" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri lanka, rupi" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litauen, litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia, lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya, dinarer" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marokko, dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldova, lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonia, denars" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar, kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania, ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, liri" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, rupi" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldivene, Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexico, peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia, ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mosambik, meticais" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, gull-cordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norge, krone" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rupi" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "New Zealand, dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, nuevos soles" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Ny-Guinea, kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filippinene, peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupi" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polen, sloty" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania, lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russland, rubel" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, franc" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi-Arabia, riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Salomonøyene, dollar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychellene, rupi" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinarer" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Sverige, kroner" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, dollar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, pund" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia, tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakia, koruny" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, gylden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome og Principe, dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, colon" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria, pund" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadsjikistan, rubler" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manater" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia, dinarer" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Tyrkia, lire" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad og Tobago, dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Tuvalu dollar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, nye dollar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, shilling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraina, hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "USA, dollar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Usbekistan, sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Sølv, unser" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Gull, unser" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Øst-Karribia, dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, unser" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, unser" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslavia, nye dinarer" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Sør-Afrika, rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ingen" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Helfylt" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatisk (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ingen" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "firkant" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "trekant ned" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "trekant opp" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "trekant høyre" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "trekant venstre" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "sirkel" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "kryss" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterisk" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "søyle" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "halvlinje" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "sommerfugl" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "timeglass" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% grÃ¥" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% grÃ¥" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% grÃ¥" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% grÃ¥" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% grÃ¥" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horisontal stripe " + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertikal stripe" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Omvendt diagonal stripe" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonal stripe" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonal krysslinje" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Tykk diagonal krysskravering" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tynn horisontal stripe" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tynn vertikal stripe" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tynn omvendt diagonal stripe" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tynn diagonal stripe" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tynn horisontal krysskravering" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tynn diagonal krysskravering" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Helfylt forgrunn" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "SmÃ¥ sirkler" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halvsirkler" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Thatch" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Store sirkler" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Murstein" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiketter" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Verdier" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Feillinjer" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "O_verlapp:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Mellomrom:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "Plottlinje" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "PlottomrÃ¥de" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Sidestilte søyler i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Sidestilte 3D-kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D prosentsøyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Prosentkolonner i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Stablede søyler i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Stablede kolonner i 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Sidestilte søyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Sidestilte kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "OmrÃ¥de" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "OmrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Søyle" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolonne" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linje" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Linjeplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "ProsentomrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Prosentsøyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Prosentkolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Prosentlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "ProsentomrÃ¥deplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Prosentlinjeplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Stablede omrÃ¥der" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Stablede søyler" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Stablede kolonner" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Stablede linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Stablet omrÃ¥deplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Stablet linjeplott." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Ikke-merkede linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Ikke-merkede prosentlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Ikke-merkede stablede linjer" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Forvalgte typer 1.5d plott" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Linje-, omrÃ¥de-, søyle- og kolonneplott" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Plott" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ugyldig passord" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Plott" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Plott" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Plott" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Motor for bobleplott" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Endrer farge pÃ¥ faner" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Forvalgte typer 1.5d plott" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "grader" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separasjon:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D kake" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D delt kake" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Kake" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Delt kake" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Delt sirkel" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Forvalgte kaketyper" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "PlottRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "PlottRadarOmrÃ¥de" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "OmrÃ¥deRadar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "ProsentomrÃ¥deplott." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radarplott." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Forvalgte typer 1.5d plott" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Hele tall" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Kontur" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Linjeplott." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Overflate" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Motor for omrÃ¥deplott" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "_KildeomrÃ¥der:" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "_KildeomrÃ¥der:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% av forvalgt størrelse" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_meter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Vis _negative verdier" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Over_flate" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "PlottXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "PlottBoble" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Boble" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Feil under lesing av linje" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Feil under lesing av linje" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Markører ved hvert punkt." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY-linjer" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY-punkter" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY-linjer" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D-plott" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Motor for bobleplott" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/pl.po b/lib/goffice-0.0.4/po/pl.po new file mode 100644 index 0000000000..f2a3b37db7 --- /dev/null +++ b/lib/goffice-0.0.4/po/pl.po @@ -0,0 +1,4294 @@ +# Copyright (C) 2001-2002 Free Software Foundation, Inc. +# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +# AktualnÄ… wersjÄ™ tego pliku możesz odnaleźć w repozytorium cvs.gnome.pl +# (:pserver:anonymous@cvs.gnome.pl:/gnomepl, puste hasÅ‚o) +# JeÅ›li masz jakiekolwiek uwagi odnoszÄ…ce siÄ™ do tÅ‚umaczenia lub chcesz +# pomóc w jego rozwijaniu i pielÄ™gnowaniu, napisz do nas na adres: +# translators@gnome.pl +# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-09-05 11:50+0100\n" +"Last-Translator: GNOME PL Team \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Nadpisywanie istniejÄ…cych plików tego typu zostaÅ‚o dla bezpieczeÅ„stwa " +"zablokowane." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Możesz zrezygnować z tego zabezpieczenia, modyfikujÄ…c odpowiedni plik plugin." +"xml." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "czas" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Plik zawiera informacje o wtyczce z niewÅ‚aÅ›ciwym id (%s), oczekiwano %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Nie można odczytać pliku z informacjami wtyczce." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nieznana nazwa" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "NieobsÅ‚ugiwany typ Å‚adowarki \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Podczas przygotowywania Å‚adowarki \"%s\" wystÄ…piÅ‚ błąd." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "WystÄ…piÅ‚ błąd przy odczycie informacji o %d. usÅ‚udze." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Nie można odczytać pliku informacjami o wtyczce (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Plik \"%s\" nie jest poprawnym plikiem z informacjami o wtyczce." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "WystÄ…piÅ‚ błąd podczas odczytu usÅ‚ug wtyczki o id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Identyfikator wtyczki zawiera niepoprawne znaki (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nieznana nazwa wtyczki." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Nie zdefiniowano Å‚adowarki lub posiada ona niepoprawny id dla wtyczki z id=" +"\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Wtyczka nie posiada identyfikatora." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Podczas inicjowania Å‚adowarki (\"%s\") wystÄ…piÅ‚ błąd." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Wykryto cykliczne zależnoÅ›ci wtyczki." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Nie można uaktywnić wtyczki z id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Nie można znaleźć wtyczki z id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "WystÄ…piÅ‚ błęd podczas uaktywniania zależnoÅ›ci wtyczki." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Podczas uaktywniania %d. usÅ‚ugi wtyczki wystÄ…piÅ‚ błąd." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Podczas unieaktywniania %d. usÅ‚ugi wtyczki wystÄ…piÅ‚ błąd." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Nie można zaÅ‚adować Å‚adowarki." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Nie można zaÅ‚adować wtyczki z id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "WystÄ…piÅ‚y błędy podczas Å‚adowania zależnoÅ›ci wtyczki." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Podczas odczytu informacji o wtyczce z pliku \"%s\" wystÄ…piÅ‚y błędy." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Nie można wyłączyć wtyczki \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Nie można wyłączyć wtyczki \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Błędy podczas odczytu informacji o dostÄ™pnych wtyczkach." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"Podczas wyłączania wtyczek, które nie sÄ… już obecne na dysku wystÄ…piÅ‚ błąd." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Poniższe wtyczki nie sÄ… już obecne na dysku lecz sÄ… wciąż aktywne:\n" +"%s.\n" +"Należy teraz uruchomić ponownie Gnumerica." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Błędy podczas uaktywniania wtyczek." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Błędy podczas inicjowania systemu wtyczek." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "UsÅ‚uga \"%s\" nie jest obsÅ‚ugiwana przez podprogram Å‚adujÄ…cy." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nie podano nazwy pliku z moduÅ‚em." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Nie można otworzyć pliku z moduÅ‚em \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Plik z moduÅ‚em \"%s\" jest w niewÅ‚aÅ›ciwym formacie." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Plik nie zawiera symbolu \"plugin_file_struct\"." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Sygnatura pliku jest niewÅ‚aÅ›ciwa." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Wersja wtyczki (\"%s\") nie odpowiada wersji aplikacji (\"%s\")." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "System ten nie obsÅ‚uguje dynamicznego Å‚adowania modułów." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Nie można zamknąć pliku z moduÅ‚em \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Plik nie zawiera funkcji \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "ModuÅ‚ nie zawiera funkcji \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Podczas Å‚adowania usÅ‚ugi wtyczki wystÄ…piÅ‚ błąd." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Funkcja inicjujÄ…ca umieszczona we wtyczce zwróciÅ‚a błąd." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Funkcja finalizujÄ…ca umieszczona we wtyczce zwróciÅ‚a błąd." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Ogólne" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Brak opisu importera plików z identyfikatorem \"%s\"." + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "Importer plików nie posiada identyfikatora." + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "WystÄ…piÅ‚ błąd przy odczycie pliku." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Brak opisu eksportera plików z identyfikatorem \"%s\"." + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Eksporter plików nie posiada identyfikatora." + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "WystÄ…piÅ‚ błąd przy zapisie pliku." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Podprogram Å‚adujÄ…cy wtyczki" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Åadowarka GOBject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Brak atrybutu \"type\" elementu \"service\"." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Nieznany typ usÅ‚ugi: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "WystÄ…piÅ‚ błąd przy odczycie informacji o usÅ‚udze." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Należy zaÅ‚adować usÅ‚ugÄ™ przed jej uaktywnieniem (zmienna PLUGIN_ALWAYS_LOAD " +"jest ustawiona) lecz próba wczytania nie powiodÅ‚a siÄ™." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "FormuÅ‚y" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Wc_iÄ™cie:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Wyszukiwany napis" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "OdstÄ™p" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Wyrównanie" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Znak cytowania:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Rozmiar problemu" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Dyskretny" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Dyskretny" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Linia" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logiczne" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logarytmiczny" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "Ukryj szczegóły" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatyczny" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategoria:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "TÅ‚o" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_inimum" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Maksimum" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Krzyż" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etykieta" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "PiÄ…tek" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "PiÄ…tek" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Znacznik" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Linia" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Znacznik" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Linia" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "WewnÄ™trzne" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Ustawia obwódkÄ™" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "Wysokość" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "WewnÄ™trzne" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "W_staw" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Wiersz" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Ustawia obwódkÄ™" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Etykiety" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Typ:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "TytuÅ‚" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "PiÄ…tek" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "OÅ› X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "OÅ› Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "OÅ› Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Wykres" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Wysokość" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "S" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Szerokość" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Komunikaty o błędach" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Styl" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Próbka" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Kolor :" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "D_zieÅ„" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Szerokość linii:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "N_a:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Wykres" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nazwa" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Krok 1 z 3: Wybór typu wykresu" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Krok 3 z 3: Dopasowanie wykresu" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "ZmieÅ„ główkÄ™" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "W_staw" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Typ _wykresu" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Wykres GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Kolejność" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "UÅ‚ożenie" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "DeseÅ„" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Styl" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"WyÅ›wietl\n" +"przykÅ‚ad" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Opis" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dane" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Serie" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Mechanizm wykresu" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Typ wykresu" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "Wc_iÄ™cie:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "ÅaÅ„_cuchy znakowe" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Czcionka" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Styl" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Jasność" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "WypeÅ‚nienie" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linia" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Znacznik" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Linia" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Kolor :" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Kolor _obwódki:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_KsztaÅ‚t:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Roz_miar:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Styl:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Typ:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "TÅ‚_o:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Kierunek:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "Ko_niec" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Kolor _wypeÅ‚nienia:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "Dop_asowanie do:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Kolor główny:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_DeseÅ„:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Wybierz..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Rozmiar:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_PoczÄ…tek:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "jaskrawoniebieski" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "ciemnoczerwony" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "Opcje" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +#, fuzzy +msgid "Default" +msgstr "UsuÅ„" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "Obszar %i" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "Italic" + +#: goffice/gtk/go-charmap-sel.c:76 +#, fuzzy +msgid "Central European" +msgstr "WyÅ›rodkowanie na stronie" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "zielony" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "Åš_rednia:" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "JapoÅ„ski jen" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Boolowska" + +#: goffice/gtk/go-charmap-sel.c:84 +#, fuzzy +msgid "Turkish" +msgstr "Turecki lir" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "Zmiana nazwy arkusza" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "Zach." + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Inny" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabskie (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabskie (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabskie (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabskie (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabskie (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabskie (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabskie (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "ArmeÅ„skie (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "BaÅ‚tyckie (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "BaÅ‚tyckie (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "BaÅ‚tyckie (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celtyckie (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Åšrodkowoerupejskie (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Åšrodkowoeuropejskie (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Åšrodkowoeuropejskie (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Åšrodkowoeuropejskie (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "ChiÅ„skie uproszczone (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "ChiÅ„skie uproszczone (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "ChiÅ„skie uproszczone (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "ChiÅ„skie uproszczone (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "ChiÅ„skie uproszczone (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "ChiÅ„skie tradycyjne (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "ChiÅ„skie tradycyjne (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "ChiÅ„skie tradycyjne (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Chorwackie (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cyrylica (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrylica (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cyrylica (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrylica (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cyrylica (MacCyrylic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrylica (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Rosyjskie (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "UkraiÅ„skie (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "UkraiÅ„skie (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Angielskie (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "GruziÅ„skie (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Greckie (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Greckie (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Greckie (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrajskie (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebrajskie (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrajskie (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrajskie (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrajskie (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevenagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandzkie (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "JapoÅ„skie (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "JapoÅ„skie (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "JapoÅ„skie (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "KoreaÅ„skie (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "KoreaÅ„skie (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "KoreaÅ„skie (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "KoreaÅ„skie (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordyckie (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "RumuÅ„skie (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "RumuÅ„skie (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "PoÅ‚udniowoafrykaÅ„skie (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tajskie (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Tureckie (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Tureckie (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Tureckie (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Tureckie (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Zdefiniowane przez użytkownika" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Wietnamskie (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Wietnamskie (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Wietnamskie (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Wietnamskie (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hebrajskie wizualne (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Zachodnie (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Zachodnie (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Zachodnie (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Zachodnie (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Zachodnie (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Ustawienia regionalne:" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Kierunek konwersji" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Ta wartość okreÅ›la, jaki test iconv zostanie przeprowadzony." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "czarny" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "jasnobrÄ…zowy" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "brÄ…zowozÅ‚oty" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "ciemnozielony #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "granatowy" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "ciemnoniebieski" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "fioletowy #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "bardzo ciemnoszary" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "ciemnoczerwony" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "czerwonopomaraÅ„czowy" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "zÅ‚oty" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "ciemnozielony" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "niebieski" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "ciemnoszary" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "czerwony" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "pomaraÅ„czowy" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "jasnozielony" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "błękitny #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "fioletowy" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "szary" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "karmazynowy" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "jaskrawopomaraÅ„czowy" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "żółty" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "zielony" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "niebieskozielony" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "jaskrawoniebieski" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "czerwonofioletowy" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "jasnoszary" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "różowy" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "jasnopomaraÅ„czowy" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "jasnożółty" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "jasnobrÄ…zowy" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "bladoniebieski" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "jasnoniebieski" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "jasnofioletowy" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "biaÅ‚y" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "niebieskofioletowy" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "ciemnopurpurowy" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "błękitny" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "dowolny" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Dowolny kolor:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "CieÅ„" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "UÅ‚ożenie" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Nie można otworzyć pliku \"%s\"" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Pliki" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Obraz" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Zaznacza całą kolumnÄ™" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Zapisz wszystko" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Typ pliku:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Podane rozszerzenie pliku nie odpowiada wybranemu typowi pliku. Czy mimo to " +"chcesz użyć tej nazwy?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"jest nazwÄ… katalogu" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Brak uprawnieÅ„ do zapisu w\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Zeszyt %s już istnieje.\n" +"Czy chcesz go nadpisać?" + +# AL: chodzi o rozkÅ‚ad liczb losowych i czcionkÄ™... jak to pogodzić +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normalny/a" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "WytÅ‚uszczenie" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Pogrubiony italic" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Pochylenie" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Styl czcionki:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Czcionka:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "PodglÄ…d" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Rozmiar:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Liczba" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Waluta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Rachunkowe" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Data" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Czas" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "_Procentowe" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "UÅ‚amek" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Naukowe" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Specjalne" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Dowolne" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format liczby ujemnej" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formaty liczb" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegorie:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "_Miejsca dziesiÄ™tne:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "WyÅ›wietlanie kwot w tradycyjnym stylu ksiÄ™gowania." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "WyÅ›wietlanie i wprowadzanie wartoÅ›ci jako nieinterpretowanych napisów." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "WyÅ›wietlanie kwot walut." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "WyÅ›wietlanie dat i opcjonalnie czasu dnia." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" +"WyÅ›wietlanie wartoÅ›ci numerycznych ze zmiennÄ… liczbÄ… miejsc dziesiÄ™tnych." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "WyÅ›wietlanie czasu dnia." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "WyÅ›wietlanie wartoÅ›ci do najbliższego przybliżenia uÅ‚amka." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "WyÅ›wietlanie wartoÅ›ci jako wartoÅ›ci procentowych." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "WyÅ›wietlanie wartoÅ›ci w skali potÄ™gi z dziesiÄ™ciu." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "_Kod formatu:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Format liczby _ujemnej:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "PodglÄ…d:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Sym_bol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Automatyczny wybór odpowiedniego formatu." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "BezpoÅ›rednie okreÅ›lenie formatu w stylu XL" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Separatory _tysiÄ™cy" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europa Zachodnia" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europa Wschodnia" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Ameryka Północna" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Ameryka Åšrodkowa i PoÅ‚udniowa" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Azja" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afryka" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australia" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Stany Zjednoczone/Angielski (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Afryka PoÅ‚udniowa/Afrykanerski (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopia/Amharic (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Zjednoczone Emiraty Arabskie (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrajn (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algieria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egipt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Indie/Arabski (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordania (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwejt (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libia (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libia (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Katat (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Arabia Saudyjska (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunezja (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbejdżan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "BiaÅ‚oruÅ› (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "BuÅ‚garia (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesz (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Indie/Bengalski (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francja/BretoÅ„ski (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "BoÅ›nia i Hercegowina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Hiszpania/KataloÅ„ski (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Republika Czeska (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Wielka Brytania/Walijski (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dania (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgia/Niemiecki (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Szwajcaria/Niemiecki (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Niemcy (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luksemburg/Niemiecki (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grecja (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australia (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Bostwana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/Angielski (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Wielka Brytania (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Angielski (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlandia (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Indie/Angielski (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nowa Zelandia (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipiny (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/Angielski (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Stany Zjednoczone/Angielski (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Afryka PoÅ‚udniowa/Angielski (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentyna (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Boliwia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Kostaryka (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Republika Dominikany (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekwador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Hiszpania (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Gwatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Meksyk (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nikaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paragwaj (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "Salwador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Stany Zjednoczone/HiszpaÅ„ski (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Urugwaj (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Wenezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonia (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Hiszpania/Baskijski (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlandia/FiÅ„ski (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Wyspy Faroe (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgia/Francuski (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/Francuski (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Szwajcaria/Francuski (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francja (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlandia/Galijski (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Wielka Brytania/Szkocki Galijski (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Hiszpania/Galijski (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Wielka Brytania/Galijski Manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Indie/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Chorwacja (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "WÄ™gry (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armenia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonezja (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islandia (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_tl)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Szwajcaria/WÅ‚oski (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "WÅ‚ochy (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Izrael/Hebrajski (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japonia (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Gruzja (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grenlandia (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Wielka Brytania/Kornijski (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litwa (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Åotwa (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nowa Zelandia/Maoryski (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedonia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Indie/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malezja (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgia/Flamandzki (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holandia (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norwegia/Nyorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norwegia/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francja/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polska (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazylia (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugalia (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumunia (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rosja (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraina/Rosyjski (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norwegia/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "SÅ‚owacja (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "SÅ‚owenia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albania (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "JugosÅ‚awia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlandia/Szwedzki (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Szwecja (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Indie/Tamilski (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Indie/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadżykistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tajlandia (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Erytrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopia/Tigtinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipiny/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turcja (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rosja/Tatarski (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Wietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgia/Walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Stany Zjednoczone/Jidisz (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Chiny (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chiny (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/Chiny (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Tajwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Bieżące ustawienia reg.:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Menu opcji" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Rozmiar wskaźnika" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Błąd wewnÄ™trzny" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Nie" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Pon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Wto" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Åšro" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Czw" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*PiÄ…" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sob" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Niedziela" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "PoniedziaÅ‚ek" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Wtorek" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Åšroda" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Czwartek" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "PiÄ…tek" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sobota" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Sty" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Lut" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Kwi" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Maj" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Cze" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Lip" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Sie" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Wrz" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Paź" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Lis" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Gru" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "StyczeÅ„" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Luty" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Marzec" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "KwiecieÅ„" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Maj" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Czerwiec" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Lipiec" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "SierpieÅ„" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "WrzesieÅ„" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Październik" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Listopad" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "GrudzieÅ„" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "PRAWDA" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FAÅSZ" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Czarny" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Niebieski" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Niebieskozielony" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Zielony" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Purpurowy" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Czerwony" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "BiaÅ‚y" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Żółty" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Zjednoczone Emiraty Arabskie, Dirhama" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistan, afgani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Antyle Holenderskie, gulden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentyna, peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia, dolar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, gulden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbejdżan, manat" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "BoÅ›nia i Hercegowina, marka wymienialna" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dolar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesz, taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "BuÅ‚garia, lew" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrajn, dinar" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, frank" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermudy, dolar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "KsiÄ™stwo Brunei, dolar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Boliwia, boliwiano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazylia, real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Wyspy Bahama, dolar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "BiaÅ‚oruÅ›, rubel" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dolar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, dolar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/Kinszasa, frank kongijski" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Szwajcaria, frank" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Chiny, yuan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbia, peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Kostaryka, colon" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde, escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cypr, funt" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Republika czeska, korona" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Dżibti, frank" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dania, korona duÅ„ska" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Republika Dominikany, peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algieria, dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia, korona estoÅ„ska" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egipt, funt" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Erytrea, nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopia, birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "CzÅ‚onkowie strefy euro, euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidżi, dolar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Wyspy falklandzkie (Malwiny), funt" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Wielka Brytania, funt" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Gruzja, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, funt" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, funt" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Gwinea, frank" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Gwatemala, quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Gujana, dolar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dolar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Chorwacja, kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "WÄ™gry, forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonezja, rupia" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Izrael, nowy szekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Wyspy CzÅ‚owiecze, funt" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Indie, rupia" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islandia, korona" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, funt" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamajka, dolar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordania, dinar" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japonia, jen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenia, szyling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgistan, som" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodża, riel" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komory, frank" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (Północna), won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (PoÅ‚udniowa), won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwejt, dinar" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kajmany, dolar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazachstan, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "LaostaÅ„ska kipa" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libia, funt" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, rupia" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, dolar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litwa, lit" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Åotwa, Å‚at" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libia, dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroko, dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "MoÅ‚dowa, lej" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, malaski frank" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonia, denar" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), kiat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia, tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Makau, pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauretania, ouguia" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lir" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, rupia" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldiwy (Wyspy), Rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Meksyk, peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malezja, ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambik, metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dolar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikaragua, kordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norwegia, korona" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rupia" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nowa Zelandia, dolar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, nowy sol" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nowa Gwinea, kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipiny, peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupia" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polska, zÅ‚oty" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paragwaj, guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar, rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumunia, lew" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rosja, rubel" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, frank" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Arabia Saudyjska, rial" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Wyspy Salomona, dolar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seszele, rupia" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Szwecja, korona" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, dolar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Wyspy Åšw. Heleny, funt" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "SÅ‚owenia, tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "SÅ‚owacja, korona" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, szyling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, gulden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome i Principe, dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "Salwator, colon" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria, funt" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tajlandia, bat" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadżykistan, rubel" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manat" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunezja, dinar" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turcja, lir" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trynidad i Tobago. dolar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, dolar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Tajwan, dolar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, szyling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraina, hrywna" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, szyling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Stany Zjednoczone Ameryki, dolar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Urugwaj, peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Wenezuela, boliwar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Wietnam, dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "AfrykaÅ„skie Stowarzyszenie Finansowe BEAC, frank" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Srebro, uncja" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "ZÅ‚oto, uncja" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Dolar wschodniokaraibski" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "AfrykaÅ„skie Stowarzyszenie Finansowe BCEAO, frank" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Pallad, uncja" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platyna, uncja" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "JugosÅ‚owia, nowy dinar" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Afryka PoÅ‚udniowa, rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dolar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Brak" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Jednolity" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatyczny" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Brak" + +#: goffice/utils/go-marker.c:221 +#, fuzzy +msgid "square" +msgstr "ŹródÅ‚o" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Mediana" + +#: goffice/utils/go-marker.c:223 +#, fuzzy +msgid "triangle down" +msgstr "zakres" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "zakres" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "zakres" + +#: goffice/utils/go-marker.c:226 +#, fuzzy +msgid "triangle left" +msgstr "zakres" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "OkrÄ…g" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "Krzyż" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Wklej odnoÅ›nik" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +#, fuzzy +msgid "butterfly" +msgstr "Motyl" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% szaroÅ›ci" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% szaroÅ›ci" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% szaroÅ›ci" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12,5% szaroÅ›ci" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6,25% szaroÅ›ci" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Poziome prążki" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Pionowe prążki" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Odwrócone ukoÅ›ne prążki" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "UkoÅ›ne prążki" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "UkoÅ›nie skrzyżowane prążki" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Grube ukoÅ›nie skrzyżowane prążki" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Cienkie poziome prążki" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Cienkie pionowe prążki" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Cienkie odwrócone ukoÅ›ne prążki" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Cienkie ukoÅ›ne prążki" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Cienkie skrzyżowane poziomo prążki" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Cienkie skrzyżowane ukoÅ›nie prążki" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "WypeÅ‚nienie kolorem" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "MaÅ‚e okrÄ™gi" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "PółokrÄ™gi" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "SÅ‚oma" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Duże okrÄ™gi" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "CegÅ‚y" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etykiety" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "WartoÅ›ci" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "WystÄ…piÅ‚ błąd przy analizie wiersza" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "Wyk_res..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Wykres" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Wykres" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Procenty" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Wstaw kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Wstaw kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Obszar" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Wykres obszarowy." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Obszary" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Pasek" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolumna" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linia" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Wykres liniowy." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linie" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Procenty" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Procenty" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Procenty" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Procenty" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "DomyÅ›lne typy wykresu 1.5d" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Mechanizm rysowania linii" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Wykresy liniowe, obszarowe, sÅ‚upkowe i kolumnowe" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Wykres" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Niepoprawne hasÅ‚o" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Wykres" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Wykres" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Wykres" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Mechanizm rysowania linii" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Zmiana kolorów zakÅ‚adek" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "DomyÅ›lne typy wykresu 1.5d" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Wykres" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Nic" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Separator :" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "stopni(e)" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Separator:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Kategoria :" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "_Linie siatki" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Rozdziel" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Przemnóż" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Przemnóż" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "KoÅ‚o" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "PierÅ›cieÅ„" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Rozdziel" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Rozdziel" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "Wykres" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Wykres" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Wykres obszarowy." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Błąd standardowy" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "DomyÅ›lne typy wykresu 1.5d" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Mechanizm rysowania linii" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Mechanizm rysowania linii" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Liczby caÅ‚kowite" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Liczba" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Wykres obszarowy." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "ŹródÅ‚o" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Mechanizm rysowania linii" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Obszary źródÅ‚owe:" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Obszary źródÅ‚owe:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% z_wykÅ‚ego rozmiaru" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Parametry" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "ŹródÅ‚o" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Wykres" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Podwójne" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Podwójne" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "WystÄ…piÅ‚ błąd przy analizie wiersza" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "WystÄ…piÅ‚ błąd przy analizie wiersza" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "UsuÅ„ kolumny" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Linie" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Punkt" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Linie" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +#, fuzzy +msgid "Bubble plotting engine" +msgstr "Mechanizm rysowania linii" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/pt.po b/lib/goffice-0.0.4/po/pt.po new file mode 100644 index 0000000000..e1980d1962 --- /dev/null +++ b/lib/goffice-0.0.4/po/pt.po @@ -0,0 +1,4235 @@ +# gnumeric's Portuguese Translation +# Copyright © 2001, 2002, 2003, 2004, 2005 gnumeric +# Distributed under the same licence as the gnumeric package +# Duarte Loreto , 2001, 2002, 2003, 2004, 2005 +# +msgid "" +msgstr "" +"Project-Id-Version: 2.10\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-01-10 01:50+0000\n" +"Last-Translator: Duarte Loreto \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Gravar sobre ficheiros antigos deste tipo não é permitido por questões de " +"segurança." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Pode desligar esta medida de segurança editando o ficheiro plugin.xml " +"apropriado." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objectivo" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Ficheiro contém informação de plugin com id inválido (%s), esperado %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Incapaz de ler a informação de plugin do ficheiro." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nome desconhecido" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Tipo de carregador não suportado \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Erro ao preparar o carregador \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Erro ao ler a informação de serviço #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Incapaz de ler o ficheiro de informação de plugin (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "\"%s\" não é um ficheiro de informação de plugin válido." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Erros ao ler serviços do plugin com o id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "ID plugin contém caracteres inválidos (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nome de plugin desconhecido." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Nenhum leitor definido ou id de leitor inválido para plugin com o id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin não tem id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Erro ao inicializar o carregardor de plugins (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Detectadas dependências cíclicas de plugin." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Incapaz de activar plugin com o id =\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Incapaz de encontrar o plugin com o id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Erro ao activar dependências do plugin." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Erro ao activar o serviço de plugin #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Erro ao desactivar o serviço de plugin #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Incapaz de carregar o leitor de plugins." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Incapaz de ler plugin com o id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Erro ao ler dependências do plugin." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Ocorreram erros ao ler do ficheiro a informação de plugins \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Incapaz de activar plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Incapaz de desactivar plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Erros ao ler informação sobre os plugins disponíveis." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Erro ao desactivar plugins que já não se encontram em disco." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Os seguintes plugins já não se encontram no disco mas ainda estão activos:\n" +"%s.\n" +"Deverá reiniciar o Gnumeric agora." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Erros ao activar plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Erros ao inicializar o sistema de plugins." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Carregador não possui nenhum método set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Carregador não possui nenhum método load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Serviço '%s' não suportado pelo carregador." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nome de ficheiro de módulo não indicado." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Incapaz de abrir ficheiro de módulo \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Ficheiro de módulo \"%s\" tem formato inválido." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Ficheiro não contém (símbolo \"plugin_file_struct\")." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Ficheiro tem número mágico incorrecto." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Versão do plugin \"%s\" é diferente da aplicação \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Carregamento dinâmico de módulos não é suportado neste sistema." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Incapaz de fechar ficheiro de módulo \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Ficheiro não contém função \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Módulo não contém função \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Erro ao carregar o serviço de plugin." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Função de inicialização dentro do plugin retornou erro." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Função de limpeza dentro do plugin devolveu erro." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Geral" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Abre ficheiros não tem descrição" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Abre ficheiros - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Erro ao ler ficheiro." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Gravador de ficheiros não tem descrição" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Gravador de ficheiros - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Erro ao gravar ficheiro." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Leitor plugin" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Leitor GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Nenhum atributo \"tipo\" no elemento \"serviço\"." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Tipo de serviço desconhecido: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Erro ao ler informação de serviço." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"O serviço tem de ser lido antes de ser activado (PLUGIN_ALWAYS_LOAD está " +"definida) mas a leitura falhou." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Fórmulas" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indentar:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Pr_ocurar por" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Espaço" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alinhamento" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Caracter de _citação:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Tamanho Problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discreto" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Discreto" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Linear" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Lógico" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logarítmico" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detalhes" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automático" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Categoria:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Limites" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "Má_x" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "_Escala Principal" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Escala Secu_ndária" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Cruz" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formatação" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etiqueta" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Grelha" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Grelha" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Escala Principal:" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Linha" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Escala Secundária:" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Orientação" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "De_ntro" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Fora" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Alta" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Dentro" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Inverter" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Baixa" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "F_ora" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "Mo_strar Etiquetas" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tipo:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Título" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Grelha" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Eixo-X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Eixo-Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Eixo-Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Gráfico" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "A" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Altura" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "L" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Largura" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Alertas de Erro" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Estilo" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Amostra" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Cor:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "Di_a" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Largura de Linha:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "Co_m:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Gráfico" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Gráfico" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nome" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Passo 1 de 2: Seleccionar Tipo de Gráfico" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Passo 2 de 2: Personalizar Gráfico" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Personalizar Gráfico" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Inserir" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Tipo Gráfico _Pontos" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Gráfico Office GNOME" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Ordenar" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definição" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Padrão" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Estilo" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Apresentar\n" +"Amostra" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Descrição" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Texto:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dados" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Séries" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Motor Gráfico" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Tipo Gráfico Pontos" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Tema Gráfico" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Indentar:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Expressões" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Ponto" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Fonte" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Estilo" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Brilho" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Encher" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linha" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marcador" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Realçar" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Cor:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "C_or delimitação:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Forma:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Taman_ho:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Estilo:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ipo:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Fundo:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Direcção:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Fim:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Cor _enchimento:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Redimensionar:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_1º Plano:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Padrão:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Seleccionar..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Tamanho:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Início" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "mais _brilhante" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "mais _escuro" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "esticado" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Omissão" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Ãrabe" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Báltico" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Europa Central" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinês" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cirílico" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grego" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebreu" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indiano" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonês" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Coreano" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turco" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Ocidental" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Outra" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Ãrabe (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Ãrabe (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Ãrabe (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Ãrabe (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Ãrabe (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Ãrabe (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Ãrabe (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Arménio (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Báltico (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Báltico (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Báltico (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celta (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Europa Central (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Europa Central (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Europa Central (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Europa Central (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chinês Simplificado (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chinês Simplificado (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chinês Simplificado (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chinês Simplificado (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chinês Simplificado (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chinês Tradicional (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chinês Tradicional (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chinês Tradicional (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croata (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cirílico (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cirílico (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cirílico (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russo (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ucraniano (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ucraniano (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Inglês (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgiano (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grego (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grego (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grego (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebreu (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebreu (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebreu (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebreu (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebreu (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandês (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonês (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonês (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonês (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Coreano (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Coreano (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Coreano (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nórdico (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Romeno (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Romeno (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Sul Europeu (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tailandês (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turco (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turco (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turco (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Definido Utilizador" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamita (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamita (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamita (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamita (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hebreu Visual (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Ocidental (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Ocidental (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Ocidental (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Ocidental (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Ocidental (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Local: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Direcção da Conversão" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Este valor determina que teste iconv realizar." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "preto" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "castanho claro" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "castanho dourado" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "verde escuro nº2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "azul marinho" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "azul escuro" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "púrpura nº2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "cinzento muito escuro" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "vermelho escuro" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "vermelho alaranjado" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "dourado" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "verde escuro" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "azul mate" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "azul" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "púrpura mate" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "cinzento escuro" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "vermelho" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "laranja" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "lima" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "verde mate" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "azul mate nº2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "azul céu nº2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "púrpura" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "cinzento" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "laranja brilhante" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "amarelo" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "verde" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cian" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "azul brilhante" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "vermelho púrpura" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "cinzento claro" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "laranja claro" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "amarelo claro" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "verde claro" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "cian claro" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "zaul claro" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "púrpura claro" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "branco" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "azul púrpura" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "púrpura escuro" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "azul céu" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "personalizada" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Cor Personalizada:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Sombra" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orientação" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Incapaz de abrir ficheiro '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Todos os Ficheiros" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Imagens" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Seleccionar uma Imagem" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Gravar como" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Tipo ficheiro:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"A extensão de ficheiro indicada não coincide com o tipo de ficheiro " +"seleccionado. Ainda assim deseja utilizar este nome?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"é um nome de directório" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Não tem permissões para gravar para\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Já existe um ficheiro chamado %s em %s.\n" +"\n" +"Deseja sobrepo-lo?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Negrito" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Negrito itálico" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Itálico" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Estilo fonte:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Fonte:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Antever" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Tamanho:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Número" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Moeda" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Contabilidade" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Data" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Hora" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentagem" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fracção" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Científico" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Texto" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Especial" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personalizado" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Formato Número negativo" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formatos Números" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegorias:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Casas deci_mais:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Apresentar montantes nos estilos contabilísticos tradicionais." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" +"Apresentar e dar entrada de valores como expressões sem qualquer " +"interpretação." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Apresentar montantes em moeda." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Apresentar datas e opcionalmente horas do dia." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Apresentar valores numéricos com um número fixo de casas decimais." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Apresentar horas do dia." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Apresentar valores como a mais aproximada fracção." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Apresentar valores como percentagens." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Apresentar valores como potências de 10." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Código f_ormatação:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Formato número negativo:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Antever:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ímbolo:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Seleccionar automaticamente um formato apropriado." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Especificar directamente um formato estilo XL" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formato:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Utilizar Separador para 1000s" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europeu Ocidental" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europa Oriental" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "América do Norte" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "América Sul & Centro" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ãsia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Ãfrica" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Austrália" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Estados Unidos/Inglês (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Afrikaans Ãfrica do Sul (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Amharic/Etiópia (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Emirados Ãrabes Unidos (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algéria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egipto (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Ãndia/Ãrabe (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraque (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordania (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Líbano (ar_LI)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Líbia (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marrocos (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Quatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Arábia Saudita (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudão (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Síria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunísia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Yemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbeijão (ar_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Bielorussia (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgária (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Ãndia/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "França/Bretanha (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnia e Herzegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Espanha/Catalão (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "República Checa (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Grã-Bretanha/Galês (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dinamarca (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Ãustria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Bélgica/Alemão (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Suiça/Alemão (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Alemanha (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburgo/Alemão (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grécia (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Austrália (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canadá/Inglês (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Grã-Bretanha (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Inglês (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlanda (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Ãndia/Inglês (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nova-Zelândia (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipinas (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapura/Inglês (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Estados Unidos/Inglês (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Ãfrica do Sul/Inglês (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolívia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colômbia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "República Dominicana (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Equador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Espanha (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "México (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicarágua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panamá (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Perú (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Porto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguai (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Estados Unidos/Espanhol (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguai (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estónia (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Espanha/Basco (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Irão (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlândia/Finlandês (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Ilhas Farao (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Bélgica/Francês (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canadá/Francês (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Suiça/Francês (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "França (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlanda/Gaélico (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Grã-Bretanha/Gaélico Escocês (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Espanha/Galego (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Grã-Bretanha/Gaélico Manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Ãndia/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croácia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Hungria (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Arména (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonésia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islândia (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Suiça/Italiano (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Itália (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebreu (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japão (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Geórgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Gronolândia (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Coreia (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Grã-Bretanha/Cornualho (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lituânia (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Letónia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nova Zelândia/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedónia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Ãndia/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malásia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Bélgica/Flamengo (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holanda (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Noruega/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Noruega/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "França/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polónia (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Roménia (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Russia (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ucrania/Russo (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Noruega/Saami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Eslováquia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Eslovénia (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albânia (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslávia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlândia/Suéco (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Suécia (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Ãndia/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Ãndia/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadjaquistão (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tailândia (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritreia (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiópia/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipinas/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turquia (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rússia/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ucrania (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Paquistão (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbequistão (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietname (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Bélgica/Walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Estados Unidos/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinês (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapura/Chinês (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Ilha Formosa (Taiwan) (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Local Actual: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "O menu de opções" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Tamanho Indicador" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Tamanho do indicador de queda" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Espaçamento Indicador" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Espaçamento em torno do indicador" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dom" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Seg" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Ter" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Qua" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Qui" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Sex" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sab" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Domingo" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Segunda" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Terça" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Quarta" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Quinta" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Sexta" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sábado" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Fev" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Abr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ago" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Set" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Out" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dez" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Janeiro" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Fevereiro" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Março" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Abril" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Maio" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Junho" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Julho" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Agosto" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Setembro" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Outubro" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Novembro" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Dezembro" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "VERDADE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSO" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Preto" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Azul" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cian" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Verde" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Vermelho" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Branco" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Amarelo" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Dirhams, Emirados Ãrabes Unidos" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghani, Afganistão" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Leke, Albania" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Drams, Arménia" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Guilders, Antilhas Holandesas" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Kwanza, Angola" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Peso, Argentina" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Dolar, Austrália" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Guilders, Aruba" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Manats, Azerbeijão" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Marka Conversível, Bosnia e Herzegovina" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Dolar, Barbados" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Taka, Bangladesh" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Leva, Bulgária" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Dinar, Bahrain" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Franco, Burundi" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Dolar, Bermudas" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Dolar, Brunei Darussalam" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Boliviano, Bolivia" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Real Brasileiro, Brasil" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Dolar, Bahamas" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Ngultrum, Butão" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Pula, Bostwana" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Rublo, Bielorussia" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Dolar, Belize" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Dolar, Canadá" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Franco Congolês, Congo/Kinshasa" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Franco, Suiça" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Peso, Chile" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Yuan Renminbi, China" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Peso, Colombia" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Colones, Costa Rica" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Peso, Cuba" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Escudos, Cabo-Verde" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Libra, Chipre" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Koruny, República Checa" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Franco, Djibouti" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Coroa, Dinamarca" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Peso, República Dominicana" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Dinar Argelino, Algéria" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Krooni, Estónia" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Libra, Egípto" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Nakfa, Eritreia" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Birr, Etiópia" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro, Paises Membros Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Dolar, Fiji" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Libra, Ilhas Malvinas (Falkland)" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Libra, Reino Unido" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Lari, Geórgia" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Libra, Guernsey" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Cedis, Ghana" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Libra, Gibraltar" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Dalasi, Gambia" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Franco, Guiné" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Quetzales, Guatemala" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Dolar, Guiana" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Dolar, Hong-Kong" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Lempira, Honduras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Kuna, Croácia" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Gourde, Haiti" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Florin, Hungria" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Rupia, Indonésia" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Novo Shekel, Israel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Libra, Ilha de Man" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Rupia, India" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Dinar, Iraque" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Rial, Irão" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Kronur, Islândia" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Libra, Jersey" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Dolar, Jamaica" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Dinar, Jordania" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Yen, Japão" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Shilling, Quénia" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Soms, Quirgistão" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Riels, Cambodja" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Franco, Comoros" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Won, Coreia (Norte)" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Won, Coreia (Sul)" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Dinar, Kuwait" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Dolar, Ilhas Caimão" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Tenge, Casaquistão" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Kip, Laos" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libra, Líbano" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Rupia, Sri-Lanka" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Dolar, Libéria" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Maloti, Lesoto" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litai, Lituânia" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Lati, Letónia" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Dinar, Líbia" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Dirham, Marrocos" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Lei, Moldávia" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Franco Malagáso, Madagáscar" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Dinar, Macedónia" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Kyat, Myanmar (Burma)" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Tugrik, Mongólia" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Patacas, Macau" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Ouguiya, Mauritânia" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Lira, Malta" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Rupia, Ilhas Maurícias" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Rufiyaa, Maldivas (Ilhas Maldivas)" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Kwacha, Malawi" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Peso, México" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Ringgit, Malásia" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Metical, Moçambique" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Dolar, Namíbia" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Naira, Nigéria" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Cordoba Ouro, Niquerágua" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Coroa, Noruega" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Rupia Nepalesa, Nepal" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Dolar, Nova-Zelândia" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Rial, Oman" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Balboa, Panamá" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Novos Sois, Peru" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Kina, Papua Nova-Guiné" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Peso, Filipinas" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Rupia, Paquistão" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Zlotych, Polónia" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Guarani, Paraguai" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Rial, Quatar" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Lei, Roménia" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rublo, Rússia" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Franco Ruandês, Ruanda" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Riyal, Arábia Saudita" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Dolar, Ilhas Salomão" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Rupia, Seicheles" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Dinar, Sudão" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Coroa, Suécia" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Dolar, Singapura" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Libra, Santa Helena" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Tolar, Eslovénia" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Koruny, Eslováquia" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Leone, Serra Leoa" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Shilling, Somália" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Luigini, Seborga" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Guilder, Suriname" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Dobra, São Tomé e Príncipe" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "Colones, El Salvador" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Libra, Síria" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Emalangeni, Swazilândia" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Baht, Tailândia" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Rublo, Tadjaquistão" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Manats, Turquemenistão" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Dinar, Tunísia" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Pa'anga, Tongan" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Lira, Turquia" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Dolar, Trinidade e Tobago" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Dolar Tuvalu, Tuvalu" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Novo Dolar, Ilha Formosa (Taiwan)" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Shilling, Tanzânia" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Hryvnia, Ucrânia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Shilling, Uganda" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Dolar, Estados Unidos da América" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Peso, Uruguai" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Sums, Uzbequistão" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Bolivar, Venezuela" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Dong, Vietname" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vatu, Vanuatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Tala, Samoa" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Francos, Comunidade Financeira Africana BEAC" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Onças, Prata" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Onças, Ouro" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Dolar, Caraibas Leste" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" +"Direitos Especiais de Levantamento, Fundo Monetário Internacional (FMI)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Francos, Comunidade Financeira Africana BCEAO" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Onças, Palladium" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Francos, Consórcio Francês do Pacífico" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Onças, Platina" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Rial, Yemen" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Novo Dinar, Jugoslávia" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Rand, Ãfrica do Sul" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Kwacha, Zâmbia" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Dolar do Zimbabue, Zimbabue" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Nenhum" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Sólido" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automático" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "nenhum" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "quadrado" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamante" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triângulo abaixo" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triângulo acima" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triângulo à direita" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triângulo à esquerda" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "círculo" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "cruz" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterísco" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "barra" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "meia barra" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "borboleta" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "ampulheta" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Cinzento" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Cinzento" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Cinzento" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Cinzento" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Cinzento" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Risca Horizontal" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Risca Vertical" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Risca Diagonal Revertida" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Riscas Diagonais" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Linhas Cruzadas Diagonais" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Linhas Cruzadas Diagonais Grossas" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Riscas Horizontais Finas" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Riscas Verticais Finas" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Riscas Diagonais Finas Revertidas" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Riscas Diagonais Finas" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Linhas Cruzadas Horizontais Finas" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Linhas Cruzadas Diagonais Finas" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Primeiro Plano Sólido" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Círculos Pequenos" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semi-Círculo" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Palha" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Círculos Grandes" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Tijolos" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiquetas" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valores" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Erro ao parsear linha" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "ColBarPontos" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Até onde as barras/colunas se sobrepôem em percentagem da largura" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "S_obreposição:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Separação entre grupos como uma percentagem da largura barra/coluna" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Intervalo:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "Linha de Pontos" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "Ãrea de Pontos" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Barras Adjacentes 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Colunas Adjacentes 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Barras Percentagem 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Colunas Percentagem 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Barras Empilhadas 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Colunas Empilhadas 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Barras Adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Colunas Adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Barras adjacentes 3D horizontais agrupadas por categorias maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "Barras adjacentes horizontais agrupadas por categorias maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Colunas adjacentes 3D verticais agrupadas por categorias maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Colunas adjacentes verticais agrupadas por categorias maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Ãrea" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Gráfico pontos área." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Ãreas" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Barra" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Coluna" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linha" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Gráfico de linhas." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linhas" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Categorias menores empilhadas como percentagens do total menor, em barras 3D " +"horizontais, agrupadas pela categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Categorias menores empilhadas como percentagens do total menor, em barras 3D " +"verticais, agrupadas pela categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Categorias menores empilhadas como percentagens do total menor, em barras " +"horizontais, agrupadas pela categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Categorias menores empilhadas como percentagens do total menor, em colunas " +"verticais, agrupadas pela categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Categorias menores empilhadas em barras 3D horizontais, agrupadas pela " +"categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Categorias menores empilhadas em barras horizontais, agrupadas pela " +"categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Categorias menores empilhadas em colunas 3D verticais, agrupadas pela " +"categoria maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Categorias menores empilhadas em colunas verticais agrupadas pela categoria " +"maior." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Ãreas Percentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Barras Percentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Colunas Percentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Linhas Percentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Gráfico pontos percentagem." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Gráfico linhas percentagem." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Ãreas Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Barras Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Colunas Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Linhas Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Gráfico área empilhada." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Gráfico linha empilhada." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Linhas Por Marcar" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Linhas Percentagem Por Marcar" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Linhas Empilhadas Por Marcar" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Motor gráficos área" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Motor de gráficos Barras/Colunas" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Tipos de gráficos 1.5d por omissão" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Motor gráficos linhas" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Gráficos de Linhas, Ãreas, Barras e Colunas" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Gráfico" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Padrão de procura inválido." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Gráfico" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Gráfico" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Gráfico" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Motor de gráficos Barras/Colunas" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "A Alterar Cores Separadores" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Tipos de gráficos 1.5d por omissão" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "Queijo de Pontos" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "AnelPontos" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Graus contra ponteiros relógio das 3 horas" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "F_atias começam em:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"A quantidade por omissão que cada fatia está separada do centro medido como " +"uma percentagem do raio do gráfico circular" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Separação Fatia:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Variar cores por fatia" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "graus" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +#, fuzzy +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"A quantidade por omissão que cada fatia está separada do centro medido como " +"uma percentagem do raio do gráfico circular" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Separador:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Cen_trar tamanho:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Queijo 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Queijo Separado 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Totais principais como percentagens com cada extremo subdividido em queijos " +"secundários." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Totais principais como percentagens com cada extremo subdividido em barras " +"empilhadas secundárias." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Múlti-Queijo" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Múlti-queijo-barras" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Percentagem de cada contribuinte disposto em círculo para cada série com " +"extremos do círculo anterior separados." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" +"Percentagem de cada contribuinte apresentado no círculo para cada série." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentagem de cada contribuinte no queijo 3D." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Percentagem de cada contribuinte com extremos 3D separados." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentagem de cada contribuinte com extremos separados." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentagem de cada contribuinte." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Queijo" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Círculo" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Dividir Queijo" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Dividir Cículo" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Tipos de queijo por omissão" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Motor desenho queijos" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Motor desenho círculos" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "ColBarPontos" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Ãrea de Pontos" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Gráfico pontos área." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Gráfico área empilhada." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Tipos de gráficos 1.5d por omissão" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Motor gráficos área" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Motor desenho círculos" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Números inteiros" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Contagem" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Gráfico pontos área." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Super_fície" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Motor desenho círculos" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Gráficos Queijo" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Gráficos queijo" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% do tamanho por omissão" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Diâ_metro" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Mostrar valores _negativos" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Super_fície" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bolhas escaladas para" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Tamanho representado por:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Variar as cores por bolha" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "GráficoXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "GráficoBolha" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bolha" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Erro ao parsear linha" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Erro ao parsear linha" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Interpolar linearmente entre pontos multi-dimensionais, com marcadores em " +"cada ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpolar linearmente entre pontos multi-dimensionais, com marcadores em " +"cada ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Interpolar linearmente entre pontos multi-dimensionais." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Marcadores em cada ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Pontos multi-dimensionais com círculos em cada ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Ponto X, Y e tamanho bolha." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Linhas XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Pontos XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Linhas XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "Motor de gráficos de dispersão 2D" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Motor de desenho de bolhas" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Tipos de dispersão de pontos padrão" diff --git a/lib/goffice-0.0.4/po/pt_BR.po b/lib/goffice-0.0.4/po/pt_BR.po new file mode 100644 index 0000000000..601b52961b --- /dev/null +++ b/lib/goffice-0.0.4/po/pt_BR.po @@ -0,0 +1,4200 @@ +# translation of gnumeric.HEAD.pt_BR.po to Português/Brasil +# translation of gnumeric.HEAD.po to Português/Brasil +# Brazilian Portuguese translation of gnumeric. +# Copyright (C) 2000-2004, 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the gnumeric package. +# E. A. Tacão , 2000. +# Juan Carlos Castro y Castro , 2001. +# Johnny Birnfeld , 2003. +# Afonso Celso Medina , 2004, 2005. +# +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric.HEAD.pt_BR\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-02-18 00:26-0200\n" +"Last-Translator: Afonso Celso Medina \n" +"Language-Team: Portuguese/Brazil \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "Não é um nome de arquivo UTF-8 válido." + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Sobrescrever arquivos antigos deste tipo está desabilitado por segurança." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Você pode desabilitar esta opção de segurança editando o arquivo plugin.xml " +"apropriado." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Coeficiente na" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"O arquivo contém informação de plugin com id inválido (%s), era esperado %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Impossível ler informação de plugin do arquivo." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nome desconhecido" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Tipo de carregador não suportado \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Erro ao preparar carregador \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Erro ao ler informação do serviço #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Impossível ler arquivo de informações de plugin (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Arquivo \"%s\" não é um arquivo de informações de plugin válido." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Erro ao ler serviços para o plugin cujo id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "O Plugin id contém caracteres inválidos (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nome de plugin desconhecido." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Não há carregador definido ou id inválido para o plugin com id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin não tem id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Erro ao inicializar carregador do plugin (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Detectada dependências cíclicas do plugin." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Impossível ativar plugin com id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Não encontrado o plugin com id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Erro ao ativar dependências do plugin." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Erro ao ativar serviço do plugin #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Erro ao desativar serviço do plugin #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Impossível carregar carregador do plugin." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Não posso carregar o plugin com id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Erro ao carregar dependências do plugin." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Ocorreram erros na leitura das informações de plugin do arquivo \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Impossível ativar plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Impossível desativar plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Erros ao ler informações sobre plugins disponíveis." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Erro ao desativar serviço do plugin que não está mais no disco." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Os seguinte plugins não estão mais no disco mas continuam ativos:\n" +"%s.\n" +"Você deveria reiniciar o Gnumeric agora." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Erros ao ativar plugins." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Erros ao inicializar sistema de plugins." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "O carregador não possui o método set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "O carregador não tem o método load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "O serviço '%s' não suportado por I." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nome do arquivo de módulo não fornecido." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Impossível abrir arquivo de módulo \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Arquivo de módulo \"%s\" tem formato inválido." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Arquivo não contém símbolo \"plugin_file_struct\"." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "O arquivo tem um número mágico inválido." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "A versão do plugin \"%s\" é diferente da aplicação \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Este sistema não suporta carga dinâmica de módulos." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Impossível fechar arquivo de módulo \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "O arquivo não contém a função \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "O módulo não contém a função \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Erro ao carregar serviço do plugin." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Função de inicialização do plugin retornou erro." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Função de fechamento do plugin retornou erro." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Geral" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "O aquivo aberto não tem descrição" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Carregador de arquivo - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Erro ao ler arquivo." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "O gravador de arquivo não tem descrição" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Gravador de arquivo - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Erro ao salvar arquivo." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Carregador do plugin" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Carregador GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Nenhum atributo \"tipo\" no elemento \"serviço\"." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Serviço desconhecido: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Erro ao ler informação do serviço." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Nós devemos carregar o serviço antes de ativá-lo (PLUGIN_ALWAYS_LOAD está " +"ativado) mas o carregamento falhou." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "páginas" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indentar:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Proc_urar por" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Alinhamento" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "_Caracter de aspas:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Tamanho do Problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discreta" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Mapeamento discreto" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Linear" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Mapeamento linear" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Mapeamento logarítmico" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detalhes" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automático" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Categorias entre _marcas" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Categorias entre _rótulos" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Cruzar na categoria #" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Limites" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Mar_cadores Principais" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Marca_dores Secundários" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Cruzar" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formato" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Rótulo" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "GradeSecundária" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "GradePrincipal" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Marcas principais:" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mapeamento" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Marcas Secundárias:" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Posição" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nternos" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "E_xternos" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Superior" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Internos" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Inverter eixos" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "In_ferior" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Externos" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Mostrar Rótulos" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Tipo:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Título" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Grade" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Eixo-X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Eixo-Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Eixo-Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Eixo-Circular" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Eixo-Radial" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Plot" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "A" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Altura" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "L" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Largura" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Nenhuma barra de erro apresentada" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Barra de erro positiva apresentada" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Barra de erro negativa apresentada" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Barra de erro completa apresentada" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Categoria de erro" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Estilo" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Valores" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Co_r:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "T_ela:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Nenhum\n" +"Absoluto\n" +"Relativo\n" +"Porcentagem" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "Espessura da _linha:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Largura:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Gráfico" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Gráfico" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nome" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Passo 1 de 2: Escolha o tipo de Gráfico" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Passo 2 de 2: Personalize o Gráfico" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Personalizar o Gráfico" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Inserir" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Tipo de _Gráfico" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Gráfico do GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Puxar para _frente" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Puxar para _frente" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Empurrar para _Trás" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Em_purrar para trás" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Ordenar" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definição" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Padrão" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Estilo" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Amostra" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Descrição" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Texto:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dados" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Séries" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Engine do Gráfico" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Tipo de Gráfico" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Tema do Gráfico" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Ãndice:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Opções" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Ponto" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Fonte" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Estilo" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"Duas Cores\n" +"Brilho" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Preencher" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linha" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Marcador" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Borda" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Co_r:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Nenhum\n" +"Padrão\n" +"Gradiente\n" +"Imagem" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "C_or do contorno:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Forma:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Taman_ho:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "Es_tilo:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_ipo:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Segundo Plano:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Direção:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Fim:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Cor de _preenchimento:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Ajuste:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Primeiro plano:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Modelo:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Selecionar..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Tamanho:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_Início:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_mais brilhante" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_mais escuro" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"esticado\n" +"papel de parede" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Padrão" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arábico" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Báltico" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Europa Central" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Chinês" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Cirílico" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grego" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebráico" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indiano" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonês" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Coreano" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turco" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietinamita" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Ocidental" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Outro" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arábico (IBM 864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arábico (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arábico (ISO-8856-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arábico (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arábico (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arábico (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arábico (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armênico (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Báltico (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Báltico (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Báltico (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Celta (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Europa Central (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Europa Central (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Europa Central (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Europa Central (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Chinês Simplificado (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Chinês Simplificado (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Chinês Simplificado (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Chinês Simplificado (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Chinês Simplificado (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Chinês Tradicional (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Chinês Tradicional (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Chinês Tradicional (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croata (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Cirílico (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Cirílico (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Cirílico (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Russo (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ucraniano (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ucraniano (MacUcraniano)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Inglês (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgiano (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grego (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grego (MacGrego)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grego (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebráico (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebráico (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebráico (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebráico (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebráico (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandês (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonês (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonês (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonês (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Coreano (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Coreano (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Coreano (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nórdico (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Romeno (MacRomeno)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Romeno (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Sul Europeu (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turco (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turco (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turco (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Definido pelo usuário" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietinamita (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietinamita (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietinamita (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietinamita (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Hebráico Visual (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Ocidental (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Ocidental (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Ocidental (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Ocidental (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Ocidental (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Local: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Direção de Conversão" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Este valor determina qual teste iconv deve ser realizado." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "preto" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "marrom claro" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "marrom dourado" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "verde escuro #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "navy" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "azul escuro" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "púrpura #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "cinza muito escuro" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "vermelho escuro" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "vermelho alaranjado" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "ouro" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "verde escuro" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "azul profundo" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "azul" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "púrpura dull" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "cinza escuro" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "vermelho" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "laranja" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "limão" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "verde sombrio" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "azul sombrio #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "azul do céu #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "púrpura" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "cinza" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "laranja brilhante" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "amarelo" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "verde" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "ciano" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "azul brilhante" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "púrpura avermelhado" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "cinza claro" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "laranja claro" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "amarelo claro" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "verde claro" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "ciano claro" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "azul claro" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "púrpura claro" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "branco" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "azul purpúreo" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "púrpura escuro" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "azul do céu" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "personalizar" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Cor Personalizada..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Tipo de sombra" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientação" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Largura preferida" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Altura preferida" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Docar a barra de ferramentas" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Desdocar a barra de ferramentas" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Impossível abrir o arquivo '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Todos os Arquivos" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Imagens" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Seleciona uma Imagem" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Salva como" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Tipo de Arquivo:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"A extensão fornecida para o arquivo não combina com o tipo de arquivo " +"escolhido. Você deseja utilizar este nome mesmo assim?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"é o nome de um diretório" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Você não tem permissão para salvar em\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Um arquivo chamado %s<;i> já existe em %s.\n" +"\n" +"Deseja sobrescrevê-lo?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Negrito" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Itálico negrito" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Itálico" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "AaBbCcDdEe12345" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Estilo da fonte:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Fonte:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Visualização" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Tamanho:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Número" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Moeda" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Contabilidade" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Data" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tempo" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Porcentagem" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Fração" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Científico" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Texto" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Especial" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personalizar" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Formato de Número negativo" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formatos de Números" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ca_tegorias:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Casas deci_mais:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" +"Mostra valores monetários em estilos tradicionais do mercado financeiro." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" +"Mostra e introduz valores nas células como texto sem alguma outra " +"interpretação." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Mostra valores monetários." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Mostra data e opcionalmente horas do dia." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Mostra valores numéricos com um número fixo de casas decimais." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Mostra horas do dia." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" +"Mostra valores o mais próximo possível de suas representações fracionárias." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Mostra valores como porcentagens." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Mostra valores em um escala na potência de 10." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Códig_o de Formato:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Formato de número negativo:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Visualização:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Sím_bolo:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Seleciona, automaticamente, um formato apropriado." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Especifica diretamente um formato no estilo Excel" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formato:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Usar separador de milhares" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Europa Ocidental" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Europa Oriental" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "América do Norte" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Américas do Sul e Central" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ãsia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Ãfrica" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Austrália" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Estados Unidos/Inglês (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Ãfrica do Sul (af_AZ)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiópia/Amárico (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Emirados Ãrabes Unidos (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Barém (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algéria (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egito (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Ãndia/Arábico (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Iraq (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordânia (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Líbano (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Líbia (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marrocos (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Omã (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Quatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Arábia Saudita (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudão (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Síria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunísia (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Iêmen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaidjão (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Bielorrúsia (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgária (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Ãndia/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "França/Bretão (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bósnia e Herzegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Espanha/Catalão (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tchecoslováquia (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Grã Bretanha/Galês do país de Gales (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dinamarca (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Ãustria (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Bélgica/Alemão (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Suíça/Alemão (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Alemanha (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburgo/Alemão (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grécia (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Austrália (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Canadá/Inglês (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Grã-Bretanha (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Inglês (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irlanda (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Ãndia/Inglês (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nova Zelândia (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipinas (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Cingapura/Inglês (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Estados Unidos/Inglês (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Ãfrica do Sul/Inglês (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbábue (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolívia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colômbia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "República Dominicana (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Equador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Espanha (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "México (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicarágua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panamá (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Porto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguai (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Estados Unidos/Espanhol (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguai (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estônia (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Espanha/Basco (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Irã (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finlândia/Finlandês (fi_Fl)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Ilhas Faroé (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Bélgica/Francês (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Canadá/Francês (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Suiça/Francês (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "França (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irlanda/Galês (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Grã Bretanha/Escocês Gálico (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Espanha/Galícia (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Grã Bretanha/Galês da Ilha de Manx (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Ãndia/Hindu (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Croácia (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Húngaro (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armênia (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonésia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Islândia (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Suíça/Italiano (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Itália (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebráico (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japão (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Geórgia (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Groenlândia (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Coréia (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Grã Bretanha/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Lituânia (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Letônia (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nova Zelândia/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Macedônia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Ãndia/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malásia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Bélgica/Flamengo (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holanda (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Noruega/Norueguês Novo - Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Noruega/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "França/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Polônia (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brasil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Romênia (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rússia (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ucrânia/Russo (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Noruega/Sámi (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Eslováquia (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Eslovenia (sl_SL)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albânia (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Iugoslávia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finlândia/Sueco (sv_Fl)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Suécia (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Ãndia/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Ãndia/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tajiquistão (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tailândia (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritréia (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiópia/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipinas/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turquia (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rússia/Tatar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ucrânia (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Paquistão (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbequistão (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Bélgica/Walloon (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Estados Unidos/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "China (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Chinês (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapura/Chinês (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Valor Local: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Menu de opções" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Tamanho do Indicador" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Tamanho do indicador da lista de dropdown" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indicador de Espaçamento" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Indicador de espaço ao redor" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dom" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Seg" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Ter" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Qua" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Qui" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Sex" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sáb" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Domingo" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Segunda" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Terça" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Quarta" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Quinta" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Sexta" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sábado" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Fev" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Abr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ago" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Set" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Out" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dez" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Janeiro" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Fevereiro" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Março" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Abril" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Maio" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Junho" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Julho" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Agosto" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Setembro" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Outubro" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Novembro" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Dezembro" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "VERDADEIRO" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSO" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Preto" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Azul" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Ciano" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Verde" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Vermelho" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Branco" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Amarelo" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Emirados Ãrabes Unidos, Dirrã" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afeganistão, Afganos" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albânia, Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armênia, Dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Antilhas Holandesas, Florim das Antilhas Holandesas" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza Novo de Angola" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, Pesos" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Austrália, Dólar Australiano" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Florim de Aruba" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaidjão, Manat azerbaidjano" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bósnia-Herzegóvina, Marco Conversível" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dólar Barbadiano" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taca de Bangladesh" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgária, Lev Búlgaro" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrein, Dinar do Bahrein" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Franco do Burundi" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, Dólar das Bermudas" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei, Dólar de Brunei" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolívia, Peso Boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasil, Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, Dólar das Bahamas" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Butão, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Bielorrússia, Rublos" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dólares de Belize" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canadá, Dólares Canadenses" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Congo, Franco CFA" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Suiça, Franco Suiço" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, Pesos Chilenos" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China, Yuan" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colômbia, Pesos Colombianos" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, Cólon da Costa Rica" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, Pesos" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cabo Verde, Escudos" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Chipre, Libra Cipriota" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "República Tcheca, Coroas Tchecas" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibuti, Francos do Djibuti" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dinamarca, Coroa Dinamarquesa" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "República Dominicana, Pesos" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Argélia, Dinares" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estônia, Coroa" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egito, Libras Egípcias" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritréia, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiópia, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Países Membros do Euro, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, Dólares de Fiji" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Ilhas Malvinas, Libras" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Reino Unido, Libra Esterlina" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Geórgia, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Sudão, Libras Sudanesas" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Gana, Cedi Novo" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibaltrar, Libras de Gibraltar" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gâmbia, Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guiné, Francos" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Gualtemala, Quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guiana, Dólares Guianense" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, Dólares de Hong Kong" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempiras" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croácia, Kunas" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gourdes" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hungria, Florim Húngaro" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonésia, Rúpias da Indonésia" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, Shekel Novo" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Ilha Man, Libras" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Ãndia, Rúpias Indianas" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq, Dinares Iraquianos" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Irã, Rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Islândia, Nova Coroa" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Libras" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, Dólar Jamaicano" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordânia, Dinar Jordaniano" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japão, Ienes" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Quênia, Xelim Queniano" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Quirguistão, Soms" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Camboja, Riels" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comores, Francos Comorenses" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Coréia do Norte, Won norte-coreano" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Coréia do Sul, Won sul-coreano" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kwait, Dinar Kuwaitiano" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Ilhas Cayman, Dólares das Ilhas Cayman" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Paquistão, Rúpias Paquistanesas" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kips" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Líbano, Libras Libanesas" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanca, Rúpia do Sri Lanca" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Libéria, Dólares Liberianos" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesoto, Lotis" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lituânia, Litas" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Letônia, Lats" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Líbia, Dinar Líbio" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marrocos, Dirrã" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldávia, Leu" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagáscar, Francos Malgaxe" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedônia, Dinares" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Mianmar, Kiat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongólia, Tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau, Pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritânia, Uguia" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Lira" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Maurício, Rúpias Mauricianas" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldivas (Ilhas Maldivas), Rúfia" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malauí, Quachas Malauianas" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "México, Pesos Mexicanos" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malasia, Ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Moçambique, Meticais" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namíbia, Dólares da Namíbia" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigéria, Nairas" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicarágua, Córdobas Ouro" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Noruega, Coroas Norueguesas" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, Rúpias Nepalesas" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nova Zelândia, Dólares Neozelandêses" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omã, Rials" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panamá, Balboas" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Perú, Sol" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nova Guiné, Kinas" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipinas, Pesos Filipinos" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Paquistão, Rúpias Paquistanesas" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polônia, Zlotys" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguai, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Catar, Rials de Qatar" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romênia, Leu" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rússia, Rublos" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, Francos de Ruanda" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Arábia Saudita, Rial Saudita" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Ilhas Salomão, Dólares das Ilhas Salomão" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seicheles, Rúpias das Seicheles" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudão, Dinar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Suécia, Coroa Sueca" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Cingapura, Dólares de Cingapura" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Santa Helena, Libras de Santa Helena" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Eslovênia, Tolares" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Eslovênia, Tolares Eslovenos" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Serra Leoa, Leones" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somália, Xelim Somaliano" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname, Florim do Suriname" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "São Tomé e Príncipe, Dobras" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Cólon Salvadorenho" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Síria, Libra Síria" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Suazilândia, Lilangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tailândia, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadjiquistão, Somoni" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turcomenistão, Manat Turcomano " + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunísia, Dinares" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turquia, Liras" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad e Tobago, Dólar de Trinidad e Tobago" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Dólar Australiano" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, Novo Dólar de Taiwan" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzânia, Xelim Tanzâniano" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ucrânia, Hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Novo Xelim de Uganda" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Estados Unidos da América, Dólares" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguai, Peso Uruguaio" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbequistão, Sums" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, Bolívar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnã, Dongue Novo" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Francos" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Prata, Onças" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Ouro, Onças" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Dominica, Dólar do Caribe do Leste" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Fundo Monetário Internacional (FMI), Direitos Especiais de Saque (DES)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Francos" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Paládio, Onças" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique, Francos" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platina, Onças" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Iêmen, Rial Iemenita" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Iugoslávia, Dinares Iugoslávos" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Ãfrica do Sul, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zâmbia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbábue, Dólares Zimbabuanos" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Nenhum" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Sólido" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Traço" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Ponto" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Traço ponto" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Traço ponto ponto" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automático (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "nenhum" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "quadrado" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamante" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triângulo para baixo" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triângulo para cima" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triângulo para a direita" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triângulo para a esquerda" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "círculo" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "cruz" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "asterísco" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "barra" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "meia barra" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "borboleta" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "ampulheta" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "Cinza 75%" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "Cinza 50%" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "Cinza 25%" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "Cinza 12,5%" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "Cinza 6,25%" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Listra Horizontal" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Listra Vertical" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Listra Diagonal Invertida" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Listra Diagonal" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Hachuras Diagonais" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Hachuras Diagonais Finas" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Listra Horizontal Final" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Listra Vertical Fina" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Listra Diagonal Invertida Fina" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Listra Diagonal Fina" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Hachuras Horizontais Finas" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Hachuras Diagonais Finas" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Sólido de Primeiro Plano" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Círculos Pequenos" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semi-círculos" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Palha" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Círculos Grandes" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Tijolos" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Rótulos" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valores" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Barras de erro" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "PlotBarCol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" +"O quanto as barras/colunas se sobrepõem como uma porcentagem do comprimento" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "_Sobrepor:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" +"Separação entre grupos como uma porcentagem da largura das barras/colunas" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Brecha:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "PlotLine" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "PlotArea" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "Barras 3D Adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "Colunas 3D Adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Barras de Porcentagem 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Colunas de Porcentagem 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Barras 3D Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Colunas 3D Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Barras Adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Colunas Adjacentes" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Barras 3D horizontais adjacentes e agrupadas por categorias de maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Barras horizontais adjacentes e agrupadas por categorias de maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Barras 3D verticais adjacentes e agrupadas por categorias de maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Barras verticais adjacentes e agrupadas por categorias de maior e menor." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Ãrea" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Gráfico de Ãrea." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Ãreas" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Barra" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Coluna" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linha" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Gráfico de Linha." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linhas" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Categorias menores empilhadas como porcentagens do total menor, em barras 3D " +"horizontais, pela categoria principal." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"As categorias secundárias empilhadas como porcentagens do total secundário, " +"em barras verticais 3D, agrupadas por categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"As categorias secundárias empilhadas como porcentagens do total secundário, " +"em barras horizontais, agrupadas pelas categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"As categorias secundárias empilhadas como porcentagens do total secundário, " +"em colunas verticais, agrupadas pelas categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"As categorias secundárias empilhadas como barras horizontais 3D, agrupadas " +"pelas categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"As categorias secundárias empilhadas como barras horizontais agrupadas pelas " +"categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"As categorias secundárias empilhadas como colunas verticais, agrupadas pelas " +"categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"As categorias secundáriasempilhadas como colunas verticais agrupadas pelas " +"categorias principais." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Ãres de Porcentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Barras de Porcentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Colunas de Porcentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Linhas de Porcentagem" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Gráfico de área de porcentagem." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Gráfico de linha de porcentagem." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Ãreas empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Barras Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Colunas Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Linhas Empilhadas" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Gráfico de áreas empilhadas." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Gráfico de linhas empilhadas." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Linhas sem Marcas" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Linhas de Porcentagem sem Marcas" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Linhas Empilhadas sem Marcas" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Ferramenta de plotagem de área" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Ferramenta de plotagem de Bar/Col" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Gráficos: Barra/Col/Linha/Ãrea" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Tipos de Gráficos de 1.5d padrão" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Ferramenta de plotagem de linha" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Gráficos de Linha, Ãrea, Barra e Coluna" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "Box-Plot" + +# plugins/guile/plugin.c:241 src/expr.c:489 src/fn-math.c:1177 +#: plugins/plot_boxes/gog-boxplot.c:340 +msgid "Invalid data." +msgstr "Dado inválido." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" +"Box-Plot. Você dever prover cinco valores para a ferramenta de plotagem, na " +"seguinte ordem: mínimo, primeiro quartil, mediana, terceiro quartil e máximo " +"- não o conjunto completo de dados." + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "BoxPlot" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "BoxPlots" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "Box-Plots" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +msgid "Box-plot plotting engine" +msgstr "Ferramenta de plotagem de Box-Plot" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "Gráficos: Box-Plots" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Tipos padrão de gráfico de superfície" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "PlotPie" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "PlotRing" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s ponto %d\n" +"Valor %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Os graus são contados no sentido horário a partir das 3 horas" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "_As fatias começam em:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"A quantidade reservada para cada fatia é separada a partir do centro e " +"medida como uma porcentagem do raio da pizza" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Separação de Fatias:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "Altera as _cores por fatia" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "graus" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"A quantidade reservada para cada fatia é separada a partir do centro e " +"medida como uma porcentagem do raio da pizza" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Separador:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Tamanho do Cen_tro:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Pizza 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Pizza 3D Separada" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Os totais principais como porcentagens com cada fatia subdividida em pizzas " +"secundárias." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Os totais principais como porcentagens com cada fatia subdividida em barras " +"secundárias empilhadas." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Pizza-Múltipla" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multi-barras-pizzas" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Porcentagem de cada contribuição representada no anel para\n" +"cada série como fatias separadas do último anel." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Porcentagem de cada contribuição representada no anel para cada série." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" +"Porcentagem de cada contribuidor representada como uma fatia de uma pizza 3D." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Porcentagem de cada contribuição como fatias 3D separadas da pizza." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Porcentagem de cada contribuição como fatias separadas da pizza." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Porcentagem de cada contribuidor." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Pizza" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Anel" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Pizza Separada" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Anel Separado" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Gráficos: Pizza/Anel" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Tipos padrão de pizza" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Gráficos do tipo Pizza e Anel" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Mecanismo de plotar Pizzas" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Mecanismo de plotar Anéis" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "PlotRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "PlotRadarArea" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Ãrea de Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Gráfico de Ãrea de radar" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Radar com pontos" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Gráfico de Radar com pontos." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Gráfico de Radar." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Gráficos: plotagens Radiais" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Tipos padrão de gráfico de radar" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Mecanismo de plotagem de gráficos de Radar de Ãrea" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Mecanismo de plotar gráficos de Radar" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Gráficos Radial/Radar" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "Número de _Fatias:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "PlotContour" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Contorno" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Gráfico de contorno." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Superfície" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Mecanismo de plotar contornos" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Gráficos de Superfície" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Gráficos de superfície" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% do tamanho normal" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Diâ_metro" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Mostras valores _negativos" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "Super_fície" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bolhas escalonadas para" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Tamanho representado por:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "Altera as _cores por bolha" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "GráficoXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "Bolha" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bolha" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Barras de Erro Y" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "Barras de Erro X" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Interpola linearmente entre pontos multi-dimensionais, utilizando curvas de " +"Bézier." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpola linearmente entre pontos multi-dimensionais, com marcas em cada " +"ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Imterpola linearmente entre pontos multi-dimensionais." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Marcadores em cada ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Interpola entre pontos multi-dimensionais, com círculos em cada ponto." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Plota X,Y e o tamanho da bolha." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "Dispersão XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Linhas XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Ponto XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +msgid "XY Splines" +msgstr "Curvas XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "Gráficos 2D" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "Ferramenta de construção de gráficos de Dispersão 2D" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Mecanismo de plotar Bolhas" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Gráficos: XY/Dispersão/Bolhas" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Gráficos de Dispersão de Ações" diff --git a/lib/goffice-0.0.4/po/ro.po b/lib/goffice-0.0.4/po/ro.po new file mode 100644 index 0000000000..5f95f24d52 --- /dev/null +++ b/lib/goffice-0.0.4/po/ro.po @@ -0,0 +1,4380 @@ +# Romanian translation of gnumeric. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Dan Damian , 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2001-12-31 08:21+0200\n" +"Last-Translator: Dan Damian \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Salvarea peste fiÅŸiere vechi de acest tip este dezactivată din precauÅ£ie." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"PuteÅ£i dezactiva această măsură de precauÅ£ie prin editarea fiÅŸierului plugin." +"xml corespunzător." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Obiectiv" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, fuzzy, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"FiÅŸierul conÅ£ine informaÅ£ii despre extensie cu un id invalid (%s), aÅŸteptam %" +"s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Nu am putut citi informaÅ£iile despre extensie din fiÅŸier." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nume necunoscut" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Tip încărcător nesuportat \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Eroare la pregătirea încărcătorului \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Eroare la citirea informaÅ£iilor despre serviciul #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Nu pot citi fiÅŸierul cu informaÅ£ii despre extensii (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "FiÅŸierul \"%s\" nu este un fiÅŸier valid cu informaÅ£ii despre extensii." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Erori la citirea serviciilor pentru extensia cu id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nume necunoscut de extensie." + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Nici un încărcător nu a fost definit pentru extensia cu id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Extensia nu are id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Eroare la iniÅ£ializarea încărcătorului extensiei (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Eroare la încărcarea dependinÅ£elor extensiei." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Nu am putut activa extensia \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Nici un încărcător nu a fost definit pentru extensia cu id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Eroare la încărcarea dependinÅ£elor extensiei." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Eroare la activarea serviciului #%d al extensiei." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Eroare la dezactivarea serviciului #%d al extensiei." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Nu pot încărca încărcătorul extensiei." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Nici un încărcător nu a fost definit pentru extensia cu id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Eroare la încărcarea dependinÅ£elor extensiei." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Au apărut erori la citirea informaÅ£iilor despre extensii din fiÅŸierul \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Nu am putut activa extensia \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Nu am putut dezactiva extensia \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Erori la citirea informaÅ£iilor despre extensiile disponibile." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Eroare la dezactivarea serviciului #%d al extensiei." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Erori la activarea extensiilor." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Erori la iniÅ£ializarea sistemului de extensii." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Serviciul nu este suportat de încărcător." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nu s-a furnizat numele de fiÅŸier al modulului" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Nu pot deschide fiÅŸierul modul \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "FiÅŸierul modul \"%s\" are un format invalid." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "FiÅŸierul nu conÅ£ine (simbolul \"plugin_file_struct\")." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "FiÅŸierul are un număr \"magic\" incorect." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Versiunea extensiei \"%s\" este diferită de cea a aplicaÅ£iei \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "ÃŽncărcarea dinamică a modulelor nu este suportată pe acest sistem." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Nu am putut închide fiÅŸierul modul \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "FiÅŸierul nu conÅ£ine funcÅ£ia \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modulul nu conÅ£ine funcÅ£ia \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Eroare la încărcarea serviciului extensiei." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "FuncÅ£ia de iniÅ£ializare din interiorul extensiei a returnat o eroare." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "FuncÅ£ia de finisare din interiorul extensiei a returnat o eroare." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "General" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Modulul de deschidere fiÅŸiere cu id-ul=\"%s\" nu are descriere" + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "Modulul de deschidere fiÅŸiere nu are un id" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Eroare la citirea fiÅŸierului." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Modulul de salvare fiÅŸiere cu id-ul=\"%s\" nu are descriere" + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Modulul de salvare fiÅŸiere nu are id" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Eroare la salvarea fiÅŸierului" + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Extensie încărcare Python" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Valoare obiectiv" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Foaia '%s' este necunoscută" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Eroare la citirea informaÅ£iilor despre serviciul #%d." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formule" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indent" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Caută după" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "SpaÅ£iu" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Aliniere" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Caracter citare:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Discretă" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Discretă" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Linie" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Listă" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "A_scunde detaliile" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automată" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Categorie" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Fundal" + +#: goffice/graph/gog-axis.c:1475 +#, fuzzy +msgid "M_in" +msgstr "Min" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Max" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "ÃŽ_nchide" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etichetă" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Vineri" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Vineri" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Model" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Previzualizare" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Model" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Previzualizare" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Interior" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Schemă" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "ÃŽ_nălÅ£ime..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Interior" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Inserare" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Rând" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Schemă" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Etichete" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +#, fuzzy +msgid "_Type:" +msgstr "_Tip" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Descendentă" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Titlu" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Vineri" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Grafic" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "ÃŽ_nălÅ£ime..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "_Cu:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Alertă eroare" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Previzualizare" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Exemplu" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Culoare:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Lăţime linie" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Cu:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_Diagramă" + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "Diagramă%d" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Nume" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Pasul 1 din 3: SelectaÅ£i tipul diagramei" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Pasul 3 din 3: PersonalizaÅ£i diagrama" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Personalizează antet" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Inserare" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Nume grafic" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Re-_aranjează..." + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Orientare" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Model" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Previzualizare" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Exemplu" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Descriere" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "Te_xt" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Date" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "_Serii" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Nume grafic" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Nume grafic" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Indent" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Åžiruri" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dR x %dC" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Font" + +#: goffice/graph/gog-style.c:966 +#, fuzzy +msgid "Style" +msgstr "_Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Previzualizare" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Previzualizare" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Model" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Previzualizare" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Culoare:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Culoare contur" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "Impact:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Dimensiune:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "_Stil" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "_Tip" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Fundal" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Director" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "SfârÅŸit" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Culoare umplere" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "_PotriveÅŸte la:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Prim-plan" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Model" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_Selectare" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Dimensiune:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "_Sortează" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "La _dreapta" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "Åžir" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pct" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +#, fuzzy +msgid "Default" +msgstr "Åžterge" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "Grupează" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "Zona %i" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "Cursiv" + +#: goffice/gtk/go-charmap-sel.c:76 +#, fuzzy +msgid "Central European" +msgstr "Centrare în pagină" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "verde" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "Min" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "pagini" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Boolean" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "_ReafiÅŸează" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "RedenumeÅŸte foaia" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "Vest" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "Octombrie" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Subliniază" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "Rezultat căutat:" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Corelare" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "negru" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "Luni" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "Zona" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "Aldin" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Valoare celulă" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "albastru" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "Åžir" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "roÅŸu" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "Zona" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "ora" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "Åžir" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "galben" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "verde" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "Editează expresia" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Aliniază la dreapta" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Aliniază la dreapta" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Aliniază la dreapta" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "alb" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "Valoare" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "Personalizat" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Personalizează subsolul" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Umbră" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orientare" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Copiază selecÅ£ia curentă în clipboard" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Nu am putut deschide fiÅŸierul '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "_FiÅŸier" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "_Salvează..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Selectează o coloană întreagă" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Salvează" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "_FiÅŸier" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"este un nume de director" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Nu aveÅ£i drepturi să salvaÅ£i în\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Registrul %s există deja.\n" +"DoriÅ£i să-l suprascrieÅ£i?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Aldin" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Aldin cursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Cursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stil font:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Previzualizare" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Dimensiune:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Număr" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "_Simbol monetar" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "_Contabil" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dată" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Oră" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "_Procent" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "_FracÅ£ie" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "Åž_tiinÅ£ific" + +#: goffice/gtk/go-format-sel.c:83 +#, fuzzy +msgid "Text" +msgstr "Te_xt" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "S_pecială" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Personalizat" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Număr negat_iv:" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "Aplică formatare _numere" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Categorie:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Zeci_male:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "AfiÅŸează _schemele" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "AfiÅŸează valoarea exact cum a fost introdusă" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Număr negat_iv:" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "Previzualizare" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_imbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Utilizează separator pentru mii" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "Vest" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "Centrare în pagină" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "General" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "Zona %i" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "Celule ajustabile" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Exemplu" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Exemplu" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Valoare curenta:" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "Min" + +#: goffice/gtk/go-optionmenu.c:198 +#, fuzzy +msgid "The menu of options" +msgstr "OpÅ£iuni Oaf" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "EROARE internă" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Dum" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Lun" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Mar" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Mie" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Joi" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Vin" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sam" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Duminică" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Luni" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "MarÅ£i" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Miercuri" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Joi" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Vineri" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sâmbătă" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Ian" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Mai" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Iun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Iul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Oct" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Noi" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Ianuarie" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februarie" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Martie" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Aprilie" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mai" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Iunie" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Iulie" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Septembrie" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Octombrie" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Noiembrie" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Decembrie" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ADEVÄ‚RAT" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALS" + +#: goffice/utils/format.c:757 +#, fuzzy +msgid "Black" +msgstr "Ajustare" + +#: goffice/utils/format.c:758 +#, fuzzy +msgid "Blue" +msgstr "albastru" + +#: goffice/utils/format.c:759 +#, fuzzy +msgid "Cyan" +msgstr "cyan" + +#: goffice/utils/format.c:760 +#, fuzzy +msgid "Green" +msgstr "verde" + +#: goffice/utils/format.c:761 +#, fuzzy +msgid "Magenta" +msgstr "magenta" + +#: goffice/utils/format.c:762 +#, fuzzy +msgid "Red" +msgstr "Refă" + +#: goffice/utils/format.c:763 +#, fuzzy +msgid "White" +msgstr "alb" + +#: goffice/utils/format.c:764 +#, fuzzy +msgid "Yellow" +msgstr "galben" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "Creează o listă" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "Aprilie" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Niciuna" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Solid" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automată" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Niciuna" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Min" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "Zona" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Schemele la d_reapta" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "fix" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "rânduri" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "LipeÅŸte prin legătură" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Mar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% gri" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% gri" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% gri" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12.5% gri" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6.25% gri" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Bandă orizontală" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Bandă verticală" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Bandă diagonală inversă" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Bandă diagonală" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "HaÅŸură diagonală" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "HaÅŸură diagonală groasă" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Bandă orizontală fină" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Bandă verticală fină" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Bandă diagonală inversă fină" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Bandă diagonală fină" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "HaÅŸură orizontală fină" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "HaÅŸură diagonală fină" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Prim-plan solid" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Cercuri mici" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Semicercuri" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Intercalare" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Cercuri mari" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Cărămizi" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etichete" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Valori" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Eroare la procesarea liniei" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Diagramă" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Grafic" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Grafic" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Inserează coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Inserează coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "_Zone" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Zone" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +#, fuzzy +msgid "Column" +msgstr "C_oloană" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linie" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Linii de importat" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "Linie" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "_Grilaj" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Åžterge coloane" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "_Grilaj" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "_Procent" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "_Grilaj" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "DefiniÅ£i nume" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Antete rânduri ÅŸi co_loane" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Grafic" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Expresie invalidă" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Grafic" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Grafic" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Grafic" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Eroare la procesarea liniei" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "modificarea formatării lui %s" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "DefiniÅ£i nume" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Grafic" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "nimic" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Separator:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "Åž_terge" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Separator:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Categorie:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "_Grilaj" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Scindează" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "ÃŽnmulÅ£eÅŸte" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "ÃŽnmulÅ£eÅŸte" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "PreÅ£" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "_Zona" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Scindează" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Scindează" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Grafic" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Grafic" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "_Procent" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Erori _Standard" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Åžterge coloane" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "DefiniÅ£i nume" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Eroare la procesarea liniei" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Numere întregi" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Contor" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Linii de importat" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Zone sursă" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Eroare la procesarea liniei" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Zone sursă" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Zone sursă" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% din dimensiunea normală" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "centimetri" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "AfiÅŸează detalii" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Zone sursă" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Grafic" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Dublă" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Dublă" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Eroare la procesarea liniei" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Eroare la procesarea liniei" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Åžterge coloane" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Linie" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "puncte" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Linie" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/ru.po b/lib/goffice-0.0.4/po/ru.po new file mode 100644 index 0000000000..ac9d199020 --- /dev/null +++ b/lib/goffice-0.0.4/po/ru.po @@ -0,0 +1,4149 @@ +# translation of ru.po to +# Copyright (C) 1999-2002, 2004 Free Software Foundation, Inc. +# Valek Filippov , 1999-2002,2003. +# Dmitry G. Mastrukov , 2001-2002, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: ru\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2005-01-10 12:59+0300\n" +"Last-Translator: Valek Filippov \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Сохранение поверх Ñтарых файлов Ñтого типа отключено из Ñоображений " +"безопаÑноÑти." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"можно выключить Ñту возможноÑть иÑправив ÑоответÑтвующий файл plugin.xml." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Целевой" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Файл Ñодержит информацию о дополнении Ñ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимым идентификатором (\"%s" +"\"), ожидалоÑÑŒ \"%s\"." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Ðевозможно прочеÑть файл информации о дополнении." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "ÐеизвеÑтное название" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ðеподдерживаемый тип загрузчика \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Ошибка при подготовке загрузчика \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Ошибка при чтении информации ÑервиÑа #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ðевозможно прочеÑть файл информации о дополнении (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Файл \"%s\" не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым файлом информации о дополнении." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Ошибка при чтении ÑервиÑов Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ \"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Идентификатор Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñодержит недопуÑтимые Ñимволы (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "ÐеизвеÑтное название дополнениÑ." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Ðе определен загрузчик или его индикатор недопуÑтим Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ " +"идентификатором \"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Дополнение не имеет идентификатора." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Ошибки при инициализации загрузчика дополнений (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Обнаружена цикличеÑÐºÐ°Ñ Ð·Ð°Ð²Ð¸ÑимоÑть дополнений." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ðе удалоÑÑŒ включить дополнение Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ \"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ðе удалоÑÑŒ найти дополнение Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ \"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Ошибка при загрузке Ñлементов, от которых завиÑит дополнение." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Ошибки при включении ÑервиÑа Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Ошибки при отключении ÑервиÑа Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ðевозможно загрузить загрузчик дополнениÑ." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ðе удалоÑÑŒ загрузить дополнение Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ \"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Ошибка при загрузке Ñлементов, от которых завиÑит дополнение." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "При чтении информации о дополнении из файла \"%s\" возникла ошибка." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ðе удалоÑÑŒ включить дополнение \"%s\" (идент. %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ðе удалоÑÑŒ отключить дополнение \"%s\" (идент. %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Ошибки при Ñчитывании информации о доÑтупных дополнениÑÑ…." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Ошибки при отключении дополнениÑ, которого уже нет на диÑке." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Следующие Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÑутÑтвуют на диÑке, но вÑÑ‘ ещё активны:\n" +"%s.\n" +"Ð’Ñ‹ должны перезапуÑтить Gnumeric ÑейчаÑ." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Ошибки при включении дополнений." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Ошибки при инициализации ÑиÑтемы дополнений." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Загрузчик не имеет метода set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Загрузчик не имеет метода load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Ð¡ÐµÑ€Ð²Ð¸Ñ \"%s\" не поддерживаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ¾Ð¼." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Ðе задано название модулÑ." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ðе удалоÑÑŒ открыть файл Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "У файла Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\" недопуÑтимый формат." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Файл не Ñодержит Ñимвола \"plugin_file_struct\"." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "У файла неправильное магичеÑкое чиÑло." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "ВерÑÐ¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ \"%s\" отличаетÑÑ Ð¾Ñ‚ верÑии Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "ДинамичеÑÐºÐ°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° модулей не поддерживаетÑÑ Ð½Ð° Ñтой ÑиÑтеме." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ðе удалоÑÑŒ закрыть файл Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Файл не Ñодержит функцию \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Модуль не Ñодержит функцию \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Ошибка при загрузке ÑервиÑа дополнениÑ." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" +"Выполнение Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ в дополнении привело к возникновению ошибки." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "ВнутреннÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ñ‡Ð¸Ñтки Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ð½ÑƒÐ»Ð° ошибку." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Общий" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Ошибка при чтении файла." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Ошибка при Ñохранении файла." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Загрузчик дополнениÑ" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Загрузчик GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "ÐеизвеÑтный тип ÑервиÑа: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Ошибка при чтении информации ÑервиÑа." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Ñтраницы" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "ОтÑтуп:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "ПоиÑк" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Выравнивание" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Символ кавычки:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "ДиÑкретное" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "ДиÑкретное отображение" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Линейное" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Линейное отображение" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "ЛогарифмичеÑкое" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "ЛогарифмичеÑкое отображение" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "ПодробноÑти" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "ÐвтоматичеÑки" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Категории между делениÑми" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Категории между метками" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Границы" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "Мин" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "МакÑ" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "ОÑновные делениÑ" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Ð’Ñпомогательные делениÑ" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Формат" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Метка" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "Ð’ÑÐ¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñетка" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ñетка" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "ОÑновные делениÑ" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Отображение" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "Ð’Ñпомогательные делениÑ" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "РаÑположение" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "Внутри" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "Снаружи" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "Ð’Ñ‹Ñокий" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "Внутри" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "Инвертировать оÑи" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "Ðизкий" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "Снаружи" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "Показать метки" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "Тип:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "ПодпиÑÑŒ" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Заголовок" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Сетка" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "ОÑи X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "ОÑи Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "ОÑи Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Круговые оÑи" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Радиальные оÑи" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Ðачертить" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "Ð’" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Ð’Ñ‹Ñота..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "Ш" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Ширина" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Строка ошибок не отображаетÑÑ" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Строка положительных ошибок не отображаетÑÑ" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Строка отрицательных ошибок не отображаетÑÑ" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "ОтображаетÑÑ Ð¿Ð¾Ð»Ð½Ð°Ñ Ñтрока ошибок" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Стиль" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "ЗначениÑ" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Цвет:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "Ширина линии:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "Ширина:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "График" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Диаграмма" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Ðазвание" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Шаг 1 из 2: Выбор типа диаграммы" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Шаг 2 из 2: ÐаÑтройка диаграммы" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "ÐаÑтройка диаграмы" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Ð’ÑÑ‚_авка" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Тип графика" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Диаграммы Ð´Ð»Ñ GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "_Выше" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Ðа передний план" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "_Ðиже" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Ðа _задний план" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_ПорÑдок" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Определение" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Шаблон" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Стиль" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Выборка" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "ОпиÑание" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "ТекÑÑ‚:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Данные" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Серии" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Модуль поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð²" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Тип графика" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Тема диаграммы" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "ИндекÑ:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "ÐаÑтройки" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Точки" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Шрифт" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Стиль" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 цвета\n" +"ЯркоÑть" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Заливка" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "ЛиниÑ" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Отметка" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Контур" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "Цвет:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Ðет\n" +"Шаблон\n" +"Переход\n" +"Изображение" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "Цвет контура:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "Форма:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Размер:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "Стиль:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "Тип:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "Фон" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "Ðаправление:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "Конец:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Цвет заливки:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "Заполнить:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "Передний план:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "Шаблон:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "Выделение..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "Размер:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "Ðачало:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "Ñрче" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "темнее" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "тчк" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "По умолчанию" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ÐрабÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "БалтийÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "ЦентральноевропейÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "КитайÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "КирилличеÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "ГречеÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Иврит" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "ИндийÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "ЯпонÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "КорейÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "ТурецкаÑ" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Юникод" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "ВьетнамÑкаÑ" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "ЗападнаÑ" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "ДругаÑ" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "ÐрабÑÐºÐ°Ñ (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "ÐрабÑÐºÐ°Ñ (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "ÐрабÑÐºÐ°Ñ (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "ÐрабÑÐºÐ°Ñ (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "ÐрабÑÐºÐ°Ñ (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "ÐрабÑÐºÐ°Ñ (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "ÐрабÑÐºÐ°Ñ (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "ÐрмÑнÑÐºÐ°Ñ (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "БалтийÑÐºÐ°Ñ (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "БалтийÑÐºÐ°Ñ (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "БалтийÑÐºÐ°Ñ (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "КельтÑÐºÐ°Ñ (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "ЦентральноевропейÑÐºÐ°Ñ (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "ЦентральноевропейÑÐºÐ°Ñ (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "ЦентральноевропейÑÐºÐ°Ñ (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "ЦентральноевропейÑÐºÐ°Ñ (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "ХорватÑÐºÐ°Ñ (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "КирилличеÑÐºÐ°Ñ (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "КирилличеÑÐºÐ°Ñ (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "КирилличеÑÐºÐ°Ñ (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "КирилличеÑÐºÐ°Ñ (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "КирилличеÑÐºÐ°Ñ (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "КирилличеÑÐºÐ°Ñ (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "РуÑÑÐºÐ°Ñ (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "УкраинÑÐºÐ°Ñ (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "УкраинÑÐºÐ°Ñ (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "ÐнглийÑÐºÐ°Ñ (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "ФарÑи (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "ГрузинÑÐºÐ°Ñ (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "ГречеÑÐºÐ°Ñ (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "ГречеÑÐºÐ°Ñ (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "ГречеÑÐºÐ°Ñ (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Иврит (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Иврит (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Иврит (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Иврит (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Иврит (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Хинди (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "ИÑландÑÐºÐ°Ñ (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "ЯпонÑÐºÐ°Ñ (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "ЯпонÑÐºÐ°Ñ (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "ЯпонÑÐºÐ°Ñ (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "КорейÑÐºÐ°Ñ (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "КорейÑÐºÐ°Ñ (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "КорейÑÐºÐ°Ñ (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "КорейÑÐºÐ°Ñ (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "РумынÑÐºÐ°Ñ (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "РумынÑÐºÐ°Ñ (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "ЮжноевропейÑÐºÐ°Ñ (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "ТайÑÐºÐ°Ñ (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Юникод (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Юникод (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Юникод (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Юникод (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Юникод (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Юникод (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "ВьетнамÑÐºÐ°Ñ (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "ВьетнамÑÐºÐ°Ñ (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "ВьетнамÑÐºÐ°Ñ (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "ВьетнамÑÐºÐ°Ñ (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Визуальный иврит (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Локаль: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Ðаправление преобразованиÑ" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Это значение определÑет какой теÑÑ‚ iconv выполнить." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "черный" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "Ñветло-коричневый" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "золотиÑто коричневый" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "тёмно-зелёный #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "тёмно-Ñиний" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "пурпурный #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "очень темный Ñерый" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "тёмно-краÑный" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "краÑно-оранжевый" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "золотиÑтый" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "тёмно-зелёный" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "туÑкло-Ñиний" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "Ñиний" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "туÑкло-пурпурный" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "тёмно-Ñерый" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "краÑный" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "оранжевый" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "лимонный" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "туÑкло-зелёный" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "туÑкло-зелёный #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "небеÑно-Ñиний #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "пурпурный" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "Ñерый" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "Ñиреневый" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "Ñрко-оранжевый" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "желтый" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "зеленый" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "голубой" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "Ñрко-Ñиний" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "краÑно-пурпурный" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "Ñветло-зелёный" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "розовый" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "Ñветло-оранжевый" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "Ñветло-жёлтый" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "Ñветло-зелёный" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "Ñветло-голубой" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "Ñветло-Ñиний" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "Ñветло-пурпурный" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "белый" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "тёмно-пурпурный" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "небеÑно-голубой" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "другой" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Другой цвет..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Тип тени" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "ОриентациÑ" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "ÐŸÑ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð°" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "ÐŸÑ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ñота" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Прицепить панель инÑтрументов" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Отцепить панель инÑтрументов" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ðе удалоÑÑŒ открыть файл '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Ð’Ñе файлы" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "ИзображениÑ" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Выбрать изображение" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Сохранить как" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Тип файла:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Заданное раÑширение файла не ÑоответÑтвует выбраному типу. Хотите " +"иÑпользовать его?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"Ñто название каталога" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"У Ð²Ð°Ñ Ð½ÐµÑ‚ прав Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Файл Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ %s уже ÑущеÑтвует в %s.\n" +"\n" +"Хотите Ñохранить в него?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Ðормальное" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Полужирный" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Полужирный наклонный" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Ðаклонный" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Стиль шрифта:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Шрифт:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "ПроÑмотр" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Размер:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "ЧиÑловой" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Денежный" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "БухгалтерÑкий" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Дата" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "ВремÑ" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Проценты" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Дробный" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Ðаучный" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "ТекÑтовый" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Специальный" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Другой" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Формат отрицательного чиÑла" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "ЧиÑловые форматы" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Категории:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "ДеÑÑтичных позиций:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Показать Ð²Ñ€ÐµÐ¼Ñ Ñуток." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Показывать значение как проценты." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Код формата:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Формат отрицательного чиÑла:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "ПроÑмотр:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Символ:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Выбрать подходÑщий формат автоматичеÑки." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "Формат:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "ИÑпользовать разделитель Ð´Ð»Ñ Ñ‚Ñ‹ÑÑч" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Западно-ЕвропейÑкаÑ" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "ВоÑточно-ЕвропейÑкаÑ" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Северо-ÐмериканÑкаÑ" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Южно- и Центрально-ÐмериканÑкаÑ" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "ÐзиатÑкаÑ" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "ÐфриканÑкаÑ" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "ÐвÑтралийÑкаÑ" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "СШÐ/ÐнглийÑкий (С)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "ЮжноафриканÑкий Ð°Ñ„Ñ€Ð¸ÐºÐ°Ð°Ð½Ñ (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "ЭфиопиÑ/Ðмхарик (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Объединённые ÐрабÑкие Эмираты (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Ð‘Ð°Ñ…Ñ€ÐµÐ¹Ð½Ñ (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Ðлжир (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Египет (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "ИндиÑ/ÐрабÑкий (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Ирак (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Ð˜Ð¾Ñ€Ð´Ð°Ð½Ð¸Ñ (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Кувейт (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Лебанон (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Ð›Ð¸Ð²Ð¸Ñ (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Марокко (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Оман (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Катар (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "СаудовÑÐºÐ°Ñ ÐÑ€Ð°Ð²Ð¸Ñ (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Судан (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Ð¡Ð¸Ñ€Ð¸Ñ (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "ТуниÑÑ (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Йемен (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Ðзербайджан (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "БелоруÑÑÐ¸Ñ (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Ð‘Ð¾Ð»Ð³Ð°Ñ€Ð¸Ñ (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Бангладеш (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "ИндиÑ/Бенгали (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "ФранциÑ/Бретонь (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "БоÑÐ½Ð¸Ñ Ð¸ Герцеговина (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "ИÑпаниÑ/ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð½Ð¸Ñ (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ЧешÑÐºÐ°Ñ Ñ€ÐµÑпублика (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Ð”Ð°Ð½Ð¸Ñ (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "ÐвÑÑ‚Ñ€Ð¸Ñ (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "БельгиÑ/Ðемецкий (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "ЩвейцариÑ/Ðемецкий (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Ð“ÐµÑ€Ð¼Ð°Ð½Ð¸Ñ (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "ЛюкÑембург/Ðемецкий (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Ð“Ñ€ÐµÑ†Ð¸Ñ (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "ÐвÑÑ‚Ñ€Ð°Ð»Ð¸Ñ (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "БотÑвана (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Канада/ÐнглийÑкий (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Ð’ÐµÐ»Ð¸ÐºÐ¾Ð±Ñ€Ð¸Ñ‚Ð°Ð½Ð¸Ñ (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Гонгконг/ÐнглийÑкий (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Ð˜Ñ€Ð»Ð°Ð½Ð´Ð¸Ñ (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "ИндиÑ/ÐнглийÑкий (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "ÐовозеландÑÐ¸Ñ (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Филиппины (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Сингапур/ÐнглийÑкий (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "СШÐ/ÐнглийÑкий (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Ð®Ð¶Ð½Ð°Ñ Ðфрика/ÐнглийÑкий (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Зимбабве (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "ЭÑперанто (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Ðргентина (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Ð‘Ð¾Ð»Ð¸Ð²Ð¸Ñ (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Чили (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "ÐšÐ¾Ð»ÑƒÐ¼Ð±Ð¸Ñ (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "КоÑта-Рика (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "ДоминиканÑÐºÐ°Ñ Ð ÐµÑпублика (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Эквадор (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "ИÑÐ¿Ð°Ð½Ð¸Ñ (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Гватемала (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Ð“Ð¾Ð½Ð´ÑƒÑ€Ð°Ñ (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "МекÑика (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Ðикарагуа (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Панама (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Перу (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "ПуÑрто-Рико (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Парагвай (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "Сальвадор (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "СШÐ/ИÑпанÑкий (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Уругвай (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "ВенеÑуÑла (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "ЭÑÑ‚Ð¾Ð½Ð¸Ñ (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "ИÑпаниÑ/БаÑкÑкий (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Иран (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "ФинлÑндиÑ/ФинÑкий (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "ОÑтрова Ð¤Ð°Ñ€Ð¾Ñ (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "БельгиÑ/ФранцузÑкий (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Канада/ФранцузÑкий (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "ЩвейцариÑ/ФранцузÑкий (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Ð¤Ñ€Ð°Ð½Ñ†Ð¸Ñ (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "ИрландиÑ/ГальÑкий (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "ИндиÑ/Хинди (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Ð¥Ð¾Ñ€Ð²Ð°Ñ‚Ð¸Ñ (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ð’ÐµÐ½Ð³Ñ€Ð¸Ñ (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "ÐÑ€Ð¼ÐµÐ½Ð¸Ñ (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Ð˜Ð½Ð´Ð¾Ð½ÐµÐ·Ð¸Ñ (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "ИÑÐ»Ð°Ð½Ð´Ð¸Ñ (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "ШвейцариÑ/ИтальÑнÑкий (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Ð˜Ñ‚Ð°Ð»Ð¸Ñ (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Израиль/Иврит (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Ð¯Ð¿Ð¾Ð½Ð¸Ñ (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Ð“Ñ€ÑƒÐ·Ð¸Ñ (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Ð“Ñ€ÐµÐ½Ð»Ð°Ð½Ð´Ð¸Ñ (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "ÐšÐ¾Ñ€ÐµÑ (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Литва (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Ð›Ð°Ñ‚Ð²Ð¸Ñ (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð—ÐµÐ»Ð°Ð½Ð´Ð¸Ñ/Маори (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "ÐœÐ°ÐºÐµÐ´Ð¾Ð½Ð¸Ñ (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "ÐœÐ°Ð»Ð°Ð¹Ð·Ð¸Ñ (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Мальта (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "БельгиÑ/ФламандÑкий (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Ð“Ð¾Ð»Ð°Ð½Ð´Ð¸Ñ (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "ÐорвегиÑ/Ðовый норвежÑкий (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "ÐорвегиÑ/Книжный норвежÑкий (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "ФранциÑ/Оккитан (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Польша (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Ð‘Ñ€Ð°Ð·Ð¸Ð»Ð¸Ñ (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "ÐŸÐ¾Ñ€Ñ‚ÑƒÐ³Ð°Ð»Ð¸Ñ (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Ð ÑƒÐ¼Ñ‹Ð½Ð¸Ñ (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "РоÑÑÐ¸Ñ (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Украина/РуÑÑкий (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "ÐорвегиÑ/Саами (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Ð¡Ð»Ð¾Ð²Ð°ÐºÐ¸Ñ (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Ð¡Ð»Ð¾Ð²ÐµÐ½Ð¸Ñ (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "ÐÐ»Ð±Ð°Ð½Ð¸Ñ (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "ЮгоÑÐ»Ð°Ð²Ð¸Ñ (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "ФинлÑндиÑ/ШведÑкий (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Ð¨Ð²ÐµÑ†Ð¸Ñ (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "ТаджикиÑтан (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Таиланд (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Ð­Ñ€Ð¸Ñ‚Ñ€ÐµÑ (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Ð¢ÑƒÑ€Ñ†Ð¸Ñ (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "РоÑÑиÑ/ТатарÑкий (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Украина (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "ПакиÑтан (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "УзбекиÑтан (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Вьетнам (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "СШÐ/ЕврейÑкий (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Китай (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Гонгконг/КитайÑкий (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Сингапур/КитайÑкий (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Тайвань (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒ:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Меню" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Параметры меню" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Размер индикатора" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Размер выпадающего индикатора" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ð’Ñк" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Пон" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Втр" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Срд" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Чтв" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*ПÑÑ‚" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Суб" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ВоÑкреÑенье" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Понедельник" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Вторник" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Среда" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Четверг" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "ПÑтница" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Суббота" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Янв" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Фев" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Мар" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Ðпр" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Май" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Июн" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Июл" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ðвг" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Сен" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Окт" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*ÐоÑ" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Дек" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Январь" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Февраль" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Март" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Ðпрель" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Май" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Июнь" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Июль" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ÐвгуÑÑ‚" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "СентÑбрь" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "ОктÑбрь" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "ÐоÑбрь" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Декабрь" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ИСТИÐÐ" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "ЛОЖЬ" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Чёрный" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Синий" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Голубой" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Зеленый" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Пурпурный" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "КраÑный" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Белый" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Жёлтый" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Дирхам ОÐЭ" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "ÐфганÑкий афгани" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "ÐлбанÑкий леке" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "ÐрмÑнÑÐºÐ°Ñ Ð´Ñ€Ð°Ð¼Ð°" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "ÐидерландÑкий гульден" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "ÐнгольÑкий кванза" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "ÐргентинÑкий пеÑо" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "ÐвÑтралийÑкий доллар" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "ÐрубанÑкий гульден" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "ÐзербайджанÑкий манат" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "БоÑÐ½Ð¸Ñ Ð¸ Герцеговина, ÐŸÐµÑ€ÐµÑ…Ð¾Ð´Ð½Ð°Ñ Ð¼Ð°Ñ€ÐºÐ°" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "БарбадоÑÑкий доллар" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "БангладешÑкий така" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "БолгарÑкий лев" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "БахрейнÑкий динар" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "БурундийÑкий франк" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "БермудÑкий доллар" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "БрунейÑкий доллар" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "БоливийÑкий боливиано" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "БразильÑкий риал" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "БагамÑкий доллар" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "БутанÑкий нгултрум" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "БотÑванÑÐºÐ°Ñ Ð¿ÑƒÐ»Ð°" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "БелоруÑÑкий рубль" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "БелизÑкий доллар" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "КанадÑкий доллар" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Конго/КиншаÑа, КонголезÑкий франк" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "ЩвейцарÑкий франк" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ЧилийÑкое пеÑо" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "КитайÑкий юань" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "КолумбийÑкий пеÑо" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "КоÑта-РиканÑкий колон" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "КубинÑкий пеÑо" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "КипрÑкий фунт" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ЧешÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "ДжибутийÑкий франк" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "ДатÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "ДоминиканÑкий пеÑо" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "ÐлжирÑкий динар" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "ЭÑтонÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "ЕгипетÑкий фунт" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "ЭритрейÑÐºÐ°Ñ Ð½Ð°ÐºÑ„Ð°" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "ЭфиопÑкий бирр" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Евро" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "ФиджийÑкий доллар" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Фунт ФолклендÑких о-вов" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "БританÑкий фунт" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "ГрузинÑкое лари" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "ГанÑкое Ñеди" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "ГибралтарÑкий фунт" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "ГамбианÑкое далаÑи" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "ГвинейÑкий франк" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "ГватемальÑкий кветцаль" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "ГвианÑкий доллар" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Гонг-КонгÑкий доллар" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "ГондураÑÑкий лемпир" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "ХорватÑкий кун" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "ГаитÑнÑкий гурд" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "ВенгерÑкий форинт" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "ИндонезийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "ИзраильÑкий шекель" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Фунты оÑтрова МÑн" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "ИндийÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "ИракÑкий динар" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "ИранÑкий риал" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "ИÑландÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Доллар Ямайки" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "ИорданÑкий динар" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "ЯпонÑÐºÐ°Ñ Ð¹ÐµÐ½Ð°" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "КенийÑкий шиллинг" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "КиргизÑкий Ñом" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "КамбоджийÑкий риал" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "КомороÑÑкий франк" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "СеверокорейÑкий вон" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "ЮжнокорейÑкий вон" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "КувейтÑкий динар" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Доллар Каймановых о-вов" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "КазахÑтанÑÐºÐ°Ñ Ñ‚Ð°Ð½ÑŒÐ³Ð°" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "ЛаоÑÑкий кип" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "ЛибанезÑкий фунт" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Ð ÑƒÐ¿Ð¸Ñ Ð¨Ñ€Ð¸-Ланки" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "ЛиберийÑкий доллар" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Лот ЛеÑото" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "ЛитовÑкий лит" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "ЛатвийÑкий лат" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "ЛивийÑкий динар" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "МарокканÑкий динар" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "МолдавÑкий лев" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "МалагазийÑкий франк" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "МакедонÑкий динар" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "МианмарÑкий куат" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "МонгольÑкий тугрик" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Патака Макау" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "МавританÑÐºÐ°Ñ Ð¾ÑƒÐ³ÑƒÐ¸Ñ" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "МальтийÑÐºÐ°Ñ Ð»Ð¸Ñ€Ð°" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "МавритÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "МальдивÑÐºÐ°Ñ Ñ€ÑƒÑ„Ð¸Ñ" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "МалавийÑÐºÐ°Ñ ÐºÐ²Ð°Ñ‡Ð°" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "МекÑиканÑкий пеÑо" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "МалазийÑкий ринггит" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "МозамбикÑкий метикаи" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "ÐамибийÑкий доллар" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "ÐигерийÑÐºÐ°Ñ Ð½Ð°Ð¸Ñ€Ð°" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "ÐикарагуанÑÐºÐ°Ñ ÐºÐ¾Ñ€Ð´Ð¾Ð±Ð° оро" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "ÐорвежÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "ÐепальÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "ÐовозеландÑкий доллары" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "ОманÑкий риал" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "ПанамÑкий балбоа" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Папуа ÐовогвинейÑкий кина" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "ФилиппинÑкий пеÑо" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "ПакиÑтанÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "ПольÑкий злотый" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "ПарагвайÑÐºÐ°Ñ Ð³ÑƒÐ°Ñ€Ð°Ð½Ð¸" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "КутарÑкий риал" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "РумынÑкий лео" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "РоÑÑийÑкий рубль" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "РуандÑкий франк" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Риал СаудовÑкой Ðравии" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Доллар Соломоновых о-вов" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "СейшельÑÐºÐ°Ñ Ñ€ÑƒÐ¿Ð¸Ñ" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "СуданÑкий динар" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "ШведÑÐºÐ°Ñ ÐºÑ€Ð¾Ð½Ð°" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "СингапурÑкий доллар" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Фунт Св.Елены" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "СловенÑкий толар" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Леон Сьерра-Леоне" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "СомалийÑкий шиллинг" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "СуринамÑкий гульден" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Сао Том и ПринципийÑкий добра" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "СальвадорÑкий колон" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "СирийÑкий фунт" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "СвазилендÑкий емалангени" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "ТайÑкий бахт" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "ТаджикиÑтанÑкий рубль" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "ТуркменÑкий манат" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "ТуниÑÑкий динар" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Паанга Тонги" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ Ð»Ð¸Ñ€Ð°" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Доллар Тринидада и Тобаго" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "ТувальÑкий доллар" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "ТайваньÑкий новый доллар" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "ТанзанÑкий шиллинг" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "УкраинÑÐºÐ°Ñ Ð³Ñ€Ð¸Ð²Ð½Ð°" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "УгандÑкий шиллинг" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Доллар СШÐ" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "УругвайÑкий пеÑо" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "УзбекÑкий Ñум" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "ВенеÑуÑльÑкий боливар" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "ВьетнамÑкий донг" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "ВануатÑкий вату" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "СамоанÑкий тала" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "СеребрÑÐ½Ð°Ñ ÑƒÐ½Ñ†Ð¸Ñ" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Ð—Ð¾Ð»Ð¾Ñ‚Ð°Ñ ÑƒÐ½Ñ†Ð¸Ñ" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "ВоÑточнокарибÑкий доллар" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "ÐŸÐ°Ð»Ð»Ð°Ð´Ð¸ÐµÐ²Ð°Ñ ÑƒÐ½Ñ†Ð¸Ñ" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "ÐŸÐ»Ð°Ñ‚Ð¸Ð½Ð¾Ð²Ð°Ñ ÑƒÐ½Ñ†Ð¸Ñ" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "ЙеменÑкий риал" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "ЮгоÑлавÑкий новый динар" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "ЮжноафриканÑкий Ñ€Ñнд" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "ЗамбийÑÐºÐ°Ñ ÐºÐ²Ð°Ñ‡Ð°" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "ЗимбабвийÑкий доллар" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ðет" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Сплошной" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "ÐвтоматичеÑки (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "нет" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "квадрат" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "ромб" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "треугольник вниз" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "треугольник вверх" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "треугольник направо" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "треугольник налево" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "круг" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "креÑÑ‚" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "звездочка" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "прÑмоугольник" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Ñерого" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Ñерого" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Ñерого" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Ñерого" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Ñерого" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Горизонтальные штрихи" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Вертикальные штрихи" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Обратные диагональные штрихи" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Диагональные штрихи" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Диагональные креÑтики" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "ТолÑтые диагональные креÑтики" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Тонкие горизонтальные штрихи" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Тонкие вертикальные штрихи" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Тонкие обратные диагональные штрихи" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Тонкие диагональные штрихи" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Тонкие горизонтальные креÑтики" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Тонкие диагональные креÑтики" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Сплошной передний план" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Маленькие круги" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "ПолуокружноÑти" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Солома" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Большие круги" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Кирпичи" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Метки" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "ЗначениÑ" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Строки ошибок" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Как Ñильно перекрываютÑÑ Ñтолбцы/полоÑÑ‹ в процентах от ширины" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "Перекрывание:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Разделение между группами в процентах ширины Ñтолбца/полоÑÑ‹" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "Зазор:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "ЛиниÑ" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "ОблаÑть" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "ОблаÑть" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "ОблаÑти" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "ПолоÑа" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Столбец" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ЛиниÑ" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Линейный график" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Линии" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Процентные облаÑти" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Процентные полоÑÑ‹" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Процентные Ñтолбцы" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Процентные линии" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Собранные полоÑÑ‹" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Собранные Ñтолбцы" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Ðачертить" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ðеверный шаблон поиÑка." + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Ðачертить" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Ðачертить" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Ðачертить" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Модуль Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÑ€ÑƒÐ³Ð¾Ð²Ð¾Ð¹ диаграммы" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Изменение цвета лиÑтов" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "Разделение долей:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "ИзменÑть цвета по долÑм" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "градуÑов" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "Разделитель:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "Ð¢Ñ€Ñ‘Ñ…Ð¼ÐµÑ€Ð½Ð°Ñ ÐºÑ€ÑƒÐ³Ð¾Ð²Ð°Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð°" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "ÐšÑ€ÑƒÐ³Ð¾Ð²Ð°Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð°" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Кольцо" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Ð Ð°Ð·Ð´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ ÐºÑ€ÑƒÐ³Ð¾Ð²Ð°Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼Ð°" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Разделённое кольцо" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Типы круговых диаграмм по умолчанию" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Модуль Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÑ€ÑƒÐ³Ð¾Ð²Ð¾Ð¹ диаграммы" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Модуль Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»ÑŒÑ†ÐµÐ²Ð¾Ð¹ диаграммы" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Радар" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "ЧиÑло долей:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Контур" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "ПоверхноÑть" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Диаграммы поверхноÑтей" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Диаграммы поверхноÑтей" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% от нормального размера" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Диаметр" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Показывать отрицательные значениÑ" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "ПоверхноÑть" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Пузырь" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "Линии XY" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "Точки XY" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Линии XY" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/sk.po b/lib/goffice-0.0.4/po/sk.po new file mode 100644 index 0000000000..f39e9f6256 --- /dev/null +++ b/lib/goffice-0.0.4/po/sk.po @@ -0,0 +1,4250 @@ +# translation of gnumeric.HEAD.po to Slovak +# translation of gnumeric.HEAD.sk.po to Slovak +# translation of sk.po to Slovak +# Gnumeric Slovak translation +# Copyright (c) 1999,2000,2001,2002 The Free Software Foundation +# 1999 Bobo Rajec +# 2000,2001,2002 Stanislav Visnovsky +# Stanislav Višňovský , 2002. +# Stanislav Visnovsky , 2002. +# Stanislav Visnovsky , 2003. +msgid "" +msgstr "" +"Project-Id-Version: gnumeric.HEAD\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-09-24 00:24+0200\n" +"Last-Translator: Stanislav Visnovsky \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"\n" +"Date: 1999-04-30 12:12:02+0000\n" +"From: Bobo Rajec,BSP Consulting,+42 7 5330 017,, \n" +"X-Generator: KBabel 1.2beta3\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "Uloženie do starých súborov tohto typu je kvôli bezpeÄenosti vypnuté." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Túto funkciu môžete bezpeÄne vypnúť úpravou zodpovedajúceho súboru plugin." +"xml." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektívny" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "Súbor obsahuje informácie o module s neplatným id (%s), oÄakávané %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Nie je možné preÄítaÅ¥ informáciu o module zo súboru." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Neznáme meno" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Nepodporovaný typ loadera \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Chyba pri príprave loadera \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Chyba pri Äítaní informácií o službe #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Nie je možné preÄítaÅ¥ súbor s informáciu o module (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Súbor \"%s\" nie je platný súbor s informáciou o module." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Chyby pri Äítaní služieb pre modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Id modulu obsahuje neplatné znaky (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Neznáme meno modulu." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Pre modul s id=\"%s\" nie je definovaný loader." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Modul nemá id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Chyba poÄas inicializácie loadera modulu (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Nájdete cyklické závislosti modulu." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Nie je možné aktivovaÅ¥ modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Nie je možné nájsÅ¥ modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Chyba pri aktivácii závislostí modulu." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Chyba pri aktivácii služby modulu #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Chyba poÄas deaktivácie služby modulu #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Nie je možné naÄítaÅ¥ loader modulu." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Nepodarilo sa naÄítaÅ¥ modul s id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Chyba pri naÄítavaní závislostí modulu." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Nastali chyby pri naÄítavaní informácií o module zo súboru \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Nie je možné aktivovaÅ¥ modul \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Nie je možné deaktivovaÅ¥ modul \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Chyby pri Äítaní informácií o dostupných moduloch." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Chyby poÄas deaktivácie modulov, ktoré už nie sú na disku." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Tieto moduly už nie sú na disku, ale sú stále aktívne:\n" +"%s.\n" +"Mali by ste reÅ¡tartovaÅ¥ Gnumeric." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Chyba pri aktivácii modulov." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Chyby poÄa inicializácie systému modulov." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Služba %s nie je podporovaná loaderom." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Nezadané meno súboru s modulom." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Súbor s modulom \"%s\" sa nedá otvoriÅ¥." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Súbor s modulom \"%s\" má neplatný formát." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Súbor neobsahuje (symbol \"plugin_file_struct\")." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Súbor má nesprávne magické Äíslo." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Verzia modulu \"%s\" je iná ako verzia aplikácie \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamické naÄítavanie modulov nie je na tomto systéme podporované." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Nepodarilo sa zatvoriÅ¥ súbor s modulom \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Súbor neobsahuje funkciu \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modul neobsahuje funkciu \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Chyba poÄas naÄítavania modulu služby." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "InicializaÄná funkcia v module vrátila chybu." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Upratovacia funkcia v module vrátila chybu." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "VÅ¡eobecné" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Otváranie súborov nemá popis" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Otváranie súborov - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Chyba pri Äítaní súboru." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Ukladanie súborov nemá popis" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Ukladanie súborov - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Chyba pri ukladaní súboru." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "NaÄítanie modulu" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "NaÄítanie GObject" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "V elemente \"service\" nie je atribút \"type\"." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Neznámy typ služby: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Chyba pri Äítaní informácií o službe." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Pred aktiváciou služby je nutné ju naÄítaÅ¥ (PLUGIN_ALWAYS_LOAD najstavené), " +"ale naÄítanie sa nepodarilo." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Vzorce" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Odsadenie:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Hľa_daÅ¥" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Medzera" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Zarovnanie" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Znak úvodzoviek:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "VeľkosÅ¥ problému" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskrétne" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diskrétne" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Lineárny" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logické" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logaritmické" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detaily" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatické" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategória:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Hranice" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Hla_vné znaÄky" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "_VedľajÅ¡ie znaÄky" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Krížom" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formát" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Návestie" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Mriežka" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Mriežka" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Hlavné znaÄky:" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "ÄŒiara" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "VedľajÅ¡ie znaÄky:" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "ÄŒiara" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "V_nútri" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "_Okolo" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Hore" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "V_nútri" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_InvertovaÅ¥" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Dole" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Okolo" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "ZobraziÅ¥ _popisky" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Typ:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titulok" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Mriežka" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "Os X" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Os Y" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Os Z" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "KresliÅ¥" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "V" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Výška" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "Å " + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Šírka" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Upozornenie na chybu" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Å týl" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Náhľad" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Farba:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "_Deň" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Šírka Äiary:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_s:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Graf" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Meno" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Krok 1 z 2: Výber typu grafu" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Krok 2 z 2: Úprava grafu" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "UpraviÅ¥ graf" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_PridaÅ¥" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Typ _kresby" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Graf GNOME Office" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Poradie:" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Orientácia" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Vzorka" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Å týl" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"ZobraziÅ¥\n" +"náhľad" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Popis" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Dáta" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Série" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Nástroj na kreslenie" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Typ grafu" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Grafová téma" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Odsadenie:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Textové" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Hodnota" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Písmo" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Å týl" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Jas" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Výplň" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "ÄŒiara" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "ZnaÄka" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Okraj" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Farba:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Farba _okrajov:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Tvar:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "_VeľkosÅ¥:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Å týl:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "_Typ:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Pozadie:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "S_mer:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Koniec:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "_Farba výplne:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "Pri_spôsobiÅ¥:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "P_opredie:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "V_zorka:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_VybraÅ¥..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_VeľkosÅ¥:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_ZaÄiatok:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_jasnejÅ¡ie" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_tmavÅ¡ie" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "bodov" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "roztiahnutý" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Å tandardné" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabské" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Pobaltské" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Stredoeurópske" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Čínske" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Azbuka" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grécke" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebrejské" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indické" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japonské" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Kórejské" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turecké" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamské" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Západné" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Iné" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabské (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabské (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabské (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabské (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabské (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabské (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabské (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Arménske (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Pobaltské (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Pobaltské (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Pobaltské (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltské (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Stredoeurópske (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Stredoeurópske (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Stredoeurópske (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Stredoeurópske (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "ZjednoduÅ¡ené Äínske (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "ZjednoduÅ¡ené Äínske (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "ZjednoduÅ¡ené Äínske (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "ZjednoduÅ¡ené Äínske (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "ZjednoduÅ¡ené Äínske (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "TradiÄné Äínske (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "TradiÄné Äínske (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "TradiÄné Äínske (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Chorvátske (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Azbuka (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Azbuka (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Azbuka (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Azbuka (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Azbuka (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Azbuka (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Ruské (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrajinské (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrajinské (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Anglické (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Fársí (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Gruzínske (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grécke (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grécke (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grécke (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gudžarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmuchské (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrejské (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebrejské (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrejské (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrejské (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrejské (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindské (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandské (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japonské (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonské (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japonské (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Kórejské (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Kórejské (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Kórejské (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Kórejské (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Severské (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumunské (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumunské (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Južná Európa (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thajské (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turecké (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turecké (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turecké (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turecké (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Vlastné" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamské (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamské (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamské (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamské (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Vizuálne hebrejské (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Západné (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Západné (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Západné (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Západné (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Západné (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Lokálne nastavenie:" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Smer prevodu" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Táto hodnota urÄuje, Äi sa spúšťa test iconv." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "Äierna" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "svetlá hnedá" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "zlatohnedá" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "tmavá zelená 2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "námornícka modrá" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "tmavá modrá" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "purpurová 2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "veľmi tmavá Å¡edá" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "tmavá Äervená" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "oranžovoÄervená" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "zlatá" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "tmavá zelená" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "matná modrá" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "modrá" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "matná purpurová" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "tmavá Å¡edá" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "Äervená" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "oranžová" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "limetková" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "matná zelená" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "matná modrá 2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "modrá oblohy 2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "purpurová" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "Å¡edá" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "fialová" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "jasná oranžová" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "žltá" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "zelená" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "modrozelená" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "jasná modrá" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "Äervenopurpurová" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "svetlá Å¡edá" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "ružová" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "svetlá oranžová" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "svetlá žltá" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "svetlá zelená" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "svetlá modrozelená" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "svetlá modrá" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "svetlá purpurová" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "biela" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "purpurová modrá" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "tmavá purpurová" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "modrá oblohy" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "vlastná" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Vlastná farba:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Tieň" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Orientácia" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Súbor '%s' sa nedá otvoriÅ¥" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Súbory" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Obrázok" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Vyberte obrázok" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "UložiÅ¥ vÅ¡etko" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "_Typ súboru:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Zadaná prípona súboru nezodpovedá vybranému typu súboru. Chcete toto meno " +"použiÅ¥ aj tak?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"je meno prieÄinku" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Nemáte práva pre ukladanie do\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"ZoÅ¡it %s už existuje.\n" +"Chcete ho prepísaÅ¥?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normálne" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "TuÄné" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "TuÄné Å¡ikmé" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Å ikmé" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Å týl písma:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Písmo:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Náhľad" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "VeľkosÅ¥:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Čísla" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Mena" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "ÚÄtovníctvo" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Dátum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "ÄŒas" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Percentá" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Zlomky" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Vedecký" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Å peciálny" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Vlastný" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Formát záporného Äísla" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Číselné formáty" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "_Kategórie:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "PoÄet _desatinných miest:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "ZobraziÅ¥ množstvo v tradiÄných úÄtovníckych Å¡týloch." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "ZobraziÅ¥ vstupné hodnoty ako reÅ¥ezce bez interpretácie." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "ZobraziÅ¥ množstvá meny." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "ZobraziÅ¥ dátumy a prípadne Äasy." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "ZobraziÅ¥ Äíselné hodnoty s pevným poÄtom desatinných miest." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "ZobraziÅ¥ Äasy." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "ZobraziÅ¥ hodnoty ako najbližšiu aproximáciu zlomkom." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "ZobraziÅ¥ hodnoty ako percentá." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "ZobraziÅ¥ hodnoty ako mocniny 10." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "_Kód formátu:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "Formát _záporného Äísla:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Náhľad:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "VybraÅ¥ vhodný formát automaticky." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Priamo zadaÅ¥ formát v Å¡týle XL" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Formát:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_PoužiÅ¥ oddeľovaÄ pre tisíce" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Západná Európa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Východná Európa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Severná Amerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Južná a centrálna Amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ãzia" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Austrália" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "USA/Anglické (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Južná Afrika/Afrikánske (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiópia/Amharské (em_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Spojené arabské emiráty (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrajn (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Alžírsko (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypt (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "India/Arabské (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordánsko (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuvajt (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Lýbia (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Omán (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Katar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudská Arábia (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudán (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Sýria (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisko (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Ãzerbajdžán (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Bielorusko (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulharsko (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladéš (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengálske (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francúzsko/Bretonské (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosna a Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Å panielsko/Katalánske (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ÄŒeskár republika (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Veľká Británia/WelÅ¡ské (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Dánsko (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Rakúsko (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgicko/Nemecké (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Å vajÄiarsko/Nemecké (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Nemecko (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxembourg/Nemecké (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grécko (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Austrália (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/Anglické (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Veľká Británia (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Anglické (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Ãrsko (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/Anglické (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nový Zéland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipíny (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapúr/Anglické (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "USA/Anglické (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Južná Afrika/Anglické (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentína (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolívia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Kostarika (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikánska republika (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekvádor (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Å panielsko (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nikaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Portoriko (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "USA/Å panielske (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estónsko (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Å panielsko/Baskitské (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Irán (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Fínsko/Fínske (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Faerské ostrovy (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgicko/Francúzske (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/Francúzske (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Å vajÄiarsko/Francúzske (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francúzsko (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Ãrsko/Galské (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Veľká Británia/Scottish Gaelic (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Å panielsko/Galské (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Veľká Británia/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindské (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Chorvátsko (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "MaÄarsko (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Arménsko (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonézia (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Å vajÄiarsko/Talianske (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Taliansko (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Izrael/Hebrejské (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japonsko (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Gruzínsko (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grónsko (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Kórea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Veľká Británia/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litva (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "LotyÅ¡sko (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nový Zéland/Maorské (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedónia (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "India/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malajsia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgicko/Flámske (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holandsko (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Nórsko/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Nórsko/Bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francúzsko/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poľsko (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazília (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugalsko (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumunsko (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rusko (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukrajina/Ruské (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Nórsko/Laponské (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovensko (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovinsko (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albánsko (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Juhoslávia (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Fínsko/Å védske (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Å védsko (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "India/Tamilské (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "India/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadžikistán (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thajsko (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiópia/Tigriňa (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipíny/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turecko (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rusko/Tatarské (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukrajina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistán (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistán (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgicko/Wallonske (we_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "USA/Hebrejské (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Čína (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Čínske (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapúr/Čínske (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Aktuálne kódovanie:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Menu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Menu možností" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "VeľkosÅ¥ indikátora" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "VeľkosÅ¥ rozbaľovacieho indikátora" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Medzera indikátora" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Medzera okolo indikátora" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ned" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Pon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Uto" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Str" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Å tv" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Pia" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sob" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Nedeľa" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Pondelok" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Utorok" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Streda" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Å tvrtok" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Piatok" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Sobota" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Máj" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jún" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Júl" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Január" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Február" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Marec" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Apríl" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Máj" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Jún" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Júl" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "August" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "September" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Október" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "November" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "December" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "ÄŒierna" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Modrá" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Modrozelená" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Zelená" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Fialová" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "ÄŒervená" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Biela" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Žltá" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Spojené arabské emiráty, Dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghánistán, Afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albánsko, Lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Arménsko, Drams" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Holandské antíly, Gulden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, Peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Austrália, Doláre" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Guldeny" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Ãzerbajdžán, Manat" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosna a Hercegovina, Prevoditeľná marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dolár" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladéž, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulharsko, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, Dinár" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Frank" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermudy, Dolár" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, Dolár" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, Boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazília, Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamy, Dolár" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Bielorusko, Rubeľ" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dolár" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, Dolár" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/Kinshasa, Konžský frank" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Å vajÄiarsko, Frank" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, Peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Čína, Juan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbia, Peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Kostarika, Kolon" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, Peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde, Escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cyprus, Libra" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ÄŒeskár republika, Koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Džibuti, Frank" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Dánsko, Krone" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikánska republika, Peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Alžírsko, Dinár" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estónsko, Krooni" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt, Libra" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiópia, Birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "ÄŒlenské krajiny Euro, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidži, Dolár" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falklandské ostrovy, Libra" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Anglicko, Libra" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Gruzínsko, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, Libra" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, Cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, Libra" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia Dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, Frank" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, Quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guajana, Dolár" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hongkong, Dolár" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Chorvátsko, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "MaÄarsko Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonézi, Rupia" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Izrael, Nový Å¡ekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, Libra" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India, Rupia" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irák, Dinár" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Irán, Rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, Koruna" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Libra" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamajka, Dolár" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordánsko, Dinár" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japonsko, Jen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Keňa, Å iling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstán, Som" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodža, Riel" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komory, Frank" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (severná), Won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (južná), Won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuvajt, Dinár" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kajmanské ostrovy, Dolár" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazachstán, Tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kip" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, Libra" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Srí lanka, Rupia" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Libéria, Dolár" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, Maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litva, Litai" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "LotyÅ¡sko, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Lýbia, Dinár" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroko, Dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldávsko, Lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, Frank" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedónia, Dinár" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Burma, Kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolsko, Tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Makao, Pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauretánia, Ouguija" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Líra" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Maurícius, Rupia" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maledivy, Rufija" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, Kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexiko, Peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malajzia, Ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambik, Meticai" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namíbia, Dolár" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigéria, Naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikaragua, Zlatý Kordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Nórsko, Koruna" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepál, Rupia" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nový Zéland, dolár" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Omán, rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, Nuevo Sole" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nová Guinea, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipíny, Peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistán, Rupia" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poľsko, Zloté" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguaj, Guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar, Rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumunsko, Lei" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusko, Rubeľ" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, Rwandský frank" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudská Arábia, Rial" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomonove ostrovy, Dolár" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Sekely, Rupia" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudán, Dinár" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Å védsko, Koruna" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, Dolár" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Svätá Helena, Libry" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovinsko, Tolár" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovensko, Koruna" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, Leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somálsko, Å iling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, Guilden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome a Principe, Dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Colon" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Sýria, Libra" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swazijsko, Emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thajsko, Baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadžikistán, Rubeľ" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistán, Manat" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisko, Dinár" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turecko, Líra" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad a Tobago, Dolár" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Dolár" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, Nový dolár" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzánia, Å ilink" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukrajina, Hrivna" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Å ilink" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Spojené Å¡táty americké, Dolár" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistán, Sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, Bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, Franky" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Striebro, Unce" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Zlato, Unce" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Východokaribský dolár" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "International Monetary Fund (IMF) Special Drawing Rights" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Frank" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, Unce" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platina, Unce" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, Rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Juhoslávia, Nový dinár" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Južná afrika, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, Kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, Dolár" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Žiadne" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Plné" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatické" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "žiadna" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "Å¡tvorec" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "diamant" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "trojuholník dolu" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "trojuholník hore" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "trojuholník vpravo" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "trojuholník vľavo" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "kruh" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "kríž" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "hviezdiÄka" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "pruh" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "poloviÄný pruh" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "motýľ" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "hodiny" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Å¡edej" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Å¡edej" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Å¡edej" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Å¡edej" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Å¡edej" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontálne pruhy" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Vertikálne pruhy" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "OpaÄné diagonálne pruhy" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonálne pruhy" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonálne krížové Å¡rafovanie" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "TuÄné diagonálne krížové Å¡rafovanie" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tenké horizontálne pruhy" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tenké vertikálne pruhy" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tenké opaÄné diagonálne pruhy" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tenké diagonálne pruhy" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tenké horizontálne krížové Å¡rafovanie" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tenké diagonálne krížové Å¡rafovanie" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Plná farba popredia" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Malé kruhy" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Polkruhy" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Slama" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Veľké kruhy" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Tehly" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Popisy" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Hodnoty" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Chyba pri spracovaní riadku." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "PlotBarCol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Ako veľmi sa pruhy prekrývajú zadané ako percentá šírky" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "_Prekryv:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Oddelenie medzi skupinami ako percentá šírky pruhu" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Medzera:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "GrafÄŒiary" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "GrafOblasÅ¥" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D susediace pruhy" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D susediace stĺpce" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D percentuálne pruhy" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D percentuálne stĺpce" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D pruhy na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D stĺpce na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Susediace pruhy" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Susediace stĺpce" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Susediace horizontálne 3D pruhy zoskupené podľa hlavnej a vedľajÅ¡ej " +"kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Susediace horizontálne pruhy zoskupené podľa hlavnej a vedľajÅ¡ej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Susediace vertikálne 3D pruhy zoskupené podľa hlavnej a vedľajÅ¡ej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Susediace vertikálne pruhy zoskupené podľa hlavnej a vedľajÅ¡ej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "OblasÅ¥" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Grafy oblastí." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Oblasti" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Pruh" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Stĺpec" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ÄŒiara" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "ÄŒiarové grafy." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "ÄŒiary" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe ako percentá súÄtu vedľajších v 3D " +"horizontálnych pruhoch, zoskupené podľa hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe ako percentá súÄtu vedľajších v 3D vertikálnych " +"pruhoch, zoskupené podľa hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe ako percentá súÄtu vedľajších v horizontálnych " +"pruhoch, zoskupené podľa hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe ako percentá súÄtu vedľajších vo vertikálnych " +"stĺpcoch zoskupené podľa hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe v horizontálnych 3D pruhoch zoskupené podľa " +"hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe v horizontálnych pruhoch zoskupené podľa hlavnej " +"kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe v 3D stĺpcoch, zoskupené podľa hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"VedľajÅ¡ie kategórie na sebe v stĺpcoch, zoskupené podľa hlavnej kategórie." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Percentuálne oblasti" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Percentuálne pruhy" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Percentuálne stĺpce" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Percentuálne Äiary" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Kreslenie percentuálnej plochy." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Kreslenie percentuálnej Äiary." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Oblasti na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Pruhy na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Stĺpce na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "ÄŒiary na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Kreslenie oblastí na sebe." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Kreslenie Äiar na sebe." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "ÄŒiary na sebe" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "Percentuálne Äiary" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "ÄŒiary na sebe" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Nástroj pre kreslenie oblastí" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Nástroj na kreslenie pruhov" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Å tandardné typy 1.5d" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Nástroj na kreslenie Äiarových grafov" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "ÄŒiarové, pruhové, stĺpcové a grafy oblastí" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "KresliÅ¥" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Neplatné heslo" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "KresliÅ¥" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "KresliÅ¥" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "KresliÅ¥" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Nástroj na kreslenie pruhov" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Zmena farieb záložky" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Å tandardné typy 1.5d" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "GrafKoláÄ" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "GrafKruh" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Stupňov proti smeru hodinových ruÄiÄiek od 3 hod." + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "ÄŒasti zaÄínajú _na:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"Å tandardná ÄasÅ¥ každej Äasti, ktorá ju oddeľuje od stredu meraná ako " +"percento polomeru koláÄa" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_Oddelenie Äastí:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_MeniÅ¥ farby Äastí" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "stupne" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +#, fuzzy +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"Å tandardná ÄasÅ¥ každej Äasti, ktorá ju oddeľuje od stredu meraná ako " +"percento polomeru koláÄa" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "OddeľovaÄ:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "VeľkosÅ¥ _stredu:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D rozdelený koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"SúÄty hlavných ako percentá v každej Äasti podrozdelenej do sekundárnych " +"koláÄov." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"SúÄty hlavných ako percentá v každej Äasti podrozdelenej do sekundárnych " +"pruhov na sebe." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Viacnásobný koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Viacnásobné koláÄové pruhy" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "Percentá každej Äasti kruhu v každej sérii s oddelenými okrajmi." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Percentá každej Äasti kruhu v každej sérii." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Percentá každej Äasti v 3D koláÄi." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Percentá každej Äasti s 3D oddelenými okrajmi." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Percentá každej Äasti s oddelenými okrajmi." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Percentá každej Äasti." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "KoláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Kruh" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Rozdelený koláÄ" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Rozdelený kruh" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Å tandardné typy koláÄových" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "KoláÄové grafy" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Kruhové grafy" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "PlotBarCol" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "GrafOblasÅ¥" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Grafy oblastí." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Smerodajná chyba" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Kreslenie oblastí na sebe." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Å tandardné typy 1.5d" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Nástroj pre kreslenie oblastí" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Kruhové grafy" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Celé Äísla" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "PoÄet" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Grafy oblastí." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Zdroj" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Kruhové grafy" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "KoláÄové grafy" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "KoláÄové grafy" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% _normálnej veľkosti" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Parametre" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Zdroj" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +#, fuzzy +msgid "_Vary colors by bubble" +msgstr "_MeniÅ¥ farby Äastí" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "KresbaXY" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Bublina" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bublina" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Chyba pri spracovaní riadku." + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Chyba pri spracovaní riadku." + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "InterpolovaÅ¥ medzi viacdimezionálnymi bodmi." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Lineárne interpolovaÅ¥ medzi viacdimezionálnymi bodmi so znaÄkami v každom " +"bode." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Lineárne interpolovaÅ¥ medzi viacdimezionálnymi bodmi." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "OznaÄené interpolované body" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "InterpolovaÅ¥ medzi viacdimezionálnymi bodmi so znaÄkami v každom bode." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "KresliÅ¥ X, Y a bublinovú veľkosÅ¥." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ÄŒiary" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Hodnota" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ÄŒiary" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D rozptýlené grafy" + +#: plugins/plot_xy/plugin.xml.in.h:3 +#, fuzzy +msgid "Bubble plotting engine" +msgstr "KoláÄové grafy" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Rozptýlené kurzy" diff --git a/lib/goffice-0.0.4/po/sr.po b/lib/goffice-0.0.4/po/sr.po new file mode 100644 index 0000000000..9aac5d9f27 --- /dev/null +++ b/lib/goffice-0.0.4/po/sr.po @@ -0,0 +1,4250 @@ +# Serbian translation of gnumeric +# Courtesy of Prevod.org team (http://www.prevod.org/) -- 2003. +# +# This file is distributed under the same license as the gnumeric package. +# +# Maintainer: Slobodan Sredojević +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-12-08 01:14+0100\n" +"Last-Translator: Слободан Средојевић \n" +"Language-Team: Serbian (sr) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "Чување преко Ñтарих датотека ове врÑте је онемогућено због ÑигурноÑти." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Можете иÑкључити ову заштиту уређивањем одговарајуће plugin.xml датотеке." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Циљ" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Датотека Ñадржи Ð¾Ð¿Ð¸Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ° Ñа нетачном идентификацијом (%s), очекивало Ñе %" +"s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Ðе могу да прочитам Ð¾Ð¿Ð¸Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ° из датотеке." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ðепознат назив" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ðеподржана врÑта код ÑиÑтема за учитавање „%s“." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Грешка приликом припремања ÑиÑтема за учитавање „%s“" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Грешка приликом читања информација о ÑервиÑу #%d" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ðе могу прочитати датотеку Ñа опиÑом додатка („%s“)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Датотека „%s“ није иÑправна датотека Ñа опиÑом додатка." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Грешка при читању ÑервиÑа за додатак Ñа ИД=„%s“." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "ИД додатка Ñадржи недозвољене знаке (%s)" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ðепознато име додатка." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Ðије дефиниÑан ÑиÑтем за учитавање или је ИД ÑиÑтема погрешна за додатак Ñа " +"ИД=„%s“." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Додатак нема идентификацију." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" +"Грешка у поÑтављању почетних вредноÑти за ÑиÑтем за учитавање додатка(„%s“)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Препознате Ñу кружне завиÑноÑти додатака." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ðе могу покренути додатак Ñа идентификацијом ид=„%s“." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ðе могу пронаћи додатак Ñа идентификацијом ид=„%s“." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Грешка при покретању завиÑноÑти додатка." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Грешка приликом покретања ÑервиÑа додатка #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Грешка приликом зауÑтављања ÑервиÑа додатка #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ðе могу учитати ÑиÑтем за учитавање додатака." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ðе могу да учитам додатак Ñа идентификацијом ид=„%s“." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Грешка приликом учитавања завиÑноÑти додатка." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Дошло је до грешака приликом читања информација о додатку из датотеке „%s“." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ðе могу да покренем додатак „%s“ (ИД: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ðе могу прекинути рад додатка „%s“ (ИД: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Грешка приликом читања информација о доÑтупним додацима." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Грешка приликом зауÑтављања додатака који Ñе више не налазе на диÑку." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Следећи додаци Ñе више не налазе на диÑку али Ñу још увек покренути:\n" +"%s.\n" +"Требало би да Ñада поново покренете Гнумерик." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Грешке приликом покретања додатака." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Грешке приликом покретања ÑиÑтема додатака" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "СиÑтем за учитавање не подржава ÑÐµÑ€Ð²Ð¸Ñ â€ž%s“." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Име датотеке модула није дато." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ðе могу да отворим датотеку Ñа модулом „%s“." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Датотека Ñа модулом „%s“ има неиÑправан формат." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Датотека не Ñадржи („plugin_file_struct“ Ñимбол)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Датотека има погрешан магични број." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Верзија додатка „%s“ је различита од програма „%s“." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Овај ÑиÑтем не подржава динамичко учитавање модула." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ðе могу да затворим датотеку Ñа модулом „%s“." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Датотека не Ñадржи „%s“ функцију." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Модул не Ñадржи „%s“ функцију." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Грешка при учитавању ÑервиÑа додатака." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" +"Функција унутар додатка која поÑтавља почетне вредноÑти је вратила грешку." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Функција унутар додатка која чиÑти је вратила грешку." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Опште" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "СиÑтем за отварање нема опиÑ" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "СиÑтем за отварање - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Грешка приликом читања датотеке." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "СиÑтем за чување нема опиÑ" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "СиÑтем за чување - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Грешка приликом чувања датотеке." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "СиÑтем за учитавање додатака" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "СиÑтем за учитавање ГОбјеката" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Ðе поÑтоји „врÑта“ атрибут за елемент „ÑервиÑ“." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Ðепозната врÑта ÑервиÑа: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Грешка у читању опиÑа ÑервиÑа." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Морамо учитати ÑÐµÑ€Ð²Ð¸Ñ Ð¿Ñ€Ðµ његовог покретања (PLUGIN_ALWAYS_LOAD је " +"поÑтављен) али учитавање није уÑпело." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Формуле" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Увуци:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Тражи:" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Размак" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Поравнање" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Знак за цитирање:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Величина проблема" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "ДиÑкретан" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "ДиÑкретан" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Линеарно" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Логичке" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "ЛогаритамÑко" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Детаљи" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "ÐутоматÑко" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Категорија:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Ограничења" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "_Минимално" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "М_акÑимално" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Гла_вне цртице" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Сп_оредне цртице" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_КрÑÑ‚" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Форматирање" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Ознака" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Мрежа" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Мрежа" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Главне цртице:" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Линија" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Споредне цртице:" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Линија" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "_Унутар" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "Сп_оља" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_ВиÑоко" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Унутар" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "О_брни" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_ÐиÑко" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "Сп_оља" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "П_рикажи ознаке" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "Ð’Ñ€_Ñта:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Легенда" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "ÐаÑлов" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Мрежа" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X оÑа" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y оÑа" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z оÑа" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "ИÑцртај" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "ВиÑина" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Ширина" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Упозорења на грешку" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Стл" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Узорак" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Боја:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "Д_ан" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Ширина линије:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Са" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "График" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Графикон" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Име" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Корак 1 од 2: Изаберите тип графикона" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Корак 2 од 2: Прилагодите графикон" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Прилагодите графикон" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Убацивањ_е" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Ð’Ñ€Ñта и_Ñцртавања" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Графикони Гномове канцеларије" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "П_оредак" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Правац пружања" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Образац" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Стл" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Прикажи\n" +"Узорак" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "ОпиÑ" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_ТекÑÑ‚:" + +# Kako ovo moze biti jednina?????? — и није множина +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Подаци" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Редови" + +# steam engine је парна машина, а шта је ово? +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "СиÑтем за иÑцртавање" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Ð’Ñ€Ñта иÑцртавања" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Мотив графика" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Увуци:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Ðизови зн_акова" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Тачка" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "ПиÑмо" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Стил" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "ОÑветљење" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "ИÑпуни" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Линија" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Обележивач" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Издвојено" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Боја:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Боја _издвојеног:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Облик:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Ве_личина:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Стил:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "Ð’Ñ€_Ñта:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Позадина:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "П_равац:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Крај:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Боја за поп_уњавање:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "Уклоп_и:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Боја:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "Об_разац:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "И_забери..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Величина:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "П_очни:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_Ñветлије" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_тамније" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "штампарÑких тачака" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "развучено" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Подразумевано" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Гупи" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "ÐрапÑки" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Балтички" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "ЦентралноевропÑки" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "КинеÑки" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Ћирилични" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Грчки" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "ХебрејÑки" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "ИндијÑки" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "ЈапанÑки" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "КорејÑки" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "ТурÑки" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Уникод" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "ВијетнамÑки" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "ЗападноевропÑки" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "ОÑтало" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "ÐрапÑки (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "ÐрапÑки (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "ÐрапÑки (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "ÐрапÑки (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "ÐрапÑки (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "ÐрапÑки (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "ÐрапÑки (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "ЈерменÑки (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Балтички (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Балтички (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Балтички (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "КелтÑки (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "ЦентралноевропÑки (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "ЦентралноевропÑки (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "ЦентралноевропÑки (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "ЦентралноевропÑки (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "КинеÑки поједноÑтављени (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "КинеÑки поједноÑтављени (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "КинеÑки поједноÑтављени (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "КинеÑки поједноÑтављени (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "КинеÑки поједноÑтављени (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "КинеÑки Традиционални (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "КинеÑки Традиционални (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "КинеÑки Традиционални (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "ХрватÑки (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Чирилични (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Ћирилица (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Ћирилица (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Ћирилица (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Ћирилица (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Ћирилица (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "РуÑки (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "УкрајинÑки (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "УкрајинÑки (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "ЕнглеÑки (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "ФарÑи (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "ГрузијÑки (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Грчки (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Грчки (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Грчки (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Гуџарати (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Гурмуки (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "ХебрејÑки (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "ХебрејÑки (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "ХебрејÑки (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "ХебрејÑки (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "ХебрејÑки (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Хинду (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "ИÑландÑки (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "ЈапанÑки (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "ЈапанÑки (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "ЈапанÑки (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "КорејÑки (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "КорејÑки (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "КорејÑки (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "КорејÑки (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "ÐордијÑки (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "РумунÑки (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "РумунÑки (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "ЈужноевропÑки (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "ТајландÑки (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "ТурÑки (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "ТурÑки (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "ТурÑки (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "ТурÑки (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Уникод (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Уникод (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Уникод (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Уникод (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Уникод (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Уникод (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "КориÑнички дефиниÑан" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "ВијетнамÑки (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "ВијетнамÑки (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "ВијетнамÑки (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "ВијетнамÑки (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Визуелни ХебрејÑки (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Западни (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Западни (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Западни (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Западни (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Западни (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Локалитет: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Смер претварања" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Ова вредноÑÑ‚ одлучује који iconv теÑÑ‚ ће Ñе извеÑти." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "црна" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "Ñветлобраон" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "златно браон" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "тамно зелена 2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "морнарÑко плава" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "тамно плава" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "љубичаÑта 2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "веома тамно Ñива" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "тамноцрвена" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "црвено-наранџаÑта" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "златна" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "тамно зелена" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "тупо плава" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "плава" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "тупо љубичаÑта" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "тамно Ñива" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "црвена" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "наранџаÑта" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "дречаво зелена" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "тупо зелена" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "тупо плава 2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "небоплава 2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "љубичаÑта" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "Ñива" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "магента" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "Ñветло наранџаÑта" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "жута" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "зелена" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "цијан" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "Ñветлоплава" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "црвено-љубичаÑта" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "ÑветлоÑива" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "роза" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "Ñветло наранџаÑта" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "Ñветложута" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "Ñветлозелена" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "Ñветлоцијан" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "Ñветлоплава" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "ÑветлољубичаÑта" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "бела" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "љубичаÑто-плава" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "тамнољубичаÑта" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "небоплава" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "произвољно" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Боја по избору:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Сенка" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Правац пружања" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ðе може да отвори датотеку '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Датотеке" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Слика" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Изаберите Ñлику" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Сачувај Ñве" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Ð’Ñ€Ñта д_атотеке:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Ðаведени наÑтавак датотеке не одговара изабраној врÑти датотеке. Да ли " +"желите да кориÑтите ово име поред Ñвега?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"је име директоријума" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Ðемате овлашћење да чувате документе под путањом\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Радна ÑвеÑка %s већ поÑтоји.\n" +"Желите ли да препишете преко ње?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Ðормално" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "МаÑно" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "МаÑно курзивно" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Курзив" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Стил фонта:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Фонт:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Преглед" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Величина:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Број" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Валута" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "РачуноводÑтво" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Датум" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Време" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Проценат" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Разломљено" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "ИнжењерÑки" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "ТекÑÑ‚" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Ðарочито" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Произвољно" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Формат негативних бројева" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Формати бројева" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ка_тегорије:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Број децималних _меÑта:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Прикажи величине у традиционалном Ñтилу рачуновођа." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Прикажи улазне вредноÑти као текÑÑ‚ без обраде." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Прикажи новчане вредноÑти." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Прикажи датуме и по жељи време у дану." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Прикажи бројевне вредноÑти Ñа утврђеним бројем децимала." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Прикажи време у дану." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Прикажи вредноÑти помоћу најближе разломљене вредноÑти." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Прикажи вредноÑÑ‚ као проценте." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Прикажи вредноÑти помоћу увећања на-деÑети." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "К_од _форматирања:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Формат негативних бројева:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Преглед:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "С_имбол:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Сам изабери одговарајуће форматирање." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Ðаведите непоÑредно форматирање у XL Ñтилу" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Формат:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "КориÑти раздвојник хиљ_ада" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "ЗападноевропÑки" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "ИÑточноевропÑки" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Северна Ðмерика" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Јужна и Централна Ðмерика" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Ðзија" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Ðфрика" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "ÐуÑтралија" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "СÐД/енглеÑки (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Јужна Ðфрика/ÐÑ„Ñ€Ð¸ÐºÐ°Ð½Ñ (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Етиопија/ÐмхарÑки (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Уједињени ÐрапÑки Емирати (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Бахреин (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Ðлжир (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Египат (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Индија/ÐрапÑки (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Ирак (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Јордан (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Кувајт (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Лебанон (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Либија (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Мароко (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Оман (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Катар (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "СаудијÑка Ðрабија (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Судан (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Сирија (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Ð¢ÑƒÐ½Ð¸Ñ (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Јемен (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Ðзербејџан (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "БелоруÑија (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "БугарÑка (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Бангладеш (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Индија/Бенгали (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "ФранцуÑка/бретањÑки (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "ВоÑна и Херцеговина (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Шпанија/каталонÑки (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Чешка република (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Велика Британија/велшки (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "ДанÑка (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "ÐуÑтрија (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Белгија/немачки (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "ШвајцарÑка/немачки (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Ðемачка (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "ЛукÑембург/немачки (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Грчка (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "ÐуÑтралија (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Боцвана (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Канада/енглеÑки (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Велика Британија (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Хонг Конг/енглеÑки (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "ИрÑка (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Индија/енглеÑки (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Ðови Зеланд (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Филипини (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Сингапур/енглеÑки (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "СÐД/енглеÑки (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Јужна Ðфрика/енглеÑки (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Зимбабве (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "ЕÑперанто (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Ðргентина (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Боливија (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Чиле (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Колумбија (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "КоÑтарика (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "ДоминиканÑка република (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Еквадор (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Шпанија (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Гватемала (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Ð¥Ð¾Ð½Ð´ÑƒÑ€Ð°Ñ (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "МекÑико (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Ðикарагва (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Панама (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Перу (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Порторико (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Парагвај (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "Ел Салвадор (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "СÐД/шпанÑки (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Уругвај (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Венецуела (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "ЕÑтонија (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Шпанија/баÑкијÑки (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Иран (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "ФинÑка/финÑки (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "ФарÑка оÑтрва (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Белгија/француÑки (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Канада/француÑки (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "ШвајцарÑка/француÑки (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "ФранцуÑка (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "ИрÑка/ирÑки (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Велика Британија/шкотÑки (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Шпанија/галицијÑки (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Велика Британија/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Индија/хинди (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "ХрватÑка (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "МађарÑка (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Јерменија (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Индонезија (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "ИÑланд (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "ШвајцарÑка/италијанÑки (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Италија (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Израел/хебрејÑки (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Јапан (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Грузија (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Гренланд (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Кореја (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Велика Британија/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Литванија (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Летонија (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Ðови Зеланд/маорÑки (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Македонија (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Индија/марати (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Малезија (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Малта (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Белгија/фламанÑки (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Холандија (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Ðорвешка/нинорÑк (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Ðорвешка/бокмал (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "ФранцуÑка/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "ПољÑка (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Бразил (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Португалија (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Румунија (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "РуÑија (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Украјина/руÑки (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Ðорвешка/Ñами (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Словачка (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Словенија (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Ðлбанија (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Србија и Црна Гора (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "ФинÑка/шведÑки (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "ШведÑка (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Индија/тамил (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Индија/телугу (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "ТаџикиÑтан (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Тајланд (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Еритреа (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Етиопија/тигриња (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Филипини/тагалог (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "ТурÑка (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "РуÑија/татарÑки (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Украјина (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "ПакиÑтан (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "УзбекиÑтан (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Вијетнам (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Белгија/валун (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "СÐД/јидиш (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Кина (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Хонг Конг/кинеÑки (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Сингапур/кинеÑки (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Тајван (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Текући локалитет: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Мени" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Мени Ñа опцијама" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Величина показатеља" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Величина падајућег показатеља" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Размак поакзатеља" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Размак око показатеља" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ðед" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Пон" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Уто" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Сре" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Чет" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Пет" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Суб" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Ðедеља" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Понедељак" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Уторак" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Среда" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Четвртак" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Петак" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Субота" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Јан" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Феб" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Мар" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Ðпр" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Мај" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Јун" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Јул" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Ðвг" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Сеп" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Окт" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Ðов" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Дец" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Јануар" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Фебруар" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Март" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Ðприл" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Мај" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Јун" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Јул" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "ÐвгуÑÑ‚" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Септембар" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Октобар" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Ðовембар" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Децембар" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ТÐЧÐО" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "Ðетачно" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Црна" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Плава" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Цијан-плава" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Зелена" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Магента" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Црвена" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Бела" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Жута" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Уједињени ÐрапÑки Емирати" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "ÐвганиÑтан, Ðвганци" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Ðлбанија, Лека" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Јерменија, Драме" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "ХоландÑки Ðнтили, гулдени" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Ðнгола, Кванце" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Ðргентина, пезоÑи" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "ÐуÑтралија, долари" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Ðруба, гулдени" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Ðзејрбејџан, манати" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "БоÑна и Херцеговина, конвертибилна марка" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "БарбадоÑ, долари" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Бангладеш, така" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "БугарÑка, леве" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Бахреин, динари" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Бурунди, франци" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Бермуда, долари" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Брунеј Дарушалам, долари" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Боливија, боливијаноÑи" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Бразил, бразилÑки реал" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Бахами, долари" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Бутан, нгултруми" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Боцвана, пуле" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "БелоруÑија, рубље" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Белизи, долари" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Канада, долари" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Конго/КиншаÑа, конгонÑки франци" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "ШвајцарÑка, франак" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Чиле, пезоÑи" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Кина, јуани ренминби" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Колумбија, пезоÑи" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "КоÑтарика, колони" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Куба, пезоÑи" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "ЗеленортÑка ОÑтрва, еÑкудоÑи" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Кипар, фунте" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Чешка Република, круне" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Ðибути, франак" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "ДанÑка, круне" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "ДоминиканÑка Република, пезоÑи" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Ðлжир , алжирÑки динари" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "ЕÑтонија, круне" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Египат, фунте" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Еритреја, накфе" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Етиопија, бири" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Земље европÑке уније, евро" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Фиџи, долари" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "ФокландÑка оÑтрва (МалвинаÑ), фунте" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Велика Британија, фунте" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Грузија, лари" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "ГвернÑиј, фунте" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Гана, ÑедиÑ" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Гибралтар, фунте" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Гамбија, далаÑи" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Гвинеја, франци" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Гватемала, квецале" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Гујана, долари" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Хонг Конг, долари" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "ХондураÑ, лемпире" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "ХрватÑка, куне" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Хаити, гурде" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "МађарÑка, форинте" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Индонезија, рупије" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Израел, нови шекели" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Човеково оÑтрво, фунте" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Индија, рупје" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Ирак, динар" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Иран, ријали" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "ИÑланд, круне" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "ÐерÑи, фунте" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Јамајка, долари" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Јордан, динари" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Јапан, јени" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Кенија, шилинг" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "КиргиÑтан, Ñоми" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Камбоџа, риле" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Комори, франак" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Северна Кореја, вони" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Јужна Кореја, вони" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Кувајт, динари" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "КајманÑка ОÑтрва, долари" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "КазахÑтан, тенге" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "ЛаоÑ, кипе" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Либан, фунте" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Шри Ланка, рупје" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Либерија, долари" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "ЛеÑото, малоти" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Литванија, литаје" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Летонија, лати" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Либија, динар" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Мароко, дирхаме" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Молдавија, леи" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "МадагаÑкар, малагаÑки франци" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Македонија, денари" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Мијанмар (Бурма), кјате" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Монголија, тугрике" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Макау, патаке" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Мауританија, оугије" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Малта, лире" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "МаурицијуÑ, рупје" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Малдиви (МалдивÑка оÑтрва), Руфија" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Малави, Кваче" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "МекÑико, пезоÑи" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Малезија, рингици" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Мозамбик, метикаје" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Ðамибија, долари" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Ðигерија, наире" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Ðикарагва, златне кордобе" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Ðорвешка, круне" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Ðепал, непалÑке рупје" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Ðови Зеланд, долари" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Оман, ријале" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Панама, балбое" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Перу, нове Ñоле" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Папуа Ðова Гвинеја, кине" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Филипини, пезоÑи" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "ПакиÑтан, рупје" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "ПољÑка, злоти" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Парагвај, гварани" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Катар, ријале" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Румунија, леје" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "РуÑија, рубље" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Руанда, руандÑки франци" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "СаудијÑка Ðрабија, ријале" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "СоломонÑка оÑтрва, долари" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Сејшели, рупје" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Судан, динари" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "ШведÑка, круне" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Сингапур, долари" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Св. Хелена, фунте" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Словенија, толари" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Словачка, круне" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Сиера Леоне, леоне" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Сомалија, шилинзи" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Себорга, Луиђини" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Сурине, гулдени" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Сао Томе и Принципе, добре" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "Ел Салвадор, колоне" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Сирија, фунте" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Свазиленд, емалангени" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Тајланд, бати" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "ТаџикиÑтан, рубље" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "ТуркмениÑтан, манати" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "ТуниÑ, динари" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Тонга, панге" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "ТурÑка, лире" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Тринидад и Тобаго, долари" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Тувалу, тувалÑки долари" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Тајван, нови долари" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Танзанија, шилинзи" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Украјина, хривне" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Уганда, шилинзи" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Ðмерика, долари" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Уругвај, пезоÑи" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "УзбекиÑтан, Ñуме" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Венецуела, боливаре" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Вијетнам, донге" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Вануату, вату" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Самоа, тале" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Комунауте ФинанÑијере Ðфрикане BEAC, ФранкÑ" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Сребро, унце" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Злато, унце" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "ИÑточнокарипÑки долари" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Ðарочита права повлачења Међународног монетарног фонда (ММФ)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Francs" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Паладијум, унце" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Платина, унце" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Јемен, ријале" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Србија и Црна Гора, динари" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Јужна Ðфрика, ранди" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Замбија, кваче" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Зимбабве, долари" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ðишта" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Пун" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "ÐутоматÑко" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ништа" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "квадрат" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "ромб" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "троугао доле" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "троугао горе" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "троугао деÑно" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "троугао лево" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "круг" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "крÑÑ‚" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "звездица" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "трака" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "полутрака" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "лептир" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "чаÑовник" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Ñиво" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Ñиво" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Ñиво" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Ñиво" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Ñиво" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Хоризонтална пруга" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "УÑправна пруга" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Обрнута дијагонална пруга" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Дијагонална пруга" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Дијагонални нишан" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Дебели дијагонални нишан" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Танка хоризонтална пруга" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Танка уÑправна пруга" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Танка обрнута дијагонална пруга" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Танка дијагонална пруга" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Танки хоризонтални нишан" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Танки дијагонални нишан" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Боја иÑцртавања" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Мали кругови" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Полу кругови" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Велики кругови" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Цигле" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Ознаке" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "ВредноÑти" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Грешка при обради линије" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "ТракаКолона" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Колико Ñе траке/колоне преклапају као поÑтотак ширине" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "Пре_клапање:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Размак међу групама као поÑтотак ширине траке/колоне" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Празнина:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "ЦртанаЛинија" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "ЦртанаПоврш" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3Д ÑуÑедне водоравне линије" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3Д ÑуÑедне уÑправне колоне" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3Д водоравне линије Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3Д уÑправне колоне Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D наређане траке" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D наређане колоне" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "СуÑедне водоравне линије" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "СуÑедне уÑправне колоне" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"СуÑедне водоравне 3D траке групиÑане према главним и Ñпоредним категоријама." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"СуÑедне водоравне траке групиÑане према главним и Ñпоредним категоријама." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"СуÑедне уÑправне 3D колоне групиÑане према главним и Ñпоредним категоријама." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"СуÑедне уÑправне колоне групиÑане према главним и Ñпоредним категоријама." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "ОблаÑÑ‚" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Цртање облаÑти." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "ОблаÑти" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Трака" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Колона" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Линија" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Цртање линије." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Линије" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Споредне категорије наређене према проценту укупног Ñпоредног, у водоравним " +"3D тракама, групиÑане према главној категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Споредне категорије наређене према проценту укупног Ñпоредног, у уÑправним " +"3D тракама, групиÑане према главној категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Споредне категорије наређене према проценту укупног Ñпоредног, у водоравним " +"тракама, групиÑане према главној категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Споредне категорије наређене према проценту укупног Ñпоредног, у уÑправним " +"тракама, групиÑане према главној категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Споредне категорије наређене у водоравним 3D тракама, групиÑане према " +"главној категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Споредне категорије наређене у водоравним тракама, групиÑане према главној " +"категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Споредне категорије наређене у уÑправним 3D тракама, групиÑане према главној " +"категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Споредне категорије наређене у уÑправним тракама, групиÑане према главној " +"категорији." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "ОблаÑти Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Траке Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Колоне Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Линије Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "ОблаÑÑ‚ за цртање процената." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Линија за цртање процената." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Ðаређане облаÑти" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Ðаређане траке" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Ðаређане колоне" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Ðаређане линије" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Цртање наређаних облаÑти." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Цртање наређаних линија." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Ðеозначене линије" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Ðеозначене линије Ñа процентима" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Ðеозначене наређане линије" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "СиÑтем за иÑцртавање облаÑти" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "СиÑтем за иÑцртавање трака/колона" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Подразумеване врÑте 1,5D иÑцртавања" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "СиÑтем за иÑцртавање линија" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Графикони помоћу линија, облаÑти, трака и колона" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "ИÑцртај" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Погрешна лозинка" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "ИÑцртај" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "ИÑцртај" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "ИÑцртај" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "СиÑтем за иÑцртавање трака/колона" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Мењање боје језичка" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Подразумеване врÑте 1,5D иÑцртавања" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "ЦртанаПита" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "ЦртаниПрÑтен" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Степени у Ñупротном Ñмеру од казаљке на чаÑовнику од 3 чаÑа" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Парчад почињу на:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"Подразумевана вредноÑÑ‚ за коју је Ñвако парче одвојено од Ñредишта мерено у " +"процентима полупречника пите" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "Одв_ајање делова:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Мењај боје по парчету:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "Ñтепени" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +#, fuzzy +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"Подразумевана вредноÑÑ‚ за коју је Ñвако парче одвојено од Ñредишта мерено у " +"процентима полупречника пите" + +# #-#-#-#-# balsa.po (Balsa 2) #-#-#-#-# +# Ðова врÑта обележја? +# #-#-#-#-# galeon.po (galeon 1.3) #-#-#-#-# +# Ðова врÑта обележја? +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Раздвојник:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Величина _Ñредишта:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3Д пита" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Подељена 3Д пита" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Више пита" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Проценат Ñваког учеÑника приказан у прÑтену за Ñваки ред Ñа издвојеним " +"ивицама поÑледњег прÑтена." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Проценат Ñваког учеÑника приказан у прÑтену за Ñваки ред." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Проценат Ñваког учеÑника у 3Д пити." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Проценат Ñваког учеÑника Ñа издвојеним 3Д ивицама." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Проценат Ñваког учеÑника Ñа издвојеним ивицама." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Проценат Ñваког учеÑника." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Пита" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "ПрÑтен" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Подели питу" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Подели прÑтен" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Подразумеване врÑте „пите“" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "СиÑтем за иÑцртавање пита" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "СиÑтем за иÑцртавање прÑтена" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "ТракаКолона" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "ЦртанаПоврш" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Цртање облаÑти." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Стандардна грешка" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Цртање наређаних облаÑти." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Подразумеване врÑте 1,5D иÑцртавања" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "СиÑтем за иÑцртавање облаÑти" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "СиÑтем за иÑцртавање прÑтена" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Цели бројеви" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Број, збир" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Цртање облаÑти." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Извор" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "СиÑтем за иÑцртавање прÑтена" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Пита графици" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Пите" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% у одноÑу на _нормалну величину" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Параметри" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Извор" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +#, fuzzy +msgid "_Vary colors by bubble" +msgstr "_Мењај боје по парчету:" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "ЦртежXY" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Мехур" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Мехур" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Грешка при обради линије" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Грешка при обради линије" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Интерполирај између вишедимензионих тачака." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Линеарно интерполирај између вишедимензионих тачака, Ñа обележивачима у " +"Ñвакој тачки." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Линеарно интерполирај између вишедимензионих тачака." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Обележивачи у Ñвакој тачки." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "" +"Линеарно интерполирај између вишедимензионих тачака, Ñа обележивачима у " +"Ñвакој тачки." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "ИÑцртај X, Y и величину мехура." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY линије" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY тачке" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY линије" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "СиÑтем за иÑцртавање разбацаних 2Д графикона" + +#: plugins/plot_xy/plugin.xml.in.h:3 +#, fuzzy +msgid "Bubble plotting engine" +msgstr "СиÑтем за иÑцртавање пита" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Укључене врÑте разбацаног иÑцртавања" diff --git a/lib/goffice-0.0.4/po/sr@Latn.po b/lib/goffice-0.0.4/po/sr@Latn.po new file mode 100644 index 0000000000..ba609999c8 --- /dev/null +++ b/lib/goffice-0.0.4/po/sr@Latn.po @@ -0,0 +1,4253 @@ +# Serbian translation of gnumeric +# Courtesy of Prevod.org team (http://www.prevod.org/) -- 2003. +# +# This file is distributed under the same license as the gnumeric package. +# +# Maintainer: Slobodan Sredojević +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-12-08 01:14+0100\n" +"Last-Translator: Slobodan Sredojević \n" +"Language-Team: Serbian (sr) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"ÄŒuvanje preko starih datoteka ove vrste je onemogućeno zbog sigurnosti." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Možete iskljuÄiti ovu zaÅ¡titu ureÄ‘ivanjem odgovarajuće plugin.xml datoteke." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Cilj" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Datoteka sadrži opis dodatka sa netaÄnom identifikacijom (%s), oÄekivalo se %" +"s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Ne mogu da proÄitam opis dodatka iz datoteke." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Nepoznat naziv" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Nepodržana vrsta kod sistema za uÄitavanje „%s“." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "GreÅ¡ka prilikom pripremanja sistema za uÄitavanje „%s“" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "GreÅ¡ka prilikom Äitanja informacija o servisu #%d" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ne mogu proÄitati datoteku sa opisom dodatka („%s“)." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Datoteka „%s“ nije ispravna datoteka sa opisom dodatka." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "GreÅ¡ka pri Äitanju servisa za dodatak sa ID=„%s“." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "ID dodatka sadrži nedozvoljene znake (%s)" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Nepoznato ime dodatka." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Nije definisan sistem za uÄitavanje ili je ID sistema pogreÅ¡na za dodatak sa " +"ID=„%s“." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Dodatak nema identifikaciju." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" +"GreÅ¡ka u postavljanju poÄetnih vrednosti za sistem za uÄitavanje dodatka(„%" +"s“)." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Prepoznate su kružne zavisnosti dodataka." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ne mogu pokrenuti dodatak sa identifikacijom id=„%s“." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ne mogu pronaći dodatak sa identifikacijom id=„%s“." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "GreÅ¡ka pri pokretanju zavisnosti dodatka." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "GreÅ¡ka prilikom pokretanja servisa dodatka #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "GreÅ¡ka prilikom zaustavljanja servisa dodatka #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ne mogu uÄitati sistem za uÄitavanje dodataka." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ne mogu da uÄitam dodatak sa identifikacijom id=„%s“." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "GreÅ¡ka prilikom uÄitavanja zavisnosti dodatka." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"DoÅ¡lo je do greÅ¡aka prilikom Äitanja informacija o dodatku iz datoteke „%s“." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ne mogu da pokrenem dodatak „%s“ (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ne mogu prekinuti rad dodatka „%s“ (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "GreÅ¡ka prilikom Äitanja informacija o dostupnim dodacima." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"GreÅ¡ka prilikom zaustavljanja dodataka koji se viÅ¡e ne nalaze na disku." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Sledeći dodaci se viÅ¡e ne nalaze na disku ali su joÅ¡ uvek pokrenuti:\n" +"%s.\n" +"Trebalo bi da sada ponovo pokrenete Gnumerik." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "GreÅ¡ke prilikom pokretanja dodataka." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "GreÅ¡ke prilikom pokretanja sistema dodataka" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Sistem za uÄitavanje ne podržava servis „%s“." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Ime datoteke modula nije dato." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ne mogu da otvorim datoteku sa modulom „%s“." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Datoteka sa modulom „%s“ ima neispravan format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Datoteka ne sadrži („plugin_file_struct“ simbol)." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Datoteka ima pogreÅ¡an magiÄni broj." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Verzija dodatka „%s“ je razliÄita od programa „%s“." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Ovaj sistem ne podržava dinamiÄko uÄitavanje modula." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ne mogu da zatvorim datoteku sa modulom „%s“." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Datoteka ne sadrži „%s“ funkciju." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modul ne sadrži „%s“ funkciju." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "GreÅ¡ka pri uÄitavanju servisa dodataka." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "" +"Funkcija unutar dodatka koja postavlja poÄetne vrednosti je vratila greÅ¡ku." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Funkcija unutar dodatka koja Äisti je vratila greÅ¡ku." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "OpÅ¡te" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Sistem za otvaranje nema opis" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Sistem za otvaranje - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "GreÅ¡ka prilikom Äitanja datoteke." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Sistem za Äuvanje nema opis" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Sistem za Äuvanje - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "GreÅ¡ka prilikom Äuvanja datoteke." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Sistem za uÄitavanje dodataka" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "Sistem za uÄitavanje GObjekata" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Ne postoji „vrsta“ atribut za element „servis“." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Nepoznata vrsta servisa: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "GreÅ¡ka u Äitanju opisa servisa." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Moramo uÄitati servis pre njegovog pokretanja (PLUGIN_ALWAYS_LOAD je " +"postavljen) ali uÄitavanje nije uspelo." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formule" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Uvuci:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Traži:" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Razmak" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Poravnanje" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Znak za citiranje:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "VeliÄina problema" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskretan" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Diskretan" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "_Linearno" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "LogiÄke" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logaritamsko" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detalji" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatsko" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Kategorija:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "OgraniÄenja" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "_Minimalno" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_aksimalno" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "Gla_vne crtice" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "Sp_oredne crtice" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Krst" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Formatiranje" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Oznaka" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Mreža" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Mreža" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Glavne crtice:" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Linija" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Sporedne crtice:" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Linija" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "_Unutar" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "Sp_olja" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Visoko" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Unutar" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "O_brni" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_Nisko" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "Sp_olja" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "P_rikaži oznake" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "Vr_sta:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Legenda" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Naslov" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Mreža" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X osa" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y osa" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z osa" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Iscrtaj" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Visina" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Å irina" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Upozorenja na greÅ¡ku" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stl" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Uzorak" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Boja:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +#, fuzzy +msgid "Dis_play:" +msgstr "D_an" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Å irina linije:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Sa" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Grafik" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Grafikon" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Ime" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Korak 1 od 2: Izaberite tip grafikona" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Korak 2 od 2: Prilagodite grafikon" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Prilagodite grafikon" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Ubacivanj_e" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "Vrsta i_scrtavanja" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "Grafikoni Gnomove kancelarije" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "P_oredak" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Pravac pružanja" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Obrazac" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stl" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Prikaži\n" +"Uzorak" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Opis" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Tekst:" + +# Kako ovo moze biti jednina?????? — i nije množina +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Podaci" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Redovi" + +# steam engine je parna maÅ¡ina, a Å¡ta je ovo? +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Sistem za iscrtavanje" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Vrsta iscrtavanja" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Motiv grafika" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Uvuci:" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "Nizovi zn_akova" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "TaÄka" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Pismo" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +#, fuzzy +msgid "" +"2 Colors\n" +"Brightness" +msgstr "Osvetljenje" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "Ispuni" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "Linija" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "ObeleživaÄ" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Izdvojeno" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Boja:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Boja _izdvojenog:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Oblik:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "Ve_liÄina:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Stil:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "Vr_sta:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Pozadina:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "P_ravac:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Kraj:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "Boja za pop_unjavanje:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "Uklop_i:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Boja:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "Ob_razac:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "I_zaberi..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_VeliÄina:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "P_oÄni:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_svetlije" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_tamnije" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "Å¡tamparskih taÄaka" + +#: goffice/graph/gog-style-prefs.glade.h:31 +#, fuzzy +msgid "" +"stretched\n" +"wallpaper" +msgstr "razvuÄeno" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Podrazumevano" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Gupi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arapski" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "BaltiÄki" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Centralnoevropski" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kineski" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "ĆiriliÄni" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "GrÄki" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebrejski" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indijski" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japanski" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Korejski" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turski" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unikod" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vijetnamski" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Zapadnoevropski" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Ostalo" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arapski (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arapski (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arapski (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arapski (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arapski (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arapski (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arapski (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Jermenski (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "BaltiÄki (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "BaltiÄki (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "BaltiÄki (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltski (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Centralnoevropski (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Centralnoevropski (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Centralnoevropski (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Centralnoevropski (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Kineski pojednostavljeni (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Kineski pojednostavljeni (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Kineski pojednostavljeni (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Kineski pojednostavljeni (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Kineski pojednostavljeni (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Kineski Tradicionalni (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Kineski Tradicionalni (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Kineski Tradicionalni (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Hrvatski (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "ÄŒiriliÄni (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Ćirilica (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Ćirilica (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Ćirilica (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Ćirilica (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Ćirilica (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Ruski (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrajinski (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrajinski (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Engleski (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Gruzijski (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "GrÄki (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "GrÄki (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "GrÄki (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gudžarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmuki (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebrejski (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebrejski (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebrejski (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebrejski (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebrejski (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindu (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Islandski (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanski (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanski (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanski (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Korejski (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Korejski (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Korejski (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Korejski (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordijski (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumunski (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumunski (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Južnoevropski (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Tajlandski (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turski (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turski (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turski (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turski (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unikod (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unikod (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unikod (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unikod (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unikod (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unikod (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "KorisniÄki definisan" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vijetnamski (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vijetnamski (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vijetnamski (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vijetnamski (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Vizuelni Hebrejski (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Zapadni (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Zapadni (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Zapadni (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Zapadni (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Zapadni (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Lokalitet: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Smer pretvaranja" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Ova vrednost odluÄuje koji iconv test će se izvesti." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "crna" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "svetlobraon" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "zlatno braon" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "tamno zelena 2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "mornarsko plava" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "tamno plava" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "ljubiÄasta 2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "veoma tamno siva" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "tamnocrvena" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "crveno-narandžasta" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "zlatna" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "tamno zelena" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "tupo plava" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "plava" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "tupo ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "tamno siva" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "crvena" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "narandžasta" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "dreÄavo zelena" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "tupo zelena" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "tupo plava 2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "neboplava 2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "siva" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "svetlo narandžasta" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "žuta" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "zelena" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cijan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "svetloplava" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "crveno-ljubiÄasta" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "svetlosiva" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "roza" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "svetlo narandžasta" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "svetložuta" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "svetlozelena" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "svetlocijan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "svetloplava" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "svetloljubiÄasta" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "bela" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "ljubiÄasto-plava" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "tamnoljubiÄasta" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "neboplava" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "proizvoljno" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Boja po izboru:" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Senka" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Pravac pružanja" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ne može da otvori datoteku '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Datoteke" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Slika" + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Izaberite sliku" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "SaÄuvaj sve" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Vrsta d_atoteke:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Navedeni nastavak datoteke ne odgovara izabranoj vrsti datoteke. Da li " +"želite da koristite ovo ime pored svega?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"je ime direktorijuma" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Nemate ovlašćenje da Äuvate dokumente pod putanjom\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Radna sveska %s već postoji.\n" +"Želite li da prepiÅ¡ete preko nje?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normalno" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Masno" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Masno kurzivno" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kurziv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stil fonta:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Pregled" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "VeliÄina:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Broj" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "RaÄunovodstvo" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Datum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Vreme" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Procenat" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "Razlomljeno" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Inženjerski" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Tekst" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "NaroÄito" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Proizvoljno" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format negativnih brojeva" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Formati brojeva" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegorije:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Broj decimalnih _mesta:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Prikaži veliÄine u tradicionalnom stilu raÄunovoÄ‘a." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Prikaži ulazne vrednosti kao tekst bez obrade." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Prikaži novÄane vrednosti." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Prikaži datume i po želji vreme u danu." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Prikaži brojevne vrednosti sa utvrÄ‘enim brojem decimala." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Prikaži vreme u danu." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Prikaži vrednosti pomoću najbliže razlomljene vrednosti." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Prikaži vrednost kao procente." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Prikaži vrednosti pomoću uvećanja na-deseti." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "K_od _formatiranja:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Format negativnih brojeva:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Pregled:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_imbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Sam izaberi odgovarajuće formatiranje." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Navedite neposredno formatiranje u XL stilu" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Koristi razdvojnik hilj_ada" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Zapadnoevropski" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "IstoÄnoevropski" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Severna Amerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Južna i Centralna Amerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Azija" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australija" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "SAD/engleski (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Južna Afrika/Afrikans (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopija/Amharski (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Ujedinjeni Arapski Emirati (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrein (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Alžir (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egipat (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Indija/Arapski (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordan (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuvajt (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Lebanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libija (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Maroko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Katar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudijska Arabija (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Sirija (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunis (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbejdžan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Belorusija (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bugarska (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "BangladeÅ¡ (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "Indija/Bengali (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Francuska/bretanjski (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Vosna i Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Å panija/katalonski (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "ÄŒeÅ¡ka republika (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Velika Britanija/velÅ¡ki (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danska (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Austrija (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgija/nemaÄki (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Å vajcarska/nemaÄki (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "NemaÄka (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luksemburg/nemaÄki (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "GrÄka (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australija (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Bocvana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/engleski (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Velika Britanija (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/engleski (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irska (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "Indija/engleski (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Novi Zeland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filipini (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapur/engleski (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "SAD/engleski (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Južna Afrika/engleski (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabve (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivija (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "ÄŒile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Kolumbija (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Kostarika (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikanska republika (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ekvador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Å panija (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Gvatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Meksiko (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nikaragva (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Portoriko (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paragvaj (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "SAD/Å¡panski (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Urugvaj (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venecuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estonija (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Å panija/baskijski (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finska/finski (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Farska ostrva (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgija/francuski (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/francuski (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Å vajcarska/francuski (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Francuska (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irska/irski (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Velika Britanija/Å¡kotski (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Å panija/galicijski (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Velika Britanija/Manx Gaelic (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "Indija/hindi (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Hrvatska (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "MaÄ‘arska (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Jermenija (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonezija (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Å vajcarska/italijanski (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italija (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Izrael/hebrejski (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja_JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Gruzija (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grenland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Koreja (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Velika Britanija/Cornish (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litvanija (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Letonija (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Novi Zeland/maorski (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedonija (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Indija/marati (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malezija (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgija/flamanski (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Holandija (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "NorveÅ¡ka/ninorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "NorveÅ¡ka/bokmal (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Francuska/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poljska (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazil (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugalija (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumunija (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Rusija (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukrajina/ruski (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "NorveÅ¡ka/sami (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "SlovaÄka (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenija (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albanija (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Srbija i Crna Gora (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finska/Å¡vedski (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Å vedska (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Indija/tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Indija/telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadžikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Tajland (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopija/tigrinja (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filipini/tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turska (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Rusija/tatarski (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukrajina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vijetnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgija/valun (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "SAD/jidiÅ¡ (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Kina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/kineski (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapur/kineski (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Tajvan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Tekući lokalitet: " + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Meni" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Meni sa opcijama" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "VeliÄina pokazatelja" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "VeliÄina padajućeg pokazatelja" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Razmak poakzatelja" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Razmak oko pokazatelja" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ned" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Pon" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Uto" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Sre" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*ÄŒet" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Pet" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Sub" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Nedelja" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Ponedeljak" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Utorak" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Sreda" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "ÄŒetvrtak" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Petak" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Subota" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Maj" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Avg" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Januar" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Februar" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mart" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "April" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Maj" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Jun" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Jul" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Avgust" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Septembar" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Oktobar" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Novembar" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Decembar" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TAÄŒNO" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "NetaÄno" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Crna" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Plava" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cijan-plava" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Zelena" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Crvena" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Bela" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Žuta" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Ujedinjeni Arapski Emirati" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Avganistan, Avganci" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albanija, Leka" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Jermenija, Drame" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Holandski Antili, guldeni" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, Kvance" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, pezosi" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australija, dolari" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, guldeni" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azejrbejdžan, manati" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosna i Hercegovina, konvertibilna marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dolari" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "BangladeÅ¡, taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bugarska, leve" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrein, dinari" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, franci" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dolari" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunej DaruÅ¡alam, dolari" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivija, bolivijanosi" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazil, brazilski real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahami, dolari" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Butan, ngultrumi" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Bocvana, pule" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belorusija, rublje" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belizi, dolari" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, dolari" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/KinÅ¡asa, kongonski franci" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Å vajcarska, franak" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "ÄŒile, pezosi" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Kina, juani renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolumbija, pezosi" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Kostarika, koloni" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, pezosi" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Zelenortska Ostrva, eskudosi" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Kipar, funte" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "ÄŒeÅ¡ka Republika, krune" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "DŽibuti, franak" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danska, krune" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikanska Republika, pezosi" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Alžir , alžirski dinari" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonija, krune" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egipat, funte" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritreja, nakfe" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopija, biri" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Zemlje evropske unije, evro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fidži, dolari" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Foklandska ostrva (Malvinas), funte" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Velika Britanija, funte" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Gruzija, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Gvernsij, funte" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Gana, sedis" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, funte" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambija, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Gvineja, franci" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Gvatemala, kvecale" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Gujana, dolari" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, dolari" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempire" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Hrvatska, kune" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gurde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "MaÄ‘arska, forinte" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonezija, rupije" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Izrael, novi Å¡ekeli" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "ÄŒovekovo ostrvo, funte" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Indija, rupje" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rijali" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, krune" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "DŽersi, funte" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamajka, dolari" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, dinari" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, jeni" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenija, Å¡iling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgistan, somi" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodža, rile" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komori, franak" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Severna Koreja, voni" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Južna Koreja, voni" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuvajt, dinari" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Kajmanska Ostrva, dolari" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazahstan, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kipe" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Liban, funte" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Å ri Lanka, rupje" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberija, dolari" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesoto, maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litvanija, litaje" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Letonija, lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libija, dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Maroko, dirhame" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavija, lei" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, malagaski franci" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonija, denari" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Mijanmar (Burma), kjate" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolija, tugrike" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Makau, patake" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritanija, ougije" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lire" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauricijus, rupje" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldivi (Maldivska ostrva), Rufija" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malavi, KvaÄe" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Meksiko, pezosi" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malezija, ringici" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambik, metikaje" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibija, dolari" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigerija, naire" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikaragva, zlatne kordobe" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "NorveÅ¡ka, krune" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, nepalske rupje" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Novi Zeland, dolari" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rijale" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboe" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, nove sole" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nova Gvineja, kine" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipini, pezosi" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupje" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poljska, zloti" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paragvaj, gvarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar, rijale" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumunija, leje" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusija, rublje" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, ruandski franci" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudijska Arabija, rijale" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomonska ostrva, dolari" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "SejÅ¡eli, rupje" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinari" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Å vedska, krune" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, dolari" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Sv. Helena, funte" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenija, tolari" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "SlovaÄka, krune" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Siera Leone, leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalija, Å¡ilinzi" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, LuiÄ‘ini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surine, guldeni" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome i Principe, dobre" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, kolone" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Sirija, funte" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Svazilend, emalangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tajland, bati" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadžikistan, rublje" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manati" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunis, dinari" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pange" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turska, lire" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad i Tobago, dolari" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, tuvalski dolari" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Tajvan, novi dolari" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzanija, Å¡ilinzi" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukrajina, hrivne" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Å¡ilinzi" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Amerika, dolari" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Urugvaj, pezosi" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, sume" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venecuela, bolivare" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vijetnam, donge" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tale" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Komunaute Finansijere Afrikane BEAC, Franks" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Srebro, unce" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Zlato, unce" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "IstoÄnokaripski dolari" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "NaroÄita prava povlaÄenja MeÄ‘unarodnog monetarnog fonda (MMF)" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, Francs" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Paladijum, unce" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique Francs" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platina, unce" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Jemen, rijale" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Srbija i Crna Gora, dinari" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Južna Afrika, randi" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambija, kvaÄe" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabve, dolari" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "NiÅ¡ta" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Pun" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Automatsko" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "niÅ¡ta" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "kvadrat" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "romb" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "trougao dole" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "trougao gore" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "trougao desno" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "trougao levo" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "krug" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "krst" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "zvezdica" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "traka" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "polutraka" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "leptir" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "Äasovnik" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% sivo" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% sivo" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% sivo" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% sivo" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% sivo" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Horizontalna pruga" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Uspravna pruga" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Obrnuta dijagonalna pruga" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Dijagonalna pruga" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Dijagonalni niÅ¡an" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Debeli dijagonalni niÅ¡an" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tanka horizontalna pruga" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tanka uspravna pruga" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tanka obrnuta dijagonalna pruga" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tanka dijagonalna pruga" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tanki horizontalni niÅ¡an" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tanki dijagonalni niÅ¡an" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Boja iscrtavanja" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Mali krugovi" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Polu krugovi" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Veliki krugovi" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Cigle" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Oznake" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Vrednosti" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "GreÅ¡ka pri obradi linije" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "TrakaKolona" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Koliko se trake/kolone preklapaju kao postotak Å¡irine" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "Pre_klapanje:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Razmak meÄ‘u grupama kao postotak Å¡irine trake/kolone" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Praznina:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "CrtanaLinija" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "CrtanaPovrÅ¡" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D susedne vodoravne linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D susedne uspravne kolone" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D vodoravne linije sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D uspravne kolone sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D nareÄ‘ane trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D nareÄ‘ane kolone" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Susedne vodoravne linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Susedne uspravne kolone" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Susedne vodoravne 3D trake grupisane prema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Susedne vodoravne trake grupisane prema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Susedne uspravne 3D kolone grupisane prema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" +"Susedne uspravne kolone grupisane prema glavnim i sporednim kategorijama." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Oblast" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Crtanje oblasti." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Oblasti" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Traka" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolona" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linija" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Crtanje linije." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene prema procentu ukupnog sporednog, u vodoravnim " +"3D trakama, grupisane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene prema procentu ukupnog sporednog, u uspravnim " +"3D trakama, grupisane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene prema procentu ukupnog sporednog, u vodoravnim " +"trakama, grupisane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene prema procentu ukupnog sporednog, u uspravnim " +"trakama, grupisane prema glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene u vodoravnim 3D trakama, grupisane prema " +"glavnoj kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene u vodoravnim trakama, grupisane prema glavnoj " +"kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene u uspravnim 3D trakama, grupisane prema glavnoj " +"kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Sporedne kategorije nareÄ‘ene u uspravnim trakama, grupisane prema glavnoj " +"kategoriji." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Oblasti sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Trake sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Kolone sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Linije sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Oblast za crtanje procenata." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Linija za crtanje procenata." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "NareÄ‘ane oblasti" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "NareÄ‘ane trake" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "NareÄ‘ane kolone" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "NareÄ‘ane linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Crtanje nareÄ‘anih oblasti." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Crtanje nareÄ‘anih linija." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "NeoznaÄene linije" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "NeoznaÄene linije sa procentima" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "NeoznaÄene nareÄ‘ane linije" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Sistem za iscrtavanje oblasti" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Sistem za iscrtavanje traka/kolona" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Podrazumevane vrste 1,5D iscrtavanja" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Sistem za iscrtavanje linija" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Grafikoni pomoću linija, oblasti, traka i kolona" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Iscrtaj" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "PogreÅ¡na lozinka" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Iscrtaj" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Iscrtaj" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Iscrtaj" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Sistem za iscrtavanje traka/kolona" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Menjanje boje jeziÄka" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Podrazumevane vrste 1,5D iscrtavanja" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "CrtanaPita" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "CrtaniPrsten" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Stepeni u suprotnom smeru od kazaljke na Äasovniku od 3 Äasa" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "ParÄad poÄinju na:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"Podrazumevana vrednost za koju je svako parÄe odvojeno od srediÅ¡ta mereno u " +"procentima polupreÄnika pite" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "Odv_ajanje delova:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "_Menjaj boje po parÄetu:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "stepeni" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +#, fuzzy +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"Podrazumevana vrednost za koju je svako parÄe odvojeno od srediÅ¡ta mereno u " +"procentima polupreÄnika pite" + +# #-#-#-#-# balsa.po (Balsa 2) #-#-#-#-# +# Nova vrsta obeležja? +# #-#-#-#-# galeon.po (galeon 1.3) #-#-#-#-# +# Nova vrsta obeležja? +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Razdvojnik:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "VeliÄina _srediÅ¡ta:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D pita" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "Podeljena 3D pita" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "ViÅ¡e pita" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Procenat svakog uÄesnika prikazan u prstenu za svaki red sa izdvojenim " +"ivicama poslednjeg prstena." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Procenat svakog uÄesnika prikazan u prstenu za svaki red." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Procenat svakog uÄesnika u 3D piti." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Procenat svakog uÄesnika sa izdvojenim 3D ivicama." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Procenat svakog uÄesnika sa izdvojenim ivicama." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Procenat svakog uÄesnika." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Pita" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Prsten" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Podeli pitu" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Podeli prsten" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Podrazumevane vrste „pite“" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Sistem za iscrtavanje pita" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Sistem za iscrtavanje prstena" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "TrakaKolona" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "CrtanaPovrÅ¡" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Crtanje oblasti." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Standardna greÅ¡ka" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Crtanje nareÄ‘anih oblasti." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Podrazumevane vrste 1,5D iscrtavanja" + +#: plugins/plot_radar/plugin.xml.in.h:3 +#, fuzzy +msgid "Radar Area plotting engine" +msgstr "Sistem za iscrtavanje oblasti" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Sistem za iscrtavanje prstena" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Celi brojevi" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Broj, zbir" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Crtanje oblasti." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Izvor" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Sistem za iscrtavanje prstena" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Pita grafici" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Pite" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% u odnosu na _normalnu veliÄinu" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Parametri" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Izvor" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +#, fuzzy +msgid "_Vary colors by bubble" +msgstr "_Menjaj boje po parÄetu:" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "CrtežXY" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Mehur" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Mehur" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "GreÅ¡ka pri obradi linije" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "GreÅ¡ka pri obradi linije" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpoliraj izmeÄ‘u viÅ¡edimenzionih taÄaka." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Linearno interpoliraj izmeÄ‘u viÅ¡edimenzionih taÄaka, sa obeleživaÄima u " +"svakoj taÄki." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Linearno interpoliraj izmeÄ‘u viÅ¡edimenzionih taÄaka." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "ObeleživaÄi u svakoj taÄki." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "" +"Linearno interpoliraj izmeÄ‘u viÅ¡edimenzionih taÄaka, sa obeleživaÄima u " +"svakoj taÄki." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Iscrtaj X, Y i veliÄinu mehura." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY linije" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY taÄke" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY linije" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "Sistem za iscrtavanje razbacanih 2D grafikona" + +#: plugins/plot_xy/plugin.xml.in.h:3 +#, fuzzy +msgid "Bubble plotting engine" +msgstr "Sistem za iscrtavanje pita" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "UkljuÄene vrste razbacanog iscrtavanja" diff --git a/lib/goffice-0.0.4/po/sv.po b/lib/goffice-0.0.4/po/sv.po new file mode 100644 index 0000000000..c121b0bb11 --- /dev/null +++ b/lib/goffice-0.0.4/po/sv.po @@ -0,0 +1,4219 @@ +# Swedish messages for Gnumeric. +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Richard Hult , 1999, 2000, 2001. +# Andreas Hyden , 2000. +# Christian Rose , 2000, 2001, 2002. +# Jörgen Tegnér , 2001. +# Jan Morén , 2002. +# +# $Id: sv.po,v 1.319 2005/02/12 17:53:42 jody Exp $ +# +# Regler: +# +# * ' översätts med \" +# +# * Svenskt decimaltecken är komma (,), inte punkt (.) som i originalet. +# Använd komma i översättningarna, för det gör Gnumeric. I +# funktionsuttryck Ã¥tskiljs parametrarna med semikolon (;), inte komma +# (,) som i originalet. Kom ihÃ¥g detta dÃ¥ exempel och +# funktionsanrop översätts. +# +# * [Red] i formatkoderna är en färgkod och ska INTE översättas. Inte nu +# heller. +# Sluta dÃ¥. +# Sluta brÃ¥ka. +# +# * Ta inte bort skräpsträngar frÃ¥n slutet (markerade med #~). +# +# * Skriv en kommentar över strängar du är osäker pÃ¥: # FIXME: kommentar. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-11-03 14:33+0900\n" +"Last-Translator: Jan Morén \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" +"Överskrivning av gamla filer av denna typ är inaktiverat av säkerhetsskäl." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Du kan stänga av denna säkerhetsdetalj genom att redigera lämplig plugin.xml-" +"fil." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Objektiv" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Filen innehÃ¥ller insticksmodulinformation med felaktigt id (%s), %s " +"förväntades." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Kan inte läsa insticksmodulinformation frÃ¥n fil." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Okänt namn" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Inläsartypen \"%s\" stöds inte." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Fel vid förberedande av inläsare \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Fel vid läsning av information för tjänst nummer %d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Kan inte läsa infofilen frÃ¥n insticksmodul (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Filen \"%s\" är inte en giltig infofil frÃ¥n insticksmodul." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Fel vid läsning av tjänster för insticksmodulen med id=\"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Insticksmodul-id innehÃ¥ller otillÃ¥tna tecken (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Okänt namn pÃ¥ insticksmodul." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Ingen inläsare är angiven eller inläsnings-id felaktigt för insticksmodulen " +"med id=\"%s\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Insticksmodulen har inget id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Fel vid initiering av insticksmodulinläsare (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Fann cykliska beroenden mellan insticksmoduler." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Kunde inte aktivera insticksmodulen med id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Kunde inte hitta insticksmodulen med id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Fel vid aktivering av insticksmodulberoenden." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Fel vid aktivering av insticksmodultjänst %d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Fel vid inaktivering av insticksmodultjänst %d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Kan inte läsa in insticksmodulinläsare." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Kunde inte läsa in insticksmodulen med id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Fel vid inläsning av insticksmodulberoenden." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"Fel inträffade vid läsning av insticksmodulinformation frÃ¥n filen \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Kunde inte aktivera insticksmodulen \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Kunde inte inaktivera insticksmodulen \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Fel vid läsning av information om tillgängliga insticksmoduler." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "" +"Fel vid inaktivering av insticksmoduler som inte längre finns pÃ¥ hÃ¥rddisken." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Följande insticksmoduler finns inte längre pÃ¥ hÃ¥rddisken men är fortfarande " +"aktiva:\n" +"%s.\n" +"Du borde starta om Gnumeric nu." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Fel vid aktivering av insticksmoduler." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Fel vid initiering av insticksmodulsystem." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "Inläsare har ingen metod set_attributes.\n" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "Inläsare har ingen metod load_base.\n" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Tjänsten \"%s\" stöds inte av inläsaren." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Modulfilnamnet har inte angivits." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Kan inte öppna modulfilen \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Modulfilen \"%s\" har ogiltigt format." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Filen innehÃ¥ller inte (symbolen \"plugin_file_struct\")." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Filen har ett felaktigt magiskt nummer." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Insticksmodulversionen \"%s\" skiljer sig frÃ¥n programmet \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Dynamisk modulinläsning stöds inte pÃ¥ detta system." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Kan inte stänga modulfilen \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Filen innehÃ¥ller inte funktionen \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modulen innehÃ¥ller inte funktionen \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Fel vid inläsning av insticksmodultjänst." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Initieringsfunktionen i insticksmodulen returnerade ett fel." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Uppstädningsfunktionen i insticksmodulen returnerade ett fel." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Allmän" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Filöppnaren har ingen beskrivning" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Filöppnare - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Fel vid läsning av fil." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Filspararen har ingen beskrivning" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Filsparare - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Fel vid sparande av fil." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Inläsare för insticksmoduler" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObjectinläsare" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "Inget \"typ\"-attribut pÃ¥ \"tjänst\"-element." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Okänd tjänstetyp: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Fel vid läsning av information för tjänst." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"Vi mÃ¥ste läsa in tjänst innan vi aktiverar den (PLUGIN_ALWAYS_LOAD är satt) " +"men inläsningen misslyckades." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "sidor" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Indrag:" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Sök efter" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Justering" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Citat_tecken:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problemstorlek" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Diskret" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "Diskret mappning" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "Linjär" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "Linjär mappning" + +#: goffice/graph/gog-axis.c:626 +msgid "Log" +msgstr "Log" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "Logaritmisk mappning" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "Detaljer" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Automatisk" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "Kategorier mellan _skalstreck" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "Kategorier mellan _etiketter" + +#: goffice/graph/gog-axis.c:1466 +msgid "_Cross at category #" +msgstr "_Kors vid kategori #" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +msgid "Bounds" +msgstr "Gränser" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "M_ax" + +# ZZZ +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "S_tora skalstreck" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "S_mÃ¥ skalstreck" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "_Kors" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Format" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Rubrik" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "FintRutnät" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "GrovtRutnät" + +# ZZZ +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "Stora skalstreck" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +msgid "Mapping" +msgstr "Mappning" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +msgid "Minor ticks" +msgstr "SmÃ¥ skalstreck" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "Position" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "I_nuti" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "U_tanför" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "_Hög" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "_Inuti" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "_Invertera axel" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "_LÃ¥g" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "_Utanför" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "_Visa etiketter" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "T_yp:" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "Förklaring" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "Titel" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "Rutnät" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "X-axel" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "Y-axel" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "Z-Axel" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "Cirkulär axel" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "Radiell axel" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "Graf" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "Höjd" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "B" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "Bredd" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "Ingen felstapel visad" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "Positiv felstapel visad" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "Negativ felstapel visad" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "Hel felstapel visad" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "Felkategori" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "Värden" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "Fä_rg:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "S_kärm:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" +"Ingen\n" +"Absolut\n" +"Relativ\n" +"Procent" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "_Linjebredd:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "_Bredd:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "Graf" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "Diagram" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Namn" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "Steg 1 av 2: Välj typ av graf" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "Steg 2 av 2: Anpassa graf" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "Anpassa graf" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Infoga" + +#: goffice/graph/gog-guru.c:1239 +msgid "_Plot Type" +msgstr "_Plottyp" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME-office graf" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "Flytta _framÃ¥t" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "Flytta _överst" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "Flytta _bakÃ¥t" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "Flytta _underst" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "_Ordning" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Definition" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Mönster" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Stil" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Exempel" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Beskrivning" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "_Text:" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "Data" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "Serier" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "Grafmotor" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Plottyp" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "Diagramtema" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "Index:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "Inställningar" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Punkt" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d × %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Typsnitt" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Stil" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" +"2 färger\n" +"Ljusstyrka" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "fyll" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "rad" + +#: goffice/graph/gog-style-prefs.glade.h:5 +msgid "Marker" +msgstr "Markör" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "Kontur" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "F_ärg:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" +"Inget\n" +"Mönster\n" +"Färgskala\n" +"Bild" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "K_onturfärg:" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "_Form:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "S_torlek:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "St_il:" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "T_yp:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "_Bakgrund:" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "_Riktning:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "_Slut:" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "F_yllningsfärg:" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "_Anpassa till:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "_Förgrund:" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "_Mönster:" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "_Markera..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "_Storlek:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "_TillstÃ¥nd:" + +#: goffice/graph/gog-style-prefs.glade.h:28 +msgid "_brighter" +msgstr "_ljusare" + +#: goffice/graph/gog-style-prefs.glade.h:29 +msgid "_darker" +msgstr "_mörkare" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pkter" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" +"utsträckt\n" +"tapet" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Standard" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "Arabiska" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "Baltiska" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "Centraleuropeiska" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "Kinesiska" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "Kyrilliska" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "Grekiska" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "Hebreiska" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "Indiska" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "Japanska" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "Koreanska" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "Turkiska" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "Vietnamesiska" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "Västerländsk" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "Annan" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "Arabiska (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "Arabiska (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabiska (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "Arabiska (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "Arabiska (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "Arabiska (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "Arabiska (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "Armeniska (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltiska (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltiska (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "Baltiska (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "Keltiska (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "Centraleuropeiska (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "Centraleuropeiska (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "Centraleuropeiska (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "Centraleuropeiska (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "Kinesiska förenklad (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "Kinesiska förenklad (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "Kinesiska förenklad (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "Kinesiska förenklad (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "Kinesiska förenklad (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "Kinesiska traditionell (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "Kinesiska traditionell (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "Kinesiska traditionell (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "Croatiska (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "Kyrilliska (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Kyrilliska (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "Kyrilliska (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "Kyrilliska (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "Kyrilliska (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "Kyrilliska (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "Ryska (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "Ukrainska (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "Ukrainska (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "Engelska (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "Farsi (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "Georgiska (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "Grekiska (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "Grekiska (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "Grekiska (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "Gujarati (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "Gurmukhi (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "Hebreiska (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "Hebreiska (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "Hebreiska (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "Hebreiska (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "Hebreiska (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "Hindi (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "Isländska (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "Japanska (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanska (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "Japanska (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "Koreanska (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "Koreanska (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "Koreanska (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "Koreanska (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordiska (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "Rumänska (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "Rumänska (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "Sydeuropeiska (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "Thai (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "Turkiska (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "Turkiska (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "Turkiska (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "Turkiska (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "Unicode (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "Unicode (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "Unicode (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "Unicode (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "Egendefinierad" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "Vietnamesiska (TVCN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "Vietnamesiska (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "Vietnamesiska (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamesiska (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "Visuell Hebreiska (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "Västerländsk (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "Västerländsk (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "Västerländsk (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "Västerländsk (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "Västerländsk (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "Lokal: " + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "Konverteringsriktning" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "Det här värdet avgör vilket iconv-test som skall utföras." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "svart" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "ljusbrun" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "guldbrun" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "mörkgrön #2" + +#: goffice/gtk/go-color-palette.c:99 +msgid "navy" +msgstr "marinblÃ¥" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "mörkblÃ¥" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "lila #2" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "mycket mörk grÃ¥" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "mörkröd" + +#: goffice/gtk/go-color-palette.c:105 +msgid "red-orange" +msgstr "röd-orange" + +#: goffice/gtk/go-color-palette.c:106 +msgid "gold" +msgstr "guld" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "mörkgrön" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "blek blÃ¥" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +msgid "blue" +msgstr "blÃ¥" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "blek lila" + +#: goffice/gtk/go-color-palette.c:111 +msgid "dark gray" +msgstr "mörkgrÃ¥" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "röd" + +#: goffice/gtk/go-color-palette.c:114 +msgid "orange" +msgstr "orange" + +#: goffice/gtk/go-color-palette.c:115 +msgid "lime" +msgstr "limegrön" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "blek grön" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "blek blÃ¥ #2" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "himmelsblÃ¥ #2" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "lila" + +#: goffice/gtk/go-color-palette.c:120 +msgid "gray" +msgstr "grÃ¥" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +msgid "magenta" +msgstr "magenta" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "ljusorange" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +msgid "yellow" +msgstr "gul" + +#: goffice/gtk/go-color-palette.c:125 +msgid "green" +msgstr "grön" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +msgid "cyan" +msgstr "cyan" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "ljusblÃ¥" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "rödlila" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "ljusgrÃ¥" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +msgid "pink" +msgstr "rosa" + +#: goffice/gtk/go-color-palette.c:132 +msgid "light orange" +msgstr "ljusorange" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "ljusgul" + +#: goffice/gtk/go-color-palette.c:134 +msgid "light green" +msgstr "ljusgrön" + +#: goffice/gtk/go-color-palette.c:135 +msgid "light cyan" +msgstr "ljuscyan" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "ljusblÃ¥" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "ljuslila" + +#: goffice/gtk/go-color-palette.c:138 +msgid "white" +msgstr "vit" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "lilaaktig blÃ¥" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "mörklila" + +#: goffice/gtk/go-color-palette.c:149 +msgid "sky blue" +msgstr "himmelsblÃ¥" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "anpassad" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "Egen färg..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Skuggtyp" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "Orientering" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "Önskad bredd" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "Önskad höjd" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "Docka verktygsraden" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "Avdocka verktygsraden" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Kan inte öppna filen \"%s\"" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "Alla filer" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "Bilder" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "Välj en bild" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "Spara som" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "Filt_yp:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Den givna ändelsen passar inte den valda filtypen. Vill du använda detta " +"namn i alla fall?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"är ett katalognamn" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Du har inte rättigheter att spara till\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"En fil kallad %s finns redan i %s.\n" +"\n" +"Vill du skriva över den?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Fetstil" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Fet kursiv" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Kursiv" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "AaBbCcDdEe12345" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Stil:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Typsnitt:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Förhandsgranskning" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Storlek:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Tal" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "Valuta" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "Redovisning" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Datum" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Tid" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Procent" + +#: goffice/gtk/go-format-sel.c:81 +msgid "Fraction" +msgstr "BrÃ¥k" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "Vetenskaplig" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Text" + +#: goffice/gtk/go-format-sel.c:84 +msgid "Special" +msgstr "Special" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Anpassad" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Format för negativa tal" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Talformat" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "Ka_tegori:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Deci_maler:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "Visa värden i traditionell revisionsstil." + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "Visa och mata in värden utan nÃ¥gon tolkning." + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "Visa valutavärden." + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "Visa datum och, valfritt, tidpunkter." + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "Visa numeriska värden med ett fixt antal decimaler." + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "Visa tidpunkter." + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "Visa vären som närmaste rationella approximation." + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "Visa värden som procent." + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "Visa värden med tiopotensskalning." + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "Formatera k_od:" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "_Format för negativa tal:" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "Förhandsgranskning:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "S_ymbol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "Välj automatiskt ett lämpligt format." + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "Välj ett XL-typ format direkt" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Format:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Använd tusentalsseparator" + +#: goffice/gtk/go-locale-sel.c:68 +msgid "Western Europe" +msgstr "Centraleuropa" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "Östeuropa" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "Nordamerika" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "Syd- och Centralamerika" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "Asien" + +#: goffice/gtk/go-locale-sel.c:73 +msgid "Africa" +msgstr "Afrika" + +#: goffice/gtk/go-locale-sel.c:74 +msgid "Australia" +msgstr "Australien" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "Förenta Staterna/Engelska (C)" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Sydafrika Afrikaan (af_ZA)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "Etiopien/Amharic (am_ET)" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "Förenade Arabemiraten (ar_AE)" + +#: goffice/gtk/go-locale-sel.c:110 +msgid "Bahrain (ar_BH)" +msgstr "Bahrain (ar_BH)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "Algeriet (ar_DZ)" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "Egypten (ar_EG)" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "Indien/Arabiska (ar_IN)" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "Irak (ar_IQ)" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "Jordanien (ar_JO)" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "Kuwait (ar_KW)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "Libanon (ar_LB)" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "Libyen (ar_LY)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "Marocko (ar_MA)" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "Oman (ar_OM)" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "Qatar (ar_QA)" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudiarabien (ar_SA)" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "Sudan (ar_SD)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "Syrien (ar_SY)" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "Tunisien (ar_TN)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "Jemen (ar_YE)" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbajdzjan (az_AZ)" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "Vitryssland (be_BY)" + +#: goffice/gtk/go-locale-sel.c:129 +msgid "Bulgaria (bg_BG)" +msgstr "Bulgarien (bg_BG)" + +#: goffice/gtk/go-locale-sel.c:130 +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh (bn_BD)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "India/Bengaliska (bn_IN)" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "Frankrike/Bretagne (br_FR)" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosnien och Hercegovina (bs_BA)" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "Spanska/Katalanska (ca_ES)" + +#: goffice/gtk/go-locale-sel.c:135 +msgid "Czech Republic (cs_CZ)" +msgstr "Tjeckien (cs_CZ)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "Storbritannien/Walesiska (cy_GB)" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "Danmark (da_DK)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "Österrike (de_AT)" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "Belgien/Tyska (de_BE)" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "Schweiz/Tyska (de_CH)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "Tyskland (de_DE)" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "Luxemburg/Tyska (de_LU)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "Grekland (el_GR)" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "Australien (en_AU)" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "Botswana (en_BW)" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "Kanada/Engelska (en_CA)" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "Storbritannien (en_GB)" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "Hong Kong/Engelska (en_HK)" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "Irland (en_IE)" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "India/Engelska (en_IN)" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "Nya Zeeland (en_NZ)" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "Filippinerna (en_PH)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "Singapore/Engelska (en_SG)" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "Förenta Staterna/Engelska (en_US)" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "Sydafrika/Engelska (en_ZA)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "Zimbabwe (en_ZW)" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "Esperanto (eo_EO)" + +#: goffice/gtk/go-locale-sel.c:158 +msgid "Argentina (es_AR)" +msgstr "Argentina (es_AR)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "Bolivia (es_BO)" + +#: goffice/gtk/go-locale-sel.c:160 +msgid "Chile (es_CL)" +msgstr "Chile (es_CL)" + +#: goffice/gtk/go-locale-sel.c:161 +msgid "Colombia (es_CO)" +msgstr "Colombia (es_CO)" + +#: goffice/gtk/go-locale-sel.c:162 +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica (es_CR)" + +#: goffice/gtk/go-locale-sel.c:163 +msgid "Dominican Republic (es_DO)" +msgstr "Dominikanska republiken (es_DO)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "Ecuador (es_EC)" + +#: goffice/gtk/go-locale-sel.c:165 +msgid "Spain (es_ES)" +msgstr "Spanien (es_ES)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "Guatemala (es_GT)" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "Honduras (es_HN)" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "Mexico (es_MX)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "Nicaragua (es_NI)" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "Panama (es_PA)" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "Peru (es_PE)" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "Puerto Rico (es_PR)" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "Paraguay (es_PY)" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "El Salvador (es_SV)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "Förenta Staterna/Spanska (es_US)" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "Uruguay (es_UY)" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "Venezuela (es_VE)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "Estland (et_EE)" + +#: goffice/gtk/go-locale-sel.c:179 +msgid "Spain/Basque (eu_ES)" +msgstr "Spanien/Baskien (eu_ES)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "Iran (fa_IR)" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "Finland/Finska (fi_FI)" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "Färöarna (fo_FO)" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "Belgien/Franska (fr_BE)" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "Kanada/Franska (fr_CA)" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "Schweiz/Franska (fr_CH)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "Frankrike (fr_FR)" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "Irland/Gaeliska (ga_IE)" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "Storbritannien/Skotsk Gaeliska (gd_GB)" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "Spanska/Galiciska (gl_ES)" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "Storbritannien/Manx Gaeliska (gv_GB)" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "India/Hindi (hi_IN)" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "Kroatien (hr_HR)" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "Ungern (hu_HU)" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "Armeniska (hy_AM)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "Indonesien (id_ID)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "Island (is_IS)" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "(iso14651_t1)" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "Schweiz/Italienska (it_CH)" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "Italien (it_IT)" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "Israel/Hebreiska (iw_IL)" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "Japan (ja-JP)" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "Georgien (ka_GE)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "Grönland (kl_GL)" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "Korea (ko_KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "Storbritannien/Korniska (kw_GB)" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "Litauen (lt_LT)" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "Lettland (lv_LV)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "Nya Zeeland/Maori (mi_NZ)" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "Makedonien (mk_MK)" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "Indien/Marathi (mr_IN)" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "Malaysia (ms_MY)" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "Malta (mt_MT)" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "Belgien/Flamländska (nl_BE)" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "Nederländerna (nl_NL)" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "Norge/Nynorsk (nn_NO)" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "Norge/BokmÃ¥l (no_NO)" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "Frankrike/Occitan (oc_FR)" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "Poland (pl_PL)" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "Brazilien (pt_BR)" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "Portugal (pt_PT)" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "Rumänien (ro_RO)" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "Ryssland (ru_RU)" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "Ukraina/Ryska (ru_UA)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "Norge/Samiska (se_NO)" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "Slovakien (sk_SK)" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "Slovenien (sl_SI)" + +#: goffice/gtk/go-locale-sel.c:228 +msgid "Albania (sq_AL)" +msgstr "Albanien (sq_AL)" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "Jugoslavien (sr_YU)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "Finland/Svenska (sv_FI)" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "Sverige (sv_SE)" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "Indien/Tamil (ta_IN)" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "Indien/Telugu (te_IN)" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "Tadzjikistan (tg_TJ)" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "Thailand (th_TH)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "Eritrea (ti_ER)" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "Etiopien/Tigrinya (ti_ET)" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "Filippinerna/Tagalog (tl_PH)" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "Turkiet (tr_TR)" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "Ryssland/Tartar (tt_RU)" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "Ukraina (uk_UA)" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "Pakistan (ur_PK)" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan (uz_UZ)" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "Vietnam (vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "Belgien/Vallonska (wa_BE)" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "Förenta Staterna/Yiddish (yi_US)" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "Kina (zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "Hong Kong/Kinesiska (zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "Singapore/Kinesiska (zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "Taiwan (zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "Aktuell lokal:" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "Meny" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "Inställningsmenyn" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "Indikatorstorlek" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "Storlek pÃ¥ rullliste-indikatorn" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "Indikatorutfyllnad" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "Utfyllnad runt indikatorn" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*sön" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*mÃ¥n" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*tis" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*ons" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*tor" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*fre" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*lör" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "söndag" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "mÃ¥ndag" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "tisdag" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "onsdag" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "torsdag" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "fredag" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "lördag" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*jan" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*feb" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*apr" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*maj" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*jun" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*jul" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*aug" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*sep" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*okt" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*nov" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*dec" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "januari" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "februari" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "mars" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "april" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "maj" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "juni" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "juli" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "augusti" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "september" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "oktober" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "november" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "december" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "SANT" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSKT" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Svart" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "BlÃ¥" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Cyan" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Grön" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Magenta" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Röd" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Vit" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Gul" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "Förenade Arabemiraten, dirham" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albanien, lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenien, dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Nederländska Antillerna, antillergulden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina, peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australien, dollar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, arubagulden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbajdzjan, manat" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosnien och Hercegovina, konvertibla mark" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, dollar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgarien, lev" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, dinarer" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, franc" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei, dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, bolivianos" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brasilien, real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana, pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Vitryssland, rubel" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Demokratiska Republiken Kongo, Kongoleanska franc" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Schweiz, franc" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China, yuan renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, colón" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Kuba, peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Kap Verde, escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cypern, pund" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Tjeckien, koruna" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti, franc" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danmark, kroner" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominikanska republiken, peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algeriet, dinarer" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estland, kronor" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypten, pund" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritrea, nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etiopien, birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Europeiska unionen, euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, dollar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falklandsöarna, pund" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "Storbritannien, pund" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Georgien, lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, pund" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana, cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Gibraltar, pund" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia, dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Guinea, franc" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala, quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana, dollar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hongkong, dollar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Kroatien, kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, gourde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Ungern, forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesien, rupiah" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel, shekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, pund" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Indien, rupier" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, dinarer" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran, rial" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Island, kronor" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, pund" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica, dollar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan, dinarer" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan, yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, schilling" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kirgizistan, somer" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kambodja, riel" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komororerna, franc" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Nordkorea, won" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Sydkorea, won" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait, dinarer" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Caymanöarna, dollar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakstan, tenge" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, kip" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Libanon, pund" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka, rupier" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia, dollar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho, loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Litauen, litas" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Lettland, lats" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libyen, dinarer" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Marocko, dirham" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldavien, leu" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, franc" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonien, dinarer" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma), kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongoliet, tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macao, pataca" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauretanien, ouguiya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, lire" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius, rupier" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldiverna, rufiyaa" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi, kwacha" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexiko, peso" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia, ringgit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Moçambique, metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia, dollar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria, naira" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua, cordoba oro" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norge, kronor" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, rupier" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Nya Zeeland, dollar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman, rial" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, ny sol" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Nya Guinea, kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filippinerna, peso" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, rupier" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polen, zloty" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, guarani" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar, rial" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Rumänien, leu" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Ryssland, rubel" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda, franc" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudiarabien, riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Salomonöarna, dollar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychellerna, rupier" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, dinarer" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Sverige, kronor" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore, dollar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Saint Helena, pund" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenien, tolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakien, koruna" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone, leone" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia, shilling" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, gulden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "São Tomé och Principe, dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, colón" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syrien, pund" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, lilangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand, baht" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tadzjikistan, somoni" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Turkmenistan, manat" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisien, dinarer" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, pa'anga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkiet, lira" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad och Tobago, dollar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, dollar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan, nya dollar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania, shilling" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraina, hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, shilling" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Förenta staterna, dollar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, peso" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan, sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela, bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine BEAC, franc" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Silver, uns" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Guld, uns" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Östkaribiska dollar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "Internationella valutafonden (IMF) särskilda dragrätter" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine BCEAO, franc" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "Palladium, uns" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Comptoirs Francais du Pacifique franc" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platinum, uns" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, rial" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Jugoslavien, nya dinarer" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Sydafrika, rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia, kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe, dollar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ingen" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Helfylld" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "Streck" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "Prick" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "Streck prick" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "Streck prick prick" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, c-format +msgid "Automatic (%s)" +msgstr "Automatisk (%s)" + +#: goffice/utils/go-marker.c:220 +msgid "none" +msgstr "ingen" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "kvadrat" + +#: goffice/utils/go-marker.c:222 +msgid "diamond" +msgstr "romb" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "triangel nedÃ¥t" + +#: goffice/utils/go-marker.c:224 +msgid "triangle up" +msgstr "triangel uppÃ¥t" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "triangel höger" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "triangel vänster" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "cirkel" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "kors" + +#: goffice/utils/go-marker.c:230 +msgid "asterisk" +msgstr "stjärna" + +#: goffice/utils/go-marker.c:231 +msgid "bar" +msgstr "stolpe" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "halvstolpe" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "fjäril" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "timglas" + +#: goffice/utils/go-pattern.c:96 +#, c-format +msgid "75% Grey" +msgstr "75% grÃ¥" + +#: goffice/utils/go-pattern.c:97 +#, c-format +msgid "50% Grey" +msgstr "50% grÃ¥" + +#: goffice/utils/go-pattern.c:98 +#, c-format +msgid "25% Grey" +msgstr "25% grÃ¥" + +#: goffice/utils/go-pattern.c:99 +#, c-format +msgid "12.5% Grey" +msgstr "12,5% grÃ¥" + +#: goffice/utils/go-pattern.c:100 +#, c-format +msgid "6.25% Grey" +msgstr "6,25% grÃ¥" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "VÃ¥gräta ränder" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Lodräta ränder" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Omvända diagonala ränder" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Diagonala ränder" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Diagonala rutor" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Tjocka diagonala rutor" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "Tunna vÃ¥gräta ränder" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "Tunna lodräta ränder" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "Tunna omvända diagonala ränder" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "Tunna diagonala ränder" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Tunna diagonala rutor" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Tunna diagonala rutor" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Förgrund massiv" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "SmÃ¥ cirklar" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Halvcirklar" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Halmtak" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Stora cirklar" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Tegelstenar" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Rubriker" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Värden" + +#: plugins/plot_barcol/gog-1.5d.c:464 +msgid "Error bars" +msgstr "Felstaplar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "PlotStapKol" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "Hur mycket staplarna/kolumnerna ska överlappa i procent av deras vidd" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "_Överlappning:" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "Mellanrum mellan grupper i procent av staplarnas/kolumnernas vidd" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "_Mellanrum:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +msgid "PlotLine" +msgstr "GrafLinje" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +msgid "PlotArea" +msgstr "GrafArea" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D närliggande stolpar" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D närliggande kolumner" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D procentstolpar" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D procentkolumner" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D staplade stolpar" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D staplade kolumner" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "Närliggande stolpar" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "Närliggande kolumner" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" +"Närliggande horisontella 3D-stolpar grupperade i huvud- och delkategorier." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" +"Närliggande horisontella stolpar grupperade i huvud- och delkategorier." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" +"Närliggande vertikala 3D-stolpar grupperade i huvud- och delkategorier." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Närliggande vertikala stolpar grupperade i huvud- och delkategorier." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "OmrÃ¥de" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "Areagraf." + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +msgid "Areas" +msgstr "Areor" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Stolpe" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Kolumn" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Linje" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +msgid "Line plot." +msgstr "Linjegraf." + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +msgid "Lines" +msgstr "Linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Delkategorier staplade som procent av delsumman, i horisontella 3D-stolpar, " +"grupperade efter huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Delkategorier staplade som procent av delsumman, i vertikala 3D-stolpar, " +"grupperade efter huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Delkategorier staplade som procent av delsumman, i horisontella stolpar, " +"grupperade efter huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Delkategorier staplade som procent av delsumman, i vertikala kolumner, " +"grupperade efter huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" +"Delkategorier staplade i horisontella 3D-stolpar, grupperade efter " +"huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" +"Delkategorier staplade i horisontella stolpar, grupperade efter " +"huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" +"Delkategorier staplade i vertikala 3D-kolumner, grupperade efter " +"huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" +"Delkategorier staplade i vertikala kolumner, grupperade efter huvudkategori." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +msgid "Percentage Areas" +msgstr "Procentareor" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Procentstolpar" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Procentkolumner" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +msgid "Percentage Lines" +msgstr "Procentlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +msgid "Percentage area plot." +msgstr "Procentareagraf." + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +msgid "Percentage line plot." +msgstr "Procentlinjegraf." + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "Staplade areor" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Staplade stolpar" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Staplade kolumner" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "Staplade linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "Staplad areagraf." + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "Staplad linjegraf." + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +msgid "Unmarked Lines" +msgstr "Omarkerade linjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +msgid "Unmarked Percentage Lines" +msgstr "Omarkerade procentlinjer" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "Omarkerade staplade linjer" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "Cirkeldiagramsritmotor" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "Stapel/kolumn ritmotor" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "Grafritning : Stapel/Kolumn/Linje/Yta" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +msgid "Default 1.5d plot types" +msgstr "Standard 1.5d-graftyper" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "Linjediagramsritmotor" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "Linje, area, stapel och kolumngrafer" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Graf" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ogiltigt argument" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Graf" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Graf" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Graf" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Stapel/kolumn ritmotor" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Graf: Radiella grafer" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +msgid "Default surface plot types" +msgstr "Standard ytgraftyper" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "GrafCirkel" + +#: plugins/plot_pie/gog-pie.c:303 +msgid "PlotRing" +msgstr "GrafRing" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" +"%s punkt %d\n" +"Värde %g (%g)" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "Grader motsols frÃ¥n klockan tre" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "Segment _börjar vid:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" +"StandardavstÃ¥ndet som varje segment är flyttat frÃ¥n centrum mätt i procent " +"av diagrammets radie" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "_SegmentavstÃ¥nd:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "Ändra _färg per segment" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "grader" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" +"AvstÃ¥ndet som detta segment är flyttat frÃ¥n centrum mätt i procent av " +"diagrammets radie" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +msgid "_Separation:" +msgstr "_Avskiljare:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +msgid "Cen_ter size:" +msgstr "Mittenstorlek:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D cirkel" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D uppdelad cirkel" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" +"Huvudresultat som procentsatser med varje tÃ¥rtbit uppdelad i underordnade " +"cirklar." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Huvudresultat som procentsatser med varje tÃ¥rtbit uppdelad i underordnade " +"staplade stolpar." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "Multicirkel" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Multicirkel-stolpar" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" +"Procentsats för varje bidrag visad i en ring för varje serie med tÃ¥rtbitar " +"för den sista ringen isärtagna." + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "Procentsats för varje bidrag vasade i en ring för varje serie." + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "Procentsats för varje bidrag i 3D-cirkel." + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Procentsats för varje bidrag med uppdelade 3D-tÃ¥rtbitar." + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Procentsats för varje bidrag med uppdelade tÃ¥rtbitar." + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Procentsats för varje bidrag." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Cirkel" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "Ring" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Uppdelad cirkel" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +msgid "Split Ring" +msgstr "Uppdelad ring" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "Graf: cirkel/ring" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "Standard-cirkeltyper" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "Cirkel och ringgrafer" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "Cirkeldiagramsritmotor" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "Ringdiagramsritmotor" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "PlotRadar" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +msgid "PlotRadarArea" +msgstr "PlotRadarYta" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "Ytradar" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +msgid "Area radar plot." +msgstr "Radarareagraf." + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "Prickad radar" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "Radar" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "Radargraf med prickar." + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "Radargraf." + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "Graf: Radiella grafer" + +#: plugins/plot_radar/plugin.xml.in.h:2 +msgid "Default radar plot types" +msgstr "Standard radargraftyper" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "Ytradardiagramsritmotor" + +#: plugins/plot_radar/plugin.xml.in.h:4 +msgid "Radar plotting engine" +msgstr "Radardiagramsritmotor" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "Radiell/radargrafer" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +msgid "_Slices number:" +msgstr "_Antal snitt:" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "Konturgraf" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "X" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "Y" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "Z" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +msgid "Contour" +msgstr "Kontur" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +msgid "Contour plot." +msgstr "Konturgraf." + +#: plugins/plot_surface/plot-types.xml.in.h:3 +msgid "Surface" +msgstr "Yta" + +#: plugins/plot_surface/plugin.xml.in.h:1 +msgid "Contour plotting engine" +msgstr "Konturdiagramsritmotor" + +#: plugins/plot_surface/plugin.xml.in.h:3 +msgid "Surface Charts" +msgstr "Ytdiagram" + +#: plugins/plot_surface/plugin.xml.in.h:4 +msgid "Surface charts" +msgstr "Ytdiagram" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "% av normalstorlek" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "3_d" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +msgid "Dia_meter" +msgstr "Dia_meter" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "Visa _negativa värden" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "_Yta" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "_Bubblor skalade till" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "_Storlek representerad av:" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "_Ändra färg per bubbla" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "PlotXY" + +#: plugins/plot_xy/gog-xy.c:391 +msgid "PlotBubble" +msgstr "PlotBubbla" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bubbel" + +#: plugins/plot_xy/gog-xy.c:997 +msgid "Y Error bars" +msgstr "Y felstaplar" + +#: plugins/plot_xy/gog-xy.c:999 +msgid "X Error bars" +msgstr "X felstaplar" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Interpolera mellan multidimensionella punkter." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Interpolera linjärt mellan multidimensionella punkter, med markörer i varje " +"punkt." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Interpolera linjärt mellan multidimensionella punkter." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "Markörer i varje punkt." + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "Multidimensionella punkter, med cirkel i varje punkt." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "Plotta X, Y och bubbelstorlek." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "XY" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +msgid "XY Lines" +msgstr "XY-linjer" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +msgid "XY Points" +msgstr "XY-punkter" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "XY-linjer" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "2D-diagram" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "2D-spridningsgrafmotor" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "Bubbelritmotor" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "Graf: XY/sprid/bubbla" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "Standardtyper av spridningsgrafer" diff --git a/lib/goffice-0.0.4/po/tr.po b/lib/goffice-0.0.4/po/tr.po new file mode 100644 index 0000000000..38eb5de1e2 --- /dev/null +++ b/lib/goffice-0.0.4/po/tr.po @@ -0,0 +1,4416 @@ +# Turkish translations for gnumeric messages. +# Copyright (C) 2003 Free Software Foundation, Inc. +# Nilgün Belma Bugüner , 2001,..,2003 +# Finans Makrolarının çevirisi: +# Deniz AkkuÅŸ Kanca , 2001 +# İlk çeviri: +# Görkem Çetin , 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-02-17 15:28+0200\n" +"Last-Translator: Nilgün Belma Bugüner \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "Bu türün güvenlik için iptal edilen eski dosyalarına kaydediliyor." + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"İlgili eklenti.xml dosyasını düzenleyerek, bu emniyet özelliÄŸini " +"kapatabilirsiniz." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Nesnel" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "Dosya geçersiz kimlikli (%s) eklenti bilgileri içeriyor, %s olmalıydı." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Eklenti bilgileri dosyadan okunamıyor." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "İsmi bilinmiyor" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "\"%s\" yükleyici türü desteklenmiyor." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "\"%s\" yükleyicisini hazırlarken hata oluÅŸtu" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "#%d servis bilgisi okunurken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Eklenti bilgileri dosyası okunamıyor (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "\"%s\" geçerli bir eklenti bilgileri dosyası deÄŸil." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "\"%s\" kimlikli eklentinin servisleri okunurken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "Eklenti kimliÄŸi geçersiz karakterler içeriyor (%s)." + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Eklenti ismi bilinmiyor." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"id=\"%s\" kimlikli eklenti için yükleyici tanımlanmamış ya da yükleyici " +"kimliÄŸi yanlış." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Eklenti kimliÄŸi yok." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "gb '%s' ilklendirilemedi" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Döngüsel eklenti bağımlılıkları saptandı." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "id=\"%s\" kimlikli eklenti etkinleÅŸtirilemedi." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "id=\"%s\" kimlikli eklenti bulunamadı." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Eklenti bağımlılıkları etkinleÅŸtirilirken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Eklentilerin etkinleÅŸtirilmesinde hata #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Eklentilerin etkinleÅŸtirilmesinde hata #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Eklenti yükleyicisi yüklenemiyor." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "id=\"%s\" kimlikli eklenti yüklenemedi." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Eklenti bağımlılıkları yüklenirken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "\"%s\" dosyasından eklenti bilgileri okunurken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "\"%s\" eklentisi etkinleÅŸtirilemedi (Kimlik: %s)" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "\"%s\" eklentisi kaldırılamıyor (kimlik: %s)" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Mevcut eklentilerin bilgileri okunurken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Diskte bulunmayan eklentilerin etkinleÅŸtirilmesinde hata." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"AÅŸağıdaki eklentiler diskte yok ama hala etkin:\n" +"%s.\n" +"Gnumeric'i ÅŸimdi yeniden baÅŸlatmalısınız." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Eklentileri etkinleÅŸtirirken hata oluÅŸtu." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Eklenti sistemi baÅŸlatılırken hata oluÅŸtu." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Hizmet yükleyici tarafından desteklenmiyor." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Modül ismi verilmemiÅŸ." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "\"%s\" modül dosyası açılamadı." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "\"%s\" Modül dosyasının biçemi geçersiz." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Dosya \"plugin_file_struct\" simgesini içermiyor." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Dosya türü tanım kaydı hatalı." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Eklenti sürümü \"%s\" ile uygulama sürümü \"%s\" farklı" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Bu sistemde dinamik modül yükleme desteklenmiyor." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "'%s' modül dosyası kapatılamadı." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Dosya \"%s\" iÅŸlevini içermiyor." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Modül \"%s\" iÅŸlevini içermiyor." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Eklenti servisinin yüklenmesi sırasında hata" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Eklenti içindeki iÅŸlev baÅŸlatılırken hata ile döndü." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Eklenti içindeki iÅŸlev temizlenirken hata ile döndü." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Genel" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Dosya açıcı açıklama içermiyor" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Dosya açıcı - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Dosya okunurken hata." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Dosya kaydedici açıklama içermiyor" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Dosya kaydedici - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Dosya kaydedilirken hata." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Eklenti yükleyici" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Nesnel DeÄŸer" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "\"hizmet\" elemanında \"tür\" niteliÄŸi yok." + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Bilinmeyen hizmet türü: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Hizmet bilgisi okunurken hata oluÅŸtu." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" +"EtkinleÅŸtirilmeden önce hizmetin yüklenmesi gerekiyor ama yükleme yapılamadı " +"(PLUGIN_ALWAYS_LOAD etkin)." + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Formüller" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "_Girintile" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Aranacak metin" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "BoÅŸluk" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Hizalama" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Gruplama karakteri:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +#, fuzzy +msgid "Bullet Size" +msgstr "Problemin Büyüklüğü" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Soyut" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Soyut" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "Çizgi" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Mantıksal" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "Logaritmik" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "Ayrıntıları Gizle" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Otomatik" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Sınıf:" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Artalan" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "A_sgari" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Azami" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Kapa_t" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "_Biçemlendir" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Etiket" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Cuma" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Cuma" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Desen" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Önizleme" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Desen" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Önizleme" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "İçinde" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Dışçizgi" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "_Yükseklik..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "İçinde" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Ekle" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Satır" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Dışçizgi" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Etiketler" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Türü:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Azalan" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Etiket:" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Cuma" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "Çi_z" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "_Yükseklik..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "İ_le:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Hata Uyarısı" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Önizleme" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Örnek" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Renk:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "_Satır GeniÅŸliÄŸi" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "İ_le:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_Grafik..." + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "Grafik%d" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "İsim" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Adım 1/3: Grafik türü seçimi" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Adım 3/3: GrafiÄŸin özelleÅŸtirilmesi" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Sayfabaşını özelleÅŸtir" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Ekle" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Çizim Türü" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Kenarlık" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Yön" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Desen" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Önizleme" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "" +"Örnek\n" +"Göster" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Açıklama" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "Metin" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Veri" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "_Seri" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Çizim ismi" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "Çizim Türü" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "_Girintile" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Dizgeler" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Nokta" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dY x %dD" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Yazıtipi" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Tarz" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Önizleme" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Önizleme" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Desen" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Önizleme" + +#: goffice/graph/gog-style-prefs.glade.h:7 +#, fuzzy +msgid "Co_lor:" +msgstr "Renk:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Sınır çizgisi rengi" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Kapsam:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Boyut:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Tarz" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "_Türü:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Artalan" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Dizin" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "V_e " + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Dolgu rengi" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "_Sığdır:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Önalan" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Desen" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_Seç" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Boyut:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "_Sırala" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "S_aÄŸ" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "dizi" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "punto" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Öntanımlı" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "Grupla" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "%i Alanı" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "EÄŸik" + +#: goffice/gtk/go-charmap-sel.c:76 +#, fuzzy +msgid "Central European" +msgstr "Sayfanın ortası" + +#: goffice/gtk/go-charmap-sel.c:77 +#, fuzzy +msgid "Chinese" +msgstr "Chisq" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "YeÅŸil" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "Orta" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "Japonya, Yen" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Boolean" + +#: goffice/gtk/go-charmap-sel.c:84 +#, fuzzy +msgid "Turkish" +msgstr "Türkiye, Lira" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "Gö_ster" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "Bu çizelgenin ismini deÄŸiÅŸtirir" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "Batı" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "Ekim" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +#, fuzzy +msgid "Chinese Simplified (GB2312)" +msgstr "DüzeltilmiÅŸ Simpleks (GLPK 3.2)" + +#: goffice/gtk/go-charmap-sel.c:137 +#, fuzzy +msgid "Chinese Simplified (GBK)" +msgstr "DüzeltilmiÅŸ Simpleks (GLPK 3.2)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Altçizgileri kullan" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "Mantıksal" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Pearson Bağıntısı" + +#: goffice/gtk/go-charmap-sel.c:458 +#, fuzzy +msgid "This value determines which iconv test to perform." +msgstr "Bu deÄŸiÅŸken otomatik tamamlamanın geçerli olup olmadığını belirler." + +#: goffice/gtk/go-color-palette.c:95 +msgid "black" +msgstr "siyah" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "Pazartesi" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "aralık" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "Kalın" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Göze DeÄŸeri" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "Mavi" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "dizi" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "kırmızı" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "aralık" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "saat" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "Dizi" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "Mor" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "Sarı" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "YeÅŸil" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "Turkuaz" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "URL" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "SaÄŸa yanaÅŸtır" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "SaÄŸa yanaÅŸtır" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "SaÄŸa yanaÅŸtır" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "Beyaz" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "DeÄŸeriyle" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "Özel" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Sayfaaltını özelleÅŸtir" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Gölgeleme" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Yön" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +msgid "Un dock the toolbar" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "'%s' dosyası açılamadı" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "_Dosya" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "_İmge..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Düzenlenen gözenin bulunduÄŸu sütun seçilir" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Tümünü Kaydet" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "_Dosya:" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" +"Verilen dosya uzantısı seçilen dosya türü ile eÅŸleÅŸmiyor. Bu isim yine de " +"kullanılsın mı?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"bir dizin ismi" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"%s\n" +"dosyasını kaydetme izniniz yok" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"%s defteri zaten var.\n" +"Üzerine yazılsın mı?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Normal" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Kalın" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Kalın eÄŸik" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "EÄŸik" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Yazıtipi tarzı:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Yazıtipi:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Önizleme" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Boyut:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Sayı" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "_Para birimi" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "_Hesaplamalar" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Tarih" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Zaman" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Yüzde" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "_Kesir" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "_Bilimsel" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Metin" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "Ö_zel" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Özel" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Negatif Sayı Biçemi" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Sayı Biçemleri" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Sınıf:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "_Ondalık haneler:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "Avrupa para birimi" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "_Sınırları Göster" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "DeÄŸeri girildiÄŸi gibi gösterir" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Biçem:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Negatif Sayı Biçemi" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "Önizleme" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Sem_bol:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Biçem:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "_Binler ayracı Kullan" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "Batı" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "Sayfanın ortası" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "%i Alanı" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "Avustralya, Dolar" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Güney Afrika, Rand" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +#, fuzzy +msgid "United Arab Emirates (ar_AE)" +msgstr "BirleÅŸik Arap Emirlikleri, Dirhem" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Bahreyn, Dinar" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "Ürdün, Dinar" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "Kuveyt, Dinar" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "Libya, Dinar" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "Suudi Arabistan, Riyal" + +#: goffice/gtk/go-locale-sel.c:123 +#, fuzzy +msgid "Sudan (ar_SD)" +msgstr "Sudan, Dinar" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "Tunus, Dinar" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +#, fuzzy +msgid "Azerbaijan (az_AZ)" +msgstr "Azerbaycan, Manat" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Beyaz Rusya, Ruble" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaristan, Leva" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "BangladeÅŸ, Taka" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +#, fuzzy +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "Bosna-Hersek, Marka" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "Çek Cumhuriyeti, Kron" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +#, fuzzy +msgid "Denmark (da_DK)" +msgstr "Danimarka, Kuron" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +#, fuzzy +msgid "Switzerland/German (de_CH)" +msgstr "İsviçre, Frank" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +#, fuzzy +msgid "Luxembourg/German (de_LU)" +msgstr "Lüksemburg frangı" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "Yeni Zellanda, Dolar" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Filipinler, Pezo" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "Güney Afrika, Rand" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Arjantin, Pezo" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Åžili, Pezo" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Kolombiya, Peso" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Kostarika, Kolon" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Dominik Cumhuriyeti, Pezo" + +#: goffice/gtk/go-locale-sel.c:164 +#, fuzzy +msgid "Ecuador (es_EC)" +msgstr "Ekvator sukresi" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Örnekleme (%s)" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "Guatemela, Kuetzal" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "Honduras, Lempira" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "Meksika, Pezo" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "El Salvador, Kolon" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Uruguay, Pezo" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "Venezüella, Bolivar" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Örnekleme (%s)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +#, fuzzy +msgid "Switzerland/French (fr_CH)" +msgstr "İsviçre, Frank" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "Endonezya, Rupya" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +#, fuzzy +msgid "Georgia (ka_GE)" +msgstr "Gürcistan, Lari" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +#, fuzzy +msgid "Lithuania (lt_LT)" +msgstr "Liyvanya, Lita" + +#: goffice/gtk/go-locale-sel.c:208 +#, fuzzy +msgid "Latvia (lv_LV)" +msgstr "Latvia, Lati" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +#, fuzzy +msgid "The Netherlands (nl_NL)" +msgstr "Hollanda guldeni" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "Slovakya, Kron" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "Slovenya, Dolar" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Arnavutluk, Lek" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "Yugoslavya, Dinar" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "Tacikistan, Ruble" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "Tayland, Bat" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "Pakistan, Ruble" + +#: goffice/gtk/go-locale-sel.c:243 +#, fuzzy +msgid "Uzbekistan (uz_UZ)" +msgstr "Özbekistan, Sum" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Åžimdiki DeÄŸer:" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "Ortalama" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "İç adımlama" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Paz" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Pzt" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "Sal" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*ÇrÅŸ" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*PrÅŸ" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Cum" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Cts" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Pazar" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Pazartesi" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Salı" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "ÇarÅŸamba" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "PerÅŸembe" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Cuma" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Cumartesi" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Oca" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Åžub" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Mar" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Nis" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*May" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Haz" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Tem" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*AÄŸu" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Eyl" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Eki" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Kas" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Ara" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Ocak" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Åžubat" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Mart" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Nisan" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Mayıs" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Haziran" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Temmuz" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "AÄŸustos" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Eylül" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Ekim" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Kasım" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Aralık" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "DOÄžRU" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "YANLIÅž" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Siyah" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Mavi" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Turkuaz" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "YeÅŸil" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Mor" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Kırmızı" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Beyaz" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Sarı" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "BirleÅŸik Arap Emirlikleri, Dirhem" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afganistan, Afgani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Arnavutluk, Lek" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Ermenistan, Drahmi" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "Hollanda Antilleri, Gulden" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "Angola, kvanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Arjantin, Pezo" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Avustralya, Dolar" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Aruba, Gulden" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "Azerbaycan, Manat" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "Bosna-Hersek, Marka" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Barbados, Dolar" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "BangladeÅŸ, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaristan, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahreyn, Dinar" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Frank" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, Dolar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Bruney Sultanlığı, Dolar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivya, Bolivyano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brezilya, Brezilya Riyali" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamalar, Dolar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bütan, Gultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botsvana, Pula" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Beyaz Rusya, Ruble" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dolar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Kanada, Dolar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "Kongo/KinÅŸasa, Kongo Frangı" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "İsviçre, Frank" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Åžili, Pezo" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Çin, Yuan Renminbi" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Kolombiya, Peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Kostarika, Kolon" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Küba, Pezo" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde, Esküdo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Kıbrıs, Lira" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Çek Cumhuriyeti, Kron" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Cibuti, Frank" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Danimarka, Kuron" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominik Cumhuriyeti, Pezo" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Cezayir, Dinar" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonya, Kron" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Mısır, Lira" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "Eritre, Nakfa" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Etyopya, Bir" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Avrupa BirliÄŸi, Euro" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji, Dolar" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Falkland Adaları, Sterlin" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "İngiltere, Sterlin" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "Gürcistan, Lari" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "Guernsey, Sterlin" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Gana, Kedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "Cebelitarık, Sterlin" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambiya, Dalas" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "Gine, Frank" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemela, Kuetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Güyan, Dolar" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong, Dolar" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras, Lempira" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Krotonya, Kuna" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti, Gurde" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Macaristan, Forint" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Endonezya, Rupya" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "İsrail, Åžekel" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "Isle of Man, Sterlin" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "Hindistan, Ruble" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Irak, Dinar" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "İran, Riyal" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "İzlanda, Kron" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "Jersey, Sterlin" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jameyka, Dolar" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Ürdün, Dinar" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japonya, Yen" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya, Åžilin" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kırgızistan, Som" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Kamboçya, Riyal" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Komoros, Frank" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Kuzey Kore, Von" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Güney Kore, Von" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuveyt, Dinar" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "Seymen Adaları, Dolar" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakistan, Teng" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos, Kip" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Lübnan, Dinar" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Srilanka, Ruble" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberya, Dolar" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesoto, Maloti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Liyvanya, Lita" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia, Lati" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya, Dinar" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Fas, Dirhem" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldovya, Ley" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagaskar, Malaga Frangı" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Makedonya, Dinar" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Miyanmar (Burma), Kıyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "MoÄŸolistan, Tugrik" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Makau, Pataka" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Moritanya, Ügöya" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta, Liret" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Moritanya, Ruble" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldiv Adaları, Rufiye" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malavi, Kvaça" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Meksika, Pezo" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malezya, Ringit" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambik, Metika" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibya, Dolar" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nijerya, Nayra" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nikaragua, Cordoba" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norveç, Kron" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal, Nepal Rublesi" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Yeni Zellanda, Dolar" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Umman, Riyal" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama, Balboa" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru, Yeni Sol" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua Yeni Gine, Kina" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Filipinler, Pezo" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan, Ruble" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Polonya, Zloçi" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay, Kuron" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Katar, Riyal" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romanya, Ley" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Rusya, Ruble" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Ruanda, Frank" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Suudi Arabistan, Riyal" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomon Adaları, Dolar" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "SeyÅŸel Adaları, Ruble" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan, Dinar" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "İsveç, Kron" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapur, Dolar" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "Senhelen, Sterlin" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenya, Dolar" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakya, Kron" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Siera Leone, Leon" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somali, Åžilin" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "Seborga, Luigini" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Surinam, Gulden" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "Sao Tome ve Principe, Dobra" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador, Kolon" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Suriye, Lira" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland, Emalangen" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Tayland, Bat" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tacikistan, Ruble" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "Türkmenistan, Manat" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunus, Dinar" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga, Paanga" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Türkiye, Lira" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad ve Tobago, Dolar" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "Tuvalu, Dolar" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Tayvan, Dolar" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzanya, Åžilin" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukrayna, Hrivna" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda, Åžilin" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "Amerika BirleÅŸik Devletleri, Dolar" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay, Pezo" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Özbekistan, Sum" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezüella, Bolivar" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam, Dong" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu, Vatu" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa, Tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Afrika Ekonomik BirliÄŸi (BEAC), Frank" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Gümüş, Ons" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Altın, Ons" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "DoÄŸu Karayipler, Dolar" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "IMF Özel Çekme Hakkı" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Afrika Ekonomik BirliÄŸi (BCEAO), Frank" + +#: goffice/utils/formats.c:553 +#, fuzzy +msgid "Palladium, Ounces" +msgstr "Paladyum Onsu" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "Fransız Polinezyası, Frank" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Platin, Ons" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen, Riyal" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Yugoslavya, Dinar" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Güney Afrika, Rand" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambiya, Kvaça" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabve, Dolar" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Hiçbiri" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Katı" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Otomatik" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Hiçbiri" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Orta" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "aralık" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "S_ağı Sınırla" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "dosya" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "satır" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "BaÄŸlantıyı Yapıştır" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Mar" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "%75 Gri" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "%50 Gri" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "%25 Gri" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "%12.5 Gri" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "&6.25 Gri" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Yatay Bant" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "Düşey Bant" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Ters Çapraz Bant" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Çapraz Bant" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Çapraz Tarama" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Kalın Çapraz Tarama" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "İnce Yatay Bant" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "İnce Düşey Bant" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "İnce Çapraz Bant" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "İnce Çapraz Bant" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "İnce Yatay Tarama" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "İnce Çapraz Tarama" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Önalan Katı" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Küçük Daireler" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Daire Benzerleri" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Saz" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Büyük Daireler" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "TuÄŸlalar" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Etiketler" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "DeÄŸerler" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Satır çözümlenirken hata" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Grafik..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "Çi_z" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "Çi_z" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "3D BitiÅŸik Çubuklar" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "3D BitiÅŸik Sütunlar" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "3D Pay Çubukları" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "3D Pay Sütunları" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "3D Çubuk Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "3D Sütun Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "BitiÅŸik Çubuklar" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "BitiÅŸik Sütunlar" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "Ana ve alt sınıflara göre gruplanmış bitiÅŸik 3D yatay çubuklar." + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "Ana ve alt sınıflara göre gruplanmış bitiÅŸik yatay çubuklar." + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "Ana ve alt sınıflara göre gruplanmış bitiÅŸik 3D düşey sütunlar." + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "Ana ve alt sınıflara göre gruplanmış bitiÅŸik düşey sütunlar." + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Alan" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Alanlar" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Çubuk" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Sütun" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "Çizgi" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Alınacak satırlar" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "Çizgi" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" +"Ana sınıfa göre gruplanmış 3D yatay çubuklarda, alt toplam payları olarak " +"demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" +"Ana sınıfa göre gruplanmış 3D düşey çubuklarda, alt toplam payları olarak " +"demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" +"Ana sınıfa göre gruplanmış yatay çubuklarda, alt toplam payları olarak " +"demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" +"Ana sınıfa göre gruplanmış düşey sütunlarda, alt toplam payları olarak " +"demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "Ana sınıfa göre gruplanmış 3D yatay çubuklarda demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "Ana sınıfa göre gruplanmış yatay çubuklarda demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "Ana sınıfa göre gruplanmış 3D düşey sütunlarda demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "Ana sınıfa göre gruplanmış düşey sütunlarda demetli alt sınıflar." + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "Pay Çubukları" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Pay Çubukları" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Pay Sütunları" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "Pay çizgileri" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "Pay Çubukları" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "Pay çizgileri" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Çubuk Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Çubuk Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Sütun Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "Çizgi Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Çubuk Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Çizgi Demeti" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "İmli çizgiler" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "Pay çizgileri" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "Çizgi Demeti" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Öntanımlı yorumlayıcı" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "Satır ve sütun _baÅŸlıkları" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Çi_z" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Parola geçersiz" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Çi_z" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Çi_z" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Çi_z" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Satır çözümlenirken hata" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Sekme Renklerinin DeÄŸiÅŸtirilmesi" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Öntanımlı yorumlayıcı" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "Çi_z" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Yok" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Ayraç:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "_Derece" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Ayraç:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Sınıf:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "3D Dilimleme" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "3D Ayrık Dilimleme" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "Her dilimi ikincil paylara paylaÅŸtırılmış ana toplamlar." + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" +"Her dilimi ikincil demetlerdeki çubuklara paylaÅŸtırılmış ana toplamlar." + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Çoklu dilimli" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "Çoklu dilimli çubuklar" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +#, fuzzy +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "Dilimleri ayrık olarak her katılımcının payı" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +#, fuzzy +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "3 boyutlu dilimlemede her katılımcının payı" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "3 boyutlu dilimlemede her katılımcının payı" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "Üç boyutlu dilimleri ayrık olarak her katılımcının payı" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "Dilimleri ayrık olarak her katılımcının payı" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "Her katılımcının payı." + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "Dilimli" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Aralık" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "Dilimleri Ayır" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Dilimleri Ayır" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +#, fuzzy +msgid "Default pie types" +msgstr "Öntanımlı yorumlayıcı" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "Çi_z" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Çi_z" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Pay Çubukları" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Standart Hata" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Çubuk Demeti" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Öntanımlı yorumlayıcı" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Satır çözümlenirken hata" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Sadece sayılar" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Sayaç" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Alınacak satırlar" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Kaynak" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Satır çözümlenirken hata" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Kaynak alanları" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Kaynak alanları" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "%, normal boyuta göre" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Parametreler" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Kaynak" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "Çi_z" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Balon" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Balon" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Satır çözümlenirken hata" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Satır çözümlenirken hata" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" +"Çok boyutlu noktalar arasında her biri imli düzgün doÄŸrusal aradeÄŸerler atar." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +#, fuzzy +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Çok boyutlu noktalar arasında her biri imli düzgün doÄŸrusal aradeÄŸerler atar." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Çok boyutlu noktalar arasında düzgün doÄŸrusal aradeÄŸerler atar." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "İmli düzgün aradeÄŸerli noktalar" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "" +"Çok boyutlu noktalar arasında her biri imli düzgün doÄŸrusal aradeÄŸerler atar." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "X, Y ve balon boyutuyla oluÅŸturur." + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "Çizgi" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Nokta Sayısı" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "Çizgi" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/uk.po b/lib/goffice-0.0.4/po/uk.po new file mode 100644 index 0000000000..de1a5a0819 --- /dev/null +++ b/lib/goffice-0.0.4/po/uk.po @@ -0,0 +1,4473 @@ +# Ukrainian translation of gnumeric. +# Copyright (C) 1999 Free Software Foundation, Inc. +# Yuri Syrota , 1999. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 0.45\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-03-26 11:18--500\n" +"Last-Translator: Yuriy Syrota \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Інше значеннÑ" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Ðе вдалоÑÑ Ð·Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· файлу." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Ðевідома назва" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Ðепідтримуваний тип завантажувача \"%s\"." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Помилка під Ñ‡Ð°Ñ Ð¿Ñ–Ð´Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про поÑлугу %d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Ðеможливо завантажити інформаційний файл Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Файл \"%s\" не Ñ” правильним інформаційним файлом доповненнÑ." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" +"Помилка під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· ідентифікатором \"%s\"." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Ðевідома назва доповненнÑ." + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "Ðевизначено завантажувача Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· ідентифікатором \"%s\"" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ðµ має ідентифікатора." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Помилка ініціалізації завантажувача Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей доповненнÑ." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Ðе вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ \"%s\" (ідентифікатор: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Ðевизначено завантажувача Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· ідентифікатором \"%s\"" + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей доповненнÑ." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Помилка під Ñ‡Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— поÑлуги Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Помилка під Ñ‡Ð°Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— поÑлуги Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Ðеможливо завантажити завантажувача доповнень." + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Ðевизначено завантажувача Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· ідентифікатором \"%s\"" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей доповненнÑ." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "" +"СталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ пид Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· файлу \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Ðе вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ \"%s\" (ідентифікатор: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Ðе вдалоÑÑ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ \"%s\" (ідентифікатор: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про доÑтупні доповненнÑ." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Помилка під Ñ‡Ð°Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— поÑлуги Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ #%d." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Помилки під Ñ‡Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— доповнень." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Помилка під Ñ‡Ð°Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— ÑиÑтеми доповнень." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "ПоÑлуга не підтримуєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡ÐµÐ¼." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Ðе вказано назви файлу модулÑ." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Ðеможливо відкрити файл Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Файл Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\" має неправильний формат." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Файл не міÑтить \"plugin_file_struct\"." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Файл має неправильне магічне чиÑло." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "ВерÑÑ–Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ \"%s\" відрізнÑєтьÑÑ Ð²Ñ–Ð´ верÑÑ–Ñ— програми \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Ð’ цій ÑиÑтемі не підтримуєтьÑÑ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Ðеможливо закрити файл Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Файл не міÑтить функцію \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Модуль не міÑтить функції \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñлуги доповненнÑ." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— в доповненні повернула помилку." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð² доповненні повернула помилку." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Загальний" + +#: goffice/app/go-plugin-service.c:343 +#, fuzzy +msgid "File opener has no description" +msgstr "Відкривач файлу з ідентифікатором \"%s\" не має опиÑу" + +#: goffice/app/go-plugin-service.c:375 +#, fuzzy, c-format +msgid "File opener - %s" +msgstr "Відкривач файлк не має ідентифікатора." + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ." + +#: goffice/app/go-plugin-service.c:661 +#, fuzzy +msgid "File saver has no description" +msgstr "Файловий зберігач з ідентифікатором \"%s\" не має опиÑу" + +#: goffice/app/go-plugin-service.c:707 +#, fuzzy, c-format +msgid "File saver - %s" +msgstr "Зберігач файлу не має ідентифікатора" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ." + +#: goffice/app/go-plugin-service.c:886 +#, fuzzy +msgid "Plugin loader" +msgstr "Завантажувач доповнень Python" + +#: goffice/app/go-plugin-service.c:910 +#, fuzzy +msgid "GObject loader" +msgstr "Інше значеннÑ" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, fuzzy, c-format +msgid "Unknown service type: %s." +msgstr "Ðевідомий аркуш \"%s\"" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про поÑлугу %d." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "Формула" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Ð’Ñтавка" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "Пошук текÑту" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +#, fuzzy +msgid "Space After" +msgstr "Зберегти" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Ðевідомий оператор" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "ДиÑкретне" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "ДиÑкретне" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "ЛініÑ" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Логічне" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "Подробиці про файл" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Ðвтоматично" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_КатегоріÑ" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Тло" + +#: goffice/graph/gog-axis.c:1475 +#, fuzzy +msgid "M_in" +msgstr "Мінімум" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "МакÑимум" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Закрити" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +#, fuzzy +msgid "Format" +msgstr "Формат" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Позначка" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "П'ÑтницÑ" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "П'ÑтницÑ" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Шаблон" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Шаблон" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Ð’Ñтавити" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Колір контура" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "_ВиÑота..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Ð’Ñтавити" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "Ð’Ñтавка" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "РÑдок" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Колір контура" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "Позначка" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +#, fuzzy +msgid "_Type:" +msgstr "Тип" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "ВідіÑлати" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Файл" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "П'ÑтницÑ" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "Точка" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "_ВиÑота..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "_Ширина:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Помилка: немає аркуша" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Зразок" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Колір:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Ширина Ñтовпчика..." + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Ширина:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "_Графік..." + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "ОчиÑтити" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Ðазва" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Крок 1 з 3: Вібір типу графіка" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Крок 3 з 3: ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð°Ñ„Ñ–ÐºÐ°" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Ðалаштувати верхній колонтитул" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "Ð’Ñтавка" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Ðазва риÑунка" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Тло" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "ОпераціÑ" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Шаблон" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Зразок" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "ОпиÑ" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "ТекÑÑ‚" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Дані" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "Ðазва Ñерій" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Ðазва риÑунка" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Ðазва риÑунка" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "Ð’Ñтавка" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "РÑдок" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Точка" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dR x %dC" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Шрифт" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Стиль" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Шаблон" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "ПереглÑд друку" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Колір:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Контур" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "Ðовий Ñпільний" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Розмір:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Стиль" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "Тип" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Тло" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "ОпиÑ:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "Додати" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Колір" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "Зв'Ñзати з:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Передній план" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Шаблон" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "Вибрати" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Розмір:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "Стан" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "Праворуч" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "МаÑив" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "пункти" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +#, fuzzy +msgid "Default" +msgstr "Стерти..." + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "Згрупувати" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "ДілÑнка %i" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "КурÑивний" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "зелений" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "Середнє:" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "ЯпонÑькі єни" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Логічний" + +#: goffice/gtk/go-charmap-sel.c:84 +#, fuzzy +msgid "Turkish" +msgstr "Туреччина, ліри" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "Показати" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "Визначити назву" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "Захід" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "Жовтень" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "ПідкреÑленнÑ" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "Логічне" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "КорелÑÑ†Ñ–Ñ ÐŸÑ–Ñ€Ñона" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "чорний" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "Понеділок" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "Діапазон" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "ТовÑтий" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ€ÐºÐ¸" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "Ñиній" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "МаÑив" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "Відновити" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "Діапазон" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "чаÑ" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "МаÑив" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "бузковий" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "жовтий" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "зелений" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "блакитний" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "Видалити" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Вирівніти праворуч" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Вирівніти праворуч" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Вирівніти праворуч" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "білий" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "За значеннÑм" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "КориÑтувацький" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Ðалаштувати нижній колонтитул" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +#, fuzzy +msgid "Shadow type" +msgstr "Тінь" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "ОпераціÑ" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +msgid "Dock the toolbar" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Скопіювати поточний вибір у кишеню" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Ðе вдалоÑÑŒ відкрити файл \"%s\"" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "Файл" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "_ЗображеннÑ..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Виюрати веÑÑŒ Ñтовпчик" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Зберегти" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "Файл" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"Ñ” назвою каталогу" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Ви не маєте права на Ð·Ð°Ð¿Ð¸Ñ Ñƒ\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Книга %s вже Ñ–Ñнує.\n" +"Чи хочете ви перепиÑати Ñ—Ñ—?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Ðормальне" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "ТовÑтий" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "ТовÑтий курÑивний" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "КурÑивний" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +#, fuzzy +msgid "Font style:" +msgstr "Ð’Ñтановити Ñтиль шрифту" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Шрифт:" + +#: goffice/gtk/go-font-sel.glade.h:4 +#, fuzzy +msgid "Preview" +msgstr "ПереглÑд друку" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Розмір:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "ЧиÑло" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "Формат - валютний" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "вміÑÑ‚" + +#: goffice/gtk/go-format-sel.c:78 +#, fuzzy +msgid "Date" +msgstr "дата" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "ЧаÑ" + +#: goffice/gtk/go-format-sel.c:80 +#, fuzzy +msgid "Percentage" +msgstr "ВідÑоток" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "ФункціÑ" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "Формат - науковий" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "ТекÑÑ‚" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "Спеціальна" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "КориÑтувацький" + +#: goffice/gtk/go-format-sel.c:956 +#, fuzzy +msgid "Negative Number Format" +msgstr "Від'ємне біномінальне" + +#: goffice/gtk/go-format-sel.c:978 +#, fuzzy +msgid "Number Formats" +msgstr "Скопіювати формати" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "КатегоріÑ:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Показати формули" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +msgid "Display values as percentages." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "Формати" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Від'ємне біномінальне" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "ПереглÑд друку" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +#, fuzzy +msgid "_Format:" +msgstr "Формати" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "Захід" + +#: goffice/gtk/go-locale-sel.c:69 +msgid "Eastern Europe" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "Загальний" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "ДілÑнка %i" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "ÐвÑтраліÑ, долари" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "Південна Ðфрика, ранди" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Бахрейн, динари" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "ЙорданÑькі динари" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "КувейтÑькі динари" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "ЛівіÑ, динар" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "СаудівÑька Ðравії, ріÑли" + +#: goffice/gtk/go-locale-sel.c:123 +#, fuzzy +msgid "Sudan (ar_SD)" +msgstr "Судан, динари" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "ТуніÑ, динари" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "БілоруÑькі рублі" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "БолгаріÑ, леви" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "БанґладешÑькі таки" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "ЧешÑькі крони" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "Ðова ЗеландіÑ, долари" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Філіпіни, пеÑо" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "Південна Ðфрика, ранди" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Ðрґентина, пеÑо" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "ЧілійÑькі пеÑо" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "КолумбійÑькі пеÑо" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Колони КоÑта Ріко" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "ДомініканÑькі пеÑо" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Вибірка" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "ÒватемальÑькі кветцали" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "ГодураÑькі лемпіри" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "МекÑика, пеÑо" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Уруґвай, пеÑо" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "ВенеÑуела, болівари" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Вибірка" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "ІндонезійÑькі рупії" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "СловакіÑ, крони" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "ÐлбаніÑ, леки" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "ЮгоÑлавіÑ, нові динари" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "ТаджикіÑтан, рублі" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "ПакіÑтан, рупії" + +#: goffice/gtk/go-locale-sel.c:243 +#, fuzzy +msgid "Uzbekistan (uz_UZ)" +msgstr "УзбекиÑтан, Ñуми" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Поточні значеннÑ" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "Середнє:" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ ÐŸÐžÐœÐ˜Ð›ÐšÐ" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*Ðдл" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Пнд" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Втр" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Срд" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Чтв" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Птн" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Сбт" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "ÐеділÑ" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Понеділок" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Вівторок" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Середа" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Четвер" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "П'ÑтницÑ" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Субота" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Січ" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Лют" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Бер" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Кві" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Тра" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Чер" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Лип" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Сер" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Вер" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Жов" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*ЛиÑ" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Гру" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Січень" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Лютий" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Березень" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Квітень" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Травень" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Червень" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Липень" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Серпень" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "ВереÑень" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Жовтень" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "ЛиÑтопад" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Грудень" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "ІСТИÐÐ" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "ХИБÐІСТЬ" + +#: goffice/utils/format.c:757 +#, fuzzy +msgid "Black" +msgstr "чорний" + +#: goffice/utils/format.c:758 +#, fuzzy +msgid "Blue" +msgstr "Ñиній" + +#: goffice/utils/format.c:759 +#, fuzzy +msgid "Cyan" +msgstr "блакитний" + +#: goffice/utils/format.c:760 +#, fuzzy +msgid "Green" +msgstr "зелений" + +#: goffice/utils/format.c:761 +#, fuzzy +msgid "Magenta" +msgstr "бузковий" + +#: goffice/utils/format.c:762 +#, fuzzy +msgid "Red" +msgstr "Відновити" + +#: goffice/utils/format.c:763 +#, fuzzy +msgid "White" +msgstr "білий" + +#: goffice/utils/format.c:764 +#, fuzzy +msgid "Yellow" +msgstr "жовтий" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "ÐфґаніÑтан, афґані" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "ÐлбаніÑ, леки" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +#, fuzzy +msgid "Netherlands Antilles, Guilders" +msgstr "ГоландÑькі гульдени" + +#: goffice/utils/formats.c:394 +#, fuzzy +msgid "Angola, Kwanza" +msgstr "ÐнгольÑькі нові кванза" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Ðрґентина, пеÑо" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "ÐвÑтраліÑ, долари" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "Ðруба, ґульдени" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +#, fuzzy +msgid "Barbados, Dollars" +msgstr "БарбадоÑькі долари" + +#: goffice/utils/formats.c:401 +#, fuzzy +msgid "Bangladesh, Taka" +msgstr "БанґладешÑькі таки" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "БолгаріÑ, леви" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Бахрейн, динари" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Бурунді, франки" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Бермуди, долари" + +#: goffice/utils/formats.c:406 +#, fuzzy +msgid "Brunei Darussalam, Dollars" +msgstr "БрунейÑькі долари" + +#: goffice/utils/formats.c:407 +#, fuzzy +msgid "Bolivia, Bolivianos" +msgstr "БолівійÑькі болівіано" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "БразильÑькі реали" + +#: goffice/utils/formats.c:409 +#, fuzzy +msgid "Bahamas, Dollars" +msgstr "БагамÑькі долари" + +#: goffice/utils/formats.c:410 +#, fuzzy +msgid "Bhutan, Ngultrum" +msgstr "БутанÑькі нгултруми" + +#: goffice/utils/formats.c:411 +#, fuzzy +msgid "Botswana, Pulas" +msgstr "БотÑванÑькі пули" + +#: goffice/utils/formats.c:412 +#, fuzzy +msgid "Belarus, Rubles" +msgstr "БілоруÑькі рублі" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "Белізькі долари" + +#: goffice/utils/formats.c:414 +#, fuzzy +msgid "Canada, Dollars" +msgstr "КанадÑькі долари" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +#, fuzzy +msgid "Chile, Pesos" +msgstr "ЧілійÑькі пеÑо" + +#: goffice/utils/formats.c:418 +#, fuzzy +msgid "China, Yuan Renminbi" +msgstr "КитайÑькі юані" + +#: goffice/utils/formats.c:419 +#, fuzzy +msgid "Colombia, Pesos" +msgstr "КолумбійÑькі пеÑо" + +#: goffice/utils/formats.c:420 +#, fuzzy +msgid "Costa Rica, Colones" +msgstr "Колони КоÑта Ріко" + +#: goffice/utils/formats.c:421 +#, fuzzy +msgid "Cuba, Pesos" +msgstr "КубинÑькі пеÑо" + +#: goffice/utils/formats.c:422 +#, fuzzy +msgid "Cape Verde, Escudos" +msgstr "ЕÑкудо Капе Верде" + +#: goffice/utils/formats.c:423 +#, fuzzy +msgid "Cyprus, Pounds" +msgstr "КіпрÑькі фунти" + +#: goffice/utils/formats.c:424 +#, fuzzy +msgid "Czech Republic, Koruny" +msgstr "ЧешÑькі крони" + +#: goffice/utils/formats.c:425 +#, fuzzy +msgid "Djibouti, Francs" +msgstr "ДжибутÑькі франки" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +#, fuzzy +msgid "Dominican Republic, Pesos" +msgstr "ДомініканÑькі пеÑо" + +#: goffice/utils/formats.c:428 +#, fuzzy +msgid "Algeria, Algeria Dinars" +msgstr "Динари Ðлгерії" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +#, fuzzy +msgid "Egypt, Pounds" +msgstr "ЄгипетÑькі фунти" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +#, fuzzy +msgid "Ethiopia, Birr" +msgstr "ЕфіопÑькі біри" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "Долари Фіджі" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "Фунти ФолклендÑьких оÑтровів" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +#, fuzzy +msgid "Guernsey, Pounds" +msgstr "СуданÑькі фунти" + +#: goffice/utils/formats.c:439 +#, fuzzy +msgid "Ghana, Cedis" +msgstr "ÒанÑькі Ñеді" + +#: goffice/utils/formats.c:440 +#, fuzzy +msgid "Gibraltar, Pounds" +msgstr "ÒібралтарÑькі фунти" + +#: goffice/utils/formats.c:441 +#, fuzzy +msgid "Gambia, Dalasi" +msgstr "ÒамбійÑькі далаÑÑ–" + +#: goffice/utils/formats.c:442 +#, fuzzy +msgid "Guinea, Francs" +msgstr "ÒвінейÑькі франки" + +#: goffice/utils/formats.c:443 +#, fuzzy +msgid "Guatemala, Quetzales" +msgstr "ÒватемальÑькі кветцали" + +#: goffice/utils/formats.c:444 +#, fuzzy +msgid "Guyana, Dollars" +msgstr "ÒаÑнанÑький долар" + +#: goffice/utils/formats.c:445 +#, fuzzy +msgid "Hong Kong, Dollars" +msgstr "Гонґ-КонґÑькі долари" + +#: goffice/utils/formats.c:446 +#, fuzzy +msgid "Honduras, Lempiras" +msgstr "ГодураÑькі лемпіри" + +#: goffice/utils/formats.c:447 +#, fuzzy +msgid "Croatia, Kuna" +msgstr "ХорватÑькі куни" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +#, fuzzy +msgid "Hungary, Forint" +msgstr "УгорÑькі форинти" + +#: goffice/utils/formats.c:450 +#, fuzzy +msgid "Indonesia, Rupiahs" +msgstr "ІндонезійÑькі рупії" + +#: goffice/utils/formats.c:451 +#, fuzzy +msgid "Israel, New Shekels" +msgstr "ІзраільÑькі шекелі" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +#, fuzzy +msgid "India, Rupees" +msgstr "ІндійÑькі рупії" + +#: goffice/utils/formats.c:454 +#, fuzzy +msgid "Iraq, Dinars" +msgstr "ІракÑькі динари" + +#: goffice/utils/formats.c:455 +#, fuzzy +msgid "Iran, Rials" +msgstr "ІранÑькі ріали" + +#: goffice/utils/formats.c:456 +#, fuzzy +msgid "Iceland, Kronur" +msgstr "ІÑландÑькі крони" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +#, fuzzy +msgid "Jamaica, Dollars" +msgstr "ЯмайÑькі долари" + +#: goffice/utils/formats.c:459 +#, fuzzy +msgid "Jordan, Dinars" +msgstr "ЙорданÑькі динари" + +#: goffice/utils/formats.c:460 +#, fuzzy +msgid "Japan, Yen" +msgstr "ЯпонÑькі єни" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "КенійÑькі шилінґи" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +#, fuzzy +msgid "Comoros, Francs" +msgstr "КомороÑькі франки" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +#, fuzzy +msgid "Kuwait, Dinars" +msgstr "КувейтÑькі динари" + +#: goffice/utils/formats.c:468 +#, fuzzy +msgid "Cayman Islands, Dollars" +msgstr "Долари Кайманових оÑтровів" + +#: goffice/utils/formats.c:469 +#, fuzzy +msgid "Kazakstan, Tenge" +msgstr "ПакіÑтанÑькі рупії" + +#: goffice/utils/formats.c:470 +#, fuzzy +msgid "Laos, Kips" +msgstr "ЛаоÑькі кіпи" + +#: goffice/utils/formats.c:471 +#, fuzzy +msgid "Lebanon, Pounds" +msgstr "Лібанезькі фунти" + +#: goffice/utils/formats.c:472 +#, fuzzy +msgid "Sri Lanka, Rupees" +msgstr "Рупії Шрі-Ланки" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "ЛіберійÑький долар" + +#: goffice/utils/formats.c:474 +#, fuzzy +msgid "Lesotho, Maloti" +msgstr "Лоті ЛеÑото" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "ЛівіÑ, динар" + +#: goffice/utils/formats.c:478 +#, fuzzy +msgid "Morocco, Dirhams" +msgstr "МарокканÑькі динари" + +#: goffice/utils/formats.c:479 +#, fuzzy +msgid "Moldova, Lei" +msgstr "МолдовÑький лей" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +#, fuzzy +msgid "Mongolia, Tugriks" +msgstr "МонгольÑький тугрик" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "МальтійÑькі ліри" + +#: goffice/utils/formats.c:487 +#, fuzzy +msgid "Mauritius, Rupees" +msgstr "МавританÑькі рупії" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Малаві, квачі" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "МекÑика, пеÑо" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "ÐамібіÑ, долари" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "ÐіґеріÑ, наіри" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "ÐорвегіÑ, крони" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Ðепал, рупії" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "Ðова ЗеландіÑ, долари" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Панама, балбоа" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Філіпіни, пеÑо" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "ПакіÑтан, рупії" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Параґвай, ґуарані" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Катар, ріали" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "РумуніÑ, леї" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "РоÑÑ–Ñ, рублі" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Руанда, франки" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "СаудівÑька Ðравії, ріÑли" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Соломонові оÑтровів, долари" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Сейшели, рупії" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Судан, динари" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Сінґапур, долари" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "СловакіÑ, крони" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Сьєра-Леоне, леони" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Сомалі, шилінґи" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Сурінам, ґульдени" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "СіріÑ, фунти" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "ТаджикіÑтан, рублі" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "ТуніÑ, динари" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Туреччина, ліри" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Трінадад Ñ– Тобаго, долари" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Тайвань, новий долари" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "ТанзаніÑ, шилінґи" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Україна, гривні" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Уґанда, шилінґи" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Уруґвай, пеÑо" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "УзбекиÑтан, Ñуми" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "ВенеÑуела, болівари" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Ð’'єтнам, донґи" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Вануату, вату" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Самоа, тали" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "Срібло, унції" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "Золото, унції" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "ПівденнокарибиÑькі долари" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +#, fuzzy +msgid "Palladium, Ounces" +msgstr "Паладій, унції" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "Платина, унції" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Йємен, ріали" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "ЮгоÑлавіÑ, нові динари" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "Південна Ðфрика, ранди" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "ЗамбіÑ, квачі" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Зімбабве, зімбабвійÑький долари" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Ðемає" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +#, fuzzy +msgid "Solid" +msgstr "ТовÑтий" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Ðвтоматично" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Ðемає" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Середнє:" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "Діапазон" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "Праворуч:" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "Зразок" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Ð’Ñтавити поÑиланнÑ" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Бер" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Ñірого" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Ñірого" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Ñірого" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Ñірого" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Ñірого" + +#: goffice/utils/go-pattern.c:101 +#, fuzzy +msgid "Horizontal Stripe" +msgstr "Ð’Ñтановити горизонтальне вирівнюваннÑ" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +#, fuzzy +msgid "Thin Horizontal Stripe" +msgstr "Ð’Ñтановити горизонтальне вирівнюваннÑ" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +#, fuzzy +msgid "Foreground Solid" +msgstr "Передній план" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +#, fuzzy +msgid "Labels" +msgstr "Позначка" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +#, fuzzy +msgid "Values" +msgstr "ЗначеннÑ" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Помилка аналізу Ñ€Ñдка" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_Графік..." + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "Точка" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "Точка" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +#, fuzzy +msgid "3D Stacked Bars" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Ð’Ñтавити Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Ð’Ñтавити Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +#, fuzzy +msgid "Area" +msgstr "ДілÑнка %i" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "ДілÑнка %i" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Стовпчик" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ЛініÑ" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "%d Ñ€Ñдків Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "ЛініÑ" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +#, fuzzy +msgid "Stacked Bars" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "Прибрати лінії Ñітки" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "Прибрати лінії Ñітки" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "ВідÑоток" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "Прибрати лінії Ñітки" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Визначити назву" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "Точка" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Ðеправильний вираз" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "Точка" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "Точка" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "Точка" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Помилка аналізу Ñ€Ñдка" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Зміна формату %s" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Визначити назву" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "Точка" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Ðічого" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Розділювач:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "Стерти..." + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Розділювач:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "КатегоріÑ:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "Прибрати лінії Ñітки" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "Розбити" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +#, fuzzy +msgid "Multi-Pie" +msgstr "Помножити" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Помножити" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Ціна" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Діапазон" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Розбити" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Розбити" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +msgid "Default pie types" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "Точка" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "Точка" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "ВідÑоток" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Стандиртна похибка" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Визначити назву" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Помилка аналізу Ñ€Ñдка" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "ЧиÑло" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "КількіÑть" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "%d Ñ€Ñдків Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Джерело" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Помилка аналізу Ñ€Ñдка" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Джерело" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Джерело" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, no-c-format +msgid "% of default size" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "Центрувати" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Джерело" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "Точка" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Подвійний" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "Подвійний" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Помилка аналізу Ñ€Ñдка" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Помилка аналізу Ñ€Ñдка" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Стерти Ñтовпчики" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ЛініÑ" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Точка" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ЛініÑ" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/vi.po b/lib/goffice-0.0.4/po/vi.po new file mode 100644 index 0000000000..9d2e90754e --- /dev/null +++ b/lib/goffice-0.0.4/po/vi.po @@ -0,0 +1,4360 @@ +# Copyright (C) 2002 Free Software Foundation +# This file is distributed under the same license as the gnumeric package. +# pclouds , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-02-23 09:00+0700\n" +"Last-Translator: pclouds \n" +"Language-Team: GnomeVI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" +"Bạn có thể tắt tính năng này má»™t cách an toàn bằng cách sá»­a tập tin plugin." +"xml má»™t cách thích hợp." + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "Äối tượn_g..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "" +"Tập tin chứa thông tin plugin vá»›i id không hợp lệ (%s), trong khi yêu cầu là " +"%s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "Không thể Ä‘á»c thông tin plugin từ tập tin." + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "Tên lạ" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "Loại bá»™ nạp \"%s\" không được há»— trợ." + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "Lá»—i chuẩn bị bá»™ nạp \"%s\"." + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "Lá»—i Ä‘á»c thông tin dịch vụ #%d." + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "Không thể Ä‘á»c tập tin thông tin plugin (\"%s\")." + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "Tập tin \"%s\" không phải là tập tin thông tin plugin hợp lệ." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "Lá»—i Ä‘á»c dịch vụ cho plugin vá»›i id=\"%s\"" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "Tên plugin lạ." + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" +"Không có bá»™ nạp nào (hoặc id cá»§a bá»™ nạp không hợp lệ) cho plugin vá»›i id=\"%s" +"\"." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "Plugin không có id." + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "Lá»—i khởi động bá»™ nạp plugin (\"%s\")." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "Tìm ra phụ thuá»™c vòng trong plugin." + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "Không thể kích hoạt plugin id=\"%s\"." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "Không tìm thấy plugin vá»›i id=\"%s\"." + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "Lá»—i kích hoạt các plugin liên quan." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "Lá»—i kích hoạt dịch vụ plugin #%d." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "Lá»—i kích ngừng hoạt dịch vụ plugin #%d." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "Không thể nạp bá»™ nạp plugin." + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "Không thể nạp plugin vá»›i id=\"%s\"." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "Lá»—i nạp các plugin liên quan." + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "Lá»—i Ä‘á»c thông tin plugin từ tập tin \"%s\"." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "Không thể kích hoạt plugin \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "Không thể ngưng kích hoạt plugin \"%s\" (ID: %s)" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "Lá»—i Ä‘á»c thông tin vá» các plugin hiện có." + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "Lá»—i há»§y kích hoạt plugin không còn tồn tại trên đĩa." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"Những plugin sau không còn tồn tại trên đĩa, nhưng vẫn còn hoạt động:\n" +"%s.\n" +"Bạn nên khởi động lại Gnumeric ngay." + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "Lá»—i kích hoạt plugin." + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "Lá»—i khởi động hệ thống plugin." + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "Bá»™ nạp không há»— trợ dịch vụ." + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "Chưa cho biết tên tập tin mô Ä‘un." + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "Không thể mở tập tin mô Ä‘un \"%s\"." + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "Tập tin mô Ä‘un \"%s\" sai dạng thức." + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "Tập tin không chứa (ký hiệu \"plugin_file_struct\")." + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "Tập tin có số magic sai." + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "Phiên bản plugin \"%s\" khác vá»›i ứng dụng (%s)." + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "Hệ thống này không há»— trợ tính năng nạp mô Ä‘un động." + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "Không thể đóng tập tin mô Ä‘un \"%s\"" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "Tập tin không chứa hàm \"%s\"" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "Mô Ä‘un không chứa hàm \"%s\"." + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "Lá»—i nạp dịch vụ plugin." + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "Khởi động hàm bên trong plugin trả vá» lá»—i." + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "Hàm cleanup bên trong plugin trả vá» lá»—i." + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "Chung" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "Không có mô tả vá» bá»™ mở tập tin" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "Bá»™ mở tập tin - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "Lá»—i Ä‘á»c tập tin." + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "Không có mô tả vá» bá»™ lưu tập tin" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "Bá»™ lưu tập tin - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "Lá»—i lưu tập tin." + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "Bá»™ nạp plugin" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "Loại dịch vụ lạ: %s." + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "Lá»—i Ä‘á»c thông tin dịch vụ." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "trang" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "Canh _lá»" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "_Tìm" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "Canh hàng" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "Ký tá»± nháy:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "Rá»i rạc" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "Rá»i rạc" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "ÄÆ°á»ng thẳng" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "Logic" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "Ẩn chi tiết" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "Tá»± động" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "_Phân loại" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "Ná»n" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "M_in" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "Max" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "Äón_g" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "Dạng thức" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "Nhãn" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "Thứ Sáu" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "Thứ Sáu" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "Mẫu" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "Xem trước" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "Mẫu" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "Xem trước" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "Bên trong" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "Phác thảo" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "_Cao..." + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "Bên trong" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "_Chèn" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "_Hàng" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "Phác thảo" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "_Nhãn" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "_Loại:" + +#: goffice/graph/gog-chart.c:197 +#, fuzzy +msgid "Legend" +msgstr "Gá»­i" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "Tá»±a Ä‘á»:" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "Thứ Sáu" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "_Vẽ" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +#, fuzzy +msgid "Height" +msgstr "_Cao..." + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:236 +#, fuzzy +msgid "Width" +msgstr "_Vá»›i:" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "Báo động lá»—i" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "Xem trước" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "Mẫu" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "Màu:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "Bá» ròng đưá»ng" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "_Vá»›i:" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "Äồ _thị..." + +#: goffice/graph/gog-graph.c:154 +#, fuzzy +msgid "Chart" +msgstr "Bieudo%d" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "Tên" + +#: goffice/graph/gog-guru.c:1092 +#, fuzzy +msgid "Step 1 of 2: Select Chart Type" +msgstr "Bước 1 trên 3: Chá»n loại đồ thị" + +#: goffice/graph/gog-guru.c:1100 +#, fuzzy +msgid "Step 2 of 2: Customize Chart" +msgstr "Bước 3 trên 3: Tùy biến biểu đồ" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "Tùy biến header" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "_Chèn" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "Tên vẽ" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "Biên" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "Hướng" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "Mẫu" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "Xem trước" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "Mẫu" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "Mô tả" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "Chữ" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +#, fuzzy +msgid "Data" +msgstr "_Dữ liệu" + +#: goffice/graph/gog-plot.c:182 +#, fuzzy +msgid "Series" +msgstr "_Serie" + +#: goffice/graph/gog-plot-engine.c:54 +#, fuzzy +msgid "Plot Engine" +msgstr "Tên vẽ" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "Tên vẽ" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "Canh _lá»" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "_Chuá»—i" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "Äiểm" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%dR x %dC" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "Font" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "Kiểu" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "Xem trước" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "Xem trước" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "Mẫu" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "Xem trước" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "_Màu:" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "Màu đưá»ng viá»n" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "_Phạm vi:" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "Kích thước:" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "Kiểu" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "_Loại:" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "Ná»n" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "Thư mục" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "Kết thúc" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "Màu tô" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "_Vừa khít vá»›i:" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "Cận cảnh" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "Mẫu" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "_Chá»n" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "Kích thước:" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "Trạng thái" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "_Phải" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "array" + +#: goffice/graph/gog-style-prefs.glade.h:30 +msgid "pts" +msgstr "pts" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "Mặc định" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "Nhóm" + +#: goffice/gtk/go-charmap-sel.c:74 +#, fuzzy +msgid "Arabic" +msgstr "Vùng %i" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "Nghiêng" + +#: goffice/gtk/go-charmap-sel.c:76 +#, fuzzy +msgid "Central European" +msgstr "Giữa trang" + +#: goffice/gtk/go-charmap-sel.c:77 +#, fuzzy +msgid "Chinese" +msgstr "Chisq" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "Lục" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "Canh _lá»" + +#: goffice/gtk/go-charmap-sel.c:82 +#, fuzzy +msgid "Japanese" +msgstr "trang" + +#: goffice/gtk/go-charmap-sel.c:83 +#, fuzzy +msgid "Korean" +msgstr "Luận lý" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:85 +#, fuzzy +msgid "Unicode" +msgstr "Hiện" + +#: goffice/gtk/go-charmap-sel.c:86 +#, fuzzy +msgid "Vietnamese" +msgstr "Äịnh nghÄ©a tên" + +#: goffice/gtk/go-charmap-sel.c:87 +#, fuzzy +msgid "Western" +msgstr "Tây" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +#, fuzzy +msgid "Other" +msgstr "Tháng Mưá»i" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "Dùng gạch chân" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "Logic" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "Hệ số tương quan Pearson" + +#: goffice/gtk/go-charmap-sel.c:458 +#, fuzzy +msgid "This value determines which iconv test to perform." +msgstr "Biến này xác định có bật chức năng Tá»± động Hoàn thành không." + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "Äen" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "Thứ Hai" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "giá»›i hạn" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "Äậm" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "Giá trị ô" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "Dương" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "array" + +#: goffice/gtk/go-color-palette.c:113 +msgid "red" +msgstr "Ä‘á»" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "giá»›i hạn" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "giá»" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "Dãy" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "Hồng" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "Vàng" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "Lục" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "Da trá»i" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "Siêu liên kết" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "Canh phải" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "Canh phải" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "Canh phải" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "Trắng" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "Theo giá trị" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "Tá»± chá»n" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "Tùy biến footer" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "Kiểu bóng" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "Hướng" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +#, fuzzy +msgid "Dock the toolbar" +msgstr "Vẽ thanh công cụ thế nào" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "Vẽ thanh công cụ thế nào" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "Không thể mở tập tin '%s'" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "_Tập tin" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "Ả_nh..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "Chá»n nguyên cá»™t" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "Lưu tất cả" + +#: goffice/gtk/goffice-gtk.c:530 +#, fuzzy +msgid "File _type:" +msgstr "_Tập tin:" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"là tên thư mục" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"Bạn không có quyá»n lưu vào\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"Workbook %s đã tồn tại.\n" +"Bạn có muốn lưu đè lên nó?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "Bình thưá»ng" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "Äậm" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "Nghiêng đậm" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "Nghiêng" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "Kiểu font:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "Font:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "Xem trước" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "Kích thước:" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "Số" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "_Tiá»n tệ" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "_Kế toán" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "Ngày" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "Thá»i gian" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "Phần trăm" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "_Phân số" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "_Khoa há»c" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "Chữ" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "Äặc _biệt" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "Tá»± chá»n" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "Dạng thức số âm" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "Dạng thức số" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "Phân loại:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "Số chữ số _thập phân:" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +#, fuzzy +msgid "Display currency amounts." +msgstr "ÄÆ¡n vị tiá»n tệ châu Âu" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +#, fuzzy +msgid "Display times of day." +msgstr "Hiện _phác thảo" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "Hiện giá trị chính xác như khi nhập vào" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "_Dạng thức:" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "Dạng thức số âm" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "Xem trước" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "Ký hiệu:" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "_Dạng thức:" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "Dùng dấu cách má»™t ngàn" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "Tây" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "Giữa trang" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "sigma" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "Vùng %i" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "Äô la Úc" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +msgid "South Africa Afrikaans (af_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +msgid "United Arab Emirates (ar_AE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Bahrain, Dinar" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +msgid "Jordan (ar_JO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:116 +msgid "Kuwait (ar_KW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +msgid "Libya (ar_LY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +msgid "Saudi Arabia (ar_SA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:123 +msgid "Sudan (ar_SD)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +msgid "Tunisia (ar_TN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +msgid "Belarus (be_BY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "Bulgari, Leva" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh, Taka" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "Cá»™ng hòa Séc, Koruny" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +msgid "Denmark (da_DK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +msgid "Switzerland/German (de_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +#, fuzzy +msgid "Luxembourg/German (de_LU)" +msgstr "Franc (Luxembourg)" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +msgid "New Zealand (en_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:152 +msgid "Philippines (en_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +msgid "South Africa/English (en_ZA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Achentina, Peso" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Chile, Peso" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Colombia, Peso" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica, Colones" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Cá»™ng hòa Dominica, Peso" + +#: goffice/gtk/go-locale-sel.c:164 +#, fuzzy +msgid "Ecuador (es_EC)" +msgstr "Sucre (Ecuador)" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "Lấy mẫu (%s)" + +#: goffice/gtk/go-locale-sel.c:166 +msgid "Guatemala (es_GT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:167 +msgid "Honduras (es_HN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:168 +msgid "Mexico (es_MX)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +msgid "El Salvador (es_SV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +msgid "Uruguay (es_UY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:177 +msgid "Venezuela (es_VE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "Lấy mẫu (%s)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +msgid "Switzerland/French (fr_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +msgid "Indonesia (id_ID)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +msgid "Japan (ja_JP)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +msgid "Korea (ko_KR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +msgid "Slovakia (sk_SK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:227 +msgid "Slovenia (sl_SI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Albania, Leke" + +#: goffice/gtk/go-locale-sel.c:229 +msgid "Yugoslavia (sr_YU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +msgid "Tajikistan (tg_TJ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:235 +msgid "Thailand (th_TH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +msgid "Pakistan (ur_PK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "Giá trị hiện thá»i:" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "nu" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*CN" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*Hai" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*Ba" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*Tư" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*Năm" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*Sáu" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*Bảy" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "Chá»§ Nhật" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "Thứ Hai" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "Thứ Ba" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "Thứ Tư" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "Thứ Năm" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "Thứ Sáu" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "Thứ Bảy" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*Má»™t" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*Hai" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*Ba" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*Bốn" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*Năm" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*Sáu" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*Bảy" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*Tám" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*Chín" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*Mưá»i" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*Mưá»i Má»™" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*Mưá»i Hai" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "Tháng Má»™t" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "Tháng Hai" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "Tháng Ba" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "Tháng Bốn" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "Tháng Năm" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "Tháng Sáu" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "Tháng Bảy" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "Tháng Tám" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "Tháng Chín" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "Tháng Mưá»i" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "Thámg Mưá»i Má»™t" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "Tháng Mưá»i Hai" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "Äen" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "Dương" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "Da trá»i" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "Lục" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "Hồng" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "Äá»" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "Trắng" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "Vàng" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan, Afghani" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania, Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "Armenia, Dram" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Achentina, Peso" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Äô la Úc" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "Äô la Barbados" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh, Taka" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgari, Leva" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain, Dinar" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi, Franc" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "Bermuda, Dollar" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam, Dollar" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia, Boliviano" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazil, Real" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas, Dollar" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan, Ngultrum" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "Belize, Dollar" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada, Dollar" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile, Peso" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "Trung Quốc, Nhân dân tệ" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia, Peso" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica, Colones" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba, Peso" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "MÅ©i Verde, Escudo" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cyprus, Pound" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Cá»™ng hòa Séc, Koruny" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Cá»™ng hòa Dominica, Peso" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Việt Nam, Äồng" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "Dollar (Äông Caribe)" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "Không" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "Äặc" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +#, fuzzy +msgid "Dash dot" +msgstr "Krone (Äan Mạch)" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "Tá»± động" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "Không" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "Canh _lá»" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "giá»›i hạn" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "tập tin" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +#, fuzzy +msgid "cross" +msgstr "hàng" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "Dán liên kết" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*Ba" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% Xám" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% Xám" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% Xám" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% Xám" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% Xám" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "Gạch ngang" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "ÄÆ°á»ng dá»c" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "Sá»c chéo ngược" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "Sá»c chéo" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "Lưới Ä‘an chéo" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "Lưới Ä‘an chéo dày" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "ÄÆ°á»ng ngang mảnh" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "ÄÆ°á»ng dá»c mảnh" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "ÄÆ°á»ng chéo ngược mảnh" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "ÄÆ°á»ng chéo mảnh" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "Lưới vuông thưa" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "Lưới Ä‘an chéo thưa" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "Màu chữ" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "Vòng tròn nhá»" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "Ná»­a đưá»ng tròn" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "Mật độ dày" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "Vòng tròn lá»›n" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "Gạch" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "Nhãn" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "Giá trị" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "Lá»—i phân tích dòng" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "Äồ _thị" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "_Vẽ" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "_Vẽ" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Adjacent Bars" +msgstr "Khối chồng 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "Cá»™t chồng 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "Khối phần trăm 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "Cá»™t phần trăm 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "Khối chồng 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "Cá»™t chồng 3D" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +#, fuzzy +msgid "Adjacent Bars" +msgstr "Khối phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "Cá»™t chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "Vùng" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "_Vùng" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "Khối" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "Cá»™t" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ÄÆ°á»ng thẳng" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "Dòng cần nhập" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "ÄÆ°á»ng thẳng" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "Khối phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "Khối phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "Cá»™t phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "ÄÆ°á»ng phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "Khối phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "ÄÆ°á»ng phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "Khối chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "Khối chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "Cá»™t chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "ÄÆ°á»ng chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +#, fuzzy +msgid "Stacked area plot." +msgstr "Khối chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "ÄÆ°á»ng chồng" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "ÄÆ°á»ng đánh dấu" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "ÄÆ°á»ng phần trăm" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "ÄÆ°á»ng chồng" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "Bá»™ thông dịch mặc định" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "_Vẽ" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "Sai mật mã" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "_Vẽ" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "_Vẽ" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "_Vẽ" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "Lá»—i phân tích dòng" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "Äang đổi màu Tab" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "Bá»™ thông dịch mặc định" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "_Vẽ" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "Không có gì" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "Ký tá»± ngăn cách:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "Cạnh" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "Ký tá»± ngăn cách:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "Phân loại:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "ÄÆ°á»ng 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "ÄÆ°á»ng 3D" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "Nhiá»u lá»—i\n" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "Giá" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "Phạm vi" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "Phân đôi" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "Phân đôi" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +#, fuzzy +msgid "Default pie types" +msgstr "Bá»™ thông dịch mặc định" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "_Vẽ" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "_Vẽ" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "Khối phần trăm" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "Lá»—i chuẩn" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +#, fuzzy +msgid "Radar plot." +msgstr "Khối chồng" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "Bá»™ thông dịch mặc định" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "Lá»—i phân tích dòng" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "Toàn bá»™ số" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "Äếm" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "Dòng cần nhập" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "Nguồn" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "Lá»—i phân tích dòng" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "Vùng nguồn" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "Vùng nguồn" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "% cỡ _bình thưá»ng" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "centimét" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +#, fuzzy +msgid "Show _negative values" +msgstr "Xem chi tiết" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "Nguồn" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "_Vẽ" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "Bong bóng" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +msgid "Bubble" +msgstr "Bong bóng" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "Lá»—i phân tích dòng" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "Lá»—i phân tích dòng" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +#, fuzzy +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "Ná»™i suy giữa các Ä‘iểm nhiá»u chiá»u." + +#: plugins/plot_xy/plot-types.xml.in.h:3 +#, fuzzy +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" +"Ná»™i suy tuyến tính giữa các Ä‘iểm nhiá»u chiá»u, kèm đánh dấu tại má»—i Ä‘iểm." + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "Ná»™i suy tuyến tính giữa các Ä‘iểm nhiá»u chiá»u." + +#: plugins/plot_xy/plot-types.xml.in.h:5 +#, fuzzy +msgid "Markers at each point." +msgstr "Äiểm đánh dấu ná»™i suy" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-dimensional points with circle at each point." +msgstr "Ná»™i suy giữa các Ä‘iểm nhiá»u chiá»u, kèm đánh dấu tại má»—i Ä‘iểm." + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ÄÆ°á»ng thẳng" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "Äiểm" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ÄÆ°á»ng thẳng" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/zh_CN.po b/lib/goffice-0.0.4/po/zh_CN.po new file mode 100644 index 0000000000..9c15c4cd55 --- /dev/null +++ b/lib/goffice-0.0.4/po/zh_CN.po @@ -0,0 +1,4384 @@ +# translation of gnumeric.HEAD.zh_CN.po to +# translation of gnumeric.HEAD.zh_CN.po to +# gnumeric simplified chinese translation file. +# Copyright (C) 1998-2001,2003 Free Software Foundation, Inc. +# Dillion Chen , 2001. +# Donald Park , 2001. +# Funda Wang , 2003,2004. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2004-11-28 14:12+0800\n" +"Last-Translator: Funda Wang \n" +"Language-Team: zh_CN \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "目的" + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, fuzzy, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "æ–‡ä»¶åŒ…å«æ— æ•ˆ id (%s) çš„æ’ä»¶ä¿¡æ¯, 指望 %s." + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "ä¸èƒ½ä»Žæ–‡ä»¶ä¸­è¯»å–æ’ä»¶ä¿¡æ¯" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "未知åç§°" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "䏿”¯æŒçš„装入器类型“%sâ€ã€‚" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "当准备装入器“%sâ€æ—¶å‡ºçŽ°é”™è¯¯ã€‚" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "å½“è¯»å–æœåŠ¡ä¿¡æ¯ #%d 时出现错误。" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "ä¸èƒ½è¯»å–æ’ä»¶ä¿¡æ¯æ–‡ä»¶(“%sâ€)。" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "文件 \"%s\" 䏿˜¯æœ‰æ•ˆçš„æ’ä»¶ä¿¡æ¯æ–‡ä»¶." + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "为带有 id=\"%s\" çš„æ’ä»¶è¯»å–æ–‡ä»¶æ—¶å‡ºçŽ°é”™è¯¯." + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "未知æ’ä»¶å。" + +#: goffice/app/go-plugin.c:824 +#, fuzzy, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "为带有 id=\"%s\" çš„æ’件没有定义装入器." + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "æ’件没有 id。" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "åˆå§‹åŒ–æ’件装入器 (\"%s\") 时出现错误." + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +#, fuzzy +msgid "Detected cyclic plugin dependencies." +msgstr "当装入æ’ä»¶ä¾èµ–关系时出现错误." + +#: goffice/app/go-plugin.c:926 +#, fuzzy, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "ä¸èƒ½æ¿€æ´»æ’ä»¶ \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, fuzzy, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "为带有 id=\"%s\" çš„æ’件没有定义装入器." + +#: goffice/app/go-plugin.c:939 +#, fuzzy +msgid "Error while activating plugin dependencies." +msgstr "当装入æ’ä»¶ä¾èµ–关系时出现错误." + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "当激活æ’ä»¶æœåŠ¡ #%d 时出现错误." + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "当䏿¿€æ´»æ’ä»¶æœåŠ¡ #%d 时出现错误." + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "无法装入æ’件装入器。" + +#: goffice/app/go-plugin.c:1099 +#, fuzzy, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "为带有 id=\"%s\" çš„æ’件没有定义装入器." + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "当装入æ’ä»¶ä¾èµ–关系时出现错误." + +#: goffice/app/go-plugin.c:1288 +#, fuzzy, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "当从文件 \"%s\" è¯»å–æ’ä»¶ä¿¡æ¯æ—¶å‡ºçŽ°é”™è¯¯." + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "ä¸èƒ½æ¿€æ´»æ’ä»¶ \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "ä¸èƒ½ä¸æ¿€æ´»æ’ä»¶ \"%s\" (ID: %s)." + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "å½“è¯»å–æœ‰å…³å¯ç”¨æ’ä»¶ä¿¡æ¯æ—¶å‡ºçŽ°é”™è¯¯." + +#: goffice/app/go-plugin.c:1590 +#, fuzzy +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "当䏿¿€æ´»æ’ä»¶æœåŠ¡ #%d 时出现错误." + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "激活æ’件时出错。" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "åˆå§‹åŒ–æ’件系统时出错。" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, fuzzy, c-format +msgid "Service '%s' not supported by l." +msgstr "æœåŠ¡â€œ%sâ€ä¸è¢«è£…入器所支æŒã€‚" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "æ²¡æœ‰ç»™å‡ºæ¨¡å—æ–‡ä»¶å。" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "æ— æ³•æ‰“å¼€æ¨¡å—æ–‡ä»¶â€œ%sâ€ã€‚" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "æ¨¡å—æ–‡ä»¶â€œ%sâ€æ ¼å¼æ— æ•ˆã€‚" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "文件ä¸åŒ…å«(“plugin_file_structâ€ç¬¦å·)。" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "文件的格å¼å·ç æœ‰é”™ã€‚" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "æ’件版本“%sâ€ä¸Žåº”用程åºâ€œ%sâ€ä¸åŒã€‚" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "åœ¨æ­¤ç³»ç»Ÿä¸­ä¸æ”¯æŒåŠ¨æ€æ¨¡å—装入。" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "æ— æ³•å…³é—­æ¨¡å—æ–‡ä»¶â€œ%sâ€ã€‚" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "文件中ä¸åŒ…å«â€œ%sâ€å‡½æ•°ã€‚" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "模å—ä¸åŒ…å«â€œ%sâ€å‡½æ•°ã€‚" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "当装入æ’ä»¶æœåŠ¡æ—¶å‡ºçŽ°é”™è¯¯ã€‚" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "æ’件内部åˆå§‹åŒ–函数返回错误" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "æ’件内部清ç†å‡½æ•°è¿”回错误" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "常规" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "文件打开器无æè¿°" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "文件打开器 - %s" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "è¯»å–æ–‡ä»¶æ—¶å‡ºé”™ã€‚" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "文件ä¿å­˜å™¨æ²¡æœ‰æè¿°" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "文件ä¿å­˜å™¨ - %s" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "ä¿å­˜æ–‡ä»¶æ—¶å‡ºé”™ã€‚" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "æ’件装入器" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "GObject 装入程åº" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "未知æœåŠ¡ç±»åž‹ï¼š%s。" + +#: goffice/app/go-plugin-service.c:1039 +#, fuzzy +msgid "Error reading service information." +msgstr "å½“è¯»å–æœåŠ¡ä¿¡æ¯ #%d 时出现错误." + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "页数" + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "缩进(_I):" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "æœç´¢(_S)" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "对é½" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "引å·(_C):" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "离散" + +#: goffice/graph/gog-axis.c:611 +#, fuzzy +msgid "Discrete mapping" +msgstr "离散" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear" +msgstr "线性" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "逻辑" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Logarithm mapping" +msgstr "对数" + +#: goffice/graph/gog-axis.c:1410 +msgid "Details" +msgstr "细节" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "自动" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "分类(_C)" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "背景" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "最å°(_I)" + +#: goffice/graph/gog-axis.c:1476 +msgid "M_ax" +msgstr "最大值(_A)" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +msgid "_Cross" +msgstr "åå­—(_C)" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "æ ¼å¼" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "标签" + +#: goffice/graph/gog-axis.c:1539 +msgid "MinorGrid" +msgstr "次è¦ç½‘格线" + +#: goffice/graph/gog-axis.c:1542 +msgid "MajorGrid" +msgstr "主è¦ç½‘格线" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +msgid "Major ticks" +msgstr "主è¦ç½‘格线" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "预览" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "模å¼" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +msgid "Position" +msgstr "ä½ç½®" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +msgid "I_nside" +msgstr "内部(_N)" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +msgid "O_utside" +msgstr "外围(_U)" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +msgid "_High" +msgstr "高(_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +msgid "_Inside" +msgstr "内部(_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +msgid "_Invert axis" +msgstr "æ’入数轴(_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +msgid "_Low" +msgstr "低(_L)" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +msgid "_Outside" +msgstr "外围(_O)" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +msgid "_Show Labels" +msgstr "显示标签(_S)" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "类型(_T):" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "图例" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +msgid "Title" +msgstr "标题" + +#: goffice/graph/gog-chart.c:203 +msgid "Grid" +msgstr "网格" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +#, fuzzy +msgid "Plot" +msgstr "点" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "高" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "高度" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "宽" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "宽度" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "(+)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "(-)" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +msgid "Error category" +msgstr "错误类别" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +msgid "Style" +msgstr "æ ·å¼" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +msgid "Values" +msgstr "值" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +msgid "Colo_r:" +msgstr "颜色(_R):" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "显示(_P):" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +msgid "_Line width:" +msgstr "线宽(_L):" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +msgid "_Width:" +msgstr "宽度(_W):" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +msgid "Graph" +msgstr "图表" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "图表" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "åç§°" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "第一步,共两步:选择图表类型" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "第二步,共两步:自定义图表" + +#: goffice/graph/gog-guru.c:1105 +msgid "Customize Chart" +msgstr "自定义图表" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "æ’å…¥(_I)" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "粘贴方法" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "GNOME Office Graph" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +msgid "_Order" +msgstr "顺åº(_O)" + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "定义" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "模å¼" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "æ ·å¼" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "范例" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "æè¿°" + +#: goffice/graph/gog-label.c:108 +msgid "_Text:" +msgstr "文本(_T):" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "æ•°æ®" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "åºåˆ—" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +#, fuzzy +msgid "Plot Type" +msgstr "粘贴方法" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "图表主题" + +#: goffice/graph/gog-series.c:145 +msgid "Index:" +msgstr "索引:" + +#: goffice/graph/gog-series.c:162 +msgid "Settings" +msgstr "设置" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "点" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, c-format +msgid "%d x %d" +msgstr "%d x %d" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "字体" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "æ ·å¼" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +msgid "Fill" +msgstr "å¡«å……" + +#: goffice/graph/gog-style-prefs.glade.h:4 +msgid "Line" +msgstr "线æ¡" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "模å¼" + +#: goffice/graph/gog-style-prefs.glade.h:6 +msgid "Outline" +msgstr "轮廓" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "颜色(_L):" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +msgid "O_utline color:" +msgstr "轮廓颜色(_U):" + +#: goffice/graph/gog-style-prefs.glade.h:13 +msgid "Sha_pe:" +msgstr "形状(_P):" + +#: goffice/graph/gog-style-prefs.glade.h:14 +msgid "Si_ze:" +msgstr "大å°(_Z):" + +#: goffice/graph/gog-style-prefs.glade.h:15 +msgid "St_yle:" +msgstr "æ ·å¼(_Y):" + +#: goffice/graph/gog-style-prefs.glade.h:16 +msgid "T_ype:" +msgstr "类型(_Y):" + +#: goffice/graph/gog-style-prefs.glade.h:17 +msgid "_Background:" +msgstr "背景(_B):" + +#: goffice/graph/gog-style-prefs.glade.h:18 +msgid "_Direction:" +msgstr "æ–¹å‘(_D):" + +#: goffice/graph/gog-style-prefs.glade.h:19 +msgid "_End:" +msgstr "结æŸ(_E):" + +#: goffice/graph/gog-style-prefs.glade.h:20 +msgid "_Fill color:" +msgstr "填充颜色(_F):" + +#: goffice/graph/gog-style-prefs.glade.h:21 +msgid "_Fit:" +msgstr "适åˆ(_F):" + +#: goffice/graph/gog-style-prefs.glade.h:22 +msgid "_Foreground:" +msgstr "剿™¯è‰²(_F):" + +#: goffice/graph/gog-style-prefs.glade.h:23 +msgid "_Pattern:" +msgstr "模å¼(_P):" + +#: goffice/graph/gog-style-prefs.glade.h:24 +msgid "_Select..." +msgstr "选择(_S)..." + +#: goffice/graph/gog-style-prefs.glade.h:25 +msgid "_Size:" +msgstr "大å°(_S):" + +#: goffice/graph/gog-style-prefs.glade.h:26 +msgid "_Start:" +msgstr "开始(_S):" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "é å³(_R)" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "array" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "报告:" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "默认" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +#, fuzzy +msgid "Guppi" +msgstr "分组" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "阿拉伯语" + +#: goffice/gtk/go-charmap-sel.c:75 +#, fuzzy +msgid "Baltic" +msgstr "斜体" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "中欧" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "中文" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:79 +#, fuzzy +msgid "Greek" +msgstr "绿" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:81 +#, fuzzy +msgid "Indian" +msgstr "å¹³å‡(_M)" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "日语" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "æœé²œè¯­" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "土耳其语" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "Unicode" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "è¶Šå—语" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "西欧" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "其它" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "中欧(IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "中欧(ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "中欧(MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "中欧(Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "简体中文(GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "简体中文(GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "简体中文(GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "简体中文(HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "简体中文(Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "ç¹ä½“中文(Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "ç¹ä½“中文(Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "ç¹ä½“中文(EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:168 +#, fuzzy +msgid "Japanese (EUC-JP)" +msgstr "日元" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:173 +#, fuzzy +msgid "Korean (JOHAB)" +msgstr "布尔" + +#: goffice/gtk/go-charmap-sel.c:174 +#, fuzzy +msgid "Korean (UHC)" +msgstr "布尔" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:184 +#, fuzzy +msgid "Unicode (UTF-7)" +msgstr "å–æ¶ˆéšè—(_U)" + +#: goffice/gtk/go-charmap-sel.c:185 +#, fuzzy +msgid "Unicode (UTF-8)" +msgstr "å–æ¶ˆéšè—(_U)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:190 +#, fuzzy +msgid "User Defined" +msgstr "使用下划线" + +#: goffice/gtk/go-charmap-sel.c:191 +#, fuzzy +msgid "Vietnamese (TCVN)" +msgstr "定义åç§°" + +#: goffice/gtk/go-charmap-sel.c:192 +#, fuzzy +msgid "Vietnamese (VISCII)" +msgstr "定义åç§°" + +#: goffice/gtk/go-charmap-sel.c:193 +#, fuzzy +msgid "Vietnamese (VPS)" +msgstr "定义åç§°" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "" + +#: goffice/gtk/go-charmap-sel.c:418 +#, fuzzy +msgid "Locale: " +msgstr "逻辑" + +#: goffice/gtk/go-charmap-sel.c:457 +#, fuzzy +msgid "Conversion Direction" +msgstr "相关" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "æ¾å¼›" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "星期一" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "range" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "粗体" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +#, fuzzy +msgid "dull blue" +msgstr "å•元格值" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "è“" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "array" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "红" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "range" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "time" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "array" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "洋红" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "黄" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "绿" + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "é’" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "超级链接" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "å³å¯¹é½" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "å³å¯¹é½" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "å³å¯¹é½" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "白" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "按数值" + +#: goffice/gtk/go-color-palette.c:472 +msgid "custom" +msgstr "自定义" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +msgid "Custom Color..." +msgstr "自定义颜色..." + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "阴影类型" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +msgid "Orientation" +msgstr "æ–¹å‘" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +#, fuzzy +msgid "Dock the toolbar" +msgstr "如何绘制工具æ " + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "如何绘制工具æ " + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "无法打开文件“%sâ€" + +#: goffice/gtk/goffice-gtk.c:448 +msgid "All Files" +msgstr "全部文件" + +#: goffice/gtk/goffice-gtk.c:453 +msgid "Images" +msgstr "图åƒ" + +#: goffice/gtk/goffice-gtk.c:490 +msgid "Select an Image" +msgstr "选择图åƒ" + +#: goffice/gtk/goffice-gtk.c:508 +msgid "Save as" +msgstr "å¦å­˜ä¸º" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "文件类型(_T):" + +#: goffice/gtk/goffice-gtk.c:551 +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"是一个目录å" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"您没有æƒé™ä¿å­˜åˆ°\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"%2$s 中已ç»å­˜åœ¨å为 %1$s 的文件。\n" +"\n" +"æ‚¨æ˜¯å¦æƒ³è¦è¦†ç›–它?" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "标准" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "粗体" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "粗斜体" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "斜体" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "字体样å¼ï¼š" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "字体:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "预览" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "大å°ï¼š" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "æ•°å­—" + +#: goffice/gtk/go-format-sel.c:76 +msgid "Currency" +msgstr "è´§å¸" + +#: goffice/gtk/go-format-sel.c:77 +msgid "Accounting" +msgstr "会计" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "日期" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "æ—¶é—´" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "百分比" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "分数(_F)" + +#: goffice/gtk/go-format-sel.c:82 +msgid "Scientific" +msgstr "科学计数法" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "文本" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "特殊(_P)" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "自定义" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "è´Ÿæ•°æ ¼å¼" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "æ•°å­—æ ¼å¼" + +#: goffice/gtk/go-format-sel.glade.h:1 +msgid "Ca_tegories:" +msgstr "类别(_T):" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "å°æ•°ä½(_M):" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "输入的原样" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +msgid "Format c_ode:" +msgstr "æ ¼å¼ä»£ç (_O):" + +#: goffice/gtk/go-format-sel.glade.h:13 +msgid "Negative number _format:" +msgstr "è´Ÿæ•°æ ¼å¼(_F):" + +#: goffice/gtk/go-format-sel.glade.h:14 +msgid "Preview:" +msgstr "预览:" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "符å·(_Y):" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "æ ¼å¼(_F):" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "使用åƒåˆ†éš”符(_U)" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "西" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "页é¢å±…中" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +#, fuzzy +msgid "Asia" +msgstr "sigma" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "区域 %i" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "澳大利亚元" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "å—éž rand" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:109 +#, fuzzy +msgid "United Arab Emirates (ar_AE)" +msgstr "阿è”酋迪拉姆" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "巴林第纳尔" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "约丹第纳尔" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "ç§‘å¨ç‰¹ç¬¬çº³å°”" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "利比亚 第纳尔" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "沙特阿拉伯 利雅" + +#: goffice/gtk/go-locale-sel.c:123 +#, fuzzy +msgid "Sudan (ar_SD)" +msgstr "è‹ä¸¹ç¬¬çº³å°”" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "çªå°¼æ–¯ 第纳尔" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Belarussian å¢å¸ƒ" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "ä¿åŠ åˆ©äºš 利未" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "孟加拉塔å¡" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "æ·å…‹ koruna" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +#, fuzzy +msgid "Denmark (da_DK)" +msgstr "丹麦克朗" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +#, fuzzy +msgid "Switzerland/German (de_CH)" +msgstr "瑞士法郎" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +msgid "India/English (en_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "新西兰元" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "è²å¾‹å®¾ 比索" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "å—éž rand" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "阿根廷 austral" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "智利比索" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "哥伦比亚比索" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "哥斯达黎加 colon" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "多米尼加比索" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "样本" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "瓜地马拉 quetzal" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "æ´ªéƒ½æ‹‰ä¸ lempira" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "墨西哥比索" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "è¨å°”瓦多 colon" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "乌拉圭 比索" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "委内瑞拉 bolivar" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "样本" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +#, fuzzy +msgid "Switzerland/French (fr_CH)" +msgstr "瑞士法郎" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +msgid "Armenia (hy_AM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "(i18n)" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "å°åº¦å°¼è¥¿äºš 墿¯”" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +#, fuzzy +msgid "Japan (ja_JP)" +msgstr "日元" + +#: goffice/gtk/go-locale-sel.c:203 +msgid "Georgia (ka_GE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +#, fuzzy +msgid "Korea (ko_KR)" +msgstr "布尔" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +msgid "Lithuania (lt_LT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:208 +msgid "Latvia (lv_LV)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +msgid "Russia (ru_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:224 +msgid "Ukraine/Russian (ru_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "斯洛法克 tolar" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "斯洛法克 tolar" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "阿尔巴尼亚 lek" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "æ–°å—æ–¯æ‹‰å¤« 第纳尔" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "å·´åŸºæ–¯å¦ å¢æ¯”" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "泰国 baht" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +msgid "Ukraine (uk_UA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "å·´åŸºæ–¯å¦ å¢æ¯”" + +#: goffice/gtk/go-locale-sel.c:243 +msgid "Uzbekistan (uz_UZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:244 +msgid "Vietnam (vi_VN)" +msgstr "è¶Šå—(vi_VN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "中国(zh_CN)" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "中国香港特别行政区/中文(zh_HK)" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "新加å¡/中文(zh_SG)" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "䏭国尿¹¾(zh_TW)" + +#: goffice/gtk/go-locale-sel.c:451 +msgid "Current Locale: " +msgstr "当å‰è¯­ç³»ï¼š" + +#: goffice/gtk/go-optionmenu.c:197 +msgid "Menu" +msgstr "èœå•" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "选项èœå•" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +#, fuzzy +msgid "Indicator Spacing" +msgstr "内部填充" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "*周日" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "*周一" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "*周二" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "*周三" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "*周四" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "*周五" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "*周六" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "星期日" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "星期一" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "星期二" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "星期三" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "星期四" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "星期五" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "星期六" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "*一月" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "*二月" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "*三月" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "*四月" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "*五月" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "*六月" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "*七月" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "*八月" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "*乿œˆ" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "*åæœˆ" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "*å一月" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "*å二月" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "一月" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "二月" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "三月" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "四月" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "五月" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "六月" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "七月" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "八月" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "乿œˆ" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "åæœˆ" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "å一月" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "å二月" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "黑" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "è“" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "é’" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "绿" + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "洋红" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "红" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "白" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "黄" + +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "阿è”酋迪拉姆" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "阿富汗尼" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "阿尔巴尼亚 Leke" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "亚美尼亚特拉姆" + +#: goffice/utils/formats.c:393 +#, fuzzy +msgid "Netherlands Antilles, Guilders" +msgstr "è·å…°ç›¾" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "安哥拉 Kwanza" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "阿根廷比索" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "澳大利亚元" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "阿é²å·´ç›¾" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "巴巴多斯元" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "孟加拉塔å¡" + +#: goffice/utils/formats.c:402 +#, fuzzy +msgid "Bulgaria, Leva" +msgstr "ä¿åŠ åˆ©äºš 利未" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "巴林第纳尔" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "布隆迪法郎" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "百慕达元" + +#: goffice/utils/formats.c:406 +#, fuzzy +msgid "Brunei Darussalam, Dollars" +msgstr "汶莱 美元" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "玻利维亚元" + +#: goffice/utils/formats.c:408 +#, fuzzy +msgid "Brazil, Brazil Real" +msgstr "巴西 cruzeiro" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "巴哈马元" + +#: goffice/utils/formats.c:410 +#, fuzzy +msgid "Bhutan, Ngultrum" +msgstr "ä¸ä¸¹ ngultrum" + +#: goffice/utils/formats.c:411 +#, fuzzy +msgid "Botswana, Pulas" +msgstr "æ³¢ä¸ç“¦é‚£ pula" + +#: goffice/utils/formats.c:412 +#, fuzzy +msgid "Belarus, Rubles" +msgstr "Belarussian å¢å¸ƒ" + +#: goffice/utils/formats.c:413 +#, fuzzy +msgid "Belize, Dollars" +msgstr "百里斯 美元" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "加拿大元" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "瑞士法郎" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "智利比索" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "中国人民å¸" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "哥伦比亚比索" + +#: goffice/utils/formats.c:420 +#, fuzzy +msgid "Costa Rica, Colones" +msgstr "哥斯达黎加 colon" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "å¤å·´æ¯”ç´¢" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "好望角埃斯库多" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "塞浦路斯镑" + +#: goffice/utils/formats.c:424 +#, fuzzy +msgid "Czech Republic, Koruny" +msgstr "æ·å…‹ koruna" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "å‰å¸ƒææ³•郎" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "丹麦克朗" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "多米尼加比索" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "阿尔åŠåˆ©äºšç¬¬çº³å°”" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "埃åŠé•‘" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +#, fuzzy +msgid "Ethiopia, Birr" +msgstr "埃塞俄比亚 birr" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "" + +#: goffice/utils/formats.c:434 +#, fuzzy +msgid "Fiji, Dollars" +msgstr "æ–æµŽ 美元" + +#: goffice/utils/formats.c:435 +#, fuzzy +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "ç¦å…‹å…°ç¾¤å²› 英镑" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "英镑" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "è‹ä¸¹é•‘" + +#: goffice/utils/formats.c:439 +#, fuzzy +msgid "Ghana, Cedis" +msgstr "加纳 cedi" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "直布罗陀镑" + +#: goffice/utils/formats.c:441 +#, fuzzy +msgid "Gambia, Dalasi" +msgstr "赞比亚 dalasi" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "几内亚法郎" + +#: goffice/utils/formats.c:443 +#, fuzzy +msgid "Guatemala, Quetzales" +msgstr "瓜地马拉 quetzal" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "盖亚那元" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "港å¸" + +#: goffice/utils/formats.c:446 +#, fuzzy +msgid "Honduras, Lempiras" +msgstr "æ´ªéƒ½æ‹‰ä¸ lempira" + +#: goffice/utils/formats.c:447 +#, fuzzy +msgid "Croatia, Kuna" +msgstr "克罗埃西亚 kuna" + +#: goffice/utils/formats.c:448 +#, fuzzy +msgid "Haiti, Gourdes" +msgstr "海地 å¤å¾·" + +#: goffice/utils/formats.c:449 +#, fuzzy +msgid "Hungary, Forint" +msgstr "匈牙利 forint" + +#: goffice/utils/formats.c:450 +#, fuzzy +msgid "Indonesia, Rupiahs" +msgstr "å°åº¦å°¼è¥¿äºš 墿¯”" + +#: goffice/utils/formats.c:451 +#, fuzzy +msgid "Israel, New Shekels" +msgstr "以色列 谢克尔" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "å°åº¦å¢æ¯”" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "伊拉克第纳尔" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "伊朗里奥" + +#: goffice/utils/formats.c:456 +#, fuzzy +msgid "Iceland, Kronur" +msgstr "冰岛 克朗" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "牙买加元" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "约丹第纳尔" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "日元" + +#: goffice/utils/formats.c:461 +#, fuzzy +msgid "Kenya, Shillings" +msgstr "肯亚 先令" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "" + +#: goffice/utils/formats.c:464 +#, fuzzy +msgid "Comoros, Francs" +msgstr "科摩罗伊斯兰è”邦共和国 法郎" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "ç§‘å¨ç‰¹ç¬¬çº³å°”" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "开曼群岛元" + +#: goffice/utils/formats.c:469 +#, fuzzy +msgid "Kazakstan, Tenge" +msgstr "å·´åŸºæ–¯å¦ å¢æ¯”" + +#: goffice/utils/formats.c:470 +#, fuzzy +msgid "Laos, Kips" +msgstr "è€æŒ kip" + +#: goffice/utils/formats.c:471 +#, fuzzy +msgid "Lebanon, Pounds" +msgstr "黎巴嫩 英镑" + +#: goffice/utils/formats.c:472 +#, fuzzy +msgid "Sri Lanka, Rupees" +msgstr "æ–¯é‡Œå…°å¡ å¢æ¯”" + +#: goffice/utils/formats.c:473 +#, fuzzy +msgid "Liberia, Dollars" +msgstr "利比利亚 美元" + +#: goffice/utils/formats.c:474 +#, fuzzy +msgid "Lesotho, Maloti" +msgstr "赖索托 loti" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "" + +#: goffice/utils/formats.c:477 +#, fuzzy +msgid "Libya, Dinars" +msgstr "利比亚 第纳尔" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "摩洛哥迪拉姆" + +#: goffice/utils/formats.c:479 +#, fuzzy +msgid "Moldova, Lei" +msgstr "摩尔多瓦 leu" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "马达加斯加法郎" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "" + +#: goffice/utils/formats.c:482 +#, fuzzy +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar kyat" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "è’™å¤å›¾æ ¼é‡Œå…‹" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "澳元" + +#: goffice/utils/formats.c:485 +#, fuzzy +msgid "Mauritania, Ouguiyas" +msgstr "毛里塔尼亚 ouguiya" + +#: goffice/utils/formats.c:486 +#, fuzzy +msgid "Malta, Liri" +msgstr "马尔他 里拉" + +#: goffice/utils/formats.c:487 +#, fuzzy +msgid "Mauritius, Rupees" +msgstr "毛里西斯 墿¯”" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "马拉维克瓦查" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "墨西哥比索" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "马æ¥è¥¿äºšæž—å‰ç‰¹" + +#: goffice/utils/formats.c:492 +#, fuzzy +msgid "Mozambique, Meticais" +msgstr "莫桑比克 metical" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "纳米比亚元" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "尼日利亚奈拉" + +#: goffice/utils/formats.c:495 +#, fuzzy +msgid "Nicaragua, Gold Cordobas" +msgstr "尼加拉瓜 cordoba oro" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "挪å¨å…‹æœ—" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "å°¼æ³Šå°”å¢æ¯”" + +#: goffice/utils/formats.c:498 +#, fuzzy +msgid "New Zealand, Dollars" +msgstr "新西兰元" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "阿曼里亚尔" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "巴拿马巴波亚" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "" + +#: goffice/utils/formats.c:502 +#, fuzzy +msgid "Papua New Guinea, Kina" +msgstr "巴布亚新几内亚 kina" + +#: goffice/utils/formats.c:503 +#, fuzzy +msgid "Philippines, Pesos" +msgstr "è²å¾‹å®¾ 比索" + +#: goffice/utils/formats.c:504 +#, fuzzy +msgid "Pakistan, Rupees" +msgstr "å·´åŸºæ–¯å¦ å¢æ¯”" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "" + +#: goffice/utils/formats.c:506 +#, fuzzy +msgid "Paraguay, Guarani" +msgstr "巴拉圭 guarani" + +#: goffice/utils/formats.c:507 +#, fuzzy +msgid "Qatar, Rials" +msgstr "å¡å¡”å°” 里奥" + +#: goffice/utils/formats.c:508 +#, fuzzy +msgid "Romania, Lei" +msgstr "罗马尼亚 leu" + +#: goffice/utils/formats.c:509 +#, fuzzy +msgid "Russia, Rubles" +msgstr "Belarussian å¢å¸ƒ" + +#: goffice/utils/formats.c:510 +#, fuzzy +msgid "Rwanda, Rwanda Francs" +msgstr "å¢å®‰è¾¾ 法郎" + +#: goffice/utils/formats.c:511 +#, fuzzy +msgid "Saudi Arabia, Riyals" +msgstr "沙特阿拉伯 利雅" + +#: goffice/utils/formats.c:512 +#, fuzzy +msgid "Solomon Islands, Dollars" +msgstr "所罗门群岛 美元" + +#: goffice/utils/formats.c:513 +#, fuzzy +msgid "Seychelles, Rupees" +msgstr "塞舌尔 墿¯”" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "è‹ä¸¹ç¬¬çº³å°”" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "新加å¡å…ƒ" + +#: goffice/utils/formats.c:517 +#, fuzzy +msgid "Saint Helena, Pounds" +msgstr "圣海伦 英镑" + +#: goffice/utils/formats.c:518 +#, fuzzy +msgid "Slovenia, Tolars" +msgstr "斯洛法克 tolar" + +#: goffice/utils/formats.c:519 +#, fuzzy +msgid "Slovakia, Koruny" +msgstr "斯洛法克 tolar" + +#: goffice/utils/formats.c:520 +#, fuzzy +msgid "Sierra Leone, Leones" +msgstr "ç‹®å­å±± leone" + +#: goffice/utils/formats.c:521 +#, fuzzy +msgid "Somalia, Shillings" +msgstr "索马里 先令" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +#, fuzzy +msgid "Suriname, Guilders" +msgstr "è‹åˆ©å— 盾" + +#: goffice/utils/formats.c:524 +#, fuzzy +msgid "Sao Tome and Principe, Dobras" +msgstr "åœ£å¤šç¾ŽåŠæ™®æž—西比 dobra" + +#: goffice/utils/formats.c:525 +#, fuzzy +msgid "El Salvador, Colones" +msgstr "è¨å°”瓦多 colon" + +#: goffice/utils/formats.c:526 +#, fuzzy +msgid "Syria, Pounds" +msgstr "å™åˆ©äºš 英镑" + +#: goffice/utils/formats.c:527 +#, fuzzy +msgid "Swaziland, Emalangeni" +msgstr "å²ç“¦æµŽå…° lilangeni" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "æ³°é“¢" + +#: goffice/utils/formats.c:529 +#, fuzzy +msgid "Tajikistan, Rubles" +msgstr "å·´åŸºæ–¯å¦ å¢æ¯”" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +#, fuzzy +msgid "Tunisia, Dinars" +msgstr "çªå°¼æ–¯ 第纳尔" + +#: goffice/utils/formats.c:532 +#, fuzzy +msgid "Tonga, Pa'anga" +msgstr "东加 pa'anga" + +#: goffice/utils/formats.c:533 +#, fuzzy +msgid "Turkey, Liras" +msgstr "土耳其 里拉" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "åƒé‡Œè¾¾å…±å’Œå›½å…ƒ" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "å°æ¹¾æ–°å¸" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "妿¡‘尼亚先令" + +#: goffice/utils/formats.c:538 +#, fuzzy +msgid "Ukraine, Hryvnia" +msgstr "乌å¯å…° hryvnia" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "乌干达先令" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "美元" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "乌拉圭比索" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "" + +#: goffice/utils/formats.c:543 +#, fuzzy +msgid "Venezuela, Bolivares" +msgstr "委内瑞拉 bolivar" + +#: goffice/utils/formats.c:544 +#, fuzzy +msgid "Viet Nam, Dong" +msgstr "è¶Šå— dong" + +#: goffice/utils/formats.c:545 +#, fuzzy +msgid "Vanuatu, Vatu" +msgstr "Vanuatu vatu" + +#: goffice/utils/formats.c:546 +#, fuzzy +msgid "Samoa, Tala" +msgstr "沙门群岛 tala" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "" + +#: goffice/utils/formats.c:550 +#, fuzzy +msgid "East Caribbean Dollars" +msgstr "东加勒比 美元" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "" + +#: goffice/utils/formats.c:553 +msgid "Palladium, Ounces" +msgstr "" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "" + +#: goffice/utils/formats.c:556 +#, fuzzy +msgid "Yemen, Rials" +msgstr "也门 里奥" + +#: goffice/utils/formats.c:557 +#, fuzzy +msgid "Yugoslavia, New Dinars" +msgstr "æ–°å—æ–¯æ‹‰å¤« 第纳尔" + +#: goffice/utils/formats.c:558 +#, fuzzy +msgid "South Africa, Rand" +msgstr "å—éž rand" + +#: goffice/utils/formats.c:559 +#, fuzzy +msgid "Zambia, Kwacha" +msgstr "赞比亚 kwacha" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "津巴布韦元" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "æ— " + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "无色" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "自动" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "æ— " + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "å¹³å‡(_M)" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "range" + +#: goffice/utils/go-marker.c:225 +#, fuzzy +msgid "triangle right" +msgstr "å³è¾¹è½®å»“(_R)" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +#, fuzzy +msgid "circle" +msgstr "文件" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "x" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "粘贴链接" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "*三月" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% ç°åº¦" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% ç°åº¦" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% ç°åº¦" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% ç°åº¦" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "62.5% ç°åº¦" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "水平行数" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "垂直æ¡çº¹" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "åå‘对角线æ¡çº¹" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "对角线æ¡çº¹" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "对角线阴影" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "粗对角线格å­" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "细水平æ¡çº¹" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "细垂直æ¡çº¹" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "细åå‘对角线æ¡çº¹" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "细对角线æ¡çº¹" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "细水平格å­" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "细对角线格å­" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "剿™¯è‰²" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "å°åœ†" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "åŠåœ†" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "茅è‰" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "大圆" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "标签" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "数值" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "处ç†è¡Œå‡ºé”™" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +msgid "O_verlap:" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +#, fuzzy +msgid "_Gap:" +msgstr "_alpha:" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "点" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "点" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Adjacent Columns" +msgstr "删除列" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +#, fuzzy +msgid "3D Percentage Bars" +msgstr "3D 百分比直线" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +#, fuzzy +msgid "3D Percentage Columns" +msgstr "3D 百分比直线" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +#, fuzzy +msgid "3D Stacked Columns" +msgstr "删除列" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +#, fuzzy +msgid "Adjacent Columns" +msgstr "æ’入列" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "区域" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "区域(_A)" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "列" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "直线" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "è¦å¯¼å…¥çš„行" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "直线" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +#, fuzzy +msgid "Percentage Bars" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +#, fuzzy +msgid "Percentage Columns" +msgstr "百分比(_P)" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "百分比(_P)" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +#, fuzzy +msgid "Stacked Areas" +msgstr "删除列" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +#, fuzzy +msgid "Stacked Columns" +msgstr "删除列" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +#, fuzzy +msgid "Stacked Lines" +msgstr "æ ¼å­çº¿(_G)" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +#, fuzzy +msgid "Stacked line plot." +msgstr "删除列" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "æ ¼å­çº¿(_G)" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +#, fuzzy +msgid "Unmarked Stacked Lines" +msgstr "æ ¼å­çº¿(_G)" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "默认解释器" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +#, fuzzy +msgid "Line, Area, Bar and Column plots" +msgstr "行å·åˆ—æ ‡(_L)" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +#, fuzzy +msgid "Box-Plot" +msgstr "点" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "无效的检索模å¼" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +#, fuzzy +msgid "BoxPlot" +msgstr "点" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +#, fuzzy +msgid "BoxPlots" +msgstr "点" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +#, fuzzy +msgid "Box-Plots" +msgstr "点" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "处ç†è¡Œå‡ºé”™" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +#, fuzzy +msgid "Charting : Box-Plots" +msgstr "更改标签颜色" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "默认解释器" + +#: plugins/plot_pie/gog-pie.c:180 +#, fuzzy +msgid "PlotPie" +msgstr "点" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "æ— " + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +#, fuzzy +msgid "_Slice Separation:" +msgstr "分隔符:" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +#, fuzzy +msgid "degrees" +msgstr "度数(_D)" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "分隔符:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "分类:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +#, fuzzy +msgid "3D Pie" +msgstr "区分线" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +#, fuzzy +msgid "3D Split Pie" +msgstr "区分线" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +#, fuzzy +msgid "Multi-pie-bars" +msgstr "多个错误\n" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +#, fuzzy +msgid "Pie" +msgstr "ä»·æ ¼" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +#, fuzzy +msgid "Ring" +msgstr "范围" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +#, fuzzy +msgid "Split Pie" +msgstr "拆分" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "拆分" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +#, fuzzy +msgid "Default pie types" +msgstr "默认解释器" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +#, fuzzy +msgid "PlotRadar" +msgstr "点" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "点" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "百分比(_C)" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +msgid "Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "默认解释器" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "处ç†è¡Œå‡ºé”™" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "inumber" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "计数" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "è¦å¯¼å…¥çš„行" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "æº" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "处ç†è¡Œå‡ºé”™" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "æºåŸŸ" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "æºåŸŸ" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "标准大å°çš„百分比(_N)" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "立体(_D)" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "傿•°" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +msgid "Sur_face" +msgstr "表é¢(_F)" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +#, fuzzy +msgid "PlotXY" +msgstr "点" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "åŒçº¿" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "åŒçº¿" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "处ç†è¡Œå‡ºé”™" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "处ç†è¡Œå‡ºé”™" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "直线" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "点" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "直线" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/po/zh_TW.po b/lib/goffice-0.0.4/po/zh_TW.po new file mode 100644 index 0000000000..1cfe57b3ba --- /dev/null +++ b/lib/goffice-0.0.4/po/zh_TW.po @@ -0,0 +1,4340 @@ +# traditional Chinese translation of gnumeric. +# Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc. +# Pofeng Lee , 1999 +# Abel Cheung , 2001, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: gnumeric 1.1.19\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-03-02 12:38-0500\n" +"PO-Revision-Date: 2003-04-20 09:47+0800\n" +"Last-Translator: Abel Cheung \n" +"Language-Team: Chinese (traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: goffice/app/file.c:500 +msgid "Not a valid UTF-8 filename." +msgstr "" + +#: goffice/app/file.c:510 +msgid "Saving over old files of this type is disabled for safety." +msgstr "" + +#: goffice/app/file.c:512 +msgid "" +"You can turn this safety feature off by editing appropriate plugin.xml file." +msgstr "" + +#: goffice/app/go-object.c:51 +#, fuzzy +msgid "Objects" +msgstr "物件(_O)..." + +#: goffice/app/go-object.c:109 +#, c-format +msgid "Loading plugin '%s' that contains the object '%s'" +msgstr "" + +#: goffice/app/go-plugin.c:344 +#, c-format +msgid "File contains plugin info with invalid id (%s), expected %s." +msgstr "æª”æ¡ˆä¸­çš„å¢žæ•ˆæ¨¡çµ„è³‡è¨Šå«æœ‰ç„¡æ•ˆçš„識別碼 (%s),本來應該是 %s。" + +#: goffice/app/go-plugin.c:348 +msgid "Couldn't read plugin info from file." +msgstr "無法從檔案讀入增效模組資訊。" + +#: goffice/app/go-plugin.c:457 +msgid "Unknown name" +msgstr "å稱ä¸è©³" + +#: goffice/app/go-plugin.c:551 +#, c-format +msgid "Unsupported loader type \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:559 +#, c-format +msgid "Error while preparing loader \"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:636 +#, c-format +msgid "Error while reading service #%d info." +msgstr "" + +#: goffice/app/go-plugin.c:715 +#, c-format +msgid "Can't read plugin info file (\"%s\")." +msgstr "無法讀入增效模組資料檔 (“%sâ€)。" + +#: goffice/app/go-plugin.c:719 +#, c-format +msgid "File \"%s\" is not valid plugin info file." +msgstr "檔案“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„增效模組資料檔。" + +#: goffice/app/go-plugin.c:805 +#, c-format +msgid "Errors while reading services for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:816 +#, c-format +msgid "Plugin id contains invalid characters (%s)." +msgstr "增效模組識別碼中有無效的字元 (%s)。" + +#: goffice/app/go-plugin.c:820 +msgid "Unknown plugin name." +msgstr "增效模組å稱ä¸è©³ã€‚" + +#: goffice/app/go-plugin.c:824 +#, c-format +msgid "No loader defined or loader id invalid for plugin with id=\"%s\"." +msgstr "" + +#: goffice/app/go-plugin.c:830 +msgid "Plugin has no id." +msgstr "增效模組沒有任何識別碼。" + +#: goffice/app/go-plugin.c:871 +#, c-format +msgid "Error initializing plugin loader (\"%s\")." +msgstr "" + +#: goffice/app/go-plugin.c:902 goffice/app/go-plugin.c:1059 +msgid "Detected cyclic plugin dependencies." +msgstr "嵿¸¬åˆ°åœ¨å¢žæ•ˆæ¨¡çµ„中出ç¾å¾ªç’°çš„ç›¸ä¾æ€§ã€‚" + +#: goffice/app/go-plugin.c:926 +#, c-format +msgid "Couldn't activate plugin with id=\"%s\"." +msgstr "無法啟用識別碼為“%sâ€çš„增效模組。" + +#: goffice/app/go-plugin.c:932 goffice/app/go-plugin.c:1105 +#, c-format +msgid "Couldn't find plugin with id=\"%s\"." +msgstr "找ä¸åˆ°è­˜åˆ¥ç¢¼ç‚ºâ€œ%sâ€çš„增效模組。" + +#: goffice/app/go-plugin.c:939 +msgid "Error while activating plugin dependencies." +msgstr "" + +#: goffice/app/go-plugin.c:953 +#, c-format +msgid "Error while activating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1006 +#, c-format +msgid "Error while deactivating plugin service #%d." +msgstr "" + +#: goffice/app/go-plugin.c:1071 goffice/app/go-plugin.c:1092 +msgid "Cannot load plugin loader." +msgstr "" + +#: goffice/app/go-plugin.c:1099 +#, c-format +msgid "Couldn't load plugin with id=\"%s\"." +msgstr "無法載入識別碼為“%sâ€çš„增效模組。" + +#: goffice/app/go-plugin.c:1112 +msgid "Error while loading plugin dependencies." +msgstr "è¼‰å…¥æœ‰é—œå¢žæ•ˆæ¨¡çµ„ç›¸ä¾æ€§çš„資料時發生錯誤。" + +#: goffice/app/go-plugin.c:1288 +#, c-format +msgid "Errors occurred while reading plugin informations from file \"%s\"." +msgstr "從檔案“%sâ€è®€å–增效模組資訊時發生錯誤。" + +#: goffice/app/go-plugin.c:1407 +#, c-format +msgid "Couldn't activate plugin \"%s\" (ID: %s)." +msgstr "無法啟用增效模組“%sâ€(識別碼:%s)。" + +#: goffice/app/go-plugin.c:1442 +#, c-format +msgid "Couldn't deactivate plugin \"%s\" (ID: %s)." +msgstr "無法åœç”¨å¢žæ•ˆæ¨¡çµ„“%sâ€(識別碼:%s)。" + +#: goffice/app/go-plugin.c:1566 goffice/app/go-plugin.c:1710 +msgid "Errors while reading info about available plugins." +msgstr "讀入å¯ç”¨çš„增效模組資料時發生錯誤。" + +#: goffice/app/go-plugin.c:1590 +msgid "Errors while deactivating plugins that are no longer on disk." +msgstr "åœæ­¢ä½¿ç”¨å¢žæ•ˆæ¨¡çµ„時發生錯誤;該增效模組在ç£ç¢Ÿä¸­å·²ç¶“ä¸å­˜åœ¨ã€‚" + +#: goffice/app/go-plugin.c:1611 +#, c-format +msgid "" +"The following plugins are no longer on disk but are still active:\n" +"%s.\n" +"You should restart Gnumeric now." +msgstr "" +"以下的增效模組在ç£ç¢Ÿä¸­å·²ç¶“ä¸å­˜åœ¨ï¼Œä½†ä»åœ¨ä½¿ç”¨ä¸­ï¼š\n" +"%s。\n" +"è«‹ç«‹åˆ»é‡æ–°å•Ÿå‹• Gnumeric。" + +#: goffice/app/go-plugin.c:1733 +msgid "Errors while activating plugins." +msgstr "啟用增效模組時發生錯誤。" + +#: goffice/app/go-plugin.c:1740 +msgid "Errors while initializing plugin system." +msgstr "åˆå§‹åŒ–å¢žæ•ˆæ¨¡çµ„æ”¯æ´æ™‚發生錯誤。" + +#: goffice/app/go-plugin-loader.c:47 +msgid "Loader has no set_attributes method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:62 +msgid "Loader has no load_base method.\n" +msgstr "" + +#: goffice/app/go-plugin-loader.c:107 goffice/app/go-plugin-loader.c:145 +#, c-format +msgid "Service '%s' not supported by l." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:44 +msgid "Module file name not given." +msgstr "未指定模組檔案å稱。" + +#: goffice/app/go-plugin-loader-module.c:80 +#, c-format +msgid "Unable to open module file \"%s\"." +msgstr "無法開啟模組檔案“%sâ€ã€‚" + +#: goffice/app/go-plugin-loader-module.c:85 +#: goffice/app/go-plugin-loader-module.c:241 +#: goffice/app/go-plugin-loader-module.c:304 +#, c-format +msgid "Module file \"%s\" has invalid format." +msgstr "模組檔案“%sâ€çš„æ ¼å¼ç„¡æ•ˆã€‚" + +#: goffice/app/go-plugin-loader-module.c:89 +msgid "File doesn't contain (\"plugin_file_struct\" symbol)." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:92 +msgid "File has a bad magic number." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:95 +#, c-format +msgid "Plugin version \"%s\" is different from application \"%s\"." +msgstr "增效模組版本“%sâ€å’Œç¨‹å¼ç‰ˆæœ¬â€œ%sâ€ä¸ç¬¦åˆã€‚" + +#: goffice/app/go-plugin-loader-module.c:104 +msgid "Dynamic module loading is not supported in this system." +msgstr "" + +#: goffice/app/go-plugin-loader-module.c:118 +#, c-format +msgid "Unable to close module file \"%s\"." +msgstr "無法關閉模組檔案“%sâ€ã€‚" + +#: goffice/app/go-plugin-loader-module.c:244 +#: goffice/app/go-plugin-loader-module.c:307 +#, c-format +msgid "File doesn't contain \"%s\" function." +msgstr "檔案內沒有“%sâ€å‡½æ•¸ã€‚" + +#: goffice/app/go-plugin-loader-module.c:371 +#, c-format +msgid "Module doesn't contain \"%s\" function." +msgstr "模組中沒有“%sâ€å‡½å¼ã€‚" + +#: goffice/app/go-plugin-service.c:156 goffice/app/go-plugin-service.c:851 +msgid "Error while loading plugin service." +msgstr "載入增效模組æœå‹™æ™‚發生錯誤。" + +#: goffice/app/go-plugin-service.c:164 +msgid "Initializing function inside plugin returned error." +msgstr "增效模組內部的åˆå§‹åŒ–函å¼ç™¼ç”ŸéŒ¯èª¤ã€‚" + +#: goffice/app/go-plugin-service.c:182 +msgid "Cleanup function inside plugin returned error." +msgstr "" + +#: goffice/app/go-plugin-service.c:192 goffice/gtk/go-format-sel.c:74 +#: goffice/utils/format.c:2105 goffice/utils/format.c:2419 +#: goffice/utils/format.c:2425 goffice/utils/format.c:2498 +msgid "General" +msgstr "一般" + +#: goffice/app/go-plugin-service.c:343 +msgid "File opener has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:375 +#, c-format +msgid "File opener - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:495 +msgid "Error while reading file." +msgstr "讀入檔案時發生錯誤。" + +#: goffice/app/go-plugin-service.c:661 +msgid "File saver has no description" +msgstr "" + +#: goffice/app/go-plugin-service.c:707 +#, c-format +msgid "File saver - %s" +msgstr "" + +#: goffice/app/go-plugin-service.c:767 +msgid "Error while saving file." +msgstr "儲存檔案時發生錯誤。" + +#: goffice/app/go-plugin-service.c:886 +msgid "Plugin loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:910 +msgid "GObject loader" +msgstr "" + +#: goffice/app/go-plugin-service.c:1017 +msgid "No \"type\" attribute on \"service\" element." +msgstr "" + +#: goffice/app/go-plugin-service.c:1023 +#, c-format +msgid "Unknown service type: %s." +msgstr "" + +#: goffice/app/go-plugin-service.c:1039 +msgid "Error reading service information." +msgstr "" + +#: goffice/app/go-plugin-service.c:1101 +msgid "" +"We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) but " +"loading failed." +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:193 +#: goffice/drawing/god-paragraph-attributes.c:194 +#, fuzzy +msgid "Flags" +msgstr "é " + +#: goffice/drawing/god-paragraph-attributes.c:199 +#: goffice/drawing/god-paragraph-attributes.c:200 +#, fuzzy +msgid "Indent" +msgstr "縮排(_I):" + +#: goffice/drawing/god-paragraph-attributes.c:205 +#: goffice/drawing/god-paragraph-attributes.c:206 +#, fuzzy +msgid "Space Before" +msgstr "æœå°‹(_S)" + +#: goffice/drawing/god-paragraph-attributes.c:211 +#: goffice/drawing/god-paragraph-attributes.c:212 +msgid "Space After" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:217 +#: goffice/drawing/god-paragraph-attributes.c:218 +msgid "Alignment" +msgstr "å°é½Šæ–¹å¼" + +#: goffice/drawing/god-paragraph-attributes.c:223 +#: goffice/drawing/god-paragraph-attributes.c:224 +#, fuzzy +msgid "Bullet Character" +msgstr "䏿˜Žå­—符:" + +#: goffice/drawing/god-paragraph-attributes.c:229 +#: goffice/drawing/god-paragraph-attributes.c:230 +msgid "Bullet Indent" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:235 +#: goffice/drawing/god-paragraph-attributes.c:236 +msgid "Bullet Size" +msgstr "" + +#: goffice/drawing/god-paragraph-attributes.c:241 +#: goffice/drawing/god-paragraph-attributes.c:242 +msgid "Bullet Family" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete" +msgstr "" + +#: goffice/graph/gog-axis.c:611 +msgid "Discrete mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:620 +#, fuzzy +msgid "Linear" +msgstr "線性(_L)" + +#: goffice/graph/gog-axis.c:620 +msgid "Linear mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:626 +#, fuzzy +msgid "Log" +msgstr "é‚輯" + +#: goffice/graph/gog-axis.c:626 +msgid "Logarithm mapping" +msgstr "" + +#: goffice/graph/gog-axis.c:1410 +#, fuzzy +msgid "Details" +msgstr "éš±è—詳細資料" + +#. Color +#: goffice/graph/gog-axis.c:1454 goffice/graph/gog-error-bar.c:224 +#: goffice/graph/gog-style.c:120 goffice/graph/gog-style.c:864 +msgid "Automatic" +msgstr "自動" + +#: goffice/graph/gog-axis.c:1464 +msgid "Categories between _ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1465 +msgid "Categories between _labels" +msgstr "" + +#: goffice/graph/gog-axis.c:1466 +#, fuzzy +msgid "_Cross at category #" +msgstr "類別(_C)" + +#: goffice/graph/gog-axis.c:1472 goffice/graph/gog-axis.c:1486 +#, fuzzy +msgid "Bounds" +msgstr "背景" + +#: goffice/graph/gog-axis.c:1475 +msgid "M_in" +msgstr "最å°å€¼(_I)" + +#: goffice/graph/gog-axis.c:1476 +#, fuzzy +msgid "M_ax" +msgstr "最大值" + +#: goffice/graph/gog-axis.c:1477 +msgid "Ma_jor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1478 +msgid "Mi_nor Ticks" +msgstr "" + +#: goffice/graph/gog-axis.c:1479 goffice/graph/gog-axis-prefs.glade.h:7 +#, fuzzy +msgid "_Cross" +msgstr "關閉(_C)" + +#. TOO CHEESY to go into production +#. * We need a way to toggle auto vs user formats +#. * but the selector is too tall already +#. * disable for now +#: goffice/graph/gog-axis.c:1501 goffice/graph/gog-axis.c:1508 +msgid "Format" +msgstr "æ ¼å¼" + +#: goffice/graph/gog-axis.c:1536 +msgid "Label" +msgstr "標籤" + +#: goffice/graph/gog-axis.c:1539 +#, fuzzy +msgid "MinorGrid" +msgstr "星期五" + +#: goffice/graph/gog-axis.c:1542 +#, fuzzy +msgid "MajorGrid" +msgstr "星期五" + +#: goffice/graph/gog-axis-prefs.glade.h:1 +#, fuzzy +msgid "Major ticks" +msgstr "圖樣" + +#: goffice/graph/gog-axis-prefs.glade.h:2 +#, fuzzy +msgid "Mapping" +msgstr "é è¦½" + +#: goffice/graph/gog-axis-prefs.glade.h:3 +#, fuzzy +msgid "Minor ticks" +msgstr "圖樣" + +#: goffice/graph/gog-axis-prefs.glade.h:4 +#, fuzzy +msgid "Position" +msgstr "é è¦½" + +#: goffice/graph/gog-axis-prefs.glade.h:5 +#, fuzzy +msgid "I_nside" +msgstr "內部" + +#: goffice/graph/gog-axis-prefs.glade.h:6 +#, fuzzy +msgid "O_utside" +msgstr "éš±è—(_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:8 +#, fuzzy +msgid "_High" +msgstr "高度" + +#: goffice/graph/gog-axis-prefs.glade.h:9 +#, fuzzy +msgid "_Inside" +msgstr "內部" + +#: goffice/graph/gog-axis-prefs.glade.h:10 +#, fuzzy +msgid "_Invert axis" +msgstr "æ’å…¥(_I)" + +#: goffice/graph/gog-axis-prefs.glade.h:11 +#, fuzzy +msgid "_Low" +msgstr "行(_R)" + +#: goffice/graph/gog-axis-prefs.glade.h:12 +#, fuzzy +msgid "_Outside" +msgstr "éš±è—(_H)" + +#: goffice/graph/gog-axis-prefs.glade.h:13 +#, fuzzy +msgid "_Show Labels" +msgstr "第 1 行/列為標題(_L)" + +#: goffice/graph/gog-axis-prefs.glade.h:14 +#: goffice/graph/gog-style-prefs.glade.h:27 +msgid "_Type:" +msgstr "類型(_T):" + +#: goffice/graph/gog-chart.c:197 +msgid "Legend" +msgstr "" + +#: goffice/graph/gog-chart.c:200 goffice/graph/gog-graph.c:157 +#: goffice/graph/gog-legend.c:179 +#, fuzzy +msgid "Title" +msgstr "標題:" + +#: goffice/graph/gog-chart.c:203 +#, fuzzy +msgid "Grid" +msgstr "星期五" + +#: goffice/graph/gog-chart.c:206 +msgid "X-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:210 +msgid "Y-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:214 +msgid "Z-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:218 +msgid "Circular-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:222 +msgid "Radial-Axis" +msgstr "" + +#: goffice/graph/gog-chart.c:226 +msgid "Plot" +msgstr "" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "H" +msgstr "H" + +#: goffice/graph/gog-control-foocanvas.c:233 +msgid "Height" +msgstr "高度" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "W" +msgstr "W" + +#: goffice/graph/gog-control-foocanvas.c:236 +msgid "Width" +msgstr "寬度" + +#: goffice/graph/gog-error-bar.c:242 +msgid "No error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:248 goffice/graph/gog-error-bar.c:264 +msgid "Positive error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:253 goffice/graph/gog-error-bar.c:269 +msgid "Negative error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar.c:258 goffice/graph/gog-error-bar.c:274 +msgid "Full error bar displayed" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:1 +msgid "(+)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:2 +msgid "(-)" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:3 +#, fuzzy +msgid "Error category" +msgstr "錯誤警告" + +#: goffice/graph/gog-error-bar-prefs.glade.h:4 +#, fuzzy +msgid "Style" +msgstr "é è¦½" + +#: goffice/graph/gog-error-bar-prefs.glade.h:5 +#, fuzzy +msgid "Values" +msgstr "樣本" + +#: goffice/graph/gog-error-bar-prefs.glade.h:6 +#, fuzzy +msgid "Colo_r:" +msgstr "é¡è‰²ï¼š" + +#: goffice/graph/gog-error-bar-prefs.glade.h:7 +msgid "Dis_play:" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:8 +msgid "" +"None\n" +"Absolute\n" +"Relative\n" +"Percent" +msgstr "" + +#: goffice/graph/gog-error-bar-prefs.glade.h:12 +#, fuzzy +msgid "_Line width:" +msgstr "線段寬度:" + +#: goffice/graph/gog-error-bar-prefs.glade.h:13 +#, fuzzy +msgid "_Width:" +msgstr "為(_W):" + +#. default +#. Cheat and assign a name here, graphs will not have parents until we +#. * support graphs in graphs +#: goffice/graph/gog-graph.c:115 goffice/graph/gog-graph.c:212 +#, fuzzy +msgid "Graph" +msgstr "圖表(_G)" + +#: goffice/graph/gog-graph.c:154 +msgid "Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1066 goffice/graph/gog-series.c:379 +msgid "Name" +msgstr "å稱" + +#: goffice/graph/gog-guru.c:1092 +msgid "Step 1 of 2: Select Chart Type" +msgstr "" + +#: goffice/graph/gog-guru.c:1100 +msgid "Step 2 of 2: Customize Chart" +msgstr "" + +#: goffice/graph/gog-guru.c:1105 +#, fuzzy +msgid "Customize Chart" +msgstr "自é¸é é¦–內容" + +#: goffice/graph/gog-guru.c:1181 +msgid "_Insert" +msgstr "æ’å…¥(_I)" + +#: goffice/graph/gog-guru.c:1239 +#, fuzzy +msgid "_Plot Type" +msgstr "類型(_T):" + +#: goffice/graph/gog-guru.glade.h:1 +msgid "GNOME Office Graph" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:2 +msgid "Pull f_orward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:3 +msgid "Pull to _front" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:4 +msgid "Push b_ackward" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:5 +msgid "Push to _back" +msgstr "" + +#: goffice/graph/gog-guru.glade.h:6 +#, fuzzy +msgid "_Order" +msgstr "釿–°æŽ’列(_O)..." + +#: goffice/graph/gog-guru-type-selector.glade.h:1 +#, fuzzy +msgid "Description" +msgstr "æ–¹å‘" + +#: goffice/graph/gog-guru-type-selector.glade.h:2 +#, fuzzy +msgid "_Plot type" +msgstr "圖樣" + +#: goffice/graph/gog-guru-type-selector.glade.h:3 +#, fuzzy +msgid "_Subtype" +msgstr "é è¦½" + +#: goffice/graph/gog-guru-type-selector.glade.h:4 +#, fuzzy +msgid "Show sample" +msgstr "樣本" + +#: goffice/graph/gog-guru-type-selector.glade.h:5 +#, fuzzy +msgid "Test de description" +msgstr "æè¿°" + +#: goffice/graph/gog-label.c:108 +#, fuzzy +msgid "_Text:" +msgstr "文字" + +#: goffice/graph/gog-label.c:115 goffice/graph/gog-series.c:426 +msgid "Data" +msgstr "資料" + +#: goffice/graph/gog-plot.c:182 +msgid "Series" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:54 +msgid "Plot Engine" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:246 +msgid "Plot Type" +msgstr "" + +#: goffice/graph/gog-plot-engine.c:328 +msgid "Chart Theme" +msgstr "" + +#: goffice/graph/gog-series.c:145 +#, fuzzy +msgid "Index:" +msgstr "縮排(_I):" + +#: goffice/graph/gog-series.c:162 +#, fuzzy +msgid "Settings" +msgstr "字串(_S)" + +#: goffice/graph/gog-series.c:452 +msgid "Point" +msgstr "ä½ç½®" + +#: goffice/graph/gog-style.c:159 goffice/gtk/goffice-gtk.c:413 +#, fuzzy, c-format +msgid "%d x %d" +msgstr "%d行 × %d列" + +#: goffice/graph/gog-style.c:878 +msgid "Font" +msgstr "å­—åž‹" + +#: goffice/graph/gog-style.c:966 +msgid "Style" +msgstr "款å¼" + +#: goffice/graph/gog-style-prefs.glade.h:1 +msgid "" +"2 Colors\n" +"Brightness" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:3 +#, fuzzy +msgid "Fill" +msgstr "é è¦½" + +#: goffice/graph/gog-style-prefs.glade.h:4 +#, fuzzy +msgid "Line" +msgstr "é è¦½" + +#: goffice/graph/gog-style-prefs.glade.h:5 +#, fuzzy +msgid "Marker" +msgstr "圖樣" + +#: goffice/graph/gog-style-prefs.glade.h:6 +#, fuzzy +msgid "Outline" +msgstr "é è¦½" + +#: goffice/graph/gog-style-prefs.glade.h:7 +msgid "Co_lor:" +msgstr "é¡è‰²(_L):" + +#: goffice/graph/gog-style-prefs.glade.h:8 +msgid "" +"None\n" +"Pattern\n" +"Gradient\n" +"Image" +msgstr "" + +#: goffice/graph/gog-style-prefs.glade.h:12 +#, fuzzy +msgid "O_utline color:" +msgstr "é¡è‰²(_C):" + +#: goffice/graph/gog-style-prefs.glade.h:13 +#, fuzzy +msgid "Sha_pe:" +msgstr "é–“è·(_G):" + +#: goffice/graph/gog-style-prefs.glade.h:14 +#, fuzzy +msgid "Si_ze:" +msgstr "大å°ï¼š" + +#: goffice/graph/gog-style-prefs.glade.h:15 +#, fuzzy +msgid "St_yle:" +msgstr "款å¼" + +#: goffice/graph/gog-style-prefs.glade.h:16 +#, fuzzy +msgid "T_ype:" +msgstr "類型(_T):" + +#: goffice/graph/gog-style-prefs.glade.h:17 +#, fuzzy +msgid "_Background:" +msgstr "背景" + +#: goffice/graph/gog-style-prefs.glade.h:18 +#, fuzzy +msgid "_Direction:" +msgstr "æ–¹å‘:" + +#: goffice/graph/gog-style-prefs.glade.h:19 +#, fuzzy +msgid "_End:" +msgstr "çµæŸå­—å…ƒ" + +#: goffice/graph/gog-style-prefs.glade.h:20 +#, fuzzy +msgid "_Fill color:" +msgstr "é¡è‰²(_C):" + +#: goffice/graph/gog-style-prefs.glade.h:21 +#, fuzzy +msgid "_Fit:" +msgstr "為(_W):" + +#: goffice/graph/gog-style-prefs.glade.h:22 +#, fuzzy +msgid "_Foreground:" +msgstr "剿™¯" + +#: goffice/graph/gog-style-prefs.glade.h:23 +#, fuzzy +msgid "_Pattern:" +msgstr "圖樣" + +#: goffice/graph/gog-style-prefs.glade.h:24 +#, fuzzy +msgid "_Select..." +msgstr "鏿“‡(_S)" + +#: goffice/graph/gog-style-prefs.glade.h:25 +#, fuzzy +msgid "_Size:" +msgstr "大å°ï¼š" + +#: goffice/graph/gog-style-prefs.glade.h:26 +#, fuzzy +msgid "_Start:" +msgstr "排åº(_S)" + +#: goffice/graph/gog-style-prefs.glade.h:28 +#, fuzzy +msgid "_brighter" +msgstr "å³(_R)" + +#: goffice/graph/gog-style-prefs.glade.h:29 +#, fuzzy +msgid "_darker" +msgstr "陣列" + +#: goffice/graph/gog-style-prefs.glade.h:30 +#, fuzzy +msgid "pts" +msgstr "點" + +#: goffice/graph/gog-style-prefs.glade.h:31 +msgid "" +"stretched\n" +"wallpaper" +msgstr "" + +#. TODO : have a look at apple's themes +#. An MS Excel-ish theme +#: goffice/graph/gog-theme.c:458 +msgid "Default" +msgstr "é è¨­" + +#. Guppi +#: goffice/graph/gog-theme.c:534 +msgid "Guppi" +msgstr "Guppi" + +#: goffice/gtk/go-charmap-sel.c:74 +msgid "Arabic" +msgstr "阿拉伯文" + +#: goffice/gtk/go-charmap-sel.c:75 +msgid "Baltic" +msgstr "波羅的海語系" + +#: goffice/gtk/go-charmap-sel.c:76 +msgid "Central European" +msgstr "中æ­èªžç³»" + +#: goffice/gtk/go-charmap-sel.c:77 +msgid "Chinese" +msgstr "中文" + +#: goffice/gtk/go-charmap-sel.c:78 +msgid "Cyrillic" +msgstr "西里爾文字" + +#: goffice/gtk/go-charmap-sel.c:79 +msgid "Greek" +msgstr "希臘文" + +#: goffice/gtk/go-charmap-sel.c:80 +msgid "Hebrew" +msgstr "希伯來文" + +#: goffice/gtk/go-charmap-sel.c:81 +msgid "Indian" +msgstr "å°åº¦èªžç³»" + +#: goffice/gtk/go-charmap-sel.c:82 +msgid "Japanese" +msgstr "日文" + +#: goffice/gtk/go-charmap-sel.c:83 +msgid "Korean" +msgstr "韓文" + +#: goffice/gtk/go-charmap-sel.c:84 +msgid "Turkish" +msgstr "土耳其文" + +#: goffice/gtk/go-charmap-sel.c:85 +msgid "Unicode" +msgstr "統一碼" + +#: goffice/gtk/go-charmap-sel.c:86 +msgid "Vietnamese" +msgstr "è¶Šå—æ–‡" + +#: goffice/gtk/go-charmap-sel.c:87 +msgid "Western" +msgstr "西æ­èªžç³»" + +#: goffice/gtk/go-charmap-sel.c:88 goffice/gtk/go-locale-sel.c:75 +msgid "Other" +msgstr "其它" + +#: goffice/gtk/go-charmap-sel.c:118 +msgid "Arabic (IBM-864)" +msgstr "阿拉伯文 (IBM-864)" + +#: goffice/gtk/go-charmap-sel.c:119 +msgid "Arabic (IBM-864-I)" +msgstr "阿拉伯文 (IBM-864-I)" + +#: goffice/gtk/go-charmap-sel.c:120 +msgid "Arabic (ISO-8859-6)" +msgstr "阿拉伯文 (ISO-8859-6)" + +#: goffice/gtk/go-charmap-sel.c:121 +msgid "Arabic (ISO-8859-6-E)" +msgstr "阿拉伯文 (ISO-8859-6-E)" + +#: goffice/gtk/go-charmap-sel.c:123 +msgid "Arabic (ISO-8859-6-I)" +msgstr "阿拉伯文 (ISO-8859-6-I)" + +#: goffice/gtk/go-charmap-sel.c:124 +msgid "Arabic (MacArabic)" +msgstr "阿拉伯文 (MacArabic)" + +#: goffice/gtk/go-charmap-sel.c:125 +msgid "Arabic (Windows-1256)" +msgstr "阿拉伯文 (Windows-1256)" + +#: goffice/gtk/go-charmap-sel.c:126 +msgid "Armenian (ARMSCII-8)" +msgstr "亞美尼亞文字 (ARMSCII-8)" + +#: goffice/gtk/go-charmap-sel.c:127 +msgid "Baltic (ISO-8859-13)" +msgstr "波羅的海語系 (ISO-8859-13)" + +#: goffice/gtk/go-charmap-sel.c:128 +msgid "Baltic (ISO-8859-4)" +msgstr "波羅的海語系 (ISO-8859-4)" + +#: goffice/gtk/go-charmap-sel.c:129 +msgid "Baltic (Windows-1257)" +msgstr "波羅的海語系 (Windows-1257)" + +#: goffice/gtk/go-charmap-sel.c:130 +msgid "Celtic (ISO-8859-14)" +msgstr "塞爾特語系 (ISO-8859-14)" + +#: goffice/gtk/go-charmap-sel.c:131 +msgid "Central European (IBM-852)" +msgstr "中æ­èªžç³» (IBM-852)" + +#: goffice/gtk/go-charmap-sel.c:132 +msgid "Central European (ISO-8859-2)" +msgstr "中æ­èªžç³» (ISO-8859-2)" + +#: goffice/gtk/go-charmap-sel.c:133 +msgid "Central European (MacCE)" +msgstr "中æ­èªžç³» (MacCE)" + +#: goffice/gtk/go-charmap-sel.c:134 +msgid "Central European (Windows-1250)" +msgstr "中æ­èªžç³» (Windows-1250)" + +#: goffice/gtk/go-charmap-sel.c:135 +msgid "Chinese Simplified (GB18030)" +msgstr "簡體中文 (GB18030)" + +#: goffice/gtk/go-charmap-sel.c:136 +msgid "Chinese Simplified (GB2312)" +msgstr "簡體中文 (GB2312)" + +#: goffice/gtk/go-charmap-sel.c:137 +msgid "Chinese Simplified (GBK)" +msgstr "簡體中文 (GBK)" + +#: goffice/gtk/go-charmap-sel.c:138 +msgid "Chinese Simplified (HZ)" +msgstr "簡體中文 (HZ)" + +#: goffice/gtk/go-charmap-sel.c:139 +msgid "Chinese Simplified (Windows-936)" +msgstr "簡體中文 (Windows-936)" + +#: goffice/gtk/go-charmap-sel.c:140 +msgid "Chinese Traditional (Big5)" +msgstr "ç¹é«”中文 (Big5)" + +#: goffice/gtk/go-charmap-sel.c:141 +msgid "Chinese Traditional (Big5-HKSCS)" +msgstr "ç¹é«”中文 (Big5-HKSCS)" + +#: goffice/gtk/go-charmap-sel.c:142 +msgid "Chinese Traditional (EUC-TW)" +msgstr "ç¹é«”中文 (EUC-TW)" + +#: goffice/gtk/go-charmap-sel.c:143 +msgid "Croatian (MacCroatian)" +msgstr "克羅地亞文字 (MacCroatian)" + +#: goffice/gtk/go-charmap-sel.c:144 +msgid "Cyrillic (IBM-855)" +msgstr "西里爾文字 (IBM-855)" + +#: goffice/gtk/go-charmap-sel.c:145 +msgid "Cyrillic (ISO-8859-5)" +msgstr "西里爾文字 (ISO-8859-5)" + +#: goffice/gtk/go-charmap-sel.c:146 +msgid "Cyrillic (ISO-IR-111)" +msgstr "西里爾文字 (ISO-IR-111)" + +#: goffice/gtk/go-charmap-sel.c:147 +msgid "Cyrillic (KOI8-R)" +msgstr "西里爾文字 (KOI8-R)" + +#: goffice/gtk/go-charmap-sel.c:148 +msgid "Cyrillic (MacCyrillic)" +msgstr "西里爾文字 (MacCyrillic)" + +#: goffice/gtk/go-charmap-sel.c:149 +msgid "Cyrillic (Windows-1251)" +msgstr "西里爾文字 (Windows-1251)" + +#: goffice/gtk/go-charmap-sel.c:150 +msgid "Russian (CP-866)" +msgstr "ä¿„æ–‡ (CP-866)" + +#: goffice/gtk/go-charmap-sel.c:151 +msgid "Ukrainian (KOI8-U)" +msgstr "çƒå…‹è˜­æ–‡ (KOI8-U)" + +#: goffice/gtk/go-charmap-sel.c:152 +msgid "Ukrainian (MacUkrainian)" +msgstr "çƒå…‹è˜­æ–‡ (MacUkrainian)" + +#: goffice/gtk/go-charmap-sel.c:153 +msgid "English (ASCII)" +msgstr "英文 (ASCII)" + +#: goffice/gtk/go-charmap-sel.c:154 +msgid "Farsi (MacFarsi)" +msgstr "波斯文字 (MacFarsi)" + +#: goffice/gtk/go-charmap-sel.c:155 +msgid "Georgian (GEOSTD8)" +msgstr "格魯å‰äºžæ–‡å­— (GEOSTD8)" + +#: goffice/gtk/go-charmap-sel.c:156 +msgid "Greek (ISO-8859-7)" +msgstr "希臘文 (ISO-8859-7)" + +#: goffice/gtk/go-charmap-sel.c:157 +msgid "Greek (MacGreek)" +msgstr "希臘文 (MacGreek)" + +#: goffice/gtk/go-charmap-sel.c:158 +msgid "Greek (Windows-1253)" +msgstr "希臘文 (Windows-1253)" + +#: goffice/gtk/go-charmap-sel.c:159 +msgid "Gujarati (MacGujarati)" +msgstr "å¤å‰æ‹‰ç‰¹æ–‡å­— (MacGujarati)" + +#: goffice/gtk/go-charmap-sel.c:160 +msgid "Gurmukhi (MacGurmukhi)" +msgstr "果魯穆奇文字 (MacGurmukhi)" + +#: goffice/gtk/go-charmap-sel.c:161 +msgid "Hebrew (IBM-862)" +msgstr "希伯來文[左至å³] (IBM-862)" + +#: goffice/gtk/go-charmap-sel.c:162 +msgid "Hebrew (ISO-8859-8-E)" +msgstr "希伯來文[左至å³] (ISO-8859-8-E)" + +#: goffice/gtk/go-charmap-sel.c:163 +msgid "Hebrew (ISO-8859-8-I)" +msgstr "希伯來文[左至å³] (ISO-8859-8-I)" + +#: goffice/gtk/go-charmap-sel.c:164 +msgid "Hebrew (MacHebrew)" +msgstr "希伯來文[左至å³] (MacHebrew)" + +#: goffice/gtk/go-charmap-sel.c:165 +msgid "Hebrew (Windows-1255)" +msgstr "希伯來文 (Windows-1255)" + +#: goffice/gtk/go-charmap-sel.c:166 +msgid "Hindi (MacDevanagari)" +msgstr "梵文 (MacDevanagari)" + +#: goffice/gtk/go-charmap-sel.c:167 +msgid "Icelandic (MacIcelandic)" +msgstr "冰島文字 (MacIcelandic)" + +#: goffice/gtk/go-charmap-sel.c:168 +msgid "Japanese (EUC-JP)" +msgstr "日文 (EUC-JP)" + +#: goffice/gtk/go-charmap-sel.c:169 +msgid "Japanese (ISO-2022-JP)" +msgstr "日文 (ISO-2022-JP)" + +#: goffice/gtk/go-charmap-sel.c:170 +msgid "Japanese (Shift_JIS)" +msgstr "日文 (Shift_JIS)" + +#: goffice/gtk/go-charmap-sel.c:171 +msgid "Korean (EUC-KR)" +msgstr "韓文 (EUC-KR)" + +#: goffice/gtk/go-charmap-sel.c:172 +msgid "Korean (ISO-2022-KR)" +msgstr "韓文 (ISO-2022-KR)" + +#: goffice/gtk/go-charmap-sel.c:173 +msgid "Korean (JOHAB)" +msgstr "韓文 (JOHAB)" + +#: goffice/gtk/go-charmap-sel.c:174 +msgid "Korean (UHC)" +msgstr "韓文 (UHC)" + +#: goffice/gtk/go-charmap-sel.c:175 +msgid "Nordic (ISO-8859-10)" +msgstr "北æ­èªžç³» (ISO-8859-10)" + +#: goffice/gtk/go-charmap-sel.c:176 +msgid "Romanian (MacRomanian)" +msgstr "羅馬尼亞文 (MacRomanian)" + +#: goffice/gtk/go-charmap-sel.c:177 +msgid "Romanian (ISO-8859-16)" +msgstr "羅馬尼亞文 (ISO-8859-16)" + +#: goffice/gtk/go-charmap-sel.c:178 +msgid "South European (ISO-8859-3)" +msgstr "å—æ­èªžç³» (ISO-8859-3)" + +#: goffice/gtk/go-charmap-sel.c:179 +msgid "Thai (TIS-620)" +msgstr "æ³°æ–‡ (TIS-620)" + +#: goffice/gtk/go-charmap-sel.c:180 +msgid "Turkish (IBM-857)" +msgstr "土耳其文 (IBM-857)" + +#: goffice/gtk/go-charmap-sel.c:181 +msgid "Turkish (ISO-8859-9)" +msgstr "土耳其文 (ISO-8859-9)" + +#: goffice/gtk/go-charmap-sel.c:182 +msgid "Turkish (MacTurkish)" +msgstr "土耳其文 (MacTurkish)" + +#: goffice/gtk/go-charmap-sel.c:183 +msgid "Turkish (Windows-1254)" +msgstr "土耳其文 (Windows-1254)" + +#: goffice/gtk/go-charmap-sel.c:184 +msgid "Unicode (UTF-7)" +msgstr "統一碼 (UTF-7)" + +#: goffice/gtk/go-charmap-sel.c:185 +msgid "Unicode (UTF-8)" +msgstr "統一碼 (UTF-8)" + +#: goffice/gtk/go-charmap-sel.c:186 +msgid "Unicode (UTF-16BE)" +msgstr "統一碼 (UTF-16BE)" + +#: goffice/gtk/go-charmap-sel.c:187 +msgid "Unicode (UTF-16LE)" +msgstr "統一碼 (UTF-16LE)" + +#: goffice/gtk/go-charmap-sel.c:188 +msgid "Unicode (UTF-32BE)" +msgstr "統一碼 (UTF-32BE)" + +#: goffice/gtk/go-charmap-sel.c:189 +msgid "Unicode (UTF-32LE)" +msgstr "統一碼 (UTF-32LE)" + +#: goffice/gtk/go-charmap-sel.c:190 +msgid "User Defined" +msgstr "自é¸" + +#: goffice/gtk/go-charmap-sel.c:191 +msgid "Vietnamese (TCVN)" +msgstr "è¶Šå—æ–‡ (TCVN)" + +#: goffice/gtk/go-charmap-sel.c:192 +msgid "Vietnamese (VISCII)" +msgstr "è¶Šå—æ–‡ (VISCII)" + +#: goffice/gtk/go-charmap-sel.c:193 +msgid "Vietnamese (VPS)" +msgstr "è¶Šå—æ–‡ (VPS)" + +#: goffice/gtk/go-charmap-sel.c:194 +msgid "Vietnamese (Windows-1258)" +msgstr "è¶Šå—æ–‡ (Windows-1258)" + +#: goffice/gtk/go-charmap-sel.c:195 +msgid "Visual Hebrew (ISO-8859-8)" +msgstr "希伯來文 (ISO-8859-8)" + +#: goffice/gtk/go-charmap-sel.c:196 +msgid "Western (IBM-850)" +msgstr "西æ­èªžç³» (IBM-850)" + +#: goffice/gtk/go-charmap-sel.c:197 +msgid "Western (ISO-8859-1)" +msgstr "西æ­èªžç³» (ISO-8859-1)" + +#: goffice/gtk/go-charmap-sel.c:198 +msgid "Western (ISO-8859-15)" +msgstr "西æ­èªžç³» (ISO-8859-15)" + +#: goffice/gtk/go-charmap-sel.c:199 +msgid "Western (MacRoman)" +msgstr "西æ­èªžç³» (MacRoman)" + +#: goffice/gtk/go-charmap-sel.c:200 +msgid "Western (Windows-1252)" +msgstr "西æ­èªžç³» (Windows-1252)" + +#: goffice/gtk/go-charmap-sel.c:418 +msgid "Locale: " +msgstr "地å€è¨­å®šï¼š" + +#: goffice/gtk/go-charmap-sel.c:457 +msgid "Conversion Direction" +msgstr "è½‰æ›æ–¹å‘:" + +#: goffice/gtk/go-charmap-sel.c:458 +msgid "This value determines which iconv test to perform." +msgstr "本數值決定 iconv 會進行甚麼測試。" + +#: goffice/gtk/go-color-palette.c:95 +#, fuzzy +msgid "black" +msgstr "黑" + +#: goffice/gtk/go-color-palette.c:96 +msgid "light brown" +msgstr "" + +#: goffice/gtk/go-color-palette.c:97 +msgid "brown gold" +msgstr "" + +#: goffice/gtk/go-color-palette.c:98 +msgid "dark green #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:99 +#, fuzzy +msgid "navy" +msgstr "星期一" + +#: goffice/gtk/go-color-palette.c:100 goffice/gtk/go-color-palette.c:152 +msgid "dark blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:101 +msgid "purple #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:102 +msgid "very dark gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:104 goffice/gtk/go-color-palette.c:157 +msgid "dark red" +msgstr "" + +#: goffice/gtk/go-color-palette.c:105 +#, fuzzy +msgid "red-orange" +msgstr "範åœ" + +#: goffice/gtk/go-color-palette.c:106 +#, fuzzy +msgid "gold" +msgstr "ç²—é«”" + +#: goffice/gtk/go-color-palette.c:107 +msgid "dark green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:108 goffice/gtk/go-color-palette.c:158 +msgid "dull blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:109 goffice/gtk/go-color-palette.c:159 +#, fuzzy +msgid "blue" +msgstr "è—" + +#: goffice/gtk/go-color-palette.c:110 +msgid "dull purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:111 +#, fuzzy +msgid "dark gray" +msgstr "陣列" + +#: goffice/gtk/go-color-palette.c:113 +#, fuzzy +msgid "red" +msgstr "ç´…" + +#: goffice/gtk/go-color-palette.c:114 +#, fuzzy +msgid "orange" +msgstr "範åœ" + +#: goffice/gtk/go-color-palette.c:115 +#, fuzzy +msgid "lime" +msgstr "時間" + +#: goffice/gtk/go-color-palette.c:116 +msgid "dull green" +msgstr "" + +#: goffice/gtk/go-color-palette.c:117 +msgid "dull blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:118 +msgid "sky blue #2" +msgstr "" + +#: goffice/gtk/go-color-palette.c:119 goffice/gtk/go-color-palette.c:156 +msgid "purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:120 +#, fuzzy +msgid "gray" +msgstr "陣列" + +#: goffice/gtk/go-color-palette.c:122 goffice/gtk/go-color-palette.c:153 +#, fuzzy +msgid "magenta" +msgstr "æ´‹ç´…" + +#: goffice/gtk/go-color-palette.c:123 +msgid "bright orange" +msgstr "" + +#: goffice/gtk/go-color-palette.c:124 goffice/gtk/go-color-palette.c:154 +#, fuzzy +msgid "yellow" +msgstr "黃" + +#: goffice/gtk/go-color-palette.c:125 +#, fuzzy +msgid "green" +msgstr "ç¶ " + +#: goffice/gtk/go-color-palette.c:126 goffice/gtk/go-color-palette.c:155 +#, fuzzy +msgid "cyan" +msgstr "æ°°è—" + +#: goffice/gtk/go-color-palette.c:127 +msgid "bright blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:128 goffice/gtk/go-color-palette.c:144 +msgid "red purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:129 +msgid "light gray" +msgstr "" + +#: goffice/gtk/go-color-palette.c:131 goffice/gtk/go-color-palette.c:148 +#, fuzzy +msgid "pink" +msgstr "è¶…éˆçµ" + +#: goffice/gtk/go-color-palette.c:132 +#, fuzzy +msgid "light orange" +msgstr "å‘å³å°é½Š" + +#: goffice/gtk/go-color-palette.c:133 goffice/gtk/go-color-palette.c:145 +msgid "light yellow" +msgstr "" + +#: goffice/gtk/go-color-palette.c:134 +#, fuzzy +msgid "light green" +msgstr "å‘å³å°é½Š" + +#: goffice/gtk/go-color-palette.c:135 +#, fuzzy +msgid "light cyan" +msgstr "å‘å³å°é½Š" + +#: goffice/gtk/go-color-palette.c:136 goffice/gtk/go-color-palette.c:146 +msgid "light blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:137 goffice/gtk/go-color-palette.c:150 +msgid "light purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:138 +#, fuzzy +msgid "white" +msgstr "白" + +#. Disable these for now, they are mostly repeats +#: goffice/gtk/go-color-palette.c:143 +msgid "purplish blue" +msgstr "" + +#: goffice/gtk/go-color-palette.c:147 +msgid "dark purple" +msgstr "" + +#: goffice/gtk/go-color-palette.c:149 +#, fuzzy +msgid "sky blue" +msgstr "æˆç‚ºè®Šæ•¸å€¼" + +#: goffice/gtk/go-color-palette.c:472 +#, fuzzy +msgid "custom" +msgstr "自訂" + +#: goffice/gtk/go-color-palette.c:479 goffice/gtk/go-color-palette.c:708 +#, fuzzy +msgid "Custom Color..." +msgstr "自é¸é å°¾å…§å®¹" + +#: goffice/gtk/go-dock-item.c:235 goffice/gtk/go-dock-item.c:236 +msgid "Shadow type" +msgstr "" + +#: goffice/gtk/go-dock-item.c:246 goffice/gtk/go-dock-item.c:247 +#, fuzzy +msgid "Orientation" +msgstr "æ–¹å‘" + +#: goffice/gtk/go-dock-item.c:257 goffice/gtk/go-dock-item.c:258 +msgid "Preferred width" +msgstr "" + +#: goffice/gtk/go-dock-item.c:266 goffice/gtk/go-dock-item.c:267 +msgid "Preferred height" +msgstr "" + +#: goffice/gtk/go-dock-item-grip.c:260 +#, fuzzy +msgid "Dock the toolbar" +msgstr "如何顯示工具列" + +#: goffice/gtk/go-dock-item-grip.c:261 +#, fuzzy +msgid "Un dock the toolbar" +msgstr "如何顯示工具列" + +#: goffice/gtk/goffice-gtk.c:138 +#, c-format +msgid "Unable to open file '%s'" +msgstr "無法開啟檔案‘%s’" + +#: goffice/gtk/goffice-gtk.c:448 +#, fuzzy +msgid "All Files" +msgstr "檔案(_F)" + +#: goffice/gtk/goffice-gtk.c:453 +#, fuzzy +msgid "Images" +msgstr "圖片(_I)..." + +#: goffice/gtk/goffice-gtk.c:490 +#, fuzzy +msgid "Select an Image" +msgstr "é¸å–整列" + +#: goffice/gtk/goffice-gtk.c:508 +#, fuzzy +msgid "Save as" +msgstr "全部儲存" + +#: goffice/gtk/goffice-gtk.c:530 +msgid "File _type:" +msgstr "檔案類型(_T):" + +#: goffice/gtk/goffice-gtk.c:551 +#, fuzzy +msgid "" +"The given file extension does not match the chosen file type. Do you want to " +"use this name anyway?" +msgstr "指定的延伸檔åå’Œé¸å®šçš„æª”案格å¼ä¸ç›¸ç¬¦ã€‚是å¦ä»ç„¶ç¢ºå®šä½¿ç”¨é€™å€‹æª”案å稱?" + +#: goffice/gtk/goffice-gtk.c:734 +#, c-format +msgid "" +"%s\n" +"is a directory name" +msgstr "" +"%s\n" +"是一個目錄" + +#: goffice/gtk/goffice-gtk.c:738 +#, c-format +msgid "" +"You do not have permission to save to\n" +"%s" +msgstr "" +"您沒有權é™å°‡å…§å®¹å„²å­˜è‡³\n" +"%s" + +#: goffice/gtk/goffice-gtk.c:745 +#, fuzzy, c-format +msgid "" +"A file called %s already exists in %s.\n" +"\n" +"Do you want to save over it?" +msgstr "" +"æ´»é ç°¿ %s 已經存在。\n" +"是å¦è¦è¦†å¯«å…§å®¹ï¼Ÿ" + +#: goffice/gtk/go-font-sel.c:174 +msgid "Normal" +msgstr "" + +#: goffice/gtk/go-font-sel.c:175 +msgid "Bold" +msgstr "ç²—é«”" + +#: goffice/gtk/go-font-sel.c:176 +msgid "Bold italic" +msgstr "粗斜體" + +#: goffice/gtk/go-font-sel.c:177 +msgid "Italic" +msgstr "斜體" + +#. xgettext: This text is used as a sample when selecting a font +#. * please choose a translation that would produce common +#. * characters specific to the target alphabet. +#: goffice/gtk/go-font-sel.c:446 +msgid "AaBbCcDdEe12345" +msgstr "" + +#: goffice/gtk/go-font-sel.glade.h:1 +msgid "*" +msgstr "*" + +#: goffice/gtk/go-font-sel.glade.h:2 +msgid "Font style:" +msgstr "字款:" + +#: goffice/gtk/go-font-sel.glade.h:3 +msgid "Font:" +msgstr "字型:" + +#: goffice/gtk/go-font-sel.glade.h:4 +msgid "Preview" +msgstr "é è¦½" + +#: goffice/gtk/go-font-sel.glade.h:5 +msgid "Size:" +msgstr "大å°ï¼š" + +#: goffice/gtk/go-format-sel.c:75 +msgid "Number" +msgstr "數字" + +#: goffice/gtk/go-format-sel.c:76 +#, fuzzy +msgid "Currency" +msgstr "貨幣(_C)" + +#: goffice/gtk/go-format-sel.c:77 +#, fuzzy +msgid "Accounting" +msgstr "會計(_A)" + +#: goffice/gtk/go-format-sel.c:78 +msgid "Date" +msgstr "日期" + +#: goffice/gtk/go-format-sel.c:79 +msgid "Time" +msgstr "時間" + +#: goffice/gtk/go-format-sel.c:80 +msgid "Percentage" +msgstr "百分比" + +#: goffice/gtk/go-format-sel.c:81 +#, fuzzy +msgid "Fraction" +msgstr "分數(_F)" + +#: goffice/gtk/go-format-sel.c:82 +#, fuzzy +msgid "Scientific" +msgstr "科學記數法(_S)" + +#: goffice/gtk/go-format-sel.c:83 +msgid "Text" +msgstr "文字" + +#: goffice/gtk/go-format-sel.c:84 +#, fuzzy +msgid "Special" +msgstr "特別(_P)" + +#: goffice/gtk/go-format-sel.c:85 +msgid "Custom" +msgstr "自訂" + +#: goffice/gtk/go-format-sel.c:956 +msgid "Negative Number Format" +msgstr "負數格å¼" + +#: goffice/gtk/go-format-sel.c:978 +msgid "Number Formats" +msgstr "數字格å¼" + +#: goffice/gtk/go-format-sel.glade.h:1 +#, fuzzy +msgid "Ca_tegories:" +msgstr "分類:" + +#: goffice/gtk/go-format-sel.glade.h:2 +msgid "Deci_mal places:" +msgstr "å°æ•¸ä½(_M):" + +#: goffice/gtk/go-format-sel.glade.h:3 +msgid "Display amounts in traditional accounting styles." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:4 +msgid "Display and input values as strings with no interpretation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:5 +msgid "Display currency amounts." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:6 +msgid "Display dates and optionally times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:7 +msgid "Display numeric values with a fixed number of decimals." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:8 +msgid "Display times of day." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:9 +msgid "Display values as closest fractional approximation." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:10 +#, fuzzy +msgid "Display values as percentages." +msgstr "è¼¸å…¥çš„å€¼ä¸æœƒåŠ ä¸Šä»»ä½•è™•ç†" + +#: goffice/gtk/go-format-sel.glade.h:11 +msgid "Display values with power-of-ten scaling." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:12 +#, fuzzy +msgid "Format c_ode:" +msgstr "æ ¼å¼(_F):" + +#: goffice/gtk/go-format-sel.glade.h:13 +#, fuzzy +msgid "Negative number _format:" +msgstr "負數格å¼" + +#: goffice/gtk/go-format-sel.glade.h:14 +#, fuzzy +msgid "Preview:" +msgstr "é è¦½" + +#: goffice/gtk/go-format-sel.glade.h:15 +msgid "S_ymbol:" +msgstr "符號(_Y):" + +#: goffice/gtk/go-format-sel.glade.h:16 +msgid "Select an appropriate format automatically." +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:17 +msgid "Specify an XL-style format directly" +msgstr "" + +#: goffice/gtk/go-format-sel.glade.h:18 +msgid "_Format:" +msgstr "æ ¼å¼(_F):" + +#: goffice/gtk/go-format-sel.glade.h:19 +msgid "_Use Separator for 1000's" +msgstr "æ¯ä¸‰å€‹ä½åŠ ä¸Šåˆ†éš”è™Ÿ(_U)" + +#: goffice/gtk/go-locale-sel.c:68 +#, fuzzy +msgid "Western Europe" +msgstr "西æ­èªžç³»" + +#: goffice/gtk/go-locale-sel.c:69 +#, fuzzy +msgid "Eastern Europe" +msgstr "中æ­èªžç³»" + +#: goffice/gtk/go-locale-sel.c:70 +msgid "North America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:71 +msgid "South & Central America" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:72 +msgid "Asia" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:73 +#, fuzzy +msgid "Africa" +msgstr "阿拉伯文" + +#: goffice/gtk/go-locale-sel.c:74 +#, fuzzy +msgid "Australia" +msgstr "Australia 澳洲 (澳元)" + +#. +#. * The format here is "Country/Language (locale)" or just +#. * "Country (locale)" when there is only one choice or one +#. * very dominant language. +#. * +#. * Note: lots of people get very emotional over this. Please +#. * err on the safe side, if any. +#. +#: goffice/gtk/go-locale-sel.c:106 +msgid "United States/English (C)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:107 +#, fuzzy +msgid "South Africa Afrikaans (af_ZA)" +msgstr "South Africa å—éž (蘭特)" + +#: goffice/gtk/go-locale-sel.c:108 +msgid "Ethiopia/Amharic (am_ET)" +msgstr "" + +# FIXME: The currency symbol list is sorted alphabetically. +# So english name has to come first. -- Abel +# REFERENCE: +# http://www.cybertranslator.idv.tw/comeco_currencies.htm +# http://www.cp-edu.com/ciku/TW/CIKU/free_html/fl_sjzyhbjb.asp +#: goffice/gtk/go-locale-sel.c:109 +#, fuzzy +msgid "United Arab Emirates (ar_AE)" +msgstr "United Arab Emirates 阿拉伯è¯åˆå¤§å…¬åœ‹ (迪拉姆)" + +#: goffice/gtk/go-locale-sel.c:110 +#, fuzzy +msgid "Bahrain (ar_BH)" +msgstr "Bahrain å·´æž— (第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:111 +msgid "Algeria (ar_DZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:112 +msgid "Egypt (ar_EG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:113 +msgid "India/Arabic (ar_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:114 +msgid "Iraq (ar_IQ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:115 +#, fuzzy +msgid "Jordan (ar_JO)" +msgstr "Jordan ç´„æ—¦ (第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:116 +#, fuzzy +msgid "Kuwait (ar_KW)" +msgstr "Kuwait ç§‘å¨ç‰¹ (第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:117 +msgid "Lebanon (ar_LB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:118 +#, fuzzy +msgid "Libya (ar_LY)" +msgstr "Libya 利比亞 (第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:119 +msgid "Morocco (ar_MA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:120 +msgid "Oman (ar_OM)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:121 +msgid "Qatar (ar_QA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:122 +#, fuzzy +msgid "Saudi Arabia (ar_SA)" +msgstr "Saudi Arabia æ²™çƒåœ°é˜¿æ‹‰ä¼¯ (里亞爾)" + +#: goffice/gtk/go-locale-sel.c:123 +#, fuzzy +msgid "Sudan (ar_SD)" +msgstr "Sudan 蘇丹 (第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:124 +msgid "Syria (ar_SY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:125 +#, fuzzy +msgid "Tunisia (ar_TN)" +msgstr "Tunisia çªå°¼è¥¿äºž (第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:126 +msgid "Yemen (ar_YE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:127 +msgid "Azerbaijan (az_AZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:128 +#, fuzzy +msgid "Belarus (be_BY)" +msgstr "Belarus 白俄羅斯 (盧布)" + +#: goffice/gtk/go-locale-sel.c:129 +#, fuzzy +msgid "Bulgaria (bg_BG)" +msgstr "Bulgaria ä¿åŠ åˆ©äºž (列弗)" + +#: goffice/gtk/go-locale-sel.c:130 +#, fuzzy +msgid "Bangladesh (bn_BD)" +msgstr "Bangladesh 孟加拉 (å¡”å¡)" + +#: goffice/gtk/go-locale-sel.c:131 +msgid "India/Bengali (bn_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:132 +msgid "France/Breton (br_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:133 +msgid "Bosnia and Herzegowina (bs_BA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:134 +msgid "Spain/Catalan (ca_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:135 +#, fuzzy +msgid "Czech Republic (cs_CZ)" +msgstr "Czech Republic æ·å…‹å…±å’Œåœ‹ (克郎)" + +#: goffice/gtk/go-locale-sel.c:136 +msgid "Great Britain/Welsh (cy_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:137 +#, fuzzy +msgid "Denmark (da_DK)" +msgstr "Denmark 丹麥 (克郎)" + +#: goffice/gtk/go-locale-sel.c:138 +msgid "Austria (de_AT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:139 +msgid "Belgium/German (de_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:140 +#, fuzzy +msgid "Switzerland/German (de_CH)" +msgstr "Switzerland 瑞士 (法郎)" + +#: goffice/gtk/go-locale-sel.c:141 +msgid "Germany (de_DE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:142 +msgid "Luxembourg/German (de_LU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:143 +msgid "Greece (el_GR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:144 +msgid "Australia (en_AU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:145 +msgid "Botswana (en_BW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:146 +msgid "Canada/English (en_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:147 +msgid "Great Britain (en_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:148 +msgid "Hong Kong/English (en_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:149 +msgid "Ireland (en_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:150 +#, fuzzy +msgid "India/English (en_IN)" +msgstr "英文 (ASCII)" + +#: goffice/gtk/go-locale-sel.c:151 +#, fuzzy +msgid "New Zealand (en_NZ)" +msgstr "New Zealand 新西蘭 (新西蘭元)" + +#: goffice/gtk/go-locale-sel.c:152 +#, fuzzy +msgid "Philippines (en_PH)" +msgstr "Philippines è²å¾‹è³“ (披索)" + +#: goffice/gtk/go-locale-sel.c:153 +msgid "Singapore/English (en_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:154 +msgid "United States/English (en_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:155 +#, fuzzy +msgid "South Africa/English (en_ZA)" +msgstr "South Africa å—éž (蘭特)" + +#: goffice/gtk/go-locale-sel.c:156 +msgid "Zimbabwe (en_ZW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:157 +msgid "Esperanto (eo_EO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:158 +#, fuzzy +msgid "Argentina (es_AR)" +msgstr "Argentina 阿根廷 (披索)" + +#: goffice/gtk/go-locale-sel.c:159 +msgid "Bolivia (es_BO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:160 +#, fuzzy +msgid "Chile (es_CL)" +msgstr "Chile 智利 (披索)" + +#: goffice/gtk/go-locale-sel.c:161 +#, fuzzy +msgid "Colombia (es_CO)" +msgstr "Colombia 哥倫比亞 (披索)" + +#: goffice/gtk/go-locale-sel.c:162 +#, fuzzy +msgid "Costa Rica (es_CR)" +msgstr "Costa Rica 哥斯大黎加 (科郎)" + +#: goffice/gtk/go-locale-sel.c:163 +#, fuzzy +msgid "Dominican Republic (es_DO)" +msgstr "Dominican Republic 多明尼加共和國 (披索)" + +#: goffice/gtk/go-locale-sel.c:164 +msgid "Ecuador (es_EC)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:165 +#, fuzzy +msgid "Spain (es_ES)" +msgstr "抽樣 (%s)" + +#: goffice/gtk/go-locale-sel.c:166 +#, fuzzy +msgid "Guatemala (es_GT)" +msgstr "Guatemala 瓜地馬拉 (格查爾)" + +#: goffice/gtk/go-locale-sel.c:167 +#, fuzzy +msgid "Honduras (es_HN)" +msgstr "Honduras å®éƒ½æ‹‰æ–¯ (倫皮拉)" + +#: goffice/gtk/go-locale-sel.c:168 +#, fuzzy +msgid "Mexico (es_MX)" +msgstr "Mexico 墨西哥 (披索)" + +#: goffice/gtk/go-locale-sel.c:169 +msgid "Nicaragua (es_NI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:170 +msgid "Panama (es_PA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:171 +msgid "Peru (es_PE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:172 +msgid "Puerto Rico (es_PR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:173 +msgid "Paraguay (es_PY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:174 +#, fuzzy +msgid "El Salvador (es_SV)" +msgstr "El Salvador 薩爾瓦多 (科郎)" + +#: goffice/gtk/go-locale-sel.c:175 +msgid "United States/Spanish (es_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:176 +#, fuzzy +msgid "Uruguay (es_UY)" +msgstr "Uruguay çƒæ‹‰åœ­ (新披索)" + +#: goffice/gtk/go-locale-sel.c:177 +#, fuzzy +msgid "Venezuela (es_VE)" +msgstr "Venezuela 委內瑞拉 (åšåˆ©ç“¦)" + +#: goffice/gtk/go-locale-sel.c:178 +msgid "Estonia (et_EE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:179 +#, fuzzy +msgid "Spain/Basque (eu_ES)" +msgstr "抽樣 (%s)" + +#: goffice/gtk/go-locale-sel.c:180 +msgid "Iran (fa_IR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:181 +msgid "Finland/Finnish (fi_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:182 +msgid "Faroe Islands (fo_FO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:183 +msgid "Belgium/French (fr_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:184 +msgid "Canada/French (fr_CA)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:185 +#, fuzzy +msgid "Switzerland/French (fr_CH)" +msgstr "Switzerland 瑞士 (法郎)" + +#: goffice/gtk/go-locale-sel.c:186 +msgid "France (fr_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:187 +msgid "Ireland/Gaelic (ga_IE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:188 +msgid "Great Britain/Scottish Gaelic (gd_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:189 +msgid "Spain/Galician (gl_ES)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:190 +msgid "Great Britain/Manx Gaelic (gv_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:191 +msgid "India/Hindu (hi_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:192 +msgid "Croatia (hr_HR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:193 +msgid "Hungary (hu_HU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:194 +#, fuzzy +msgid "Armenia (hy_AM)" +msgstr "亞美尼亞文字 (ARMSCII-8)" + +#: goffice/gtk/go-locale-sel.c:195 +msgid "(i18n)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:196 +#, fuzzy +msgid "Indonesia (id_ID)" +msgstr "Indonesia å°å°¼ (盾)" + +#: goffice/gtk/go-locale-sel.c:197 +msgid "Iceland (is_IS)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:198 +msgid "(iso14651_t1)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:199 +msgid "Switzerland/Italian (it_CH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:200 +msgid "Italy (it_IT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:201 +msgid "Israel/Hebrew (iw_IL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:202 +#, fuzzy +msgid "Japan (ja_JP)" +msgstr "日文 (EUC-JP)" + +#: goffice/gtk/go-locale-sel.c:203 +#, fuzzy +msgid "Georgia (ka_GE)" +msgstr "格魯å‰äºžæ–‡å­— (GEOSTD8)" + +#: goffice/gtk/go-locale-sel.c:204 +msgid "Greenland (kl_GL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:205 +#, fuzzy +msgid "Korea (ko_KR)" +msgstr "韓文 (EUC-KR)" + +#: goffice/gtk/go-locale-sel.c:206 +msgid "Great Britain/Cornish (kw_GB)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:207 +#, fuzzy +msgid "Lithuania (lt_LT)" +msgstr "Lithuania ç«‹é™¶å®› (Lita)" + +#: goffice/gtk/go-locale-sel.c:208 +#, fuzzy +msgid "Latvia (lv_LV)" +msgstr "Latvia 拉脫維亞 (Lat)" + +#: goffice/gtk/go-locale-sel.c:209 +msgid "New Zealand/Maori (mi_NZ)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:210 +msgid "Macedonia (mk_MK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:211 +msgid "India/Marathi (mr_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:212 +msgid "Malaysia (ms_MY)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:213 +msgid "Malta (mt_MT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:214 +msgid "Belgium/Flemish (nl_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:215 +msgid "The Netherlands (nl_NL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:216 +msgid "Norway/Nynorsk (nn_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:217 +msgid "Norway/Bokmal (no_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:218 +msgid "France/Occitan (oc_FR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:219 +msgid "Poland (pl_PL)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:220 +msgid "Brazil (pt_BR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:221 +msgid "Portugal (pt_PT)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:222 +msgid "Romania (ro_RO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:223 +#, fuzzy +msgid "Russia (ru_RU)" +msgstr "ä¿„æ–‡ (CP-866)" + +#: goffice/gtk/go-locale-sel.c:224 +#, fuzzy +msgid "Ukraine/Russian (ru_UA)" +msgstr "çƒå…‹è˜­æ–‡ (KOI8-U)" + +#: goffice/gtk/go-locale-sel.c:225 +msgid "Norway/Saami (se_NO)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:226 +#, fuzzy +msgid "Slovakia (sk_SK)" +msgstr "Slovakia 斯洛ä¼å…‹ (克郎)" + +#: goffice/gtk/go-locale-sel.c:227 +#, fuzzy +msgid "Slovenia (sl_SI)" +msgstr "Slovenia 斯洛維尼亞 (Tolar)" + +#: goffice/gtk/go-locale-sel.c:228 +#, fuzzy +msgid "Albania (sq_AL)" +msgstr "Albania 阿爾巴尼亞 (列克)" + +#: goffice/gtk/go-locale-sel.c:229 +#, fuzzy +msgid "Yugoslavia (sr_YU)" +msgstr "Yugoslavia å—æ–¯æ‹‰å¤« (新第ç´çˆ¾)" + +#: goffice/gtk/go-locale-sel.c:230 +msgid "Finland/Swedish (sv_FI)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:231 +msgid "Sweden (sv_SE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:232 +msgid "India/Tamil (ta_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:233 +msgid "India/Telugu (te_IN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:234 +#, fuzzy +msgid "Tajikistan (tg_TJ)" +msgstr "Tajikistan å¡”å‰å…‹ (盧布)" + +#: goffice/gtk/go-locale-sel.c:235 +#, fuzzy +msgid "Thailand (th_TH)" +msgstr "Thailand 泰國 (銖)" + +#: goffice/gtk/go-locale-sel.c:236 +msgid "Eritrea (ti_ER)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:237 +msgid "Ethiopia/Tigrinya (ti_ET)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:238 +msgid "Philippines/Tagalog (tl_PH)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:239 +msgid "Turkey (tr_TR)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:240 +msgid "Russia/Tatar (tt_RU)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:241 +#, fuzzy +msgid "Ukraine (uk_UA)" +msgstr "çƒå…‹è˜­æ–‡ (KOI8-U)" + +#: goffice/gtk/go-locale-sel.c:242 +#, fuzzy +msgid "Pakistan (ur_PK)" +msgstr "Pakistan å·´åŸºæ–¯å¦ (盧比)" + +#: goffice/gtk/go-locale-sel.c:243 +#, fuzzy +msgid "Uzbekistan (uz_UZ)" +msgstr "Uzbekistan çƒèŒ²åˆ¥å…‹ (Sum)" + +#: goffice/gtk/go-locale-sel.c:244 +#, fuzzy +msgid "Vietnam (vi_VN)" +msgstr "è¶Šå—æ–‡ (TCVN)" + +#: goffice/gtk/go-locale-sel.c:245 +msgid "Belgium/Walloon (wa_BE)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:246 +msgid "United States/Yiddish (yi_US)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:247 +msgid "China (zh_CN)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:248 +msgid "Hong Kong/Chinese (zh_HK)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:249 +msgid "Singapore/Chinese (zh_SG)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:250 +msgid "Taiwan (zh_TW)" +msgstr "" + +#: goffice/gtk/go-locale-sel.c:451 +#, fuzzy +msgid "Current Locale: " +msgstr "ç›®å‰çš„å稱" + +#: goffice/gtk/go-optionmenu.c:197 +#, fuzzy +msgid "Menu" +msgstr "平凿•¸" + +#: goffice/gtk/go-optionmenu.c:198 +msgid "The menu of options" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:204 +msgid "Indicator Size" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:205 +msgid "Size of dropdown indicator" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:210 +msgid "Indicator Spacing" +msgstr "" + +#: goffice/gtk/go-optionmenu.c:211 +msgid "Spacing around indicator" +msgstr "" + +#: goffice/utils/format.c:86 +msgid "*Sun" +msgstr "æ—¥" + +#: goffice/utils/format.c:87 +msgid "*Mon" +msgstr "一" + +#: goffice/utils/format.c:88 +msgid "*Tue" +msgstr "二" + +#: goffice/utils/format.c:89 +msgid "*Wed" +msgstr "三" + +#: goffice/utils/format.c:90 +msgid "*Thu" +msgstr "å››" + +#: goffice/utils/format.c:91 +msgid "*Fri" +msgstr "五" + +#: goffice/utils/format.c:92 +msgid "*Sat" +msgstr "å…­" + +#: goffice/utils/format.c:97 +msgid "Sunday" +msgstr "星期日" + +#: goffice/utils/format.c:98 +msgid "Monday" +msgstr "星期一" + +#: goffice/utils/format.c:99 +msgid "Tuesday" +msgstr "星期二" + +#: goffice/utils/format.c:100 +msgid "Wednesday" +msgstr "星期三" + +#: goffice/utils/format.c:101 +msgid "Thursday" +msgstr "星期四" + +#: goffice/utils/format.c:102 +msgid "Friday" +msgstr "星期五" + +#: goffice/utils/format.c:103 +msgid "Saturday" +msgstr "星期六" + +#: goffice/utils/format.c:108 +msgid "*Jan" +msgstr "1月" + +#: goffice/utils/format.c:109 +msgid "*Feb" +msgstr "2月" + +#: goffice/utils/format.c:110 +msgid "*Mar" +msgstr "3月" + +#: goffice/utils/format.c:111 +msgid "*Apr" +msgstr "4月" + +#: goffice/utils/format.c:112 +msgid "*May" +msgstr "5月" + +#: goffice/utils/format.c:113 +msgid "*Jun" +msgstr "6月" + +#: goffice/utils/format.c:114 +msgid "*Jul" +msgstr "7月" + +#: goffice/utils/format.c:115 +msgid "*Aug" +msgstr "8月" + +#: goffice/utils/format.c:116 +msgid "*Sep" +msgstr "9月" + +#: goffice/utils/format.c:117 +msgid "*Oct" +msgstr "10月" + +#: goffice/utils/format.c:118 +msgid "*Nov" +msgstr "11月" + +#: goffice/utils/format.c:119 +msgid "*Dec" +msgstr "12月" + +#: goffice/utils/format.c:124 +msgid "January" +msgstr "一月" + +#: goffice/utils/format.c:125 +msgid "February" +msgstr "二月" + +#: goffice/utils/format.c:126 +msgid "March" +msgstr "三月" + +#: goffice/utils/format.c:127 +msgid "April" +msgstr "四月" + +#: goffice/utils/format.c:128 +msgid "May" +msgstr "五月" + +#: goffice/utils/format.c:129 +msgid "June" +msgstr "六月" + +#: goffice/utils/format.c:130 +msgid "July" +msgstr "七月" + +#: goffice/utils/format.c:131 +msgid "August" +msgstr "八月" + +#: goffice/utils/format.c:132 +msgid "September" +msgstr "乿œˆ" + +#: goffice/utils/format.c:133 +msgid "October" +msgstr "åæœˆ" + +#: goffice/utils/format.c:134 +msgid "November" +msgstr "å一月" + +#: goffice/utils/format.c:135 +msgid "December" +msgstr "å二月" + +#: goffice/utils/format.c:317 +msgid "TRUE" +msgstr "TRUE" + +#: goffice/utils/format.c:318 +msgid "FALSE" +msgstr "FALSE" + +#: goffice/utils/format.c:757 +msgid "Black" +msgstr "黑" + +#: goffice/utils/format.c:758 +msgid "Blue" +msgstr "è—" + +#: goffice/utils/format.c:759 +msgid "Cyan" +msgstr "æ°°è—" + +#: goffice/utils/format.c:760 +msgid "Green" +msgstr "ç¶ " + +#: goffice/utils/format.c:761 +msgid "Magenta" +msgstr "æ´‹ç´…" + +#: goffice/utils/format.c:762 +msgid "Red" +msgstr "ç´…" + +#: goffice/utils/format.c:763 +msgid "White" +msgstr "白" + +#: goffice/utils/format.c:764 +msgid "Yellow" +msgstr "黃" + +# FIXME: The currency symbol list is sorted alphabetically. +# So english name has to come first. -- Abel +# REFERENCE: +# http://www.cybertranslator.idv.tw/comeco_currencies.htm +# http://www.cp-edu.com/ciku/TW/CIKU/free_html/fl_sjzyhbjb.asp +#. The first column has three letter acronyms +#. * for each currency. They MUST start with '[$' +#. * The second column has the long names of the currencies. +#. +#. 2002/08/04 Updated to match iso 4217 +#: goffice/utils/formats.c:389 +msgid "United Arab Emirates, Dirhams" +msgstr "United Arab Emirates 阿拉伯è¯åˆå¤§å…¬åœ‹ (迪拉姆)" + +#: goffice/utils/formats.c:390 +msgid "Afghanistan, Afghanis" +msgstr "Afghanistan 阿富汗 (阿富汗尼)" + +#: goffice/utils/formats.c:391 +msgid "Albania, Leke" +msgstr "Albania 阿爾巴尼亞 (列克)" + +#: goffice/utils/formats.c:392 +msgid "Armenia, Drams" +msgstr "" + +#: goffice/utils/formats.c:393 +msgid "Netherlands Antilles, Guilders" +msgstr "" + +#: goffice/utils/formats.c:394 +msgid "Angola, Kwanza" +msgstr "" + +#: goffice/utils/formats.c:395 +msgid "Argentina, Pesos" +msgstr "Argentina 阿根廷 (披索)" + +#: goffice/utils/formats.c:396 +msgid "Australia, Dollars" +msgstr "Australia 澳洲 (澳元)" + +#: goffice/utils/formats.c:397 +msgid "Aruba, Guilders" +msgstr "" + +#: goffice/utils/formats.c:398 +msgid "Azerbaijan, Manats" +msgstr "" + +#: goffice/utils/formats.c:399 +msgid "Bosnia and Herzegovina, Convertible Marka" +msgstr "" + +#: goffice/utils/formats.c:400 +msgid "Barbados, Dollars" +msgstr "" + +#: goffice/utils/formats.c:401 +msgid "Bangladesh, Taka" +msgstr "Bangladesh 孟加拉 (å¡”å¡)" + +#: goffice/utils/formats.c:402 +msgid "Bulgaria, Leva" +msgstr "Bulgaria ä¿åŠ åˆ©äºž (列弗)" + +#: goffice/utils/formats.c:403 +msgid "Bahrain, Dinars" +msgstr "Bahrain å·´æž— (第ç´çˆ¾)" + +#: goffice/utils/formats.c:404 +msgid "Burundi, Francs" +msgstr "Burundi 蒲隆地 (法郎)" + +#: goffice/utils/formats.c:405 +msgid "Bermuda, Dollars" +msgstr "" + +#: goffice/utils/formats.c:406 +msgid "Brunei Darussalam, Dollars" +msgstr "Brunei Darussalam æ±¶èŠ (æ±¶èŠå…ƒ)" + +#: goffice/utils/formats.c:407 +msgid "Bolivia, Bolivianos" +msgstr "Bolivia 玻利維亞 (Boliviano)" + +#: goffice/utils/formats.c:408 +msgid "Brazil, Brazil Real" +msgstr "Brazil 巴西 (Brazil Real)" + +#: goffice/utils/formats.c:409 +msgid "Bahamas, Dollars" +msgstr "Bahamas 巴哈馬群島 (巴哈馬元)" + +#: goffice/utils/formats.c:410 +msgid "Bhutan, Ngultrum" +msgstr "Bhutan ä¸ä¸¹ (Ngultrum)" + +#: goffice/utils/formats.c:411 +msgid "Botswana, Pulas" +msgstr "Botswana 波札那 (普拉)" + +#: goffice/utils/formats.c:412 +msgid "Belarus, Rubles" +msgstr "Belarus 白俄羅斯 (盧布)" + +#: goffice/utils/formats.c:413 +msgid "Belize, Dollars" +msgstr "" + +#: goffice/utils/formats.c:414 +msgid "Canada, Dollars" +msgstr "Canada 加拿大 (加元)" + +#: goffice/utils/formats.c:415 +msgid "Congo/Kinshasa, Congolese Francs" +msgstr "" + +#: goffice/utils/formats.c:416 +msgid "Switzerland, Francs" +msgstr "Switzerland 瑞士 (法郎)" + +#: goffice/utils/formats.c:417 +msgid "Chile, Pesos" +msgstr "Chile 智利 (披索)" + +#: goffice/utils/formats.c:418 +msgid "China, Yuan Renminbi" +msgstr "China 中è¯äººæ°‘共和國 (人民幣)" + +#: goffice/utils/formats.c:419 +msgid "Colombia, Pesos" +msgstr "Colombia 哥倫比亞 (披索)" + +#: goffice/utils/formats.c:420 +msgid "Costa Rica, Colones" +msgstr "Costa Rica 哥斯大黎加 (科郎)" + +#: goffice/utils/formats.c:421 +msgid "Cuba, Pesos" +msgstr "Cuba å¤å·´ (披索)" + +#: goffice/utils/formats.c:422 +msgid "Cape Verde, Escudos" +msgstr "Cape Verde 維德角群島 (埃斯庫多)" + +#: goffice/utils/formats.c:423 +msgid "Cyprus, Pounds" +msgstr "Cyprus 賽浦路斯 (鎊)" + +#: goffice/utils/formats.c:424 +msgid "Czech Republic, Koruny" +msgstr "Czech Republic æ·å…‹å…±å’Œåœ‹ (克郎)" + +#: goffice/utils/formats.c:425 +msgid "Djibouti, Francs" +msgstr "Djibouti å‰å¸ƒæ (法郎)" + +#: goffice/utils/formats.c:426 +msgid "Denmark, Kroner" +msgstr "Denmark 丹麥 (克郎)" + +#: goffice/utils/formats.c:427 +msgid "Dominican Republic, Pesos" +msgstr "Dominican Republic 多明尼加共和國 (披索)" + +#: goffice/utils/formats.c:428 +msgid "Algeria, Algeria Dinars" +msgstr "Algeria 阿爾åŠåˆ©äºž (第ç´çˆ¾)" + +#: goffice/utils/formats.c:429 +msgid "Estonia, Krooni" +msgstr "Estonia 愛沙尼亞 (Kroon)" + +#: goffice/utils/formats.c:430 +msgid "Egypt, Pounds" +msgstr "Egypt åŸƒåŠ (鎊)" + +#: goffice/utils/formats.c:431 +msgid "Eritrea, Nakfa" +msgstr "" + +#: goffice/utils/formats.c:432 +msgid "Ethiopia, Birr" +msgstr "Ethiopia 衣索匹亞 (比爾)" + +#: goffice/utils/formats.c:433 +msgid "Euro Member Countries, Euro" +msgstr "Euro Member Countries æ­æ´²è²¨å¹£è¯ç›Ÿ (æ­å…ƒ)" + +#: goffice/utils/formats.c:434 +msgid "Fiji, Dollars" +msgstr "Fiji æ–æ¿Ÿ (æ–æ¿Ÿå…ƒ)" + +#: goffice/utils/formats.c:435 +msgid "Falkland Islands (Malvinas), Pounds" +msgstr "" + +#: goffice/utils/formats.c:436 +msgid "United Kingdom, Pounds" +msgstr "United Kingdom 英國 (英鎊)" + +#: goffice/utils/formats.c:437 +msgid "Georgia, Lari" +msgstr "" + +#: goffice/utils/formats.c:438 +msgid "Guernsey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:439 +msgid "Ghana, Cedis" +msgstr "Ghana è¿¦ç´ (塞地)" + +#: goffice/utils/formats.c:440 +msgid "Gibraltar, Pounds" +msgstr "" + +#: goffice/utils/formats.c:441 +msgid "Gambia, Dalasi" +msgstr "Gambia 甘比亞 (锿‹‰è¥¿)" + +#: goffice/utils/formats.c:442 +msgid "Guinea, Francs" +msgstr "" + +#: goffice/utils/formats.c:443 +msgid "Guatemala, Quetzales" +msgstr "Guatemala 瓜地馬拉 (格查爾)" + +#: goffice/utils/formats.c:444 +msgid "Guyana, Dollars" +msgstr "Guyana 蓋亞那 (蓋亞那元)" + +#: goffice/utils/formats.c:445 +msgid "Hong Kong, Dollars" +msgstr "Hong Kong 香港 (港元)" + +#: goffice/utils/formats.c:446 +msgid "Honduras, Lempiras" +msgstr "Honduras å®éƒ½æ‹‰æ–¯ (倫皮拉)" + +#: goffice/utils/formats.c:447 +msgid "Croatia, Kuna" +msgstr "Croatia 克羅埃西亞 (Kuna)" + +#: goffice/utils/formats.c:448 +msgid "Haiti, Gourdes" +msgstr "Haiti 海地 (å¤å¾·)" + +#: goffice/utils/formats.c:449 +msgid "Hungary, Forint" +msgstr "Hungary 匈牙利 (ç¦æž—)" + +#: goffice/utils/formats.c:450 +msgid "Indonesia, Rupiahs" +msgstr "Indonesia å°å°¼ (盾)" + +#: goffice/utils/formats.c:451 +msgid "Israel, New Shekels" +msgstr "Israel 以色列 (New Shekel)" + +#: goffice/utils/formats.c:452 +msgid "Isle of Man, Pounds" +msgstr "" + +#: goffice/utils/formats.c:453 +msgid "India, Rupees" +msgstr "India å°åº¦ (盧比)" + +#: goffice/utils/formats.c:454 +msgid "Iraq, Dinars" +msgstr "Iraq 伊拉克 (第ç´çˆ¾)" + +#: goffice/utils/formats.c:455 +msgid "Iran, Rials" +msgstr "Iran 伊朗 (里亞爾)" + +#: goffice/utils/formats.c:456 +msgid "Iceland, Kronur" +msgstr "Iceland 冰島 (克郎)" + +#: goffice/utils/formats.c:457 +msgid "Jersey, Pounds" +msgstr "" + +#: goffice/utils/formats.c:458 +msgid "Jamaica, Dollars" +msgstr "Jamaica 牙買加 (牙買加元)" + +#: goffice/utils/formats.c:459 +msgid "Jordan, Dinars" +msgstr "Jordan ç´„æ—¦ (第ç´çˆ¾)" + +#: goffice/utils/formats.c:460 +msgid "Japan, Yen" +msgstr "Japan 日本 (日元)" + +#: goffice/utils/formats.c:461 +msgid "Kenya, Shillings" +msgstr "Kenya 肯亞 (先令)" + +#: goffice/utils/formats.c:462 +msgid "Kyrgyzstan, Soms" +msgstr "Kyrgyzstan å‰çˆ¾å‰æ–¯ (Som)" + +#: goffice/utils/formats.c:463 +msgid "Cambodia, Riels" +msgstr "Cambodia 柬埔寨 (Riel)" + +#: goffice/utils/formats.c:464 +msgid "Comoros, Francs" +msgstr "Comoros ç§‘æ‘©ç¾… (法郎)" + +#: goffice/utils/formats.c:465 +msgid "Korea (North), Won" +msgstr "Korea (North) 北韓 (圜)" + +#: goffice/utils/formats.c:466 +msgid "Korea (South), Won" +msgstr "Korea (South) å—韓 (圜)" + +#: goffice/utils/formats.c:467 +msgid "Kuwait, Dinars" +msgstr "Kuwait ç§‘å¨ç‰¹ (第ç´çˆ¾)" + +#: goffice/utils/formats.c:468 +msgid "Cayman Islands, Dollars" +msgstr "" + +#: goffice/utils/formats.c:469 +msgid "Kazakstan, Tenge" +msgstr "Kazakstan 哈薩克 (Tenge)" + +#: goffice/utils/formats.c:470 +msgid "Laos, Kips" +msgstr "Laos 寮國 (基普)" + +#: goffice/utils/formats.c:471 +msgid "Lebanon, Pounds" +msgstr "Lebanon 黎巴嫩 (鎊)" + +#: goffice/utils/formats.c:472 +msgid "Sri Lanka, Rupees" +msgstr "Sri Lanka æ–¯é‡Œè˜­å¡ (盧比)" + +#: goffice/utils/formats.c:473 +msgid "Liberia, Dollars" +msgstr "Liberia 賴比瑞亞 (賴比瑞亞元)" + +#: goffice/utils/formats.c:474 +msgid "Lesotho, Maloti" +msgstr "Lesotho 賴索托 (Loti)" + +#: goffice/utils/formats.c:475 +msgid "Lithuania, Litai" +msgstr "Lithuania ç«‹é™¶å®› (Lita)" + +#: goffice/utils/formats.c:476 +msgid "Latvia, Lati" +msgstr "Latvia 拉脫維亞 (Lat)" + +#: goffice/utils/formats.c:477 +msgid "Libya, Dinars" +msgstr "Libya 利比亞 (第ç´çˆ¾)" + +#: goffice/utils/formats.c:478 +msgid "Morocco, Dirhams" +msgstr "Morocco 摩洛哥 (迪拉姆)" + +#: goffice/utils/formats.c:479 +msgid "Moldova, Lei" +msgstr "Moldova 摩多瓦 (列伊)" + +#: goffice/utils/formats.c:480 +msgid "Madagascar, Malagasy Francs" +msgstr "Madagascar 馬é”加斯加 (馬é”加斯加法郎)" + +#: goffice/utils/formats.c:481 +msgid "Macedonia, Denars" +msgstr "Macedonia 馬其頓共和國 (Denar)" + +#: goffice/utils/formats.c:482 +msgid "Myanmar (Burma), Kyats" +msgstr "Myanmar (Burma) 緬甸 (緬甸元)" + +#: goffice/utils/formats.c:483 +msgid "Mongolia, Tugriks" +msgstr "Mongolia è’™å¤ (圖格里克)" + +#: goffice/utils/formats.c:484 +msgid "Macau, Patacas" +msgstr "Macau 澳門 (澳門元)" + +#: goffice/utils/formats.c:485 +msgid "Mauritania, Ouguiyas" +msgstr "Mauritania 茅利塔尼亞 (çƒå‰äºž)" + +#: goffice/utils/formats.c:486 +msgid "Malta, Liri" +msgstr "Malta 馬爾他 (里拉)" + +#: goffice/utils/formats.c:487 +msgid "Mauritius, Rupees" +msgstr "Mauritius 模里西斯 (盧比)" + +#: goffice/utils/formats.c:488 +msgid "Maldives (Maldive Islands), Rufiyaa" +msgstr "Maldives (Maldive Islands) 馬爾地夫 (Rufiyaa)" + +#: goffice/utils/formats.c:489 +msgid "Malawi, Kwachas" +msgstr "Malawi é¦¬æ‹‰å¨ (Kwacha)" + +#: goffice/utils/formats.c:490 +msgid "Mexico, Pesos" +msgstr "Mexico 墨西哥 (披索)" + +#: goffice/utils/formats.c:491 +msgid "Malaysia, Ringgits" +msgstr "Malaysia 馬來西亞 (æž—å‰ç‰¹)" + +#: goffice/utils/formats.c:492 +msgid "Mozambique, Meticais" +msgstr "Mozambique 莫三比克 (梅蒂å¡çˆ¾)" + +#: goffice/utils/formats.c:493 +msgid "Namibia, Dollars" +msgstr "Namibia 那密比亞 (那密比亞元)" + +#: goffice/utils/formats.c:494 +msgid "Nigeria, Nairas" +msgstr "Nigeria 奈åŠåˆ©äºž (奈拉)" + +#: goffice/utils/formats.c:495 +msgid "Nicaragua, Gold Cordobas" +msgstr "Nicaragua 尼加拉瓜 (科多巴)" + +#: goffice/utils/formats.c:496 +msgid "Norway, Krone" +msgstr "Norway æŒªå¨ (克郎)" + +#: goffice/utils/formats.c:497 +msgid "Nepal, Nepal Rupees" +msgstr "Nepal 尼泊爾 (尼泊爾盧比)" + +#: goffice/utils/formats.c:498 +msgid "New Zealand, Dollars" +msgstr "New Zealand 新西蘭 (新西蘭元)" + +#: goffice/utils/formats.c:499 +msgid "Oman, Rials" +msgstr "Oman 阿曼 (里亞爾)" + +#: goffice/utils/formats.c:500 +msgid "Panama, Balboa" +msgstr "Panama 巴拿馬 (巴波亞)" + +#: goffice/utils/formats.c:501 +msgid "Peru, Nuevos Soles" +msgstr "Peru 秘魯 (Nuevo Sol)" + +#: goffice/utils/formats.c:502 +msgid "Papua New Guinea, Kina" +msgstr "Papua New Guinea 巴布亞ç´å¹¾å…§äºž (基那)" + +#: goffice/utils/formats.c:503 +msgid "Philippines, Pesos" +msgstr "Philippines è²å¾‹è³“ (披索)" + +#: goffice/utils/formats.c:504 +msgid "Pakistan, Rupees" +msgstr "Pakistan å·´åŸºæ–¯å¦ (盧比)" + +#: goffice/utils/formats.c:505 +msgid "Poland, Zlotys" +msgstr "Poland 波蘭 (茲羅æ)" + +#: goffice/utils/formats.c:506 +msgid "Paraguay, Guarani" +msgstr "Paraguay 巴拉圭 (Guarani)" + +#: goffice/utils/formats.c:507 +msgid "Qatar, Rials" +msgstr "Qatar å¡é” (里亞爾)" + +#: goffice/utils/formats.c:508 +msgid "Romania, Lei" +msgstr "Romania 羅馬尼亞 (列伊)" + +#: goffice/utils/formats.c:509 +msgid "Russia, Rubles" +msgstr "Russia ä¿„ç¾…æ–¯ (盧布)" + +#: goffice/utils/formats.c:510 +msgid "Rwanda, Rwanda Francs" +msgstr "Rwanda ç›§æ—ºé” (ç›§æ—ºé”æ³•郎)" + +#: goffice/utils/formats.c:511 +msgid "Saudi Arabia, Riyals" +msgstr "Saudi Arabia æ²™çƒåœ°é˜¿æ‹‰ä¼¯ (里亞爾)" + +#: goffice/utils/formats.c:512 +msgid "Solomon Islands, Dollars" +msgstr "Solomon Islands 索羅門群島 (索羅門群島元)" + +#: goffice/utils/formats.c:513 +msgid "Seychelles, Rupees" +msgstr "Seychelles 塞昔耳 (盧比)" + +#: goffice/utils/formats.c:514 +msgid "Sudan, Dinars" +msgstr "Sudan 蘇丹 (第ç´çˆ¾)" + +#: goffice/utils/formats.c:515 +msgid "Sweden, Kronor" +msgstr "Sweden 瑞典 (克郎)" + +#: goffice/utils/formats.c:516 +msgid "Singapore, Dollars" +msgstr "Singapore æ–°åŠ å¡ (新加å¡å…ƒ)" + +#: goffice/utils/formats.c:517 +msgid "Saint Helena, Pounds" +msgstr "" + +#: goffice/utils/formats.c:518 +msgid "Slovenia, Tolars" +msgstr "Slovenia 斯洛維尼亞 (Tolar)" + +#: goffice/utils/formats.c:519 +msgid "Slovakia, Koruny" +msgstr "Slovakia 斯洛ä¼å…‹ (克郎)" + +#: goffice/utils/formats.c:520 +msgid "Sierra Leone, Leones" +msgstr "Sierra Leone ç…å­å±± (利昂)" + +#: goffice/utils/formats.c:521 +msgid "Somalia, Shillings" +msgstr "Somalia 索馬利亞 (先令)" + +#: goffice/utils/formats.c:522 +msgid "Seborga, Luigini" +msgstr "" + +#: goffice/utils/formats.c:523 +msgid "Suriname, Guilders" +msgstr "Suriname è˜‡åˆ©å— (盾)" + +#: goffice/utils/formats.c:524 +msgid "Sao Tome and Principe, Dobras" +msgstr "" + +#: goffice/utils/formats.c:525 +msgid "El Salvador, Colones" +msgstr "El Salvador 薩爾瓦多 (科郎)" + +#: goffice/utils/formats.c:526 +msgid "Syria, Pounds" +msgstr "Syria 敘利亞 (敘利亞鎊)" + +#: goffice/utils/formats.c:527 +msgid "Swaziland, Emalangeni" +msgstr "Swaziland å²ç“¦æ¿Ÿè˜­ (Lilageni)" + +#: goffice/utils/formats.c:528 +msgid "Thailand, Baht" +msgstr "Thailand 泰國 (銖)" + +#: goffice/utils/formats.c:529 +msgid "Tajikistan, Rubles" +msgstr "Tajikistan å¡”å‰å…‹ (盧布)" + +#: goffice/utils/formats.c:530 +msgid "Turkmenistan, Manats" +msgstr "" + +#: goffice/utils/formats.c:531 +msgid "Tunisia, Dinars" +msgstr "Tunisia çªå°¼è¥¿äºž (第ç´çˆ¾)" + +#: goffice/utils/formats.c:532 +msgid "Tonga, Pa'anga" +msgstr "Tonga æ±åŠ  (潘加)" + +#: goffice/utils/formats.c:533 +msgid "Turkey, Liras" +msgstr "Turkey 土耳其 (里拉)" + +#: goffice/utils/formats.c:534 +msgid "Trinidad and Tobago, Dollars" +msgstr "Trinidad and Tobago åƒé‡Œé”-托巴哥 (å…ƒ)" + +#: goffice/utils/formats.c:535 +msgid "Tuvalu, Tuvalu Dollars" +msgstr "" + +#: goffice/utils/formats.c:536 +msgid "Taiwan, New Dollars" +msgstr "Taiwan è‡ºç£ (新臺幣)" + +#: goffice/utils/formats.c:537 +msgid "Tanzania, Shillings" +msgstr "Tanzania å¦å°šå°¼äºž (先令)" + +#: goffice/utils/formats.c:538 +msgid "Ukraine, Hryvnia" +msgstr "Ukraine çƒå…‹è˜­ (Hryvnia)" + +#: goffice/utils/formats.c:539 +msgid "Uganda, Shillings" +msgstr "Uganda çƒå¹²é” (先令)" + +#: goffice/utils/formats.c:540 +msgid "United States of America, Dollars" +msgstr "USA 美國 (美元)" + +#: goffice/utils/formats.c:541 +msgid "Uruguay, Pesos" +msgstr "Uruguay çƒæ‹‰åœ­ (新披索)" + +#: goffice/utils/formats.c:542 +msgid "Uzbekistan, Sums" +msgstr "Uzbekistan çƒèŒ²åˆ¥å…‹ (Sum)" + +#: goffice/utils/formats.c:543 +msgid "Venezuela, Bolivares" +msgstr "Venezuela 委內瑞拉 (åšåˆ©ç“¦)" + +#: goffice/utils/formats.c:544 +msgid "Viet Nam, Dong" +msgstr "Vietnam è¶Šå— (è¶Šå—盾)" + +#: goffice/utils/formats.c:545 +msgid "Vanuatu, Vatu" +msgstr "Vanuatu è¬é‚£æœ (Vatu)" + +#: goffice/utils/formats.c:546 +msgid "Samoa, Tala" +msgstr "Samoa 薩摩亞 (塔拉)" + +#: goffice/utils/formats.c:547 +msgid "Communaute Financiere Africaine BEAC, Francs" +msgstr "Communaute Financiere Africaine éžæ´²é‡‘èžå…±åŒé«” BEAC (法郎)" + +#: goffice/utils/formats.c:548 +msgid "Silver, Ounces" +msgstr "銀 (盎å¸)" + +#: goffice/utils/formats.c:549 +msgid "Gold, Ounces" +msgstr "金 (盎å¸)" + +#: goffice/utils/formats.c:550 +msgid "East Caribbean Dollars" +msgstr "" + +#: goffice/utils/formats.c:551 +msgid "International Monetary Fund (IMF) Special Drawing Rights" +msgstr "" + +#: goffice/utils/formats.c:552 +msgid "Communaute Financiere Africaine BCEAO, Francs" +msgstr "Communaute Financiere Africaine éžæ´²é‡‘èžå…±åŒé«” BCEAO (法郎)" + +#: goffice/utils/formats.c:553 +#, fuzzy +msgid "Palladium, Ounces" +msgstr "鈀 (盎å¸)" + +#: goffice/utils/formats.c:554 +msgid "Comptoirs Francais du Pacifique Francs" +msgstr "" + +#: goffice/utils/formats.c:555 +msgid "Platinum, Ounces" +msgstr "鉑 (盎å¸)" + +#: goffice/utils/formats.c:556 +msgid "Yemen, Rials" +msgstr "Yemen 葉門 (第ç´çˆ¾)" + +#: goffice/utils/formats.c:557 +msgid "Yugoslavia, New Dinars" +msgstr "Yugoslavia å—æ–¯æ‹‰å¤« (新第ç´çˆ¾)" + +#: goffice/utils/formats.c:558 +msgid "South Africa, Rand" +msgstr "South Africa å—éž (蘭特)" + +#: goffice/utils/formats.c:559 +msgid "Zambia, Kwacha" +msgstr "Zambia 尚比亞 (克瓦查)" + +#: goffice/utils/formats.c:560 +msgid "Zimbabwe, Zimbabwe Dollars" +msgstr "Zimbabwe è¾›å·´å¨ (辛巴å¨å…ƒ)" + +#: goffice/utils/go-line.c:52 +msgid "None" +msgstr "ç„¡" + +#: goffice/utils/go-line.c:53 goffice/utils/go-pattern.c:95 +msgid "Solid" +msgstr "實色" + +#: goffice/utils/go-line.c:54 +msgid "Dash" +msgstr "" + +#: goffice/utils/go-line.c:55 +msgid "Dot" +msgstr "" + +#: goffice/utils/go-line.c:56 +msgid "Dash dot" +msgstr "" + +#: goffice/utils/go-line.c:57 +msgid "Dash dot dot" +msgstr "" + +#. xgettext : this will appear as 'Automatic (patternname)' +#. xgettext : this will appear as 'Automatic (shapename)' +#. xgettext : this will appear as 'Automatic (patternname)' +#: goffice/utils/go-line.c:306 goffice/utils/go-marker.c:603 +#: goffice/utils/go-pattern.c:242 +#, fuzzy, c-format +msgid "Automatic (%s)" +msgstr "自動" + +#: goffice/utils/go-marker.c:220 +#, fuzzy +msgid "none" +msgstr "ç„¡" + +#: goffice/utils/go-marker.c:221 +msgid "square" +msgstr "" + +#: goffice/utils/go-marker.c:222 +#, fuzzy +msgid "diamond" +msgstr "䏭使•¸" + +#: goffice/utils/go-marker.c:223 +msgid "triangle down" +msgstr "" + +#: goffice/utils/go-marker.c:224 +#, fuzzy +msgid "triangle up" +msgstr "範åœ" + +#: goffice/utils/go-marker.c:225 +msgid "triangle right" +msgstr "" + +#: goffice/utils/go-marker.c:226 +msgid "triangle left" +msgstr "" + +#: goffice/utils/go-marker.c:227 +msgid "circle" +msgstr "" + +#: goffice/utils/go-marker.c:228 +msgid "x" +msgstr "" + +#: goffice/utils/go-marker.c:229 +msgid "cross" +msgstr "" + +#: goffice/utils/go-marker.c:230 +#, fuzzy +msgid "asterisk" +msgstr "è¯ç¹«åŽŸä¾†çš„å„²å­˜æ ¼" + +#: goffice/utils/go-marker.c:231 +#, fuzzy +msgid "bar" +msgstr "3月" + +#: goffice/utils/go-marker.c:232 +msgid "half bar" +msgstr "" + +#: goffice/utils/go-marker.c:233 +msgid "butterfly" +msgstr "" + +#: goffice/utils/go-marker.c:234 +msgid "hourglass" +msgstr "" + +#: goffice/utils/go-pattern.c:96 +#, fuzzy, c-format +msgid "75% Grey" +msgstr "75% ç°åº¦" + +#: goffice/utils/go-pattern.c:97 +#, fuzzy, c-format +msgid "50% Grey" +msgstr "50% ç°åº¦" + +#: goffice/utils/go-pattern.c:98 +#, fuzzy, c-format +msgid "25% Grey" +msgstr "25% ç°åº¦" + +#: goffice/utils/go-pattern.c:99 +#, fuzzy, c-format +msgid "12.5% Grey" +msgstr "12.5% ç°åº¦" + +#: goffice/utils/go-pattern.c:100 +#, fuzzy, c-format +msgid "6.25% Grey" +msgstr "6.25% ç°åº¦" + +#: goffice/utils/go-pattern.c:101 +msgid "Horizontal Stripe" +msgstr "水平間æ¢" + +#: goffice/utils/go-pattern.c:102 +msgid "Vertical Stripe" +msgstr "垂直間æ¢" + +#: goffice/utils/go-pattern.c:103 +msgid "Reverse Diagonal Stripe" +msgstr "åå‘å°è§’é–“æ¢" + +#: goffice/utils/go-pattern.c:104 +msgid "Diagonal Stripe" +msgstr "å°è§’é–“æ¢" + +#: goffice/utils/go-pattern.c:105 +msgid "Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:106 +msgid "Thick Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:107 +msgid "Thin Horizontal Stripe" +msgstr "水平幼間æ¢" + +#: goffice/utils/go-pattern.c:108 +msgid "Thin Vertical Stripe" +msgstr "垂直幼間æ¢" + +#: goffice/utils/go-pattern.c:109 +msgid "Thin Reverse Diagonal Stripe" +msgstr "åå‘å°è§’幼間æ¢" + +#: goffice/utils/go-pattern.c:110 +msgid "Thin Diagonal Stripe" +msgstr "å°è§’幼間æ¢" + +#: goffice/utils/go-pattern.c:111 +msgid "Thin Horizontal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:112 +msgid "Thin Diagonal Crosshatch" +msgstr "" + +#: goffice/utils/go-pattern.c:113 +msgid "Foreground Solid" +msgstr "" + +#: goffice/utils/go-pattern.c:114 +msgid "Small Circles" +msgstr "å°åœ“" + +#: goffice/utils/go-pattern.c:115 +msgid "Semi Circles" +msgstr "åŠåœ“" + +#: goffice/utils/go-pattern.c:116 +msgid "Thatch" +msgstr "" + +#: goffice/utils/go-pattern.c:117 +msgid "Large Circles" +msgstr "大圓" + +#: goffice/utils/go-pattern.c:118 +msgid "Bricks" +msgstr "磚塊" + +#: plugins/plot_barcol/gog-1.5d.c:335 plugins/plot_pie/gog-pie.c:231 +#: plugins/plot_radar/gog-radar.c:225 +msgid "Labels" +msgstr "標籤" + +#: plugins/plot_barcol/gog-1.5d.c:337 plugins/plot_boxes/gog-boxplot.c:229 +#: plugins/plot_pie/gog-pie.c:233 plugins/plot_radar/gog-radar.c:227 +msgid "Values" +msgstr "變數值" + +#: plugins/plot_barcol/gog-1.5d.c:464 +#, fuzzy +msgid "Error bars" +msgstr "åˆ†æžæª”案時發生錯誤" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd bar/col plot in a chart will be called +#. * PlotBarCol2 +#: plugins/plot_barcol/gog-barcol.c:97 +msgid "PlotBarCol" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:2 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-prefs.glade.h:2 +#: plugins/plot_pie/gog-pie-series.glade.h:2 +#: plugins/plot_pie/gog-ring-prefs.glade.h:2 +#, no-c-format +msgid "%" +msgstr "%" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:3 +msgid "How far the bars/cols overlap as a percentage of the width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:4 +#, fuzzy +msgid "O_verlap:" +msgstr "é‡ç–Š(_O):" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:5 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:3 +msgid "Separation between groups as a percentage of bar/col width" +msgstr "" + +#: plugins/plot_barcol/gog-barcol-prefs.glade.h:6 +#: plugins/plot_boxes/gog-boxplot-prefs.glade.h:4 +msgid "_Gap:" +msgstr "é–“è·(_G):" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotLine2 +#. +#: plugins/plot_barcol/gog-line.c:92 +#, fuzzy +msgid "PlotLine" +msgstr "ç„¡" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotArea2 +#. +#: plugins/plot_barcol/gog-line.c:211 +#, fuzzy +msgid "PlotArea" +msgstr "å€åŸŸ" + +#: plugins/plot_barcol/plot-types.xml.in.h:1 +msgid "3D Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:2 +msgid "3D Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:3 +msgid "3D Percentage Bars" +msgstr "立體百分比æ¢ç‹€åœ–" + +#: plugins/plot_barcol/plot-types.xml.in.h:4 +msgid "3D Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:5 +msgid "3D Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:6 +msgid "3D Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:7 +msgid "Adjacent Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:8 +msgid "Adjacent Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:9 +msgid "Adjacent horizontal 3D bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:10 +msgid "Adjacent horizontal bars grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:11 +msgid "Adjacent vertical 3D columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:12 +msgid "Adjacent vertical columns grouped by major and minor categories." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:13 +msgid "Area" +msgstr "å€åŸŸ" + +#: plugins/plot_barcol/plot-types.xml.in.h:14 +msgid "Area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:15 +#, fuzzy +msgid "Areas" +msgstr "å€åŸŸ(_A)" + +#: plugins/plot_barcol/plot-types.xml.in.h:16 +msgid "Bar" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:17 +msgid "Column" +msgstr "列" + +#: plugins/plot_barcol/plot-types.xml.in.h:18 +msgid "Line" +msgstr "ç›´ç·š" + +#: plugins/plot_barcol/plot-types.xml.in.h:19 +#, fuzzy +msgid "Line plot." +msgstr "匯入的行數" + +#: plugins/plot_barcol/plot-types.xml.in.h:20 +#, fuzzy +msgid "Lines" +msgstr "ç›´ç·š" + +#: plugins/plot_barcol/plot-types.xml.in.h:21 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:22 +msgid "" +"Minor categories stacked as percentages of the minor total, in 3D vertical " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:23 +msgid "" +"Minor categories stacked as percentages of the minor total, in horizontal " +"bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:24 +msgid "" +"Minor categories stacked as percentages of the minor total, in vertical " +"columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:25 +msgid "" +"Minor categories stacked in horizontal 3D bars, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:26 +msgid "Minor categories stacked in horizontal bars grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:27 +msgid "" +"Minor categories stacked in vertical 3D columns, grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:28 +msgid "Minor categories stacked in vertical columns grouped by major category." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:29 +#, fuzzy +msgid "Percentage Areas" +msgstr "百分比æ¢ç‹€åœ–" + +#: plugins/plot_barcol/plot-types.xml.in.h:30 +msgid "Percentage Bars" +msgstr "百分比æ¢ç‹€åœ–" + +#: plugins/plot_barcol/plot-types.xml.in.h:31 +msgid "Percentage Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:32 +#, fuzzy +msgid "Percentage Lines" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:33 +#, fuzzy +msgid "Percentage area plot." +msgstr "百分比æ¢ç‹€åœ–" + +#: plugins/plot_barcol/plot-types.xml.in.h:34 +#, fuzzy +msgid "Percentage line plot." +msgstr "百分比" + +#: plugins/plot_barcol/plot-types.xml.in.h:35 +msgid "Stacked Areas" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:36 +msgid "Stacked Bars" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:37 +msgid "Stacked Columns" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:38 +msgid "Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:39 +msgid "Stacked area plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:40 +msgid "Stacked line plot." +msgstr "" + +#: plugins/plot_barcol/plot-types.xml.in.h:41 +#, fuzzy +msgid "Unmarked Lines" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:42 +#, fuzzy +msgid "Unmarked Percentage Lines" +msgstr "百分比(_C)" + +#: plugins/plot_barcol/plot-types.xml.in.h:43 +msgid "Unmarked Stacked Lines" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:1 +msgid "Area plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:2 +msgid "Bar/Col plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:3 +msgid "Charting : Bar/Col/Line/Area" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:4 +#, fuzzy +msgid "Default 1.5d plot types" +msgstr "é è¨­è§£è­¯å™¨" + +#: plugins/plot_barcol/plugin.xml.in.h:5 +msgid "Line plotting engine" +msgstr "" + +#: plugins/plot_barcol/plugin.xml.in.h:6 +msgid "Line, Area, Bar and Column plots" +msgstr "" + +#. xgettext : the base for how to name box-plot objects +#. * eg The 2nd box-plot in a chart will be called +#. * BoxPlot2 +#: plugins/plot_boxes/gog-boxplot.c:103 +msgid "Box-Plot" +msgstr "" + +#: plugins/plot_boxes/gog-boxplot.c:340 +#, fuzzy +msgid "Invalid data." +msgstr "密碼無效" + +#: plugins/plot_boxes/plot-types.xml.in.h:1 +msgid "" +"Box-Plot. You must provide five values to the plot engine in this order: " +"minimum, first quartile, median, third quartile, and maximum, not the raw " +"data." +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:2 +msgid "BoxPlot" +msgstr "" + +#: plugins/plot_boxes/plot-types.xml.in.h:3 +msgid "BoxPlots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:1 +msgid "Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:2 +#, fuzzy +msgid "Box-plot plotting engine" +msgstr "åˆ†æžæª”案時發生錯誤" + +#: plugins/plot_boxes/plugin.xml.in.h:3 +msgid "Charting : Box-Plots" +msgstr "" + +#: plugins/plot_boxes/plugin.xml.in.h:4 plugins/plot_surface/plugin.xml.in.h:2 +#, fuzzy +msgid "Default surface plot types" +msgstr "é è¨­è§£è­¯å™¨" + +#: plugins/plot_pie/gog-pie.c:180 +msgid "PlotPie" +msgstr "" + +#: plugins/plot_pie/gog-pie.c:303 +#, fuzzy +msgid "PlotRing" +msgstr "ç„¡" + +#: plugins/plot_pie/gog-pie.c:593 +#, c-format +msgid "" +"%s point %d\n" +"Value %g (%g)" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:3 +#: plugins/plot_pie/gog-ring-prefs.glade.h:4 +msgid "Degrees counter clockwise from 3 O'Clock" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:4 +#: plugins/plot_pie/gog-ring-prefs.glade.h:5 +msgid "Slices start _at:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:5 +#: plugins/plot_pie/gog-ring-prefs.glade.h:6 +msgid "" +"The default amount each slice is separated from the center measured as a " +"percentage of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:6 +#: plugins/plot_pie/gog-ring-prefs.glade.h:7 +msgid "_Slice Separation:" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:7 +#: plugins/plot_pie/gog-ring-prefs.glade.h:8 +msgid "_Vary colors by slice" +msgstr "" + +#: plugins/plot_pie/gog-pie-prefs.glade.h:8 +#: plugins/plot_pie/gog-ring-prefs.glade.h:9 +msgid "degrees" +msgstr "度" + +#: plugins/plot_pie/gog-pie-series.glade.h:3 +msgid "" +"The amount this slice is separated from the center measured as a percentage " +"of the radius of the pie" +msgstr "" + +#: plugins/plot_pie/gog-pie-series.glade.h:4 +#, fuzzy +msgid "_Separation:" +msgstr "分隔符號:" + +#: plugins/plot_pie/gog-ring-prefs.glade.h:3 +#, fuzzy +msgid "Cen_ter size:" +msgstr "分類:" + +#: plugins/plot_pie/plot-types.xml.in.h:1 +msgid "3D Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:2 +msgid "3D Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:3 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary pies." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:4 +msgid "" +"Major totals as percentages with each wedge subdivided into secondary " +"stacked bars." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:5 +msgid "Multi-Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:6 +msgid "Multi-pie-bars" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:7 +msgid "" +"Percentage of each contributor displayed in ring for each serie with wedges " +"of the last ring split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:8 +msgid "Percentage of each contributor displayed in ring for each serie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:9 +msgid "Percentage of each contributor in 3D pie." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:10 +msgid "Percentage of each contributor with 3D wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:11 +msgid "Percentage of each contributor with wedges split apart." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:12 +msgid "Percentage of each contributor." +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:13 +msgid "Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:14 +msgid "Ring" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:15 +msgid "Split Pie" +msgstr "" + +#: plugins/plot_pie/plot-types.xml.in.h:16 +#, fuzzy +msgid "Split Ring" +msgstr "抽樣" + +#: plugins/plot_pie/plugin.xml.in.h:1 +msgid "Charting : Pie/Ring" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:2 +#, fuzzy +msgid "Default pie types" +msgstr "é è¨­è§£è­¯å™¨" + +#: plugins/plot_pie/plugin.xml.in.h:3 +msgid "Pie and Ring plots" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:4 +msgid "Pie plotting engine" +msgstr "" + +#: plugins/plot_pie/plugin.xml.in.h:5 +msgid "Ring plotting engine" +msgstr "" + +#. xgettext : the base for how to name radar plot objects +#. * eg The 2nd radar plot in a chart will be called +#. * PlotRadar2 +#: plugins/plot_radar/gog-radar.c:113 +msgid "PlotRadar" +msgstr "" + +#. xgettext : the base for how to name bar/col plot objects +#. * eg The 2nd line plot in a chart will be called +#. * PlotRadarArea2 +#. +#: plugins/plot_radar/gog-radar.c:276 +#, fuzzy +msgid "PlotRadarArea" +msgstr "å€åŸŸ" + +#: plugins/plot_radar/plot-types.xml.in.h:1 +msgid "Area Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:2 +#, fuzzy +msgid "Area radar plot." +msgstr "百分比æ¢ç‹€åœ–" + +#: plugins/plot_radar/plot-types.xml.in.h:3 +msgid "Dotted Radar" +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:4 +#, fuzzy +msgid "Radar" +msgstr "標準誤差" + +#: plugins/plot_radar/plot-types.xml.in.h:5 +msgid "Radar plot with dots." +msgstr "" + +#: plugins/plot_radar/plot-types.xml.in.h:6 +msgid "Radar plot." +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:1 +msgid "Charting : Radial plots" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:2 +#, fuzzy +msgid "Default radar plot types" +msgstr "é è¨­è§£è­¯å™¨" + +#: plugins/plot_radar/plugin.xml.in.h:3 +msgid "Radar Area plotting engine" +msgstr "" + +#: plugins/plot_radar/plugin.xml.in.h:4 +#, fuzzy +msgid "Radar plotting engine" +msgstr "åˆ†æžæª”案時發生錯誤" + +#: plugins/plot_radar/plugin.xml.in.h:5 +msgid "Radial/Radar plots" +msgstr "" + +#: plugins/plot_surface/gog-contour-prefs.glade.h:1 +#, fuzzy +msgid "_Slices number:" +msgstr "整數" + +#. xgettext : the base for how to name contour plot objects +#. +#: plugins/plot_surface/gog-surface.c:102 +msgid "PlotContour" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:368 plugins/plot_xy/gog-xy.c:349 +#: plugins/plot_xy/gog-xy.c:501 +msgid "X" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:370 plugins/plot_xy/gog-xy.c:351 +#: plugins/plot_xy/gog-xy.c:503 +msgid "Y" +msgstr "" + +#: plugins/plot_surface/gog-surface.c:372 +msgid "Z" +msgstr "" + +#: plugins/plot_surface/plot-types.xml.in.h:1 +#, fuzzy +msgid "Contour" +msgstr "中" + +#: plugins/plot_surface/plot-types.xml.in.h:2 +#, fuzzy +msgid "Contour plot." +msgstr "匯入的行數" + +#: plugins/plot_surface/plot-types.xml.in.h:3 +#, fuzzy +msgid "Surface" +msgstr "來æº" + +#: plugins/plot_surface/plugin.xml.in.h:1 +#, fuzzy +msgid "Contour plotting engine" +msgstr "åˆ†æžæª”案時發生錯誤" + +#: plugins/plot_surface/plugin.xml.in.h:3 +#, fuzzy +msgid "Surface Charts" +msgstr "來æºå€åŸŸ" + +#: plugins/plot_surface/plugin.xml.in.h:4 +#, fuzzy +msgid "Surface charts" +msgstr "來æºå€åŸŸ" + +# ADJUST_TO_%_NORMAL_SIZE_2 +#: plugins/plot_xy/gog-bubble-prefs.glade.h:2 +#, fuzzy, no-c-format +msgid "% of default size" +msgstr "%(_N)" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:3 +msgid "3_d" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:4 +#, fuzzy +msgid "Dia_meter" +msgstr "厘米" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:5 +msgid "Show _negative values" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:6 +#, fuzzy +msgid "Sur_face" +msgstr "來æº" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:7 +msgid "_Bubbles scaled to" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:8 +msgid "_Size represented by:" +msgstr "" + +#: plugins/plot_xy/gog-bubble-prefs.glade.h:9 +msgid "_Vary colors by bubble" +msgstr "" + +#. xgettext : the base for how to name scatter plot objects +#. * eg The 2nd plot in a chart will be called +#. * PlotXY2 +#: plugins/plot_xy/gog-xy.c:279 +msgid "PlotXY" +msgstr "" + +#: plugins/plot_xy/gog-xy.c:391 +#, fuzzy +msgid "PlotBubble" +msgstr "é›™" + +#: plugins/plot_xy/gog-xy.c:505 plugins/plot_xy/plot-types.xml.in.h:1 +#, fuzzy +msgid "Bubble" +msgstr "é›™" + +#: plugins/plot_xy/gog-xy.c:997 +#, fuzzy +msgid "Y Error bars" +msgstr "åˆ†æžæª”案時發生錯誤" + +#: plugins/plot_xy/gog-xy.c:999 +#, fuzzy +msgid "X Error bars" +msgstr "åˆ†æžæª”案時發生錯誤" + +#: plugins/plot_xy/plot-types.xml.in.h:2 +msgid "Interpolate between multi-dimensional points with Bezier splines." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:3 +msgid "" +"Linearly interpolate between multi-dimensional points,with markers at each " +"point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:4 +msgid "Linearly interpolate between multi-dimensional points." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:5 +msgid "Markers at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:6 +msgid "Multi-dimensional points with circle at each point." +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:7 +msgid "Plot X, Y and bubble size." +msgstr "" + +#. really 3_1 +#: plugins/plot_xy/plot-types.xml.in.h:9 +msgid "XY" +msgstr "" + +#: plugins/plot_xy/plot-types.xml.in.h:10 +#, fuzzy +msgid "XY Lines" +msgstr "ç›´ç·š" + +#: plugins/plot_xy/plot-types.xml.in.h:11 +#, fuzzy +msgid "XY Points" +msgstr "ä½ç½®" + +#: plugins/plot_xy/plot-types.xml.in.h:12 +#, fuzzy +msgid "XY Splines" +msgstr "ç›´ç·š" + +#: plugins/plot_xy/plugin.xml.in.h:1 +msgid "2D plots" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:2 +msgid "2D scatter plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:3 +msgid "Bubble plotting engine" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:4 +msgid "Charting : XY/Scatter/Bubble" +msgstr "" + +#: plugins/plot_xy/plugin.xml.in.h:5 +msgid "Stock Scatter plot types" +msgstr "" diff --git a/lib/goffice-0.0.4/tests/Makefile.am b/lib/goffice-0.0.4/tests/Makefile.am new file mode 100644 index 0000000000..bc2058db2e --- /dev/null +++ b/lib/goffice-0.0.4/tests/Makefile.am @@ -0,0 +1,7 @@ +check_PROGRAMS = pie-demo + +include $(top_srcdir)/lib/goffice-0.0.4/goffice.mk + +AM_CFLAGS = $(GOFFICE_DEPS_CFLAGS) +AM_LDFLAGS += $(GOFFICE_DEPS_LIBS) ../goffice/libgoffice-1.la +pie_demo_SOURCES = pie-demo.c diff --git a/lib/goffice-0.0.4/tests/pie-demo.c b/lib/goffice-0.0.4/tests/pie-demo.c new file mode 100644 index 0000000000..048f0c9bf6 --- /dev/null +++ b/lib/goffice-0.0.4/tests/pie-demo.c @@ -0,0 +1,116 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * pie-demo.c : + * + * Copyright (C) 2003-2005 Jean Brefort (jean.brefort@normalesup.org) + * 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 Library 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void +on_quit (GtkObject *object) +{ + gtk_object_destroy (object); + gtk_main_quit (); +} + +int +main (int argc, char *argv[]) +{ + GtkWidget *window, *box, *w; + GogChart *chart; + GogGraph *graph; + GogLabel *label; + GogPlot *pie; + GogSeries *series; + GogStyle *style; + GOData *data; + GError *error; + PangoFontDescription *desc; + char const *title = "Some statistics"; + char const * const legends[] = {"first", "second", "third", "fourth"}; + double values[] = {10., 20., 30., 40.}; + + gtk_init (&argc, &argv); + /* Initialize libgoffice */ + libgoffice_init (); + /* Initialize plugins manager */ + go_plugins_init (NULL, NULL, NULL, NULL, TRUE, GO_PLUGIN_LOADER_MODULE_TYPE); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_resize (GTK_WINDOW (window), 300, 340); + gtk_window_set_title (GTK_WINDOW (window), "pie demo"); + g_signal_connect (window, "destroy", gtk_main_quit, NULL); + + box = gtk_vbox_new (FALSE, 0); + w = gtk_button_new_from_stock (GTK_STOCK_QUIT); + g_signal_connect_swapped (w, "clicked", G_CALLBACK (on_quit), window); + gtk_box_pack_end (GTK_BOX (box), w, FALSE, FALSE, 0); + + w = gtk_hseparator_new (); + gtk_box_pack_end (GTK_BOX (box), w, FALSE, FALSE, 2); + + /* Create a graph widget and add it to the GtkVBox */ + w = go_graph_widget_new (); + gtk_box_pack_end (GTK_BOX (box), w, TRUE, TRUE, 0); + /* Get the embedded graph */ + graph = go_graph_widget_get_graph (GO_GRAPH_WIDGET (w)); + /* Add a title */ + label = (GogLabel *) g_object_new (GOG_LABEL_TYPE, NULL); + data = go_data_scalar_str_new (title, FALSE); + gog_dataset_set_dim (GOG_DATASET (label), 0, data, NULL); + gog_object_add_by_name (GOG_OBJECT (graph), "Title", GOG_OBJECT (label)); + /* Change the title font */ + style = gog_styled_object_get_style (GOG_STYLED_OBJECT (label)); + desc = pango_font_description_from_string ("Sans bold 16"); + gog_style_set_font_desc (style, desc); + /* Get the chart created by the widget initialization */ + chart = go_graph_widget_get_chart (GO_GRAPH_WIDGET (w)); + /* Create a pie plot and add it to the chart */ + pie = (GogPlot *) gog_plot_new_by_name ("GogPiePlot"); + gog_object_add_by_name (GOG_OBJECT (chart), "Plot", GOG_OBJECT (pie)); + /* Create a series for the plot and populate it with some simple data */ + series = gog_plot_new_series (pie); + data = go_data_vector_str_new (legends, 4, NULL); + gog_series_set_dim (series, 0, data, &error); + data = go_data_vector_val_new (values, 4, NULL); + gog_series_set_dim (series, 1, data, &error); + /* Add a legend to the chart */ + gog_object_add_by_name (GOG_OBJECT (chart), "Legend", NULL); + + gtk_container_add (GTK_CONTAINER (window), box); + gtk_widget_show_all (GTK_WIDGET (window)); + + w = gtk_hseparator_new (); + gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0); + + gtk_main (); + + /* Clean libgoffice stuff */ + libgoffice_shutdown (); + return 0; +} diff --git a/lib/goffice/Makefile.am b/lib/goffice/Makefile.am deleted file mode 100644 index 8e39fe30b2..0000000000 --- a/lib/goffice/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -SUBDIRS = app graph utils gui-utils drawing pixmaps split cut-n-paste - -AM_CFLAGS = $(GLIB_CFLAGS) $(ART_CFLAGS) $(GNOME_CFLAGS) $(GSF_CFLAGS) $(PRINT_CFLAGS) - -noinst_LTLIBRARIES = libgoffice.la - -BUILT_SOURCES = \ - paths.h - -libgoffice_la_LIBADD = \ - utils/libgoffice-utils.la \ - app/libgoffice-app.la \ - gui-utils/libgoffice-gui-utils.la \ - graph/libgoffice-graph.la \ - drawing/libgoffice-drawing.la \ - split/libgoffice-split.la \ - split/widgets/libgoffice-split-widgets.la \ - cut-n-paste/pcre/libpcre.la \ - ${GLIB_LIBS} - -libgoffice_la_SOURCES = \ - $(BUILT_SOURCES) \ - goffice.c \ - goffice.h \ - goffice-config.h \ - split.h \ - split.c - -EXTRA_DIST = goffice.mk goffice-plugins.mk paths.h.in - -paths.h: paths.h.in ${top_builddir}/config.status - rm -f $@.tmp - sed < $< > $@.tmp \ - -e 's:@-GNC_LIBDIR-@:${GNC_LIBDIR}:g' - mv $@.tmp $@ - -include $(srcdir)/goffice.mk diff --git a/lib/goffice/app/Makefile.am b/lib/goffice/app/Makefile.am deleted file mode 100644 index 08e2995961..0000000000 --- a/lib/goffice/app/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -SUBDIRS = - -noinst_LTLIBRARIES = libgoffice-app.la - -libgoffice_app_la_SOURCES = \ - goffice-app.h \ - go-doc.c \ - go-doc.h \ - go-doc-impl.h \ - go-doc-control.c \ - go-doc-control.h \ - go-doc-control-impl.h - -libgoffice_app_la_LIBADD = ${GLIB_LIBS} - -AM_CFLAGS = ${GLIB_CFLAGS} ${GSF_CFLAGS} - -include $(srcdir)/../goffice.mk diff --git a/lib/goffice/app/go-plugin.h b/lib/goffice/app/go-plugin.h deleted file mode 100644 index bb7473d528..0000000000 --- a/lib/goffice/app/go-plugin.h +++ /dev/null @@ -1,59 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * go-plugin.h : A GOffice plugin - * - * Copyright (C) 2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef GO_PLUGIN_H -#define GO_PLUGIN_H - -#include -#include - -G_BEGIN_DECLS - -#define GO_PLUGIN_TYPE (go_plugin_get_type ()) -#define GO_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_PLUGIN_TYPE, GOPlugin)) -#define IS_GO_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_PLUGIN_TYPE)) - -/** - * NOTE NOTE NOTE - * Inherits from GTypeModule - **/ -GType go_plugin_get_type (void); - -/* Methods */ -GOErrorStack *go_plugin_load (GOPlugin *plugin); - -/* Info */ -gboolean go_plugin_is_enabled (GOPlugin *plugin); -gboolean go_plugin_is_loaded (GOPlugin *plugin); -char const *go_plugin_get_dir (GOPlugin *plugin); -char const *go_plugin_get_id (GOPlugin *plugin); -char const *go_plugin_get_name (GOPlugin *plugin); -char const *go_plugin_get_description (GOPlugin *plugin); -char const *go_plugin_get_textdomain (GOPlugin *plugin); -GSList *go_plugin_get_dependencies (GOPlugin *plugin); -GSList *go_plugin_get_services (GOPlugin *plugin); - -/* Utilities */ -char *go_plugin_build_filename (GOPlugin *plugin, - char const *first_element, ...); - -G_END_DECLS - -#endif /* GO_PLUGIN_H */ diff --git a/lib/goffice/app/go-service.c b/lib/goffice/app/go-service.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/lib/goffice/cut-n-paste/Makefile.am b/lib/goffice/cut-n-paste/Makefile.am deleted file mode 100644 index afd955bc57..0000000000 --- a/lib/goffice/cut-n-paste/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -if WITH_GNOME - EGG_RECENT = egg-recent-files -else - EGG_RECENT = -endif - -SUBDIRS = pcre -#$(EGG_RECENT) diff --git a/lib/goffice/cut-n-paste/egg-recent-files/Makefile.am b/lib/goffice/cut-n-paste/egg-recent-files/Makefile.am deleted file mode 100644 index 660c80a86e..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -INCLUDES = \ - $(GNUMERIC_CFLAGS) -I$(top_srcdir)/src -DUSE_STABLE_LIBGNOMEUI \ - \ - \ - -DEGG_COMPILATION - -noinst_LIBRARIES = libeggrecent.a - -vfsdir = $(libdir)/gnome-vfs-2.0/modules - -vfsconfdir = $(sysconfdir)/gnome-vfs-2.0/modules - -libeggrecent_a_LIBADD = $(EGG_RECENT_LIBS) - -libeggrecent_a_SOURCES = \ - egg-recent.h \ - egg-recent-item.h \ - egg-recent-item.c \ - egg-recent-model.c \ - egg-recent-model.h \ - egg-recent-view.c \ - egg-recent-view.h \ - egg-recent-view-gtk.c \ - egg-recent-view-gtk.h \ - \ - \ - egg-recent-util.c \ - egg-recent-util.h - - - - - diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-item.c b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-item.c deleted file mode 100644 index 081ecd1844..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-item.c +++ /dev/null @@ -1,443 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#include -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - * - * Authors: - * James Willcox - */ - - -#include -#include -#include -#include -#include -#include "egg-recent-item.h" - - - -EggRecentItem * -egg_recent_item_new (void) -{ - EggRecentItem *item; - - item = g_new (EggRecentItem, 1); - - item->groups = NULL; - item->private_data = FALSE; - item->uri = NULL; - item->mime_type = NULL; - - item->refcount = 1; - - return item; -} - -static void -egg_recent_item_free (EggRecentItem *item) -{ - if (item->uri) - g_free (item->uri); - - if (item->mime_type) - g_free (item->mime_type); - - if (item->groups) { - g_list_foreach (item->groups, (GFunc)g_free, NULL); - g_list_free (item->groups); - item->groups = NULL; - } - - g_free (item); -} - -EggRecentItem * -egg_recent_item_ref (EggRecentItem *item) -{ - item->refcount++; - return item; -} - -EggRecentItem * -egg_recent_item_unref (EggRecentItem *item) -{ - item->refcount--; - - if (item->refcount == 0) { - egg_recent_item_free (item); - } - - return item; -} - - -EggRecentItem * -egg_recent_item_new_from_uri (const gchar *uri) -{ - EggRecentItem *item; - - g_return_val_if_fail (uri != NULL, NULL); - - item = egg_recent_item_new (); - - if (!egg_recent_item_set_uri (item ,uri)) { - egg_recent_item_free (item); - return NULL; - } - - item->mime_type = gnome_vfs_get_mime_type (item->uri); - - if (!item->mime_type) - item->mime_type = g_strdup (GNOME_VFS_MIME_TYPE_UNKNOWN); - - return item; -} - -/* -static GList * -egg_recent_item_copy_groups (const GList *list) -{ - GList *newlist = NULL; - - while (list) { - gchar *group = (gchar *)list->data; - - newlist = g_list_prepend (newlist, g_strdup (group)); - - list = list->next; - } - - return newlist; -} - - -EggRecentItem * -egg_recent_item_copy (const EggRecentItem *item) -{ - EggRecentItem *newitem; - - newitem = egg_recent_item_new (); - newitem->uri = g_strdup (item->uri); - if (item->mime_type) - newitem->mime_type = g_strdup (item->mime_type); - newitem->timestamp = item->timestamp; - newitem->private_data = item->private_data; - newitem->groups = egg_recent_item_copy_groups (item->groups); - - return newitem; -} -*/ - -/* -EggRecentItem * -egg_recent_item_new_valist (const gchar *uri, va_list args) -{ - EggRecentItem *item; - EggRecentArg arg; - gchar *str1; - gchar *str2; - gboolean priv; - - item = egg_recent_item_new (); - - arg = va_arg (args, EggRecentArg); - - while (arg != EGG_RECENT_ARG_NONE) { - switch (arg) { - case EGG_RECENT_ARG_MIME_TYPE: - str1 = va_arg (args, gchar*); - - egg_recent_item_set_mime_type (item, str1); - break; - case EGG_RECENT_ARG_GROUP: - str1 = va_arg (args, gchar*); - - egg_recent_item_add_group (item, str1); - break; - case EGG_RECENT_ARG_PRIVATE: - priv = va_arg (args, gboolean); - - egg_recent_item_set_private (item, priv); - break; - default: - break; - } - - arg = va_arg (args, EggRecentArg); - } - - return item; -} -*/ - -gboolean -egg_recent_item_set_uri (EggRecentItem *item, const gchar *uri) -{ - gchar *utf8_uri; - - /* if G_BROKEN_FILENAMES is not set, this should succede */ - if (g_utf8_validate (uri, -1, NULL)) { - item->uri = gnome_vfs_make_uri_from_input (uri); - } else { - utf8_uri = g_filename_to_utf8 (uri, -1, NULL, NULL, NULL); - - if (utf8_uri == NULL) { - g_warning ("Couldn't convert URI to UTF-8"); - return FALSE; - } - - if (g_utf8_validate (utf8_uri, -1, NULL)) { - item->uri = gnome_vfs_make_uri_from_input (utf8_uri); - } else { - g_free (utf8_uri); - return FALSE; - } - - g_free (utf8_uri); - } - - return TRUE; -} - -gchar * -egg_recent_item_get_uri (const EggRecentItem *item) -{ - return g_strdup (item->uri); -} - -G_CONST_RETURN gchar * -egg_recent_item_peek_uri (const EggRecentItem *item) -{ - return item->uri; -} - -gchar * -egg_recent_item_get_uri_utf8 (const EggRecentItem *item) -{ - /* this could fail, but it's not likely, since we've already done it - * once in set_uri() - */ - return g_filename_to_utf8 (item->uri, -1, NULL, NULL, NULL); -} - -gchar * -egg_recent_item_get_uri_for_display (const EggRecentItem *item) -{ - return gnome_vfs_format_uri_for_display (item->uri); -} - -/* Stolen from gnome_vfs_make_valid_utf8() */ -static char * -make_valid_utf8 (const char *name) -{ - GString *string; - const char *remainder, *invalid; - int remaining_bytes, valid_bytes; - - string = NULL; - remainder = name; - remaining_bytes = strlen (name); - - while (remaining_bytes != 0) { - if (g_utf8_validate (remainder, remaining_bytes, &invalid)) - break; - - valid_bytes = invalid - remainder; - - if (string == NULL) - string = g_string_sized_new (remaining_bytes); - - g_string_append_len (string, remainder, valid_bytes); - g_string_append_c (string, '?'); - - remaining_bytes -= valid_bytes + 1; - remainder = invalid + 1; - } - - if (string == NULL) - return g_strdup (name); - - g_string_append (string, remainder); -/* g_string_append (string, _(" (invalid file name)")); */ - g_assert (g_utf8_validate (string->str, -1, NULL)); - - return g_string_free (string, FALSE); -} - -/** - * egg_recent_item_get_short_name: - * @item: an #EggRecentItem - * - * Computes a valid UTF-8 string that can be used as the name of the item in a - * menu or list. For example, calling this function on an item that refers to - * "file:///foo/bar.txt" will yield "bar.txt". - * - * Return value: A newly-allocated string in UTF-8 encoding; free it with - * g_free(). - **/ -gchar * -egg_recent_item_get_short_name (const EggRecentItem *item) -{ - GnomeVFSURI *uri; - char *short_name; - gboolean valid; - - g_return_val_if_fail (item != NULL, NULL); - - if (item->uri == NULL) - return NULL; - - uri = gnome_vfs_uri_new (item->uri); - if (uri == NULL) - return NULL; - - short_name = gnome_vfs_uri_extract_short_name (uri); - valid = FALSE; - - if (strcmp (gnome_vfs_uri_get_scheme (uri), "file") == 0) { - char *tmp; - - tmp = g_filename_to_utf8 (short_name, -1, NULL, NULL, NULL); - if (tmp) { - g_free (short_name); - short_name = tmp; - valid = TRUE; - } - } - - if (!valid) { - char *tmp; - - tmp = make_valid_utf8 (short_name); - g_assert (tmp != NULL); - g_free (short_name); - short_name = tmp; - } - - gnome_vfs_uri_unref (uri); - - return short_name; -} - -void -egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime) -{ - item->mime_type = g_strdup (mime); -} - -gchar * -egg_recent_item_get_mime_type (const EggRecentItem *item) -{ - return g_strdup (item->mime_type); -} - -void -egg_recent_item_set_timestamp (EggRecentItem *item, time_t timestamp) -{ - if (timestamp == (time_t) -1) - time (×tamp); - - item->timestamp = timestamp; -} - -time_t -egg_recent_item_get_timestamp (const EggRecentItem *item) -{ - return item->timestamp; -} - -G_CONST_RETURN GList * -egg_recent_item_get_groups (const EggRecentItem *item) -{ - return item->groups; -} - -gboolean -egg_recent_item_in_group (const EggRecentItem *item, const gchar *group_name) -{ - GList *tmp; - - tmp = item->groups; - while (tmp != NULL) { - gchar *val = (gchar *)tmp->data; - - if (strcmp (group_name, val) == 0) - return TRUE; - - tmp = tmp->next; - } - - return FALSE; -} - -void -egg_recent_item_add_group (EggRecentItem *item, const gchar *group_name) -{ - g_return_if_fail (group_name != NULL); - - if (!egg_recent_item_in_group (item, group_name)) - item->groups = g_list_append (item->groups, g_strdup (group_name)); -} - -void -egg_recent_item_remove_group (EggRecentItem *item, const gchar *group_name) -{ - GList *tmp; - - g_return_if_fail (group_name != NULL); - - tmp = item->groups; - while (tmp != NULL) { - gchar *val = (gchar *)tmp->data; - - if (strcmp (group_name, val) == 0) { - item->groups = g_list_remove (item->groups, - val); - g_free (val); - break; - } - - tmp = tmp->next; - } -} - -void -egg_recent_item_set_private (EggRecentItem *item, gboolean priv) -{ - item->private_data = priv; -} - -gboolean -egg_recent_item_get_private (const EggRecentItem *item) -{ - return item->private_data; -} - -GType -egg_recent_item_get_type (void) -{ - static GType boxed_type = 0; - - if (!boxed_type) { - boxed_type = g_boxed_type_register_static ("EggRecentItem", - (GBoxedCopyFunc)egg_recent_item_ref, - (GBoxedFreeFunc)egg_recent_item_unref); - } - - return boxed_type; -} diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-item.h b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-item.h deleted file mode 100644 index 3189d6a31a..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-item.h +++ /dev/null @@ -1,80 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - - -#ifndef __EGG_RECENT_ITEM_H__ -#define __EGG_RECENT_ITEM_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define EGG_TYPE_RECENT_ITEM (egg_recent_item_get_type ()) - -#define EGG_RECENT_ITEM_LIST_UNREF(list) \ - g_list_foreach (list, (GFunc)egg_recent_item_unref, NULL); \ - g_list_free (list); - -typedef struct _EggRecentItem EggRecentItem; - -struct _EggRecentItem { - /* do not access any of these directly */ - gchar *uri; - gchar *mime_type; - time_t timestamp; - - gboolean private_data; - - GList *groups; - - int refcount; -}; - -GType egg_recent_item_get_type (void) G_GNUC_CONST; - -/* constructors */ -EggRecentItem * egg_recent_item_new (void); - -EggRecentItem * egg_recent_item_ref (EggRecentItem *item); -EggRecentItem * egg_recent_item_unref (EggRecentItem *item); - -/* automatically fetches the mime type, etc */ -EggRecentItem * egg_recent_item_new_from_uri (const gchar *uri); - -gboolean egg_recent_item_set_uri (EggRecentItem *item, const gchar *uri); -gchar * egg_recent_item_get_uri (const EggRecentItem *item); -gchar * egg_recent_item_get_uri_utf8 (const EggRecentItem *item); -gchar * egg_recent_item_get_uri_for_display (const EggRecentItem *item); -gchar * egg_recent_item_get_short_name (const EggRecentItem *item); - -void egg_recent_item_set_mime_type (EggRecentItem *item, const gchar *mime); -gchar * egg_recent_item_get_mime_type (const EggRecentItem *item); - -void egg_recent_item_set_timestamp (EggRecentItem *item, time_t timestamp); -time_t egg_recent_item_get_timestamp (const EggRecentItem *item); - -G_CONST_RETURN gchar *egg_recent_item_peek_uri (const EggRecentItem *item); - - -/* groups */ -G_CONST_RETURN GList * egg_recent_item_get_groups (const EggRecentItem *item); - -gboolean egg_recent_item_in_group (const EggRecentItem *item, - const gchar *group_name); - -void egg_recent_item_add_group (EggRecentItem *item, - const gchar *group_name); - -void egg_recent_item_remove_group (EggRecentItem *item, - const gchar *group_name); - -void egg_recent_item_set_private (EggRecentItem *item, - gboolean priv); - -gboolean egg_recent_item_get_private (const EggRecentItem *item); - - -G_END_DECLS - -#endif /* __EGG_RECENT_ITEM_H__ */ diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-model.c b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-model.c deleted file mode 100644 index 10aee62c72..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-model.c +++ /dev/null @@ -1,1784 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#include -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - * - * Authors: - * James Willcox - */ - -#ifdef HAVE_CONFIG_H -/* #include */ -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "egg-recent-model.h" -#include "egg-recent-item.h" - -#define EGG_RECENT_MODEL_FILE_PATH "/.recently-used" -#define EGG_RECENT_MODEL_BUFFER_SIZE 8192 - -#define EGG_RECENT_MODEL_MAX_ITEMS 500 -#define EGG_RECENT_MODEL_DEFAULT_LIMIT 10 -#define EGG_RECENT_MODEL_TIMEOUT_LENGTH 200 - -#define EGG_RECENT_MODEL_KEY_DIR "/desktop/gnome/recent_files" -#define EGG_RECENT_MODEL_DEFAULT_LIMIT_KEY EGG_RECENT_MODEL_KEY_DIR "/default_limit" -#define EGG_RECENT_MODEL_EXPIRE_KEY EGG_RECENT_MODEL_KEY_DIR "/expire" - -struct _EggRecentModelPrivate { - GSList *mime_filter_values; /* list of mime types we allow */ - GSList *group_filter_values; /* list of groups we allow */ - GSList *scheme_filter_values; /* list of URI schemes we allow */ - - EggRecentModelSort sort_type; /* type of sorting to be done */ - - int limit; /* soft limit for length of the list */ - int expire_days; /* number of days to hold an item */ - - char *path; /* path to the file we store stuff in */ - - GHashTable *monitors; - - GnomeVFSMonitorHandle *monitor; - - GConfClient *client; - gboolean use_default_limit; - - guint limit_change_notify_id; - guint expiration_change_notify_id; - - guint changed_timeout; -}; - -/* signals */ -enum { - CHANGED, - LAST_SIGNAL -}; - -static GType model_signals[LAST_SIGNAL] = { 0 }; - -/* properties */ -enum { - PROP_BOGUS, - PROP_MIME_FILTERS, - PROP_GROUP_FILTERS, - PROP_SCHEME_FILTERS, - PROP_SORT_TYPE, - PROP_LIMIT -}; - -typedef struct { - GSList *states; - GList *items; - EggRecentItem *current_item; -}ParseInfo; - -typedef enum { - STATE_START, - STATE_RECENT_FILES, - STATE_RECENT_ITEM, - STATE_URI, - STATE_MIME_TYPE, - STATE_TIMESTAMP, - STATE_PRIVATE, - STATE_GROUPS, - STATE_GROUP -} ParseState; - -typedef struct _ChangedData { - EggRecentModel *model; - GList *list; -}ChangedData; - -#define TAG_RECENT_FILES "RecentFiles" -#define TAG_RECENT_ITEM "RecentItem" -#define TAG_URI "URI" -#define TAG_MIME_TYPE "Mime-Type" -#define TAG_TIMESTAMP "Timestamp" -#define TAG_PRIVATE "Private" -#define TAG_GROUPS "Groups" -#define TAG_GROUP "Group" - -static void start_element_handler (GMarkupParseContext *context, - const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - gpointer user_data, - GError **error); - -static void end_element_handler (GMarkupParseContext *context, - const gchar *element_name, - gpointer user_data, - GError **error); - -static void text_handler (GMarkupParseContext *context, - const gchar *text, - gsize text_len, - gpointer user_data, - GError **error); - -static void error_handler (GMarkupParseContext *context, - GError *error, - gpointer user_data); - -static GMarkupParser parser = {start_element_handler, end_element_handler, - text_handler, - NULL, - error_handler}; - -static gboolean -egg_recent_model_string_match (const GSList *list, const gchar *str) -{ - const GSList *tmp; - - if (list == NULL || str == NULL) - return TRUE; - - tmp = list; - - while (tmp) { - if (g_pattern_match_string (tmp->data, str)) - return TRUE; - - tmp = tmp->next; - } - - return FALSE; -} - -static gboolean -egg_recent_model_write_raw (EggRecentModel *model, FILE *file, - const gchar *content) -{ - int len; - int fd; - struct stat sbuf; - - rewind (file); - - len = strlen (content); - fd = fileno (file); - - if (fstat (fd, &sbuf) < 0) - g_warning ("Couldn't stat XML document."); - - if ((off_t)len < sbuf.st_size) { - ftruncate (fd, len); - } - - if (fputs (content, file) == EOF) - return FALSE; - - fsync (fd); - rewind (file); - - return TRUE; -} - -static GList * -egg_recent_model_delete_from_list (GList *list, - const gchar *uri) -{ - GList *tmp; - - if (!uri) - return list; - - tmp = list; - - while (tmp) { - EggRecentItem *item = tmp->data; - GList *next; - - next = tmp->next; - - if (!strcmp (egg_recent_item_peek_uri (item), uri)) { - egg_recent_item_unref (item); - - list = g_list_remove_link (list, tmp); - g_list_free_1 (tmp); - } - - tmp = next; - } - - return list; -} - -static void -egg_recent_model_add_new_groups (EggRecentItem *item, - EggRecentItem *upd_item) -{ - const GList *tmp; - - tmp = egg_recent_item_get_groups (upd_item); - - while (tmp) { - char *group = tmp->data; - - if (!egg_recent_item_in_group (item, group)) - egg_recent_item_add_group (item, group); - - tmp = tmp->next; - } -} - -static gboolean -egg_recent_model_update_item (GList *items, EggRecentItem *upd_item) -{ - GList *tmp; - const char *uri; - - uri = egg_recent_item_peek_uri (upd_item); - - tmp = items; - - while (tmp) { - EggRecentItem *item = tmp->data; - - if (gnome_vfs_uris_match (egg_recent_item_peek_uri (item), uri)) { - egg_recent_item_set_timestamp (item, (time_t) -1); - - egg_recent_model_add_new_groups (item, upd_item); - - return TRUE; - } - - tmp = tmp->next; - } - - return FALSE; -} - -static gchar * -egg_recent_model_read_raw (EggRecentModel *model, FILE *file) -{ - GString *string; - char buf[EGG_RECENT_MODEL_BUFFER_SIZE]; - - rewind (file); - - string = g_string_new (NULL); - while (fgets (buf, EGG_RECENT_MODEL_BUFFER_SIZE, file)) { - string = g_string_append (string, buf); - } - - rewind (file); - - return g_string_free (string, FALSE); -} - - - -static void -parse_info_init (ParseInfo *info) -{ - info->states = g_slist_prepend (NULL, STATE_START); - info->items = NULL; -} - -static void -parse_info_free (ParseInfo *info) -{ - g_slist_free (info->states); -} - -static void -push_state (ParseInfo *info, - ParseState state) -{ - info->states = g_slist_prepend (info->states, GINT_TO_POINTER (state)); -} - -static void -pop_state (ParseInfo *info) -{ - g_return_if_fail (info->states != NULL); - - info->states = g_slist_remove (info->states, info->states->data); -} - -static ParseState -peek_state (ParseInfo *info) -{ - g_return_val_if_fail (info->states != NULL, STATE_START); - - return GPOINTER_TO_INT (info->states->data); -} - -#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0) - -static void -start_element_handler (GMarkupParseContext *context, - const gchar *element_name, - const gchar **attribute_names, - const gchar **attribute_values, - gpointer user_data, - GError **error) -{ - ParseInfo *info = (ParseInfo *)user_data; - - if (ELEMENT_IS (TAG_RECENT_FILES)) - push_state (info, STATE_RECENT_FILES); - else if (ELEMENT_IS (TAG_RECENT_ITEM)) { - info->current_item = egg_recent_item_new (); - push_state (info, STATE_RECENT_ITEM); - } else if (ELEMENT_IS (TAG_URI)) - push_state (info, STATE_URI); - else if (ELEMENT_IS (TAG_MIME_TYPE)) - push_state (info, STATE_MIME_TYPE); - else if (ELEMENT_IS (TAG_TIMESTAMP)) - push_state (info, STATE_TIMESTAMP); - else if (ELEMENT_IS (TAG_PRIVATE)) { - push_state (info, STATE_PRIVATE); - egg_recent_item_set_private (info->current_item, TRUE); - } else if (ELEMENT_IS (TAG_GROUPS)) - push_state (info, STATE_GROUPS); - else if (ELEMENT_IS (TAG_GROUP)) - push_state (info, STATE_GROUP); -} - -static gint -list_compare_func_mru (gpointer a, gpointer b) -{ - EggRecentItem *item_a = (EggRecentItem *)a; - EggRecentItem *item_b = (EggRecentItem *)b; - - return item_a->timestamp < item_b->timestamp; -} - -static gint -list_compare_func_lru (gpointer a, gpointer b) -{ - EggRecentItem *item_a = (EggRecentItem *)a; - EggRecentItem *item_b = (EggRecentItem *)b; - - return item_a->timestamp > item_b->timestamp; -} - - - -static void -end_element_handler (GMarkupParseContext *context, - const gchar *element_name, - gpointer user_data, - GError **error) -{ - ParseInfo *info = (ParseInfo *)user_data; - - switch (peek_state (info)) { - case STATE_RECENT_ITEM: - info->items = g_list_append (info->items, - info->current_item); - if (info->current_item->uri == NULL || - strlen (info->current_item->uri) == 0) - g_warning ("URI NOT LOADED"); - break; - default: - break; - } - - pop_state (info); -} - -static void -text_handler (GMarkupParseContext *context, - const gchar *text, - gsize text_len, - gpointer user_data, - GError **error) -{ - ParseInfo *info = (ParseInfo *)user_data; - - switch (peek_state (info)) { - case STATE_START: - case STATE_RECENT_FILES: - case STATE_RECENT_ITEM: - case STATE_PRIVATE: - case STATE_GROUPS: - break; - case STATE_URI: - egg_recent_item_set_uri (info->current_item, text); - break; - case STATE_MIME_TYPE: - egg_recent_item_set_mime_type (info->current_item, - text); - break; - case STATE_TIMESTAMP: - egg_recent_item_set_timestamp (info->current_item, - (time_t)atoi (text)); - break; - case STATE_GROUP: - egg_recent_item_add_group (info->current_item, - text); - break; - } - -} - -static void -error_handler (GMarkupParseContext *context, - GError *error, - gpointer user_data) -{ - g_warning ("Error in parse: %s", error->message); -} - -static void -egg_recent_model_enforce_limit (GList *list, int limit) -{ - int len; - GList *end; - - /* limit < 0 means unlimited */ - if (limit <= 0) - return; - - len = g_list_length (list); - - if (len > limit) { - GList *next; - - end = g_list_nth (list, limit-1); - next = end->next; - - end->next = NULL; - - EGG_RECENT_ITEM_LIST_UNREF (next); - } -} - -static GList * -egg_recent_model_sort (EggRecentModel *model, GList *list) -{ - switch (model->priv->sort_type) { - case EGG_RECENT_MODEL_SORT_MRU: - list = g_list_sort (list, - (GCompareFunc)list_compare_func_mru); - break; - case EGG_RECENT_MODEL_SORT_LRU: - list = g_list_sort (list, - (GCompareFunc)list_compare_func_lru); - break; - case EGG_RECENT_MODEL_SORT_NONE: - break; - } - - return list; -} - -static gboolean -egg_recent_model_group_match (EggRecentItem *item, GSList *groups) -{ - GSList *tmp; - - tmp = groups; - - while (tmp != NULL) { - const gchar * group = (const gchar *)tmp->data; - - if (egg_recent_item_in_group (item, group)) - return TRUE; - - tmp = tmp->next; - } - - return FALSE; -} - -static GList * -egg_recent_model_filter (EggRecentModel *model, - GList *list) -{ - EggRecentItem *item; - GList *newlist = NULL; - gchar *mime_type; - gchar *uri; - - g_return_val_if_fail (list != NULL, NULL); - - while (list) { - gboolean pass_mime_test = FALSE; - gboolean pass_group_test = FALSE; - gboolean pass_scheme_test = FALSE; - item = (EggRecentItem *)list->data; - list = list->next; - - uri = egg_recent_item_get_uri (item); - - /* filter by mime type */ - if (model->priv->mime_filter_values != NULL) { - mime_type = egg_recent_item_get_mime_type (item); - - if (egg_recent_model_string_match - (model->priv->mime_filter_values, - mime_type)) - pass_mime_test = TRUE; - - g_free (mime_type); - } else - pass_mime_test = TRUE; - - /* filter by group */ - if (pass_mime_test && model->priv->group_filter_values != NULL) { - if (egg_recent_model_group_match - (item, model->priv->group_filter_values)) - pass_group_test = TRUE; - } else if (egg_recent_item_get_private (item)) { - pass_group_test = FALSE; - } else - pass_group_test = TRUE; - - /* filter by URI scheme */ - if (pass_mime_test && pass_group_test && - model->priv->scheme_filter_values != NULL) { - gchar *scheme; - - scheme = gnome_vfs_get_uri_scheme (uri); - - if (egg_recent_model_string_match - (model->priv->scheme_filter_values, scheme)) - pass_scheme_test = TRUE; - - g_free (scheme); - } else - pass_scheme_test = TRUE; - - if (pass_mime_test && pass_group_test && pass_scheme_test) - newlist = g_list_prepend (newlist, item); - - g_free (uri); - } - - if (newlist) { - newlist = g_list_reverse (newlist); - g_list_free (list); - } - - - return newlist; -} - - - -#if 0 -static void -egg_recent_model_monitor_list_cb (GnomeVFSMonitorHandle *handle, - const gchar *monitor_uri, - const gchar *info_uri, - GnomeVFSMonitorEventType event_type, - gpointer user_data) -{ - EggRecentModel *model; - - model = EGG_RECENT_MODEL (user_data); - - if (event_type == GNOME_VFS_MONITOR_EVENT_DELETED) { - egg_recent_model_delete (model, monitor_uri); - g_hash_table_remove (model->priv->monitors, monitor_uri); - } -} - - - -static void -egg_recent_model_monitor_list (EggRecentModel *model, GList *list) -{ - GList *tmp; - - tmp = list; - while (tmp) { - EggRecentItem *item = (EggRecentItem *)tmp->data; - GnomeVFSMonitorHandle *handle; - GnomeVFSResult res; - gchar *uri; - - tmp = tmp->next; - - uri = egg_recent_item_get_uri (item); - if (g_hash_table_lookup (model->priv->monitors, uri)) { - /* already monitoring this one */ - g_free (uri); - continue; - } - - res = gnome_vfs_monitor_add (&handle, uri, - GNOME_VFS_MONITOR_FILE, - egg_recent_model_monitor_list_cb, - model); - - if (res == GNOME_VFS_OK) - g_hash_table_insert (model->priv->monitors, uri, handle); - else - g_free (uri); - } -} -#endif - - -static gboolean -egg_recent_model_changed_timeout (EggRecentModel *model) -{ - egg_recent_model_changed (model); - - return FALSE; -} - -static void -egg_recent_model_monitor_cb (GnomeVFSMonitorHandle *handle, - const gchar *monitor_uri, - const gchar *info_uri, - GnomeVFSMonitorEventType event_type, - gpointer user_data) -{ - EggRecentModel *model; - - g_return_if_fail (user_data != NULL); - g_return_if_fail (EGG_IS_RECENT_MODEL (user_data)); - model = EGG_RECENT_MODEL (user_data); - - if (event_type == GNOME_VFS_MONITOR_EVENT_CHANGED) { - if (model->priv->changed_timeout > 0) { - g_source_remove (model->priv->changed_timeout); - } - - model->priv->changed_timeout = g_timeout_add ( - EGG_RECENT_MODEL_TIMEOUT_LENGTH, - (GSourceFunc)egg_recent_model_changed_timeout, - model); - } -} - -static void -egg_recent_model_monitor (EggRecentModel *model, gboolean should_monitor) -{ - if (should_monitor && model->priv->monitor == NULL) { - char *uri; - - uri = gnome_vfs_get_uri_from_local_path (model->priv->path); - - gnome_vfs_monitor_add (&model->priv->monitor, - uri, - GNOME_VFS_MONITOR_FILE, - egg_recent_model_monitor_cb, - model); - - g_free (uri); - - /* if the above fails, don't worry about it. - * local notifications will still happen - */ - - } else if (!should_monitor && model->priv->monitor != NULL) { - gnome_vfs_monitor_cancel (model->priv->monitor); - model->priv->monitor = NULL; - } -} - -static void -egg_recent_model_set_limit_internal (EggRecentModel *model, int limit) -{ - model->priv->limit = limit; - - if (limit <= 0) - egg_recent_model_monitor (model, FALSE); - else { - egg_recent_model_monitor (model, TRUE); - egg_recent_model_changed (model); - } -} - -static GList * -egg_recent_model_read (EggRecentModel *model, FILE *file) -{ - GList *list=NULL; - gchar *content; - GMarkupParseContext *ctx; - ParseInfo info; - GError *error; - - content = egg_recent_model_read_raw (model, file); - - if (strlen (content) <= 0) { - g_free (content); - return NULL; - } - - parse_info_init (&info); - - ctx = g_markup_parse_context_new (&parser, 0, &info, NULL); - - error = NULL; - if (!g_markup_parse_context_parse (ctx, content, strlen (content), - &error)) { - g_warning (error->message); - g_error_free (error); - error = NULL; - goto out; - } - - error = NULL; - if (!g_markup_parse_context_end_parse (ctx, &error)) - goto out; - - g_markup_parse_context_free (ctx); -out: - list = info.items; - - parse_info_free (&info); - - g_free (content); - - /* - g_print ("Total items: %d\n", g_list_length (list)); - */ - - return list; -} - - -static gboolean -egg_recent_model_write (EggRecentModel *model, FILE *file, GList *list) -{ - GString *string; - gchar *data; - EggRecentItem *item; - const GList *groups; - int i; - int ret; - - string = g_string_new ("\n"); - string = g_string_append (string, "<" TAG_RECENT_FILES ">\n"); - - i=0; - while (list) { - gchar *uri; - gchar *mime_type; - gchar *escaped_uri; - time_t timestamp; - item = (EggRecentItem *)list->data; - - - uri = egg_recent_item_get_uri_utf8 (item); - escaped_uri = g_markup_escape_text (uri, - strlen (uri)); - g_free (uri); - - mime_type = egg_recent_item_get_mime_type (item); - timestamp = egg_recent_item_get_timestamp (item); - - string = g_string_append (string, " <" TAG_RECENT_ITEM ">\n"); - - g_string_append_printf (string, - " <" TAG_URI ">%s\n", escaped_uri); - - if (mime_type) - g_string_append_printf (string, - " <" TAG_MIME_TYPE ">%s\n", mime_type); - else - g_string_append_printf (string, - " <" TAG_MIME_TYPE ">\n"); - - - g_string_append_printf (string, - " <" TAG_TIMESTAMP ">%d\n", (int)timestamp); - - if (egg_recent_item_get_private (item)) - string = g_string_append (string, - " <" TAG_PRIVATE "/>\n"); - - /* write the groups */ - string = g_string_append (string, - " <" TAG_GROUPS ">\n"); - groups = egg_recent_item_get_groups (item); - - if (groups == NULL && egg_recent_item_get_private (item)) - g_warning ("Item with URI \"%s\" marked as private, but" - " does not belong to any groups.\n", uri); - - while (groups) { - const gchar *group = (const gchar *)groups->data; - gchar *escaped_group; - - escaped_group = g_markup_escape_text (group, strlen(group)); - - g_string_append_printf (string, - " <" TAG_GROUP ">%s\n", - escaped_group); - - g_free (escaped_group); - - groups = groups->next; - } - - string = g_string_append (string, " \n"); - - string = g_string_append (string, - " \n"); - - g_free (mime_type); - g_free (escaped_uri); - - list = list->next; - i++; - } - - string = g_string_append (string, ""); - - data = g_string_free (string, FALSE); - - ret = egg_recent_model_write_raw (model, file, data); - - g_free (data); - - return ret; -} - -static FILE * -egg_recent_model_open_file (EggRecentModel *model) -{ - FILE *file; - mode_t prev_umask; - - file = fopen (model->priv->path, "r+"); - if (file == NULL) { - /* be paranoid */ - prev_umask = umask (077); - - file = fopen (model->priv->path, "w+"); - - umask (prev_umask); - - g_return_val_if_fail (file != NULL, NULL); - } - - return file; -} - -static gboolean -egg_recent_model_lock_file (FILE *file) -{ - int fd; - gint try = 5; - - rewind (file); - fd = fileno (file); - - /* Attempt to lock the file 5 times, - * waiting a random interval (< 1 second) - * in between attempts. - * We should really be doing asynchronous - * locking, but requires substantially larger - * changes. - */ - - while (try > 0) - { - int rand_interval; - - if (lockf (fd, F_TLOCK, 0) == 0) - return TRUE; - - rand_interval = 1 + (int) (10.0 * rand()/(RAND_MAX + 1.0)); - - g_usleep (100000 * rand_interval); - - --try; - } - - return FALSE; -} - -static gboolean -egg_recent_model_unlock_file (FILE *file) -{ - int fd; - - rewind (file); - fd = fileno (file); - - return (lockf (fd, F_ULOCK, 0) == 0) ? TRUE : FALSE; -} - -static void -egg_recent_model_finalize (GObject *object) -{ - EggRecentModel *model = EGG_RECENT_MODEL (object); - - egg_recent_model_monitor (model, FALSE); - - - g_slist_foreach (model->priv->mime_filter_values, - (GFunc) g_pattern_spec_free, NULL); - g_slist_free (model->priv->mime_filter_values); - model->priv->mime_filter_values = NULL; - - g_slist_foreach (model->priv->scheme_filter_values, - (GFunc) g_pattern_spec_free, NULL); - g_slist_free (model->priv->scheme_filter_values); - model->priv->scheme_filter_values = NULL; - - g_slist_foreach (model->priv->group_filter_values, - (GFunc) g_free, NULL); - g_slist_free (model->priv->group_filter_values); - model->priv->group_filter_values = NULL; - - - if (model->priv->limit_change_notify_id) - gconf_client_notify_remove (model->priv->client, - model->priv->limit_change_notify_id); - model->priv->expiration_change_notify_id = 0; - - if (model->priv->expiration_change_notify_id) - gconf_client_notify_remove (model->priv->client, - model->priv->expiration_change_notify_id); - model->priv->expiration_change_notify_id = 0; - - g_object_unref (model->priv->client); - model->priv->client = NULL; - - - g_free (model->priv->path); - model->priv->path = NULL; - - g_hash_table_destroy (model->priv->monitors); - model->priv->monitors = NULL; - - - g_free (model->priv); -} - -static void -egg_recent_model_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EggRecentModel *model = EGG_RECENT_MODEL (object); - - switch (prop_id) - { - case PROP_MIME_FILTERS: - model->priv->mime_filter_values = - (GSList *)g_value_get_pointer (value); - break; - - case PROP_GROUP_FILTERS: - model->priv->group_filter_values = - (GSList *)g_value_get_pointer (value); - break; - - case PROP_SCHEME_FILTERS: - model->priv->scheme_filter_values = - (GSList *)g_value_get_pointer (value); - break; - - case PROP_SORT_TYPE: - model->priv->sort_type = g_value_get_int (value); - break; - - case PROP_LIMIT: - egg_recent_model_set_limit (model, - g_value_get_int (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -egg_recent_model_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EggRecentModel *model = EGG_RECENT_MODEL (object); - - switch (prop_id) - { - case PROP_MIME_FILTERS: - g_value_set_pointer (value, model->priv->mime_filter_values); - break; - - case PROP_GROUP_FILTERS: - g_value_set_pointer (value, model->priv->group_filter_values); - break; - - case PROP_SCHEME_FILTERS: - g_value_set_pointer (value, model->priv->scheme_filter_values); - break; - - case PROP_SORT_TYPE: - g_value_set_int (value, model->priv->sort_type); - break; - - case PROP_LIMIT: - g_value_set_int (value, model->priv->limit); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -egg_recent_model_class_init (EggRecentModelClass * klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - object_class->set_property = egg_recent_model_set_property; - object_class->get_property = egg_recent_model_get_property; - object_class->finalize = egg_recent_model_finalize; - - model_signals[CHANGED] = g_signal_new ("changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EggRecentModelClass, changed), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); - - - g_object_class_install_property (object_class, - PROP_MIME_FILTERS, - g_param_spec_pointer ("mime-filters", - "Mime Filters", - "List of mime types to be allowed.", - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, - PROP_GROUP_FILTERS, - g_param_spec_pointer ("group-filters", - "Group Filters", - "List of groups to be allowed.", - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, - PROP_SCHEME_FILTERS, - g_param_spec_pointer ("scheme-filters", - "Scheme Filters", - "List of URI schemes to be allowed.", - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, - PROP_SORT_TYPE, - g_param_spec_int ("sort-type", - "Sort Type", - "Type of sorting to be done.", - 0, EGG_RECENT_MODEL_SORT_NONE, - EGG_RECENT_MODEL_SORT_MRU, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, - PROP_LIMIT, - g_param_spec_int ("limit", - "Limit", - "Max number of items allowed.", - -1, EGG_RECENT_MODEL_MAX_ITEMS, - EGG_RECENT_MODEL_DEFAULT_LIMIT, - G_PARAM_READWRITE)); - - klass->changed = NULL; -} - - - -static void -egg_recent_model_limit_changed (GConfClient *client, guint cnxn_id, - GConfEntry *entry, gpointer user_data) -{ - EggRecentModel *model; - GConfValue *value; - - model = EGG_RECENT_MODEL (user_data); - - g_return_if_fail (model != NULL); - - if (model->priv->use_default_limit == FALSE) - return; /* ignore this key */ - - /* the key was unset, and the schema has apparently failed */ - if (entry == NULL) - return; - - value = gconf_entry_get_value (entry); - - if (value->type != GCONF_VALUE_INT) { - g_warning ("Expected GConfValue of type integer, " - "got something else"); - } - - - egg_recent_model_set_limit_internal (model, gconf_value_get_int (value)); -} - -static void -egg_recent_model_expiration_changed (GConfClient *client, guint cnxn_id, - GConfEntry *entry, gpointer user_data) -{ - -} - -static void -egg_recent_model_init (EggRecentModel * model) -{ - if (!gnome_vfs_init ()) { - g_warning ("gnome-vfs initialization failed."); - return; - } - - - model->priv = g_new0 (EggRecentModelPrivate, 1); - - model->priv->path = g_strdup_printf ("%s" EGG_RECENT_MODEL_FILE_PATH, - g_get_home_dir ()); - - model->priv->mime_filter_values = NULL; - model->priv->group_filter_values = NULL; - model->priv->scheme_filter_values = NULL; - - model->priv->client = gconf_client_get_default (); - gconf_client_add_dir (model->priv->client, EGG_RECENT_MODEL_KEY_DIR, - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - - model->priv->limit_change_notify_id = - gconf_client_notify_add (model->priv->client, - EGG_RECENT_MODEL_DEFAULT_LIMIT_KEY, - egg_recent_model_limit_changed, - model, NULL, NULL); - - model->priv->expiration_change_notify_id = - gconf_client_notify_add (model->priv->client, - EGG_RECENT_MODEL_EXPIRE_KEY, - egg_recent_model_expiration_changed, - model, NULL, NULL); - - model->priv->expire_days = gconf_client_get_int ( - model->priv->client, - EGG_RECENT_MODEL_EXPIRE_KEY, - NULL); - -#if 0 - /* keep this out, for now */ - model->priv->limit = gconf_client_get_int ( - model->priv->client, - EGG_RECENT_MODEL_DEFAULT_LIMIT_KEY, NULL); - model->priv->use_default_limit = TRUE; -#endif - model->priv->limit = EGG_RECENT_MODEL_DEFAULT_LIMIT; - model->priv->use_default_limit = FALSE; - - model->priv->monitors = g_hash_table_new_full ( - g_str_hash, g_str_equal, - (GDestroyNotify) g_free, - (GDestroyNotify) gnome_vfs_monitor_cancel); - - model->priv->monitor = NULL; - egg_recent_model_monitor (model, TRUE); -} - - -/** - * egg_recent_model_new: - * @sort: the type of sorting to use - * @limit: maximum number of items in the list - * - * This creates a new EggRecentModel object. - * - * Returns: a EggRecentModel object - */ -EggRecentModel * -egg_recent_model_new (EggRecentModelSort sort) -{ - EggRecentModel *model; - - model = EGG_RECENT_MODEL (g_object_new (egg_recent_model_get_type (), - "sort-type", sort, NULL)); - - g_return_val_if_fail (model, NULL); - - return model; -} - -/** - * egg_recent_model_add_full: - * @model: A EggRecentModel object. - * @item: A EggRecentItem - * - * This function adds an item to the list of recently used URIs. - * - * Returns: gboolean - */ -gboolean -egg_recent_model_add_full (EggRecentModel * model, EggRecentItem *item) -{ - FILE *file; - GList *list = NULL; - gboolean ret = FALSE; - gboolean updated = FALSE; - char *uri; - time_t t; - - g_return_val_if_fail (model != NULL, FALSE); - g_return_val_if_fail (EGG_IS_RECENT_MODEL (model), FALSE); - - uri = egg_recent_item_get_uri (item); - if (strncmp (uri, "recent-files://", strlen ("recent-files://")) == 0) { - g_free (uri); - return FALSE; - } else { - g_free (uri); - } - - file = egg_recent_model_open_file (model); - g_return_val_if_fail (file != NULL, FALSE); - - time (&t); - egg_recent_item_set_timestamp (item, t); - - if (egg_recent_model_lock_file (file)) { - - /* read existing stuff */ - list = egg_recent_model_read (model, file); - - /* if it's already there, we just update it */ - updated = egg_recent_model_update_item (list, item); - - if (!updated) { - list = g_list_prepend (list, item); - - egg_recent_model_enforce_limit (list, - EGG_RECENT_MODEL_MAX_ITEMS); - } - - /* write new stuff */ - if (!egg_recent_model_write (model, file, list)) - g_warning ("Write failed: %s", strerror (errno)); - - if (!updated) - list = g_list_remove (list, item); - - EGG_RECENT_ITEM_LIST_UNREF (list); - ret = TRUE; - } else { - g_warning ("Failed to lock: %s", strerror (errno)); - fclose (file); - return FALSE; - } - - if (!egg_recent_model_unlock_file (file)) - g_warning ("Failed to unlock: %s", strerror (errno)); - - fclose (file); - - if (model->priv->monitor == NULL) { - /* since monitoring isn't working, at least give a - * local notification - */ - egg_recent_model_changed (model); - } - - return ret; -} - -/** - * egg_recent_model_add: - * @model: A EggRecentModel object. - * @uri: A string URI - * - * This function adds an item to the list of recently used URIs. - * - * Returns: gboolean - */ -gboolean -egg_recent_model_add (EggRecentModel *model, const gchar *uri) -{ - EggRecentItem *item; - gboolean ret = FALSE; - - g_return_val_if_fail (model != NULL, FALSE); - g_return_val_if_fail (uri != NULL, FALSE); - - item = egg_recent_item_new_from_uri (uri); - - g_return_val_if_fail (item != NULL, FALSE); - - ret = egg_recent_model_add_full (model, item); - - egg_recent_item_unref (item); - - return ret; -} - - - -/** - * egg_recent_model_delete: - * @model: A EggRecentModel object. - * @uri: The URI you want to delete. - * - * This function deletes a URI from the file of recently used URIs. - * - * Returns: gboolean - */ -gboolean -egg_recent_model_delete (EggRecentModel * model, const gchar * uri) -{ - FILE *file; - GList *list; - unsigned int length; - gboolean ret = FALSE; - - g_return_val_if_fail (model != NULL, FALSE); - g_return_val_if_fail (EGG_IS_RECENT_MODEL (model), FALSE); - g_return_val_if_fail (uri != NULL, FALSE); - - file = egg_recent_model_open_file (model); - g_return_val_if_fail (file != NULL, FALSE); - - if (egg_recent_model_lock_file (file)) { - list = egg_recent_model_read (model, file); - - if (list == NULL) - goto out; - - length = g_list_length (list); - - list = egg_recent_model_delete_from_list (list, uri); - - if (length == g_list_length (list)) { - /* nothing was deleted */ - EGG_RECENT_ITEM_LIST_UNREF (list); - } else { - egg_recent_model_write (model, file, list); - EGG_RECENT_ITEM_LIST_UNREF (list); - ret = TRUE; - - } - } else { - g_warning ("Failed to lock: %s", strerror (errno)); - return FALSE; - } - -out: - - if (!egg_recent_model_unlock_file (file)) - g_warning ("Failed to unlock: %s", strerror (errno)); - - fclose (file); - - g_hash_table_remove (model->priv->monitors, uri); - - if (model->priv->monitor == NULL && ret) { - /* since monitoring isn't working, at least give a - * local notification - */ - egg_recent_model_changed (model); - } - - return ret; -} - - -/** - * egg_recent_model_get_list: - * @model: A EggRecentModel object. - * - * This function gets the current contents of the file - * - * Returns: a GList - */ -GList * -egg_recent_model_get_list (EggRecentModel *model) -{ - FILE *file; - GList *list=NULL; - - file = egg_recent_model_open_file (model); - g_return_val_if_fail (file != NULL, NULL); - - if (egg_recent_model_lock_file (file)) { - list = egg_recent_model_read (model, file); - - } else { - g_warning ("Failed to lock: %s", strerror (errno)); - fclose (file); - return NULL; - } - - if (!egg_recent_model_unlock_file (file)) - g_warning ("Failed to unlock: %s", strerror (errno)); - - if (list != NULL) { - list = egg_recent_model_filter (model, list); - list = egg_recent_model_sort (model, list); - - egg_recent_model_enforce_limit (list, model->priv->limit); - } - - fclose (file); - - return list; -} - - - -/** - * egg_recent_model_set_limit: - * @model: A EggRecentModel object. - * @limit: The maximum length of the list - * - * This function sets the maximum length of the list. Note: This only affects - * the length of the list emitted in the "changed" signal, not the list stored - * on disk. - * - * Returns: void - */ -void -egg_recent_model_set_limit (EggRecentModel *model, int limit) -{ - model->priv->use_default_limit = FALSE; - - egg_recent_model_set_limit_internal (model, limit); -} - -/** - * egg_recent_model_get_limit: - * @model: A EggRecentModel object. - * - * This function gets the maximum length of the list. - * - * Returns: int - */ -int -egg_recent_model_get_limit (EggRecentModel *model) -{ - return model->priv->limit; -} - - -/** - * egg_recent_model_clear: - * @model: A EggRecentModel object. - * - * This function clears the contents of the file - * - * Returns: void - */ -void -egg_recent_model_clear (EggRecentModel *model) -{ - FILE *file; - int fd; - - file = egg_recent_model_open_file (model); - g_return_if_fail (file != NULL); - - fd = fileno (file); - - if (egg_recent_model_lock_file (file)) { - ftruncate (fd, 0); - } else { - g_warning ("Failed to lock: %s", strerror (errno)); - return; - } - - if (!egg_recent_model_unlock_file (file)) - g_warning ("Failed to unlock: %s", strerror (errno)); - - fclose (file); -} - - -/** - * egg_recent_model_set_filter_mime_types: - * @model: A EggRecentModel object. - * - * Sets which mime types are allowed in the list. - * - * Returns: void - */ -void -egg_recent_model_set_filter_mime_types (EggRecentModel *model, - ...) -{ - va_list valist; - GSList *list = NULL; - gchar *str; - - g_return_if_fail (model != NULL); - - if (model->priv->mime_filter_values != NULL) { - g_slist_foreach (model->priv->mime_filter_values, - (GFunc) g_pattern_spec_free, NULL); - g_slist_free (model->priv->mime_filter_values); - model->priv->mime_filter_values = NULL; - } - - va_start (valist, model); - - str = va_arg (valist, gchar*); - - while (str != NULL) { - list = g_slist_prepend (list, g_pattern_spec_new (str)); - - str = va_arg (valist, gchar*); - } - - va_end (valist); - - model->priv->mime_filter_values = list; -} - -/** - * egg_recent_model_set_filter_groups: - * @model: A EggRecentModel object. - * - * Sets which groups are allowed in the list. - * - * Returns: void - */ -void -egg_recent_model_set_filter_groups (EggRecentModel *model, - ...) -{ - va_list valist; - GSList *list = NULL; - gchar *str; - - g_return_if_fail (model != NULL); - - if (model->priv->group_filter_values != NULL) { - g_slist_foreach (model->priv->group_filter_values, (GFunc)g_free, NULL); - g_slist_free (model->priv->group_filter_values); - model->priv->group_filter_values = NULL; - } - - va_start (valist, model); - - str = va_arg (valist, gchar*); - - while (str != NULL) { - list = g_slist_prepend (list, g_strdup (str)); - - str = va_arg (valist, gchar*); - } - - va_end (valist); - - model->priv->group_filter_values = list; -} - -/** - * egg_recent_model_set_filter_uri_schemes: - * @model: A EggRecentModel object. - * - * Sets which URI schemes (file, http, ftp, etc) are allowed in the list. - * - * Returns: void - */ -void -egg_recent_model_set_filter_uri_schemes (EggRecentModel *model, ...) -{ - va_list valist; - GSList *list = NULL; - gchar *str; - - g_return_if_fail (model != NULL); - - if (model->priv->scheme_filter_values != NULL) { - g_slist_foreach (model->priv->scheme_filter_values, - (GFunc) g_pattern_spec_free, NULL); - g_slist_free (model->priv->scheme_filter_values); - model->priv->scheme_filter_values = NULL; - } - - va_start (valist, model); - - str = va_arg (valist, gchar*); - - while (str != NULL) { - list = g_slist_prepend (list, g_pattern_spec_new (str)); - - str = va_arg (valist, gchar*); - } - - va_end (valist); - - model->priv->scheme_filter_values = list; -} - -/** - * egg_recent_model_set_sort: - * @model: A EggRecentModel object. - * @sort: A EggRecentModelSort type - * - * Sets the type of sorting to be used. - * - * Returns: void - */ -void -egg_recent_model_set_sort (EggRecentModel *model, - EggRecentModelSort sort) -{ - g_return_if_fail (model != NULL); - - model->priv->sort_type = sort; -} - -/** - * egg_recent_model_changed: - * @model: A EggRecentModel object. - * - * This function causes a "changed" signal to be emitted. - * - * Returns: void - */ -void -egg_recent_model_changed (EggRecentModel *model) -{ - GList *list = NULL; - - if (model->priv->limit > 0) { - list = egg_recent_model_get_list (model); - /* egg_recent_model_monitor_list (model, list); */ - - g_signal_emit (G_OBJECT (model), model_signals[CHANGED], 0, - list); - } - - if (list) - EGG_RECENT_ITEM_LIST_UNREF (list); -} - -static void -egg_recent_model_remove_expired_list (EggRecentModel *model, GList *list) -{ - time_t current_time; - time_t day_seconds; - - time (¤t_time); - day_seconds = model->priv->expire_days*24*60*60; - - while (list != NULL) { - EggRecentItem *item = list->data; - time_t timestamp; - - timestamp = egg_recent_item_get_timestamp (item); - - if ((timestamp+day_seconds) < current_time) { - gchar *uri = egg_recent_item_get_uri (item); - egg_recent_model_delete (model, uri); - - g_strdup (uri); - } - - list = list->next; - } -} - - -/** - * egg_recent_model_remove_expired: - * @model: A EggRecentModel object. - * - * Goes through the entire list, and removes any items that are older than - * the user-specified expiration period. - * - * Returns: void - */ -void -egg_recent_model_remove_expired (EggRecentModel *model) -{ - FILE *file; - GList *list=NULL; - - g_return_if_fail (model != NULL); - - file = egg_recent_model_open_file (model); - g_return_if_fail (file != NULL); - - if (egg_recent_model_lock_file (file)) { - list = egg_recent_model_read (model, file); - - } else { - g_warning ("Failed to lock: %s", strerror (errno)); - return; - } - - if (!egg_recent_model_unlock_file (file)) - g_warning ("Failed to unlock: %s", strerror (errno)); - - if (list != NULL) { - egg_recent_model_remove_expired_list (model, list); - EGG_RECENT_ITEM_LIST_UNREF (list); - } - - fclose (file); -} - -/** - * egg_recent_model_get_type: - * - * This returns a GType representing a EggRecentModel object. - * - * Returns: a GType - */ -GType -egg_recent_model_get_type (void) -{ - static GType egg_recent_model_type = 0; - - if(!egg_recent_model_type) { - static const GTypeInfo egg_recent_model_info = { - sizeof (EggRecentModelClass), - NULL, /* base init */ - NULL, /* base finalize */ - (GClassInitFunc)egg_recent_model_class_init, /* class init */ - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (EggRecentModel), - 0, - (GInstanceInitFunc) egg_recent_model_init - }; - - egg_recent_model_type = g_type_register_static (G_TYPE_OBJECT, - "EggRecentModel", - &egg_recent_model_info, 0); - } - - return egg_recent_model_type; -} - diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-model.h b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-model.h deleted file mode 100644 index 8838fd3aaa..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-model.h +++ /dev/null @@ -1,82 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef __EGG_RECENT_MODEL_H__ -#define __EGG_RECENT_MODEL_H__ - -#include "egg-recent-item.h" - -G_BEGIN_DECLS - -#define EGG_TYPE_RECENT_MODEL (egg_recent_model_get_type ()) -#define EGG_RECENT_MODEL(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, EGG_TYPE_RECENT_MODEL, EggRecentModel) -#define EGG_RECENT_MODEL_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, EGG_TYPE_RECENT_MODEL, EggRecentModelClass) -#define EGG_IS_RECENT_MODEL(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, egg_recent_model_get_type ()) - -typedef struct _EggRecentModel EggRecentModel; -typedef struct _EggRecentModelPrivate EggRecentModelPrivate; -typedef struct _EggRecentModelClass EggRecentModelClass; - -struct _EggRecentModel { - GObject parent_instance; - - EggRecentModelPrivate *priv; -}; - -struct _EggRecentModelClass { - GObjectClass parent_class; - - void (*changed) (EggRecentModel *model, GList *list); -}; - -typedef enum { - EGG_RECENT_MODEL_SORT_MRU, - EGG_RECENT_MODEL_SORT_LRU, - EGG_RECENT_MODEL_SORT_NONE -} EggRecentModelSort; - - -/* Standard group names */ -#define EGG_RECENT_GROUP_LAUNCHERS "Launchers" - - -GType egg_recent_model_get_type (void); - -/* constructors */ -EggRecentModel * egg_recent_model_new (EggRecentModelSort sort); - -/* public methods */ -void egg_recent_model_set_filter_mime_types (EggRecentModel *model, - ...); - -void egg_recent_model_set_filter_groups (EggRecentModel *model, ...); - -void egg_recent_model_set_filter_uri_schemes (EggRecentModel *model, - ...); - -void egg_recent_model_set_sort (EggRecentModel *model, - EggRecentModelSort sort); - -gboolean egg_recent_model_add_full (EggRecentModel *model, - EggRecentItem *item); - -gboolean egg_recent_model_add (EggRecentModel *model, - const gchar *uri); - -gboolean egg_recent_model_delete (EggRecentModel *model, - const gchar *uri); - -void egg_recent_model_clear (EggRecentModel *model); - -GList * egg_recent_model_get_list (EggRecentModel *model); - -void egg_recent_model_changed (EggRecentModel *model); - -void egg_recent_model_set_limit (EggRecentModel *model, int limit); -int egg_recent_model_get_limit (EggRecentModel *model); - -void egg_recent_model_remove_expired (EggRecentModel *model); - -G_END_DECLS - -#endif /* __EGG_RECENT_MODEL_H__ */ diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-util.c b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-util.c deleted file mode 100644 index c629bfc8fc..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-util.c +++ /dev/null @@ -1,141 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#include -/* #include */ -#include -#include -#include -#include -#include -#include -#ifndef USE_STABLE_LIBGNOMEUI -#include -#include -#endif -#include -#include "egg-recent-util.h" - -#define EGG_RECENT_UTIL_HOSTNAME_SIZE 512 - -/* ripped out of gedit2 */ -gchar* -egg_recent_util_escape_underlines (const gchar* text) -{ - GString *str; - gint length; - const gchar *p; - const gchar *end; - - g_return_val_if_fail (text != NULL, NULL); - - length = strlen (text); - - str = g_string_new (""); - - p = text; - end = text + length; - - while (p != end) - { - const gchar *next; - next = g_utf8_next_char (p); - - switch (*p) - { - case '_': - g_string_append (str, "__"); - break; - default: - g_string_append_len (str, p, next - p); - break; - } - - p = next; - } - - return g_string_free (str, FALSE); -} - -#ifndef USE_STABLE_LIBGNOMEUI -static GdkPixbuf * -load_icon_file (char *filename, - guint nominal_size) -{ - GdkPixbuf *pixbuf, *scaled_pixbuf; - guint width, height; - - pixbuf = gdk_pixbuf_new_from_file_at_size (filename, nominal_size, nominal_size, NULL); - - if (pixbuf == NULL) { - return NULL; - } - - width = gdk_pixbuf_get_width (pixbuf); - height = gdk_pixbuf_get_height (pixbuf); - /* if the icon is larger than the nominal size, scale down */ - if (MAX (width, height) > nominal_size) { - if (width > height) { - height = height * nominal_size / width; - width = nominal_size; - } else { - width = width * nominal_size / height; - height = nominal_size; - } - scaled_pixbuf = gdk_pixbuf_scale_simple - (pixbuf, width, height, GDK_INTERP_BILINEAR); - g_object_unref (pixbuf); - pixbuf = scaled_pixbuf; - } - - return pixbuf; -} - -GdkPixbuf * -egg_recent_util_get_icon (GnomeIconTheme *theme, const gchar *uri, - const gchar *mime_type, int size) -{ - gchar *icon; - gchar *filename; - const GnomeIconData *icon_data; - GdkPixbuf *pixbuf; - - icon = gnome_icon_lookup (theme, NULL, uri, NULL, NULL, - mime_type, 0, NULL); - - - g_return_val_if_fail (icon != NULL, NULL); - - filename = gnome_icon_theme_lookup_icon (theme, icon, - size, - &icon_data, - NULL); - g_free (icon); - - if (filename == NULL) { - return NULL; - } - - pixbuf = load_icon_file (filename, size); - g_free (filename); - - - return pixbuf; -} -#endif /* !USE_STABLE_LIBGNOMEUI */ - -gchar * -egg_recent_util_get_unique_id (void) -{ - char hostname[EGG_RECENT_UTIL_HOSTNAME_SIZE]; - time_t the_time; - guint32 rand; - int pid; - - gethostname (hostname, EGG_RECENT_UTIL_HOSTNAME_SIZE); - - time (&the_time); - rand = g_random_int (); - pid = getpid (); - - return g_strdup_printf ("%s-%d-%d-%d", hostname, (int)time, (int)rand, (int)pid); -} diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-util.h b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-util.h deleted file mode 100644 index 38aec7b08d..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-util.h +++ /dev/null @@ -1,25 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - - -#ifndef __EGG_RECENT_UTIL__ -#define __EGG_RECENT_UTIL__ - -#include -#ifndef USE_STABLE_LIBGNOMEUI -#include -#endif - -G_BEGIN_DECLS - -gchar * egg_recent_util_escape_underlines (const gchar *uri); -gchar * egg_recent_util_get_unique_id (void); -#ifndef USE_STABLE_LIBGNOMEUI -GdkPixbuf * egg_recent_util_get_icon (GnomeIconTheme *theme, - const gchar *uri, - const gchar *mime_type, - int size); -#endif - -G_END_DECLS - -#endif /* __EGG_RECENT_UTIL__ */ diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view-gtk.c b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view-gtk.c deleted file mode 100644 index 777081f6f7..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view-gtk.c +++ /dev/null @@ -1,820 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#include -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - * - * Authors: - * James Willcox - */ - -#ifdef HAVE_CONFIG_H -/* #include */ -#endif - -#include -#include -#include -#include -#include -#ifndef USE_STABLE_LIBGNOMEUI -#include -#endif -#include -#include "egg-recent-model.h" -#include "egg-recent-view.h" -#include "egg-recent-view-gtk.h" -#include "egg-recent-util.h" -#include "egg-recent-item.h" - -struct _EggRecentViewGtk { - GObject parent_instance; /* We emit signals */ - - GtkWidget *menu; - GtkWidget *start_menu_item; - - gboolean leading_sep; - gboolean trailing_sep; - - gulong changed_cb_id; - - gchar *uid; - - gboolean show_icons; - gboolean show_numbers; -#ifndef USE_STABLE_LIBGNOMEUI - GnomeIconTheme *theme; -#endif - - GtkTooltips *tooltips; - EggRecentViewGtkTooltipFunc tooltip_func; - gpointer tooltip_func_data; - - EggRecentModel *model; - GConfClient *client; - GtkIconSize icon_size; -}; - - - -struct _EggRecentViewGtkMenuData { - EggRecentViewGtk *view; - EggRecentItem *item; -}; - -typedef struct _EggRecentViewGtkMenuData EggRecentViewGtkMenuData; - -enum { - ACTIVATE, - LAST_SIGNAL -}; - -/* GObject properties */ -enum { - PROP_BOGUS, - PROP_MENU, - PROP_START_MENU_ITEM, - PROP_SHOW_ICONS, - PROP_SHOW_NUMBERS -}; - -static guint view_signals[LAST_SIGNAL] = { 0 }; - - -static void -egg_recent_view_gtk_clear (EggRecentViewGtk *view) -{ - GList *menu_children; - GList *p; - GObject *menu_item; - gint *menu_data=NULL; - - g_return_if_fail (view->menu != NULL); - - menu_children = gtk_container_get_children (GTK_CONTAINER (view->menu)); - - p = menu_children; - while (p != NULL) { - menu_item = (GObject *)p->data; - - menu_data = (gint *)g_object_get_data (menu_item, - view->uid); - - if (menu_data) { - gtk_container_remove (GTK_CONTAINER (view->menu), - GTK_WIDGET (menu_item)); - - } - - p = p->next; - } -} - - -static gint -egg_recent_view_gtk_find_menu_offset (EggRecentViewGtk *view) -{ - gint i; - GList *menu_children; - GList *p; - GtkWidget *menu_item; - gint menu_loc=-1; - - g_return_val_if_fail (view, 0); - - menu_children = GTK_MENU_SHELL (view->menu)->children; - - i = 0; - p = menu_children; - while (p != NULL) { - menu_item = (GtkWidget *)p->data; - - if (menu_item == view->start_menu_item) { - menu_loc = i; - break; - } - - p = p->next; - i++; - } - - return menu_loc; -} - -static void -egg_recent_view_gtk_menu_cb (GtkWidget *menu, gpointer data) -{ - EggRecentViewGtkMenuData *md = (EggRecentViewGtkMenuData *) data; - EggRecentItem *item; - - g_return_if_fail (md); - g_return_if_fail (md->item); - g_return_if_fail (md->view); - g_return_if_fail (EGG_IS_RECENT_VIEW_GTK (md->view)); - - item = md->item; - - egg_recent_item_ref (item); - - g_signal_emit (G_OBJECT(md->view), view_signals[ACTIVATE], 0, - item); - - egg_recent_item_unref (item); -} - -static void -egg_recent_view_gtk_destroy_cb (gpointer data, GClosure *closure) -{ - EggRecentViewGtkMenuData *md = data; - - egg_recent_item_unref (md->item); - g_free (md); -} - -static GtkWidget * -egg_recent_view_gtk_new_separator (EggRecentViewGtk *view) -{ - GtkWidget *retval; - - g_return_val_if_fail (view, NULL); - - retval = gtk_separator_menu_item_new (); - - /** - * this is a tag so we can distinguish our menu items - * from others that may be in the menu. - */ - g_object_set_data (G_OBJECT (retval), - view->uid, - GINT_TO_POINTER (1)); - - - gtk_widget_show (retval); - - return retval; -} - -static GtkWidget * -egg_recent_view_gtk_new_menu_item (EggRecentViewGtk *view, - EggRecentItem *item, - gint index) -{ - GtkWidget *menu_item; - EggRecentViewGtkMenuData *md; - gchar *mime_type; - GtkWidget *image; - GdkPixbuf *pixbuf; - gchar *text; - gchar *short_name; - gchar *escaped; - - g_return_val_if_fail (view, NULL); - g_return_val_if_fail (item, NULL); - - short_name = egg_recent_item_get_short_name (item); - if (!short_name) - return NULL; - - escaped = egg_recent_util_escape_underlines (short_name); - g_free (short_name); - - if (view->show_numbers) { - /* avoid having conflicting mnemonics */ - if (index >= 10) - text = g_strdup_printf ("%d. %s", index, - escaped); - else - text = g_strdup_printf ("_%d. %s", index, - escaped); - g_free (escaped); - } else { - text = escaped; - } - - mime_type = egg_recent_item_get_mime_type (item); -#ifndef USE_STABLE_LIBGNOMEUI - { - int width, height; - gchar *uri; - - gtk_icon_size_lookup_for_settings - (gtk_widget_get_settings (view->menu), - view->icon_size, - &width, &height); - - uri = egg_recent_item_get_uri (item); - pixbuf = egg_recent_util_get_icon (view->theme, uri, - mime_type, - height); - g_free (uri); - } -#else - pixbuf = NULL; -#endif - image = gtk_image_new_from_pixbuf (pixbuf); - if (pixbuf) - g_object_unref (pixbuf); - - if (view->show_icons) - gtk_widget_show (image); - - menu_item = gtk_image_menu_item_new_with_mnemonic (text); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), - image); - - md = g_new0 (EggRecentViewGtkMenuData, 1); - md->view = view; - md->item = egg_recent_item_ref (item); - - g_signal_connect_data (G_OBJECT (menu_item), "activate", - G_CALLBACK (egg_recent_view_gtk_menu_cb), - md, - (GClosureNotify)egg_recent_view_gtk_destroy_cb, - 0); - - g_free (mime_type); - g_free (text); - - /** - * this is a tag so we can distinguish our menu items - * from others that may be in the menu. - */ - g_object_set_data (G_OBJECT (menu_item), - view->uid, - GINT_TO_POINTER (1)); - - - gtk_widget_show (menu_item); - - return menu_item; -} - -static void -egg_recent_view_gtk_add_to_menu (EggRecentViewGtk *view, - EggRecentItem *item, - gint display, - gint index) -{ - GtkWidget *menu_item; - gint menu_offset; - - g_return_if_fail (view); - g_return_if_fail (view->menu); - - menu_offset = egg_recent_view_gtk_find_menu_offset (view); - - if (item != NULL) - menu_item = egg_recent_view_gtk_new_menu_item (view, item, display); - else - menu_item = egg_recent_view_gtk_new_separator (view); - - if (view->tooltip_func != NULL && menu_item != NULL) { - view->tooltip_func (view->tooltips, menu_item, - item, view->tooltip_func_data); - } - - if (menu_item) - gtk_menu_shell_insert (GTK_MENU_SHELL (view->menu), menu_item, - menu_offset+index); -} - -static void -egg_recent_view_gtk_set_list (EggRecentViewGtk *view, GList *list) -{ - EggRecentItem *item; - GList *p; - gint display=1; - gint index=1; - - g_return_if_fail (view); - - egg_recent_view_gtk_clear (view); - - if (view->leading_sep) { - egg_recent_view_gtk_add_to_menu (view, NULL, display, index); - index++; - } - - p = list; - while (p != NULL) { - item = (EggRecentItem *)p->data; - - egg_recent_view_gtk_add_to_menu (view, item, display, index); - - p = p->next; - display++; - index++; - } - - if (view->trailing_sep) - egg_recent_view_gtk_add_to_menu (view, NULL, display, index); -} - -static void -model_changed_cb (EggRecentModel *model, GList *list, EggRecentViewGtk *view) -{ - if (list != NULL) - egg_recent_view_gtk_set_list (view, list); - else - egg_recent_view_gtk_clear (view); -} - -static EggRecentModel * -egg_recent_view_gtk_get_model (EggRecentView *view_parent) -{ - EggRecentViewGtk *view; - - g_return_val_if_fail (view_parent != NULL, NULL); - view = EGG_RECENT_VIEW_GTK (view_parent); - return view->model; -} - -static void -egg_recent_view_gtk_set_model (EggRecentView *view_parent, - EggRecentModel *model) -{ - EggRecentViewGtk *view; - - g_return_if_fail (view_parent != NULL); - view = EGG_RECENT_VIEW_GTK (view_parent); - - if (view->model != NULL) { - g_object_unref (view->model); - g_signal_handler_disconnect (G_OBJECT (model), - view->changed_cb_id); - } - - view->model = model; - g_object_ref (view->model); - - view->changed_cb_id = g_signal_connect_object (G_OBJECT (model), - "changed", - G_CALLBACK (model_changed_cb), - view, 0); - - egg_recent_model_changed (view->model); -} - -void -egg_recent_view_gtk_set_leading_sep (EggRecentViewGtk *view, gboolean val) -{ - view->leading_sep = val; - - egg_recent_view_gtk_clear (view); - - if (view->model) - egg_recent_model_changed (view->model); -} - -void -egg_recent_view_gtk_set_trailing_sep (EggRecentViewGtk *view, gboolean val) -{ - view->trailing_sep = val; - - egg_recent_view_gtk_clear (view); - - if (view->model) - egg_recent_model_changed (view->model); -} - -static void -egg_recent_view_gtk_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EggRecentViewGtk *view = EGG_RECENT_VIEW_GTK (object); - - switch (prop_id) - { - case PROP_MENU: - egg_recent_view_gtk_set_menu (view, - GTK_WIDGET (g_value_get_object (value))); - break; - case PROP_START_MENU_ITEM: - egg_recent_view_gtk_set_start_menu_item (view, - g_value_get_object (value)); - break; - case PROP_SHOW_ICONS: - egg_recent_view_gtk_show_icons (view, - g_value_get_boolean (value)); - break; - case PROP_SHOW_NUMBERS: - egg_recent_view_gtk_show_numbers (view, - g_value_get_boolean (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -egg_recent_view_gtk_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EggRecentViewGtk *view = EGG_RECENT_VIEW_GTK (object); - - switch (prop_id) - { - case PROP_MENU: - g_value_set_object (value, view->menu); - break; - case PROP_START_MENU_ITEM: - g_value_set_object (value, view->start_menu_item); - break; - case PROP_SHOW_ICONS: - g_value_set_boolean (value, view->show_icons); - break; - case PROP_SHOW_NUMBERS: - g_value_set_boolean (value, view->show_numbers); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -egg_recent_view_gtk_finalize (GObject *object) -{ - EggRecentViewGtk *view = EGG_RECENT_VIEW_GTK (object); - - g_signal_handler_disconnect (G_OBJECT (view->model), - view->changed_cb_id); - - g_free (view->uid); - - g_object_unref (view->menu); - g_object_unref (view->model); -#ifndef USE_STABLE_LIBGNOMEUI - g_object_unref (view->theme); -#endif - g_object_unref (view->client); - - g_object_unref (view->tooltips); -} - -static void -egg_recent_view_gtk_class_init (EggRecentViewGtkClass * klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - - object_class->set_property = egg_recent_view_gtk_set_property; - object_class->get_property = egg_recent_view_gtk_get_property; - object_class->finalize = egg_recent_view_gtk_finalize; - - view_signals[ACTIVATE] = g_signal_new ("activate", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EggRecentViewGtkClass, activate), - NULL, NULL, - g_cclosure_marshal_VOID__BOXED, - G_TYPE_NONE, 1, - EGG_TYPE_RECENT_ITEM); - - g_object_class_install_property (object_class, - PROP_MENU, - g_param_spec_object ("menu", - "Menu", - "The GtkMenuShell this object will update.", - gtk_menu_get_type(), - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_START_MENU_ITEM, - g_param_spec_object ("start-menu-item", - "Start Menu Item", - "The menu item that precedes where are menu items will go", - gtk_menu_item_get_type (), - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, - PROP_SHOW_ICONS, - g_param_spec_boolean ("show-icons", - "Show Icons", - "Whether or not to show icons", - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, - PROP_SHOW_NUMBERS, - g_param_spec_boolean ("show-numbers", - "Show Numbers", - "Whether or not to show numbers", - TRUE, - G_PARAM_READWRITE)); - - klass->activate = NULL; -} - -static void -egg_recent_view_init (EggRecentViewClass *iface) -{ - iface->do_get_model = egg_recent_view_gtk_get_model; - iface->do_set_model = egg_recent_view_gtk_set_model; -} - -static void -show_menus_changed_cb (GConfClient *client, - guint cnxn_id, - GConfEntry *entry, - EggRecentViewGtk *view) -{ - GConfValue *value; - - value = gconf_entry_get_value (entry); - - g_return_if_fail (value->type == GCONF_VALUE_BOOL); - - egg_recent_view_gtk_show_icons (view, - gconf_value_get_bool (value)); - -} - -#ifndef USE_STABLE_LIBGNOMEUI -static void -theme_changed_cb (GnomeIconTheme *theme, EggRecentViewGtk *view) -{ - if (view->model != NULL) - egg_recent_model_changed (view->model); -} -#endif - -static void -egg_recent_view_gtk_init (EggRecentViewGtk * view) -{ - view->client = gconf_client_get_default (); - - view->show_icons = - gconf_client_get_bool (view->client, - "/desktop/gnome/interface/menus_have_icons", - NULL); - - gconf_client_add_dir (view->client, "/desktop/gnome/interface", - GCONF_CLIENT_PRELOAD_NONE, - NULL); - gconf_client_notify_add (view->client, - "/desktop/gnome/interface/menus_have_icons", - (GConfClientNotifyFunc)show_menus_changed_cb, - view, NULL, NULL); - - - view->leading_sep = FALSE; - view->trailing_sep = FALSE; - - view->uid = egg_recent_util_get_unique_id (); -#ifndef USE_STABLE_LIBGNOMEUI - view->theme = gnome_icon_theme_new (); - gnome_icon_theme_set_allow_svg (view->theme, TRUE); - g_signal_connect_object (view->theme, "changed", - G_CALLBACK (theme_changed_cb), view, 0); -#endif - view->tooltips = gtk_tooltips_new (); - g_object_ref (view->tooltips); - gtk_object_sink (GTK_OBJECT (view->tooltips)); - view->tooltip_func = NULL; - view->tooltip_func_data = NULL; - - view->icon_size = GTK_ICON_SIZE_MENU; -} - -void -egg_recent_view_gtk_set_icon_size (EggRecentViewGtk *view, - GtkIconSize icon_size) -{ - if (view->icon_size != icon_size) { - view->icon_size = icon_size; - egg_recent_model_changed (view->model); - } else { - view->icon_size = icon_size; - } -} - -GtkIconSize -egg_recent_view_gtk_get_icon_size (EggRecentViewGtk *view) -{ - return view->icon_size; -} - -void -egg_recent_view_gtk_show_icons (EggRecentViewGtk *view, gboolean show) -{ - view->show_icons = show; - - if (view->model) - egg_recent_model_changed (view->model); -} - -void -egg_recent_view_gtk_show_numbers (EggRecentViewGtk *view, gboolean show) -{ - view->show_numbers = show; - - if (view->model) - egg_recent_model_changed (view->model); -} - -void -egg_recent_view_gtk_set_tooltip_func (EggRecentViewGtk *view, - EggRecentViewGtkTooltipFunc func, - gpointer user_data) -{ - view->tooltip_func = func; - view->tooltip_func_data = user_data; - - if (view->model) - egg_recent_model_changed (view->model); -} - -/** - * egg_recent_view_gtk_set_menu: - * @view: A EggRecentViewGtk object. - * @menu: The GtkMenuShell to put the menu items in. - * - * Use this function to change the GtkMenuShell that the recent - * documents appear in. - * - */ -void -egg_recent_view_gtk_set_menu (EggRecentViewGtk *view, - GtkWidget *menu) -{ - g_return_if_fail (view); - g_return_if_fail (EGG_IS_RECENT_VIEW_GTK (view)); - g_return_if_fail (menu); - - if (view->menu != NULL) - g_object_unref (view->menu); - - view->menu = menu; - g_object_ref (view->menu); -} - -/** - * egg_recent_view_gtk_set_start_menu_item: - * @view: A EggRecentViewGtk object. - * @start_menu_item: The menu item that appears just before where our menu - * items should appear - * - */ -void -egg_recent_view_gtk_set_start_menu_item (EggRecentViewGtk *view, - GtkWidget *menu_item) -{ - g_return_if_fail (view); - g_return_if_fail (EGG_IS_RECENT_VIEW_GTK (view)); - - view->start_menu_item = menu_item; -} - -/** - * egg_recent_view_gtk_get_menu: - * @view: A EggRecentViewGtk object. - * - */ -GtkWidget * -egg_recent_view_gtk_get_menu (EggRecentViewGtk *view) -{ - return view->menu; -} - -/** - * egg_recent_view_gtk_get_start_menu_item - * @view: A EggRecentViewGtk object. - * - */ -GtkWidget * -egg_recent_view_gtk_get_start_menu_item (EggRecentViewGtk *view) -{ - return view->start_menu_item; -} - - -/** - * egg_recent_view_gtk_new: - * @appname: The name of your application. - * @limit: The maximum number of items allowed. - * - * This creates a new EggRecentViewGtk object. - * - * Returns: a EggRecentViewGtk object - */ -EggRecentViewGtk * -egg_recent_view_gtk_new (GtkWidget *menu, GtkWidget *start_menu_item) -{ - EggRecentViewGtk *view; - - g_return_val_if_fail (menu, NULL); - - view = EGG_RECENT_VIEW_GTK (g_object_new (egg_recent_view_gtk_get_type (), - "start-menu-item", - start_menu_item, - "menu", menu, - "show-numbers", TRUE, NULL)); - - g_return_val_if_fail (view, NULL); - - return view; -} - -/** - * egg_recent_view_gtk_get_type: - * @: - * - * This returns a GType representing a EggRecentViewGtk object. - * - * Returns: a GType - */ -GType -egg_recent_view_gtk_get_type (void) -{ - static GType egg_recent_view_gtk_type = 0; - - if(!egg_recent_view_gtk_type) { - static const GTypeInfo egg_recent_view_gtk_info = { - sizeof (EggRecentViewGtkClass), - NULL, /* base init */ - NULL, /* base finalize */ - (GClassInitFunc)egg_recent_view_gtk_class_init, /* class init */ - NULL, /* class finalize */ - NULL, /* class data */ - sizeof (EggRecentViewGtk), - 0, - (GInstanceInitFunc) egg_recent_view_gtk_init - }; - - static const GInterfaceInfo view_info = - { - (GInterfaceInitFunc) egg_recent_view_init, - NULL, - NULL - }; - - egg_recent_view_gtk_type = g_type_register_static (G_TYPE_OBJECT, - "EggRecentViewGtk", - &egg_recent_view_gtk_info, 0); - g_type_add_interface_static (egg_recent_view_gtk_type, - EGG_TYPE_RECENT_VIEW, - &view_info); - } - - return egg_recent_view_gtk_type; -} - diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view-gtk.h b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view-gtk.h deleted file mode 100644 index b2caa34525..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view-gtk.h +++ /dev/null @@ -1,66 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef __EGG_RECENT_VIEW_GTK_H__ -#define __EGG_RECENT_VIEW_GTK_H__ - -G_BEGIN_DECLS - -#include -#include "egg-recent-item.h" - -#define EGG_RECENT_VIEW_GTK(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, egg_recent_view_gtk_get_type (), EggRecentViewGtk) -#define EGG_RECENT_VIEW_GTK_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, egg_recent_view_gtk_get_type (), EggRecentViewGtkClass) -#define EGG_IS_RECENT_VIEW_GTK(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, egg_recent_view_gtk_get_type ()) - -typedef void (*EggRecentViewGtkTooltipFunc) (GtkTooltips *tooltips, - GtkWidget *menu, - EggRecentItem *item, - gpointer user_data); - -typedef struct _EggRecentViewGtk EggRecentViewGtk; - -typedef struct _EggRecentViewGtkClass EggRecentViewGtkClass; - -struct _EggRecentViewGtkClass { - GObjectClass parent_class; - - void (*activate) (EggRecentViewGtk *view, EggRecentItem *item); -}; - -GType egg_recent_view_gtk_get_type (void); - -EggRecentViewGtk * egg_recent_view_gtk_new (GtkWidget *menu, - GtkWidget *start_menu_item); - -void egg_recent_view_gtk_set_menu (EggRecentViewGtk *view, - GtkWidget *menu); -GtkWidget * egg_recent_view_gtk_get_menu (EggRecentViewGtk *view); - - -void egg_recent_view_gtk_set_start_menu_item (EggRecentViewGtk *view, - GtkWidget *menu_item); -GtkWidget *egg_recent_view_gtk_get_start_menu_item (EggRecentViewGtk *view); - -void egg_recent_view_gtk_set_leading_sep (EggRecentViewGtk *view, - gboolean val); - -void egg_recent_view_gtk_set_trailing_sep (EggRecentViewGtk *view, - gboolean val); - -void egg_recent_view_gtk_show_icons (EggRecentViewGtk *view, - gboolean show); -void egg_recent_view_gtk_show_numbers (EggRecentViewGtk *view, - gboolean show); - -void egg_recent_view_gtk_set_tooltip_func (EggRecentViewGtk *view, - EggRecentViewGtkTooltipFunc func, - gpointer user_data); - -void egg_recent_view_gtk_set_icon_size (EggRecentViewGtk *view, - GtkIconSize icon_size); -GtkIconSize egg_recent_view_gtk_get_icon_size (EggRecentViewGtk *view); - -G_END_DECLS - -#endif /* __EGG_RECENT_VIEW_GTK_H__ */ diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view.c b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view.c deleted file mode 100644 index 0121730c88..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view.c +++ /dev/null @@ -1,71 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#include -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - * - * Authors: - * James Willcox - */ - - -#ifdef HAVE_CONFIG_H -/* #include */ -#endif - -#include -#include -#include "egg-recent-view.h" - - -GtkType -egg_recent_view_get_type (void) -{ - static GtkType view_type = 0; - - if (!view_type) - { - static const GTypeInfo view_info = - { - sizeof (EggRecentViewClass), /* class_size */ - NULL, /* base_init */ - NULL, /* base_finalize */ - }; - - view_type = g_type_register_static (G_TYPE_INTERFACE, - "EggRecentView", - &view_info, 0); - } - - return view_type; -} - -EggRecentModel * -egg_recent_view_get_model (EggRecentView *view) -{ - g_return_val_if_fail (view, NULL); - - return EGG_RECENT_VIEW_GET_CLASS (view)->do_get_model (view); -} - -void -egg_recent_view_set_model (EggRecentView *view, EggRecentModel *model) -{ - g_return_if_fail (view); - g_return_if_fail (model); - - EGG_RECENT_VIEW_GET_CLASS (view)->do_set_model (view, model); -} diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view.h b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view.h deleted file mode 100644 index 2d54144909..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent-view.h +++ /dev/null @@ -1,45 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#ifndef __EGG_RECENT_VIEW_H__ -#define __EGG_RECENT_VIEW_H__ - - -#include -#include -#include "egg-recent-model.h" -#include "egg-recent-item.h" - -G_BEGIN_DECLS - -#define EGG_TYPE_RECENT_VIEW (egg_recent_view_get_type ()) -#define EGG_RECENT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_RECENT_VIEW, EggRecentView)) -#define EGG_RECENT_VIEW_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), EGG_TYPE_RECENT_VIEW, EggRecentViewClass)) -#define EGG_IS_RECENT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_RECENT_VIEW)) -#define EGG_IS_RECENT_VIEW_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), EGG_TYPE_RECENT_VIEW)) -#define EGG_RECENT_VIEW_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EGG_TYPE_RECENT_VIEW, EggRecentViewClass)) - - -typedef struct _EggRecentView EggRecentView; -typedef struct _EggRecentViewClass EggRecentViewClass; - -struct _EggRecentViewClass -{ - GTypeInterface base_iface; - - /* vtable, not signals */ - void (* do_set_model) (EggRecentView *view, - EggRecentModel *model); - EggRecentModel * (* do_get_model) (EggRecentView *view); -}; - -GtkType egg_recent_view_get_type (void) G_GNUC_CONST; -void egg_recent_view_set_list (EggRecentView *view, - GSList *list); -void egg_recent_view_clear (EggRecentView *view); -EggRecentModel *egg_recent_view_get_model (EggRecentView *view); -void egg_recent_view_set_model (EggRecentView *view, - EggRecentModel *model); - -G_END_DECLS - -#endif /* __EGG_RECENT_VIEW_H__ */ diff --git a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent.h b/lib/goffice/cut-n-paste/egg-recent-files/egg-recent.h deleted file mode 100644 index e621939c79..0000000000 --- a/lib/goffice/cut-n-paste/egg-recent-files/egg-recent.h +++ /dev/null @@ -1,7 +0,0 @@ -/* File import from libegg to gnumeric by import-egg. Do not edit. */ - -#include "egg-recent-item.h" -#include "egg-recent-model.h" -#include "egg-recent-view.h" -#include "egg-recent-view-bonobo.h" -#include "egg-recent-view-gtk.h" diff --git a/lib/goffice/cut-n-paste/pcre/Makefile.am b/lib/goffice/cut-n-paste/pcre/Makefile.am deleted file mode 100644 index d3668b9429..0000000000 --- a/lib/goffice/cut-n-paste/pcre/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -INCLUDES = \ - $(GNUMERIC_CFLAGS) -I$(top_srcdir) \ - -DSUPPORT_UTF8 \ - -DNEWLINE=10 \ - -DPOSIX_MALLOC_THRESHOLD=100 \ - -DLINK_SIZE=2 \ - -DMATCH_LIMIT=10000000 - -AM_CFLAGS = $(GNOME_CFLAGS) - -noinst_LTLIBRARIES = libpcre.la - -libpcre_la_SOURCES = maketables.c get.c study.c pcre.c pcreposix.c - -noinst_HEADERS = internal.h pcreposix.h pcre.h diff --git a/lib/goffice/cut-n-paste/pcre/get.c b/lib/goffice/cut-n-paste/pcre/get.c deleted file mode 100644 index 76930b5bb2..0000000000 --- a/lib/goffice/cut-n-paste/pcre/get.c +++ /dev/null @@ -1,354 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see below. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* -This is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. See -the file Tech.Notes for some information on the internals. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ -*/ - -/* This module contains some convenience functions for extracting substrings -from the subject string after a regex match has succeeded. The original idea -for these functions came from Scott Wimer . */ - - -/* Include the internals header, which itself includes Standard C headers plus -the external pcre header. */ - -#include "internal.h" - - -/************************************************* -* Find number for named string * -*************************************************/ - -/* This function is used by the two extraction functions below, as well -as being generally available. - -Arguments: - code the compiled regex - stringname the name whose number is required - -Returns: the number of the named parentheses, or a negative number - (PCRE_ERROR_NOSUBSTRING) if not found -*/ - -int -pcre_get_stringnumber(const pcre *code, const char *stringname) -{ -int rc; -int entrysize; -int top, bot; -uschar *nametable; - -if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0) - return rc; -if (top <= 0) return PCRE_ERROR_NOSUBSTRING; - -if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0) - return rc; -if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0) - return rc; - -bot = 0; -while (top > bot) - { - int mid = (top + bot) / 2; - uschar *entry = nametable + entrysize*mid; - int c = strcmp(stringname, (char *)(entry + 2)); - if (c == 0) return (entry[0] << 8) + entry[1]; - if (c > 0) bot = mid + 1; else top = mid; - } - -return PCRE_ERROR_NOSUBSTRING; -} - - - -/************************************************* -* Copy captured string to given buffer * -*************************************************/ - -/* This function copies a single captured substring into a given buffer. -Note that we use memcpy() rather than strncpy() in case there are binary zeros -in the string. - -Arguments: - subject the subject string that was matched - ovector pointer to the offsets table - stringcount the number of substrings that were captured - (i.e. the yield of the pcre_exec call, unless - that was zero, in which case it should be 1/3 - of the offset table size) - stringnumber the number of the required substring - buffer where to put the substring - size the size of the buffer - -Returns: if successful: - the length of the copied string, not including the zero - that is put on the end; can be zero - if not successful: - PCRE_ERROR_NOMEMORY (-6) buffer too small - PCRE_ERROR_NOSUBSTRING (-7) no such captured substring -*/ - -int -pcre_copy_substring(const char *subject, int *ovector, int stringcount, - int stringnumber, char *buffer, int size) -{ -int yield; -if (stringnumber < 0 || stringnumber >= stringcount) - return PCRE_ERROR_NOSUBSTRING; -stringnumber *= 2; -yield = ovector[stringnumber+1] - ovector[stringnumber]; -if (size < yield + 1) return PCRE_ERROR_NOMEMORY; -memcpy(buffer, subject + ovector[stringnumber], yield); -buffer[yield] = 0; -return yield; -} - - - -/************************************************* -* Copy named captured string to given buffer * -*************************************************/ - -/* This function copies a single captured substring into a given buffer, -identifying it by name. - -Arguments: - code the compiled regex - subject the subject string that was matched - ovector pointer to the offsets table - stringcount the number of substrings that were captured - (i.e. the yield of the pcre_exec call, unless - that was zero, in which case it should be 1/3 - of the offset table size) - stringname the name of the required substring - buffer where to put the substring - size the size of the buffer - -Returns: if successful: - the length of the copied string, not including the zero - that is put on the end; can be zero - if not successful: - PCRE_ERROR_NOMEMORY (-6) buffer too small - PCRE_ERROR_NOSUBSTRING (-7) no such captured substring -*/ - -int -pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector, - int stringcount, const char *stringname, char *buffer, int size) -{ -int n = pcre_get_stringnumber(code, stringname); -if (n <= 0) return n; -return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size); -} - - - -/************************************************* -* Copy all captured strings to new store * -*************************************************/ - -/* This function gets one chunk of store and builds a list of pointers and all -of the captured substrings in it. A NULL pointer is put on the end of the list. - -Arguments: - subject the subject string that was matched - ovector pointer to the offsets table - stringcount the number of substrings that were captured - (i.e. the yield of the pcre_exec call, unless - that was zero, in which case it should be 1/3 - of the offset table size) - listptr set to point to the list of pointers - -Returns: if successful: 0 - if not successful: - PCRE_ERROR_NOMEMORY (-6) failed to get store -*/ - -int -pcre_get_substring_list(const char *subject, int *ovector, int stringcount, - const char ***listptr) -{ -int i; -int size = sizeof(char *); -int double_count = stringcount * 2; -char **stringlist; -char *p; - -for (i = 0; i < double_count; i += 2) - size += sizeof(char *) + ovector[i+1] - ovector[i] + 1; - -stringlist = (char **)(pcre_malloc)(size); -if (stringlist == NULL) return PCRE_ERROR_NOMEMORY; - -*listptr = (const char **)stringlist; -p = (char *)(stringlist + stringcount + 1); - -for (i = 0; i < double_count; i += 2) - { - int len = ovector[i+1] - ovector[i]; - memcpy(p, subject + ovector[i], len); - *stringlist++ = p; - p += len; - *p++ = 0; - } - -*stringlist = NULL; -return 0; -} - - - -/************************************************* -* Free store obtained by get_substring_list * -*************************************************/ - -/* This function exists for the benefit of people calling PCRE from non-C -programs that can call its functions, but not free() or (pcre_free)() directly. - -Argument: the result of a previous pcre_get_substring_list() -Returns: nothing -*/ - -void -pcre_free_substring_list(const char **pointer) -{ -(pcre_free)((void *)pointer); -} - - - -/************************************************* -* Copy captured string to new store * -*************************************************/ - -/* This function copies a single captured substring into a piece of new -store - -Arguments: - subject the subject string that was matched - ovector pointer to the offsets table - stringcount the number of substrings that were captured - (i.e. the yield of the pcre_exec call, unless - that was zero, in which case it should be 1/3 - of the offset table size) - stringnumber the number of the required substring - stringptr where to put a pointer to the substring - -Returns: if successful: - the length of the string, not including the zero that - is put on the end; can be zero - if not successful: - PCRE_ERROR_NOMEMORY (-6) failed to get store - PCRE_ERROR_NOSUBSTRING (-7) substring not present -*/ - -int -pcre_get_substring(const char *subject, int *ovector, int stringcount, - int stringnumber, const char **stringptr) -{ -int yield; -char *substring; -if (stringnumber < 0 || stringnumber >= stringcount) - return PCRE_ERROR_NOSUBSTRING; -stringnumber *= 2; -yield = ovector[stringnumber+1] - ovector[stringnumber]; -substring = (char *)(pcre_malloc)(yield + 1); -if (substring == NULL) return PCRE_ERROR_NOMEMORY; -memcpy(substring, subject + ovector[stringnumber], yield); -substring[yield] = 0; -*stringptr = substring; -return yield; -} - - - -/************************************************* -* Copy named captured string to new store * -*************************************************/ - -/* This function copies a single captured substring, identified by name, into -new store. - -Arguments: - code the compiled regex - subject the subject string that was matched - ovector pointer to the offsets table - stringcount the number of substrings that were captured - (i.e. the yield of the pcre_exec call, unless - that was zero, in which case it should be 1/3 - of the offset table size) - stringname the name of the required substring - stringptr where to put the pointer - -Returns: if successful: - the length of the copied string, not including the zero - that is put on the end; can be zero - if not successful: - PCRE_ERROR_NOMEMORY (-6) couldn't get memory - PCRE_ERROR_NOSUBSTRING (-7) no such captured substring -*/ - -int -pcre_get_named_substring(const pcre *code, const char *subject, int *ovector, - int stringcount, const char *stringname, const char **stringptr) -{ -int n = pcre_get_stringnumber(code, stringname); -if (n <= 0) return n; -return pcre_get_substring(subject, ovector, stringcount, n, stringptr); -} - - - - -/************************************************* -* Free store obtained by get_substring * -*************************************************/ - -/* This function exists for the benefit of people calling PCRE from non-C -programs that can call its functions, but not free() or (pcre_free)() directly. - -Argument: the result of a previous pcre_get_substring() -Returns: nothing -*/ - -void -pcre_free_substring(const char *pointer) -{ -(pcre_free)((void *)pointer); -} - -/* End of get.c */ diff --git a/lib/goffice/cut-n-paste/pcre/internal.h b/lib/goffice/cut-n-paste/pcre/internal.h deleted file mode 100644 index 2cefa353f9..0000000000 --- a/lib/goffice/cut-n-paste/pcre/internal.h +++ /dev/null @@ -1,683 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see internal.c. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - - -/* This is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. See -the file Tech.Notes for some information on the internals. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ -*/ - -/* This header contains definitions that are shared between the different -modules, but which are not relevant to the outside. */ - -/* Get the definitions provided by running "configure" */ - -#include - -/* Standard C headers plus the external interface definition. The only time -setjmp and stdarg are used is when NO_RECURSE is set. */ - -/* Whatever the question is, ctype.h is not the answer. */ -/* #include */ -#include -#include -#include -#include -#include -#include -#include - -#ifndef PCRE_SPY -#define PCRE_DEFINITION /* Win32 __declspec(export) trigger for .dll */ -#endif - -#include "pcre.h" - -/* When compiling for use with the Virtual Pascal compiler, these functions -need to have their names changed. PCRE must be compiled with the -DVPCOMPAT -option on the command line. */ - -#ifdef VPCOMPAT -#define strncmp(s1,s2,m) _strncmp(s1,s2,m) -#define memcpy(d,s,n) _memcpy(d,s,n) -#define memmove(d,s,n) _memmove(d,s,n) -#define memset(s,c,n) _memset(s,c,n) -#else /* VPCOMPAT */ - -/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(), -define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY -is set. Otherwise, include an emulating function for those systems that have -neither (there some non-Unix environments where this is the case). This assumes -that all calls to memmove are moving strings upwards in store, which is the -case in PCRE. */ - -#if ! HAVE_MEMMOVE -#undef memmove /* some systems may have a macro */ -#if HAVE_BCOPY -#define memmove(a, b, c) bcopy(b, a, c) -#else /* HAVE_BCOPY */ -void * -pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n) -{ -int i; -dest += n; -src += n; -for (i = 0; i < n; ++i) *(--dest) = *(--src); -} -#define memmove(a, b, c) pcre_memmove(a, b, c) -#endif /* not HAVE_BCOPY */ -#endif /* not HAVE_MEMMOVE */ -#endif /* not VPCOMPAT */ - - -/* PCRE keeps offsets in its compiled code as 2-byte quantities by default. -These are used, for example, to link from the start of a subpattern to its -alternatives and its end. The use of 2 bytes per offset limits the size of the -compiled regex to around 64K, which is big enough for almost everybody. -However, I received a request for an even bigger limit. For this reason, and -also to make the code easier to maintain, the storing and loading of offsets -from the byte string is now handled by the macros that are defined here. - -The macros are controlled by the value of LINK_SIZE. This defaults to 2 in -the config.h file, but can be overridden by using -D on the command line. This -is automated on Unix systems via the "configure" command. */ - -#if LINK_SIZE == 2 - -#define PUT(a,n,d) \ - (a[n] = (d) >> 8), \ - (a[(n)+1] = (d) & 255) - -#define GET(a,n) \ - (((a)[n] << 8) | (a)[(n)+1]) - -#define MAX_PATTERN_SIZE (1 << 16) - - -#elif LINK_SIZE == 3 - -#define PUT(a,n,d) \ - (a[n] = (d) >> 16), \ - (a[(n)+1] = (d) >> 8), \ - (a[(n)+2] = (d) & 255) - -#define GET(a,n) \ - (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2]) - -#define MAX_PATTERN_SIZE (1 << 24) - - -#elif LINK_SIZE == 4 - -#define PUT(a,n,d) \ - (a[n] = (d) >> 24), \ - (a[(n)+1] = (d) >> 16), \ - (a[(n)+2] = (d) >> 8), \ - (a[(n)+3] = (d) & 255) - -#define GET(a,n) \ - (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3]) - -#define MAX_PATTERN_SIZE (1 << 30) /* Keep it positive */ - - -#else -#error LINK_SIZE must be either 2, 3, or 4 -#endif - - -/* Convenience macro defined in terms of the others */ - -#define PUTINC(a,n,d) PUT(a,n,d), a += LINK_SIZE - - -/* PCRE uses some other 2-byte quantities that do not change when the size of -offsets changes. There are used for repeat counts and for other things such as -capturing parenthesis numbers in back references. */ - -#define PUT2(a,n,d) \ - a[n] = (d) >> 8; \ - a[(n)+1] = (d) & 255 - -#define GET2(a,n) \ - (((a)[n] << 8) | (a)[(n)+1]) - -#define PUT2INC(a,n,d) PUT2(a,n,d), a += 2 - - -/* In case there is no definition of offsetof() provided - though any proper -Standard C system should have one. */ - -#ifndef offsetof -#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field)) -#endif - -/* These are the public options that can change during matching. */ - -#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL) - -/* Private options flags start at the most significant end of the four bytes, -but skip the top bit so we can use ints for convenience without getting tangled -with negative values. The public options defined in pcre.h start at the least -significant end. Make sure they don't overlap, though now that we have expanded -to four bytes there is plenty of space. */ - -#define PCRE_FIRSTSET 0x40000000 /* first_byte is set */ -#define PCRE_REQCHSET 0x20000000 /* req_byte is set */ -#define PCRE_STARTLINE 0x10000000 /* start after \n for multiline */ -#define PCRE_ICHANGED 0x08000000 /* i option changes within regex */ - -/* Options for the "extra" block produced by pcre_study(). */ - -#define PCRE_STUDY_MAPPED 0x01 /* a map of starting chars exists */ - -/* Masks for identifying the public options which are permitted at compile -time, run time or study time, respectively. */ - -#define PUBLIC_OPTIONS \ - (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \ - PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \ - PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK) - -#define PUBLIC_EXEC_OPTIONS \ - (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK) - -#define PUBLIC_STUDY_OPTIONS 0 /* None defined */ - -/* Magic number to provide a small check against being handed junk. */ - -#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ - -/* Negative values for the firstchar and reqchar variables */ - -#define REQ_UNSET (-2) -#define REQ_NONE (-1) - -/* Flags added to firstbyte or reqbyte; a "non-literal" item is either a -variable-length repeat, or a anything other than literal characters. */ - -#define REQ_CASELESS 0x0100 /* indicates caselessness */ -#define REQ_VARY 0x0200 /* reqbyte followed non-literal item */ - -/* Miscellaneous definitions */ - -typedef int BOOL; - -#define FALSE 0 -#define TRUE 1 - -/* Escape items that are just an encoding of a particular data value. Note that -ESC_n is defined as yet another macro, which is set in config.h to either \n -(the default) or \r (which some people want). */ - -#ifndef ESC_e -#define ESC_e 27 -#endif - -#ifndef ESC_f -#define ESC_f '\f' -#endif - -#ifndef ESC_n -#define ESC_n NEWLINE -#endif - -#ifndef ESC_r -#define ESC_r '\r' -#endif - -/* We can't officially use ESC_t because it is a POSIX reserved identifier -(presumably because of all the others like size_t). */ - -#ifndef ESC_tee -#define ESC_tee '\t' -#endif - -/* These are escaped items that aren't just an encoding of a particular data -value such as \n. They must have non-zero values, as check_escape() returns -their negation. Also, they must appear in the same order as in the opcode -definitions below, up to ESC_z. There's a dummy for OP_ANY because it -corresponds to "." rather than an escape sequence. The final one must be -ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two -tests in the code for an escape greater than ESC_b and less than ESC_Z to -detect the types that may be repeated. These are the types that consume a -character. If any new escapes are put in between that don't consume a -character, that code will have to change. */ - -enum { ESC_A = 1, ESC_G, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, - ESC_w, ESC_dum1, ESC_C, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_REF }; - -/* Flag bits and data types for the extended class (OP_XCLASS) for classes that -contain UTF-8 characters with values greater than 255. */ - -#define XCL_NOT 0x01 /* Flag: this is a negative class */ -#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ - -#define XCL_END 0 /* Marks end of individual items */ -#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ -#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ - - -/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets -that extract substrings. Starting from 1 (i.e. after OP_END), the values up to -OP_EOD must correspond in order to the list of escapes immediately above. -Note that whenever this list is updated, the two macro definitions that follow -must also be updated to match. */ - -enum { - OP_END, /* 0 End of pattern */ - - /* Values corresponding to backslashed metacharacters */ - - OP_SOD, /* 1 Start of data: \A */ - OP_SOM, /* 2 Start of match (subject + offset): \G */ - OP_NOT_WORD_BOUNDARY, /* 3 \B */ - OP_WORD_BOUNDARY, /* 4 \b */ - OP_NOT_DIGIT, /* 5 \D */ - OP_DIGIT, /* 6 \d */ - OP_NOT_WHITESPACE, /* 7 \S */ - OP_WHITESPACE, /* 8 \s */ - OP_NOT_WORDCHAR, /* 9 \W */ - OP_WORDCHAR, /* 10 \w */ - OP_ANY, /* 11 Match any character */ - OP_ANYBYTE, /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */ - OP_EODN, /* 13 End of data or \n at end of data: \Z. */ - OP_EOD, /* 14 End of data: \z */ - - OP_OPT, /* 15 Set runtime options */ - OP_CIRC, /* 16 Start of line - varies with multiline switch */ - OP_DOLL, /* 17 End of line - varies with multiline switch */ - OP_CHARS, /* 18 Match string of characters */ - OP_NOT, /* 19 Match anything but the following char */ - - OP_STAR, /* 20 The maximizing and minimizing versions of */ - OP_MINSTAR, /* 21 all these opcodes must come in pairs, with */ - OP_PLUS, /* 22 the minimizing one second. */ - OP_MINPLUS, /* 23 This first set applies to single characters */ - OP_QUERY, /* 24 */ - OP_MINQUERY, /* 25 */ - OP_UPTO, /* 26 From 0 to n matches */ - OP_MINUPTO, /* 27 */ - OP_EXACT, /* 28 Exactly n matches */ - - OP_NOTSTAR, /* 29 The maximizing and minimizing versions of */ - OP_NOTMINSTAR, /* 30 all these opcodes must come in pairs, with */ - OP_NOTPLUS, /* 31 the minimizing one second. */ - OP_NOTMINPLUS, /* 32 This set applies to "not" single characters */ - OP_NOTQUERY, /* 33 */ - OP_NOTMINQUERY, /* 34 */ - OP_NOTUPTO, /* 35 From 0 to n matches */ - OP_NOTMINUPTO, /* 36 */ - OP_NOTEXACT, /* 37 Exactly n matches */ - - OP_TYPESTAR, /* 38 The maximizing and minimizing versions of */ - OP_TYPEMINSTAR, /* 39 all these opcodes must come in pairs, with */ - OP_TYPEPLUS, /* 40 the minimizing one second. These codes must */ - OP_TYPEMINPLUS, /* 41 be in exactly the same order as those above. */ - OP_TYPEQUERY, /* 42 This set applies to character types such as \d */ - OP_TYPEMINQUERY, /* 43 */ - OP_TYPEUPTO, /* 44 From 0 to n matches */ - OP_TYPEMINUPTO, /* 45 */ - OP_TYPEEXACT, /* 46 Exactly n matches */ - - OP_CRSTAR, /* 47 The maximizing and minimizing versions of */ - OP_CRMINSTAR, /* 48 all these opcodes must come in pairs, with */ - OP_CRPLUS, /* 49 the minimizing one second. These codes must */ - OP_CRMINPLUS, /* 50 be in exactly the same order as those above. */ - OP_CRQUERY, /* 51 These are for character classes and back refs */ - OP_CRMINQUERY, /* 52 */ - OP_CRRANGE, /* 53 These are different to the three seta above. */ - OP_CRMINRANGE, /* 54 */ - - OP_CLASS, /* 55 Match a character class, chars < 256 only */ - OP_NCLASS, /* 56 Same, but the bitmap was created from a negative - class - the difference is relevant only when a UTF-8 - character > 255 is encountered. */ - - OP_XCLASS, /* 57 Extended class for handling UTF-8 chars within the - class. This does both positive and negative. */ - - OP_REF, /* 58 Match a back reference */ - OP_RECURSE, /* 59 Match a numbered subpattern (possibly recursive) */ - OP_CALLOUT, /* 60 Call out to external function if provided */ - - OP_ALT, /* 61 Start of alternation */ - OP_KET, /* 62 End of group that doesn't have an unbounded repeat */ - OP_KETRMAX, /* 63 These two must remain together and in this */ - OP_KETRMIN, /* 64 order. They are for groups the repeat for ever. */ - - /* The assertions must come before ONCE and COND */ - - OP_ASSERT, /* 65 Positive lookahead */ - OP_ASSERT_NOT, /* 66 Negative lookahead */ - OP_ASSERTBACK, /* 67 Positive lookbehind */ - OP_ASSERTBACK_NOT, /* 68 Negative lookbehind */ - OP_REVERSE, /* 69 Move pointer back - used in lookbehind assertions */ - - /* ONCE and COND must come after the assertions, with ONCE first, as there's - a test for >= ONCE for a subpattern that isn't an assertion. */ - - OP_ONCE, /* 70 Once matched, don't back up into the subpattern */ - OP_COND, /* 71 Conditional group */ - OP_CREF, /* 72 Used to hold an extraction string number (cond ref) */ - - OP_BRAZERO, /* 73 These two must remain together and in this */ - OP_BRAMINZERO, /* 74 order. */ - - OP_BRANUMBER, /* 75 Used for extracting brackets whose number is greater - than can fit into an opcode. */ - - OP_BRA /* 76 This and greater values are used for brackets that - extract substrings up to a basic limit. After that, - use is made of OP_BRANUMBER. */ -}; - -/* WARNING: There is an implicit assumption in study.c that all opcodes are -less than 128 in value. This makes handling UTF-8 character sequences easier. -*/ - - -/* This macro defines textual names for all the opcodes. There are used only -for debugging, in pcre.c when DEBUG is defined, and also in pcretest.c. The -macro is referenced only in printint.c. */ - -#define OP_NAME_LIST \ - "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d", \ - "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte", "\\Z", "\\z", \ - "Opt", "^", "$", "chars", "not", \ - "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ - "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ - "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ - "*", "*?", "+", "+?", "?", "??", "{", "{", \ - "class", "nclass", "xclass", "Ref", "Recurse", "Callout", \ - "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not", \ - "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cond ref",\ - "Brazero", "Braminzero", "Branumber", "Bra" - - -/* This macro defines the length of fixed length operations in the compiled -regex. The lengths are used when searching for specific things, and also in the -debugging printing of a compiled regex. We use a macro so that it can be -incorporated both into pcre.c and pcretest.c without being publicly exposed. - -As things have been extended, some of these are no longer fixed lenths, but are -minima instead. For example, the length of a single-character repeat may vary -in UTF-8 mode. The code that uses this table must know about such things. */ - -#define OP_LENGTHS \ - 1, /* End */ \ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \ - 1, 1, 1, 1, 2, 1, 1, /* Any, Anybyte, \Z, \z, Opt, ^, $ */ \ - 2, /* Chars - the minimum length */ \ - 2, /* not */ \ - /* Positive single-char repeats ** These are */ \ - 2, 2, 2, 2, 2, 2, /* *, *?, +, +?, ?, ?? ** minima in */ \ - 4, 4, 4, /* upto, minupto, exact ** UTF-8 mode */ \ - /* Negative single-char repeats - only for chars < 256 */ \ - 2, 2, 2, 2, 2, 2, /* NOT *, *?, +, +?, ?, ?? */ \ - 4, 4, 4, /* NOT upto, minupto, exact */ \ - /* Positive type repeats */ \ - 2, 2, 2, 2, 2, 2, /* Type *, *?, +, +?, ?, ?? */ \ - 4, 4, 4, /* Type upto, minupto, exact */ \ - /* Character class & ref repeats */ \ - 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ \ - 5, 5, /* CRRANGE, CRMINRANGE */ \ - 33, /* CLASS */ \ - 33, /* NCLASS */ \ - 0, /* XCLASS - variable length */ \ - 3, /* REF */ \ - 1+LINK_SIZE, /* RECURSE */ \ - 2, /* CALLOUT */ \ - 1+LINK_SIZE, /* Alt */ \ - 1+LINK_SIZE, /* Ket */ \ - 1+LINK_SIZE, /* KetRmax */ \ - 1+LINK_SIZE, /* KetRmin */ \ - 1+LINK_SIZE, /* Assert */ \ - 1+LINK_SIZE, /* Assert not */ \ - 1+LINK_SIZE, /* Assert behind */ \ - 1+LINK_SIZE, /* Assert behind not */ \ - 1+LINK_SIZE, /* Reverse */ \ - 1+LINK_SIZE, /* Once */ \ - 1+LINK_SIZE, /* COND */ \ - 3, /* CREF */ \ - 1, 1, /* BRAZERO, BRAMINZERO */ \ - 3, /* BRANUMBER */ \ - 1+LINK_SIZE /* BRA */ \ - - -/* The highest extraction number before we have to start using additional -bytes. (Originally PCRE didn't have support for extraction counts highter than -this number.) The value is limited by the number of opcodes left after OP_BRA, -i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional -opcodes. */ - -#define EXTRACT_BASIC_MAX 150 - -/* A magic value for OP_CREF to indicate the "in recursion" condition. */ - -#define CREF_RECURSE 0xffff - -/* The texts of compile-time error messages are defined as macros here so that -they can be accessed by the POSIX wrapper and converted into error codes. Yes, -I could have used error codes in the first place, but didn't feel like changing -just to accommodate the POSIX wrapper. */ - -#define ERR1 "\\ at end of pattern" -#define ERR2 "\\c at end of pattern" -#define ERR3 "unrecognized character follows \\" -#define ERR4 "numbers out of order in {} quantifier" -#define ERR5 "number too big in {} quantifier" -#define ERR6 "missing terminating ] for character class" -#define ERR7 "invalid escape sequence in character class" -#define ERR8 "range out of order in character class" -#define ERR9 "nothing to repeat" -#define ERR10 "operand of unlimited repeat could match the empty string" -#define ERR11 "internal error: unexpected repeat" -#define ERR12 "unrecognized character after (?" -#define ERR13 "POSIX named classes are supported only within a class" -#define ERR14 "missing )" -#define ERR15 "reference to non-existent subpattern" -#define ERR16 "erroffset passed as NULL" -#define ERR17 "unknown option bit(s) set" -#define ERR18 "missing ) after comment" -#define ERR19 "parentheses nested too deeply" -#define ERR20 "regular expression too large" -#define ERR21 "failed to get memory" -#define ERR22 "unmatched parentheses" -#define ERR23 "internal error: code overflow" -#define ERR24 "unrecognized character after (?<" -#define ERR25 "lookbehind assertion is not fixed length" -#define ERR26 "malformed number after (?(" -#define ERR27 "conditional group contains more than two branches" -#define ERR28 "assertion expected after (?(" -#define ERR29 "(?R or (?digits must be followed by )" -#define ERR30 "unknown POSIX class name" -#define ERR31 "POSIX collating elements are not supported" -#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support" -#define ERR33 "spare error" -#define ERR34 "character value in \\x{...} sequence is too large" -#define ERR35 "invalid condition (?(0)" -#define ERR36 "\\C not allowed in lookbehind assertion" -#define ERR37 "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X" -#define ERR38 "number after (?C is > 255" -#define ERR39 "closing ) for (?C expected" -#define ERR40 "recursive call could loop indefinitely" -#define ERR41 "unrecognized character after (?P" -#define ERR42 "syntax error after (?P" -#define ERR43 "two named groups have the same name" -#define ERR44 "invalid UTF-8 string" - -/* All character handling must be done as unsigned characters. Otherwise there -are problems with top-bit-set characters and functions such as g_unichar_isspace(). -However, we leave the interface to the outside world as char *, because that -should make things easier for callers. We define a short type for unsigned char -to save lots of typing. I tried "uchar", but it causes problems on Digital -Unix, where it is defined in sys/types, so use "uschar" instead. */ - -typedef unsigned char uschar; - -/* The real format of the start of the pcre block; the index of names and the -code vector run on as long as necessary after the end. */ - -typedef struct real_pcre { - unsigned long int magic_number; - size_t size; /* Total that was malloced */ - const unsigned char *tables; /* Pointer to tables */ - unsigned long int options; - unsigned short int top_bracket; - unsigned short int top_backref; - unsigned short int first_byte; - unsigned short int req_byte; - unsigned short int name_entry_size; /* Size of any name items; 0 => none */ - unsigned short int name_count; /* Number of name items */ -} real_pcre; - -/* The format of the block used to store data from pcre_study(). */ - -typedef struct pcre_study_data { - size_t size; /* Total that was malloced */ - uschar options; - uschar start_bits[32]; -} pcre_study_data; - -/* Structure for passing "static" information around between the functions -doing the compiling, so that they are thread-safe. */ - -typedef struct compile_data { - const uschar *lcc; /* Points to lower casing table */ - const uschar *fcc; /* Points to case-flipping table */ - const uschar *cbits; /* Points to character type table */ - const uschar *ctypes; /* Points to table of type maps */ - const uschar *start_code; /* The start of the compiled code */ - uschar *name_table; /* The name/number table */ - int names_found; /* Number of entries so far */ - int name_entry_size; /* Size of each entry */ - int top_backref; /* Maximum back reference */ - unsigned int backref_map; /* Bitmap of low back refs */ - int req_varyopt; /* "After variable item" flag for reqbyte */ -} compile_data; - -/* Structure for maintaining a chain of pointers to the currently incomplete -branches, for testing for left recursion. */ - -typedef struct branch_chain { - struct branch_chain *outer; - uschar *current; -} branch_chain; - -/* Structure for items in a linked list that represents an explicit recursive -call within the pattern. */ - -typedef struct recursion_info { - struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ - int group_num; /* Number of group that was called */ - const uschar *after_call; /* "Return value": points after the call in the expr */ - const uschar *save_start; /* Old value of md->start_match */ - int *offset_save; /* Pointer to start of saved offsets */ - int saved_max; /* Number of saved offsets */ -} recursion_info; - -/* When compiling in a mode that doesn't use recursive calls to match(), -a structure is used to remember local variables on the heap. It is defined in -pcre.c, close to the match() function, so that it is easy to keep it in step -with any changes of local variable. However, the pointer to the current frame -must be saved in some "static" place over a longjmp(). We declare the -structure here so that we can put a pointer in the match_data structure. -NOTE: This isn't used for a "normal" compilation of pcre. */ - -struct heapframe; - -/* Structure for passing "static" information around between the functions -doing the matching, so that they are thread-safe. */ - -typedef struct match_data { - unsigned long int match_call_count; /* As it says */ - unsigned long int match_limit;/* As it says */ - int *offset_vector; /* Offset vector */ - int offset_end; /* One past the end */ - int offset_max; /* The maximum usable for return data */ - const uschar *lcc; /* Points to lower casing table */ - const uschar *ctypes; /* Points to table of type maps */ - BOOL offset_overflow; /* Set if too many extractions */ - BOOL notbol; /* NOTBOL flag */ - BOOL noteol; /* NOTEOL flag */ - BOOL utf8; /* UTF8 flag */ - BOOL endonly; /* Dollar not before final \n */ - BOOL notempty; /* Empty string match not wanted */ - const uschar *start_code; /* For use when recursing */ - const uschar *start_subject; /* Start of the subject string */ - const uschar *end_subject; /* End of the subject string */ - const uschar *start_match; /* Start of this match attempt */ - const uschar *end_match_ptr; /* Subject position at end match */ - int end_offset_top; /* Highwater mark at end of match */ - int capture_last; /* Most recent capture number */ - int start_offset; /* The start offset value */ - recursion_info *recursive; /* Linked list of recursion data */ - void *callout_data; /* To pass back to callouts */ - struct heapframe *thisframe; /* Used only when compiling for no recursion */ -} match_data; - -/* Bit definitions for entries in the pcre_ctypes table. */ - -#define ctype_space 0x01 -#define ctype_letter 0x02 -#define ctype_digit 0x04 -#define ctype_xdigit 0x08 -#define ctype_word 0x10 /* alphameric or '_' */ -#define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */ - -/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set -of bits for a class map. Some classes are built by combining these tables. */ - -#define cbit_space 0 /* [:space:] or \s */ -#define cbit_xdigit 32 /* [:xdigit:] */ -#define cbit_digit 64 /* [:digit:] or \d */ -#define cbit_upper 96 /* [:upper:] */ -#define cbit_lower 128 /* [:lower:] */ -#define cbit_word 160 /* [:word:] or \w */ -#define cbit_graph 192 /* [:graph:] */ -#define cbit_print 224 /* [:print:] */ -#define cbit_punct 256 /* [:punct:] */ -#define cbit_cntrl 288 /* [:cntrl:] */ -#define cbit_length 320 /* Length of the cbits table */ - -/* Offsets of the various tables from the base tables pointer, and -total length. */ - -#define lcc_offset 0 -#define fcc_offset 256 -#define cbits_offset 512 -#define ctypes_offset (cbits_offset + cbit_length) -#define tables_length (ctypes_offset + 256) - -/* End of internal.h */ diff --git a/lib/goffice/cut-n-paste/pcre/maketables.c b/lib/goffice/cut-n-paste/pcre/maketables.c deleted file mode 100644 index f7b992d3cf..0000000000 --- a/lib/goffice/cut-n-paste/pcre/maketables.c +++ /dev/null @@ -1,146 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see below. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* -PCRE is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ - -See the file Tech.Notes for some information on the internals. -*/ - - -/* This file is compiled on its own as part of the PCRE library. However, -it is also included in the compilation of dftables.c, in which case the macro -DFTABLES is defined. */ - -#ifndef DFTABLES -#include "internal.h" -#include -#endif - - - -/************************************************* -* Create PCRE character tables * -*************************************************/ - -/* This function builds a set of character tables for use by PCRE and returns -a pointer to them. They are build using the ctype functions, and consequently -their contents will depend upon the current locale setting. When compiled as -part of the library, the store is obtained via pcre_malloc(), but when compiled -inside dftables, use malloc(). - -Arguments: none -Returns: pointer to the contiguous block of data -*/ - -const unsigned char * -pcre_maketables(void) -{ -unsigned char *yield, *p; -int i; - -#ifndef DFTABLES -yield = (unsigned char*)(pcre_malloc)(tables_length); -#else -yield = (unsigned char*)malloc(tables_length); -#endif - -if (yield == NULL) return NULL; -p = yield; - -/* First comes the lower casing table */ - -for (i = 0; i < 256; i++) *p++ = g_unichar_tolower(i); - -/* Next the case-flipping table */ - -for (i = 0; i < 256; i++) *p++ = g_unichar_islower(i)? g_unichar_toupper(i) : g_unichar_tolower(i); - -/* Then the character class tables. Don't try to be clever and save effort -on exclusive ones - in some locales things may be different. Note that the -table for "space" includes everything "g_unichar_isspace" gives, including VT in the -default locale. This makes it work for the POSIX class [:space:]. */ - -memset(p, 0, cbit_length); -for (i = 0; i < 256; i++) - { - if (g_unichar_isdigit(i)) - { - p[cbit_digit + i/8] |= 1 << (i&7); - p[cbit_word + i/8] |= 1 << (i&7); - } - if (g_unichar_isupper(i)) - { - p[cbit_upper + i/8] |= 1 << (i&7); - p[cbit_word + i/8] |= 1 << (i&7); - } - if (g_unichar_islower(i)) - { - p[cbit_lower + i/8] |= 1 << (i&7); - p[cbit_word + i/8] |= 1 << (i&7); - } - if (i == '_') p[cbit_word + i/8] |= 1 << (i&7); - if (g_unichar_isspace(i)) p[cbit_space + i/8] |= 1 << (i&7); - if (g_unichar_isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7); - if (g_unichar_isgraph(i)) p[cbit_graph + i/8] |= 1 << (i&7); - if (g_unichar_isprint(i)) p[cbit_print + i/8] |= 1 << (i&7); - if (g_unichar_ispunct(i)) p[cbit_punct + i/8] |= 1 << (i&7); - if (g_unichar_iscntrl(i)) p[cbit_cntrl + i/8] |= 1 << (i&7); - } -p += cbit_length; - -/* Finally, the character type table. In this, we exclude VT from the white -space chars, because Perl doesn't recognize it as such for \s and for comments -within regexes. */ - -for (i = 0; i < 256; i++) - { - int x = 0; - if (i != 0x0b && g_unichar_isspace(i)) x += ctype_space; - if (g_unichar_isalpha(i)) x += ctype_letter; - if (g_unichar_isdigit(i)) x += ctype_digit; - if (g_unichar_isxdigit(i)) x += ctype_xdigit; - if (g_unichar_isalnum(i) || i == '_') x += ctype_word; - - /* Note: strchr includes the terminating zero in the characters it considers. - In this instance, that is ok because we want binary zero to be flagged as a - meta-character, which in this sense is any character that terminates a run - of data characters. */ - - if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta; *p++ = x; } - -return yield; -} - -/* End of maketables.c */ diff --git a/lib/goffice/cut-n-paste/pcre/pcre.c b/lib/goffice/cut-n-paste/pcre/pcre.c deleted file mode 100644 index 51374f28ce..0000000000 --- a/lib/goffice/cut-n-paste/pcre/pcre.c +++ /dev/null @@ -1,8319 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see below. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* -This is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. See -the file Tech.Notes for some information on the internals. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ -*/ - - -/* Define DEBUG to get debugging output on stdout. */ -/* #define DEBUG */ - -/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef -inline, and there are *still* stupid compilers about that don't like indented -pre-processor statements. I suppose it's only been 10 years... */ - -#ifdef DEBUG -#define DPRINTF(p) printf p -#else -#define DPRINTF(p) /*nothing*/ -#endif - -/* Include the internals header, which itself includes , the Standard -C headers, and the external pcre header. */ - -#include "internal.h" - - -/* Allow compilation as C++ source code, should anybody want to do that. */ - -#ifdef __cplusplus -#define class pcre_class -#endif - - -/* Maximum number of items on the nested bracket stacks at compile time. This -applies to the nesting of all kinds of parentheses. It does not limit -un-nested, non-capturing parentheses. This number can be made bigger if -necessary - it is used to dimension one int and one unsigned char vector at -compile time. */ - -#define BRASTACK_SIZE 200 - - -/* Maximum number of ints of offset to save on the stack for recursive calls. -If the offset vector is bigger, malloc is used. This should be a multiple of 3, -because the offset vector is always a multiple of 3 long. */ - -#define REC_STACK_SAVE_MAX 30 - - -/* The number of bytes in a literal character string above which we can't add -any more is set at 250 in order to allow for UTF-8 characters. (In theory it -could be 255 when UTF-8 support is excluded, but that means that some of the -test output would be different, which just complicates things.) */ - -#define MAXLIT 250 - - -/* The maximum remaining length of subject we are prepared to search for a -req_byte match. */ - -#define REQ_BYTE_MAX 1000 - - -/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that -the definition is next to the definition of the opcodes in internal.h. */ - -static const uschar OP_lengths[] = { OP_LENGTHS }; - -/* Min and max values for the common repeats; for the maxima, 0 => infinity */ - -static const char rep_min[] = { 0, 0, 1, 1, 0, 0 }; -static const char rep_max[] = { 0, 0, 0, 0, 1, 1 }; - -/* Table for handling escaped characters in the range '0'-'z'. Positive returns -are simple data values; negative values are for special things like \d and so -on. Zero means further processing is needed (for things like \x), or the escape -is invalid. */ - -#if !EBCDIC /* This is the "normal" table for ASCII systems */ -static const short int escapes[] = { - 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */ - 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */ - '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E, 0, -ESC_G, /* @ - G */ - 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */ - 0, -ESC_Q, 0, -ESC_S, 0, 0, 0, -ESC_W, /* P - W */ - 0, 0, -ESC_Z, '[', '\\', ']', '^', '_', /* X - _ */ - '`', 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, /* ` - g */ - 0, 0, 0, 0, 0, 0, ESC_n, 0, /* h - o */ - 0, 0, ESC_r, -ESC_s, ESC_tee, 0, 0, -ESC_w, /* p - w */ - 0, 0, -ESC_z /* x - z */ -}; - -#else /* This is the "abnormal" table for EBCDIC systems */ -static const short int escapes[] = { -/* 48 */ 0, 0, 0, '.', '<', '(', '+', '|', -/* 50 */ '&', 0, 0, 0, 0, 0, 0, 0, -/* 58 */ 0, 0, '!', '$', '*', ')', ';', '~', -/* 60 */ '-', '/', 0, 0, 0, 0, 0, 0, -/* 68 */ 0, 0, '|', ',', '%', '_', '>', '?', -/* 70 */ 0, 0, 0, 0, 0, 0, 0, 0, -/* 78 */ 0, '`', ':', '#', '@', '\'', '=', '"', -/* 80 */ 0, 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, -/* 88 */ 0, 0, 0, '{', 0, 0, 0, 0, -/* 90 */ 0, 0, 0, 'l', 0, ESC_n, 0, 0, -/* 98 */ 0, ESC_r, 0, '}', 0, 0, 0, 0, -/* A0 */ 0, '~', -ESC_s, ESC_tee, 0, 0, -ESC_w, 0, -/* A8 */ 0,-ESC_z, 0, 0, 0, '[', 0, 0, -/* B0 */ 0, 0, 0, 0, 0, 0, 0, 0, -/* B8 */ 0, 0, 0, 0, 0, ']', '=', '-', -/* C0 */ '{',-ESC_A, -ESC_B, -ESC_C, -ESC_D,-ESC_E, 0, -ESC_G, -/* C8 */ 0, 0, 0, 0, 0, 0, 0, 0, -/* D0 */ '}', 0, 0, 0, 0, 0, 0, 0, -/* D8 */-ESC_Q, 0, 0, 0, 0, 0, 0, 0, -/* E0 */ '\\', 0, -ESC_S, 0, 0, 0, -ESC_W, 0, -/* E8 */ 0,-ESC_Z, 0, 0, 0, 0, 0, 0, -/* F0 */ 0, 0, 0, 0, 0, 0, 0, 0, -/* F8 */ 0, 0, 0, 0, 0, 0, 0, 0 -}; -#endif - - -/* Tables of names of POSIX character classes and their lengths. The list is -terminated by a zero length entry. The first three must be alpha, upper, lower, -as this is assumed for handling case independence. */ - -static const char *const posix_names[] = { - "alpha", "lower", "upper", - "alnum", "ascii", "blank", "cntrl", "digit", "graph", - "print", "punct", "space", "word", "xdigit" }; - -static const uschar posix_name_lengths[] = { - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 }; - -/* Table of class bit maps for each POSIX class; up to three may be combined -to form the class. The table for [:blank:] is dynamically modified to remove -the vertical space characters. */ - -static const int posix_class_maps[] = { - cbit_lower, cbit_upper, -1, /* alpha */ - cbit_lower, -1, -1, /* lower */ - cbit_upper, -1, -1, /* upper */ - cbit_digit, cbit_lower, cbit_upper, /* alnum */ - cbit_print, cbit_cntrl, -1, /* ascii */ - cbit_space, -1, -1, /* blank - a GNU extension */ - cbit_cntrl, -1, -1, /* cntrl */ - cbit_digit, -1, -1, /* digit */ - cbit_graph, -1, -1, /* graph */ - cbit_print, -1, -1, /* print */ - cbit_punct, -1, -1, /* punct */ - cbit_space, -1, -1, /* space */ - cbit_word, -1, -1, /* word - a Perl extension */ - cbit_xdigit,-1, -1 /* xdigit */ -}; - -/* Table to identify digits and hex digits. This is used when compiling -patterns. Note that the tables in chartables are dependent on the locale, and -may mark arbitrary characters as digits - but the PCRE compiling code expects -to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have -a private table here. It costs 256 bytes, but it is a lot faster than doing -character value tests (at least in some simple cases I timed), and in some -applications one wants PCRE to compile efficiently as well as match -efficiently. - -For convenience, we use the same bit definitions as in chartables: - - 0x04 decimal digit - 0x08 hexadecimal digit - -Then we can use ctype_digit and ctype_xdigit in the code. */ - -#if !EBCDIC /* This is the "normal" case, for ASCII systems */ -static const unsigned char digitab[] = - { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - ' */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ( - / */ - 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /* 0 - 7 */ - 0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /* 8 - ? */ - 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* @ - G */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H - O */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* P - W */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* X - _ */ - 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* ` - g */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* h - o */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* p - w */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* x -127 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */ - -#else /* This is the "abnormal" case, for EBCDIC systems */ -static const unsigned char digitab[] = - { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 0 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 10 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 32- 39 20 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 40- 47 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 48- 55 30 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 56- 63 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - 71 40 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 72- | */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* & - 87 50 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 88- ¬ */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - -103 60 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ? */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- " */ - 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g 80 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* h -143 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p 90 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* q -159 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x A0 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* y -175 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ^ -183 B0 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* { - G C0 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H -207 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* } - P D0 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Q -223 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* \ - X E0 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Y -239 */ - 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /* 0 - 7 F0 */ - 0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/* 8 -255 */ - -static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */ - 0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 0- 7 */ - 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 16- 23 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 32- 39 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 40- 47 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 48- 55 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 56- 63 */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - 71 */ - 0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /* 72- | */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* & - 87 */ - 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /* 88- ¬ */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - -103 */ - 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ? */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- " */ - 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* h -143 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* q -159 */ - 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* y -175 */ - 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ^ -183 */ - 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* { - G */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* H -207 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* } - P */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* Q -223 */ - 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* \ - X */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* Y -239 */ - 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /* 0 - 7 */ - 0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/* 8 -255 */ -#endif - - -/* Definition to allow mutual recursion */ - -static BOOL - compile_regex(int, int, int *, uschar **, const uschar **, const char **, - BOOL, int, int *, int *, branch_chain *, compile_data *); - -/* Structure for building a chain of data that actually lives on the -stack, for holding the values of the subject pointer at the start of each -subpattern, so as to detect when an empty string has been matched by a -subpattern - to break infinite loops. When NO_RECURSE is set, these blocks -are on the heap, not on the stack. */ - -typedef struct eptrblock { - struct eptrblock *epb_prev; - const uschar *epb_saved_eptr; -} eptrblock; - -/* Flag bits for the match() function */ - -#define match_condassert 0x01 /* Called to check a condition assertion */ -#define match_isgroup 0x02 /* Set if start of bracketed group */ - -/* Non-error returns from the match() function. Error returns are externally -defined PCRE_ERROR_xxx codes, which are all negative. */ - -#define MATCH_MATCH 1 -#define MATCH_NOMATCH 0 - - - -/************************************************* -* Global variables * -*************************************************/ - -/* PCRE is thread-clean and doesn't use any global variables in the normal -sense. However, it calls memory allocation and free functions via the four -indirections below, and it can optionally do callouts. These values can be -changed by the caller, but are shared between all threads. However, when -compiling for Virtual Pascal, things are done differently (see pcre.in). */ - -#ifndef VPCOMPAT -#ifdef __cplusplus -extern "C" void *(*pcre_malloc)(size_t) = malloc; -extern "C" void (*pcre_free)(void *) = free; -extern "C" void *(*pcre_stack_malloc)(size_t) = malloc; -extern "C" void (*pcre_stack_free)(void *) = free; -extern "C" int (*pcre_callout)(pcre_callout_block *) = NULL; -#else -void *(*pcre_malloc)(size_t) = malloc; -void (*pcre_free)(void *) = free; -void *(*pcre_stack_malloc)(size_t) = malloc; -void (*pcre_stack_free)(void *) = free; -int (*pcre_callout)(pcre_callout_block *) = NULL; -#endif -#endif - - -/************************************************* -* Macros and tables for character handling * -*************************************************/ - -/* When UTF-8 encoding is being used, a character is no longer just a single -byte. The macros for character handling generate simple sequences when used in -byte-mode, and more complicated ones for UTF-8 characters. */ - -#ifndef SUPPORT_UTF8 -#define GETCHAR(c, eptr) c = *eptr; -#define GETCHARINC(c, eptr) c = *eptr++; -#define GETCHARINCTEST(c, eptr) c = *eptr++; -#define GETCHARLEN(c, eptr, len) c = *eptr; -#define BACKCHAR(eptr) - -#else /* SUPPORT_UTF8 */ - -/* Get the next UTF-8 character, not advancing the pointer. This is called when -we know we are in UTF-8 mode. */ - -#define GETCHAR(c, eptr) \ - c = *eptr; \ - if ((c & 0xc0) == 0xc0) \ - { \ - int gcii; \ - int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ - int gcss = 6*gcaa; \ - c = (c & utf8_table3[gcaa]) << gcss; \ - for (gcii = 1; gcii <= gcaa; gcii++) \ - { \ - gcss -= 6; \ - c |= (eptr[gcii] & 0x3f) << gcss; \ - } \ - } - -/* Get the next UTF-8 character, advancing the pointer. This is called when we -know we are in UTF-8 mode. */ - -#define GETCHARINC(c, eptr) \ - c = *eptr++; \ - if ((c & 0xc0) == 0xc0) \ - { \ - int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ - int gcss = 6*gcaa; \ - c = (c & utf8_table3[gcaa]) << gcss; \ - while (gcaa-- > 0) \ - { \ - gcss -= 6; \ - c |= (*eptr++ & 0x3f) << gcss; \ - } \ - } - -/* Get the next character, testing for UTF-8 mode, and advancing the pointer */ - -#define GETCHARINCTEST(c, eptr) \ - c = *eptr++; \ - if (1 /* md->utf8 */ && (c & 0xc0) == 0xc0) \ - { \ - int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ - int gcss = 6*gcaa; \ - c = (c & utf8_table3[gcaa]) << gcss; \ - while (gcaa-- > 0) \ - { \ - gcss -= 6; \ - c |= (*eptr++ & 0x3f) << gcss; \ - } \ - } - -/* Get the next UTF-8 character, not advancing the pointer, incrementing length -if there are extra bytes. This is called when we know we are in UTF-8 mode. */ - -#define GETCHARLEN(c, eptr, len) \ - c = *eptr; \ - if ((c & 0xc0) == 0xc0) \ - { \ - int gcii; \ - int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ - int gcss = 6*gcaa; \ - c = (c & utf8_table3[gcaa]) << gcss; \ - for (gcii = 1; gcii <= gcaa; gcii++) \ - { \ - gcss -= 6; \ - c |= (eptr[gcii] & 0x3f) << gcss; \ - } \ - len += gcaa; \ - } - -/* If the pointer is not at the start of a character, move it back until -it is. Called only in UTF-8 mode. */ - -#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--; - -#endif - - - -/************************************************* -* Default character tables * -*************************************************/ - -/* A default set of character tables is included in the PCRE binary. Its source -is built by the maketables auxiliary program, which uses the default C ctypes -functions, and put in the file chartables.c. These tables are used by PCRE -whenever the caller of pcre_compile() does not provide an alternate set of -tables. */ - -static const unsigned char * -make_pcre_default_tables (void) -{ - static const unsigned char *res = NULL; - if (res == NULL) { - res = pcre_maketables (); - } - return res; -} - -/* #include "chartables.c" */ - - - -#ifdef SUPPORT_UTF8 -/************************************************* -* Tables for UTF-8 support * -*************************************************/ - -/* These are the breakpoints for different numbers of bytes in a UTF-8 -character. */ - -static const int utf8_table1[] = - { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff}; - -/* These are the indicator bits and the mask for the data bits to set in the -first byte of a character, indexed by the number of additional bytes. */ - -static const int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}; -static const int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01}; - -/* Table of the number of extra characters, indexed by the first character -masked with 0x3f. The highest number for a valid UTF-8 character is in fact -0x3d. */ - -static const uschar utf8_table4[] = { - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; - - -/************************************************* -* Convert character value to UTF-8 * -*************************************************/ - -/* This function takes an integer value in the range 0 - 0x7fffffff -and encodes it as a UTF-8 character in 0 to 6 bytes. - -Arguments: - cvalue the character value - buffer pointer to buffer for result - at least 6 bytes long - -Returns: number of characters placed in the buffer -*/ - -static int -ord2utf8(int cvalue, uschar *buffer) -{ -register int i, j; -for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++) - if (cvalue <= utf8_table1[i]) break; -buffer += i; -for (j = i; j > 0; j--) - { - *buffer-- = 0x80 | (cvalue & 0x3f); - cvalue >>= 6; - } -*buffer = utf8_table2[i] | cvalue; -return i + 1; -} -#endif - - - -/************************************************* -* Print compiled regex * -*************************************************/ - -/* The code for doing this is held in a separate file that is also included in -pcretest.c. It defines a function called print_internals(). */ - -#ifdef DEBUG -#include "printint.c" -#endif - - - -/************************************************* -* Return version string * -*************************************************/ - -#define STRING(a) # a -#define XSTRING(s) STRING(s) - -const char * -pcre_version(void) -{ -return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE); -} - - - - -/************************************************* -* (Obsolete) Return info about compiled pattern * -*************************************************/ - -/* This is the original "info" function. It picks potentially useful data out -of the private structure, but its interface was too rigid. It remains for -backwards compatibility. The public options are passed back in an int - though -the re->options field has been expanded to a long int, all the public options -at the low end of it, and so even on 16-bit systems this will still be OK. -Therefore, I haven't changed the API for pcre_info(). - -Arguments: - external_re points to compiled code - optptr where to pass back the options - first_byte where to pass back the first character, - or -1 if multiline and all branches start ^, - or -2 otherwise - -Returns: number of capturing subpatterns - or negative values on error -*/ - -int -pcre_info(const pcre *external_re, int *optptr, int *first_byte) -{ -const real_pcre *re = (const real_pcre *)external_re; -if (re == NULL) return PCRE_ERROR_NULL; -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC; -if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS); -if (first_byte != NULL) - *first_byte = ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte : - ((re->options & PCRE_STARTLINE) != 0)? -1 : -2; -return re->top_bracket; -} - - - -/************************************************* -* Return info about compiled pattern * -*************************************************/ - -/* This is a newer "info" function which has an extensible interface so -that additional items can be added compatibly. - -Arguments: - external_re points to compiled code - extra_data points extra data, or NULL - what what information is required - where where to put the information - -Returns: 0 if data returned, negative on error -*/ - -int -pcre_fullinfo(const pcre *external_re, const pcre_extra *extra_data, int what, - void *where) -{ -const real_pcre *re = (const real_pcre *)external_re; -const pcre_study_data *study = NULL; - -if (re == NULL || where == NULL) return PCRE_ERROR_NULL; -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC; - -if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0) - study = (const pcre_study_data *)extra_data->study_data; - -switch (what) - { - case PCRE_INFO_OPTIONS: - *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS; - break; - - case PCRE_INFO_SIZE: - *((size_t *)where) = re->size; - break; - - case PCRE_INFO_STUDYSIZE: - *((size_t *)where) = (study == NULL)? 0 : study->size; - break; - - case PCRE_INFO_CAPTURECOUNT: - *((int *)where) = re->top_bracket; - break; - - case PCRE_INFO_BACKREFMAX: - *((int *)where) = re->top_backref; - break; - - case PCRE_INFO_FIRSTBYTE: - *((int *)where) = - ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte : - ((re->options & PCRE_STARTLINE) != 0)? -1 : -2; - break; - - case PCRE_INFO_FIRSTTABLE: - *((const uschar **)where) = - (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)? - study->start_bits : NULL; - break; - - case PCRE_INFO_LASTLITERAL: - *((int *)where) = - ((re->options & PCRE_REQCHSET) != 0)? re->req_byte : -1; - break; - - case PCRE_INFO_NAMEENTRYSIZE: - *((int *)where) = re->name_entry_size; - break; - - case PCRE_INFO_NAMECOUNT: - *((int *)where) = re->name_count; - break; - - case PCRE_INFO_NAMETABLE: - *((const uschar **)where) = (const uschar *)re + sizeof(real_pcre); - break; - - default: return PCRE_ERROR_BADOPTION; - } - -return 0; -} - - - -/************************************************* -* Return info about what features are configured * -*************************************************/ - -/* This is function which has an extensible interface so that additional items -can be added compatibly. - -Arguments: - what what information is required - where where to put the information - -Returns: 0 if data returned, negative on error -*/ - -int -pcre_config(int what, void *where) -{ -switch (what) - { - case PCRE_CONFIG_UTF8: -#ifdef SUPPORT_UTF8 - *((int *)where) = 1; -#else - *((int *)where) = 0; -#endif - break; - - case PCRE_CONFIG_NEWLINE: - *((int *)where) = NEWLINE; - break; - - case PCRE_CONFIG_LINK_SIZE: - *((int *)where) = LINK_SIZE; - break; - - case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD: - *((int *)where) = POSIX_MALLOC_THRESHOLD; - break; - - case PCRE_CONFIG_MATCH_LIMIT: - *((unsigned int *)where) = MATCH_LIMIT; - break; - - case PCRE_CONFIG_STACKRECURSE: -#ifdef NO_RECURSE - *((int *)where) = 0; -#else - *((int *)where) = 1; -#endif - break; - - default: return PCRE_ERROR_BADOPTION; - } - -return 0; -} - - - -#ifdef DEBUG -/************************************************* -* Debugging function to print chars * -*************************************************/ - -/* Print a sequence of chars in printable format, stopping at the end of the -subject if the requested. - -Arguments: - p points to characters - length number to print - is_subject TRUE if printing from within md->start_subject - md pointer to matching data block, if is_subject is TRUE - -Returns: nothing -*/ - -static void -pchars(const uschar *p, int length, BOOL is_subject, match_data *md) -{ -int c; -if (is_subject && length > md->end_subject - p) length = md->end_subject - p; -while (length-- > 0) - if (g_unichar_isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c); -} -#endif - - - - -/************************************************* -* Handle escapes * -*************************************************/ - -/* This function is called when a \ has been encountered. It either returns a -positive value for a simple escape such as \n, or a negative value which -encodes one of the more complicated things such as \d. When UTF-8 is enabled, -a positive value greater than 255 may be returned. On entry, ptr is pointing at -the \. On exit, it is on the final character of the escape sequence. - -Arguments: - ptrptr points to the pattern position pointer - errorptr points to the pointer to the error message - bracount number of previous extracting brackets - options the options bits - isclass TRUE if inside a character class - -Returns: zero or positive => a data character - negative => a special escape sequence - on error, errorptr is set -*/ - -static int -check_escape(const uschar **ptrptr, const char **errorptr, int bracount, - int options, BOOL isclass) -{ -const uschar *ptr = *ptrptr; -int c, i; - -/* If backslash is at the end of the pattern, it's an error. */ - -c = *(++ptr); -if (c == 0) *errorptr = ERR1; - -/* Non-alphamerics are literals. For digits or letters, do an initial lookup in -a table. A non-zero result is something that can be returned immediately. -Otherwise further processing may be required. */ - -#if !EBCDIC /* ASCII coding */ -else if (c < '0' || c > 'z') {} /* Not alphameric */ -else if ((i = escapes[c - '0']) != 0) c = i; - -#else /* EBCDIC coding */ -else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {} /* Not alphameric */ -else if ((i = escapes[c - 0x48]) != 0) c = i; -#endif - -/* Escapes that need further processing, or are illegal. */ - -else - { - const uschar *oldptr; - switch (c) - { - /* A number of Perl escapes are not handled by PCRE. We give an explicit - error. */ - - case 'l': - case 'L': - case 'N': - case 'p': - case 'P': - case 'u': - case 'U': - case 'X': - *errorptr = ERR37; - break; - - /* The handling of escape sequences consisting of a string of digits - starting with one that is not zero is not straightforward. By experiment, - the way Perl works seems to be as follows: - - Outside a character class, the digits are read as a decimal number. If the - number is less than 10, or if there are that many previous extracting - left brackets, then it is a back reference. Otherwise, up to three octal - digits are read to form an escaped byte. Thus \123 is likely to be octal - 123 (cf \0123, which is octal 012 followed by the literal 3). If the octal - value is greater than 377, the least significant 8 bits are taken. Inside a - character class, \ followed by a digit is always an octal number. */ - - case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - - if (!isclass) - { - oldptr = ptr; - c -= '0'; - while ((digitab[ptr[1]] & ctype_digit) != 0) - c = c * 10 + *(++ptr) - '0'; - if (c < 10 || c <= bracount) - { - c = -(ESC_REF + c); - break; - } - ptr = oldptr; /* Put the pointer back and fall through */ - } - - /* Handle an octal number following \. If the first digit is 8 or 9, Perl - generates a binary zero byte and treats the digit as a following literal. - Thus we have to pull back the pointer by one. */ - - if ((c = *ptr) >= '8') - { - ptr--; - c = 0; - break; - } - - /* \0 always starts an octal number, but we may drop through to here with a - larger first octal digit. */ - - case '0': - c -= '0'; - while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7') - c = c * 8 + *(++ptr) - '0'; - c &= 255; /* Take least significant 8 bits */ - break; - - /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number - which can be greater than 0xff, but only if the ddd are hex digits. */ - - case 'x': -#ifdef SUPPORT_UTF8 - if (ptr[1] == '{' && (options & PCRE_UTF8) != 0) - { - const uschar *pt = ptr + 2; - register int count = 0; - c = 0; - while ((digitab[*pt] & ctype_xdigit) != 0) - { - int cc = *pt++; - count++; -#if !EBCDIC /* ASCII coding */ - if (cc >= 'a') cc -= 32; /* Convert to upper case */ - c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10)); -#else /* EBCDIC coding */ - if (cc >= 'a' && cc <= 'z') cc += 64; /* Convert to upper case */ - c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10)); -#endif - } - if (*pt == '}') - { - if (c < 0 || count > 8) *errorptr = ERR34; - ptr = pt; - break; - } - /* If the sequence of hex digits does not end with '}', then we don't - recognize this construct; fall through to the normal \x handling. */ - } -#endif - - /* Read just a single hex char */ - - c = 0; - while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0) - { - int cc; /* Some compilers don't like ++ */ - cc = *(++ptr); /* in initializers */ -#if !EBCDIC /* ASCII coding */ - if (cc >= 'a') cc -= 32; /* Convert to upper case */ - c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10)); -#else /* EBCDIC coding */ - if (cc <= 'z') cc += 64; /* Convert to upper case */ - c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10)); -#endif - } - break; - - /* Other special escapes not starting with a digit are straightforward */ - - case 'c': - c = *(++ptr); - if (c == 0) - { - *errorptr = ERR2; - return 0; - } - - /* A letter is upper-cased; then the 0x40 bit is flipped. This coding - is ASCII-specific, but then the whole concept of \cx is ASCII-specific. - (However, an EBCDIC equivalent has now been added.) */ - -#if !EBCDIC /* ASCII coding */ - if (c >= 'a' && c <= 'z') c -= 32; - c ^= 0x40; -#else /* EBCDIC coding */ - if (c >= 'a' && c <= 'z') c += 64; - c ^= 0xC0; -#endif - break; - - /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any - other alphameric following \ is an error if PCRE_EXTRA was set; otherwise, - for Perl compatibility, it is a literal. This code looks a bit odd, but - there used to be some cases other than the default, and there may be again - in future, so I haven't "optimized" it. */ - - default: - if ((options & PCRE_EXTRA) != 0) switch(c) - { - default: - *errorptr = ERR3; - break; - } - break; - } - } - -*ptrptr = ptr; -return c; -} - - - -/************************************************* -* Check for counted repeat * -*************************************************/ - -/* This function is called when a '{' is encountered in a place where it might -start a quantifier. It looks ahead to see if it really is a quantifier or not. -It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd} -where the ddds are digits. - -Arguments: - p pointer to the first char after '{' - -Returns: TRUE or FALSE -*/ - -static BOOL -is_counted_repeat(const uschar *p) -{ -if ((digitab[*p++] & ctype_digit) == 0) return FALSE; -while ((digitab[*p] & ctype_digit) != 0) p++; -if (*p == '}') return TRUE; - -if (*p++ != ',') return FALSE; -if (*p == '}') return TRUE; - -if ((digitab[*p++] & ctype_digit) == 0) return FALSE; -while ((digitab[*p] & ctype_digit) != 0) p++; - -return (*p == '}'); -} - - - -/************************************************* -* Read repeat counts * -*************************************************/ - -/* Read an item of the form {n,m} and return the values. This is called only -after is_counted_repeat() has confirmed that a repeat-count quantifier exists, -so the syntax is guaranteed to be correct, but we need to check the values. - -Arguments: - p pointer to first char after '{' - minp pointer to int for min - maxp pointer to int for max - returned as -1 if no max - errorptr points to pointer to error message - -Returns: pointer to '}' on success; - current ptr on error, with errorptr set -*/ - -static const uschar * -read_repeat_counts(const uschar *p, int *minp, int *maxp, const char **errorptr) -{ -int min = 0; -int max = -1; - -while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0'; - -if (*p == '}') max = min; else - { - if (*(++p) != '}') - { - max = 0; - while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0'; - if (max < min) - { - *errorptr = ERR4; - return p; - } - } - } - -/* Do paranoid checks, then fill in the required variables, and pass back the -pointer to the terminating '}'. */ - -if (min > 65535 || max > 65535) - *errorptr = ERR5; -else - { - *minp = min; - *maxp = max; - } -return p; -} - - - -/************************************************* -* Find first significant op code * -*************************************************/ - -/* This is called by several functions that scan a compiled expression looking -for a fixed first character, or an anchoring op code etc. It skips over things -that do not influence this. For some calls, a change of option is important. - -Arguments: - code pointer to the start of the group - options pointer to external options - optbit the option bit whose changing is significant, or - zero if none are - -Returns: pointer to the first significant opcode -*/ - -static const uschar* -first_significant_code(const uschar *code, int *options, int optbit) -{ -for (;;) - { - switch ((int)*code) - { - case OP_OPT: - if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit)) - *options = (int)code[1]; - code += 2; - break; - - case OP_ASSERT_NOT: - case OP_ASSERTBACK: - case OP_ASSERTBACK_NOT: - do code += GET(code, 1); while (*code == OP_ALT); - /* Fall through */ - - case OP_CALLOUT: - case OP_CREF: - case OP_BRANUMBER: - case OP_WORD_BOUNDARY: - case OP_NOT_WORD_BOUNDARY: - code += OP_lengths[*code]; - break; - - default: - return code; - } - } -/* Control never reaches here */ -} - - - - -/************************************************* -* Find the fixed length of a pattern * -*************************************************/ - -/* Scan a pattern and compute the fixed length of subject that will match it, -if the length is fixed. This is needed for dealing with backward assertions. -In UTF8 mode, the result is in characters rather than bytes. - -Arguments: - code points to the start of the pattern (the bracket) - options the compiling options - -Returns: the fixed length, or -1 if there is no fixed length, - or -2 if \C was encountered -*/ - -static int -find_fixedlength(uschar *code, int options) -{ -int length = -1; - -register int branchlength = 0; -register uschar *cc = code + 1 + LINK_SIZE; - -/* Scan along the opcodes for this branch. If we get to the end of the -branch, check the length against that of the other branches. */ - -for (;;) - { - int d; - register int op = *cc; - if (op >= OP_BRA) op = OP_BRA; - - switch (op) - { - case OP_BRA: - case OP_ONCE: - case OP_COND: - d = find_fixedlength(cc, options); - if (d < 0) return d; - branchlength += d; - do cc += GET(cc, 1); while (*cc == OP_ALT); - cc += 1 + LINK_SIZE; - break; - - /* Reached end of a branch; if it's a ket it is the end of a nested - call. If it's ALT it is an alternation in a nested call. If it is - END it's the end of the outer call. All can be handled by the same code. */ - - case OP_ALT: - case OP_KET: - case OP_KETRMAX: - case OP_KETRMIN: - case OP_END: - if (length < 0) length = branchlength; - else if (length != branchlength) return -1; - if (*cc != OP_ALT) return length; - cc += 1 + LINK_SIZE; - branchlength = 0; - break; - - /* Skip over assertive subpatterns */ - - case OP_ASSERT: - case OP_ASSERT_NOT: - case OP_ASSERTBACK: - case OP_ASSERTBACK_NOT: - do cc += GET(cc, 1); while (*cc == OP_ALT); - /* Fall through */ - - /* Skip over things that don't match chars */ - - case OP_REVERSE: - case OP_BRANUMBER: - case OP_CREF: - case OP_OPT: - case OP_CALLOUT: - case OP_SOD: - case OP_SOM: - case OP_EOD: - case OP_EODN: - case OP_CIRC: - case OP_DOLL: - case OP_NOT_WORD_BOUNDARY: - case OP_WORD_BOUNDARY: - cc += OP_lengths[*cc]; - break; - - /* Handle char strings. In UTF-8 mode we must count characters, not bytes. - This requires a scan of the string, unfortunately. We assume valid UTF-8 - strings, so all we do is reduce the length by one for every byte whose bits - are 10xxxxxx. */ - - case OP_CHARS: - branchlength += *(++cc); -#ifdef SUPPORT_UTF8 - if ((options & PCRE_UTF8) != 0) - for (d = 1; d <= *cc; d++) - if ((cc[d] & 0xc0) == 0x80) branchlength--; -#endif - cc += *cc + 1; - break; - - /* Handle exact repetitions. The count is already in characters, but we - need to skip over a multibyte character in UTF8 mode. */ - - case OP_EXACT: - branchlength += GET2(cc,1); - cc += 4; -#ifdef SUPPORT_UTF8 - if ((options & PCRE_UTF8) != 0) - { - while((*cc & 0x80) == 0x80) cc++; - } -#endif - break; - - case OP_TYPEEXACT: - branchlength += GET2(cc,1); - cc += 4; - break; - - /* Handle single-char matchers */ - - case OP_NOT_DIGIT: - case OP_DIGIT: - case OP_NOT_WHITESPACE: - case OP_WHITESPACE: - case OP_NOT_WORDCHAR: - case OP_WORDCHAR: - case OP_ANY: - branchlength++; - cc++; - break; - - /* The single-byte matcher isn't allowed */ - - case OP_ANYBYTE: - return -2; - - /* Check a class for variable quantification */ - -#ifdef SUPPORT_UTF8 - case OP_XCLASS: - cc += GET(cc, 1) - 33; - /* Fall through */ -#endif - - case OP_CLASS: - case OP_NCLASS: - cc += 33; - - switch (*cc) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRQUERY: - case OP_CRMINQUERY: - return -1; - - case OP_CRRANGE: - case OP_CRMINRANGE: - if (GET2(cc,1) != GET2(cc,3)) return -1; - branchlength += GET2(cc,1); - cc += 5; - break; - - default: - branchlength++; - } - break; - - /* Anything else is variable length */ - - default: - return -1; - } - } -/* Control never gets here */ -} - - - - -/************************************************* -* Scan compiled regex for numbered bracket * -*************************************************/ - -/* This little function scans through a compiled pattern until it finds a -capturing bracket with the given number. - -Arguments: - code points to start of expression - utf8 TRUE in UTF-8 mode - number the required bracket number - -Returns: pointer to the opcode for the bracket, or NULL if not found -*/ - -static const uschar * -find_bracket(const uschar *code, BOOL utf8, int number) -{ -#ifndef SUPPORT_UTF8 -utf8 = utf8; /* Stop pedantic compilers complaining */ -#endif - -for (;;) - { - register int c = *code; - if (c == OP_END) return NULL; - else if (c == OP_CHARS) code += code[1] + OP_lengths[c]; - else if (c > OP_BRA) - { - int n = c - OP_BRA; - if (n > EXTRACT_BASIC_MAX) n = GET2(code, 2+LINK_SIZE); - if (n == number) return (uschar *)code; - code += OP_lengths[OP_BRA]; - } - else - { - code += OP_lengths[c]; - -#ifdef SUPPORT_UTF8 - - /* In UTF-8 mode, opcodes that are followed by a character may be followed - by a multi-byte character. The length in the table is a minimum, so we have - to scan along to skip the extra characters. All opcodes are less than 128, - so we can use relatively efficient code. */ - - if (1 /* utf8 */) switch(c) - { - case OP_EXACT: - case OP_UPTO: - case OP_MINUPTO: - case OP_STAR: - case OP_MINSTAR: - case OP_PLUS: - case OP_MINPLUS: - case OP_QUERY: - case OP_MINQUERY: - while ((*code & 0xc0) == 0x80) code++; - break; - - /* XCLASS is used for classes that cannot be represented just by a bit - map. This includes negated single high-valued characters. The length in - the table is zero; the actual length is stored in the compled code. */ - - case OP_XCLASS: - code += GET(code, 1) + 1; - break; - } -#endif - } - } -} - - - -/************************************************* -* Scan compiled regex for recursion reference * -*************************************************/ - -/* This little function scans through a compiled pattern until it finds an -instance of OP_RECURSE. - -Arguments: - code points to start of expression - utf8 TRUE in UTF-8 mode - -Returns: pointer to the opcode for OP_RECURSE, or NULL if not found -*/ - -static const uschar * -find_recurse(const uschar *code, BOOL utf8) -{ -#ifndef SUPPORT_UTF8 -utf8 = utf8; /* Stop pedantic compilers complaining */ -#endif - -for (;;) - { - register int c = *code; - if (c == OP_END) return NULL; - else if (c == OP_RECURSE) return code; - else if (c == OP_CHARS) code += code[1] + OP_lengths[c]; - else if (c > OP_BRA) - { - code += OP_lengths[OP_BRA]; - } - else - { - code += OP_lengths[c]; - -#ifdef SUPPORT_UTF8 - - /* In UTF-8 mode, opcodes that are followed by a character may be followed - by a multi-byte character. The length in the table is a minimum, so we have - to scan along to skip the extra characters. All opcodes are less than 128, - so we can use relatively efficient code. */ - - if (1 /* utf8 */) switch(c) - { - case OP_EXACT: - case OP_UPTO: - case OP_MINUPTO: - case OP_STAR: - case OP_MINSTAR: - case OP_PLUS: - case OP_MINPLUS: - case OP_QUERY: - case OP_MINQUERY: - while ((*code & 0xc0) == 0x80) code++; - break; - - /* XCLASS is used for classes that cannot be represented just by a bit - map. This includes negated single high-valued characters. The length in - the table is zero; the actual length is stored in the compled code. */ - - case OP_XCLASS: - code += GET(code, 1) + 1; - break; - } -#endif - } - } -} - - - -/************************************************* -* Scan compiled branch for non-emptiness * -*************************************************/ - -/* This function scans through a branch of a compiled pattern to see whether it -can match the empty string or not. It is called only from could_be_empty() -below. Note that first_significant_code() skips over assertions. If we hit an -unclosed bracket, we return "empty" - this means we've struck an inner bracket -whose current branch will already have been scanned. - -Arguments: - code points to start of search - endcode points to where to stop - utf8 TRUE if in UTF8 mode - -Returns: TRUE if what is matched could be empty -*/ - -static BOOL -could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8) -{ -register int c; -for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0); - code < endcode; - code = first_significant_code(code + OP_lengths[c], NULL, 0)) - { - const uschar *ccode; - - c = *code; - - if (c >= OP_BRA) - { - BOOL empty_branch; - if (GET(code, 1) == 0) return TRUE; /* Hit unclosed bracket */ - - /* Scan a closed bracket */ - - empty_branch = FALSE; - do - { - if (!empty_branch && could_be_empty_branch(code, endcode, utf8)) - empty_branch = TRUE; - code += GET(code, 1); - } - while (*code == OP_ALT); - if (!empty_branch) return FALSE; /* All branches are non-empty */ - code += 1 + LINK_SIZE; - c = *code; - } - - else switch (c) - { - /* Check for quantifiers after a class */ - -#ifdef SUPPORT_UTF8 - case OP_XCLASS: - ccode = code + GET(code, 1); - goto CHECK_CLASS_REPEAT; -#endif - - case OP_CLASS: - case OP_NCLASS: - ccode = code + 33; - -#ifdef SUPPORT_UTF8 - CHECK_CLASS_REPEAT: -#endif - - switch (*ccode) - { - case OP_CRSTAR: /* These could be empty; continue */ - case OP_CRMINSTAR: - case OP_CRQUERY: - case OP_CRMINQUERY: - break; - - default: /* Non-repeat => class must match */ - case OP_CRPLUS: /* These repeats aren't empty */ - case OP_CRMINPLUS: - return FALSE; - - case OP_CRRANGE: - case OP_CRMINRANGE: - if (GET2(ccode, 1) > 0) return FALSE; /* Minimum > 0 */ - break; - } - break; - - /* Opcodes that must match a character */ - - case OP_NOT_DIGIT: - case OP_DIGIT: - case OP_NOT_WHITESPACE: - case OP_WHITESPACE: - case OP_NOT_WORDCHAR: - case OP_WORDCHAR: - case OP_ANY: - case OP_ANYBYTE: - case OP_CHARS: - case OP_NOT: - case OP_PLUS: - case OP_MINPLUS: - case OP_EXACT: - case OP_NOTPLUS: - case OP_NOTMINPLUS: - case OP_NOTEXACT: - case OP_TYPEPLUS: - case OP_TYPEMINPLUS: - case OP_TYPEEXACT: - return FALSE; - - /* End of branch */ - - case OP_KET: - case OP_KETRMAX: - case OP_KETRMIN: - case OP_ALT: - return TRUE; - - /* In UTF-8 mode, STAR, MINSTAR, QUERY, MINQUERY, UPTO, and MINUPTO may be - followed by a multibyte character */ - -#ifdef SUPPORT_UTF8 - case OP_STAR: - case OP_MINSTAR: - case OP_QUERY: - case OP_MINQUERY: - case OP_UPTO: - case OP_MINUPTO: - if (1 /* utf8 */) while ((code[2] & 0xc0) == 0x80) code++; - break; -#endif - } - } - -return TRUE; -} - - - -/************************************************* -* Scan compiled regex for non-emptiness * -*************************************************/ - -/* This function is called to check for left recursive calls. We want to check -the current branch of the current pattern to see if it could match the empty -string. If it could, we must look outwards for branches at other levels, -stopping when we pass beyond the bracket which is the subject of the recursion. - -Arguments: - code points to start of the recursion - endcode points to where to stop (current RECURSE item) - bcptr points to the chain of current (unclosed) branch starts - utf8 TRUE if in UTF-8 mode - -Returns: TRUE if what is matched could be empty -*/ - -static BOOL -could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr, - BOOL utf8) -{ -while (bcptr != NULL && bcptr->current >= code) - { - if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE; - bcptr = bcptr->outer; - } -return TRUE; -} - - - -/************************************************* -* Check for POSIX class syntax * -*************************************************/ - -/* This function is called when the sequence "[:" or "[." or "[=" is -encountered in a character class. It checks whether this is followed by an -optional ^ and then a sequence of letters, terminated by a matching ":]" or -".]" or "=]". - -Argument: - ptr pointer to the initial [ - endptr where to return the end pointer - cd pointer to compile data - -Returns: TRUE or FALSE -*/ - -static BOOL -check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd) -{ -int terminator; /* Don't combine these lines; the Solaris cc */ -terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */ -if (*(++ptr) == '^') ptr++; -while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++; -if (*ptr == terminator && ptr[1] == ']') - { - *endptr = ptr; - return TRUE; - } -return FALSE; -} - - - - -/************************************************* -* Check POSIX class name * -*************************************************/ - -/* This function is called to check the name given in a POSIX-style class entry -such as [:alnum:]. - -Arguments: - ptr points to the first letter - len the length of the name - -Returns: a value representing the name, or -1 if unknown -*/ - -static int -check_posix_name(const uschar *ptr, int len) -{ -register int yield = 0; -while (posix_name_lengths[yield] != 0) - { - if (len == posix_name_lengths[yield] && - strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield; - yield++; - } -return -1; -} - - -/************************************************* -* Adjust OP_RECURSE items in repeated group * -*************************************************/ - -/* OP_RECURSE items contain an offset from the start of the regex to the group -that is referenced. This means that groups can be replicated for fixed -repetition simply by copying (because the recursion is allowed to refer to -earlier groups that are outside the current group). However, when a group is -optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before -it, after it has been compiled. This means that any OP_RECURSE items within it -that refer to the group itself or any contained groups have to have their -offsets adjusted. That is the job of this function. Before it is called, the -partially compiled regex must be temporarily terminated with OP_END. - -Arguments: - group points to the start of the group - adjust the amount by which the group is to be moved - utf8 TRUE in UTF-8 mode - cd contains pointers to tables etc. - -Returns: nothing -*/ - -static void -adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd) -{ -uschar *ptr = group; -while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL) - { - int offset = GET(ptr, 1); - if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust); - ptr += 1 + LINK_SIZE; - } -} - - - -/************************************************* -* Compile one branch * -*************************************************/ - -/* Scan the pattern, compiling it into the code vector. If the options are -changed during the branch, the pointer is used to change the external options -bits. - -Arguments: - optionsptr pointer to the option bits - brackets points to number of extracting brackets used - code points to the pointer to the current code point - ptrptr points to the current pattern pointer - errorptr points to pointer to error message - firstbyteptr set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE) - reqbyteptr set to the last literal character required, else < 0 - bcptr points to current branch chain - cd contains pointers to tables etc. - -Returns: TRUE on success - FALSE, with *errorptr set on error -*/ - -static BOOL -compile_branch(int *optionsptr, int *brackets, uschar **codeptr, - const uschar **ptrptr, const char **errorptr, int *firstbyteptr, - int *reqbyteptr, branch_chain *bcptr, compile_data *cd) -{ -int repeat_type, op_type; -int repeat_min = 0, repeat_max = 0; /* To please picky compilers */ -int bravalue = 0; -int length; -int greedy_default, greedy_non_default; -int firstbyte, reqbyte; -int zeroreqbyte, zerofirstbyte; -int req_caseopt, reqvary, tempreqvary; -int condcount = 0; -int options = *optionsptr; -register int c; -register uschar *code = *codeptr; -uschar *tempcode; -BOOL inescq = FALSE; -BOOL groupsetfirstbyte = FALSE; -const uschar *ptr = *ptrptr; -const uschar *tempptr; -uschar *previous = NULL; -uschar class[32]; - -#ifdef SUPPORT_UTF8 -BOOL class_utf8; -BOOL utf8 = (options & PCRE_UTF8) != 0; -uschar *class_utf8data; -uschar utf8_char[6]; -#else -BOOL utf8 = FALSE; -#endif - -/* Set up the default and non-default settings for greediness */ - -greedy_default = ((options & PCRE_UNGREEDY) != 0); -greedy_non_default = greedy_default ^ 1; - -/* Initialize no first char, no required char. REQ_UNSET means "no char -matching encountered yet". It gets changed to REQ_NONE if we hit something that -matches a non-fixed char first char; reqbyte just remains unset if we never -find one. - -When we hit a repeat whose minimum is zero, we may have to adjust these values -to take the zero repeat into account. This is implemented by setting them to -zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual -item types that can be repeated set these backoff variables appropriately. */ - -firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET; - -/* The variable req_caseopt contains either the REQ_CASELESS value or zero, -according to the current setting of the caseless flag. REQ_CASELESS is a bit -value > 255. It is added into the firstbyte or reqbyte variables to record the -case status of the value. */ - -req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0; - -/* Switch on next character until the end of the branch */ - -for (;; ptr++) - { - BOOL negate_class; - BOOL possessive_quantifier; - int class_charcount; - int class_lastchar; - int newoptions; - int recno; - int skipbytes; - int subreqbyte; - int subfirstbyte; - - c = *ptr; - if (inescq && c != 0) goto NORMAL_CHAR; - - if ((options & PCRE_EXTENDED) != 0) - { - if ((cd->ctypes[c] & ctype_space) != 0) continue; - if (c == '#') - { - /* The space before the ; is to avoid a warning on a silly compiler - on the Macintosh. */ - while ((c = *(++ptr)) != 0 && c != NEWLINE) ; - if (c != 0) continue; /* Else fall through to handle end of string */ - } - } - - switch(c) - { - /* The branch terminates at end of string, |, or ). */ - - case 0: - case '|': - case ')': - *firstbyteptr = firstbyte; - *reqbyteptr = reqbyte; - *codeptr = code; - *ptrptr = ptr; - return TRUE; - - /* Handle single-character metacharacters. In multiline mode, ^ disables - the setting of any following char as a first character. */ - - case '^': - if ((options & PCRE_MULTILINE) != 0) - { - if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; - } - previous = NULL; - *code++ = OP_CIRC; - break; - - case '$': - previous = NULL; - *code++ = OP_DOLL; - break; - - /* There can never be a first char if '.' is first, whatever happens about - repeats. The value of reqbyte doesn't change either. */ - - case '.': - if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; - zerofirstbyte = firstbyte; - zeroreqbyte = reqbyte; - previous = code; - *code++ = OP_ANY; - break; - - /* Character classes. If the included characters are all < 255 in value, we - build a 32-byte bitmap of the permitted characters, except in the special - case where there is only one such character. For negated classes, we build - the map as usual, then invert it at the end. However, we use a different - opcode so that data characters > 255 can be handled correctly. - - If the class contains characters outside the 0-255 range, a different - opcode is compiled. It may optionally have a bit map for characters < 256, - but those above are are explicitly listed afterwards. A flag byte tells - whether the bitmap is present, and whether this is a negated class or not. - */ - - case '[': - previous = code; - - /* PCRE supports POSIX class stuff inside a class. Perl gives an error if - they are encountered at the top level, so we'll do that too. */ - - if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && - check_posix_syntax(ptr, &tempptr, cd)) - { - *errorptr = (ptr[1] == ':')? ERR13 : ERR31; - goto FAILED; - } - - /* If the first character is '^', set the negation flag and skip it. */ - - if ((c = *(++ptr)) == '^') - { - negate_class = TRUE; - c = *(++ptr); - } - else - { - negate_class = FALSE; - } - - /* Keep a count of chars with values < 256 so that we can optimize the case - of just a single character (as long as it's < 256). For higher valued UTF-8 - characters, we don't yet do any optimization. */ - - class_charcount = 0; - class_lastchar = -1; - -#ifdef SUPPORT_UTF8 - class_utf8 = FALSE; /* No chars >= 256 */ - class_utf8data = code + LINK_SIZE + 34; /* For UTF-8 items */ -#endif - - /* Initialize the 32-char bit map to all zeros. We have to build the - map in a temporary bit of store, in case the class contains only 1 - character (< 256), because in that case the compiled code doesn't use the - bit map. */ - - memset(class, 0, 32 * sizeof(uschar)); - - /* Process characters until ] is reached. By writing this as a "do" it - means that an initial ] is taken as a data character. The first pass - through the regex checked the overall syntax, so we don't need to be very - strict here. At the start of the loop, c contains the first byte of the - character. */ - - do - { -#ifdef SUPPORT_UTF8 - if (utf8 && c > 127) - { /* Braces are required because the */ - GETCHARLEN(c, ptr, ptr); /* macro generates multiple statements */ - } -#endif - - /* Inside \Q...\E everything is literal except \E */ - - if (inescq) - { - if (c == '\\' && ptr[1] == 'E') - { - inescq = FALSE; - ptr++; - continue; - } - else goto LONE_SINGLE_CHARACTER; - } - - /* Handle POSIX class names. Perl allows a negation extension of the - form [:^name:]. A square bracket that doesn't match the syntax is - treated as a literal. We also recognize the POSIX constructions - [.ch.] and [=ch=] ("collating elements") and fault them, as Perl - 5.6 and 5.8 do. */ - - if (c == '[' && - (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && - check_posix_syntax(ptr, &tempptr, cd)) - { - BOOL local_negate = FALSE; - int posix_class, i; - register const uschar *cbits = cd->cbits; - - if (ptr[1] != ':') - { - *errorptr = ERR31; - goto FAILED; - } - - ptr += 2; - if (*ptr == '^') - { - local_negate = TRUE; - ptr++; - } - - posix_class = check_posix_name(ptr, tempptr - ptr); - if (posix_class < 0) - { - *errorptr = ERR30; - goto FAILED; - } - - /* If matching is caseless, upper and lower are converted to - alpha. This relies on the fact that the class table starts with - alpha, lower, upper as the first 3 entries. */ - - if ((options & PCRE_CASELESS) != 0 && posix_class <= 2) - posix_class = 0; - - /* Or into the map we are building up to 3 of the static class - tables, or their negations. The [:blank:] class sets up the same - chars as the [:space:] class (all white space). We remove the vertical - white space chars afterwards. */ - - posix_class *= 3; - for (i = 0; i < 3; i++) - { - BOOL blankclass = strncmp((char *)ptr, "blank", 5) == 0; - int taboffset = posix_class_maps[posix_class + i]; - if (taboffset < 0) break; - if (local_negate) - { - for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset]; - if (blankclass) class[1] |= 0x3c; - } - else - { - for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset]; - if (blankclass) class[1] &= ~0x3c; - } - } - - ptr = tempptr + 1; - class_charcount = 10; /* Set > 1; assumes more than 1 per class */ - continue; /* End of POSIX syntax handling */ - } - - /* Backslash may introduce a single character, or it may introduce one - of the specials, which just set a flag. Escaped items are checked for - validity in the pre-compiling pass. The sequence \b is a special case. - Inside a class (and only there) it is treated as backspace. Elsewhere - it marks a word boundary. Other escapes have preset maps ready to - or into the one we are building. We assume they have more than one - character in them, so set class_charcount bigger than one. */ - - if (c == '\\') - { - c = check_escape(&ptr, errorptr, *brackets, options, TRUE); - if (-c == ESC_b) c = '\b'; /* \b is backslash in a class */ - - if (-c == ESC_Q) /* Handle start of quoted string */ - { - if (ptr[1] == '\\' && ptr[2] == 'E') - { - ptr += 2; /* avoid empty string */ - } - else inescq = TRUE; - continue; - } - - else if (c < 0) - { - register const uschar *cbits = cd->cbits; - class_charcount = 10; /* Greater than 1 is what matters */ - switch (-c) - { - case ESC_d: - for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit]; - continue; - - case ESC_D: - for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit]; - continue; - - case ESC_w: - for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word]; - continue; - - case ESC_W: - for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word]; - continue; - - case ESC_s: - for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space]; - class[1] &= ~0x08; /* Perl 5.004 onwards omits VT from \s */ - continue; - - case ESC_S: - for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space]; - class[1] |= 0x08; /* Perl 5.004 onwards omits VT from \s */ - continue; - - /* Unrecognized escapes are faulted if PCRE is running in its - strict mode. By default, for compatibility with Perl, they are - treated as literals. */ - - default: - if ((options & PCRE_EXTRA) != 0) - { - *errorptr = ERR7; - goto FAILED; - } - c = *ptr; /* The final character */ - } - } - - /* Fall through if we have a single character (c >= 0). This may be - > 256 in UTF-8 mode. */ - - } /* End of backslash handling */ - - /* A single character may be followed by '-' to form a range. However, - Perl does not permit ']' to be the end of the range. A '-' character - here is treated as a literal. */ - - if (ptr[1] == '-' && ptr[2] != ']') - { - int d; - ptr += 2; - -#ifdef SUPPORT_UTF8 - if (1 /* utf8 */) - { /* Braces are required because the */ - GETCHARLEN(d, ptr, ptr); /* macro generates multiple statements */ - } - else -#endif - d = *ptr; - - /* The second part of a range can be a single-character escape, but - not any of the other escapes. Perl 5.6 treats a hyphen as a literal - in such circumstances. */ - - if (d == '\\') - { - const uschar *oldptr = ptr; - d = check_escape(&ptr, errorptr, *brackets, options, TRUE); - - /* \b is backslash; any other special means the '-' was literal */ - - if (d < 0) - { - if (d == -ESC_b) d = '\b'; else - { - ptr = oldptr - 2; - goto LONE_SINGLE_CHARACTER; /* A few lines below */ - } - } - } - - /* Check that the two values are in the correct order */ - - if (d < c) - { - *errorptr = ERR8; - goto FAILED; - } - - /* If d is greater than 255, we can't just use the bit map, so set up - for the UTF-8 supporting class type. If we are not caseless, we can - just set up a single range. If we are caseless, the characters < 256 - are handled with a bitmap, in order to get the case-insensitive - handling. */ - -#ifdef SUPPORT_UTF8 - if (d > 255) - { - class_utf8 = TRUE; - *class_utf8data++ = XCL_RANGE; - if ((options & PCRE_CASELESS) == 0) - { - class_utf8data += ord2utf8(c, class_utf8data); - class_utf8data += ord2utf8(d, class_utf8data); - continue; /* Go get the next char in the class */ - } - class_utf8data += ord2utf8(256, class_utf8data); - class_utf8data += ord2utf8(d, class_utf8data); - d = 255; - /* Fall through */ - } -#endif - /* We use the bit map if the range is entirely < 255, or if part of it - is < 255 and matching is caseless. */ - - for (; c <= d; c++) - { - class[c/8] |= (1 << (c&7)); - if ((options & PCRE_CASELESS) != 0) - { - int uc = cd->fcc[c]; /* flip case */ - class[uc/8] |= (1 << (uc&7)); - } - class_charcount++; /* in case a one-char range */ - class_lastchar = c; - } - - continue; /* Go get the next char in the class */ - } - - /* Handle a lone single character - we can get here for a normal - non-escape char, or after \ that introduces a single character. */ - - LONE_SINGLE_CHARACTER: - - /* Handle a multibyte character */ - -#ifdef SUPPORT_UTF8 - if (utf8 && c > 255) - { - class_utf8 = TRUE; - *class_utf8data++ = XCL_SINGLE; - class_utf8data += ord2utf8(c, class_utf8data); - } - else -#endif - /* Handle a single-byte character */ - { - class [c/8] |= (1 << (c&7)); - if ((options & PCRE_CASELESS) != 0) - { - c = cd->fcc[c]; /* flip case */ - class[c/8] |= (1 << (c&7)); - } - class_charcount++; - class_lastchar = c; - } - } - - /* Loop until ']' reached; the check for end of string happens inside the - loop. This "while" is the end of the "do" above. */ - - while ((c = *(++ptr)) != ']' || inescq); - - /* If class_charcount is 1, we saw precisely one character with a value < - 256. In UTF-8 mode, we can optimize if there were no characters >= 256 and - the one character is < 128. In non-UTF-8 mode we can always optimize. - - The optimization throws away the bit map. We turn the item into a - 1-character OP_CHARS if it's positive, or OP_NOT if it's negative. Note - that OP_NOT does not support multibyte characters. In the positive case, it - can cause firstbyte to be set. Otherwise, there can be no first char if - this item is first, whatever repeat count may follow. In the case of - reqbyte, save the previous value for reinstating. */ - -#ifdef SUPPORT_UTF8 - if (class_charcount == 1 && - (!utf8 || - (!class_utf8 && class_lastchar < 128))) -#else - if (class_charcount == 1) -#endif - { - zeroreqbyte = reqbyte; - if (negate_class) - { - if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; - zerofirstbyte = firstbyte; - *code++ = OP_NOT; - } - else - { - if (firstbyte == REQ_UNSET) - { - zerofirstbyte = REQ_NONE; - firstbyte = class_lastchar | req_caseopt; - } - else - { - zerofirstbyte = firstbyte; - reqbyte = class_lastchar | req_caseopt | cd->req_varyopt; - } - *code++ = OP_CHARS; - *code++ = 1; - } - *code++ = class_lastchar; - break; /* End of class handling */ - } /* End of 1-byte optimization */ - - /* Otherwise, if this is the first thing in the branch, there can be no - first char setting, whatever the repeat count. Any reqbyte setting must - remain unchanged after any kind of repeat. */ - - if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; - zerofirstbyte = firstbyte; - zeroreqbyte = reqbyte; - - /* If there are characters with values > 255, we have to compile an - extended class, with its own opcode. If there are no characters < 256, - we can omit the bitmap. */ - -#ifdef SUPPORT_UTF8 - if (class_utf8) - { - *class_utf8data++ = XCL_END; /* Marks the end of extra data */ - *code++ = OP_XCLASS; - code += LINK_SIZE; - *code = negate_class? XCL_NOT : 0; - - /* If the map is required, install it, and move on to the end of - the extra data */ - - if (class_charcount > 0) - { - *code++ |= XCL_MAP; - memcpy(code, class, 32); - code = class_utf8data; - } - - /* If the map is not required, slide down the extra data. */ - - else - { - int len = class_utf8data - (code + 33); - memmove(code + 1, code + 33, len); - code += len + 1; - } - - /* Now fill in the complete length of the item */ - - PUT(previous, 1, code - previous); - break; /* End of class handling */ - } -#endif - - /* If there are no characters > 255, negate the 32-byte map if necessary, - and copy it into the code vector. If this is the first thing in the branch, - there can be no first char setting, whatever the repeat count. Any reqbyte - setting must remain unchanged after any kind of repeat. */ - - if (negate_class) - { - *code++ = OP_NCLASS; - for (c = 0; c < 32; c++) code[c] = ~class[c]; - } - else - { - *code++ = OP_CLASS; - memcpy(code, class, 32); - } - code += 32; - break; - - /* Various kinds of repeat */ - - case '{': - if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR; - ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr); - if (*errorptr != NULL) goto FAILED; - goto REPEAT; - - case '*': - repeat_min = 0; - repeat_max = -1; - goto REPEAT; - - case '+': - repeat_min = 1; - repeat_max = -1; - goto REPEAT; - - case '?': - repeat_min = 0; - repeat_max = 1; - - REPEAT: - if (previous == NULL) - { - *errorptr = ERR9; - goto FAILED; - } - - if (repeat_min == 0) - { - firstbyte = zerofirstbyte; /* Adjust for zero repeat */ - reqbyte = zeroreqbyte; /* Ditto */ - } - - /* Remember whether this is a variable length repeat */ - - reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY; - - op_type = 0; /* Default single-char op codes */ - possessive_quantifier = FALSE; /* Default not possessive quantifier */ - - /* Save start of previous item, in case we have to move it up to make space - for an inserted OP_ONCE for the additional '+' extension. */ - - tempcode = previous; - - /* If the next character is '+', we have a possessive quantifier. This - implies greediness, whatever the setting of the PCRE_UNGREEDY option. - If the next character is '?' this is a minimizing repeat, by default, - but if PCRE_UNGREEDY is set, it works the other way round. We change the - repeat type to the non-default. */ - - if (ptr[1] == '+') - { - repeat_type = 0; /* Force greedy */ - possessive_quantifier = TRUE; - ptr++; - } - else if (ptr[1] == '?') - { - repeat_type = greedy_non_default; - ptr++; - } - else repeat_type = greedy_default; - - /* If previous was a recursion, we need to wrap it inside brackets so that - it can be replicated if necessary. */ - - if (*previous == OP_RECURSE) - { - memmove(previous + 1 + LINK_SIZE, previous, 1 + LINK_SIZE); - code += 1 + LINK_SIZE; - *previous = OP_BRA; - PUT(previous, 1, code - previous); - *code = OP_KET; - PUT(code, 1, code - previous); - code += 1 + LINK_SIZE; - } - - /* If previous was a string of characters, chop off the last one and use it - as the subject of the repeat. If there was only one character, we can - abolish the previous item altogether. If a one-char item has a minumum of - more than one, ensure that it is set in reqbyte - it might not be if a - sequence such as x{3} is the first thing in a branch because the x will - have gone into firstbyte instead. */ - - if (*previous == OP_CHARS) - { - /* Deal with UTF-8 characters that take up more than one byte. It's - easier to write this out separately than try to macrify it. Use c to - hold the length of the character in bytes, plus 0x80 to flag that it's a - length rather than a small character. */ - -#ifdef SUPPORT_UTF8 - if (utf8 && (code[-1] & 0x80) != 0) - { - uschar *lastchar = code - 1; - while((*lastchar & 0xc0) == 0x80) lastchar--; - c = code - lastchar; /* Length of UTF-8 character */ - memcpy(utf8_char, lastchar, c); /* Save the char */ - if (lastchar == previous + 2) /* There was only one character */ - { - code = previous; /* Abolish the previous item */ - } - else - { - previous[1] -= c; /* Adjust length of previous */ - code = lastchar; /* Lost char off the end */ - tempcode = code; /* Adjust position to be moved for '+' */ - } - c |= 0x80; /* Flag c as a length */ - } - else -#endif - - /* Handle the case of a single byte - either with no UTF8 support, or - with UTF-8 disabled, or for a UTF-8 character < 128. */ - - { - c = *(--code); - if (code == previous + 2) /* There was only one character */ - { - code = previous; /* Abolish the previous item */ - if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt; - } - else - { - previous[1]--; /* adjust length */ - tempcode = code; /* Adjust position to be moved for '+' */ - } - } - - goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */ - } - - /* If previous was a single negated character ([^a] or similar), we use - one of the special opcodes, replacing it. The code is shared with single- - character repeats by setting opt_type to add a suitable offset into - repeat_type. OP_NOT is currently used only for single-byte chars. */ - - else if (*previous == OP_NOT) - { - op_type = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */ - c = previous[1]; - code = previous; - goto OUTPUT_SINGLE_REPEAT; - } - - /* If previous was a character type match (\d or similar), abolish it and - create a suitable repeat item. The code is shared with single-character - repeats by setting op_type to add a suitable offset into repeat_type. */ - - else if (*previous < OP_EODN) - { - op_type = OP_TYPESTAR - OP_STAR; /* Use type opcodes */ - c = *previous; - code = previous; - - OUTPUT_SINGLE_REPEAT: - - /* If the maximum is zero then the minimum must also be zero; Perl allows - this case, so we do too - by simply omitting the item altogether. */ - - if (repeat_max == 0) goto END_REPEAT; - - /* Combine the op_type with the repeat_type */ - - repeat_type += op_type; - - /* A minimum of zero is handled either as the special case * or ?, or as - an UPTO, with the maximum given. */ - - if (repeat_min == 0) - { - if (repeat_max == -1) *code++ = OP_STAR + repeat_type; - else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type; - else - { - *code++ = OP_UPTO + repeat_type; - PUT2INC(code, 0, repeat_max); - } - } - - /* The case {1,} is handled as the special case + */ - - else if (repeat_min == 1 && repeat_max == -1) - *code++ = OP_PLUS + repeat_type; - - /* The case {n,n} is just an EXACT, while the general case {n,m} is - handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */ - - else - { - if (repeat_min != 1) - { - *code++ = OP_EXACT + op_type; /* NB EXACT doesn't have repeat_type */ - PUT2INC(code, 0, repeat_min); - } - - /* If the mininum is 1 and the previous item was a character string, - we either have to put back the item that got cancelled if the string - length was 1, or add the character back onto the end of a longer - string. For a character type nothing need be done; it will just get - put back naturally. Note that the final character is always going to - get added below, so we leave code ready for its insertion. */ - - else if (*previous == OP_CHARS) - { - if (code == previous) code += 2; else - - /* In UTF-8 mode, a multibyte char has its length in c, with the 0x80 - bit set as a flag. The length will always be between 2 and 6. */ - -#ifdef SUPPORT_UTF8 - if (utf8 && c >= 128) previous[1] += c & 7; else -#endif - previous[1]++; - } - - /* For a single negated character we also have to put back the - item that got cancelled. At present this applies only to single byte - characters in any mode. */ - - else if (*previous == OP_NOT) code++; - - /* If the maximum is unlimited, insert an OP_STAR. Before doing so, - we have to insert the character for the previous code. In UTF-8 mode, - long characters have their length in c, with the 0x80 bit as a flag. */ - - if (repeat_max < 0) - { -#ifdef SUPPORT_UTF8 - if (utf8 && c >= 128) - { - memcpy(code, utf8_char, c & 7); - code += c & 7; - } - else -#endif - *code++ = c; - *code++ = OP_STAR + repeat_type; - } - - /* Else insert an UPTO if the max is greater than the min, again - preceded by the character, for the previously inserted code. */ - - else if (repeat_max != repeat_min) - { -#ifdef SUPPORT_UTF8 - if (utf8 && c >= 128) - { - memcpy(code, utf8_char, c & 7); - code += c & 7; - } - else -#endif - *code++ = c; - repeat_max -= repeat_min; - *code++ = OP_UPTO + repeat_type; - PUT2INC(code, 0, repeat_max); - } - } - - /* The character or character type itself comes last in all cases. */ - -#ifdef SUPPORT_UTF8 - if (utf8 && c >= 128) - { - memcpy(code, utf8_char, c & 7); - code += c & 7; - } - else -#endif - - *code++ = c; - } - - /* If previous was a character class or a back reference, we put the repeat - stuff after it, but just skip the item if the repeat was {0,0}. */ - - else if (*previous == OP_CLASS || - *previous == OP_NCLASS || -#ifdef SUPPORT_UTF8 - *previous == OP_XCLASS || -#endif - *previous == OP_REF) - { - if (repeat_max == 0) - { - code = previous; - goto END_REPEAT; - } - if (repeat_min == 0 && repeat_max == -1) - *code++ = OP_CRSTAR + repeat_type; - else if (repeat_min == 1 && repeat_max == -1) - *code++ = OP_CRPLUS + repeat_type; - else if (repeat_min == 0 && repeat_max == 1) - *code++ = OP_CRQUERY + repeat_type; - else - { - *code++ = OP_CRRANGE + repeat_type; - PUT2INC(code, 0, repeat_min); - if (repeat_max == -1) repeat_max = 0; /* 2-byte encoding for max */ - PUT2INC(code, 0, repeat_max); - } - } - - /* If previous was a bracket group, we may have to replicate it in certain - cases. */ - - else if (*previous >= OP_BRA || *previous == OP_ONCE || - *previous == OP_COND) - { - register int i; - int ketoffset = 0; - int len = code - previous; - uschar *bralink = NULL; - - /* If the maximum repeat count is unlimited, find the end of the bracket - by scanning through from the start, and compute the offset back to it - from the current code pointer. There may be an OP_OPT setting following - the final KET, so we can't find the end just by going back from the code - pointer. */ - - if (repeat_max == -1) - { - register uschar *ket = previous; - do ket += GET(ket, 1); while (*ket != OP_KET); - ketoffset = code - ket; - } - - /* The case of a zero minimum is special because of the need to stick - OP_BRAZERO in front of it, and because the group appears once in the - data, whereas in other cases it appears the minimum number of times. For - this reason, it is simplest to treat this case separately, as otherwise - the code gets far too messy. There are several special subcases when the - minimum is zero. */ - - if (repeat_min == 0) - { - /* If the maximum is also zero, we just omit the group from the output - altogether. */ - - if (repeat_max == 0) - { - code = previous; - goto END_REPEAT; - } - - /* If the maximum is 1 or unlimited, we just have to stick in the - BRAZERO and do no more at this point. However, we do need to adjust - any OP_RECURSE calls inside the group that refer to the group itself or - any internal group, because the offset is from the start of the whole - regex. Temporarily terminate the pattern while doing this. */ - - if (repeat_max <= 1) - { - *code = OP_END; - adjust_recurse(previous, 1, utf8, cd); - memmove(previous+1, previous, len); - code++; - *previous++ = OP_BRAZERO + repeat_type; - } - - /* If the maximum is greater than 1 and limited, we have to replicate - in a nested fashion, sticking OP_BRAZERO before each set of brackets. - The first one has to be handled carefully because it's the original - copy, which has to be moved up. The remainder can be handled by code - that is common with the non-zero minimum case below. We have to - adjust the value or repeat_max, since one less copy is required. Once - again, we may have to adjust any OP_RECURSE calls inside the group. */ - - else - { - int offset; - *code = OP_END; - adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd); - memmove(previous + 2 + LINK_SIZE, previous, len); - code += 2 + LINK_SIZE; - *previous++ = OP_BRAZERO + repeat_type; - *previous++ = OP_BRA; - - /* We chain together the bracket offset fields that have to be - filled in later when the ends of the brackets are reached. */ - - offset = (bralink == NULL)? 0 : previous - bralink; - bralink = previous; - PUTINC(previous, 0, offset); - } - - repeat_max--; - } - - /* If the minimum is greater than zero, replicate the group as many - times as necessary, and adjust the maximum to the number of subsequent - copies that we need. If we set a first char from the group, and didn't - set a required char, copy the latter from the former. */ - - else - { - if (repeat_min > 1) - { - if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte; - for (i = 1; i < repeat_min; i++) - { - memcpy(code, previous, len); - code += len; - } - } - if (repeat_max > 0) repeat_max -= repeat_min; - } - - /* This code is common to both the zero and non-zero minimum cases. If - the maximum is limited, it replicates the group in a nested fashion, - remembering the bracket starts on a stack. In the case of a zero minimum, - the first one was set up above. In all cases the repeat_max now specifies - the number of additional copies needed. */ - - if (repeat_max >= 0) - { - for (i = repeat_max - 1; i >= 0; i--) - { - *code++ = OP_BRAZERO + repeat_type; - - /* All but the final copy start a new nesting, maintaining the - chain of brackets outstanding. */ - - if (i != 0) - { - int offset; - *code++ = OP_BRA; - offset = (bralink == NULL)? 0 : code - bralink; - bralink = code; - PUTINC(code, 0, offset); - } - - memcpy(code, previous, len); - code += len; - } - - /* Now chain through the pending brackets, and fill in their length - fields (which are holding the chain links pro tem). */ - - while (bralink != NULL) - { - int oldlinkoffset; - int offset = code - bralink + 1; - uschar *bra = code - offset; - oldlinkoffset = GET(bra, 1); - bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset; - *code++ = OP_KET; - PUTINC(code, 0, offset); - PUT(bra, 1, offset); - } - } - - /* If the maximum is unlimited, set a repeater in the final copy. We - can't just offset backwards from the current code point, because we - don't know if there's been an options resetting after the ket. The - correct offset was computed above. */ - - else code[-ketoffset] = OP_KETRMAX + repeat_type; - } - - /* Else there's some kind of shambles */ - - else - { - *errorptr = ERR11; - goto FAILED; - } - - /* If the character following a repeat is '+', we wrap the entire repeated - item inside OP_ONCE brackets. This is just syntactic sugar, taken from - Sun's Java package. The repeated item starts at tempcode, not at previous, - which might be the first part of a string whose (former) last char we - repeated. However, we don't support '+' after a greediness '?'. */ - - if (possessive_quantifier) - { - int len = code - tempcode; - memmove(tempcode + 1+LINK_SIZE, tempcode, len); - code += 1 + LINK_SIZE; - len += 1 + LINK_SIZE; - tempcode[0] = OP_ONCE; - *code++ = OP_KET; - PUTINC(code, 0, len); - PUT(tempcode, 1, len); - } - - /* In all case we no longer have a previous item. We also set the - "follows varying string" flag for subsequently encountered reqbytes if - it isn't already set and we have just passed a varying length item. */ - - END_REPEAT: - previous = NULL; - cd->req_varyopt |= reqvary; - break; - - - /* Start of nested bracket sub-expression, or comment or lookahead or - lookbehind or option setting or condition. First deal with special things - that can come after a bracket; all are introduced by ?, and the appearance - of any of them means that this is not a referencing group. They were - checked for validity in the first pass over the string, so we don't have to - check for syntax errors here. */ - - case '(': - newoptions = options; - skipbytes = 0; - - if (*(++ptr) == '?') - { - int set, unset; - int *optset; - - switch (*(++ptr)) - { - case '#': /* Comment; skip to ket */ - ptr++; - while (*ptr != ')') ptr++; - continue; - - case ':': /* Non-extracting bracket */ - bravalue = OP_BRA; - ptr++; - break; - - case '(': - bravalue = OP_COND; /* Conditional group */ - - /* Condition to test for recursion */ - - if (ptr[1] == 'R') - { - code[1+LINK_SIZE] = OP_CREF; - PUT2(code, 2+LINK_SIZE, CREF_RECURSE); - skipbytes = 3; - ptr += 3; - } - - /* Condition to test for a numbered subpattern match. We know that - if a digit follows ( then there will just be digits until ) because - the syntax was checked in the first pass. */ - - else if ((digitab[ptr[1]] && ctype_digit) != 0) - { - int condref; /* Don't amalgamate; some compilers */ - condref = *(++ptr) - '0'; /* grumble at autoincrement in declaration */ - while (*(++ptr) != ')') condref = condref*10 + *ptr - '0'; - if (condref == 0) - { - *errorptr = ERR35; - goto FAILED; - } - ptr++; - code[1+LINK_SIZE] = OP_CREF; - PUT2(code, 2+LINK_SIZE, condref); - skipbytes = 3; - } - /* For conditions that are assertions, we just fall through, having - set bravalue above. */ - break; - - case '=': /* Positive lookahead */ - bravalue = OP_ASSERT; - ptr++; - break; - - case '!': /* Negative lookahead */ - bravalue = OP_ASSERT_NOT; - ptr++; - break; - - case '<': /* Lookbehinds */ - switch (*(++ptr)) - { - case '=': /* Positive lookbehind */ - bravalue = OP_ASSERTBACK; - ptr++; - break; - - case '!': /* Negative lookbehind */ - bravalue = OP_ASSERTBACK_NOT; - ptr++; - break; - } - break; - - case '>': /* One-time brackets */ - bravalue = OP_ONCE; - ptr++; - break; - - case 'C': /* Callout - may be followed by digits */ - *code++ = OP_CALLOUT; - { - int n = 0; - while ((digitab[*(++ptr)] & ctype_digit) != 0) - n = n * 10 + *ptr - '0'; - if (n > 255) - { - *errorptr = ERR38; - goto FAILED; - } - *code++ = n; - } - previous = NULL; - continue; - - case 'P': /* Named subpattern handling */ - if (*(++ptr) == '<') /* Definition */ - { - int i, namelen; - uschar *slot = cd->name_table; - const uschar *name; /* Don't amalgamate; some compilers */ - name = ++ptr; /* grumble at autoincrement in declaration */ - - while (*ptr++ != '>'); - namelen = ptr - name - 1; - - for (i = 0; i < cd->names_found; i++) - { - int crc = memcmp(name, slot+2, namelen); - if (crc == 0) - { - if (slot[2+namelen] == 0) - { - *errorptr = ERR43; - goto FAILED; - } - crc = -1; /* Current name is substring */ - } - if (crc < 0) - { - memmove(slot + cd->name_entry_size, slot, - (cd->names_found - i) * cd->name_entry_size); - break; - } - slot += cd->name_entry_size; - } - - PUT2(slot, 0, *brackets + 1); - memcpy(slot + 2, name, namelen); - slot[2+namelen] = 0; - cd->names_found++; - goto NUMBERED_GROUP; - } - - if (*ptr == '=' || *ptr == '>') /* Reference or recursion */ - { - int i, namelen; - int type = *ptr++; - const uschar *name = ptr; - uschar *slot = cd->name_table; - - while (*ptr != ')') ptr++; - namelen = ptr - name; - - for (i = 0; i < cd->names_found; i++) - { - if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break; - slot += cd->name_entry_size; - } - if (i >= cd->names_found) - { - *errorptr = ERR15; - goto FAILED; - } - - recno = GET2(slot, 0); - - if (type == '>') goto HANDLE_RECURSION; /* A few lines below */ - - /* Back reference */ - - previous = code; - *code++ = OP_REF; - PUT2INC(code, 0, recno); - cd->backref_map |= (recno < 32)? (1 << recno) : 1; - if (recno > cd->top_backref) cd->top_backref = recno; - continue; - } - - /* Should never happen */ - break; - - case 'R': /* Pattern recursion */ - ptr++; /* Same as (?0) */ - /* Fall through */ - - /* Recursion or "subroutine" call */ - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - { - const uschar *called; - recno = 0; - while((digitab[*ptr] & ctype_digit) != 0) - recno = recno * 10 + *ptr++ - '0'; - - /* Come here from code above that handles a named recursion */ - - HANDLE_RECURSION: - - previous = code; - - /* Find the bracket that is being referenced. Temporarily end the - regex in case it doesn't exist. */ - - *code = OP_END; - called = (recno == 0)? - cd->start_code : find_bracket(cd->start_code, utf8, recno); - - if (called == NULL) - { - *errorptr = ERR15; - goto FAILED; - } - - /* If the subpattern is still open, this is a recursive call. We - check to see if this is a left recursion that could loop for ever, - and diagnose that case. */ - - if (GET(called, 1) == 0 && could_be_empty(called, code, bcptr, utf8)) - { - *errorptr = ERR40; - goto FAILED; - } - - /* Insert the recursion/subroutine item */ - - *code = OP_RECURSE; - PUT(code, 1, called - cd->start_code); - code += 1 + LINK_SIZE; - } - continue; - - /* Character after (? not specially recognized */ - - default: /* Option setting */ - set = unset = 0; - optset = &set; - - while (*ptr != ')' && *ptr != ':') - { - switch (*ptr++) - { - case '-': optset = &unset; break; - - case 'i': *optset |= PCRE_CASELESS; break; - case 'm': *optset |= PCRE_MULTILINE; break; - case 's': *optset |= PCRE_DOTALL; break; - case 'x': *optset |= PCRE_EXTENDED; break; - case 'U': *optset |= PCRE_UNGREEDY; break; - case 'X': *optset |= PCRE_EXTRA; break; - } - } - - /* Set up the changed option bits, but don't change anything yet. */ - - newoptions = (options | set) & (~unset); - - /* If the options ended with ')' this is not the start of a nested - group with option changes, so the options change at this level. Compile - code to change the ims options if this setting actually changes any of - them. We also pass the new setting back so that it can be put at the - start of any following branches, and when this group ends (if we are in - a group), a resetting item can be compiled. - - Note that if this item is right at the start of the pattern, the - options will have been abstracted and made global, so there will be no - change to compile. */ - - if (*ptr == ')') - { - if ((options & PCRE_IMS) != (newoptions & PCRE_IMS)) - { - *code++ = OP_OPT; - *code++ = newoptions & PCRE_IMS; - } - - /* Change options at this level, and pass them back for use - in subsequent branches. Reset the greedy defaults and the case - value for firstbyte and reqbyte. */ - - *optionsptr = options = newoptions; - greedy_default = ((newoptions & PCRE_UNGREEDY) != 0); - greedy_non_default = greedy_default ^ 1; - req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0; - - previous = NULL; /* This item can't be repeated */ - continue; /* It is complete */ - } - - /* If the options ended with ':' we are heading into a nested group - with possible change of options. Such groups are non-capturing and are - not assertions of any kind. All we need to do is skip over the ':'; - the newoptions value is handled below. */ - - bravalue = OP_BRA; - ptr++; - } - } - - /* If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become - non-capturing and behave like (?:...) brackets */ - - else if ((options & PCRE_NO_AUTO_CAPTURE) != 0) - { - bravalue = OP_BRA; - } - - /* Else we have a referencing group; adjust the opcode. If the bracket - number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and - arrange for the true number to follow later, in an OP_BRANUMBER item. */ - - else - { - NUMBERED_GROUP: - if (++(*brackets) > EXTRACT_BASIC_MAX) - { - bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1; - code[1+LINK_SIZE] = OP_BRANUMBER; - PUT2(code, 2+LINK_SIZE, *brackets); - skipbytes = 3; - } - else bravalue = OP_BRA + *brackets; - } - - /* Process nested bracketed re. Assertions may not be repeated, but other - kinds can be. We copy code into a non-register variable in order to be able - to pass its address because some compilers complain otherwise. Pass in a - new setting for the ims options if they have changed. */ - - previous = (bravalue >= OP_ONCE)? code : NULL; - *code = bravalue; - tempcode = code; - tempreqvary = cd->req_varyopt; /* Save value before bracket */ - - if (!compile_regex( - newoptions, /* The complete new option state */ - options & PCRE_IMS, /* The previous ims option state */ - brackets, /* Extracting bracket count */ - &tempcode, /* Where to put code (updated) */ - &ptr, /* Input pointer (updated) */ - errorptr, /* Where to put an error message */ - (bravalue == OP_ASSERTBACK || - bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */ - skipbytes, /* Skip over OP_COND/OP_BRANUMBER */ - &subfirstbyte, /* For possible first char */ - &subreqbyte, /* For possible last char */ - bcptr, /* Current branch chain */ - cd)) /* Tables block */ - goto FAILED; - - /* At the end of compiling, code is still pointing to the start of the - group, while tempcode has been updated to point past the end of the group - and any option resetting that may follow it. The pattern pointer (ptr) - is on the bracket. */ - - /* If this is a conditional bracket, check that there are no more than - two branches in the group. */ - - else if (bravalue == OP_COND) - { - uschar *tc = code; - condcount = 0; - - do { - condcount++; - tc += GET(tc,1); - } - while (*tc != OP_KET); - - if (condcount > 2) - { - *errorptr = ERR27; - goto FAILED; - } - - /* If there is just one branch, we must not make use of its firstbyte or - reqbyte, because this is equivalent to an empty second branch. */ - - if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE; - } - - /* Handle updating of the required and first characters. Update for normal - brackets of all kinds, and conditions with two branches (see code above). - If the bracket is followed by a quantifier with zero repeat, we have to - back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the - main loop so that they can be accessed for the back off. */ - - zeroreqbyte = reqbyte; - zerofirstbyte = firstbyte; - groupsetfirstbyte = FALSE; - - if (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_COND) - { - /* If we have not yet set a firstbyte in this branch, take it from the - subpattern, remembering that it was set here so that a repeat of more - than one can replicate it as reqbyte if necessary. If the subpattern has - no firstbyte, set "none" for the whole branch. In both cases, a zero - repeat forces firstbyte to "none". */ - - if (firstbyte == REQ_UNSET) - { - if (subfirstbyte >= 0) - { - firstbyte = subfirstbyte; - groupsetfirstbyte = TRUE; - } - else firstbyte = REQ_NONE; - zerofirstbyte = REQ_NONE; - } - - /* If firstbyte was previously set, convert the subpattern's firstbyte - into reqbyte if there wasn't one, using the vary flag that was in - existence beforehand. */ - - else if (subfirstbyte >= 0 && subreqbyte < 0) - subreqbyte = subfirstbyte | tempreqvary; - - /* If the subpattern set a required byte (or set a first byte that isn't - really the first byte - see above), set it. */ - - if (subreqbyte >= 0) reqbyte = subreqbyte; - } - - /* For a forward assertion, we take the reqbyte, if set. This can be - helpful if the pattern that follows the assertion doesn't set a different - char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte - for an assertion, however because it leads to incorrect effect for patterns - such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead - of a firstbyte. This is overcome by a scan at the end if there's no - firstbyte, looking for an asserted first char. */ - - else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte; - - /* Now update the main code pointer to the end of the group. */ - - code = tempcode; - - /* Error if hit end of pattern */ - - if (*ptr != ')') - { - *errorptr = ERR14; - goto FAILED; - } - break; - - /* Check \ for being a real metacharacter; if not, fall through and handle - it as a data character at the start of a string. Escape items are checked - for validity in the pre-compiling pass. */ - - case '\\': - tempptr = ptr; - c = check_escape(&ptr, errorptr, *brackets, options, FALSE); - - /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values - are arranged to be the negation of the corresponding OP_values. For the - back references, the values are ESC_REF plus the reference number. Only - back references and those types that consume a character may be repeated. - We can test for values between ESC_b and ESC_Z for the latter; this may - have to change if any new ones are ever created. */ - - if (c < 0) - { - if (-c == ESC_Q) /* Handle start of quoted string */ - { - if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */ - else inescq = TRUE; - continue; - } - - /* For metasequences that actually match a character, we disable the - setting of a first character if it hasn't already been set. */ - - if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z) - firstbyte = REQ_NONE; - - /* Set values to reset to if this is followed by a zero repeat. */ - - zerofirstbyte = firstbyte; - zeroreqbyte = reqbyte; - - /* Back references are handled specially */ - - if (-c >= ESC_REF) - { - int number = -c - ESC_REF; - previous = code; - *code++ = OP_REF; - PUT2INC(code, 0, number); - } - else - { - previous = (-c > ESC_b && -c < ESC_Z)? code : NULL; - *code++ = -c; - } - continue; - } - - /* Data character: reset and fall through */ - - ptr = tempptr; - c = '\\'; - - /* Handle a run of data characters until a metacharacter is encountered. - The first character is guaranteed not to be whitespace or # when the - extended flag is set. */ - - NORMAL_CHAR: - default: - previous = code; - *code = OP_CHARS; - code += 2; - length = 0; - - do - { - /* If in \Q...\E, check for the end; if not, we always have a literal */ - - if (inescq) - { - if (c == '\\' && ptr[1] == 'E') - { - inescq = FALSE; - ptr++; - } - else - { - *code++ = c; - length++; - } - continue; - } - - /* Skip white space and comments for /x patterns */ - - if ((options & PCRE_EXTENDED) != 0) - { - if ((cd->ctypes[c] & ctype_space) != 0) continue; - if (c == '#') - { - /* The space before the ; is to avoid a warning on a silly compiler - on the Macintosh. */ - while ((c = *(++ptr)) != 0 && c != NEWLINE) ; - if (c == 0) break; - continue; - } - } - - /* Backslash may introduce a data char or a metacharacter. Escaped items - are checked for validity in the pre-compiling pass. Stop the string - before a metaitem. */ - - if (c == '\\') - { - tempptr = ptr; - c = check_escape(&ptr, errorptr, *brackets, options, FALSE); - if (c < 0) { ptr = tempptr; break; } - - /* If a character is > 127 in UTF-8 mode, we have to turn it into - two or more bytes in the UTF-8 encoding. */ - -#ifdef SUPPORT_UTF8 - if (utf8 && c > 127) - { - uschar buffer[8]; - int len = ord2utf8(c, buffer); - for (c = 0; c < len; c++) *code++ = buffer[c]; - length += len; - continue; - } -#endif - } - - /* Ordinary character or single-char escape */ - - *code++ = c; - length++; - } - - /* This "while" is the end of the "do" above. */ - - while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0); - - /* Update the first and last requirements. These are always bytes, even in - UTF-8 mode. However, there is a special case to be considered when there - are only one or two characters. Because this gets messy in UTF-8 mode, the - code is kept separate. When we get here "length" contains the number of - bytes. */ - -#ifdef SUPPORT_UTF8 - if (utf8 && length > 1) - { - uschar *t = previous + 3; /* After this code, t */ - while (t < code && (*t & 0xc0) == 0x80) t++; /* follows the 1st char */ - - /* Handle the case when there is only one multibyte character. It must - have at least two bytes because of the "length > 1" test above. */ - - if (t == code) - { - /* If no previous first byte, set it from this character, but revert to - none on a zero repeat. */ - - if (firstbyte == REQ_UNSET) - { - zerofirstbyte = REQ_NONE; - firstbyte = previous[2]; - } - - /* Otherwise, leave the first byte value alone, and don't change it on - a zero repeat */ - - else zerofirstbyte = firstbyte; - - /* In both cases, a zero repeat resets the previous required byte */ - - zeroreqbyte = reqbyte; - } - - /* Handle the case when there is more than one character. These may be - single-byte or multibyte characters */ - - else - { - t = code - 1; /* After this code, t is at the */ - while ((*t & 0xc0) == 0x80) t--; /* start of the last character */ - - /* If no previous first byte, set it from the first character, and - retain it on a zero repeat (of the last character). The required byte - is reset on a zero repeat, either to the byte before the last - character, unless this is the first byte of the string. In that case, - it reverts to its previous value. */ - - if (firstbyte == REQ_UNSET) - { - zerofirstbyte = firstbyte = previous[2] | req_caseopt; - zeroreqbyte = (t - 1 == previous + 2)? - reqbyte : t[-1] | req_caseopt | cd->req_varyopt; - } - - /* If there was a previous first byte, leave it alone, and don't change - it on a zero repeat. The required byte is reset on a zero repeat to the - byte before the last character. */ - - else - { - zerofirstbyte = firstbyte; - zeroreqbyte = t[-1] | req_caseopt | cd->req_varyopt; - } - } - - /* In all cases (we know length > 1), the new required byte is the last - byte of the string. */ - - reqbyte = code[-1] | req_caseopt | cd->req_varyopt; - } - - else /* End of UTF-8 coding */ -#endif - - /* This is the code for non-UTF-8 operation, either without UTF-8 support, - or when UTF-8 is not enabled. */ - - { - /* firstbyte was not previously set; take it from this string */ - - if (firstbyte == REQ_UNSET) - { - if (length == 1) - { - zerofirstbyte = REQ_NONE; - firstbyte = previous[2] | req_caseopt; - zeroreqbyte = reqbyte; - } - else - { - zerofirstbyte = firstbyte = previous[2] | req_caseopt; - zeroreqbyte = (length > 2)? - (code[-2] | req_caseopt | cd->req_varyopt) : reqbyte; - reqbyte = code[-1] | req_caseopt | cd->req_varyopt; - } - } - - /* firstbyte was previously set */ - - else - { - zerofirstbyte = firstbyte; - zeroreqbyte = (length == 1)? reqbyte : - code[-2] | req_caseopt | cd->req_varyopt; - reqbyte = code[-1] | req_caseopt | cd->req_varyopt; - } - } - - /* Set the length in the data vector, and advance to the next state. */ - - previous[1] = length; - if (length < MAXLIT) ptr--; - break; - } - } /* end of big loop */ - -/* Control never reaches here by falling through, only by a goto for all the -error states. Pass back the position in the pattern so that it can be displayed -to the user for diagnosing the error. */ - -FAILED: -*ptrptr = ptr; -return FALSE; -} - - - - -/************************************************* -* Compile sequence of alternatives * -*************************************************/ - -/* On entry, ptr is pointing past the bracket character, but on return -it points to the closing bracket, or vertical bar, or end of string. -The code variable is pointing at the byte into which the BRA operator has been -stored. If the ims options are changed at the start (for a (?ims: group) or -during any branch, we need to insert an OP_OPT item at the start of every -following branch to ensure they get set correctly at run time, and also pass -the new options into every subsequent branch compile. - -Argument: - options option bits, including any changes for this subpattern - oldims previous settings of ims option bits - brackets -> int containing the number of extracting brackets used - codeptr -> the address of the current code pointer - ptrptr -> the address of the current pattern pointer - errorptr -> pointer to error message - lookbehind TRUE if this is a lookbehind assertion - skipbytes skip this many bytes at start (for OP_COND, OP_BRANUMBER) - firstbyteptr place to put the first required character, or a negative number - reqbyteptr place to put the last required character, or a negative number - bcptr pointer to the chain of currently open branches - cd points to the data block with tables pointers etc. - -Returns: TRUE on success -*/ - -static BOOL -compile_regex(int options, int oldims, int *brackets, uschar **codeptr, - const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes, - int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd) -{ -const uschar *ptr = *ptrptr; -uschar *code = *codeptr; -uschar *last_branch = code; -uschar *start_bracket = code; -uschar *reverse_count = NULL; -int firstbyte, reqbyte; -int branchfirstbyte, branchreqbyte; -branch_chain bc; - -bc.outer = bcptr; -bc.current = code; - -firstbyte = reqbyte = REQ_UNSET; - -/* Offset is set zero to mark that this bracket is still open */ - -PUT(code, 1, 0); -code += 1 + LINK_SIZE + skipbytes; - -/* Loop for each alternative branch */ - -for (;;) - { - /* Handle a change of ims options at the start of the branch */ - - if ((options & PCRE_IMS) != oldims) - { - *code++ = OP_OPT; - *code++ = options & PCRE_IMS; - } - - /* Set up dummy OP_REVERSE if lookbehind assertion */ - - if (lookbehind) - { - *code++ = OP_REVERSE; - reverse_count = code; - PUTINC(code, 0, 0); - } - - /* Now compile the branch */ - - if (!compile_branch(&options, brackets, &code, &ptr, errorptr, - &branchfirstbyte, &branchreqbyte, &bc, cd)) - { - *ptrptr = ptr; - return FALSE; - } - - /* If this is the first branch, the firstbyte and reqbyte values for the - branch become the values for the regex. */ - - if (*last_branch != OP_ALT) - { - firstbyte = branchfirstbyte; - reqbyte = branchreqbyte; - } - - /* If this is not the first branch, the first char and reqbyte have to - match the values from all the previous branches, except that if the previous - value for reqbyte didn't have REQ_VARY set, it can still match, and we set - REQ_VARY for the regex. */ - - else - { - /* If we previously had a firstbyte, but it doesn't match the new branch, - we have to abandon the firstbyte for the regex, but if there was previously - no reqbyte, it takes on the value of the old firstbyte. */ - - if (firstbyte >= 0 && firstbyte != branchfirstbyte) - { - if (reqbyte < 0) reqbyte = firstbyte; - firstbyte = REQ_NONE; - } - - /* If we (now or from before) have no firstbyte, a firstbyte from the - branch becomes a reqbyte if there isn't a branch reqbyte. */ - - if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0) - branchreqbyte = branchfirstbyte; - - /* Now ensure that the reqbytes match */ - - if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY)) - reqbyte = REQ_NONE; - else reqbyte |= branchreqbyte; /* To "or" REQ_VARY */ - } - - /* If lookbehind, check that this branch matches a fixed-length string, - and put the length into the OP_REVERSE item. Temporarily mark the end of - the branch with OP_END. */ - - if (lookbehind) - { - int length; - *code = OP_END; - length = find_fixedlength(last_branch, options); - DPRINTF(("fixed length = %d\n", length)); - if (length < 0) - { - *errorptr = (length == -2)? ERR36 : ERR25; - *ptrptr = ptr; - return FALSE; - } - PUT(reverse_count, 0, length); - } - - /* Reached end of expression, either ')' or end of pattern. Go back through - the alternative branches and reverse the chain of offsets, with the field in - the BRA item now becoming an offset to the first alternative. If there are - no alternatives, it points to the end of the group. The length in the - terminating ket is always the length of the whole bracketed item. If any of - the ims options were changed inside the group, compile a resetting op-code - following, except at the very end of the pattern. Return leaving the pointer - at the terminating char. */ - - if (*ptr != '|') - { - int length = code - last_branch; - do - { - int prev_length = GET(last_branch, 1); - PUT(last_branch, 1, length); - length = prev_length; - last_branch -= length; - } - while (length > 0); - - /* Fill in the ket */ - - *code = OP_KET; - PUT(code, 1, code - start_bracket); - code += 1 + LINK_SIZE; - - /* Resetting option if needed */ - - if ((options & PCRE_IMS) != oldims && *ptr == ')') - { - *code++ = OP_OPT; - *code++ = oldims; - } - - /* Set values to pass back */ - - *codeptr = code; - *ptrptr = ptr; - *firstbyteptr = firstbyte; - *reqbyteptr = reqbyte; - return TRUE; - } - - /* Another branch follows; insert an "or" node. Its length field points back - to the previous branch while the bracket remains open. At the end the chain - is reversed. It's done like this so that the start of the bracket has a - zero offset until it is closed, making it possible to detect recursion. */ - - *code = OP_ALT; - PUT(code, 1, code - last_branch); - bc.current = last_branch = code; - code += 1 + LINK_SIZE; - ptr++; - } -/* Control never reaches here */ -} - - - - -/************************************************* -* Check for anchored expression * -*************************************************/ - -/* Try to find out if this is an anchored regular expression. Consider each -alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket -all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then -it's anchored. However, if this is a multiline pattern, then only OP_SOD -counts, since OP_CIRC can match in the middle. - -We can also consider a regex to be anchored if OP_SOM starts all its branches. -This is the code for \G, which means "match at start of match position, taking -into account the match offset". - -A branch is also implicitly anchored if it starts with .* and DOTALL is set, -because that will try the rest of the pattern at all possible matching points, -so there is no point trying again.... er .... - -.... except when the .* appears inside capturing parentheses, and there is a -subsequent back reference to those parentheses. We haven't enough information -to catch that case precisely. - -At first, the best we could do was to detect when .* was in capturing brackets -and the highest back reference was greater than or equal to that level. -However, by keeping a bitmap of the first 31 back references, we can catch some -of the more common cases more precisely. - -Arguments: - code points to start of expression (the bracket) - options points to the options setting - bracket_map a bitmap of which brackets we are inside while testing; this - handles up to substring 31; after that we just have to take - the less precise approach - backref_map the back reference bitmap - -Returns: TRUE or FALSE -*/ - -static BOOL -is_anchored(register const uschar *code, int *options, unsigned int bracket_map, - unsigned int backref_map) -{ -do { - const uschar *scode = - first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE); - register int op = *scode; - - /* Capturing brackets */ - - if (op > OP_BRA) - { - int new_map; - op -= OP_BRA; - if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE); - new_map = bracket_map | ((op < 32)? (1 << op) : 1); - if (!is_anchored(scode, options, new_map, backref_map)) return FALSE; - } - - /* Other brackets */ - - else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) - { - if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE; - } - - /* .* is not anchored unless DOTALL is set and it isn't in brackets that - are or may be referenced. */ - - else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) && - (*options & PCRE_DOTALL) != 0) - { - if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE; - } - - /* Check for explicit anchoring */ - - else if (op != OP_SOD && op != OP_SOM && - ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC)) - return FALSE; - code += GET(code, 1); - } -while (*code == OP_ALT); /* Loop for each alternative */ -return TRUE; -} - - - -/************************************************* -* Check for starting with ^ or .* * -*************************************************/ - -/* This is called to find out if every branch starts with ^ or .* so that -"first char" processing can be done to speed things up in multiline -matching and for non-DOTALL patterns that start with .* (which must start at -the beginning or after \n). As in the case of is_anchored() (see above), we -have to take account of back references to capturing brackets that contain .* -because in that case we can't make the assumption. - -Arguments: - code points to start of expression (the bracket) - bracket_map a bitmap of which brackets we are inside while testing; this - handles up to substring 31; after that we just have to take - the less precise approach - backref_map the back reference bitmap - -Returns: TRUE or FALSE -*/ - -static BOOL -is_startline(const uschar *code, unsigned int bracket_map, - unsigned int backref_map) -{ -do { - const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0); - register int op = *scode; - - /* Capturing brackets */ - - if (op > OP_BRA) - { - int new_map; - op -= OP_BRA; - if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE); - new_map = bracket_map | ((op < 32)? (1 << op) : 1); - if (!is_startline(scode, new_map, backref_map)) return FALSE; - } - - /* Other brackets */ - - else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND) - { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; } - - /* .* is not anchored unless DOTALL is set and it isn't in brackets that - may be referenced. */ - - else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR) - { - if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE; - } - - /* Check for explicit circumflex */ - - else if (op != OP_CIRC) return FALSE; - code += GET(code, 1); - } -while (*code == OP_ALT); /* Loop for each alternative */ -return TRUE; -} - - - -/************************************************* -* Check for asserted fixed first char * -*************************************************/ - -/* During compilation, the "first char" settings from forward assertions are -discarded, because they can cause conflicts with actual literals that follow. -However, if we end up without a first char setting for an unanchored pattern, -it is worth scanning the regex to see if there is an initial asserted first -char. If all branches start with the same asserted char, or with a bracket all -of whose alternatives start with the same asserted char (recurse ad lib), then -we return that char, otherwise -1. - -Arguments: - code points to start of expression (the bracket) - options pointer to the options (used to check casing changes) - inassert TRUE if in an assertion - -Returns: -1 or the fixed first char -*/ - -static int -find_firstassertedchar(const uschar *code, int *options, BOOL inassert) -{ -register int c = -1; -do { - int d; - const uschar *scode = - first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS); - register int op = *scode; - - if (op >= OP_BRA) op = OP_BRA; - - switch(op) - { - default: - return -1; - - case OP_BRA: - case OP_ASSERT: - case OP_ONCE: - case OP_COND: - if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0) - return -1; - if (c < 0) c = d; else if (c != d) return -1; - break; - - case OP_EXACT: /* Fall through */ - scode++; - - case OP_CHARS: /* Fall through */ - scode++; - - case OP_PLUS: - case OP_MINPLUS: - if (!inassert) return -1; - if (c < 0) - { - c = scode[1]; - if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS; - } - else if (c != scode[1]) return -1; - break; - } - - code += GET(code, 1); - } -while (*code == OP_ALT); -return c; -} - - - - -#ifdef SUPPORT_UTF8 -/************************************************* -* Validate a UTF-8 string * -*************************************************/ - -/* This function is called (optionally) at the start of compile or match, to -validate that a supposed UTF-8 string is actually valid. The early check means -that subsequent code can assume it is dealing with a valid string. The check -can be turned off for maximum performance, but then consequences of supplying -an invalid string are then undefined. - -Arguments: - string points to the string - length length of string, or -1 if the string is zero-terminated - -Returns: < 0 if the string is a valid UTF-8 string - >= 0 otherwise; the value is the offset of the bad byte -*/ - -static int -valid_utf8(const uschar *string, int length) -{ -register const uschar *p; - -if (length < 0) - { - for (p = string; *p != 0; p++); - length = p - string; - } - -for (p = string; length-- > 0; p++) - { - register int ab; - register int c = *p; - if (c < 128) continue; - if ((c & 0xc0) != 0xc0) return p - string; - ab = utf8_table4[c & 0x3f]; /* Number of additional bytes */ - if (length < ab) return p - string; - length -= ab; - - /* Check top bits in the second byte */ - if ((*(++p) & 0xc0) != 0x80) return p - string; - - /* Check for overlong sequences for each different length */ - switch (ab) - { - /* Check for xx00 000x */ - case 1: - if ((c & 0x3e) == 0) return p - string; - continue; /* We know there aren't any more bytes to check */ - - /* Check for 1110 0000, xx0x xxxx */ - case 2: - if (c == 0xe0 && (*p & 0x20) == 0) return p - string; - break; - - /* Check for 1111 0000, xx00 xxxx */ - case 3: - if (c == 0xf0 && (*p & 0x30) == 0) return p - string; - break; - - /* Check for 1111 1000, xx00 0xxx */ - case 4: - if (c == 0xf8 && (*p & 0x38) == 0) return p - string; - break; - - /* Check for leading 0xfe or 0xff, and then for 1111 1100, xx00 00xx */ - case 5: - if (c == 0xfe || c == 0xff || - (c == 0xfc && (*p & 0x3c) == 0)) return p - string; - break; - } - - /* Check for valid bytes after the 2nd, if any; all must start 10 */ - while (--ab > 0) - { - if ((*(++p) & 0xc0) != 0x80) return p - string; - } - } - -return -1; -} -#endif - - - -/************************************************* -* Compile a Regular Expression * -*************************************************/ - -/* This function takes a string and returns a pointer to a block of store -holding a compiled version of the expression. - -Arguments: - pattern the regular expression - options various option bits - errorptr pointer to pointer to error text - erroroffset ptr offset in pattern where error was detected - tables pointer to character tables or NULL - -Returns: pointer to compiled data block, or NULL on error, - with errorptr and erroroffset set -*/ - -pcre * -pcre_compile(const char *pattern, int options, const char **errorptr, - int *erroroffset, const unsigned char *tables) -{ -real_pcre *re; -int length = 1 + LINK_SIZE; /* For initial BRA plus length */ -int runlength; -int c, firstbyte, reqbyte; -int bracount = 0; -int branch_extra = 0; -int branch_newextra; -int item_count = -1; -int name_count = 0; -int max_name_size = 0; -#ifdef SUPPORT_UTF8 -int lastcharlength = 0; -BOOL utf8; -BOOL class_utf8; -#endif -BOOL inescq = FALSE; -unsigned int brastackptr = 0; -size_t size; -uschar *code; -const uschar *codestart; -const uschar *ptr; -compile_data compile_block; -int brastack[BRASTACK_SIZE]; -uschar bralenstack[BRASTACK_SIZE]; - -/* We can't pass back an error message if errorptr is NULL; I guess the best we -can do is just return NULL. */ - -if (errorptr == NULL) return NULL; -*errorptr = NULL; - -/* However, we can give a message for this error */ - -if (erroroffset == NULL) - { - *errorptr = ERR16; - return NULL; - } -*erroroffset = 0; - -/* Can't support UTF8 unless PCRE has been compiled to include the code. */ - -#ifdef SUPPORT_UTF8 -utf8 = (options & PCRE_UTF8) != 0; -if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 && - (*erroroffset = valid_utf8((uschar *)pattern, -1)) >= 0) - { - *errorptr = ERR44; - return NULL; - } -#else -if ((options & PCRE_UTF8) != 0) - { - *errorptr = ERR32; - return NULL; - } -#endif - -if ((options & ~PUBLIC_OPTIONS) != 0) - { - *errorptr = ERR17; - return NULL; - } - -/* Set up pointers to the individual character tables */ - -if (tables == NULL) tables = make_pcre_default_tables (); -compile_block.lcc = tables + lcc_offset; -compile_block.fcc = tables + fcc_offset; -compile_block.cbits = tables + cbits_offset; -compile_block.ctypes = tables + ctypes_offset; - -/* Maximum back reference and backref bitmap. This is updated for numeric -references during the first pass, but for named references during the actual -compile pass. The bitmap records up to 31 back references to help in deciding -whether (.*) can be treated as anchored or not. */ - -compile_block.top_backref = 0; -compile_block.backref_map = 0; - -/* Reflect pattern for debugging output */ - -DPRINTF(("------------------------------------------------------------------\n")); -DPRINTF(("%s\n", pattern)); - -/* The first thing to do is to make a pass over the pattern to compute the -amount of store required to hold the compiled code. This does not have to be -perfect as long as errors are overestimates. At the same time we can detect any -flag settings right at the start, and extract them. Make an attempt to correct -for any counted white space if an "extended" flag setting appears late in the -pattern. We can't be so clever for #-comments. */ - -ptr = (const uschar *)(pattern - 1); -while ((c = *(++ptr)) != 0) - { - int min = 0, max = 0; - int class_optcount; - int bracket_length; - int duplength; - - /* If we are inside a \Q...\E sequence, all chars are literal */ - - if (inescq) goto NORMAL_CHAR; - - /* Otherwise, first check for ignored whitespace and comments */ - - if ((options & PCRE_EXTENDED) != 0) - { - if ((compile_block.ctypes[c] & ctype_space) != 0) continue; - if (c == '#') - { - /* The space before the ; is to avoid a warning on a silly compiler - on the Macintosh. */ - while ((c = *(++ptr)) != 0 && c != NEWLINE) ; - if (c == 0) break; - continue; - } - } - - item_count++; /* Is zero for the first non-comment item */ - - switch(c) - { - /* A backslashed item may be an escaped "normal" character or a - character type. For a "normal" character, put the pointers and - character back so that tests for whitespace etc. in the input - are done correctly. */ - - case '\\': - { - const uschar *save_ptr = ptr; - c = check_escape(&ptr, errorptr, bracount, options, FALSE); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - if (c >= 0) - { - ptr = save_ptr; - c = '\\'; - goto NORMAL_CHAR; - } - } - - /* If \Q, enter "literal" mode */ - - if (-c == ESC_Q) - { - inescq = TRUE; - continue; - } - - /* Other escapes need one byte, and are of length one for repeats */ - - length++; -#ifdef SUPPORT_UTF8 - lastcharlength = 1; -#endif - - /* A back reference needs an additional 2 bytes, plus either one or 5 - bytes for a repeat. We also need to keep the value of the highest - back reference. */ - - if (c <= -ESC_REF) - { - int refnum = -c - ESC_REF; - compile_block.backref_map |= (refnum < 32)? (1 << refnum) : 1; - if (refnum > compile_block.top_backref) - compile_block.top_backref = refnum; - length += 2; /* For single back reference */ - if (ptr[1] == '{' && is_counted_repeat(ptr+2)) - { - ptr = read_repeat_counts(ptr+2, &min, &max, errorptr); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - if ((min == 0 && (max == 1 || max == -1)) || - (min == 1 && max == -1)) - length++; - else length += 5; - if (ptr[1] == '?') ptr++; - } - } - continue; - - case '^': /* Single-byte metacharacters */ - case '.': - case '$': - length++; -#ifdef SUPPORT_UTF8 - lastcharlength = 1; -#endif - continue; - - case '*': /* These repeats won't be after brackets; */ - case '+': /* those are handled separately */ - case '?': - length++; - goto POSESSIVE; /* A few lines below */ - - /* This covers the cases of braced repeats after a single char, metachar, - class, or back reference. */ - - case '{': - if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR; - ptr = read_repeat_counts(ptr+1, &min, &max, errorptr); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - - /* These special cases just insert one extra opcode */ - - if ((min == 0 && (max == 1 || max == -1)) || - (min == 1 && max == -1)) - length++; - - /* These cases might insert additional copies of a preceding character. */ - - else - { -#ifdef SUPPORT_UTF8 - /* In UTF-8 mode, we should find the length in lastcharlength */ - if (1 /* utf8 */) - { - if (min != 1) - { - length -= lastcharlength; /* Uncount the original char or metachar */ - if (min > 0) length += 3 + lastcharlength; - } - length += lastcharlength + ((max > 0)? 3 : 1); - } - else -#endif - - /* Not UTF-8 mode: all characters are one byte */ - { - if (min != 1) - { - length--; /* Uncount the original char or metachar */ - if (min > 0) length += 4; - } - - length += (max > 0)? 4 : 2; - } - } - - if (ptr[1] == '?') ptr++; /* Needs no extra length */ - - POSESSIVE: /* Test for possessive quantifier */ - if (ptr[1] == '+') - { - ptr++; - length += 2 + 2*LINK_SIZE; /* Allow for atomic brackets */ - } - continue; - - /* An alternation contains an offset to the next branch or ket. If any ims - options changed in the previous branch(es), and/or if we are in a - lookbehind assertion, extra space will be needed at the start of the - branch. This is handled by branch_extra. */ - - case '|': - length += 1 + LINK_SIZE + branch_extra; - continue; - - /* A character class uses 33 characters provided that all the character - values are less than 256. Otherwise, it uses a bit map for low valued - characters, and individual items for others. Don't worry about character - types that aren't allowed in classes - they'll get picked up during the - compile. A character class that contains only one single-byte character - uses 2 or 3 bytes, depending on whether it is negated or not. Notice this - where we can. (In UTF-8 mode we can do this only for chars < 128.) */ - - case '[': - class_optcount = 0; - -#ifdef SUPPORT_UTF8 - class_utf8 = FALSE; -#endif - - if (*(++ptr) == '^') ptr++; - - /* Written as a "do" so that an initial ']' is taken as data */ - - if (*ptr != 0) do - { - /* Inside \Q...\E everything is literal except \E */ - - if (inescq) - { - if (*ptr != '\\' || ptr[1] != 'E') goto NON_SPECIAL_CHARACTER; - inescq = FALSE; - ptr += 1; - continue; - } - - /* Outside \Q...\E, check for escapes */ - - if (*ptr == '\\') - { -#ifdef SUPPORT_UTF8 - int prevchar = ptr[-1]; -#endif - int ch = check_escape(&ptr, errorptr, bracount, options, TRUE); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - - /* \b is backspace inside a class */ - - if (-ch == ESC_b) ch = '\b'; - - /* \Q enters quoting mode */ - - if (-ch == ESC_Q) - { - inescq = TRUE; - continue; - } - - /* Handle escapes that turn into characters */ - - if (ch >= 0) - { -#ifdef SUPPORT_UTF8 - if (1 /* utf8 */) - { - if (ch > 127) class_optcount = 10; /* Ensure > 1 */ - if (ch > 255) - { - uschar buffer[6]; - if (!class_utf8) - { - class_utf8 = TRUE; - length += LINK_SIZE + 1 + 1; - } - length += 1 + ord2utf8(ch, buffer); - - /* If this wide character is preceded by '-', add an extra 2 to - the length in case the previous character was < 128, because in - this case the whole range will be put into the list. */ - - if (prevchar == '-') length += 2; - } - } -#endif - class_optcount++; /* for possible optimization */ - } - else class_optcount = 10; /* \d, \s etc; make sure > 1 */ - } - - /* Check the syntax for POSIX stuff. The bits we actually handle are - checked during the real compile phase. */ - - else if (*ptr == '[' && check_posix_syntax(ptr, &ptr, &compile_block)) - { - ptr++; - class_optcount = 10; /* Make sure > 1 */ - } - - /* Anything else just increments the possible optimization count. If - there are wide characters, we are going to have to use an XCLASS. */ - - else - { - NON_SPECIAL_CHARACTER: - class_optcount++; - -#ifdef SUPPORT_UTF8 - if (1 /* utf8 */) - { - int ch; - int extra = 0; - GETCHARLEN(ch, ptr, extra); - if (ch > 127) class_optcount = 10; /* No optimization possible */ - if (ch > 255) - { - if (!class_utf8) - { - class_utf8 = TRUE; - length += LINK_SIZE + 1 + 1; - } - length += 2 + extra; - - /* If this wide character is preceded by '-', add an extra 2 to - the length in case the previous character was < 128, because in - this case the whole range will be put into the list. */ - - if (ptr[-1] == '-') length += 2; - - /* Advance to the end of this character */ - - ptr += extra; - } - } -#endif - } - } - while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */ - - if (*ptr == 0) /* Missing terminating ']' */ - { - *errorptr = ERR6; - goto PCRE_ERROR_RETURN; - } - - /* We can optimize when there was only one optimizable character. Repeats - for positive and negated single one-byte chars are handled by the general - code. Here, we handle repeats for the class opcodes. */ - - if (class_optcount == 1) length += 3; else - { - length += 33; - - /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier, - we also need extra for wrapping the whole thing in a sub-pattern. */ - - if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2)) - { - ptr = read_repeat_counts(ptr+2, &min, &max, errorptr); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - if ((min == 0 && (max == 1 || max == -1)) || - (min == 1 && max == -1)) - length++; - else length += 5; - if (ptr[1] == '+') - { - ptr++; - length += 2 + 2*LINK_SIZE; - } - else if (ptr[1] == '?') ptr++; - } - } - continue; - - /* Brackets may be genuine groups or special things */ - - case '(': - branch_newextra = 0; - bracket_length = 1 + LINK_SIZE; - - /* Handle special forms of bracket, which all start (? */ - - if (ptr[1] == '?') - { - int set, unset; - int *optset; - - switch (c = ptr[2]) - { - /* Skip over comments entirely */ - case '#': - ptr += 3; - while (*ptr != 0 && *ptr != ')') ptr++; - if (*ptr == 0) - { - *errorptr = ERR18; - goto PCRE_ERROR_RETURN; - } - continue; - - /* Non-referencing groups and lookaheads just move the pointer on, and - then behave like a non-special bracket, except that they don't increment - the count of extracting brackets. Ditto for the "once only" bracket, - which is in Perl from version 5.005. */ - - case ':': - case '=': - case '!': - case '>': - ptr += 2; - break; - - /* (?R) specifies a recursive call to the regex, which is an extension - to provide the facility which can be obtained by (?p{perl-code}) in - Perl 5.6. In Perl 5.8 this has become (??{perl-code}). - - From PCRE 4.00, items such as (?3) specify subroutine-like "calls" to - the appropriate numbered brackets. This includes both recursive and - non-recursive calls. (?R) is now synonymous with (?0). */ - - case 'R': - ptr++; - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - ptr += 2; - if (c != 'R') - while ((digitab[*(++ptr)] & ctype_digit) != 0); - if (*ptr != ')') - { - *errorptr = ERR29; - goto PCRE_ERROR_RETURN; - } - length += 1 + LINK_SIZE; - - /* If this item is quantified, it will get wrapped inside brackets so - as to use the code for quantified brackets. We jump down and use the - code that handles this for real brackets. */ - - if (ptr[1] == '+' || ptr[1] == '*' || ptr[1] == '?' || ptr[1] == '{') - { - length += 2 + 2 * LINK_SIZE; /* to make bracketed */ - duplength = 5 + 3 * LINK_SIZE; - goto HANDLE_QUANTIFIED_BRACKETS; - } - continue; - - /* (?C) is an extension which provides "callout" - to provide a bit of - the functionality of the Perl (?{...}) feature. An optional number may - follow (default is zero). */ - - case 'C': - ptr += 2; - while ((digitab[*(++ptr)] & ctype_digit) != 0); - if (*ptr != ')') - { - *errorptr = ERR39; - goto PCRE_ERROR_RETURN; - } - length += 2; - continue; - - /* Named subpatterns are an extension copied from Python */ - - case 'P': - ptr += 3; - if (*ptr == '<') - { - const uschar *p; /* Don't amalgamate; some compilers */ - p = ++ptr; /* grumble at autoincrement in declaration */ - while ((compile_block.ctypes[*ptr] & ctype_word) != 0) ptr++; - if (*ptr != '>') - { - *errorptr = ERR42; - goto PCRE_ERROR_RETURN; - } - name_count++; - if (ptr - p > max_name_size) max_name_size = (ptr - p); - break; - } - - if (*ptr == '=' || *ptr == '>') - { - while ((compile_block.ctypes[*(++ptr)] & ctype_word) != 0); - if (*ptr != ')') - { - *errorptr = ERR42; - goto PCRE_ERROR_RETURN; - } - break; - } - - /* Unknown character after (?P */ - - *errorptr = ERR41; - goto PCRE_ERROR_RETURN; - - /* Lookbehinds are in Perl from version 5.005 */ - - case '<': - ptr += 3; - if (*ptr == '=' || *ptr == '!') - { - branch_newextra = 1 + LINK_SIZE; - length += 1 + LINK_SIZE; /* For the first branch */ - break; - } - *errorptr = ERR24; - goto PCRE_ERROR_RETURN; - - /* Conditionals are in Perl from version 5.005. The bracket must either - be followed by a number (for bracket reference) or by an assertion - group, or (a PCRE extension) by 'R' for a recursion test. */ - - case '(': - if (ptr[3] == 'R' && ptr[4] == ')') - { - ptr += 4; - length += 3; - } - else if ((digitab[ptr[3]] & ctype_digit) != 0) - { - ptr += 4; - length += 3; - while ((digitab[*ptr] & ctype_digit) != 0) ptr++; - if (*ptr != ')') - { - *errorptr = ERR26; - goto PCRE_ERROR_RETURN; - } - } - else /* An assertion must follow */ - { - ptr++; /* Can treat like ':' as far as spacing is concerned */ - if (ptr[2] != '?' || - (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') ) - { - ptr += 2; /* To get right offset in message */ - *errorptr = ERR28; - goto PCRE_ERROR_RETURN; - } - } - break; - - /* Else loop checking valid options until ) is met. Anything else is an - error. If we are without any brackets, i.e. at top level, the settings - act as if specified in the options, so massage the options immediately. - This is for backward compatibility with Perl 5.004. */ - - default: - set = unset = 0; - optset = &set; - ptr += 2; - - for (;; ptr++) - { - c = *ptr; - switch (c) - { - case 'i': - *optset |= PCRE_CASELESS; - continue; - - case 'm': - *optset |= PCRE_MULTILINE; - continue; - - case 's': - *optset |= PCRE_DOTALL; - continue; - - case 'x': - *optset |= PCRE_EXTENDED; - continue; - - case 'X': - *optset |= PCRE_EXTRA; - continue; - - case 'U': - *optset |= PCRE_UNGREEDY; - continue; - - case '-': - optset = &unset; - continue; - - /* A termination by ')' indicates an options-setting-only item; if - this is at the very start of the pattern (indicated by item_count - being zero), we use it to set the global options. This is helpful - when analyzing the pattern for first characters, etc. Otherwise - nothing is done here and it is handled during the compiling - process. - - [Historical note: Up to Perl 5.8, options settings at top level - were always global settings, wherever they appeared in the pattern. - That is, they were equivalent to an external setting. From 5.8 - onwards, they apply only to what follows (which is what you might - expect).] */ - - case ')': - if (item_count == 0) - { - options = (options | set) & (~unset); - set = unset = 0; /* To save length */ - item_count--; /* To allow for several */ - } - - /* Fall through */ - - /* A termination by ':' indicates the start of a nested group with - the given options set. This is again handled at compile time, but - we must allow for compiled space if any of the ims options are - set. We also have to allow for resetting space at the end of - the group, which is why 4 is added to the length and not just 2. - If there are several changes of options within the same group, this - will lead to an over-estimate on the length, but this shouldn't - matter very much. We also have to allow for resetting options at - the start of any alternations, which we do by setting - branch_newextra to 2. Finally, we record whether the case-dependent - flag ever changes within the regex. This is used by the "required - character" code. */ - - case ':': - if (((set|unset) & PCRE_IMS) != 0) - { - length += 4; - branch_newextra = 2; - if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED; - } - goto END_OPTIONS; - - /* Unrecognized option character */ - - default: - *errorptr = ERR12; - goto PCRE_ERROR_RETURN; - } - } - - /* If we hit a closing bracket, that's it - this is a freestanding - option-setting. We need to ensure that branch_extra is updated if - necessary. The only values branch_newextra can have here are 0 or 2. - If the value is 2, then branch_extra must either be 2 or 5, depending - on whether this is a lookbehind group or not. */ - - END_OPTIONS: - if (c == ')') - { - if (branch_newextra == 2 && - (branch_extra == 0 || branch_extra == 1+LINK_SIZE)) - branch_extra += branch_newextra; - continue; - } - - /* If options were terminated by ':' control comes here. Fall through - to handle the group below. */ - } - } - - /* Extracting brackets must be counted so we can process escapes in a - Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to - need an additional 3 bytes of store per extracting bracket. However, if - PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, so we - must leave the count alone (it will aways be zero). */ - - else if ((options & PCRE_NO_AUTO_CAPTURE) == 0) - { - bracount++; - if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3; - } - - /* Save length for computing whole length at end if there's a repeat that - requires duplication of the group. Also save the current value of - branch_extra, and start the new group with the new value. If non-zero, this - will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */ - - if (brastackptr >= sizeof(brastack)/sizeof(int)) - { - *errorptr = ERR19; - goto PCRE_ERROR_RETURN; - } - - bralenstack[brastackptr] = branch_extra; - branch_extra = branch_newextra; - - brastack[brastackptr++] = length; - length += bracket_length; - continue; - - /* Handle ket. Look for subsequent max/min; for certain sets of values we - have to replicate this bracket up to that many times. If brastackptr is - 0 this is an unmatched bracket which will generate an error, but take care - not to try to access brastack[-1] when computing the length and restoring - the branch_extra value. */ - - case ')': - length += 1 + LINK_SIZE; - if (brastackptr > 0) - { - duplength = length - brastack[--brastackptr]; - branch_extra = bralenstack[brastackptr]; - } - else duplength = 0; - - /* The following code is also used when a recursion such as (?3) is - followed by a quantifier, because in that case, it has to be wrapped inside - brackets so that the quantifier works. The value of duplength must be - set before arrival. */ - - HANDLE_QUANTIFIED_BRACKETS: - - /* Leave ptr at the final char; for read_repeat_counts this happens - automatically; for the others we need an increment. */ - - if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2)) - { - ptr = read_repeat_counts(ptr+2, &min, &max, errorptr); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - } - else if (c == '*') { min = 0; max = -1; ptr++; } - else if (c == '+') { min = 1; max = -1; ptr++; } - else if (c == '?') { min = 0; max = 1; ptr++; } - else { min = 1; max = 1; } - - /* If the minimum is zero, we have to allow for an OP_BRAZERO before the - group, and if the maximum is greater than zero, we have to replicate - maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting - bracket set. */ - - if (min == 0) - { - length++; - if (max > 0) length += (max - 1) * (duplength + 3 + 2*LINK_SIZE); - } - - /* When the minimum is greater than zero, we have to replicate up to - minval-1 times, with no additions required in the copies. Then, if there - is a limited maximum we have to replicate up to maxval-1 times allowing - for a BRAZERO item before each optional copy and nesting brackets for all - but one of the optional copies. */ - - else - { - length += (min - 1) * duplength; - if (max > min) /* Need this test as max=-1 means no limit */ - length += (max - min) * (duplength + 3 + 2*LINK_SIZE) - - (2 + 2*LINK_SIZE); - } - - /* Allow space for once brackets for "possessive quantifier" */ - - if (ptr[1] == '+') - { - ptr++; - length += 2 + 2*LINK_SIZE; - } - continue; - - /* Non-special character. For a run of such characters the length required - is the number of characters + 2, except that the maximum run length is - MAXLIT. We won't get a skipped space or a non-data escape or the start of a - # comment as the first character, so the length can't be zero. */ - - NORMAL_CHAR: - default: - length += 2; - runlength = 0; - do - { -#ifdef SUPPORT_UTF8 - lastcharlength = 1; /* Need length of last char for UTF-8 repeats */ -#endif - - /* If in a \Q...\E sequence, check for end; otherwise it's a literal */ - if (inescq) - { - if (c == '\\' && ptr[1] == 'E') - { - inescq = FALSE; - ptr++; - } - else runlength++; - continue; - } - - /* Skip whitespace and comments for /x */ - - if ((options & PCRE_EXTENDED) != 0) - { - if ((compile_block.ctypes[c] & ctype_space) != 0) continue; - if (c == '#') - { - /* The space before the ; is to avoid a warning on a silly compiler - on the Macintosh. */ - while ((c = *(++ptr)) != 0 && c != NEWLINE) ; - continue; - } - } - - /* Backslash may introduce a data char or a metacharacter; stop the - string before the latter. */ - - if (c == '\\') - { - const uschar *saveptr = ptr; - c = check_escape(&ptr, errorptr, bracount, options, FALSE); - if (*errorptr != NULL) goto PCRE_ERROR_RETURN; - if (c < 0) { ptr = saveptr; break; } - - /* In UTF-8 mode, add on the number of additional bytes needed to - encode this character, and save the total length in case this is a - final char that is repeated. */ - -#ifdef SUPPORT_UTF8 - if (utf8 && c > 127) - { - int i; - for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++) - if (c <= utf8_table1[i]) break; - runlength += i; - lastcharlength += i; - } -#endif - } - - /* Ordinary character or single-char escape */ - - runlength++; - } - - /* This "while" is the end of the "do" above. */ - - while (runlength < MAXLIT && - (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0); - - /* If we hit a meta-character, back off to point to it */ - - if (runlength < MAXLIT) ptr--; - - /* If the last char in the string is a UTF-8 multibyte character, we must - set lastcharlength correctly. If it was specified as an escape, this will - already have been done above. However, we also have to support in-line - UTF-8 characters, so check backwards from where we are. */ - -#ifdef SUPPORT_UTF8 - if (1 /* utf8 */ && ptr != (uschar *)pattern) - { - const uschar *lastptr = ptr - 1; - if ((*lastptr & 0x80) != 0) - { - while((*lastptr & 0xc0) == 0x80) lastptr--; - lastcharlength = ptr - lastptr; - } - } -#endif - - length += runlength; - continue; - } - } - -length += 2 + LINK_SIZE; /* For final KET and END */ - -if (length > MAX_PATTERN_SIZE) - { - *errorptr = ERR20; - return NULL; - } - -/* Compute the size of data block needed and get it, either from malloc or -externally provided function. */ - -size = length + sizeof(real_pcre) + name_count * (max_name_size + 3); -re = (real_pcre *)(pcre_malloc)(size); - -if (re == NULL) - { - *errorptr = ERR21; - return NULL; - } - -/* Put in the magic number, and save the size, options, and table pointer */ - -re->magic_number = MAGIC_NUMBER; -re->size = size; -re->options = options; -re->tables = tables; -re->name_entry_size = max_name_size + 3; -re->name_count = name_count; - -/* The starting points of the name/number translation table and of the code are -passed around in the compile data block. */ - -compile_block.names_found = 0; -compile_block.name_entry_size = max_name_size + 3; -compile_block.name_table = (uschar *)re + sizeof(real_pcre); -codestart = compile_block.name_table + re->name_entry_size * re->name_count; -compile_block.start_code = codestart; -compile_block.req_varyopt = 0; - -/* Set up a starting, non-extracting bracket, then compile the expression. On -error, *errorptr will be set non-NULL, so we don't need to look at the result -of the function here. */ - -ptr = (const uschar *)pattern; -code = (uschar *)codestart; -*code = OP_BRA; -bracount = 0; -(void)compile_regex(options, options & PCRE_IMS, &bracount, &code, &ptr, - errorptr, FALSE, 0, &firstbyte, &reqbyte, NULL, &compile_block); -re->top_bracket = bracount; -re->top_backref = compile_block.top_backref; - -/* If not reached end of pattern on success, there's an excess bracket. */ - -if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22; - -/* Fill in the terminating state and check for disastrous overflow, but -if debugging, leave the test till after things are printed out. */ - -*code++ = OP_END; - -#ifndef DEBUG -if (code - codestart > length) *errorptr = ERR23; -#endif - -/* Give an error if there's back reference to a non-existent capturing -subpattern. */ - -if (re->top_backref > re->top_bracket) *errorptr = ERR15; - -/* Failed to compile, or error while post-processing */ - -if (*errorptr != NULL) - { - (pcre_free)(re); - PCRE_ERROR_RETURN: - *erroroffset = ptr - (const uschar *)pattern; - return NULL; - } - -/* If the anchored option was not passed, set the flag if we can determine that -the pattern is anchored by virtue of ^ characters or \A or anything else (such -as starting with .* when DOTALL is set). - -Otherwise, if we know what the first character has to be, save it, because that -speeds up unanchored matches no end. If not, see if we can set the -PCRE_STARTLINE flag. This is helpful for multiline matches when all branches -start with ^. and also when all branches start with .* for non-DOTALL matches. -*/ - -if ((options & PCRE_ANCHORED) == 0) - { - int temp_options = options; - if (is_anchored(codestart, &temp_options, 0, compile_block.backref_map)) - re->options |= PCRE_ANCHORED; - else - { - if (firstbyte < 0) - firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE); - if (firstbyte >= 0) /* Remove caseless flag for non-caseable chars */ - { - int ch = firstbyte & 255; - re->first_byte = ((firstbyte & REQ_CASELESS) != 0 && - compile_block.fcc[ch] == ch)? ch : firstbyte; - re->options |= PCRE_FIRSTSET; - } - else if (is_startline(codestart, 0, compile_block.backref_map)) - re->options |= PCRE_STARTLINE; - } - } - -/* For an anchored pattern, we use the "required byte" only if it follows a -variable length item in the regex. Remove the caseless flag for non-caseable -chars. */ - -if (reqbyte >= 0 && - ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0)) - { - int ch = reqbyte & 255; - re->req_byte = ((reqbyte & REQ_CASELESS) != 0 && - compile_block.fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte; - re->options |= PCRE_REQCHSET; - } - -/* Print out the compiled data for debugging */ - -#ifdef DEBUG - -printf("Length = %d top_bracket = %d top_backref = %d\n", - length, re->top_bracket, re->top_backref); - -if (re->options != 0) - { - printf("%s%s%s%s%s%s%s%s%s\n", - ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "", - ((re->options & PCRE_CASELESS) != 0)? "caseless " : "", - ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "", - ((re->options & PCRE_EXTENDED) != 0)? "extended " : "", - ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "", - ((re->options & PCRE_DOTALL) != 0)? "dotall " : "", - ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "", - ((re->options & PCRE_EXTRA) != 0)? "extra " : "", - ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : ""); - } - -if ((re->options & PCRE_FIRSTSET) != 0) - { - int ch = re->first_byte & 255; - const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)? "" : " (caseless)"; - if (g_unichar_isprint(ch)) printf("First char = %c%s\n", ch, caseless); - else printf("First char = \\x%02x%s\n", ch, caseless); - } - -if ((re->options & PCRE_REQCHSET) != 0) - { - int ch = re->req_byte & 255; - const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)? "" : " (caseless)"; - if (g_unichar_isprint(ch)) printf("Req char = %c%s\n", ch, caseless); - else printf("Req char = \\x%02x%s\n", ch, caseless); - } - -print_internals(re, stdout); - -/* This check is done here in the debugging case so that the code that -was compiled can be seen. */ - -if (code - codestart > length) - { - *errorptr = ERR23; - (pcre_free)(re); - *erroroffset = ptr - (uschar *)pattern; - return NULL; - } -#endif - -return (pcre *)re; -} - - - -/************************************************* -* Match a back-reference * -*************************************************/ - -/* If a back reference hasn't been set, the length that is passed is greater -than the number of characters left in the string, so the match fails. - -Arguments: - offset index into the offset vector - eptr points into the subject - length length to be matched - md points to match data block - ims the ims flags - -Returns: TRUE if matched -*/ - -static BOOL -match_ref(int offset, register const uschar *eptr, int length, match_data *md, - unsigned long int ims) -{ -const uschar *p = md->start_subject + md->offset_vector[offset]; - -#ifdef DEBUG -if (eptr >= md->end_subject) - printf("matching subject "); -else - { - printf("matching subject "); - pchars(eptr, length, TRUE, md); - } -printf(" against backref "); -pchars(p, length, FALSE, md); -printf("\n"); -#endif - -/* Always fail if not enough characters left */ - -if (length > md->end_subject - eptr) return FALSE; - -/* Separate the caselesss case for speed */ - -if ((ims & PCRE_CASELESS) != 0) - { - while (length-- > 0) - if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE; - } -else - { while (length-- > 0) if (*p++ != *eptr++) return FALSE; } - -return TRUE; -} - - -#ifdef SUPPORT_UTF8 -/************************************************* -* Match character against an XCLASS * -*************************************************/ - -/* This function is called from within the XCLASS code below, to match a -character against an extended class which might match values > 255. - -Arguments: - c the character - data points to the flag byte of the XCLASS data - -Returns: TRUE if character matches, else FALSE -*/ - -static BOOL -match_xclass(int c, const uschar *data) -{ -int t; -BOOL negated = (*data & XCL_NOT) != 0; - -/* Character values < 256 are matched against a bitmap, if one is present. If -not, we still carry on, because there may be ranges that start below 256 in the -additional data. */ - -if (c < 256) - { - if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0) - return !negated; /* char found */ - } - -/* Now match against the list of large chars or ranges that end with a large -char. First skip the bit map if present. */ - -if ((*data++ & XCL_MAP) != 0) data += 32; - -while ((t = *data++) != XCL_END) - { - int x, y; - GETCHARINC(x, data); - if (t == XCL_SINGLE) - { - if (c == x) return !negated; - } - else - { - GETCHARINC(y, data); - if (c >= x && c <= y) return !negated; - } - } - -return negated; /* char was not found */ -} -#endif - - -/*************************************************************************** -**************************************************************************** - RECURSION IN THE match() FUNCTION - -The match() function is highly recursive. Some regular expressions can cause -it to recurse thousands of times. I was writing for Unix, so I just let it -call itself recursively. This uses the stack for saving everything that has -to be saved for a recursive call. On Unix, the stack can be large, and this -works fine. - -It turns out that on non-Unix systems there are problems with programs that -use a lot of stack. (This despite the fact that every last chip has oodles -of memory these days, and techniques for extending the stack have been known -for decades.) So.... - -There is a fudge, triggered by defining NO_RECURSE, which avoids recursive -calls by keeping local variables that need to be preserved in blocks of memory -obtained from malloc instead instead of on the stack. Macros are used to -achieve this so that the actual code doesn't look very different to what it -always used to. -**************************************************************************** -***************************************************************************/ - - -/* These versions of the macros use the stack, as normal */ - -#ifndef NO_RECURSE -#define REGISTER register -#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg) rx = match(ra,rb,rc,rd,re,rf,rg) -#define RRETURN(ra) return ra -#else - - -/* These versions of the macros manage a private stack on the heap. Note -that the rd argument of RMATCH isn't actually used. It's the md argument of -match(), which never actually changes. */ - -#define REGISTER - -#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg)\ - {\ - heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\ - if (setjmp(frame->Xwhere) == 0)\ - {\ - newframe->Xeptr = ra;\ - newframe->Xecode = rb;\ - newframe->Xoffset_top = rc;\ - newframe->Xims = re;\ - newframe->Xeptrb = rf;\ - newframe->Xflags = rg;\ - newframe->Xprevframe = frame;\ - frame = newframe;\ - DPRINTF(("restarting from line %d\n", __LINE__));\ - goto HEAP_RECURSE;\ - }\ - else\ - {\ - DPRINTF(("longjumped back to line %d\n", __LINE__));\ - frame = md->thisframe;\ - rx = frame->Xresult;\ - }\ - } - -#define RRETURN(ra)\ - {\ - heapframe *newframe = frame;\ - frame = newframe->Xprevframe;\ - (pcre_stack_free)(newframe);\ - if (frame != NULL)\ - {\ - frame->Xresult = ra;\ - md->thisframe = frame;\ - longjmp(frame->Xwhere, 1);\ - }\ - return ra;\ - } - - -/* Structure for remembering the local variables in a private frame */ - -typedef struct heapframe { - struct heapframe *Xprevframe; - - /* Function arguments that may change */ - - const uschar *Xeptr; - const uschar *Xecode; - int Xoffset_top; - long int Xims; - eptrblock *Xeptrb; - int Xflags; - - /* Function local variables */ - - const uschar *Xcallpat; - const uschar *Xcharptr; - const uschar *Xdata; - const uschar *Xlastptr; - const uschar *Xnext; - const uschar *Xpp; - const uschar *Xprev; - const uschar *Xsaved_eptr; - - recursion_info Xnew_recursive; - - BOOL Xcur_is_word; - BOOL Xcondition; - BOOL Xminimize; - BOOL Xprev_is_word; - - unsigned long int Xoriginal_ims; - - int Xctype; - int Xfc; - int Xfi; - int Xlength; - int Xmax; - int Xmin; - int Xnumber; - int Xoffset; - int Xop; - int Xsave_capture_last; - int Xsave_offset1, Xsave_offset2, Xsave_offset3; - int Xstacksave[REC_STACK_SAVE_MAX]; - - eptrblock Xnewptrb; - - /* Place to pass back result, and where to jump back to */ - - int Xresult; - jmp_buf Xwhere; - -} heapframe; - -#endif - - -/*************************************************************************** -***************************************************************************/ - - - -/************************************************* -* Match from current position * -*************************************************/ - -/* On entry ecode points to the first opcode, and eptr to the first character -in the subject string, while eptrb holds the value of eptr at the start of the -last bracketed group - used for breaking infinite loops matching zero-length -strings. This function is called recursively in many circumstances. Whenever it -returns a negative (error) response, the outer incarnation must also return the -same response. - -Performance note: It might be tempting to extract commonly used fields from the -md structure (e.g. utf8, end_subject) into individual variables to improve -performance. Tests using gcc on a SPARC disproved this; in the first case, it -made performance worse. - -Arguments: - eptr pointer in subject - ecode position in code - offset_top current top pointer - md pointer to "static" info for the match - ims current /i, /m, and /s options - eptrb pointer to chain of blocks containing eptr at start of - brackets - for testing for empty matches - flags can contain - match_condassert - this is an assertion condition - match_isgroup - this is the start of a bracketed group - -Returns: MATCH_MATCH if matched ) these values are >= 0 - MATCH_NOMATCH if failed to match ) - a negative PCRE_ERROR_xxx value if aborted by an error condition - (e.g. stopped by recursion limit) -*/ - -static int -match(REGISTER const uschar *eptr, REGISTER const uschar *ecode, - int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb, - int flags) -{ -/* These variables do not need to be preserved over recursion in this function, -so they can be ordinary variables in all cases. Mark them with "register" -because they are used a lot in loops. */ - -register int rrc; /* Returns from recursive calls */ -register int i; /* Used for loops not involving calls to RMATCH() */ -register int c; /* Character values not kept over RMATCH() calls */ - -/* When recursion is not being used, all "local" variables that have to be -preserved over calls to RMATCH() are part of a "frame" which is obtained from -heap storage. Set up the top-level frame here; others are obtained from the -heap whenever RMATCH() does a "recursion". See the macro definitions above. */ - -#ifdef NO_RECURSE -heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe)); -frame->Xprevframe = NULL; /* Marks the top level */ - -/* Copy in the original argument variables */ - -frame->Xeptr = eptr; -frame->Xecode = ecode; -frame->Xoffset_top = offset_top; -frame->Xims = ims; -frame->Xeptrb = eptrb; -frame->Xflags = flags; - -/* This is where control jumps back to to effect "recursion" */ - -HEAP_RECURSE: - -/* Macros make the argument variables come from the current frame */ - -#define eptr frame->Xeptr -#define ecode frame->Xecode -#define offset_top frame->Xoffset_top -#define ims frame->Xims -#define eptrb frame->Xeptrb -#define flags frame->Xflags - -/* Ditto for the local variables */ - -#define callpat frame->Xcallpat -#define charptr frame->Xcharptr -#define data frame->Xdata -#define lastptr frame->Xlastptr -#define next frame->Xnext -#define pp frame->Xpp -#define prev frame->Xprev -#define saved_eptr frame->Xsaved_eptr - -#define new_recursive frame->Xnew_recursive - -#define cur_is_word frame->Xcur_is_word -#define condition frame->Xcondition -#define minimize frame->Xminimize -#define prev_is_word frame->Xprev_is_word - -#define original_ims frame->Xoriginal_ims - -#define ctype frame->Xctype -#define fc frame->Xfc -#define fi frame->Xfi -#define length frame->Xlength -#define max frame->Xmax -#define min frame->Xmin -#define number frame->Xnumber -#define offset frame->Xoffset -#define op frame->Xop -#define save_capture_last frame->Xsave_capture_last -#define save_offset1 frame->Xsave_offset1 -#define save_offset2 frame->Xsave_offset2 -#define save_offset3 frame->Xsave_offset3 -#define stacksave frame->Xstacksave - -#define newptrb frame->Xnewptrb - -/* When recursion is being used, local variables are allocated on the stack and -get preserved during recursion in the normal way. In this environment, fi and -i, and fc and c, can be the same variables. */ - -#else -#define fi i -#define fc c - -const uschar *callpat; /* Many of these variables are used ony */ -const uschar *charptr; /* small blocks of the code. My normal */ -const uschar *data; /* style of coding would have declared */ -const uschar *lastptr; /* them within each of those blocks. */ -const uschar *next; /* However, in order to accommodate the */ -const uschar *pp; /* version of this code that uses an */ -const uschar *prev; /* external "stack" implemented on the */ -const uschar *saved_eptr; /* heap, it is easier to declare them */ - /* all here, so the declarations can */ -recursion_info new_recursive; /* be cut out in a block. The only */ - /* declarations within blocks below are */ -BOOL cur_is_word; /* for variables that do not have to */ -BOOL condition; /* be preserved over a recursive call */ -BOOL minimize; /* to RMATCH(). */ -BOOL prev_is_word; - -unsigned long int original_ims; - -int ctype; -int length; -int max; -int min; -int number; -int offset; -int op; -int save_capture_last; -int save_offset1, save_offset2, save_offset3; -int stacksave[REC_STACK_SAVE_MAX]; - -eptrblock newptrb; -#endif - - -/* OK, now we can get on with the real code of the function. Recursion is -specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined, -these just turn into a recursive call to match() and a "return", respectively. -However, RMATCH isn't like a function call because it's quite a complicated -macro. It has to be used in one particular way. This shouldn't, however, impact -performance when true recursion is being used. */ - -if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT); - -original_ims = ims; /* Save for resetting on ')' */ - -/* At the start of a bracketed group, add the current subject pointer to the -stack of such pointers, to be re-instated at the end of the group when we hit -the closing ket. When match() is called in other circumstances, we don't add to -this stack. */ - -if ((flags & match_isgroup) != 0) - { - newptrb.epb_prev = eptrb; - newptrb.epb_saved_eptr = eptr; - eptrb = &newptrb; - } - -/* Now start processing the operations. */ - -for (;;) - { - op = *ecode; - minimize = FALSE; - - /* Opening capturing bracket. If there is space in the offset vector, save - the current subject position in the working slot at the top of the vector. We - mustn't change the current values of the data slot, because they may be set - from a previous iteration of this group, and be referred to by a reference - inside the group. - - If the bracket fails to match, we need to restore this value and also the - values of the final offsets, in case they were set by a previous iteration of - the same bracket. - - If there isn't enough space in the offset vector, treat this as if it were a - non-capturing bracket. Don't worry about setting the flag for the error case - here; that is handled in the code for KET. */ - - if (op > OP_BRA) - { - number = op - OP_BRA; - - /* For extended extraction brackets (large number), we have to fish out the - number from a dummy opcode at the start. */ - - if (number > EXTRACT_BASIC_MAX) - number = GET2(ecode, 2+LINK_SIZE); - offset = number << 1; - -#ifdef DEBUG - printf("start bracket %d subject=", number); - pchars(eptr, 16, TRUE, md); - printf("\n"); -#endif - - if (offset < md->offset_max) - { - save_offset1 = md->offset_vector[offset]; - save_offset2 = md->offset_vector[offset+1]; - save_offset3 = md->offset_vector[md->offset_end - number]; - save_capture_last = md->capture_last; - - DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3)); - md->offset_vector[md->offset_end - number] = eptr - md->start_subject; - - do - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, - match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - md->capture_last = save_capture_last; - ecode += GET(ecode, 1); - } - while (*ecode == OP_ALT); - - DPRINTF(("bracket %d failed\n", number)); - - md->offset_vector[offset] = save_offset1; - md->offset_vector[offset+1] = save_offset2; - md->offset_vector[md->offset_end - number] = save_offset3; - - RRETURN(MATCH_NOMATCH); - } - - /* Insufficient room for saving captured contents */ - - else op = OP_BRA; - } - - /* Other types of node can be handled by a switch */ - - switch(op) - { - case OP_BRA: /* Non-capturing bracket: optimized */ - DPRINTF(("start bracket 0\n")); - do - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, - match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - ecode += GET(ecode, 1); - } - while (*ecode == OP_ALT); - DPRINTF(("bracket 0 failed\n")); - RRETURN(MATCH_NOMATCH); - - /* Conditional group: compilation checked that there are no more than - two branches. If the condition is false, skipping the first branch takes us - past the end if there is only one branch, but that's OK because that is - exactly what going to the ket would do. */ - - case OP_COND: - if (ecode[LINK_SIZE+1] == OP_CREF) /* Condition extract or recurse test */ - { - offset = GET2(ecode, LINK_SIZE+2) << 1; /* Doubled ref number */ - condition = (offset == CREF_RECURSE * 2)? - (md->recursive != NULL) : - (offset < offset_top && md->offset_vector[offset] >= 0); - RMATCH(rrc, eptr, ecode + (condition? - (LINK_SIZE + 4) : (LINK_SIZE + 1 + GET(ecode, 1))), - offset_top, md, ims, eptrb, match_isgroup); - RRETURN(rrc); - } - - /* The condition is an assertion. Call match() to evaluate it - setting - the final argument TRUE causes it to stop at the end of an assertion. */ - - else - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, - match_condassert | match_isgroup); - if (rrc == MATCH_MATCH) - { - ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE+2); - while (*ecode == OP_ALT) ecode += GET(ecode, 1); - } - else if (rrc != MATCH_NOMATCH) - { - RRETURN(rrc); /* Need braces because of following else */ - } - else ecode += GET(ecode, 1); - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, - match_isgroup); - RRETURN(rrc); - } - /* Control never reaches here */ - - /* Skip over conditional reference or large extraction number data if - encountered. */ - - case OP_CREF: - case OP_BRANUMBER: - ecode += 3; - break; - - /* End of the pattern. If we are in a recursion, we should restore the - offsets appropriately and continue from after the call. */ - - case OP_END: - if (md->recursive != NULL && md->recursive->group_num == 0) - { - recursion_info *rec = md->recursive; - DPRINTF(("Hit the end in a (?0) recursion\n")); - md->recursive = rec->prevrec; - memmove(md->offset_vector, rec->offset_save, - rec->saved_max * sizeof(int)); - md->start_match = rec->save_start; - ims = original_ims; - ecode = rec->after_call; - break; - } - - /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty - string - backtracking will then try other alternatives, if any. */ - - if (md->notempty && eptr == md->start_match) RRETURN(MATCH_NOMATCH); - md->end_match_ptr = eptr; /* Record where we ended */ - md->end_offset_top = offset_top; /* and how many extracts were taken */ - RRETURN(MATCH_MATCH); - - /* Change option settings */ - - case OP_OPT: - ims = ecode[1]; - ecode += 2; - DPRINTF(("ims set to %02lx\n", ims)); - break; - - /* Assertion brackets. Check the alternative branches in turn - the - matching won't pass the KET for an assertion. If any one branch matches, - the assertion is true. Lookbehind assertions have an OP_REVERSE item at the - start of each branch to move the current point backwards, so the code at - this level is identical to the lookahead case. */ - - case OP_ASSERT: - case OP_ASSERTBACK: - do - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, - match_isgroup); - if (rrc == MATCH_MATCH) break; - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - ecode += GET(ecode, 1); - } - while (*ecode == OP_ALT); - if (*ecode == OP_KET) RRETURN(MATCH_NOMATCH); - - /* If checking an assertion for a condition, return MATCH_MATCH. */ - - if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH); - - /* Continue from after the assertion, updating the offsets high water - mark, since extracts may have been taken during the assertion. */ - - do ecode += GET(ecode,1); while (*ecode == OP_ALT); - ecode += 1 + LINK_SIZE; - offset_top = md->end_offset_top; - continue; - - /* Negative assertion: all branches must fail to match */ - - case OP_ASSERT_NOT: - case OP_ASSERTBACK_NOT: - do - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, - match_isgroup); - if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - ecode += GET(ecode,1); - } - while (*ecode == OP_ALT); - - if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH); - - ecode += 1 + LINK_SIZE; - continue; - - /* Move the subject pointer back. This occurs only at the start of - each branch of a lookbehind assertion. If we are too close to the start to - move back, this match function fails. When working with UTF-8 we move - back a number of characters, not bytes. */ - - case OP_REVERSE: -#ifdef SUPPORT_UTF8 - if (1 /* md->utf8 */) - { - c = GET(ecode,1); - for (i = 0; i < c; i++) - { - eptr--; - if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH); - BACKCHAR(eptr) - } - } - else -#endif - - /* No UTF-8 support, or not in UTF-8 mode: count is byte count */ - - { - eptr -= GET(ecode,1); - if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH); - } - - /* Skip to next op code */ - - ecode += 1 + LINK_SIZE; - break; - - /* The callout item calls an external function, if one is provided, passing - details of the match so far. This is mainly for debugging, though the - function is able to force a failure. */ - - case OP_CALLOUT: - if (pcre_callout != NULL) - { - pcre_callout_block cb; - cb.version = 0; /* Version 0 of the callout block */ - cb.callout_number = ecode[1]; - cb.offset_vector = md->offset_vector; - cb.subject = (const char *)md->start_subject; - cb.subject_length = md->end_subject - md->start_subject; - cb.start_match = md->start_match - md->start_subject; - cb.current_position = eptr - md->start_subject; - cb.capture_top = offset_top/2; - cb.capture_last = md->capture_last; - cb.callout_data = md->callout_data; - if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH); - if (rrc < 0) RRETURN(rrc); - } - ecode += 2; - break; - - /* Recursion either matches the current regex, or some subexpression. The - offset data is the offset to the starting bracket from the start of the - whole pattern. (This is so that it works from duplicated subpatterns.) - - If there are any capturing brackets started but not finished, we have to - save their starting points and reinstate them after the recursion. However, - we don't know how many such there are (offset_top records the completed - total) so we just have to save all the potential data. There may be up to - 65535 such values, which is too large to put on the stack, but using malloc - for small numbers seems expensive. As a compromise, the stack is used when - there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc - is used. A problem is what to do if the malloc fails ... there is no way of - returning to the top level with an error. Save the top REC_STACK_SAVE_MAX - values on the stack, and accept that the rest may be wrong. - - There are also other values that have to be saved. We use a chained - sequence of blocks that actually live on the stack. Thanks to Robin Houston - for the original version of this logic. */ - - case OP_RECURSE: - { - callpat = md->start_code + GET(ecode, 1); - new_recursive.group_num = *callpat - OP_BRA; - - /* For extended extraction brackets (large number), we have to fish out - the number from a dummy opcode at the start. */ - - if (new_recursive.group_num > EXTRACT_BASIC_MAX) - new_recursive.group_num = GET2(callpat, 2+LINK_SIZE); - - /* Add to "recursing stack" */ - - new_recursive.prevrec = md->recursive; - md->recursive = &new_recursive; - - /* Find where to continue from afterwards */ - - ecode += 1 + LINK_SIZE; - new_recursive.after_call = ecode; - - /* Now save the offset data. */ - - new_recursive.saved_max = md->offset_end; - if (new_recursive.saved_max <= REC_STACK_SAVE_MAX) - new_recursive.offset_save = stacksave; - else - { - new_recursive.offset_save = - (int *)(pcre_malloc)(new_recursive.saved_max * sizeof(int)); - if (new_recursive.offset_save == NULL) RRETURN(PCRE_ERROR_NOMEMORY); - } - - memcpy(new_recursive.offset_save, md->offset_vector, - new_recursive.saved_max * sizeof(int)); - new_recursive.save_start = md->start_match; - md->start_match = eptr; - - /* OK, now we can do the recursion. For each top-level alternative we - restore the offset and recursion data. */ - - DPRINTF(("Recursing into group %d\n", new_recursive.group_num)); - do - { - RMATCH(rrc, eptr, callpat + 1 + LINK_SIZE, offset_top, md, ims, - eptrb, match_isgroup); - if (rrc == MATCH_MATCH) - { - md->recursive = new_recursive.prevrec; - if (new_recursive.offset_save != stacksave) - (pcre_free)(new_recursive.offset_save); - RRETURN(MATCH_MATCH); - } - else if (rrc != MATCH_NOMATCH) RRETURN(rrc); - - md->recursive = &new_recursive; - memcpy(md->offset_vector, new_recursive.offset_save, - new_recursive.saved_max * sizeof(int)); - callpat += GET(callpat, 1); - } - while (*callpat == OP_ALT); - - DPRINTF(("Recursion didn't match\n")); - md->recursive = new_recursive.prevrec; - if (new_recursive.offset_save != stacksave) - (pcre_free)(new_recursive.offset_save); - RRETURN(MATCH_NOMATCH); - } - /* Control never reaches here */ - - /* "Once" brackets are like assertion brackets except that after a match, - the point in the subject string is not moved back. Thus there can never be - a move back into the brackets. Friedl calls these "atomic" subpatterns. - Check the alternative branches in turn - the matching won't pass the KET - for this kind of subpattern. If any one branch matches, we carry on as at - the end of a normal bracket, leaving the subject pointer. */ - - case OP_ONCE: - { - prev = ecode; - saved_eptr = eptr; - - do - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, - eptrb, match_isgroup); - if (rrc == MATCH_MATCH) break; - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - ecode += GET(ecode,1); - } - while (*ecode == OP_ALT); - - /* If hit the end of the group (which could be repeated), fail */ - - if (*ecode != OP_ONCE && *ecode != OP_ALT) RRETURN(MATCH_NOMATCH); - - /* Continue as from after the assertion, updating the offsets high water - mark, since extracts may have been taken. */ - - do ecode += GET(ecode,1); while (*ecode == OP_ALT); - - offset_top = md->end_offset_top; - eptr = md->end_match_ptr; - - /* For a non-repeating ket, just continue at this level. This also - happens for a repeating ket if no characters were matched in the group. - This is the forcible breaking of infinite loops as implemented in Perl - 5.005. If there is an options reset, it will get obeyed in the normal - course of events. */ - - if (*ecode == OP_KET || eptr == saved_eptr) - { - ecode += 1+LINK_SIZE; - break; - } - - /* The repeating kets try the rest of the pattern or restart from the - preceding bracket, in the appropriate order. We need to reset any options - that changed within the bracket before re-running it, so check the next - opcode. */ - - if (ecode[1+LINK_SIZE] == OP_OPT) - { - ims = (ims & ~PCRE_IMS) | ecode[4]; - DPRINTF(("ims set to %02lx at group repeat\n", ims)); - } - - if (*ecode == OP_KETRMIN) - { - RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - else /* OP_KETRMAX */ - { - RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - } - RRETURN(MATCH_NOMATCH); - - /* An alternation is the end of a branch; scan along to find the end of the - bracketed group and go to there. */ - - case OP_ALT: - do ecode += GET(ecode,1); while (*ecode == OP_ALT); - break; - - /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating - that it may occur zero times. It may repeat infinitely, or not at all - - i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper - repeat limits are compiled as a number of copies, with the optional ones - preceded by BRAZERO or BRAMINZERO. */ - - case OP_BRAZERO: - { - next = ecode+1; - RMATCH(rrc, eptr, next, offset_top, md, ims, eptrb, match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - do next += GET(next,1); while (*next == OP_ALT); - ecode = next + 1+LINK_SIZE; - } - break; - - case OP_BRAMINZERO: - { - next = ecode+1; - do next += GET(next,1); while (*next == OP_ALT); - RMATCH(rrc, eptr, next + 1+LINK_SIZE, offset_top, md, ims, eptrb, - match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - ecode++; - } - break; - - /* End of a group, repeated or non-repeating. If we are at the end of - an assertion "group", stop matching and return MATCH_MATCH, but record the - current high water mark for use by positive assertions. Do this also - for the "once" (not-backup up) groups. */ - - case OP_KET: - case OP_KETRMIN: - case OP_KETRMAX: - { - prev = ecode - GET(ecode, 1); - saved_eptr = eptrb->epb_saved_eptr; - - /* Back up the stack of bracket start pointers. */ - - eptrb = eptrb->epb_prev; - - if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT || - *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT || - *prev == OP_ONCE) - { - md->end_match_ptr = eptr; /* For ONCE */ - md->end_offset_top = offset_top; - RRETURN(MATCH_MATCH); - } - - /* In all other cases except a conditional group we have to check the - group number back at the start and if necessary complete handling an - extraction by setting the offsets and bumping the high water mark. */ - - if (*prev != OP_COND) - { - number = *prev - OP_BRA; - - /* For extended extraction brackets (large number), we have to fish out - the number from a dummy opcode at the start. */ - - if (number > EXTRACT_BASIC_MAX) number = GET2(prev, 2+LINK_SIZE); - offset = number << 1; - -#ifdef DEBUG - printf("end bracket %d", number); - printf("\n"); -#endif - - /* Test for a numbered group. This includes groups called as a result - of recursion. Note that whole-pattern recursion is coded as a recurse - into group 0, so it won't be picked up here. Instead, we catch it when - the OP_END is reached. */ - - if (number > 0) - { - md->capture_last = number; - if (offset >= md->offset_max) md->offset_overflow = TRUE; else - { - md->offset_vector[offset] = - md->offset_vector[md->offset_end - number]; - md->offset_vector[offset+1] = eptr - md->start_subject; - if (offset_top <= offset) offset_top = offset + 2; - } - - /* Handle a recursively called group. Restore the offsets - appropriately and continue from after the call. */ - - if (md->recursive != NULL && md->recursive->group_num == number) - { - recursion_info *rec = md->recursive; - DPRINTF(("Recursion (%d) succeeded - continuing\n", number)); - md->recursive = rec->prevrec; - md->start_match = rec->save_start; - memcpy(md->offset_vector, rec->offset_save, - rec->saved_max * sizeof(int)); - ecode = rec->after_call; - ims = original_ims; - break; - } - } - } - - /* Reset the value of the ims flags, in case they got changed during - the group. */ - - ims = original_ims; - DPRINTF(("ims reset to %02lx\n", ims)); - - /* For a non-repeating ket, just continue at this level. This also - happens for a repeating ket if no characters were matched in the group. - This is the forcible breaking of infinite loops as implemented in Perl - 5.005. If there is an options reset, it will get obeyed in the normal - course of events. */ - - if (*ecode == OP_KET || eptr == saved_eptr) - { - ecode += 1 + LINK_SIZE; - break; - } - - /* The repeating kets try the rest of the pattern or restart from the - preceding bracket, in the appropriate order. */ - - if (*ecode == OP_KETRMIN) - { - RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - else /* OP_KETRMAX */ - { - RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - } - - RRETURN(MATCH_NOMATCH); - - /* Start of subject unless notbol, or after internal newline if multiline */ - - case OP_CIRC: - if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH); - if ((ims & PCRE_MULTILINE) != 0) - { - if (eptr != md->start_subject && eptr[-1] != NEWLINE) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - } - /* ... else fall through */ - - /* Start of subject assertion */ - - case OP_SOD: - if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH); - ecode++; - break; - - /* Start of match assertion */ - - case OP_SOM: - if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH); - ecode++; - break; - - /* Assert before internal newline if multiline, or before a terminating - newline unless endonly is set, else end of subject unless noteol is set. */ - - case OP_DOLL: - if ((ims & PCRE_MULTILINE) != 0) - { - if (eptr < md->end_subject) - { if (*eptr != NEWLINE) RRETURN(MATCH_NOMATCH); } - else - { if (md->noteol) RRETURN(MATCH_NOMATCH); } - ecode++; - break; - } - else - { - if (md->noteol) RRETURN(MATCH_NOMATCH); - if (!md->endonly) - { - if (eptr < md->end_subject - 1 || - (eptr == md->end_subject - 1 && *eptr != NEWLINE)) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - } - } - /* ... else fall through */ - - /* End of subject assertion (\z) */ - - case OP_EOD: - if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH); - ecode++; - break; - - /* End of subject or ending \n assertion (\Z) */ - - case OP_EODN: - if (eptr < md->end_subject - 1 || - (eptr == md->end_subject - 1 && *eptr != NEWLINE)) RRETURN(MATCH_NOMATCH); - ecode++; - break; - - /* Word boundary assertions */ - - case OP_NOT_WORD_BOUNDARY: - case OP_WORD_BOUNDARY: - { - - /* Find out if the previous and current characters are "word" characters. - It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to - be "non-word" characters. */ - -#ifdef SUPPORT_UTF8 - if (1 /* md->utf8 */) - { - if (eptr == md->start_subject) prev_is_word = FALSE; else - { - lastptr = eptr - 1; - while((*lastptr & 0xc0) == 0x80) lastptr--; - GETCHAR(c, lastptr); - prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0; - } - if (eptr >= md->end_subject) cur_is_word = FALSE; else - { - GETCHAR(c, eptr); - cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0; - } - } - else -#endif - - /* More streamlined when not in UTF-8 mode */ - - { - prev_is_word = (eptr != md->start_subject) && - ((md->ctypes[eptr[-1]] & ctype_word) != 0); - cur_is_word = (eptr < md->end_subject) && - ((md->ctypes[*eptr] & ctype_word) != 0); - } - - /* Now see if the situation is what we want */ - - if ((*ecode++ == OP_WORD_BOUNDARY)? - cur_is_word == prev_is_word : cur_is_word != prev_is_word) - RRETURN(MATCH_NOMATCH); - } - break; - - /* Match a single character type; inline for speed */ - - case OP_ANY: - if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE) - RRETURN(MATCH_NOMATCH); - if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH); -#ifdef SUPPORT_UTF8 - if (1 /* md->utf8 */) - while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; -#endif - ecode++; - break; - - /* Match a single byte, even in UTF-8 mode. This opcode really does match - any byte, even newline, independent of the setting of PCRE_DOTALL. */ - - case OP_ANYBYTE: - if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH); - ecode++; - break; - - case OP_NOT_DIGIT: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINCTEST(c, eptr); - if ( -#ifdef SUPPORT_UTF8 - c < 256 && -#endif - (md->ctypes[c] & ctype_digit) != 0 - ) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - - case OP_DIGIT: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINCTEST(c, eptr); - if ( -#ifdef SUPPORT_UTF8 - c >= 256 || -#endif - (md->ctypes[c] & ctype_digit) == 0 - ) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - - case OP_NOT_WHITESPACE: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINCTEST(c, eptr); - if ( -#ifdef SUPPORT_UTF8 - c < 256 && -#endif - (md->ctypes[c] & ctype_space) != 0 - ) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - - case OP_WHITESPACE: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINCTEST(c, eptr); - if ( -#ifdef SUPPORT_UTF8 - c >= 256 || -#endif - (md->ctypes[c] & ctype_space) == 0 - ) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - - case OP_NOT_WORDCHAR: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINCTEST(c, eptr); - if ( -#ifdef SUPPORT_UTF8 - c < 256 && -#endif - (md->ctypes[c] & ctype_word) != 0 - ) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - - case OP_WORDCHAR: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINCTEST(c, eptr); - if ( -#ifdef SUPPORT_UTF8 - c >= 256 || -#endif - (md->ctypes[c] & ctype_word) == 0 - ) - RRETURN(MATCH_NOMATCH); - ecode++; - break; - - /* Match a back reference, possibly repeatedly. Look past the end of the - item to see if there is repeat information following. The code is similar - to that for character classes, but repeated for efficiency. Then obey - similar code to character type repeats - written out again for speed. - However, if the referenced string is the empty string, always treat - it as matched, any number of times (otherwise there could be infinite - loops). */ - - case OP_REF: - { - offset = GET2(ecode, 1) << 1; /* Doubled ref number */ - ecode += 3; /* Advance past item */ - - /* If the reference is unset, set the length to be longer than the amount - of subject left; this ensures that every attempt at a match fails. We - can't just fail here, because of the possibility of quantifiers with zero - minima. */ - - length = (offset >= offset_top || md->offset_vector[offset] < 0)? - md->end_subject - eptr + 1 : - md->offset_vector[offset+1] - md->offset_vector[offset]; - - /* Set up for repetition, or handle the non-repeated case */ - - switch (*ecode) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRPLUS: - case OP_CRMINPLUS: - case OP_CRQUERY: - case OP_CRMINQUERY: - c = *ecode++ - OP_CRSTAR; - minimize = (c & 1) != 0; - min = rep_min[c]; /* Pick up values from tables; */ - max = rep_max[c]; /* zero for max => infinity */ - if (max == 0) max = INT_MAX; - break; - - case OP_CRRANGE: - case OP_CRMINRANGE: - minimize = (*ecode == OP_CRMINRANGE); - min = GET2(ecode, 1); - max = GET2(ecode, 3); - if (max == 0) max = INT_MAX; - ecode += 5; - break; - - default: /* No repeat follows */ - if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH); - eptr += length; - continue; /* With the main loop */ - } - - /* If the length of the reference is zero, just continue with the - main loop. */ - - if (length == 0) continue; - - /* First, ensure the minimum number of matches are present. We get back - the length of the reference string explicitly rather than passing the - address of eptr, so that eptr can be a register variable. */ - - for (i = 1; i <= min; i++) - { - if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH); - eptr += length; - } - - /* If min = max, continue at the same level without recursion. - They are not both allowed to be zero. */ - - if (min == max) continue; - - /* If minimizing, keep trying and advancing the pointer */ - - if (minimize) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || !match_ref(offset, eptr, length, md, ims)) - RRETURN(MATCH_NOMATCH); - eptr += length; - } - /* Control never gets here */ - } - - /* If maximizing, find the longest string and work backwards */ - - else - { - pp = eptr; - for (i = min; i < max; i++) - { - if (!match_ref(offset, eptr, length, md, ims)) break; - eptr += length; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - eptr -= length; - } - RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - - - - /* Match a bit-mapped character class, possibly repeatedly. This op code is - used when all the characters in the class have values in the range 0-255. - The only difference between OP_CLASS and OP_NCLASS occurs when a data - character outside the range is encountered. - - First, look past the end of the item to see if there is repeat information - following. Then obey similar code to character type repeats - written out - again for speed. */ - - case OP_NCLASS: - case OP_CLASS: - { - data = ecode + 1; /* Save for matching */ - ecode += 33; /* Advance past the item */ - - switch (*ecode) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRPLUS: - case OP_CRMINPLUS: - case OP_CRQUERY: - case OP_CRMINQUERY: - c = *ecode++ - OP_CRSTAR; - minimize = (c & 1) != 0; - min = rep_min[c]; /* Pick up values from tables; */ - max = rep_max[c]; /* zero for max => infinity */ - if (max == 0) max = INT_MAX; - break; - - case OP_CRRANGE: - case OP_CRMINRANGE: - minimize = (*ecode == OP_CRMINRANGE); - min = GET2(ecode, 1); - max = GET2(ecode, 3); - if (max == 0) max = INT_MAX; - ecode += 5; - break; - - default: /* No repeat follows */ - min = max = 1; - break; - } - - /* First, ensure the minimum number of matches are present. */ - -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINC(c, eptr); - if (c > 255) - { - if (op == OP_CLASS) RRETURN(MATCH_NOMATCH); - } - else - { - if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); - } - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - c = *eptr++; - if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); - } - } - - /* If max == min we can continue with the main loop without the - need to recurse. */ - - if (min == max) continue; - - /* If minimizing, keep testing the rest of the expression and advancing - the pointer while it matches the class. */ - - if (minimize) - { -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINC(c, eptr); - if (c > 255) - { - if (op == OP_CLASS) RRETURN(MATCH_NOMATCH); - } - else - { - if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); - } - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - c = *eptr++; - if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - } - - /* If maximizing, find the longest possible run, then work backwards. */ - - else - { - pp = eptr; - -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c > 255) - { - if (op == OP_CLASS) break; - } - else - { - if ((data[c/8] & (1 << (c&7))) == 0) break; - } - eptr += len; - } - for (;;) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (eptr-- == pp) break; /* Stop if tried at original pos */ - BACKCHAR(eptr); - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject) break; - c = *eptr; - if ((data[c/8] & (1 << (c&7))) == 0) break; - eptr++; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - eptr--; - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - } - - RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - - - /* Match an extended character class. This opcode is encountered only - in UTF-8 mode, because that's the only time it is compiled. */ - -#ifdef SUPPORT_UTF8 - case OP_XCLASS: - { - data = ecode + 1 + LINK_SIZE; /* Save for matching */ - ecode += GET(ecode, 1); /* Advance past the item */ - - switch (*ecode) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRPLUS: - case OP_CRMINPLUS: - case OP_CRQUERY: - case OP_CRMINQUERY: - c = *ecode++ - OP_CRSTAR; - minimize = (c & 1) != 0; - min = rep_min[c]; /* Pick up values from tables; */ - max = rep_max[c]; /* zero for max => infinity */ - if (max == 0) max = INT_MAX; - break; - - case OP_CRRANGE: - case OP_CRMINRANGE: - minimize = (*ecode == OP_CRMINRANGE); - min = GET2(ecode, 1); - max = GET2(ecode, 3); - if (max == 0) max = INT_MAX; - ecode += 5; - break; - - default: /* No repeat follows */ - min = max = 1; - break; - } - - /* First, ensure the minimum number of matches are present. */ - - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINC(c, eptr); - if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH); - } - - /* If max == min we can continue with the main loop without the - need to recurse. */ - - if (min == max) continue; - - /* If minimizing, keep testing the rest of the expression and advancing - the pointer while it matches the class. */ - - if (minimize) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINC(c, eptr); - if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - } - - /* If maximizing, find the longest possible run, then work backwards. */ - - else - { - pp = eptr; - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (!match_xclass(c, data)) break; - eptr += len; - } - for(;;) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (eptr-- == pp) break; /* Stop if tried at original pos */ - BACKCHAR(eptr) - } - RRETURN(MATCH_NOMATCH); - } - - /* Control never gets here */ - } -#endif /* End of XCLASS */ - - /* Match a run of characters */ - - case OP_CHARS: - { - register int slen = ecode[1]; - ecode += 2; - -#ifdef DEBUG /* Sigh. Some compilers never learn. */ - if (eptr >= md->end_subject) - printf("matching subject against pattern "); - else - { - printf("matching subject "); - pchars(eptr, slen, TRUE, md); - printf(" against pattern "); - } - pchars(ecode, slen, FALSE, md); - printf("\n"); -#endif - - if (slen > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); - if ((ims & PCRE_CASELESS) != 0) - { - while (slen-- > 0) - if (md->lcc[*ecode++] != md->lcc[*eptr++]) - RRETURN(MATCH_NOMATCH); - } - else - { - while (slen-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH); - } - } - break; - - /* Match a single character repeatedly; different opcodes share code. */ - - case OP_EXACT: - min = max = GET2(ecode, 1); - ecode += 3; - goto REPEATCHAR; - - case OP_UPTO: - case OP_MINUPTO: - min = 0; - max = GET2(ecode, 1); - minimize = *ecode == OP_MINUPTO; - ecode += 3; - goto REPEATCHAR; - - case OP_STAR: - case OP_MINSTAR: - case OP_PLUS: - case OP_MINPLUS: - case OP_QUERY: - case OP_MINQUERY: - c = *ecode++ - OP_STAR; - minimize = (c & 1) != 0; - min = rep_min[c]; /* Pick up values from tables; */ - max = rep_max[c]; /* zero for max => infinity */ - if (max == 0) max = INT_MAX; - - /* Common code for all repeated single-character matches. We can give - up quickly if there are fewer than the minimum number of characters left in - the subject. */ - - REPEATCHAR: -#ifdef SUPPORT_UTF8 - if (1 /* md->utf8 */) - { - length = 1; - charptr = ecode; - GETCHARLEN(fc, ecode, length); - if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); - ecode += length; - - /* Handle multibyte character matching specially here. There is no - support for any kind of casing for multibyte characters. */ - - if (length > 1) - { - for (i = 1; i <= min; i++) - { - if (memcmp(eptr, charptr, length) != 0) RRETURN(MATCH_NOMATCH); - eptr += length; - } - - if (min == max) continue; - - if (minimize) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || - eptr >= md->end_subject || - memcmp(eptr, charptr, length) != 0) - RRETURN(MATCH_NOMATCH); - eptr += length; - } - /* Control never gets here */ - } - else - { - pp = eptr; - for (i = min; i < max; i++) - { - if (eptr > md->end_subject - length || - memcmp(eptr, charptr, length) != 0) - break; - eptr += length; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - eptr -= length; - } - RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - } - - /* If the length of a UTF-8 character is 1, we fall through here, and - obey the code as for non-UTF-8 characters below, though in this case the - value of fc will always be < 128. */ - } - else -#endif - - /* When not in UTF-8 mode, load a single-byte character. */ - { - if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); - fc = *ecode++; - } - - /* The value of fc at this point is always less than 256, though we may or - may not be in UTF-8 mode. The code is duplicated for the caseless and - caseful cases, for speed, since matching characters is likely to be quite - common. First, ensure the minimum number of matches are present. If min = - max, continue at the same level without recursing. Otherwise, if - minimizing, keep trying the rest of the expression and advancing one - matching character if failing, up to the maximum. Alternatively, if - maximizing, find the maximum number of characters and work backwards. */ - - DPRINTF(("matching %c{%d,%d} against subject %.*s\n", fc, min, max, - max, eptr)); - - if ((ims & PCRE_CASELESS) != 0) - { - fc = md->lcc[fc]; - for (i = 1; i <= min; i++) - if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); - if (min == max) continue; - if (minimize) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject || - fc != md->lcc[*eptr++]) - RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - } - else - { - pp = eptr; - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break; - eptr++; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - eptr--; - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - } - - /* Caseful comparisons (includes all multi-byte characters) */ - - else - { - for (i = 1; i <= min; i++) if (fc != *eptr++) RRETURN(MATCH_NOMATCH); - if (min == max) continue; - if (minimize) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject || fc != *eptr++) - RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - } - else - { - pp = eptr; - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || fc != *eptr) break; - eptr++; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - eptr--; - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - - /* Match a negated single one-byte character. The character we are - checking can be multibyte. */ - - case OP_NOT: - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - ecode++; - GETCHARINCTEST(c, eptr); - if ((ims & PCRE_CASELESS) != 0) - { -#ifdef SUPPORT_UTF8 - if (c < 256) -#endif - c = md->lcc[c]; - if (md->lcc[*ecode++] == c) RRETURN(MATCH_NOMATCH); - } - else - { - if (*ecode++ == c) RRETURN(MATCH_NOMATCH); - } - break; - - /* Match a negated single one-byte character repeatedly. This is almost a - repeat of the code for a repeated single character, but I haven't found a - nice way of commoning these up that doesn't require a test of the - positive/negative option for each character match. Maybe that wouldn't add - very much to the time taken, but character matching *is* what this is all - about... */ - - case OP_NOTEXACT: - min = max = GET2(ecode, 1); - ecode += 3; - goto REPEATNOTCHAR; - - case OP_NOTUPTO: - case OP_NOTMINUPTO: - min = 0; - max = GET2(ecode, 1); - minimize = *ecode == OP_NOTMINUPTO; - ecode += 3; - goto REPEATNOTCHAR; - - case OP_NOTSTAR: - case OP_NOTMINSTAR: - case OP_NOTPLUS: - case OP_NOTMINPLUS: - case OP_NOTQUERY: - case OP_NOTMINQUERY: - c = *ecode++ - OP_NOTSTAR; - minimize = (c & 1) != 0; - min = rep_min[c]; /* Pick up values from tables; */ - max = rep_max[c]; /* zero for max => infinity */ - if (max == 0) max = INT_MAX; - - /* Common code for all repeated single-character (less than 255) matches. - We can give up quickly if there are fewer than the minimum number of - characters left in the subject. */ - - REPEATNOTCHAR: - if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); - fc = *ecode++; - - /* The code is duplicated for the caseless and caseful cases, for speed, - since matching characters is likely to be quite common. First, ensure the - minimum number of matches are present. If min = max, continue at the same - level without recursing. Otherwise, if minimizing, keep trying the rest of - the expression and advancing one matching character if failing, up to the - maximum. Alternatively, if maximizing, find the maximum number of - characters and work backwards. */ - - DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", fc, min, max, - max, eptr)); - - if ((ims & PCRE_CASELESS) != 0) - { - fc = md->lcc[fc]; - -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - register int d; - for (i = 1; i <= min; i++) - { - GETCHARINC(d, eptr); - if (d < 256) d = md->lcc[d]; - if (fc == d) RRETURN(MATCH_NOMATCH); - } - } - else -#endif - - /* Not UTF-8 mode */ - { - for (i = 1; i <= min; i++) - if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); - } - - if (min == max) continue; - - if (minimize) - { -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - register int d; - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - GETCHARINC(d, eptr); - if (d < 256) d = md->lcc[d]; - if (fi >= max || eptr >= md->end_subject || fc == d) - RRETURN(MATCH_NOMATCH); - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject || fc == md->lcc[*eptr++]) - RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - } - - /* Maximize case */ - - else - { - pp = eptr; - -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - register int d; - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(d, eptr, len); - if (d < 256) d = md->lcc[d]; - if (fc == d) break; - eptr += len; - } - for(;;) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (eptr-- == pp) break; /* Stop if tried at original pos */ - BACKCHAR(eptr); - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break; - eptr++; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - eptr--; - } - } - - RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - } - - /* Caseful comparisons */ - - else - { -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - register int d; - for (i = 1; i <= min; i++) - { - GETCHARINC(d, eptr); - if (fc == d) RRETURN(MATCH_NOMATCH); - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (i = 1; i <= min; i++) - if (fc == *eptr++) RRETURN(MATCH_NOMATCH); - } - - if (min == max) continue; - - if (minimize) - { -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - register int d; - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - GETCHARINC(d, eptr); - if (fi >= max || eptr >= md->end_subject || fc == d) - RRETURN(MATCH_NOMATCH); - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject || fc == *eptr++) - RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - } - - /* Maximize case */ - - else - { - pp = eptr; - -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - register int d; - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(d, eptr, len); - if (fc == d) break; - eptr += len; - } - for(;;) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (eptr-- == pp) break; /* Stop if tried at original pos */ - BACKCHAR(eptr); - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || fc == *eptr) break; - eptr++; - } - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - eptr--; - } - } - - RRETURN(MATCH_NOMATCH); - } - } - /* Control never gets here */ - - /* Match a single character type repeatedly; several different opcodes - share code. This is very similar to the code for single characters, but we - repeat it in the interests of efficiency. */ - - case OP_TYPEEXACT: - min = max = GET2(ecode, 1); - minimize = TRUE; - ecode += 3; - goto REPEATTYPE; - - case OP_TYPEUPTO: - case OP_TYPEMINUPTO: - min = 0; - max = GET2(ecode, 1); - minimize = *ecode == OP_TYPEMINUPTO; - ecode += 3; - goto REPEATTYPE; - - case OP_TYPESTAR: - case OP_TYPEMINSTAR: - case OP_TYPEPLUS: - case OP_TYPEMINPLUS: - case OP_TYPEQUERY: - case OP_TYPEMINQUERY: - c = *ecode++ - OP_TYPESTAR; - minimize = (c & 1) != 0; - min = rep_min[c]; /* Pick up values from tables; */ - max = rep_max[c]; /* zero for max => infinity */ - if (max == 0) max = INT_MAX; - - /* Common code for all repeated single character type matches. Note that - in UTF-8 mode, '.' matches a character of any length, but for the other - character types, the valid characters are all one-byte long. */ - - REPEATTYPE: - ctype = *ecode++; /* Code for the character type */ - - /* First, ensure the minimum number of matches are present. Use inline - code for maximizing the speed, and do the type test once at the start - (i.e. keep it out of the loop). Also we can test that there are at least - the minimum number of bytes before we start. This isn't as effective in - UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that - is tidier. */ - - if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); - if (min > 0) - { -#ifdef SUPPORT_UTF8 - if (1 /* md->utf8 */) switch(ctype) - { - case OP_ANY: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject || - (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0)) - RRETURN(MATCH_NOMATCH); - while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; - } - break; - - case OP_ANYBYTE: - eptr += min; - break; - - case OP_NOT_DIGIT: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - GETCHARINC(c, eptr); - if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) - RRETURN(MATCH_NOMATCH); - } - break; - - case OP_DIGIT: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject || - *eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0) - RRETURN(MATCH_NOMATCH); - /* No need to skip more bytes - we know it's a 1-byte character */ - } - break; - - case OP_NOT_WHITESPACE: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject || - (*eptr < 128 && (md->ctypes[*eptr++] & ctype_space) != 0)) - RRETURN(MATCH_NOMATCH); - while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; - } - break; - - case OP_WHITESPACE: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject || - *eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0) - RRETURN(MATCH_NOMATCH); - /* No need to skip more bytes - we know it's a 1-byte character */ - } - break; - - case OP_NOT_WORDCHAR: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject || - (*eptr < 128 && (md->ctypes[*eptr++] & ctype_word) != 0)) - RRETURN(MATCH_NOMATCH); - while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; - } - break; - - case OP_WORDCHAR: - for (i = 1; i <= min; i++) - { - if (eptr >= md->end_subject || - *eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0) - RRETURN(MATCH_NOMATCH); - /* No need to skip more bytes - we know it's a 1-byte character */ - } - break; - } - else -#endif - - /* Code for the non-UTF-8 case for minimum matching */ - - switch(ctype) - { - case OP_ANY: - if ((ims & PCRE_DOTALL) == 0) - { - for (i = 1; i <= min; i++) - if (*eptr++ == NEWLINE) RRETURN(MATCH_NOMATCH); - } - else eptr += min; - break; - - case OP_ANYBYTE: - eptr += min; - break; - - case OP_NOT_DIGIT: - for (i = 1; i <= min; i++) - if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_DIGIT: - for (i = 1; i <= min; i++) - if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_NOT_WHITESPACE: - for (i = 1; i <= min; i++) - if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_WHITESPACE: - for (i = 1; i <= min; i++) - if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_NOT_WORDCHAR: - for (i = 1; i <= min; i++) - if ((md->ctypes[*eptr++] & ctype_word) != 0) - RRETURN(MATCH_NOMATCH); - break; - - case OP_WORDCHAR: - for (i = 1; i <= min; i++) - if ((md->ctypes[*eptr++] & ctype_word) == 0) - RRETURN(MATCH_NOMATCH); - break; - } - } - - /* If min = max, continue at the same level without recursing */ - - if (min == max) continue; - - /* If minimizing, we have to test the rest of the pattern before each - subsequent match. Again, separate the UTF-8 case for speed. */ - - if (minimize) - { -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - if (1 /* md->utf8 */) - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - - GETCHARINC(c, eptr); - switch(ctype) - { - case OP_ANY: - if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH); - break; - - case OP_ANYBYTE: - break; - - case OP_NOT_DIGIT: - if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) - RRETURN(MATCH_NOMATCH); - break; - - case OP_DIGIT: - if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0) - RRETURN(MATCH_NOMATCH); - break; - - case OP_NOT_WHITESPACE: - if (c < 256 && (md->ctypes[c] & ctype_space) != 0) - RRETURN(MATCH_NOMATCH); - break; - - case OP_WHITESPACE: - if (c >= 256 || (md->ctypes[c] & ctype_space) == 0) - RRETURN(MATCH_NOMATCH); - break; - - case OP_NOT_WORDCHAR: - if (c < 256 && (md->ctypes[c] & ctype_word) != 0) - RRETURN(MATCH_NOMATCH); - break; - - case OP_WORDCHAR: - if (c >= 256 && (md->ctypes[c] & ctype_word) == 0) - RRETURN(MATCH_NOMATCH); - break; - } - } - } - else -#endif - /* Not UTF-8 mode */ - { - for (fi = min;; fi++) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); - c = *eptr++; - switch(ctype) - { - case OP_ANY: - if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH); - break; - - case OP_ANYBYTE: - break; - - case OP_NOT_DIGIT: - if ((md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_DIGIT: - if ((md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_NOT_WHITESPACE: - if ((md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_WHITESPACE: - if ((md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_NOT_WORDCHAR: - if ((md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); - break; - - case OP_WORDCHAR: - if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); - break; - } - } - } - /* Control never gets here */ - } - - /* If maximizing it is worth using inline code for speed, doing the type - test once at the start (i.e. keep it out of the loop). Again, keep the - UTF-8 stuff separate. */ - - else - { - pp = eptr; - -#ifdef SUPPORT_UTF8 - /* UTF-8 mode */ - - if (1 /* md->utf8 */) - { - switch(ctype) - { - case OP_ANY: - - /* Special code is required for UTF8, but when the maximum is unlimited - we don't need it, so we repeat the non-UTF8 code. This is probably - worth it, because .* is quite a common idiom. */ - - if (max < INT_MAX) - { - if ((ims & PCRE_DOTALL) == 0) - { - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || *eptr == NEWLINE) break; - eptr++; - while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; - } - } - else - { - for (i = min; i < max; i++) - { - eptr++; - while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; - } - } - } - - /* Handle unlimited UTF-8 repeat */ - - else - { - if ((ims & PCRE_DOTALL) == 0) - { - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || *eptr == NEWLINE) break; - eptr++; - } - break; - } - else - { - c = max - min; - if (c > md->end_subject - eptr) c = md->end_subject - eptr; - eptr += c; - } - } - break; - - /* The byte case is the same as non-UTF8 */ - - case OP_ANYBYTE: - c = max - min; - if (c > md->end_subject - eptr) c = md->end_subject - eptr; - eptr += c; - break; - - case OP_NOT_DIGIT: - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break; - eptr+= len; - } - break; - - case OP_DIGIT: - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break; - eptr+= len; - } - break; - - case OP_NOT_WHITESPACE: - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break; - eptr+= len; - } - break; - - case OP_WHITESPACE: - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break; - eptr+= len; - } - break; - - case OP_NOT_WORDCHAR: - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break; - eptr+= len; - } - break; - - case OP_WORDCHAR: - for (i = min; i < max; i++) - { - int len = 1; - if (eptr >= md->end_subject) break; - GETCHARLEN(c, eptr, len); - if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break; - eptr+= len; - } - break; - } - - /* eptr is now past the end of the maximum run */ - - for(;;) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - if (eptr-- == pp) break; /* Stop if tried at original pos */ - BACKCHAR(eptr); - } - } - else -#endif - - /* Not UTF-8 mode */ - { - switch(ctype) - { - case OP_ANY: - if ((ims & PCRE_DOTALL) == 0) - { - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || *eptr == NEWLINE) break; - eptr++; - } - break; - } - /* For DOTALL case, fall through and treat as \C */ - - case OP_ANYBYTE: - c = max - min; - if (c > md->end_subject - eptr) c = md->end_subject - eptr; - eptr += c; - break; - - case OP_NOT_DIGIT: - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0) - break; - eptr++; - } - break; - - case OP_DIGIT: - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0) - break; - eptr++; - } - break; - - case OP_NOT_WHITESPACE: - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0) - break; - eptr++; - } - break; - - case OP_WHITESPACE: - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0) - break; - eptr++; - } - break; - - case OP_NOT_WORDCHAR: - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0) - break; - eptr++; - } - break; - - case OP_WORDCHAR: - for (i = min; i < max; i++) - { - if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0) - break; - eptr++; - } - break; - } - - /* eptr is now past the end of the maximum run */ - - while (eptr >= pp) - { - RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0); - eptr--; - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - } - } - - /* Get here if we can't make it match with any permitted repetitions */ - - RRETURN(MATCH_NOMATCH); - } - /* Control never gets here */ - - /* There's been some horrible disaster. Since all codes > OP_BRA are - for capturing brackets, and there shouldn't be any gaps between 0 and - OP_BRA, arrival here can only mean there is something seriously wrong - in the code above or the OP_xxx definitions. */ - - default: - DPRINTF(("Unknown opcode %d\n", *ecode)); - RRETURN(PCRE_ERROR_UNKNOWN_NODE); - } - - /* Do not stick any code in here without much thought; it is assumed - that "continue" in the code above comes out to here to repeat the main - loop. */ - - } /* End of main loop */ -/* Control never reaches here */ -} - - -/*************************************************************************** -**************************************************************************** - RECURSION IN THE match() FUNCTION - -Undefine all the macros that were defined above to handle this. */ - -#ifdef NO_RECURSE -#undef eptr -#undef ecode -#undef offset_top -#undef ims -#undef eptrb -#undef flags - -#undef callpat -#undef charptr -#undef data -#undef lastptr -#undef next -#undef pp -#undef prev -#undef saved_eptr - -#undef new_recursive - -#undef cur_is_word -#undef condition -#undef minimize -#undef prev_is_word - -#undef original_ims - -#undef ctype -#undef length -#undef max -#undef min -#undef number -#undef offset -#undef op -#undef save_capture_last -#undef save_offset1 -#undef save_offset2 -#undef save_offset3 -#undef stacksave - -#undef newptrb - -#endif - -/* These two are defined as macros in both cases */ - -#undef fc -#undef fi - -/*************************************************************************** -***************************************************************************/ - - - -/************************************************* -* Execute a Regular Expression * -*************************************************/ - -/* This function applies a compiled re to a subject string and picks out -portions of the string if it matches. Two elements in the vector are set for -each substring: the offsets to the start and end of the substring. - -Arguments: - external_re points to the compiled expression - extra_data points to extra data or is NULL - subject points to the subject string - length length of subject string (may contain binary zeros) - start_offset where to start in the subject string - options option bits - offsets points to a vector of ints to be filled in with offsets - offsetcount the number of elements in the vector - -Returns: > 0 => success; value is the number of elements filled in - = 0 => success, but offsets is not big enough - -1 => failed to match - < -1 => some kind of unexpected problem -*/ - -int -pcre_exec(const pcre *external_re, const pcre_extra *extra_data, - const char *subject, int length, int start_offset, int options, int *offsets, - int offsetcount) -{ -int rc, resetcount, ocount; -int first_byte = -1; -int req_byte = -1; -int req_byte2 = -1; -unsigned long int ims = 0; -BOOL using_temporary_offsets = FALSE; -BOOL anchored; -BOOL startline; -BOOL first_byte_caseless = FALSE; -BOOL req_byte_caseless = FALSE; -match_data match_block; -const uschar *start_bits = NULL; -const uschar *start_match = (const uschar *)subject + start_offset; -const uschar *end_subject; -const uschar *req_byte_ptr = start_match - 1; -const pcre_study_data *study; -const real_pcre *re = (const real_pcre *)external_re; - -/* Plausibility checks */ - -if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION; -if (re == NULL || subject == NULL || - (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL; - -/* Fish out the optional data from the extra_data structure, first setting -the default values. */ - -study = NULL; -match_block.match_limit = MATCH_LIMIT; -match_block.callout_data = NULL; - -if (extra_data != NULL) - { - register unsigned int flags = extra_data->flags; - if ((flags & PCRE_EXTRA_STUDY_DATA) != 0) - study = (const pcre_study_data *)extra_data->study_data; - if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0) - match_block.match_limit = extra_data->match_limit; - if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0) - match_block.callout_data = extra_data->callout_data; - } - -/* Now we have re supposedly pointing to the regex */ - -if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC; - -anchored = ((re->options | options) & PCRE_ANCHORED) != 0; -startline = (re->options & PCRE_STARTLINE) != 0; - -match_block.start_code = - (const uschar *)re + sizeof(real_pcre) + re->name_count * re->name_entry_size; -match_block.start_subject = (const uschar *)subject; -match_block.start_offset = start_offset; -match_block.end_subject = match_block.start_subject + length; -end_subject = match_block.end_subject; - -match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; -match_block.utf8 = (re->options & PCRE_UTF8) != 0; - -match_block.notbol = (options & PCRE_NOTBOL) != 0; -match_block.noteol = (options & PCRE_NOTEOL) != 0; -match_block.notempty = (options & PCRE_NOTEMPTY) != 0; - -match_block.recursive = NULL; /* No recursion at top level */ - -match_block.lcc = re->tables + lcc_offset; -match_block.ctypes = re->tables + ctypes_offset; - -/* Check a UTF-8 string if required. Unfortunately there's no way of passing -back the character offset. */ - -#ifdef SUPPORT_UTF8 -if (match_block.utf8 && (options & PCRE_NO_UTF8_CHECK) == 0) - { - if (valid_utf8((uschar *)subject, length) >= 0) - return PCRE_ERROR_BADUTF8; - if (start_offset > 0 && start_offset < length) - { - int tb = ((uschar *)subject)[start_offset]; - if (tb > 127) - { - tb &= 0xc0; - if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET; - } - } - } -#endif - -/* The ims options can vary during the matching as a result of the presence -of (?ims) items in the pattern. They are kept in a local variable so that -restoring at the exit of a group is easy. */ - -ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL); - -/* If the expression has got more back references than the offsets supplied can -hold, we get a temporary bit of working store to use during the matching. -Otherwise, we can use the vector supplied, rounding down its size to a multiple -of 3. */ - -ocount = offsetcount - (offsetcount % 3); - -if (re->top_backref > 0 && re->top_backref >= ocount/3) - { - ocount = re->top_backref * 3 + 3; - match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int)); - if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY; - using_temporary_offsets = TRUE; - DPRINTF(("Got memory to hold back references\n")); - } -else match_block.offset_vector = offsets; - -match_block.offset_end = ocount; -match_block.offset_max = (2*ocount)/3; -match_block.offset_overflow = FALSE; -match_block.capture_last = -1; - -/* Compute the minimum number of offsets that we need to reset each time. Doing -this makes a huge difference to execution time when there aren't many brackets -in the pattern. */ - -resetcount = 2 + re->top_bracket * 2; -if (resetcount > offsetcount) resetcount = ocount; - -/* Reset the working variable associated with each extraction. These should -never be used unless previously set, but they get saved and restored, and so we -initialize them to avoid reading uninitialized locations. */ - -if (match_block.offset_vector != NULL) - { - register int *iptr = match_block.offset_vector + ocount; - register int *iend = iptr - resetcount/2 + 1; - while (--iptr >= iend) *iptr = -1; - } - -/* Set up the first character to match, if available. The first_byte value is -never set for an anchored regular expression, but the anchoring may be forced -at run time, so we have to test for anchoring. The first char may be unset for -an unanchored pattern, of course. If there's no first char and the pattern was -studied, there may be a bitmap of possible first characters. */ - -if (!anchored) - { - if ((re->options & PCRE_FIRSTSET) != 0) - { - first_byte = re->first_byte & 255; - if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE) - first_byte = match_block.lcc[first_byte]; - } - else - if (!startline && study != NULL && - (study->options & PCRE_STUDY_MAPPED) != 0) - start_bits = study->start_bits; - } - -/* For anchored or unanchored matches, there may be a "last known required -character" set. */ - -if ((re->options & PCRE_REQCHSET) != 0) - { - req_byte = re->req_byte & 255; - req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0; - req_byte2 = (re->tables + fcc_offset)[req_byte]; /* case flipped */ - } - -/* Loop for handling unanchored repeated matching attempts; for anchored regexs -the loop runs just once. */ - -do - { - register int *iptr = match_block.offset_vector; - register int *iend = iptr + resetcount; - - /* Reset the maximum number of extractions we might see. */ - - while (iptr < iend) *iptr++ = -1; - - /* Advance to a unique first char if possible */ - - if (first_byte >= 0) - { - if (first_byte_caseless) - while (start_match < end_subject && - match_block.lcc[*start_match] != first_byte) - start_match++; - else - while (start_match < end_subject && *start_match != first_byte) - start_match++; - } - - /* Or to just after \n for a multiline match if possible */ - - else if (startline) - { - if (start_match > match_block.start_subject + start_offset) - { - while (start_match < end_subject && start_match[-1] != NEWLINE) - start_match++; - } - } - - /* Or to a non-unique first char after study */ - - else if (start_bits != NULL) - { - while (start_match < end_subject) - { - register int c = *start_match; - if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break; - } - } - -#ifdef DEBUG /* Sigh. Some compilers never learn. */ - printf(">>>> Match against: "); - pchars(start_match, end_subject - start_match, TRUE, &match_block); - printf("\n"); -#endif - - /* If req_byte is set, we know that that character must appear in the subject - for the match to succeed. If the first character is set, req_byte must be - later in the subject; otherwise the test starts at the match point. This - optimization can save a huge amount of backtracking in patterns with nested - unlimited repeats that aren't going to match. Writing separate code for - cased/caseless versions makes it go faster, as does using an autoincrement - and backing off on a match. - - HOWEVER: when the subject string is very, very long, searching to its end can - take a long time, and give bad performance on quite ordinary patterns. This - showed up when somebody was matching /^C/ on a 32-megabyte string... so we - don't do this when the string is sufficiently long. */ - - if (req_byte >= 0 && end_subject - start_match < REQ_BYTE_MAX) - { - register const uschar *p = start_match + ((first_byte >= 0)? 1 : 0); - - /* We don't need to repeat the search if we haven't yet reached the - place we found it at last time. */ - - if (p > req_byte_ptr) - { - if (req_byte_caseless) - { - while (p < end_subject) - { - register int pp = *p++; - if (pp == req_byte || pp == req_byte2) { p--; break; } - } - } - else - { - while (p < end_subject) - { - if (*p++ == req_byte) { p--; break; } - } - } - - /* If we can't find the required character, break the matching loop */ - - if (p >= end_subject) break; - - /* If we have found the required character, save the point where we - found it, so that we don't search again next time round the loop if - the start hasn't passed this character yet. */ - - req_byte_ptr = p; - } - } - - /* When a match occurs, substrings will be set for all internal extractions; - we just need to set up the whole thing as substring 0 before returning. If - there were too many extractions, set the return code to zero. In the case - where we had to get some local store to hold offsets for backreferences, copy - those back references that we can. In this case there need not be overflow - if certain parts of the pattern were not used. */ - - match_block.start_match = start_match; - match_block.match_call_count = 0; - - rc = match(start_match, match_block.start_code, 2, &match_block, ims, NULL, - match_isgroup); - - if (rc == MATCH_NOMATCH) - { - start_match++; -#ifdef SUPPORT_UTF8 - if (match_block.utf8) - while((*start_match & 0xc0) == 0x80) start_match++; -#endif - continue; - } - - if (rc != MATCH_MATCH) - { - DPRINTF((">>>> error: returning %d\n", rc)); - return rc; - } - - /* We have a match! Copy the offset information from temporary store if - necessary */ - - if (using_temporary_offsets) - { - if (offsetcount >= 4) - { - memcpy(offsets + 2, match_block.offset_vector + 2, - (offsetcount - 2) * sizeof(int)); - DPRINTF(("Copied offsets from temporary memory\n")); - } - if (match_block.end_offset_top > offsetcount) - match_block.offset_overflow = TRUE; - - DPRINTF(("Freeing temporary memory\n")); - (pcre_free)(match_block.offset_vector); - } - - rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2; - - if (offsetcount < 2) rc = 0; else - { - offsets[0] = start_match - match_block.start_subject; - offsets[1] = match_block.end_match_ptr - match_block.start_subject; - } - - DPRINTF((">>>> returning %d\n", rc)); - return rc; - } - -/* This "while" is the end of the "do" above */ - -while (!anchored && start_match <= end_subject); - -if (using_temporary_offsets) - { - DPRINTF(("Freeing temporary memory\n")); - (pcre_free)(match_block.offset_vector); - } - -DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n")); - -return PCRE_ERROR_NOMATCH; -} - -/* End of pcre.c */ diff --git a/lib/goffice/cut-n-paste/pcre/pcre.h b/lib/goffice/cut-n-paste/pcre/pcre.h deleted file mode 100644 index 7d09b1697a..0000000000 --- a/lib/goffice/cut-n-paste/pcre/pcre.h +++ /dev/null @@ -1,198 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see pcre.c. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* Copyright (c) 1997-2003 University of Cambridge */ - -#ifndef _PCRE_H -#define _PCRE_H - -/* The file pcre.h is build by "configure". Do not edit it; instead -make changes to pcre.in. */ - -#define PCRE_MAJOR 4 -#define PCRE_MINOR 5 -#define PCRE_DATE 01-December-2003 - -/* Win32 uses DLL by default */ - -#ifdef _WIN32 -# ifdef PCRE_DEFINITION -# ifdef DLL_EXPORT -# define PCRE_DATA_SCOPE __declspec(dllexport) -# endif -# else -# ifndef PCRE_STATIC -# define PCRE_DATA_SCOPE extern __declspec(dllimport) -# endif -# endif -#endif -#ifndef PCRE_DATA_SCOPE -# define PCRE_DATA_SCOPE extern -#endif - -/* Have to include stdlib.h in order to ensure that size_t is defined; -it is needed here for malloc. */ - -#include - -/* Allow for C++ users */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Options */ - -#define PCRE_CASELESS 0x0001 -#define PCRE_MULTILINE 0x0002 -#define PCRE_DOTALL 0x0004 -#define PCRE_EXTENDED 0x0008 -#define PCRE_ANCHORED 0x0010 -#define PCRE_DOLLAR_ENDONLY 0x0020 -#define PCRE_EXTRA 0x0040 -#define PCRE_NOTBOL 0x0080 -#define PCRE_NOTEOL 0x0100 -#define PCRE_UNGREEDY 0x0200 -#define PCRE_NOTEMPTY 0x0400 -#define PCRE_UTF8 0x0800 -#define PCRE_NO_AUTO_CAPTURE 0x1000 -#define PCRE_NO_UTF8_CHECK 0x2000 - -/* Exec-time and get/set-time error codes */ - -#define PCRE_ERROR_NOMATCH (-1) -#define PCRE_ERROR_NULL (-2) -#define PCRE_ERROR_BADOPTION (-3) -#define PCRE_ERROR_BADMAGIC (-4) -#define PCRE_ERROR_UNKNOWN_NODE (-5) -#define PCRE_ERROR_NOMEMORY (-6) -#define PCRE_ERROR_NOSUBSTRING (-7) -#define PCRE_ERROR_MATCHLIMIT (-8) -#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ -#define PCRE_ERROR_BADUTF8 (-10) -#define PCRE_ERROR_BADUTF8_OFFSET (-11) - -/* Request types for pcre_fullinfo() */ - -#define PCRE_INFO_OPTIONS 0 -#define PCRE_INFO_SIZE 1 -#define PCRE_INFO_CAPTURECOUNT 2 -#define PCRE_INFO_BACKREFMAX 3 -#define PCRE_INFO_FIRSTBYTE 4 -#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ -#define PCRE_INFO_FIRSTTABLE 5 -#define PCRE_INFO_LASTLITERAL 6 -#define PCRE_INFO_NAMEENTRYSIZE 7 -#define PCRE_INFO_NAMECOUNT 8 -#define PCRE_INFO_NAMETABLE 9 -#define PCRE_INFO_STUDYSIZE 10 - -/* Request types for pcre_config() */ - -#define PCRE_CONFIG_UTF8 0 -#define PCRE_CONFIG_NEWLINE 1 -#define PCRE_CONFIG_LINK_SIZE 2 -#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 -#define PCRE_CONFIG_MATCH_LIMIT 4 -#define PCRE_CONFIG_STACKRECURSE 5 - -/* Bit flags for the pcre_extra structure */ - -#define PCRE_EXTRA_STUDY_DATA 0x0001 -#define PCRE_EXTRA_MATCH_LIMIT 0x0002 -#define PCRE_EXTRA_CALLOUT_DATA 0x0004 - -/* Types */ - -struct real_pcre; /* declaration; the definition is private */ -typedef struct real_pcre pcre; - -/* The structure for passing additional data to pcre_exec(). This is defined in -such as way as to be extensible. */ - -typedef struct pcre_extra { - unsigned long int flags; /* Bits for which fields are set */ - void *study_data; /* Opaque data from pcre_study() */ - unsigned long int match_limit; /* Maximum number of calls to match() */ - void *callout_data; /* Data passed back in callouts */ -} pcre_extra; - -/* The structure for passing out data via the pcre_callout_function. We use a -structure so that new fields can be added on the end in future versions, -without changing the API of the function, thereby allowing old clients to work -without modification. */ - -typedef struct pcre_callout_block { - int version; /* Identifies version of block */ - /* ------------------------ Version 0 ------------------------------- */ - int callout_number; /* Number compiled into pattern */ - int *offset_vector; /* The offset vector */ - const char *subject; /* The subject being matched */ - int subject_length; /* The length of the subject */ - int start_match; /* Offset to start of this match attempt */ - int current_position; /* Where we currently are */ - int capture_top; /* Max current capture */ - int capture_last; /* Most recently closed capture */ - void *callout_data; /* Data passed in with the call */ - /* ------------------------------------------------------------------ */ -} pcre_callout_block; - -/* Indirection for store get and free functions. These can be set to -alternative malloc/free functions if required. Special ones are used in the -non-recursive case for "frames". There is also an optional callout function -that is triggered by the (?) regex item. Some magic is required for Win32 DLL; -it is null on other OS. For Virtual Pascal, these have to be different again. -*/ - -#ifndef VPCOMPAT -PCRE_DATA_SCOPE void *(*pcre_malloc)(size_t); -PCRE_DATA_SCOPE void (*pcre_free)(void *); -PCRE_DATA_SCOPE void *(*pcre_stack_malloc)(size_t); -PCRE_DATA_SCOPE void (*pcre_stack_free)(void *); -PCRE_DATA_SCOPE int (*pcre_callout)(pcre_callout_block *); -#else /* VPCOMPAT */ -extern void *pcre_malloc(size_t); -extern void pcre_free(void *); -extern void *pcre_stack_malloc(size_t); -extern void pcre_stack_free(void *); -extern int pcre_callout(pcre_callout_block *); -#endif /* VPCOMPAT */ - -/* Exported PCRE functions */ - -extern pcre *pcre_compile(const char *, int, const char **, - int *, const unsigned char *); -extern int pcre_config(int, void *); -extern int pcre_copy_named_substring(const pcre *, const char *, - int *, int, const char *, char *, int); -extern int pcre_copy_substring(const char *, int *, int, int, - char *, int); -extern int pcre_exec(const pcre *, const pcre_extra *, - const char *, int, int, int, int *, int); -extern void pcre_free_substring(const char *); -extern void pcre_free_substring_list(const char **); -extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, - void *); -extern int pcre_get_named_substring(const pcre *, const char *, - int *, int, const char *, const char **); -extern int pcre_get_stringnumber(const pcre *, const char *); -extern int pcre_get_substring(const char *, int *, int, int, - const char **); -extern int pcre_get_substring_list(const char *, int *, int, - const char ***); -extern int pcre_info(const pcre *, int *, int *); -extern const unsigned char *pcre_maketables(void); -extern pcre_extra *pcre_study(const pcre *, int, const char **); -extern const char *pcre_version(void); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* End of pcre.h */ diff --git a/lib/goffice/cut-n-paste/pcre/pcreposix.c b/lib/goffice/cut-n-paste/pcre/pcreposix.c deleted file mode 100644 index fc84b7a031..0000000000 --- a/lib/goffice/cut-n-paste/pcre/pcreposix.c +++ /dev/null @@ -1,310 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see below. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* -This is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. See -the file Tech.Notes for some information on the internals. - -This module is a wrapper that provides a POSIX API to the underlying PCRE -functions. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ -*/ - -#include "internal.h" -#include "pcreposix.h" -#include "stdlib.h" - - - -/* Corresponding tables of PCRE error messages and POSIX error codes. */ - -static const char *const estring[] = { - ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, - ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20, - ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30, - ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40, - ERR41, ERR42, ERR43, ERR44 }; - -static const int eint[] = { - REG_EESCAPE, /* "\\ at end of pattern" */ - REG_EESCAPE, /* "\\c at end of pattern" */ - REG_EESCAPE, /* "unrecognized character follows \\" */ - REG_BADBR, /* "numbers out of order in {} quantifier" */ - REG_BADBR, /* "number too big in {} quantifier" */ - REG_EBRACK, /* "missing terminating ] for character class" */ - REG_ECTYPE, /* "invalid escape sequence in character class" */ - REG_ERANGE, /* "range out of order in character class" */ - REG_BADRPT, /* "nothing to repeat" */ - REG_BADRPT, /* "operand of unlimited repeat could match the empty string" */ - REG_ASSERT, /* "internal error: unexpected repeat" */ - REG_BADPAT, /* "unrecognized character after (?" */ - REG_BADPAT, /* "POSIX named classes are supported only within a class" */ - REG_EPAREN, /* "missing )" */ - REG_ESUBREG, /* "reference to non-existent subpattern" */ - REG_INVARG, /* "erroffset passed as NULL" */ - REG_INVARG, /* "unknown option bit(s) set" */ - REG_EPAREN, /* "missing ) after comment" */ - REG_ESIZE, /* "parentheses nested too deeply" */ - REG_ESIZE, /* "regular expression too large" */ - REG_ESPACE, /* "failed to get memory" */ - REG_EPAREN, /* "unmatched brackets" */ - REG_ASSERT, /* "internal error: code overflow" */ - REG_BADPAT, /* "unrecognized character after (?<" */ - REG_BADPAT, /* "lookbehind assertion is not fixed length" */ - REG_BADPAT, /* "malformed number after (?(" */ - REG_BADPAT, /* "conditional group containe more than two branches" */ - REG_BADPAT, /* "assertion expected after (?(" */ - REG_BADPAT, /* "(?R or (?digits must be followed by )" */ - REG_ECTYPE, /* "unknown POSIX class name" */ - REG_BADPAT, /* "POSIX collating elements are not supported" */ - REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 support" */ - REG_BADPAT, /* "spare error" */ - REG_BADPAT, /* "character value in \x{...} sequence is too large" */ - REG_BADPAT, /* "invalid condition (?(0)" */ - REG_BADPAT, /* "\\C not allowed in lookbehind assertion" */ - REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X" */ - REG_BADPAT, /* "number after (?C is > 255" */ - REG_BADPAT, /* "closing ) for (?C expected" */ - REG_BADPAT, /* "recursive call could loop indefinitely" */ - REG_BADPAT, /* "unrecognized character after (?P" */ - REG_BADPAT, /* "syntax error after (?P" */ - REG_BADPAT, /* "two named groups have the same name" */ - REG_BADPAT /* "invalid UTF-8 string" */ -}; - -/* Table of texts corresponding to POSIX error codes */ - -static const char *const pstring[] = { - "", /* Dummy for value 0 */ - "internal error", /* REG_ASSERT */ - "invalid repeat counts in {}", /* BADBR */ - "pattern error", /* BADPAT */ - "? * + invalid", /* BADRPT */ - "unbalanced {}", /* EBRACE */ - "unbalanced []", /* EBRACK */ - "collation error - not relevant", /* ECOLLATE */ - "bad class", /* ECTYPE */ - "bad escape sequence", /* EESCAPE */ - "empty expression", /* EMPTY */ - "unbalanced ()", /* EPAREN */ - "bad range inside []", /* ERANGE */ - "expression too big", /* ESIZE */ - "failed to get memory", /* ESPACE */ - "bad back reference", /* ESUBREG */ - "bad argument", /* INVARG */ - "match failed" /* NOMATCH */ -}; - - - - -/************************************************* -* Translate PCRE text code to int * -*************************************************/ - -/* PCRE compile-time errors are given as strings defined as macros. We can just -look them up in a table to turn them into POSIX-style error codes. */ - -static int -pcre_posix_error_code(const char *s) -{ -size_t i; -for (i = 0; i < sizeof(estring)/sizeof(char *); i++) - if (strcmp(s, estring[i]) == 0) return eint[i]; -return REG_ASSERT; -} - - - -/************************************************* -* Translate error code to string * -*************************************************/ - -size_t -go_regerror(int errcode, const go_regex_t *preg, char *errbuf, size_t errbuf_size) -{ -const char *message, *addmessage; -size_t length, addlength; - -message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))? - "unknown error code" : pstring[errcode]; -length = strlen(message) + 1; - -addmessage = " at offset "; -addlength = (preg != NULL && (int)preg->re_erroffset != -1)? - strlen(addmessage) + 6 : 0; - -if (errbuf_size > 0) - { - if (addlength > 0 && errbuf_size >= length + addlength) - sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset); - else - { - strncpy(errbuf, message, errbuf_size - 1); - errbuf[errbuf_size-1] = 0; - } - } - -return length + addlength; -} - - - - -/************************************************* -* Free store held by a regex * -*************************************************/ - -void -go_regfree(go_regex_t *preg) -{ -(pcre_free)(preg->re_pcre); -} - - - - -/************************************************* -* Compile a regular expression * -*************************************************/ - -/* -Arguments: - preg points to a structure for recording the compiled expression - pattern the pattern to compile - cflags compilation flags - -Returns: 0 on success - various non-zero codes on failure -*/ - -int -go_regcomp(go_regex_t *preg, const char *pattern, int cflags) -{ -const char *errorptr; -int erroffset; -int options = 0; - -if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS; -if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE; - -preg->re_pcre = pcre_compile(pattern, options | PCRE_UTF8 | PCRE_NO_UTF8_CHECK, &errorptr, &erroffset, NULL); -preg->re_erroffset = erroffset; - -if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr); - -preg->re_nsub = pcre_info((const pcre *)preg->re_pcre, NULL, NULL); -return 0; -} - - - - -/************************************************* -* Match a regular expression * -*************************************************/ - -/* Unfortunately, PCRE requires 3 ints of working space for each captured -substring, so we have to get and release working store instead of just using -the POSIX structures as was done in earlier releases when PCRE needed only 2 -ints. However, if the number of possible capturing brackets is small, use a -block of store on the stack, to reduce the use of malloc/free. The threshold is -in a macro that can be changed at configure time. */ - -int -go_regexec(const go_regex_t *preg, const char *string, size_t nmatch, - regmatch_t pmatch[], int eflags) -{ -int rc; -int options = 0; -int *ovector = NULL; -int small_ovector[POSIX_MALLOC_THRESHOLD * 3]; -BOOL allocated_ovector = FALSE; - -if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL; -if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL; - -((go_regex_t *)preg)->re_erroffset = (size_t)(-1); /* Only has meaning after compile */ - -if (nmatch > 0) - { - if (nmatch <= POSIX_MALLOC_THRESHOLD) - { - ovector = &(small_ovector[0]); - } - else - { - ovector = (int *)malloc(sizeof(int) * nmatch * 3); - if (ovector == NULL) return REG_ESPACE; - allocated_ovector = TRUE; - } - } - -rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string, (int)strlen(string), - 0, options, ovector, nmatch * 3); - -if (rc == 0) rc = nmatch; /* All captured slots were filled in */ - -if (rc >= 0) - { - size_t i; - for (i = 0; i < (size_t)rc; i++) - { - pmatch[i].rm_so = ovector[i*2]; - pmatch[i].rm_eo = ovector[i*2+1]; - } - if (allocated_ovector) free(ovector); - for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1; - return 0; - } - -else - { - if (allocated_ovector) free(ovector); - switch(rc) - { - case PCRE_ERROR_NOMATCH: return REG_NOMATCH; - case PCRE_ERROR_NULL: return REG_INVARG; - case PCRE_ERROR_BADOPTION: return REG_INVARG; - case PCRE_ERROR_BADMAGIC: return REG_INVARG; - case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT; - case PCRE_ERROR_NOMEMORY: return REG_ESPACE; - case PCRE_ERROR_MATCHLIMIT: return REG_ESPACE; - case PCRE_ERROR_BADUTF8: return REG_INVARG; - case PCRE_ERROR_BADUTF8_OFFSET: return REG_INVARG; - default: return REG_ASSERT; - } - } -} - -/* End of pcreposix.c */ diff --git a/lib/goffice/cut-n-paste/pcre/pcreposix.h b/lib/goffice/cut-n-paste/pcre/pcreposix.h deleted file mode 100644 index 51f28c9cef..0000000000 --- a/lib/goffice/cut-n-paste/pcre/pcreposix.h +++ /dev/null @@ -1,93 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see pcreposix.c. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* Copyright (c) 1997-2003 University of Cambridge */ - -#ifndef _PCREPOSIX_H -#define _PCREPOSIX_H - -/* This is the header for the POSIX wrapper interface to the PCRE Perl- -Compatible Regular Expression library. It defines the things POSIX says should -be there. I hope. */ - -/* Have to include stdlib.h in order to ensure that size_t is defined. */ - -#include - -/* Allow for C++ users */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Options defined by POSIX. */ - -#define REG_ICASE 0x01 -#define REG_NEWLINE 0x02 -#define REG_NOTBOL 0x04 -#define REG_NOTEOL 0x08 - -/* These are not used by PCRE, but by defining them we make it easier -to slot PCRE into existing programs that make POSIX calls. */ - -#define REG_EXTENDED 0 -#define REG_NOSUB 0 - -/* Error values. Not all these are relevant or used by the wrapper. */ - -enum { - REG_ASSERT = 1, /* internal error ? */ - REG_BADBR, /* invalid repeat counts in {} */ - REG_BADPAT, /* pattern error */ - REG_BADRPT, /* ? * + invalid */ - REG_EBRACE, /* unbalanced {} */ - REG_EBRACK, /* unbalanced [] */ - REG_ECOLLATE, /* collation error - not relevant */ - REG_ECTYPE, /* bad class */ - REG_EESCAPE, /* bad escape sequence */ - REG_EMPTY, /* empty expression */ - REG_EPAREN, /* unbalanced () */ - REG_ERANGE, /* bad range inside [] */ - REG_ESIZE, /* expression too big */ - REG_ESPACE, /* failed to get memory */ - REG_ESUBREG, /* bad back reference */ - REG_INVARG, /* bad argument */ - REG_NOMATCH /* match failed */ -}; - - -/* The structure representing a compiled regular expression. */ - -typedef struct { - void *re_pcre; - size_t re_nsub; - size_t re_erroffset; -} go_regex_t; - -/* The structure in which a captured offset is returned. */ - -typedef int go_regoff_t; - -typedef struct { - go_regoff_t rm_so; - go_regoff_t rm_eo; -} regmatch_t; - -/* The functions */ - -extern int go_regcomp(go_regex_t *, const char *, int); -extern int go_regexec(const go_regex_t *, const char *, size_t, regmatch_t *, int); -extern size_t go_regerror(int, const go_regex_t *, char *, size_t); -extern void go_regfree(go_regex_t *); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* End of pcreposix.h */ diff --git a/lib/goffice/cut-n-paste/pcre/printint.c b/lib/goffice/cut-n-paste/pcre/printint.c deleted file mode 100644 index e2008e59bc..0000000000 --- a/lib/goffice/cut-n-paste/pcre/printint.c +++ /dev/null @@ -1,365 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see below. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* -This is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. See -the file Tech.Notes for some information on the internals. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ -*/ - - -/* This module contains a debugging function for printing out the internal form -of a compiled regular expression. It is kept in a separate file so that it can -be #included both in the pcretest program, and in the library itself when -compiled with the debugging switch. */ - - -static const char *OP_names[] = { OP_NAME_LIST }; - - -/************************************************* -* Print single- or multi-byte character * -*************************************************/ - -/* These tables are actually copies of ones in pcre.c. If we compile the -library with debugging, they are included twice, but that isn't really a -problem - compiling with debugging is pretty rare and these are very small. */ - -static const int utf8_t3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01}; - -static const uschar utf8_t4[] = { - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; - -static int -print_char(FILE *f, uschar *ptr, BOOL utf8) -{ -int c = *ptr; - -if (!utf8 || (c & 0xc0) != 0xc0) - { - if (g_unichar_isprint(c)) fprintf(f, "%c", c); else fprintf(f, "\\x%02x", c); - return 0; - } -else - { - int i; - int a = utf8_t4[c & 0x3f]; /* Number of additional bytes */ - int s = 6*a; - c = (c & utf8_t3[a]) << s; - for (i = 1; i <= a; i++) - { - s -= 6; - c |= (ptr[i] & 0x3f) << s; - } - if (c < 128) fprintf(f, "\\x%02x", c); else fprintf(f, "\\x{%x}", c); - return a; - } -} - - - - -/************************************************* -* Print compiled regex * -*************************************************/ - -static void -print_internals(pcre *external_re, FILE *f) -{ -real_pcre *re = (real_pcre *)external_re; -uschar *codestart = - (uschar *)re + sizeof(real_pcre) + re->name_count * re->name_entry_size; -uschar *code = codestart; -BOOL utf8 = (re->options & PCRE_UTF8) != 0; - -for(;;) - { - uschar *ccode; - int c; - int extra = 0; - - fprintf(f, "%3d ", code - codestart); - - if (*code >= OP_BRA) - { - if (*code - OP_BRA > EXTRACT_BASIC_MAX) - fprintf(f, "%3d Bra extra\n", GET(code, 1)); - else - fprintf(f, "%3d Bra %d\n", GET(code, 1), *code - OP_BRA); - code += OP_lengths[OP_BRA]; - continue; - } - - switch(*code) - { - case OP_END: - fprintf(f, " %s\n", OP_names[*code]); - fprintf(f, "------------------------------------------------------------------\n"); - return; - - case OP_OPT: - fprintf(f, " %.2x %s", code[1], OP_names[*code]); - break; - - case OP_CHARS: - { - int charlength = code[1]; - ccode = code + 2; - extra = charlength; - fprintf(f, "%3d ", charlength); - while (charlength > 0) - { - int extrabytes = print_char(f, ccode, utf8); - ccode += 1 + extrabytes; - charlength -= 1 + extrabytes; - } - } - break; - - case OP_KETRMAX: - case OP_KETRMIN: - case OP_ALT: - case OP_KET: - case OP_ASSERT: - case OP_ASSERT_NOT: - case OP_ASSERTBACK: - case OP_ASSERTBACK_NOT: - case OP_ONCE: - case OP_COND: - case OP_REVERSE: - fprintf(f, "%3d %s", GET(code, 1), OP_names[*code]); - break; - - case OP_BRANUMBER: - printf("%3d %s", GET2(code, 1), OP_names[*code]); - break; - - case OP_CREF: - if (GET2(code, 1) == CREF_RECURSE) - fprintf(f, " Cond recurse"); - else - fprintf(f, "%3d %s", GET2(code,1), OP_names[*code]); - break; - - case OP_STAR: - case OP_MINSTAR: - case OP_PLUS: - case OP_MINPLUS: - case OP_QUERY: - case OP_MINQUERY: - case OP_TYPESTAR: - case OP_TYPEMINSTAR: - case OP_TYPEPLUS: - case OP_TYPEMINPLUS: - case OP_TYPEQUERY: - case OP_TYPEMINQUERY: - fprintf(f, " "); - if (*code >= OP_TYPESTAR) fprintf(f, "%s", OP_names[code[1]]); - else extra = print_char(f, code+1, utf8); - fprintf(f, "%s", OP_names[*code]); - break; - - case OP_EXACT: - case OP_UPTO: - case OP_MINUPTO: - fprintf(f, " "); - extra = print_char(f, code+3, utf8); - fprintf(f, "{"); - if (*code != OP_EXACT) fprintf(f, ","); - fprintf(f, "%d}", GET2(code,1)); - if (*code == OP_MINUPTO) fprintf(f, "?"); - break; - - case OP_TYPEEXACT: - case OP_TYPEUPTO: - case OP_TYPEMINUPTO: - fprintf(f, " %s{", OP_names[code[3]]); - if (*code != OP_TYPEEXACT) fprintf(f, "0,"); - fprintf(f, "%d}", GET2(code,1)); - if (*code == OP_TYPEMINUPTO) fprintf(f, "?"); - break; - - case OP_NOT: - if (g_unichar_isprint(c = code[1])) fprintf(f, " [^%c]", c); - else fprintf(f, " [^\\x%02x]", c); - break; - - case OP_NOTSTAR: - case OP_NOTMINSTAR: - case OP_NOTPLUS: - case OP_NOTMINPLUS: - case OP_NOTQUERY: - case OP_NOTMINQUERY: - if (g_unichar_isprint(c = code[1])) fprintf(f, " [^%c]", c); - else fprintf(f, " [^\\x%02x]", c); - fprintf(f, "%s", OP_names[*code]); - break; - - case OP_NOTEXACT: - case OP_NOTUPTO: - case OP_NOTMINUPTO: - if (g_unichar_isprint(c = code[3])) fprintf(f, " [^%c]{", c); - else fprintf(f, " [^\\x%02x]{", c); - if (*code != OP_NOTEXACT) fprintf(f, ","); - fprintf(f, "%d}", GET2(code,1)); - if (*code == OP_NOTMINUPTO) fprintf(f, "?"); - break; - - case OP_RECURSE: - fprintf(f, "%3d %s", GET(code, 1), OP_names[*code]); - break; - - case OP_REF: - fprintf(f, " \\%d", GET2(code,1)); - ccode = code + OP_lengths[*code]; - goto CLASS_REF_REPEAT; - - case OP_CALLOUT: - fprintf(f, " %s %d", OP_names[*code], code[1]); - break; - - /* OP_XCLASS can only occur in UTF-8 mode. However, there's no harm in - having this code always here, and it makes it less messy without all those - #ifdefs. */ - - case OP_CLASS: - case OP_NCLASS: - case OP_XCLASS: - { - int i, min, max; - BOOL printmap; - - fprintf(f, " ["); - - if (*code == OP_XCLASS) - { - extra = GET(code, 1); - ccode = code + LINK_SIZE + 1; - printmap = (*ccode & XCL_MAP) != 0; - if ((*ccode++ & XCL_NOT) != 0) fprintf(f, "^"); - } - else - { - printmap = TRUE; - ccode = code + 1; - } - - /* Print a bit map */ - - if (printmap) - { - for (i = 0; i < 256; i++) - { - if ((ccode[i/8] & (1 << (i&7))) != 0) - { - int j; - for (j = i+1; j < 256; j++) - if ((ccode[j/8] & (1 << (j&7))) == 0) break; - if (i == '-' || i == ']') fprintf(f, "\\"); - if (g_unichar_isprint(i)) fprintf(f, "%c", i); else fprintf(f, "\\x%02x", i); - if (--j > i) - { - fprintf(f, "-"); - if (j == '-' || j == ']') fprintf(f, "\\"); - if (g_unichar_isprint(j)) fprintf(f, "%c", j); else fprintf(f, "\\x%02x", j); - } - i = j; - } - } - ccode += 32; - } - - /* For an XCLASS there is always some additional data */ - - if (*code == OP_XCLASS) - { - int ch; - while ((ch = *ccode++) != XCL_END) - { - ccode += 1 + print_char(f, ccode, TRUE); - if (ch == XCL_RANGE) - { - fprintf(f, "-"); - ccode += 1 + print_char(f, ccode, TRUE); - } - } - } - - /* Indicate a non-UTF8 class which was created by negation */ - - fprintf(f, "]%s", (*code == OP_NCLASS)? " (neg)" : ""); - - /* Handle repeats after a class or a back reference */ - - CLASS_REF_REPEAT: - switch(*ccode) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRPLUS: - case OP_CRMINPLUS: - case OP_CRQUERY: - case OP_CRMINQUERY: - fprintf(f, "%s", OP_names[*ccode]); - extra = OP_lengths[*ccode]; - break; - - case OP_CRRANGE: - case OP_CRMINRANGE: - min = GET2(ccode,1); - max = GET2(ccode,3); - if (max == 0) fprintf(f, "{%d,}", min); - else fprintf(f, "{%d,%d}", min, max); - if (*ccode == OP_CRMINRANGE) fprintf(f, "?"); - extra = OP_lengths[*ccode]; - break; - } - } - break; - - /* Anything else is just an item with no data*/ - - default: - fprintf(f, " %s", OP_names[*code]); - break; - } - - code += OP_lengths[*code] + extra; - fprintf(f, "\n"); - } -} - -/* End of printint.c */ diff --git a/lib/goffice/cut-n-paste/pcre/study.c b/lib/goffice/cut-n-paste/pcre/study.c deleted file mode 100644 index 6ba81bb3fb..0000000000 --- a/lib/goffice/cut-n-paste/pcre/study.c +++ /dev/null @@ -1,477 +0,0 @@ -/* File import from pcre to goffice by import-pcre. Do not edit. */ - -/* This file has been programatically changed. */ -/* This makes the following file fall under GPL license, see below. */ - -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* -This is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. See -the file Tech.Notes for some information on the internals. - -Written by: Philip Hazel - - Copyright (c) 1997-2003 University of Cambridge - ------------------------------------------------------------------------------ -Permission is granted to anyone to use this software for any purpose on any -computer system, and to redistribute it freely, subject to the following -restrictions: - -1. This software 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. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -4. If PCRE is embedded in any software that is released under the GNU - General Purpose Licence (GPL), then the terms of that licence shall - supersede any condition above with which it is incompatible. ------------------------------------------------------------------------------ -*/ - - -/* Include the internals header, which itself includes Standard C headers plus -the external pcre header. */ - -#include "internal.h" - - - -/************************************************* -* Set a bit and maybe its alternate case * -*************************************************/ - -/* Given a character, set its bit in the table, and also the bit for the other -version of a letter if we are caseless. - -Arguments: - start_bits points to the bit map - c is the character - caseless the caseless flag - cd the block with char table pointers - -Returns: nothing -*/ - -static void -set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd) -{ -start_bits[c/8] |= (1 << (c&7)); -if (caseless && (cd->ctypes[c] & ctype_letter) != 0) - start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7)); -} - - - -/************************************************* -* Create bitmap of starting chars * -*************************************************/ - -/* This function scans a compiled unanchored expression and attempts to build a -bitmap of the set of initial characters. If it can't, it returns FALSE. As time -goes by, we may be able to get more clever at doing this. - -Arguments: - code points to an expression - start_bits points to a 32-byte table, initialized to 0 - caseless the current state of the caseless flag - utf8 TRUE if in UTF-8 mode - cd the block with char table pointers - -Returns: TRUE if table built, FALSE otherwise -*/ - -static BOOL -set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless, - BOOL utf8, compile_data *cd) -{ -register int c; - -/* This next statement and the later reference to dummy are here in order to -trick the optimizer of the IBM C compiler for OS/2 into generating correct -code. Apparently IBM isn't going to fix the problem, and we would rather not -disable optimization (in this module it actually makes a big difference, and -the pcre module can use all the optimization it can get). */ - -volatile int dummy; - -do - { - const uschar *tcode = code + 1 + LINK_SIZE; - BOOL try_next = TRUE; - - while (try_next) - { - /* If a branch starts with a bracket or a positive lookahead assertion, - recurse to set bits from within them. That's all for this branch. */ - - if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT) - { - if (!set_start_bits(tcode, start_bits, caseless, utf8, cd)) - return FALSE; - try_next = FALSE; - } - - else switch(*tcode) - { - default: - return FALSE; - - /* Skip over callout */ - - case OP_CALLOUT: - tcode += 2; - break; - - /* Skip over extended extraction bracket number */ - - case OP_BRANUMBER: - tcode += 3; - break; - - /* Skip over lookbehind and negative lookahead assertions */ - - case OP_ASSERT_NOT: - case OP_ASSERTBACK: - case OP_ASSERTBACK_NOT: - do tcode += GET(tcode, 1); while (*tcode == OP_ALT); - tcode += 1+LINK_SIZE; - break; - - /* Skip over an option setting, changing the caseless flag */ - - case OP_OPT: - caseless = (tcode[1] & PCRE_CASELESS) != 0; - tcode += 2; - break; - - /* BRAZERO does the bracket, but carries on. */ - - case OP_BRAZERO: - case OP_BRAMINZERO: - if (!set_start_bits(++tcode, start_bits, caseless, utf8, cd)) - return FALSE; - dummy = 1; - do tcode += GET(tcode,1); while (*tcode == OP_ALT); - tcode += 1+LINK_SIZE; - break; - - /* Single-char * or ? sets the bit and tries the next item */ - - case OP_STAR: - case OP_MINSTAR: - case OP_QUERY: - case OP_MINQUERY: - set_bit(start_bits, tcode[1], caseless, cd); - tcode += 2; -#ifdef SUPPORT_UTF8 - if (1 /* utf8 */) while ((*tcode & 0xc0) == 0x80) tcode++; -#endif - break; - - /* Single-char upto sets the bit and tries the next */ - - case OP_UPTO: - case OP_MINUPTO: - set_bit(start_bits, tcode[3], caseless, cd); - tcode += 4; -#ifdef SUPPORT_UTF8 - if (1 /* utf8 */) while ((*tcode & 0xc0) == 0x80) tcode++; -#endif - break; - - /* At least one single char sets the bit and stops */ - - case OP_EXACT: /* Fall through */ - tcode++; - - case OP_CHARS: /* Fall through */ - tcode++; - - case OP_PLUS: - case OP_MINPLUS: - set_bit(start_bits, tcode[1], caseless, cd); - try_next = FALSE; - break; - - /* Single character type sets the bits and stops */ - - case OP_NOT_DIGIT: - for (c = 0; c < 32; c++) - start_bits[c] |= ~cd->cbits[c+cbit_digit]; - try_next = FALSE; - break; - - case OP_DIGIT: - for (c = 0; c < 32; c++) - start_bits[c] |= cd->cbits[c+cbit_digit]; - try_next = FALSE; - break; - - case OP_NOT_WHITESPACE: - for (c = 0; c < 32; c++) - start_bits[c] |= ~cd->cbits[c+cbit_space]; - try_next = FALSE; - break; - - case OP_WHITESPACE: - for (c = 0; c < 32; c++) - start_bits[c] |= cd->cbits[c+cbit_space]; - try_next = FALSE; - break; - - case OP_NOT_WORDCHAR: - for (c = 0; c < 32; c++) - start_bits[c] |= ~cd->cbits[c+cbit_word]; - try_next = FALSE; - break; - - case OP_WORDCHAR: - for (c = 0; c < 32; c++) - start_bits[c] |= cd->cbits[c+cbit_word]; - try_next = FALSE; - break; - - /* One or more character type fudges the pointer and restarts, knowing - it will hit a single character type and stop there. */ - - case OP_TYPEPLUS: - case OP_TYPEMINPLUS: - tcode++; - break; - - case OP_TYPEEXACT: - tcode += 3; - break; - - /* Zero or more repeats of character types set the bits and then - try again. */ - - case OP_TYPEUPTO: - case OP_TYPEMINUPTO: - tcode += 2; /* Fall through */ - - case OP_TYPESTAR: - case OP_TYPEMINSTAR: - case OP_TYPEQUERY: - case OP_TYPEMINQUERY: - switch(tcode[1]) - { - case OP_ANY: - return FALSE; - - case OP_NOT_DIGIT: - for (c = 0; c < 32; c++) - start_bits[c] |= ~cd->cbits[c+cbit_digit]; - break; - - case OP_DIGIT: - for (c = 0; c < 32; c++) - start_bits[c] |= cd->cbits[c+cbit_digit]; - break; - - case OP_NOT_WHITESPACE: - for (c = 0; c < 32; c++) - start_bits[c] |= ~cd->cbits[c+cbit_space]; - break; - - case OP_WHITESPACE: - for (c = 0; c < 32; c++) - start_bits[c] |= cd->cbits[c+cbit_space]; - break; - - case OP_NOT_WORDCHAR: - for (c = 0; c < 32; c++) - start_bits[c] |= ~cd->cbits[c+cbit_word]; - break; - - case OP_WORDCHAR: - for (c = 0; c < 32; c++) - start_bits[c] |= cd->cbits[c+cbit_word]; - break; - } - - tcode += 2; - break; - - /* Character class where all the information is in a bit map: set the - bits and either carry on or not, according to the repeat count. If it was - a negative class, and we are operating with UTF-8 characters, any byte - with a value >= 0xc4 is a potentially valid starter because it starts a - character with a value > 255. */ - - case OP_NCLASS: - if (1 /* utf8 */) - { - start_bits[24] |= 0xf0; /* Bits for 0xc4 - 0xc8 */ - memset(start_bits+25, 0xff, 7); /* Bits for 0xc9 - 0xff */ - } - /* Fall through */ - - case OP_CLASS: - { - tcode++; - - /* In UTF-8 mode, the bits in a bit map correspond to character - values, not to byte values. However, the bit map we are constructing is - for byte values. So we have to do a conversion for characters whose - value is > 127. In fact, there are only two possible starting bytes for - characters in the range 128 - 255. */ - - if (1 /* utf8 */) - { - for (c = 0; c < 16; c++) start_bits[c] |= tcode[c]; - for (c = 128; c < 256; c++) - { - if ((tcode[c/8] && (1 << (c&7))) != 0) - { - int d = (c >> 6) | 0xc0; /* Set bit for this starter */ - start_bits[d/8] |= (1 << (d&7)); /* and then skip on to the */ - c = (c & 0xc0) + 0x40 - 1; /* next relevant character. */ - } - } - } - - /* In non-UTF-8 mode, the two bit maps are completely compatible. */ - - else - { - for (c = 0; c < 32; c++) start_bits[c] |= tcode[c]; - } - - /* Advance past the bit map, and act on what follows */ - - tcode += 32; - switch (*tcode) - { - case OP_CRSTAR: - case OP_CRMINSTAR: - case OP_CRQUERY: - case OP_CRMINQUERY: - tcode++; - break; - - case OP_CRRANGE: - case OP_CRMINRANGE: - if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5; - else try_next = FALSE; - break; - - default: - try_next = FALSE; - break; - } - } - break; /* End of bitmap class handling */ - - } /* End of switch */ - } /* End of try_next loop */ - - code += GET(code, 1); /* Advance to next branch */ - } -while (*code == OP_ALT); -return TRUE; -} - - - -/************************************************* -* Study a compiled expression * -*************************************************/ - -/* This function is handed a compiled expression that it must study to produce -information that will speed up the matching. It returns a pcre_extra block -which then gets handed back to pcre_exec(). - -Arguments: - re points to the compiled expression - options contains option bits - errorptr points to where to place error messages; - set NULL unless error - -Returns: pointer to a pcre_extra block, with study_data filled in and the - appropriate flag set; - NULL on error or if no optimization possible -*/ - -pcre_extra * -pcre_study(const pcre *external_re, int options, const char **errorptr) -{ -uschar start_bits[32]; -pcre_extra *extra; -pcre_study_data *study; -const real_pcre *re = (const real_pcre *)external_re; -uschar *code = (uschar *)re + sizeof(real_pcre) + - (re->name_count * re->name_entry_size); -compile_data compile_block; - -*errorptr = NULL; - -if (re == NULL || re->magic_number != MAGIC_NUMBER) - { - *errorptr = "argument is not a compiled regular expression"; - return NULL; - } - -if ((options & ~PUBLIC_STUDY_OPTIONS) != 0) - { - *errorptr = "unknown or incorrect option bit(s) set"; - return NULL; - } - -/* For an anchored pattern, or an unanchored pattern that has a first char, or -a multiline pattern that matches only at "line starts", no further processing -at present. */ - -if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0) - return NULL; - -/* Set the character tables in the block which is passed around */ - -compile_block.lcc = re->tables + lcc_offset; -compile_block.fcc = re->tables + fcc_offset; -compile_block.cbits = re->tables + cbits_offset; -compile_block.ctypes = re->tables + ctypes_offset; - -/* See if we can find a fixed set of initial characters for the pattern. */ - -memset(start_bits, 0, 32 * sizeof(uschar)); -if (!set_start_bits(code, start_bits, (re->options & PCRE_CASELESS) != 0, - (re->options & PCRE_UTF8) != 0, &compile_block)) return NULL; - -/* Get a pcre_extra block and a pcre_study_data block. The study data is put in -the latter, which is pointed to by the former, which may also get additional -data set later by the calling program. At the moment, the size of -pcre_study_data is fixed. We nevertheless save it in a field for returning via -the pcre_fullinfo() function so that if it becomes variable in the future, we -don't have to change that code. */ - -extra = (pcre_extra *)(pcre_malloc) - (sizeof(pcre_extra) + sizeof(pcre_study_data)); - -if (extra == NULL) - { - *errorptr = "failed to get memory"; - return NULL; - } - -study = (pcre_study_data *)((char *)extra + sizeof(pcre_extra)); -extra->flags = PCRE_EXTRA_STUDY_DATA; -extra->study_data = study; - -study->size = sizeof(pcre_study_data); -study->options = PCRE_STUDY_MAPPED; -memcpy(study->start_bits, start_bits, sizeof(start_bits)); - -return extra; -} - -/* End of study.c */ diff --git a/lib/goffice/goffice-config.h b/lib/goffice/goffice-config.h deleted file mode 100644 index 825e38e0b0..0000000000 --- a/lib/goffice/goffice-config.h +++ /dev/null @@ -1,4 +0,0 @@ -/* - * When the module splits we'll make this a real file - */ -#include diff --git a/lib/goffice/goffice-plugins.mk b/lib/goffice/goffice-plugins.mk deleted file mode 100644 index d312ba20e9..0000000000 --- a/lib/goffice/goffice-plugins.mk +++ /dev/null @@ -1,10 +0,0 @@ -INCLUDES = \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/lib/goffice \ - -I$(top_srcdir)/lib/goffice/split \ - $(GNUCASH_CFLAGS) - -GNUCASH_PLUGIN_LDFLAGS = -GOFFICE_PLUGIN_FLAGS = $(GNUCASH_PLUGIN_LDFLAGS) - -AM_CFLAGS = ${GLIB_CFLAGS} ${XML_CFLAGS} ${GSF_CFLAGS} ${ART_CFLAGS} ${GNOME_CFLAGS} ${GDK_PIXBUF_CLFAGS} ${GLADE_CFLAGS} diff --git a/lib/goffice/goffice.mk b/lib/goffice/goffice.mk deleted file mode 100644 index 49c6d8d698..0000000000 --- a/lib/goffice/goffice.mk +++ /dev/null @@ -1,8 +0,0 @@ -# prune this when the code moves -INCLUDES = -I$(top_srcdir)/lib/goffice \ - -I$(top_srcdir)/lib/goffice/split \ - -I$(top_srcdir)/lib \ - $(GNUCASH_CFLAGS) - -GOFFICE_PLUGIN_FLAGS = -# GOFFICE_PLUGIN_FLAGS = $(GNUCASH_PLUGIN_LDFLAGS) diff --git a/lib/goffice/graph/gog-chart.c b/lib/goffice/graph/gog-chart.c deleted file mode 100644 index 5ba702dc99..0000000000 --- a/lib/goffice/graph/gog-chart.c +++ /dev/null @@ -1,759 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gog-chart.c : - * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -enum { - CHART_PROP_0, - CHART_PROP_CARDINALITY_VALID -}; - -static GType gog_chart_view_get_type (void); -static GObjectClass *chart_parent_klass; - -static void -gog_chart_update (GogObject *obj) -{ - GogChart *chart = GOG_CHART (obj); - unsigned full = chart->full_cardinality; - unsigned visible = chart->visible_cardinality; - - gog_chart_get_cardinality (chart, NULL, NULL); - - if (full != chart->full_cardinality || - visible != chart->visible_cardinality) - g_object_notify (G_OBJECT (chart), "cardinality-valid"); -} - -static void -gog_chart_finalize (GObject *obj) -{ - GogChart *chart = GOG_CHART (obj); - - /* on exit the role remove routines are not called */ - g_slist_free (chart->plots); - g_slist_free (chart->axes); - - (chart_parent_klass->finalize) (obj); -} - -static void -gog_chart_get_property (GObject *obj, guint param_id, - GValue *value, GParamSpec *pspec) -{ - GogChart *chart = GOG_CHART (obj); - switch (param_id) { - case CHART_PROP_CARDINALITY_VALID: - g_value_set_boolean (value, chart->cardinality_valid); - break; - - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); - break; - } -} - -static void -gog_chart_children_reordered (GogObject *obj) -{ - GSList *ptr, *accum = NULL; - GogChart *chart = GOG_CHART (obj); - - for (ptr = obj->children; ptr != NULL ; ptr = ptr->next) - if (IS_GOG_PLOT (ptr->data)) - accum = g_slist_prepend (accum, ptr->data); - g_slist_free (chart->plots); - chart->plots = g_slist_reverse (accum); - - gog_chart_request_cardinality_update (chart); -} - -static void -role_plot_post_add (GogObject *parent, GogObject *plot) -{ - GogChart *chart = GOG_CHART (parent); - gboolean ok = TRUE; - - /* APPEND to keep order, there won't be that many */ - chart->plots = g_slist_append (chart->plots, plot); - gog_chart_request_cardinality_update (chart); - - if (chart->plots->next == NULL) - ok = gog_chart_axis_set_assign (chart, - gog_plot_axis_set_pref (GOG_PLOT (plot))); - ok |= gog_plot_axis_set_assign (GOG_PLOT (plot), - chart->axis_set); - - /* a quick post condition to keep us on our toes */ - g_return_if_fail (ok); -} - -static void -role_plot_pre_remove (GogObject *parent, GogObject *plot) -{ - GogChart *chart = GOG_CHART (parent); - gog_plot_axis_clear (GOG_PLOT (plot), GOG_AXIS_SET_ALL); - chart->plots = g_slist_remove (chart->plots, plot); - gog_chart_request_cardinality_update (chart); -} - -static gboolean -role_grid_can_add (GogObject const *parent) -{ - GogChart const *chart = GOG_CHART (parent); - return chart->grid == NULL && chart->axis_set == GOG_AXIS_SET_XY; -} -static void -role_grid_post_add (GogObject *parent, GogObject *child) -{ - GogChart *chart = GOG_CHART (parent); - g_return_if_fail (chart->grid == NULL); - chart->grid = child; -} - -static void -role_grid_pre_remove (GogObject *parent, GogObject *grid) -{ - GogChart *chart = GOG_CHART (parent); - g_return_if_fail (chart->grid == grid); - chart->grid = NULL; -} - -static gboolean -axis_can_add (GogObject const *parent, GogAxisType t) -{ - GogChart *chart = GOG_CHART (parent); - if (chart->axis_set == GOG_AXIS_SET_UNKNOWN) - return FALSE; - return (chart->axis_set & (1 << t)) != 0; -} -static gboolean -axis_can_remove (GogObject const *child) -{ - return NULL == gog_axis_contributors (GOG_AXIS (child)); -} - -static void -axis_post_add (GogObject *axis, GogAxisType t) -{ - GogChart *chart = GOG_CHART (axis->parent); - g_object_set (G_OBJECT (axis), "type", (int)t, NULL); - chart->axes = g_slist_prepend (chart->axes, axis); -} - -static void -axis_pre_remove (GogObject *parent, GogObject *axis) -{ - GogChart *chart = GOG_CHART (parent); - gog_axis_clear_contributors (GOG_AXIS (axis)); - chart->axes = g_slist_remove (chart->axes, axis); -} - -static gboolean x_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_X); } -static void x_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_X); } -static gboolean y_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_Y); } -static void y_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_Y); } -static gboolean z_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_Z); } -static void z_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_Z); } -static gboolean circular_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_CIRCULAR); } -static void circular_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_CIRCULAR); } -static gboolean radial_axis_can_add (GogObject const *parent) { return axis_can_add (parent, GOG_AXIS_RADIAL); } -static void radial_axis_post_add (GogObject *parent, GogObject *child) { axis_post_add (child, GOG_AXIS_RADIAL); } - -static GogObjectRole const roles[] = { - { N_("Legend"), "GogLegend", 0, - GOG_POSITION_COMPASS, GOG_POSITION_E|GOG_POSITION_ALIGN_CENTER, GOG_OBJECT_NAME_BY_ROLE, - NULL, NULL, NULL, NULL, NULL, NULL, { -1 } }, - { N_("Title"), "GogLabel", 1, - GOG_POSITION_COMPASS, GOG_POSITION_N|GOG_POSITION_ALIGN_CENTER, GOG_OBJECT_NAME_BY_ROLE, - NULL, NULL, NULL, NULL, NULL, NULL, { -1 } }, - { N_("Grid"), "GogGrid", 0, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - role_grid_can_add, NULL, NULL, role_grid_post_add, role_grid_pre_remove, NULL, { -1 } }, - { N_("X-Axis"), "GogAxis", 1, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - x_axis_can_add, axis_can_remove, NULL, x_axis_post_add, axis_pre_remove, NULL, - { GOG_AXIS_X } }, - { N_("Y-Axis"), "GogAxis", 2, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - y_axis_can_add, axis_can_remove, NULL, y_axis_post_add, axis_pre_remove, NULL, - { GOG_AXIS_Y } }, - { N_("Z-Axis"), "GogAxis", 3, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - z_axis_can_add, axis_can_remove, NULL, z_axis_post_add, axis_pre_remove, NULL, - { GOG_AXIS_Z } }, - { N_("Circular-Axis"), "GogAxis", 1, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - circular_axis_can_add, axis_can_remove, NULL, circular_axis_post_add, axis_pre_remove, NULL, - { GOG_AXIS_CIRCULAR } }, - { N_("Radial-Axis"), "GogAxis", 2, - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_ROLE, - radial_axis_can_add, axis_can_remove, NULL, radial_axis_post_add, axis_pre_remove, NULL, - { GOG_AXIS_RADIAL } }, - { N_("Plot"), "GogPlot", 4, /* keep the axis before the plots */ - GOG_POSITION_SPECIAL, GOG_POSITION_SPECIAL, GOG_OBJECT_NAME_BY_TYPE, - NULL, NULL, NULL, role_plot_post_add, role_plot_pre_remove, NULL, { -1 } } -}; - -static void -gog_chart_class_init (GogObjectClass *gog_klass) -{ - GObjectClass *gobject_klass = (GObjectClass *)gog_klass; - - chart_parent_klass = g_type_class_peek_parent (gog_klass); - gobject_klass->finalize = gog_chart_finalize; - gobject_klass->get_property = gog_chart_get_property; - - g_object_class_install_property (gobject_klass, CHART_PROP_CARDINALITY_VALID, - g_param_spec_boolean ("cardinality-valid", "cardinality-valid", - "Is the charts cardinality currently vaid", - FALSE, G_PARAM_READABLE)); - - gog_klass->view_type = gog_chart_view_get_type (); - gog_klass->update = gog_chart_update; - gog_klass->children_reordered = gog_chart_children_reordered; - gog_object_register_roles (gog_klass, roles, G_N_ELEMENTS (roles)); -} - -static void -gog_chart_init (GogChart *chart) -{ - chart->x = 0; - chart->y = 0; - chart->cols = 0; - chart->rows = 0; - - /* start as true so that we can queue an update when it changes */ - chart->cardinality_valid = TRUE; - chart->axis_set = GOG_AXIS_SET_UNKNOWN; -} - -GSF_CLASS (GogChart, gog_chart, - gog_chart_class_init, gog_chart_init, - GOG_OUTLINED_OBJECT_TYPE) - -/** - * gog_chart_get_position : - * @chart : const #GogChart - * @x : - * @y : - * @cols : - * @rows : - * - * Returns TRUE if the chart has been positioned. - **/ -gboolean -gog_chart_get_position (GogChart const *chart, - unsigned *x, unsigned *y, unsigned *cols, unsigned *rows) -{ - g_return_val_if_fail (GOG_CHART (chart), FALSE); - - if (chart->cols <= 0 || chart->rows <= 0) - return FALSE; - - if (x != NULL) *x = chart->x; - if (y != NULL) *y = chart->y; - if (cols != NULL) *cols = chart->cols; - if (rows != NULL) *rows = chart->rows; - - return TRUE; -} - -/** - * gog_chart_set_position : - * @chart : #GogChart - * @x : - * @y : - * @cols : - * @rows : - * - **/ -void -gog_chart_set_position (GogChart *chart, - unsigned x, unsigned y, unsigned cols, unsigned rows) -{ - g_return_if_fail (GOG_CHART (chart) != NULL); - - if (chart->x == x && chart->y == y && - chart->cols == cols && chart->rows == rows) - return; - - chart->x = x; - chart->y = y; - chart->cols = cols; - chart->rows = rows; - - gog_graph_validate_chart_layout (GOG_GRAPH (GOG_OBJECT (chart)->parent)); - gog_object_emit_changed (GOG_OBJECT (chart), TRUE); -} - -void -gog_chart_get_cardinality (GogChart *chart, unsigned *full, unsigned *visible) -{ - GSList *ptr; - unsigned tmp_full, tmp_visible; - - g_return_if_fail (GOG_CHART (chart) != NULL); - - if (!chart->cardinality_valid) { - chart->cardinality_valid = TRUE; - chart->full_cardinality = chart->visible_cardinality = 0; - for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) { - gog_plot_get_cardinality (ptr->data, &tmp_full, &tmp_visible); - chart->full_cardinality += tmp_full; - chart->visible_cardinality += tmp_visible; - } - } - - if (full != NULL) - *full = chart->full_cardinality; - if (visible != NULL) - *visible = chart->visible_cardinality; -} - -void -gog_chart_request_cardinality_update (GogChart *chart) -{ - g_return_if_fail (GOG_CHART (chart) != NULL); - - if (chart->cardinality_valid) { - chart->cardinality_valid = FALSE; - gog_object_request_update (GOG_OBJECT (chart)); - } -} - -void -gog_chart_foreach_elem (GogChart *chart, gboolean only_visible, - GogEnumFunc handler, gpointer data) -{ - GSList *ptr; - - g_return_if_fail (GOG_CHART (chart) != NULL); - g_return_if_fail (chart->cardinality_valid); - - for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) - gog_plot_foreach_elem (ptr->data, only_visible, handler, data); -} - -GSList * -gog_chart_get_plots (GogChart const *chart) -{ - g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); - return chart->plots; -} - -GogAxisSet -gog_chart_axis_set (GogChart const *chart) -{ - g_return_val_if_fail (GOG_CHART (chart) != NULL, GOG_AXIS_SET_UNKNOWN); - return chart->axis_set; -} - -gboolean -gog_chart_axis_set_is_valid (GogChart const *chart, GogAxisSet type) -{ - GSList *ptr; - - g_return_val_if_fail (GOG_CHART (chart) != NULL, FALSE); - - for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) - if (!gog_plot_axis_set_is_valid (ptr->data, type)) - return FALSE; - return TRUE; -} - -static void -gog_chart_add_axis (GogChart *chart, GogAxisType type) -{ - unsigned i = G_N_ELEMENTS (roles); - while (i-- > 0) - if (roles[i].user.i == (int)type) { - gog_object_add_by_role (GOG_OBJECT (chart), roles + i, NULL); - return; - } - g_warning ("unknown axis type %d", type); -} - -gboolean -gog_chart_axis_set_assign (GogChart *chart, GogAxisSet axis_set) -{ - GogAxis *axis; - GSList *ptr; - GogAxisType type; - - g_return_val_if_fail (GOG_CHART (chart) != NULL, FALSE); - - if (chart->axis_set == axis_set) - return TRUE; - chart->axis_set = axis_set; - - if (chart->grid != NULL && axis_set != GOG_AXIS_SET_XY) { - GogObject *grid = chart->grid; /* clear_parent clears ::grid */ - gog_object_clear_parent (GOG_OBJECT (grid)); - g_object_unref (grid); - } else if (chart->grid == NULL && axis_set == GOG_AXIS_SET_XY) - gog_object_add_by_name (GOG_OBJECT (chart), "Grid", NULL); - - /* Add at least 1 instance of any required axis */ - for (type = 0 ; type < GOG_AXIS_TYPES ; type++) - if ((axis_set & (1 << type))) { - GSList *tmp = gog_chart_get_axis (chart, type); - if (tmp == NULL) - gog_chart_add_axis (chart, type); - else - g_slist_free (tmp); - } - - /* link the plots */ - for (ptr = chart->plots ; ptr != NULL ; ptr = ptr->next) - if (!gog_plot_axis_set_assign (ptr->data, axis_set)) - return FALSE; - - /* remove any existing axis that do not fit this scheme */ - for (ptr = GOG_OBJECT (chart)->children ; ptr != NULL ; ) { - axis = ptr->data; - ptr = ptr->next; /* list may change under us */ - if (IS_GOG_AXIS (axis)) { - type = -1; - g_object_get (G_OBJECT (axis), "type", &type, NULL); - if (type < 0 || type >= GOG_AXIS_TYPES) { - g_warning ("Invalid axis"); - continue; - } - - if (0 == (axis_set & (1 << type))) { - gog_object_clear_parent (GOG_OBJECT (axis)); - g_object_unref (axis); - } - } - } - - return TRUE; -} - -/** - * gog_chart_get_axis : - * @chart : #GogChart - * @target : #GogAxisType - * - * Return a list which the caller must free of all axis of type @target - * associated with @chart. - **/ -GSList * -gog_chart_get_axis (GogChart const *chart, GogAxisType target) -{ - GSList *ptr, *res = NULL; - GogAxis *axis; - int type; - - g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); - - for (ptr = GOG_OBJECT (chart)->children ; ptr != NULL ; ptr = ptr->next) { - axis = ptr->data; - if (IS_GOG_AXIS (axis)) { - type = -1; - g_object_get (G_OBJECT (axis), "type", &type, NULL); - if (type < 0 || type >= GOG_AXIS_TYPES) { - g_warning ("Invalid axis"); - continue; - } - if (type == target) - res = g_slist_prepend (res, axis); - } - } - - return res; -} - -/** - * gog_chart_get_grid : - * @chart : #GogChart - * - * Returns the grid associated with @chart if one exists - * otherwise NULL. - **/ -GogGrid * -gog_chart_get_grid (GogChart const *chart) -{ - g_return_val_if_fail (GOG_CHART (chart) != NULL, NULL); - return GOG_GRID (chart->grid); -} - -/*********************************************************************/ - -typedef struct { - GogOutlinedView base; - - GogViewAllocation plot_area; -} GogChartView; -typedef GogOutlinedViewClass GogChartViewClass; - -#define GOG_CHART_VIEW_TYPE (gog_chart_view_get_type ()) -#define GOG_CHART_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_CHART_VIEW_TYPE, GogChartView)) -#define IS_GOG_CHART_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_CHART_VIEW_TYPE)) - -static GogViewClass *cview_parent_klass; - -GogViewAllocation const * -gog_chart_view_get_plot_area (GogView const *view) -{ - g_return_val_if_fail ((GOG_CHART_VIEW (view) != NULL), NULL); - - return & (GOG_CHART_VIEW(view)->plot_area); -} - -static void -child_request (GogView *view, GogViewAllocation *res, - GogViewAllocation const *plot_area, - gboolean allocate) -{ - GSList *ptr; - GogView *child; - GogAxis const *axis; - GogViewRequisition req; - GogViewAllocation allocation; - - for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { - child = ptr->data; - if (child->model->position != GOG_POSITION_SPECIAL || - !IS_GOG_AXIS (child->model)) - continue; - - axis = GOG_AXIS (child->model); - req.w = req.h = 0.; - gog_view_size_request (child, &req); - allocation = *plot_area; - switch (gog_axis_get_atype (axis)) { - case GOG_AXIS_X: - if (req.h > 0) { - res->h -= req.h; - allocation.h = req.h; - if (gog_axis_get_pos (axis) == GOG_AXIS_AT_HIGH) { - allocation.y = res->y; - res->y += req.h; - } else - allocation.y = res->y + res->h; - } - - - break; - case GOG_AXIS_Y: - if (req.w > 0) { - res->w -= req.w; - allocation.w = req.w; - if (gog_axis_get_pos (axis) == GOG_AXIS_AT_LOW) { - allocation.x = res->x; - res->x += req.w; - } else - allocation.x = res->x + res->w; - } - break; - default: - break; - } - if (allocate) - gog_view_size_allocate (child, &allocation); - } -} - -static void -gog_chart_view_size_allocate (GogView *view, GogViewAllocation const *allocation) -{ - GSList *ptr; - GogView *child; - GogChart *chart = GOG_CHART (view->model); - GogViewAllocation res = *allocation; - GogViewAllocation tmp, axis_alloc; - - (cview_parent_klass->size_allocate) (view, &res); - - res = view->residual; - switch (chart->axis_set) { - - case GOG_AXIS_SET_XY: - { - GogViewPadding axis_padding, padding = {0., 0., 0., 0.}; - - tmp = res; - child_request (view, &res, &res, FALSE); - - /* FIXME: we need to iterate until convergence */ - for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { - child = ptr->data; - if (child->model->position != GOG_POSITION_SPECIAL || - !IS_GOG_AXIS (child->model)) - continue; - - gog_axis_view_padding_request (child, &axis_padding, &res); - padding.wr = MAX (padding.wr, axis_padding.wr); - padding.wl = MAX (padding.wl, axis_padding.wl); - padding.hb = MAX (padding.hb, axis_padding.hb); - padding.ht = MAX (padding.ht, axis_padding.ht); - } - res.x += padding.wl; - res.w -= padding.wl + padding.wr; - res.y += padding.ht; - res.h -= padding.ht + padding.hb; - - for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { - child = ptr->data; - if (child->model->position != GOG_POSITION_SPECIAL || - !IS_GOG_AXIS (child->model)) - continue; - - switch (gog_axis_get_atype (GOG_AXIS (child->model))) - { - case GOG_AXIS_X: - axis_alloc = tmp; - axis_alloc.x = res.x; - axis_alloc.w = res.w; - gog_view_size_allocate (child, &axis_alloc); - break; - - case GOG_AXIS_Y: - axis_alloc = tmp; - axis_alloc.y = res.y; - axis_alloc.h = res.h; - gog_view_size_allocate (child, &axis_alloc); - break; - - default: - break; - } - } - } - break; - - case GOG_AXIS_SET_RADAR: - /* Give the axes the whole residual area. */ - for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { - child = ptr->data; - if (IS_GOG_AXIS (child->model)) - gog_view_size_allocate (child, &res); - } - break; - case GOG_AXIS_SET_NONE: - break; - - case GOG_AXIS_SET_UNKNOWN: - return; - default: - g_warning ("only have layout engine for xy, radar, and none currently"); - return; - } - - /* overlay all the plots in the residual */ - for (ptr = view->children; ptr != NULL ; ptr = ptr->next) { - child = ptr->data; - if (child->model->position == GOG_POSITION_SPECIAL && - (IS_GOG_PLOT (child->model) || child->model == chart->grid)) - gog_view_size_allocate (child, &res); - } - - GOG_CHART_VIEW(view)->plot_area = res; -} - -static void -gog_chart_view_init (GogChartView *cview) -{ -} - -static void -grid_line_render (GSList *start_ptr, GogViewAllocation const *bbox) -{ - GSList *ptr, *child_ptr; - GogView *child_view, *axis_child_view; - - /* Render minor lines first */ - for (ptr = start_ptr; ptr != NULL; ptr = ptr->next) { - child_view = ptr->data; - if (IS_GOG_AXIS (child_view->model)) { - for (child_ptr = child_view->children; child_ptr != NULL; child_ptr = child_ptr->next) { - axis_child_view = child_ptr->data; - if (IS_GOG_GRID_LINE (axis_child_view->model) && - gog_grid_line_is_minor (GOG_GRID_LINE (axis_child_view->model))) - gog_view_render (axis_child_view, bbox); - } - } - } - /* then render major lines */ - for (ptr = start_ptr; ptr != NULL; ptr = ptr->next) { - child_view = ptr->data; - if (IS_GOG_AXIS (child_view->model)) { - for (child_ptr = child_view->children; child_ptr != NULL; child_ptr = child_ptr->next) { - axis_child_view = child_ptr->data; - if (IS_GOG_GRID_LINE (axis_child_view->model) && - !gog_grid_line_is_minor (GOG_GRID_LINE (axis_child_view->model))) - gog_view_render (axis_child_view, bbox); - } - } - } -} - -static void -gog_chart_view_render (GogView *view, GogViewAllocation const *bbox) -{ - GSList *ptr; - GogView *child_view; - gboolean grid_line_rendered = FALSE; - - cview_parent_klass->render (view, bbox); - - /* KLUDGE: render grid lines before axis */ - for (ptr = view->children ; ptr != NULL ; ptr = ptr->next) { - child_view = ptr->data; - if (!grid_line_rendered && IS_GOG_AXIS (child_view->model)) { - grid_line_render (ptr, bbox); - grid_line_rendered = TRUE; - } - gog_view_render (ptr->data, bbox); - } -} - -static void -gog_chart_view_class_init (GogChartViewClass *gview_klass) -{ - GogViewClass *view_klass = (GogViewClass *) gview_klass; - GogOutlinedViewClass *oview_klass = (GogOutlinedViewClass *) gview_klass; - - cview_parent_klass = g_type_class_peek_parent (gview_klass); - view_klass->size_allocate = gog_chart_view_size_allocate; - view_klass->clip = TRUE; - view_klass->render = gog_chart_view_render; - oview_klass->call_parent_render = FALSE; -} - -static GSF_CLASS (GogChartView, gog_chart_view, - gog_chart_view_class_init, gog_chart_view_init, - GOG_OUTLINED_VIEW_TYPE) diff --git a/lib/goffice/graph/gog-label.c b/lib/goffice/graph/gog-label.c deleted file mode 100644 index 5103724ad2..0000000000 --- a/lib/goffice/graph/gog-label.c +++ /dev/null @@ -1,254 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gog-label.c - * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// #include -#include -#include - -#include -#include -#include -#include -#include - -struct _GogLabel { - GogOutlinedObject base; - - GogDatasetElement text; - gboolean allow_markup; -}; -typedef GogStyledObjectClass GogLabelClass; - -enum { - LABEL_PROP_0, - LABEL_PROP_ALLOW_MARKUP, -}; - -static GType gog_label_view_get_type (void); -static GObjectClass *label_parent_klass; -static GogViewClass *lview_parent_klass; - -static void -gog_label_set_property (GObject *obj, guint param_id, - GValue const *value, GParamSpec *pspec) -{ - GogLabel *label = GOG_LABEL (obj); - - switch (param_id) { - case LABEL_PROP_ALLOW_MARKUP : - label->allow_markup = g_value_get_boolean (value); - break; - - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); - return; /* NOTE : RETURN */ - } - gog_object_emit_changed (GOG_OBJECT (obj), FALSE); -} - -static void -gog_label_get_property (GObject *obj, guint param_id, - GValue *value, GParamSpec *pspec) -{ - GogLabel *label = GOG_LABEL (obj); - - switch (param_id) { - case LABEL_PROP_ALLOW_MARKUP : - g_value_set_boolean (value, label->allow_markup); - break; - - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); - break; - } -} - -static void -gog_label_finalize (GObject *obj) -{ - gog_dataset_finalize (GOG_DATASET (obj)); - (*label_parent_klass->finalize) (obj); -} - -static gpointer -gog_label_editor (GogObject *gobj, GogDataAllocator *dalloc, GnmCmdContext *cc) -{ - static guint label_pref_page = 0; - GtkWidget *notebook = gtk_notebook_new (); - GtkWidget *hbox = gtk_hbox_new (FALSE, 12); - GtkWidget *alignment = gtk_alignment_new (0, 0, 1, 0); - - gtk_container_set_border_width (GTK_CONTAINER (alignment), 12); - gtk_box_pack_start (GTK_BOX (hbox), - gtk_label_new_with_mnemonic (_("_Text:")), FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (hbox), - gog_data_allocator_editor (dalloc, GOG_DATASET (gobj), 0, GOG_DATA_SCALAR), - TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (alignment), hbox); - gtk_widget_show_all (alignment); - gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), alignment, - gtk_label_new (_("Data"))); - gog_styled_object_editor (GOG_STYLED_OBJECT (gobj), cc, notebook); - gog_style_handle_notebook (notebook, &label_pref_page); - return notebook; -} - -static void -gog_label_init_style (GogStyledObject *gso, GogStyle *style) -{ - style->interesting_fields = GOG_STYLE_OUTLINE | GOG_STYLE_FILL | GOG_STYLE_FONT; - gog_theme_fillin_style (gog_object_get_theme (GOG_OBJECT (gso)), - style, GOG_OBJECT (gso), 0, FALSE); -} - -static void -gog_label_class_init (GogLabelClass *klass) -{ - GObjectClass *gobject_klass = (GObjectClass *) klass; - GogObjectClass *gog_klass = (GogObjectClass *) klass; - GogStyledObjectClass *style_klass = (GogStyledObjectClass *) klass; - - label_parent_klass = g_type_class_peek_parent (klass); - gobject_klass->set_property = gog_label_set_property; - gobject_klass->get_property = gog_label_get_property; - gobject_klass->finalize = gog_label_finalize; - g_object_class_install_property (gobject_klass, LABEL_PROP_ALLOW_MARKUP, - g_param_spec_boolean ("allow-markup", "allow-markup", - "Support basic html-ish markup", - TRUE, G_PARAM_READWRITE|GOG_PARAM_PERSISTENT)); - - gog_klass->editor = gog_label_editor; - gog_klass->view_type = gog_label_view_get_type (); - style_klass->init_style = gog_label_init_style; -} - -static void -gog_label_dims (GogDataset const *set, int *first, int *last) -{ - *first = *last = 0; -} - -static GogDatasetElement * -gog_label_get_elem (GogDataset const *set, int dim_i) -{ - GogLabel *label = GOG_LABEL (set); - return &label->text; -} - -static void -gog_label_dim_changed (GogDataset *set, int dim_i) -{ - gog_object_emit_changed (GOG_OBJECT (set), TRUE); -} - -static void -gog_label_dataset_init (GogDatasetClass *iface) -{ - iface->dims = gog_label_dims; - iface->get_elem = gog_label_get_elem; - iface->dim_changed = gog_label_dim_changed; -} - -GSF_CLASS_FULL (GogLabel, gog_label, - gog_label_class_init, NULL, - GOG_OUTLINED_OBJECT_TYPE, 0, - GSF_INTERFACE (gog_label_dataset_init, GOG_DATASET_TYPE)) - -/************************************************************************/ - -typedef GogOutlinedView GogLabelView; -typedef GogOutlinedViewClass GogLabelViewClass; - -#define GOG_LABEL_VIEW_TYPE (gog_label_view_get_type ()) -#define GOG_LABEL_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_LABEL_VIEW_TYPE, GogLabelView)) -#define IS_GOG_LABEL_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_LABEL_VIEW_TYPE)) - -static void -gog_label_view_size_request (GogView *v, GogViewRequisition *req) -{ - GogLabel *l = GOG_LABEL (v->model); - - req->w = req->h = 0.; - if (l->text.data != NULL) { - char const *text = go_data_scalar_get_str (GO_DATA_SCALAR (l->text.data)); - if (text != NULL) { - gog_renderer_push_style (v->renderer, l->base.base.style); - gog_renderer_measure_text (v->renderer, text, req); - gog_renderer_pop_style (v->renderer); - } - } - lview_parent_klass->size_request (v, req); -} - -static void -gog_label_view_render (GogView *view, GogViewAllocation const *bbox) -{ - GogLabel *l = GOG_LABEL (view->model); - GogOutlinedObject *goo = GOG_OUTLINED_OBJECT (view->model); - GogStyle *style = l->base.base.style; - - gog_renderer_push_style (view->renderer, style); - if (l->text.data != NULL) { - char const *text = go_data_scalar_get_str (GO_DATA_SCALAR (l->text.data)); - if (text != NULL) { - double outline = gog_renderer_line_size ( - view->renderer, goo->base.style->outline.width); - if (style->fill.type != GOG_FILL_STYLE_NONE || outline > 0.) { - GogViewRequisition req; - GogViewAllocation rect; - double pad_x = gog_renderer_pt2r_x (view->renderer, goo->padding_pts); - double pad_y = gog_renderer_pt2r_y (view->renderer, goo->padding_pts); - - gog_renderer_measure_text (view->renderer, text, &req); - rect = view->allocation; - rect.w = req.w + 2. * outline + pad_x; - rect.h = req.h + 2. * outline + pad_y; - gog_renderer_draw_sharp_rectangle (view->renderer, &rect, NULL); - } - gog_renderer_draw_text (view->renderer, text, - &view->residual, GTK_ANCHOR_NW, NULL); - } - } - gog_renderer_pop_style (view->renderer); -} - -static void -gog_label_view_class_init (GogLabelViewClass *gview_klass) -{ - GogViewClass *view_klass = (GogViewClass *) gview_klass; - - lview_parent_klass = g_type_class_peek_parent (gview_klass); - view_klass->size_request = gog_label_view_size_request; - view_klass->render = gog_label_view_render; -} - -static GSF_CLASS (GogLabelView, gog_label_view, - gog_label_view_class_init, NULL, - GOG_OUTLINED_VIEW_TYPE) diff --git a/lib/goffice/graph/gog-object.c b/lib/goffice/graph/gog-object.c deleted file mode 100644 index e0a38aa66c..0000000000 --- a/lib/goffice/graph/gog-object.c +++ /dev/null @@ -1,873 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gog-object.c : - * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include -#include /* for gog_graph_request_update */ -#include -#include - -#include -#include -#include -#include - -enum { - CHILD_ADDED, - CHILD_REMOVED, - CHILD_NAME_CHANGED, - CHILDREN_REORDERED, - NAME_CHANGED, - CHANGED, - LAST_SIGNAL -}; -static gulong gog_object_signals [LAST_SIGNAL] = { 0, }; - -static GObjectClass *parent_klass; -static void -gog_object_finalize (GObject *gobj) -{ - GogObject *obj = GOG_OBJECT (gobj); - - g_free (obj->user_name); obj->user_name = NULL; - g_free (obj->id); obj->id = NULL; - - g_slist_foreach (obj->children, (GFunc) g_object_unref, NULL); - g_slist_free (obj->children); - obj->children = NULL; - - (parent_klass->finalize) (gobj); -} - -static void -gog_object_parent_changed (GogObject *child, gboolean was_set) -{ - GSList *ptr = child->children; - for (; ptr != NULL ; ptr = ptr->next) { - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (ptr->data); - (*klass->parent_changed) (ptr->data, was_set); - } - - if (IS_GOG_DATASET (child)) - gog_dataset_parent_changed (GOG_DATASET (child), was_set); -} - -static void -gog_object_class_init (GObjectClass *klass) -{ - GogObjectClass *gog_klass = (GogObjectClass *)klass; - parent_klass = g_type_class_peek_parent (klass); - klass->finalize = gog_object_finalize; - gog_klass->parent_changed = gog_object_parent_changed; - - gog_object_signals [CHILD_ADDED] = g_signal_new ("child-added", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GogObjectClass, child_added), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_OBJECT); - gog_object_signals [CHILD_REMOVED] = g_signal_new ("child-removed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GogObjectClass, child_removed), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_OBJECT); - gog_object_signals [CHILD_NAME_CHANGED] = g_signal_new ("child-name-changed", - G_TYPE_FROM_CLASS (gog_klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GogObjectClass, child_name_changed), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, G_TYPE_OBJECT); - gog_object_signals [CHILDREN_REORDERED] = g_signal_new ("children-reordered", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GogObjectClass, children_reordered), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - gog_object_signals [NAME_CHANGED] = g_signal_new ("name-changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GogObjectClass, name_changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - gog_object_signals [CHANGED] = g_signal_new ("changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GogObjectClass, changed), - NULL, NULL, - g_cclosure_marshal_VOID__BOOLEAN, - G_TYPE_NONE, 1, G_TYPE_BOOLEAN); -} - -static void -gog_object_init (GogObject *obj) -{ - obj->children = NULL; - obj->user_name = NULL; - obj->id = NULL; - obj->needs_update = FALSE; - obj->being_updated = FALSE; -} - -GSF_CLASS (GogObject, gog_object, - gog_object_class_init, gog_object_init, - G_TYPE_OBJECT) - -static char * -gog_object_generate_name (GogObject *obj) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); - GogObject *tmp; - char const *type_name; - unsigned name_len, i, max_index = 0; - GSList *ptr; - - g_return_val_if_fail (klass != NULL, NULL); - g_return_val_if_fail (obj->role != NULL, NULL); - - switch (obj->role->naming_conv) { - default : - case GOG_OBJECT_NAME_MANUALLY : - g_warning ("Role %s should not be autogenerating names", - obj->role->id); - - case GOG_OBJECT_NAME_BY_ROLE : - g_return_val_if_fail (obj->role != NULL, NULL); - type_name = _(obj->role->id); - break; - - case GOG_OBJECT_NAME_BY_TYPE : - g_return_val_if_fail (klass->type_name != NULL, NULL); - type_name = _((*klass->type_name) (obj)); - break; - } - - g_return_val_if_fail (type_name != NULL, NULL); - name_len = strlen (type_name); - - for (ptr = obj->parent->children; ptr != NULL ; ptr = ptr->next) { - tmp = GOG_OBJECT (ptr->data); - if (tmp->id != NULL && - 0 == strncmp (type_name, tmp->id, name_len)) { - i = strtol (tmp->id + name_len, NULL, 10); - if (max_index < i) - max_index = i; - } - } - return g_strdup_printf ("%s%d", type_name, max_index + 1); -} - -/** - * gog_object_dup : - * @src : #GogObject - * @new_parent : #GogObject the parent tree for the object (can be NULL) - * - * Create a deep copy of @obj using @new_parent as its parent. - **/ -GogObject * -gog_object_dup (GogObject const *src, GogObject *new_parent) -{ - gint n, last; - GParamSpec **props; - GogObject *dst = NULL; - GSList *ptr; - GValue val = { 0 }; - - if (src == NULL) - return NULL; - - g_return_val_if_fail (GOG_OBJECT (src) != NULL, NULL); - - if (src->role == NULL || src->explicitly_typed_role) - dst = g_object_new (G_OBJECT_TYPE (src), NULL); - if (new_parent) - dst = gog_object_add_by_role (new_parent, src->role, dst); - - dst->position = src->position; - /* properties */ - props = g_object_class_list_properties (G_OBJECT_GET_CLASS (src), &n); - while (n-- > 0) - if (props[n]->flags & GOG_PARAM_PERSISTENT) { - g_value_init (&val, props[n]->value_type); - g_object_get_property (G_OBJECT (src), props[n]->name, &val); - g_object_set_property (G_OBJECT (dst), props[n]->name, &val); - g_value_unset (&val); - } - g_free (props); - - if (IS_GOG_DATASET (src)) { /* convenience to save data */ - GogDataset const *src_set = GOG_DATASET (src); - GogDataset *dst_set = GOG_DATASET (dst); - - gog_dataset_dims (src_set, &n, &last); - for ( ; n <= last ; n++) - gog_dataset_set_dim (dst_set, n, - go_data_dup (gog_dataset_get_dim (src_set, n)), - NULL); - } - - for (ptr = src->children; ptr != NULL ; ptr = ptr->next) - /* children added directly to new parent, no need to use the - * function result */ - gog_object_dup (ptr->data, dst); - - return dst; -} - -/** - * gog_object_get_parent : - * @obj : a #GogObject - * - * Returns @obj's parent, potentially NULL if it has not been added to a - * heirarchy yet. does not change ref-count in any way. - **/ -GogObject * -gog_object_get_parent (GogObject const *obj) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); - return obj->parent; -} - -/** - * gog_object_get_parent_typed : - * @obj : a #GogObject - * @type : a #GType - * - * Returns @obj's parent of type @type, potentially NULL if it has not been - * added to a heirarchy yet or none of the parents are of type @type. - **/ -GogObject * -gog_object_get_parent_typed (GogObject const *obj, GType t) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); - - for (; obj != NULL ; obj = obj->parent) - if (G_TYPE_CHECK_INSTANCE_TYPE (obj, t)) - return GOG_OBJECT (obj); /* const cast */ - return NULL; -} - -/** - * gog_object_get_graph : - * @obj : const * #GogObject - * - * Returns the parent graph. - **/ -GogGraph * -gog_object_get_graph (GogObject const *obj) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); - - for (; obj != NULL ; obj = obj->parent) - if (IS_GOG_GRAPH (obj)) - return GOG_GRAPH (obj); - return NULL; -} - -GogTheme * -gog_object_get_theme (GogObject const *obj) -{ - GogGraph *graph = gog_object_get_graph (obj); - - return (graph != NULL) ? gog_graph_get_theme (graph) : NULL; -} - -/** - * gog_object_get_name : - * @obj : a #GogObject - * - * No need to free the result - **/ -char const * -gog_object_get_name (GogObject const *obj) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); - return (obj->user_name != NULL && *obj->user_name != '\0') ? obj->user_name : obj->id; -} - -/** - * gog_object_set_name : - * @obj : #GogObject - * @name : - * @err : #GError - * - * Assign the new name and signals that it has changed. - * NOTE : it _absorbs_ @name rather than copying it, and generates a new name - * if @name == NULL - **/ -void -gog_object_set_name (GogObject *obj, char *name, GError **err) -{ - GogObject *tmp; - - g_return_if_fail (GOG_OBJECT (obj) != NULL); - - if (obj->user_name == name) - return; - g_free (obj->user_name); - obj->user_name = name; - - g_signal_emit (G_OBJECT (obj), - gog_object_signals [NAME_CHANGED], 0); - - for (tmp = obj; tmp != NULL ; tmp = tmp->parent) - g_signal_emit (G_OBJECT (tmp), - gog_object_signals [CHILD_NAME_CHANGED], 0, obj); -} - -/** - * gog_object_get_children : - * @obj : a #GogObject - * @filter : an optional #GogObjectRole to use as a filter - * - * The list needs to be Freed - **/ -GSList * -gog_object_get_children (GogObject const *obj, GogObjectRole const *filter) -{ - GSList *ptr, *res = NULL; - - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); - - if (filter == NULL) - return g_slist_copy (obj->children); - - for (ptr = obj->children ; ptr != NULL ; ptr = ptr->next) - if (GOG_OBJECT (ptr->data)->role == filter) - res = g_slist_prepend (res, ptr->data); - return g_slist_reverse (res); -} - -/** - * gog_object_get_child_by_role : - * @obj : a #GogObject - * @role : a #GogObjectRole to use as a filter - * - * A convenience routine to handle a unique child - * Returns NULL and spews an error if there is more than one. - **/ -GogObject * -gog_object_get_child_by_role (GogObject const *obj, GogObjectRole const *role) -{ - GogObject *res = NULL; - GSList *children = gog_object_get_children (obj, role); - - if (children != NULL && children->next == NULL) - res = children->data; - g_slist_free (children); - return res; -} - -/** - * gog_object_is_deletable : - * @obj : a #GogObject - * - * Can the specified @obj be deleted ? - **/ -gboolean -gog_object_is_deletable (GogObject const *obj) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, FALSE); - - if (IS_GOG_GRAPH (obj)) - return FALSE; - - return obj->role == NULL || obj->role->can_remove == NULL || - (obj->role->can_remove) (obj); -} - -struct possible_add_closure { - GSList *res; - GogObject const *parent; -}; - -static void -cb_collect_possible_additions (char const *name, GogObjectRole const *role, - struct possible_add_closure *data) -{ - if (role->can_add == NULL || (role->can_add) (data->parent)) - data->res = g_slist_prepend (data->res, (gpointer)role); -} - -static int -gog_object_position_cmp (GogObjectPosition pos) -{ - if (pos & GOG_POSITION_COMPASS) - return 0; - if (pos == GOG_POSITION_SPECIAL) - return 2; - return 1; /* GOG_POSITION_MANUAL */ -} - -static int -gog_role_cmp (GogObjectRole const *a, GogObjectRole const *b) -{ - int index_a = gog_object_position_cmp (a->allowable_positions); - int index_b = gog_object_position_cmp (b->allowable_positions); - - /* intentionally reverse to put SPECIAL at the top */ - if (index_a < index_b) - return 1; - else if (index_a > index_b) - return -1; - return b->priority - a->priority; -} - -static int -gog_role_cmp_full (GogObjectRole const *a, GogObjectRole const *b) -{ - int res = gog_role_cmp (a, b); - if (res != 0) - return res; - return g_utf8_collate (a->id, b->id); -} - -/** - * gog_object_possible_additions : - * @parent : a #GogObject - * - * returns a list of GogObjectRoles that could be added - * - * The resulting list needs to be freed - **/ -GSList * -gog_object_possible_additions (GogObject const *parent) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (parent); - g_return_val_if_fail (klass != NULL, NULL); - - if (klass->roles != NULL) { - struct possible_add_closure data; - data.res = NULL; - data.parent = parent; - - g_hash_table_foreach (klass->roles, - (GHFunc) cb_collect_possible_additions, &data); - - return g_slist_sort (data.res, (GCompareFunc) gog_role_cmp_full); - } - - return NULL; -} - -/** - * gog_object_can_reorder : - * @obj : #GogObject - * @inc_ok : possibly NULL pointer. - * @dec_ok : possibly NULL pointer. - * - * If @obj can move forward or backward in its parents child list - **/ -void -gog_object_can_reorder (GogObject const *obj, gboolean *inc_ok, gboolean *dec_ok) -{ - GogObject const *parent; - GSList *ptr; - - g_return_if_fail (GOG_OBJECT (obj) != NULL); - - if (inc_ok != NULL) - *inc_ok = FALSE; - if (dec_ok != NULL) - *dec_ok = FALSE; - - if (obj->parent == NULL || gog_object_get_graph (obj) == NULL) - return; - parent = obj->parent; - ptr = parent->children; - - g_return_if_fail (ptr != NULL); - - /* find a pointer to the previous sibling */ - if (ptr->data != obj) { - while (ptr->next != NULL && ptr->next->data != obj) - ptr = ptr->next; - - g_return_if_fail (ptr->next != NULL); - - if (inc_ok != NULL && - !gog_role_cmp (((GogObject *)ptr->data)->role, obj->role)) - *inc_ok = TRUE; - - ptr = ptr->next; - } - - /* ptr now points at @obj */ - if (dec_ok != NULL && ptr->next != NULL && - !gog_role_cmp (obj->role, ((GogObject *)ptr->next->data)->role)) - *dec_ok = TRUE; -} - -/** - * gog_object_reorder : - * @obj : #GogObject - * @inc : - * @goto_max : - * - * Returns the object just before @obj in the new ordering. - **/ -GogObject * -gog_object_reorder (GogObject const *obj, gboolean inc, gboolean goto_max) -{ - GogObject *parent, *obj_follows; - GSList **ptr, *tmp; - - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, NULL); - - if (obj->parent == NULL || gog_object_get_graph (obj) == NULL) - return NULL; - parent = obj->parent; - - if (inc) - parent->children = g_slist_reverse (parent->children); - - for (ptr = &parent->children; *ptr != NULL && (*ptr)->data != obj ;) - ptr = &(*ptr)->next; - - g_return_val_if_fail (*ptr != NULL, NULL); - g_return_val_if_fail ((*ptr)->next != NULL, NULL); - - tmp = *ptr; - *ptr = tmp->next; - ptr = &(*ptr)->next; - - while (goto_max && *ptr != NULL && - !gog_role_cmp (obj->role, ((GogObject *)((*ptr)->data))->role)) - ptr = &(*ptr)->next; - - tmp->next = *ptr; - *ptr = tmp; - - if (inc) - parent->children = g_slist_reverse (parent->children); - - if (parent->children->data != obj) { - for (tmp = parent->children ; tmp->next->data != obj ; ) - tmp = tmp->next; - obj_follows = tmp->data; - } else - obj_follows = NULL; - - /* Pass the sibling that precedes obj, or NULL if is the head */ - g_signal_emit (G_OBJECT (parent), - gog_object_signals [CHILDREN_REORDERED], 0); - gog_object_emit_changed (parent, TRUE); - - return obj_follows; -} - -/** - * gog_object_get_editor : - * @obj : #GogObject - * @dalloc : #GogDataAllocator - * @cc : #GnmCmdContext - * - **/ -gpointer -gog_object_get_editor (GogObject *obj, GogDataAllocator *dalloc, - GnmCmdContext *cc) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); - g_return_val_if_fail (klass != NULL, NULL); - if (klass->editor) { - /* If there are pending updates do them before creating the editor - * to avoid expensive widget changes later */ - gog_graph_force_update (gog_object_get_graph (obj)); - return (*klass->editor) (obj, dalloc, cc); - } - return NULL; -} - -/** - * gog_object_new_view : - * @obj : a #GogObject - * @data : - **/ -GogView * -gog_object_new_view (GogObject const *obj, GogView *parent) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); - - g_return_val_if_fail (klass != NULL, NULL); - - if (klass->view_type != 0) - /* set model before parent */ - return g_object_new (klass->view_type, - "model", obj, - "parent", parent, - NULL); - - return NULL; -} - -void -gog_object_update (GogObject *obj) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); - GSList *ptr; - - g_return_if_fail (klass != NULL); - - ptr = obj->children; /* depth first */ - for (; ptr != NULL ; ptr = ptr->next) - gog_object_update (ptr->data); - - if (obj->needs_update) { - obj->needs_update = FALSE; - obj->being_updated = TRUE; - gog_debug (0, g_warning ("updating %s (%p)", G_OBJECT_TYPE_NAME (obj), obj);); - if (klass->update != NULL) - (*klass->update) (obj); - obj->being_updated = FALSE; - } -} - -gboolean -gog_object_request_update (GogObject *obj) -{ - GogGraph *graph; - g_return_val_if_fail (GOG_OBJECT (obj), FALSE); - g_return_val_if_fail (!obj->being_updated, FALSE); - - if (obj->needs_update) - return FALSE; - - graph = gog_object_get_graph (obj); - if (graph == NULL) /* we are not linked into a graph yet */ - return FALSE; - - gog_graph_request_update (graph); - obj->needs_update = TRUE; - - return TRUE; -} - -void -gog_object_emit_changed (GogObject *obj, gboolean resize) -{ - GogObjectClass *gog_klass; - - g_return_if_fail (GOG_OBJECT (obj)); - - gog_klass = GOG_OBJECT_GET_CLASS (obj); - - if (gog_klass->use_parent_as_proxy) { - obj = obj->parent; - if (obj != NULL) { - g_return_if_fail (IS_GOG_OBJECT (obj)); - gog_object_emit_changed (obj, resize); - } - return; - } - g_signal_emit (G_OBJECT (obj), - gog_object_signals [CHANGED], 0, resize); -} - -/******************************************************************************/ - -/** - * gog_object_clear_parent : - * @obj : #GogObject - * - * Does _not_ unref the child, which in effect adds a ref by freeing up the ref - * previously associated with the parent. - **/ -gboolean -gog_object_clear_parent (GogObject *obj) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); - GogObject *parent; - - g_return_val_if_fail (GOG_OBJECT (obj), FALSE); - g_return_val_if_fail (obj->parent != NULL, FALSE); - g_return_val_if_fail (gog_object_is_deletable (obj), FALSE); - - parent = obj->parent; - g_signal_emit (G_OBJECT (parent), - gog_object_signals [CHILD_REMOVED], 0, obj); - (*klass->parent_changed) (obj, FALSE); - - if (obj->role != NULL && obj->role->pre_remove != NULL) - (obj->role->pre_remove) (parent, obj); - - parent->children = g_slist_remove (parent->children, obj); - obj->parent = NULL; - - if (obj->role != NULL && obj->role->post_remove != NULL) - (obj->role->post_remove) (parent, obj); - - obj->role = NULL; - - return TRUE; -} - -/** - * gog_object_set_parent : - * @child : #GogObject. - * @parent : #GogObject. - * @id : optionally %NULL. - * @role : a static string that can be sent to @parent::add - * - * Absorbs a ref to @child - **/ -gboolean -gog_object_set_parent (GogObject *child, GogObject *parent, - GogObjectRole const *role, char *id) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (child); - GSList **step; - - g_return_val_if_fail (GOG_OBJECT (child), FALSE); - g_return_val_if_fail (child->parent == NULL, FALSE); - g_return_val_if_fail (role != NULL, FALSE); - - child->parent = parent; - child->role = role; - child->position = role->default_position; - - /* Insert sorted based on hokey little ordering */ - step = &parent->children; - while (*step != NULL && - gog_role_cmp_full (GOG_OBJECT ((*step)->data)->role, role) >= 0) - step = &((*step)->next); - *step = g_slist_prepend (*step, child); - - g_free (child->id); - g_free (child->user_name); - child->id = (id != NULL) ? id : gog_object_generate_name (child); - if (child->id == NULL) child->id = g_strdup ("BROKEN"); - - if (role->post_add != NULL) - (role->post_add) (parent, child); - (*klass->parent_changed) (child, TRUE); - - g_signal_emit (G_OBJECT (parent), - gog_object_signals [CHILD_ADDED], 0, child); - - return TRUE; -} - -GogObject * -gog_object_add_by_role (GogObject *parent, GogObjectRole const *role, GogObject *child) -{ - GType is_a; - gboolean const explicitly_typed_role = (child != NULL); - - g_return_val_if_fail (role != NULL, NULL); - g_return_val_if_fail (GOG_OBJECT (parent) != NULL, NULL); - - is_a = g_type_from_name (role->is_a_typename); - - g_return_val_if_fail (is_a != 0, NULL); - - if (child == NULL) - child = (role->allocate) - ? (role->allocate) (parent) - : g_object_new (is_a, NULL); - - g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (child, is_a), NULL); - child->explicitly_typed_role = explicitly_typed_role; - if (gog_object_set_parent (child, parent, role, NULL)) - return child; - g_object_unref (child); - return NULL; -} - -/** - * gog_object_add_by_name : - * @parent : #GogObject - * @role : - * @child : optionally null #GogObject - * - * Returns a newly created child of @parent in @role. If @child is provided, - * it is assumed to be an unaffiliated object that will be assigned in @role. - * On failure return NULL. - **/ -GogObject * -gog_object_add_by_name (GogObject *parent, - char const *role, GogObject *child) -{ - return gog_object_add_by_role (parent, - gog_object_find_role_by_name (parent, role), child); -} - -GogObjectPosition -gog_object_get_pos (GogObject const *obj) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, GOG_POSITION_SPECIAL); - return obj->position; -} - -/** - * gog_object_set_pos : - * @obj : #GogObject - * @pos : #GogObjectPosition - * - * Attempts to set the position of @obj to @pos. - * Returns TRUE the new position is permitted. - **/ -gboolean -gog_object_set_pos (GogObject *obj, GogObjectPosition pos) -{ - g_return_val_if_fail (GOG_OBJECT (obj) != NULL, FALSE); - g_return_val_if_fail (obj->role != NULL, FALSE); - - if (obj->position == pos) - return TRUE; - - if ((obj->role->allowable_positions & pos) != - (pos & (GOG_POSITION_COMPASS|GOG_POSITION_ANY_MANUAL))) - return FALSE; - obj->position = pos; - gog_object_emit_changed (obj, TRUE); - return TRUE; -} - -GogObjectRole const * -gog_object_find_role_by_name (GogObject const *obj, char const *role) -{ - GogObjectClass *klass = GOG_OBJECT_GET_CLASS (obj); - - g_return_val_if_fail (klass != NULL, NULL); - - return g_hash_table_lookup (klass->roles, role); -} - -void -gog_object_register_roles (GogObjectClass *klass, - GogObjectRole const *roles, unsigned n_roles) -{ - unsigned i; - if (klass->roles == NULL) - klass->roles = g_hash_table_new (g_str_hash, g_str_equal); - - for (i = 0 ; i < n_roles ; i++) { - g_return_if_fail (g_hash_table_lookup (klass->roles, - (gpointer )roles[i].id) == NULL); - g_hash_table_replace (klass->roles, - (gpointer )roles[i].id, (gpointer) (roles + i)); - } -} diff --git a/lib/goffice/graph/plugins/Makefile.am b/lib/goffice/graph/plugins/Makefile.am deleted file mode 100644 index efa89c46d8..0000000000 --- a/lib/goffice/graph/plugins/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = plot_pie plot_barcol plot_xy plot_radar plot_surface diff --git a/lib/goffice/graph/plugins/plot_radar/gog-radar.c b/lib/goffice/graph/plugins/plot_radar/gog-radar.c deleted file mode 100644 index 9947398ad6..0000000000 --- a/lib/goffice/graph/plugins/plot_radar/gog-radar.c +++ /dev/null @@ -1,492 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gog-radar.c - * - * Copyright (C) 2004 Michael Devine (mdevine@cs.stanford.edu) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include "gog-radar.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -typedef struct { - GogPlotClass base; -} GogRadarPlotClass; - -enum { - PLOT_PROP_0, - PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS -}; - -GNUMERIC_MODULE_PLUGIN_INFO_DECL; - -typedef struct { - GogSeries base; -} GogRadarSeries; -typedef GogSeriesClass GogRadarSeriesClass; - -#define GOG_RADAR_SERIES_TYPE (gog_radar_series_get_type ()) -#define GOG_RADAR_SERIES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RADAR_SERIES_TYPE, GogRadarSeries)) -#define GOG_IS_RADAR_SERIES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_RADAR_SERIES_TYPE)) - -static GType gog_radar_series_get_type (void); -static GType gog_radar_view_get_type (void); - -/*----------------------------------------------------------------------------- - * - * GogRadarPlot - * - *----------------------------------------------------------------------------- - */ - -/* - * Accessor for setting GOGRadarPlot member variables. - * - * \param obj The radar plot as a GObject. Must not be NULL. - */ -static void -gog_radar_plot_set_property (GObject *obj, guint param_id, - GValue const *value, GParamSpec *pspec) -{ - GogRadarPlot *radar = GOG_RADAR_PLOT (obj); - - switch (param_id) { - case PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS: - radar->default_style_has_markers = g_value_get_boolean (value); - break; - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); - return; /* NOTE : RETURN */ - } - gog_object_emit_changed (GOG_OBJECT (obj), TRUE); -} - -/* - * Accessor for getting GOGRadarPlot member variables. - */ -static void -gog_radar_plot_get_property (GObject *obj, guint param_id, - GValue *value, GParamSpec *pspec) -{ - GogRadarPlot *radar = GOG_RADAR_PLOT (obj); - - switch (param_id) { - case PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS: - g_value_set_boolean (value, radar->default_style_has_markers); - break; - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec); - break; - } -} - -static char const * -gog_radar_plot_type_name (G_GNUC_UNUSED GogObject const *item) -{ - /* xgettext : the base for how to name radar plot objects - * eg The 2nd radar plot in a chart will be called - * PlotRadar2 */ - return N_("PlotRadar"); -} - -static void -gog_radar_plot_update (GogObject *obj) -{ - GogRadarPlot * model = GOG_RADAR_PLOT(obj); - GogRadarSeries const *series; - unsigned num_elements = 0; - double val_min, val_max, tmp_min, tmp_max; - GSList *ptr; - - val_min = DBL_MAX; - val_max = -DBL_MAX; - for (ptr = model->base.series; ptr != NULL; ptr = ptr->next) { - series = ptr->data; - if (!gog_series_is_valid (GOG_SERIES (series))) - continue; - - if (num_elements < series->base.num_elements) - num_elements = series->base.num_elements; - go_data_vector_get_minmax (GO_DATA_VECTOR ( - series->base.values[1].data), &tmp_min, &tmp_max); - if (val_min > tmp_min) val_min = tmp_min; - if (val_max < tmp_max) val_max = tmp_max; - } - - model->num_elements = num_elements; - - if (model->minima != val_min || model->maxima != val_max) { - model->minima = val_min; - model->maxima = val_max; - gog_axis_bound_changed (model->base.axis [GOG_AXIS_RADIAL], GOG_OBJECT (model)); - } - - gog_object_emit_changed (GOG_OBJECT (obj), FALSE); -} - -static GogAxisSet -gog_radar_plot_axis_set_pref (GogPlot const *plot) -{ - return GOG_AXIS_SET_RADAR; -} - -static gboolean -gog_radar_plot_axis_set_is_valid (GogPlot const *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_RADAR; -} - -static gboolean -gog_radar_plot_axis_set_assign (GogPlot *plot, GogAxisSet type) -{ - return type == GOG_AXIS_SET_RADAR; -} - -static GOData * -gog_radar_plot_axis_get_bounds (GogPlot *plot, GogAxisType axis, - GogPlotBoundInfo * bounds) -{ - GSList *ptr; - GogRadarPlot *radar = GOG_RADAR_PLOT (plot); - - switch (axis) { - case GOG_AXIS_CIRCULAR: - bounds->val.minima = 0.; - bounds->val.maxima = radar->num_elements; - bounds->logical.minima = 0.; - bounds->logical.maxima = go_nan; - bounds->is_discrete = TRUE; - - for (ptr = plot->series; ptr != NULL ; ptr = ptr->next) - if (gog_series_is_valid (GOG_SERIES (ptr->data))) - return GOG_SERIES (ptr->data)->values[0].data; - break; - case GOG_AXIS_RADIAL: - /* clip at the outer bound, but allow inner to round nicely */ - bounds->val.minima = radar->minima; - bounds->val.maxima = bounds->logical.maxima = radar->maxima; - bounds->is_discrete = FALSE; - break; - default: - g_warning("gog_radar_plot_axis_bounds: bad axis"); - break; - } - - return NULL; -} - -static void -gog_radar_plot_class_init (GogPlotClass *gog_plot_klass) -{ - GObjectClass *gobject_klass = (GObjectClass *) gog_plot_klass; - GogObjectClass *gog_object_klass = (GogObjectClass *) gog_plot_klass; - - /* Override methods of GObject */ - gobject_klass->set_property = gog_radar_plot_set_property; - gobject_klass->get_property = gog_radar_plot_get_property; - - /* Fill in GOGObject superclass values */ - gog_object_klass->update = gog_radar_plot_update; - gog_object_klass->type_name = gog_radar_plot_type_name; - gog_object_klass->view_type = gog_radar_view_get_type (); - - g_object_class_install_property (gobject_klass, - PLOT_PROP_DEFAULT_STYLE_HAS_MARKERS, - g_param_spec_boolean ("default-style-has-markers", NULL, - "Should the default style of a series include markers", - FALSE, G_PARAM_READWRITE | GOG_PARAM_PERSISTENT)); - - { - static GogSeriesDimDesc dimensions[] = { - { N_("Labels"), GOG_SERIES_SUGGESTED, TRUE, - GOG_DIM_LABEL, GOG_MS_DIM_CATEGORIES }, - { N_("Values"), GOG_SERIES_REQUIRED, FALSE, - GOG_DIM_VALUE, GOG_MS_DIM_VALUES } - }; - gog_plot_klass->desc.series.dim = dimensions; - gog_plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions); - gog_plot_klass->desc.series.style_fields = (GOG_STYLE_LINE - | GOG_STYLE_MARKER); - } - - /* Fill in GogPlotClass methods */ - gog_plot_klass->desc.num_series_min = 1; - gog_plot_klass->desc.num_series_max = G_MAXINT; - gog_plot_klass->series_type = gog_radar_series_get_type(); - gog_plot_klass->axis_set_pref = gog_radar_plot_axis_set_pref; - gog_plot_klass->axis_set_is_valid = gog_radar_plot_axis_set_is_valid; - gog_plot_klass->axis_set_assign = gog_radar_plot_axis_set_assign; - gog_plot_klass->axis_get_bounds = gog_radar_plot_axis_get_bounds; -} - -static void -gog_radar_plot_init (GogRadarPlot *radar) -{ - radar->base.vary_style_by_element = FALSE; - radar->default_style_has_markers = FALSE; - radar->num_elements = 0; -} - -GSF_CLASS (GogRadarPlot, gog_radar_plot, - gog_radar_plot_class_init, gog_radar_plot_init, - GOG_PLOT_TYPE) - -/*****************************************************************************/ - -#define GOG_RADAR_AREA_PLOT_TYPE (gog_radar_area_plot_get_type ()) -#define GOG_RADAR_AREA_PLOT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_RADAR_AREA_PLOT_TYPE, GogRadarAreaPlot)) -#define GOG_IS_PLOT_RADAR_AREA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_RADAR_AREA_PLOT_TYPE)) - -typedef GogRadarPlot GogRadarAreaPlot; -typedef GogRadarPlotClass GogRadarAreaPlotClass; - -GType gog_radar_area_plot_get_type (void); - -static char const * -gog_radar_area_plot_type_name (G_GNUC_UNUSED GogObject const *item) -{ - /* xgettext : the base for how to name bar/col plot objects - * eg The 2nd line plot in a chart will be called - * PlotRadarArea2 - */ - return N_("PlotRadarArea"); -} -static void -gog_radar_area_plot_class_init (GogObjectClass *gog_klass) -{ - GogPlotClass *plot_klass = (GogPlotClass *) gog_klass; - - plot_klass->desc.series.style_fields = GOG_STYLE_OUTLINE | GOG_STYLE_FILL; - plot_klass->series_type = gog_radar_series_get_type(); - - gog_klass->type_name = gog_radar_area_plot_type_name; -} -GSF_CLASS (GogRadarAreaPlot, gog_radar_area_plot, - gog_radar_area_plot_class_init, NULL, - GOG_RADAR_PLOT_TYPE) - -/*****************************************************************************/ - -typedef GogPlotView GogRadarView; -typedef GogPlotViewClass GogRadarViewClass; - -#ifndef HAVE_FMIN -static double -fmin (double a, double b) -{ - return (a < b) ? a : b; -} -#endif - -static void -gog_radar_view_render (GogView *view, GogViewAllocation const *bbox) -{ - GogRadarPlot const *model = GOG_RADAR_PLOT (view->model); - unsigned center_x, center_y; - GSList *ptr; - ArtVpath *path; - gboolean const is_area = GOG_IS_PLOT_RADAR_AREA (model); - GogAxisMap *map; - - map = gog_axis_map_new (GOG_PLOT (model)->axis[GOG_AXIS_RADIAL], - 0., - fmin (view->allocation.h, view->allocation.w) / 2.0); - - if (!gog_axis_map_is_valid (map)) { - gog_axis_map_free (map); - return; - } - - /* center things */ - center_x = view->allocation.x + view->allocation.w/2.0; - center_y = view->allocation.y + view->allocation.h/2.0; - - path = g_alloca ((model->num_elements + 2) * sizeof (ArtVpath)); - for (ptr = model->base.series; ptr != NULL; ptr = ptr->next) { - - GogRadarSeries *series = GOG_RADAR_SERIES (ptr->data); - GogStyle *style; - gboolean closed_shape; - unsigned count; - double *vals; - - if (!gog_series_is_valid (GOG_SERIES (series))) - continue; - - style = GOG_STYLED_OBJECT (series)->style; - - gog_renderer_push_style (view->renderer, style); - - closed_shape = (series->base.num_elements == model->num_elements); - vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[1].data)); - for (count = 0; count < series->base.num_elements; count++) { - double rho, theta, x, y; - - if (!go_finite (vals [count])) { - closed_shape = FALSE; - continue; - } - - theta = count * 2.0 * M_PI / model->num_elements; - rho = gog_axis_map_to_canvas (map, vals[count]); - - x = center_x + rho * sin (theta); - y = center_y - rho * cos (theta); - - path[count].code = ((count != 0 && !isnan (vals[count-1])) - ? ART_LINETO : ART_MOVETO); - path[count].x = x; - path[count].y = y; - - gog_renderer_draw_marker(view->renderer, x, y); - } - - if (series->base.num_elements == model->num_elements - && go_finite(vals[count-1])) { - path[count].code = ART_LINETO; - path[count].x = path[0].x; - path[count].y = path[0].y; - count++; - } - path[count].code = ART_END; - - if (closed_shape && is_area) - gog_renderer_draw_polygon (view->renderer, path, FALSE, bbox); - else - gog_renderer_draw_path (view->renderer, path, bbox); - - gog_renderer_pop_style (view->renderer); - } - - gog_axis_map_free (map); -} - -static gboolean -gog_radar_view_info_at_point (GogView *view, double x, double y, - GogObject const *cur_selection, - GogObject **obj, char **name) -{ - double radius = fmin (view->allocation.h, view->allocation.w)/2.0; - - x -= view->allocation.x + view->allocation.w/2.; - y -= view->allocation.y + view->allocation.h/2.; - if ((x*x + y*y) > (radius*radius)) - return FALSE; - - return TRUE; -} - -static void -gog_radar_view_class_init (GogViewClass *view_klass) -{ - view_klass->render = gog_radar_view_render; - view_klass->info_at_point = gog_radar_view_info_at_point; - view_klass->clip = TRUE; -} - -static GSF_CLASS (GogRadarView, gog_radar_view, - gog_radar_view_class_init, NULL, - GOG_PLOT_VIEW_TYPE) - - -/*****************************************************************************/ - -static GogStyledObjectClass *series_parent_klass; - -static void -gog_radar_series_update (GogObject *obj) -{ - GogRadarSeries *series = GOG_RADAR_SERIES (obj); - unsigned old_num = series->base.num_elements; - double *vals; - unsigned len = 0; - - if (series->base.values[1].data != NULL) { - vals = go_data_vector_get_values (GO_DATA_VECTOR (series->base.values[1].data)); - len = go_data_vector_get_len ( - GO_DATA_VECTOR (series->base.values[1].data)); - } - series->base.num_elements = len; - - /* queue plot and axis for redraw */ - gog_object_request_update (GOG_OBJECT (series->base.plot)); - if (old_num != len) - gog_object_request_update (GOG_OBJECT (series->base.plot->axis[GOG_AXIS_CIRCULAR])); - - if (old_num != series->base.num_elements) - gog_plot_request_cardinality_update (series->base.plot); - - if (((GogObjectClass *)series_parent_klass)->update) - ((GogObjectClass *)series_parent_klass)->update(obj); -} - -static void -gog_radar_series_init_style (GogStyledObject *gso, GogStyle *style) -{ - GogSeries *series = GOG_SERIES (gso); - GogRadarPlot const *plot; - - series_parent_klass->init_style (gso, style); - if (series->plot == NULL) - return; - - plot = GOG_RADAR_PLOT (series->plot); - if (!plot->default_style_has_markers) { - style->disable_theming |= GOG_STYLE_MARKER; - if (style->marker.auto_shape) { - GOMarker *m = go_marker_new (); - go_marker_set_shape (m, GO_MARKER_NONE); - gog_style_set_marker (style, m); - } - } -} - -static void -gog_radar_series_class_init (GogStyledObjectClass *gso_klass) -{ - GogObjectClass * obj_klass = (GogObjectClass *) gso_klass; - - series_parent_klass = g_type_class_peek_parent (gso_klass); - gso_klass->init_style = gog_radar_series_init_style; - obj_klass->update = gog_radar_series_update; -} - -GSF_CLASS (GogRadarSeries, gog_radar_series, - gog_radar_series_class_init, NULL, - GOG_SERIES_TYPE) - -void -plugin_init (void) -{ - gog_radar_plot_get_type (); - gog_radar_area_plot_get_type (); -} - -void -plugin_cleanup (void) -{ -} diff --git a/lib/goffice/graph/plugins/plot_surface/gog-contour-prefs.glade b/lib/goffice/graph/plugins/plot_surface/gog-contour-prefs.glade deleted file mode 100644 index 8e19576bf2..0000000000 --- a/lib/goffice/graph/plugins/plot_surface/gog-contour-prefs.glade +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - window1 - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - - - - 5 - True - 1 - 2 - False - 5 - 5 - - - True - _Slices number: - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 5 - 0 - levels - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 6 1 256 1 10 10 - - - 1 - 2 - 0 - 1 - fill - - - - - - - - diff --git a/lib/goffice/gui-utils/Makefile.am b/lib/goffice/gui-utils/Makefile.am deleted file mode 100644 index a3bebb9a8e..0000000000 --- a/lib/goffice/gui-utils/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -noinst_LTLIBRARIES = libgoffice-gui-utils.la - -AM_CFLAGS = $(GNOME_CFLAGS) $(GSF_CFLAGS) $(GLADE_CFLAGS) - -BUILT_SOURCES = \ - go-marshalers.h \ - go-marshalers.c - -libgoffice_gui_utils_la_SOURCES = \ - $(BUILT_SOURCES) \ - go-combo-box.c \ - go-combo-box.h \ - go-color-group.c \ - go-color-group.h \ - go-color-palette.c \ - go-color-palette.h \ - go-combo-color.c \ - go-combo-color.h \ - go-combo-pixmaps.h \ - go-combo-pixmaps.c \ - go-combo-text.c \ - go-combo-text.h \ - \ - go-action-combo-color.c \ - go-action-combo-color.h \ - go-action-combo-pixmaps.c \ - go-action-combo-pixmaps.h \ - go-action-combo-stack.c \ - go-action-combo-stack.h \ - go-action-combo-text.c \ - go-action-combo-text.h - -go-marshalers.h : go-marshalers.list $(GLIB_GENMARSHAL) - $(GLIB_GENMARSHAL) $< --header --prefix=go_ > $@ -go-marshalers.c : go-marshalers.list $(GLIB_GENMARSHAL) - $(GLIB_GENMARSHAL) $< --body --prefix=go_ > $@.tmp - echo '/* This file has been automatically generated. Do not edit. */' >$@ - echo '#include "'$*.h'"' >>$@ - cat $@.tmp >>$@ - rm -f $@.tmp - -EXTRA_DIST = go-marshalers.list - -include $(srcdir)/../goffice.mk diff --git a/lib/goffice/gui-utils/go-font-sel.h b/lib/goffice/gui-utils/go-font-sel.h deleted file mode 100644 index 115b293d4c..0000000000 --- a/lib/goffice/gui-utils/go-font-sel.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef GO_FONT_SEL_H -#define GO_FONT_SEL_H - -#include -#include - -#define GO_FONT_SEL_TYPE (go_font_sel_get_type ()) -#define GO_FONT_SEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GO_FONT_SEL_TYPE, GOFontSel)) -#define IS_GO_FONT_SEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GO_FONT_SEL_TYPE)) - -typedef struct _GOFontSel GOFontSel; - -GType go_font_sel_get_type (void); -GtkWidget *go_font_sel_new (void); -void go_font_sel_set_font (GOFontSel *fs, GOFont const *font); -GOFont const *go_font_sel_get_font (GOFontSel const *fs); -void go_font_sel_editable_enters (GOFontSel *fs, GtkWindow *dialog); -void go_font_sel_set_sample_text (GOFontSel *fs, char const *text); - -#endif /* GO_FONT_SEL_H */ diff --git a/lib/goffice/gui-utils/go-gui-utils.c b/lib/goffice/gui-utils/go-gui-utils.c deleted file mode 100644 index 9203f88863..0000000000 --- a/lib/goffice/gui-utils/go-gui-utils.c +++ /dev/null @@ -1,163 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * go-gui-utils.c: Misc gtk utilities - * - * Copyright (C) 2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#include -#include "go-gui-utils.h" - -/* ------------------------------------------------------------------------- */ - -/** - * go_gtk_button_new_with_stock_image - * - * Code from gedit - * - * Creates a new GtkButton with custom label and stock image. - * - * text : button label - * sotck_id : id for stock icon - * - * return : newly created button - * - **/ - -GtkWidget* -go_gtk_button_new_with_stock_image (char const *text, char const* stock_id) -{ - GtkWidget *button; - GtkStockItem item; - GtkWidget *label; - GtkWidget *image; - GtkWidget *hbox; - GtkWidget *align; - - button = gtk_button_new (); - - if (GTK_BIN (button)->child) - gtk_container_remove (GTK_CONTAINER (button), - GTK_BIN (button)->child); - - if (gtk_stock_lookup (stock_id, &item)) { - label = gtk_label_new_with_mnemonic (text); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (button)); - - image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON); - hbox = gtk_hbox_new (FALSE, 2); - - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - - gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - gtk_container_add (GTK_CONTAINER (button), align); - gtk_container_add (GTK_CONTAINER (align), hbox); - gtk_widget_show_all (align); - - return button; - } - - label = gtk_label_new_with_mnemonic (text); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (button)); - - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - - gtk_widget_show (label); - gtk_container_add (GTK_CONTAINER (button), label); - - return button; -} - -/** - * go_libglade_new : - * @gcc : #GOCmdContext - * @gladefile : - * - * Simple utility to open glade files - **/ -GladeXML * -go_libglade_new (char const *gladefile, char const *root, - char const *domain, GOCmdContext *gcc) -{ - GladeXML *gui; - char *f; - - g_return_val_if_fail (gladefile != NULL, NULL); - - if (!g_path_is_absolute (gladefile)) { - char *d = gnm_sys_glade_dir (); - f = g_build_filename (d, gladefile, NULL); - g_free (d); - } else - f = g_strdup (gladefile); - - gui = glade_xml_new (f, root, domain); - if (gui == NULL && gcc != NULL) { - char *msg = g_strdup_printf (_("Unable to open file '%s'"), f); - go_cmd_context_error_system (gcc, msg); - g_free (msg); - } - g_free (f); - - return gui; -} - -/** - * go_editable_enters: - * @window: dialog to affect. - * @editable: Editable to affect. - * - * Normally if there's an editable widget (such as #GtkEntry) in your - * dialog, pressing Enter will activate the editable rather than the - * default dialog button. However, in most cases, the user expects to - * type something in and then press enter to close the dialog. This - * function enables that behavior. - **/ -void -go_editable_enters (GtkWindow *window, GtkWidget *w) -{ - g_return_if_fail (GTK_IS_WINDOW (window)); - g_signal_connect_swapped (G_OBJECT (w), - "activate", - G_CALLBACK (gtk_window_activate_default), window); -} - -GdkPixbuf * -go_pixbuf_intelligent_scale (GdkPixbuf *buf, guint width, guint height) -{ - GdkPixbuf *scaled; - int w, h; - unsigned long int ow = gdk_pixbuf_get_width (buf); - unsigned long int oh = gdk_pixbuf_get_height (buf); - - if (ow > width || oh > height) { - if (ow * height > oh * width) { - w = width; - h = width * (((double)oh)/(double)ow); - } else { - h = height; - w = height * (((double)ow)/(double)oh); - } - - scaled = gdk_pixbuf_scale_simple (buf, w, h, GDK_INTERP_BILINEAR); - } else - scaled = g_object_ref (buf); - - return scaled; -} diff --git a/lib/goffice/gui-utils/go-gui-utils.h b/lib/goffice/gui-utils/go-gui-utils.h deleted file mode 100644 index f374c4b095..0000000000 --- a/lib/goffice/gui-utils/go-gui-utils.h +++ /dev/null @@ -1,41 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * go-gui-utils.h - Misc GTK+ utilities - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License, version 2, as published by the Free Software Foundation. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ -#ifndef GO_GUI_UTILS_H -#define GO_GUI_UTILS_H - -G_BEGIN_DECLS - -#include -#include -#include - -void go_editable_enters (GtkWindow *window, GtkWidget *w); - -GtkWidget *go_gtk_button_new_with_stock_image (char const *text, - char const *stock_id); - -GladeXML *go_libglade_new (char const *gladefile, char const *root, - char const *domain, GOCmdContext *cc); - -GdkPixbuf *go_pixbuf_intelligent_scale (GdkPixbuf *pixbuf, - guint width, guint height); - -G_END_DECLS - -#endif /* GO_GUI_UTILS_H */ diff --git a/lib/goffice/paths.h.in b/lib/goffice/paths.h.in deleted file mode 100644 index 5278039a13..0000000000 --- a/lib/goffice/paths.h.in +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef PATHS_H -#define PATHS_H - -#define DATA_DIR "@-GNC_LIBDIR-@" - -#endif // PATHS_H diff --git a/lib/goffice/pixmaps/chart-pie-2d.svg b/lib/goffice/pixmaps/chart-pie-2d.svg deleted file mode 100644 index 3dce62457b..0000000000 --- a/lib/goffice/pixmaps/chart-pie-2d.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - -]> - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart-rings-2d.svg b/lib/goffice/pixmaps/chart-rings-2d.svg deleted file mode 100644 index 4541ed8ad8..0000000000 --- a/lib/goffice/pixmaps/chart-rings-2d.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_area_1_1.svg b/lib/goffice/pixmaps/chart_area_1_1.svg deleted file mode 100644 index 674ec19c10..0000000000 --- a/lib/goffice/pixmaps/chart_area_1_1.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_area_1_2.svg b/lib/goffice/pixmaps/chart_area_1_2.svg deleted file mode 100644 index bac2cb4a17..0000000000 --- a/lib/goffice/pixmaps/chart_area_1_2.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_area_1_3.svg b/lib/goffice/pixmaps/chart_area_1_3.svg deleted file mode 100644 index fb9274186c..0000000000 --- a/lib/goffice/pixmaps/chart_area_1_3.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_bar_1_1.svg b/lib/goffice/pixmaps/chart_bar_1_1.svg deleted file mode 100644 index 037073f74c..0000000000 --- a/lib/goffice/pixmaps/chart_bar_1_1.svg +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_bar_1_2.svg b/lib/goffice/pixmaps/chart_bar_1_2.svg deleted file mode 100644 index 18480b0d20..0000000000 --- a/lib/goffice/pixmaps/chart_bar_1_2.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_bar_1_3.svg b/lib/goffice/pixmaps/chart_bar_1_3.svg deleted file mode 100644 index 4c96b8b453..0000000000 --- a/lib/goffice/pixmaps/chart_bar_1_3.svg +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_bubble_1_1.svg b/lib/goffice/pixmaps/chart_bubble_1_1.svg deleted file mode 100644 index 8991b0022a..0000000000 --- a/lib/goffice/pixmaps/chart_bubble_1_1.svg +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_bubble_1_2.png b/lib/goffice/pixmaps/chart_bubble_1_2.png deleted file mode 100644 index 4cb521f40d..0000000000 Binary files a/lib/goffice/pixmaps/chart_bubble_1_2.png and /dev/null differ diff --git a/lib/goffice/pixmaps/chart_bubble_1_2.svg b/lib/goffice/pixmaps/chart_bubble_1_2.svg deleted file mode 100644 index c177f13619..0000000000 --- a/lib/goffice/pixmaps/chart_bubble_1_2.svg +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_column_1_1.svg b/lib/goffice/pixmaps/chart_column_1_1.svg deleted file mode 100644 index 3c03aab590..0000000000 --- a/lib/goffice/pixmaps/chart_column_1_1.svg +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_column_1_2.svg b/lib/goffice/pixmaps/chart_column_1_2.svg deleted file mode 100644 index 55bd4f80e7..0000000000 --- a/lib/goffice/pixmaps/chart_column_1_2.svg +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_column_1_3.svg b/lib/goffice/pixmaps/chart_column_1_3.svg deleted file mode 100644 index daae0eb1ab..0000000000 --- a/lib/goffice/pixmaps/chart_column_1_3.svg +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_line_1_1.svg b/lib/goffice/pixmaps/chart_line_1_1.svg deleted file mode 100644 index 870517c2ba..0000000000 --- a/lib/goffice/pixmaps/chart_line_1_1.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_line_1_2.svg b/lib/goffice/pixmaps/chart_line_1_2.svg deleted file mode 100644 index 5cf9bb37b7..0000000000 --- a/lib/goffice/pixmaps/chart_line_1_2.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_line_1_3.svg b/lib/goffice/pixmaps/chart_line_1_3.svg deleted file mode 100644 index 444a894099..0000000000 --- a/lib/goffice/pixmaps/chart_line_1_3.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_line_2_1.svg b/lib/goffice/pixmaps/chart_line_2_1.svg deleted file mode 100644 index bc59c8f157..0000000000 --- a/lib/goffice/pixmaps/chart_line_2_1.svg +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_line_2_2.svg b/lib/goffice/pixmaps/chart_line_2_2.svg deleted file mode 100644 index 151f4d082b..0000000000 --- a/lib/goffice/pixmaps/chart_line_2_2.svg +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_line_2_3.svg b/lib/goffice/pixmaps/chart_line_2_3.svg deleted file mode 100644 index 2758cedf66..0000000000 --- a/lib/goffice/pixmaps/chart_line_2_3.svg +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_pie_1_1.svg b/lib/goffice/pixmaps/chart_pie_1_1.svg deleted file mode 100644 index 5f985a2603..0000000000 --- a/lib/goffice/pixmaps/chart_pie_1_1.svg +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_pie_2_1.svg b/lib/goffice/pixmaps/chart_pie_2_1.svg deleted file mode 100644 index 6d2a09765a..0000000000 --- a/lib/goffice/pixmaps/chart_pie_2_1.svg +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_radar_1_1.svg b/lib/goffice/pixmaps/chart_radar_1_1.svg deleted file mode 100644 index 72b0dc3b8f..0000000000 --- a/lib/goffice/pixmaps/chart_radar_1_1.svg +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_radar_1_2.svg b/lib/goffice/pixmaps/chart_radar_1_2.svg deleted file mode 100644 index 8fbe6075f9..0000000000 --- a/lib/goffice/pixmaps/chart_radar_1_2.svg +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_radar_1_3.svg b/lib/goffice/pixmaps/chart_radar_1_3.svg deleted file mode 100644 index 30ccb2d876..0000000000 --- a/lib/goffice/pixmaps/chart_radar_1_3.svg +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_ring_1_1.svg b/lib/goffice/pixmaps/chart_ring_1_1.svg deleted file mode 100644 index 699da7b02e..0000000000 --- a/lib/goffice/pixmaps/chart_ring_1_1.svg +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_ring_1_2.svg b/lib/goffice/pixmaps/chart_ring_1_2.svg deleted file mode 100644 index 5c1eb0abc9..0000000000 --- a/lib/goffice/pixmaps/chart_ring_1_2.svg +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_scatter_1_1.svg b/lib/goffice/pixmaps/chart_scatter_1_1.svg deleted file mode 100644 index 9af7cfbb0d..0000000000 --- a/lib/goffice/pixmaps/chart_scatter_1_1.svg +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_scatter_3_1.svg b/lib/goffice/pixmaps/chart_scatter_3_1.svg deleted file mode 100644 index d301962ca9..0000000000 --- a/lib/goffice/pixmaps/chart_scatter_3_1.svg +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/goffice/pixmaps/chart_scatter_3_2.svg b/lib/goffice/pixmaps/chart_scatter_3_2.svg deleted file mode 100644 index cd2c53903c..0000000000 --- a/lib/goffice/pixmaps/chart_scatter_3_2.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/lib/goffice/split.c b/lib/goffice/split.c deleted file mode 100644 index 4ccfdc16e6..0000000000 --- a/lib/goffice/split.c +++ /dev/null @@ -1,305 +0,0 @@ -#include "split.h" - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include "xml-io.h" - -#include "application.h" -#include "datetime.h" -#include "gnumeric.h" - -#include "value.h" - -#define CC2XML(s) ((const xmlChar *)(s)) -#define CXML2C(s) ((const char *)(s)) - -// 1904 = false -GnmDateConventions gdc_singleton = { 0 }; - -GnmExprConventions stack_gnm_expr_conventions_default = { - FALSE, - NULL, - NULL -}; - -GnmExprConventions *gnm_expr_conventions_default = &stack_gnm_expr_conventions_default; - -GnmDateConventions const * -workbook_date_conv( Workbook const *wb ) -{ - return &gdc_singleton; -} - -GnmValue const * -value_area_fetch_x_y (GnmValue const *v, int x, int y, GnmEvalPos const *ep) -{ - GnmValue const * const res = value_area_get_x_y (v, x, y, ep); - if (res && res->type != VALUE_EMPTY) - return res; - - return value_zero; -} - -/* - * An internal routine to get a cell from an array or range. If any - * problems occur a NULL is returned. - */ -GnmValue const * -value_area_get_x_y (GnmValue const *v, int x, int y, GnmEvalPos const *ep) -{ - g_return_val_if_fail (v, NULL); - - if (v->type == VALUE_ARRAY){ - g_return_val_if_fail (x < v->v_array.x && - y < v->v_array.y, - NULL); - return v->v_array.vals [x][y]; - } else if (v->type == VALUE_CELLRANGE) { - // jsled: throw a frickin' exception. - printf( "failure. cellrange.\n" ); - } else - return v; - - return NULL; -} - -#if 0 - -char * -global_range_name(Sheet *sheet, GnmRange const *r) -{ - return "unimplemented"; -} -#endif // 0 - -double -gnm_app_display_dpi_get (gboolean horizontal) -{ - // jsled: Taken as default value from gnumeric/src/gnumeric-gconf.c - return 96.; -} - -struct _GnmApp { - GObject base; - - /* Clipboard */ - SheetView *clipboard_sheet_view; - GnmCellRegion *clipboard_copied_contents; - GnmRange *clipboard_cut_range; - - /* History for file menu */ - GSList *history_list; - - /* Others */ - GtkWidget *pref_dialog; - - GList *workbook_list; - - GHashTable *named_pixbufs; -}; - -/* Signals */ -enum { - WORKBOOK_ADDED, - WORKBOOK_REMOVED, - WINDOW_LIST_CHANGED, - CUSTOM_UI_ADDED, - CUSTOM_UI_REMOVED, - CLIPBOARD_MODIFIED, - LAST_SIGNAL -}; - -static guint signals [LAST_SIGNAL] = { 0 }; - -static GnmApp *app; - -GnmAction * -gnm_action_new (char const *id, char const *label, - char const *icon_name, gboolean always_available, - GnmActionHandler handler) -{ - GnmAction *res = g_new0 (GnmAction, 1); - res->id = g_strdup (id); - res->label = g_strdup (label); - res->icon_name = g_strdup (icon_name); - res->always_available = always_available; - res->handler = handler; - return res; -} - -void -gnm_action_free (GnmAction *action) -{ - if (NULL != action) { - g_free (action->id); - g_free (action->label); - g_free (action->icon_name); - g_free (action); - } -} - -static GSList *extra_uis = NULL; - -GnmAppExtraUI * -gnm_app_add_extra_ui (GSList *actions, char *layout, - char const *domain, - gpointer user_data) -{ - GnmAppExtraUI *extra_ui = g_new0 (GnmAppExtraUI, 1); - extra_uis = g_slist_prepend (extra_uis, extra_ui); - extra_ui->actions = actions; - extra_ui->layout = layout; - extra_ui->user_data = user_data; - g_signal_emit (G_OBJECT (app), signals [CUSTOM_UI_ADDED], 0, extra_ui); - return extra_ui; -} - -void -gnm_app_remove_extra_ui (GnmAppExtraUI *extra_ui) -{ - g_signal_emit (G_OBJECT (app), signals [CUSTOM_UI_REMOVED], 0, extra_ui); -} - -/* - * Get a named pixbuf. - */ -GdkPixbuf * -gnm_app_get_pixbuf (const char *name) -{ - g_return_val_if_fail (app != NULL, NULL); - return g_hash_table_lookup (app->named_pixbufs, name); -} - -gboolean -xml_node_get_bool (xmlNodePtr node, char const *name, gboolean *val) -{ - xmlChar *buf = xml_node_get_cstr (node, name); - if (buf == NULL) - return FALSE; - - *val = (!strcmp (buf, "1") - || 0 == g_ascii_strcasecmp (buf, "true")); - g_free (buf); - return TRUE; -} - -xmlChar * -xml_node_get_cstr (xmlNodePtr node, char const *name) -{ - if (name != NULL) - return xmlGetProp (node, CC2XML (name)); - /* in libxml1 would return NULL - * in libxml2 would return "" - */ - if (node->xmlChildrenNode != NULL) - return xmlNodeGetContent (node); - return NULL; -} - -gboolean -xml_node_get_int (xmlNodePtr node, char const *name, int *val) -{ - xmlChar *buf; - char *end; - - buf = xml_node_get_cstr (node, name); - if (buf == NULL) - return FALSE; - - errno = 0; /* strto(ld) sets errno, but does not clear it. */ - *val = strtol (CXML2C (buf), &end, 10); - xmlFree (buf); - - /* FIXME: it is, strictly speaking, not valid to use buf here. */ - return (CXML2C (buf) != end) && (errno != ERANGE); -} - -xmlNode * -e_xml_get_child_by_name (xmlNode const *parent, char const *child_name) -{ - xmlNode *child; - - g_return_val_if_fail (parent != NULL, NULL); - g_return_val_if_fail (child_name != NULL, NULL); - - for (child = parent->xmlChildrenNode; child != NULL; child = child->next) { - if (xmlStrcmp (child->name, child_name) == 0) { - return child; - } - } - return NULL; -} - -xmlNode * -e_xml_get_child_by_name_no_lang (xmlNode const *parent, char const *name) -{ - xmlNodePtr node; - - g_return_val_if_fail (parent != NULL, NULL); - g_return_val_if_fail (name != NULL, NULL); - - for (node = parent->xmlChildrenNode; node != NULL; node = node->next) { - xmlChar *lang; - - if (node->name == NULL || strcmp (node->name, name) != 0) { - continue; - } - lang = xmlGetProp (node, "xml:lang"); - if (lang == NULL) { - return node; - } - xmlFree (lang); - } - - return NULL; -} - -xmlNode * -e_xml_get_child_by_name_by_lang (const xmlNode *parent, const gchar *name) -{ - xmlNodePtr best_node = NULL, node; - gint best_lang_score = INT_MAX; - GList const *lang_list = go_locale_languages (); - - g_return_val_if_fail (parent != NULL, NULL); - g_return_val_if_fail (name != NULL, NULL); - - for (node = parent->xmlChildrenNode; node != NULL; node = node->next) { - xmlChar *lang; - - if (node->name == NULL || strcmp (node->name, name) != 0) - continue; - - lang = xmlGetProp (node, "xml:lang"); - if (lang != NULL) { - const GList *l; - gint i; - - for (l = lang_list, i = 0; - l != NULL && i < best_lang_score; - l = l->next, i++) { - if (strcmp ((gchar *) l->data, lang) == 0) { - best_node = node; - best_lang_score = i; - } - } - } else if (best_node == NULL) - best_node = node; - - xmlFree (lang); - if (best_lang_score == 0) - return best_node; - } - - return best_node; -} - diff --git a/lib/goffice/split.h b/lib/goffice/split.h deleted file mode 100644 index b96b97dcae..0000000000 --- a/lib/goffice/split.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef SPLIT_H -#define SPLIT_H - -#include "gnumeric.h" - -struct _Workbook -{ -}; - -GnmDateConventions const * workbook_date_conv( Workbook const *wb ); -extern GnmExprConventions *gnm_expr_conventions_default; - -struct _GnmExprConventions -{ - gboolean output_translated; - /* If non-null, used to separate elements in lists. */ - char const *output_argument_sep; - /* If non-null, used to separate array columns. */ - char const *output_array_col_sep; -}; - -#endif /*SPLIT_H*/ diff --git a/lib/goffice/split/Makefile.am b/lib/goffice/split/Makefile.am deleted file mode 100644 index 58cba782b2..0000000000 --- a/lib/goffice/split/Makefile.am +++ /dev/null @@ -1,78 +0,0 @@ -SUBDIRS = widgets - -noinst_LTLIBRARIES = libgoffice-split.la - -AM_CFLAGS = $(GLIB_CFLAGS) $(GSF_CFLAGS) $(PRINT_CFLAGS) $(GNOME_CFLAGS) $(GLADE_CFLAGS) - -libgoffice_split_la_SOURCES = \ - application.h \ - command-context.c \ - command-context.h \ - command-context-priv.h \ - command-context-stderr.h \ - command-context-stderr.c \ - dependent.h \ - error-info.c \ - error-info.h \ - file.h \ - func.h \ - value.c \ - value.h \ - str.h \ - str.c \ - mathfunc.h \ - mathfunc.c \ - numbers.h \ - number-match.h \ - number-match.c \ - dates.h \ - dates.c \ - format.h \ - format.c \ - gutils.h \ - gutils.c \ - formats.c \ - datetime.h \ - datetime.c \ - position.h \ - ranges.h \ - regutf8.h \ - regutf8.c \ - style-color.h \ - style-color.c \ - style-border.h \ - style-border.c \ - mstyle.h \ - mstyle.c \ - style.h \ - style.c \ - gnumeric.h \ - gnumeric-gconf.h \ - gnumeric-gconf-priv.h \ - gnumeric-gconf.c \ - global-gnome-font.h \ - global-gnome-font.c \ - plugin.h \ - plugin.c \ - plugin-util.h \ - plugin-util.c \ - plugin-service.h \ - plugin-service.c \ - plugin-service-impl.h \ - plugin-loader.h \ - plugin-loader.c \ - plugin-loader-module.h \ - plugin-loader-module.c \ - module-plugin-defs.h \ - io-context.h \ - io-context-priv.h \ - io-context.c \ - gui-file.h \ - gui-util.h \ - gui-util.c \ - gui-gnumeric.h \ - xml-io.h \ - xml-io-version.h \ - workbook-control-gui.h - -include $(srcdir)/../goffice.mk diff --git a/lib/goffice/split/application.h b/lib/goffice/split/application.h deleted file mode 100644 index 5227702e72..0000000000 --- a/lib/goffice/split/application.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef GNUMERIC_APPLICATION_H -#define GNUMERIC_APPLICATION_H - -#include "gnumeric.h" -#include -#include - -#define GNM_APP_TYPE (gnm_app_get_type ()) -typedef gboolean (*GnmWbIterFunc) (Workbook *, gpointer data); - -GType gnm_app_get_type (void); -GObject *gnm_app_get_app (void); - -/* List of active workbooks */ -void gnm_app_workbook_list_add (Workbook *wb); -void gnm_app_workbook_list_remove (Workbook *wb); -GList * gnm_app_workbook_list (void); -Workbook *gnm_app_workbook_get_by_name (char const *name); -Workbook *gnm_app_workbook_get_by_index (int i); -gboolean gnm_app_workbook_foreach (GnmWbIterFunc func, gpointer data); - -GSList const*gnm_app_history_get_list (gboolean force_reload); -void gnm_app_history_add (char const *filename); - -/* Prefs */ -gboolean gnm_app_use_auto_complete (void); -gboolean gnm_app_use_transition_keys (void); -void gnm_app_set_transition_keys (gboolean); -gboolean gnm_app_live_scrolling (void); -int gnm_app_auto_expr_recalc_lag (void); - -/* stuff that should move */ -GdkPixbuf *gnm_app_get_pixbuf (char const *name); -void gnm_app_release_pref_dialog (void); -gpointer gnm_app_get_pref_dialog (void); -void gnm_app_set_pref_dialog (gpointer dialog); - -double gnm_app_display_dpi_get (gboolean horizontal); -double gnm_app_dpi_to_pixels (void); - -/* Clipboard */ -void gnm_app_clipboard_clear (gboolean drop_selection); -void gnm_app_clipboard_cut_copy (WorkbookControl *wbc, gboolean is_cut, - SheetView *sv, GnmRange const *area, - gboolean animate_range); -void gnm_app_clipboard_cut_copy_obj (WorkbookControl *wbc, gboolean is_cut, - SheetView *sv, GSList *objects); -void gnm_app_clipboard_unant (void); -gboolean gnm_app_clipboard_is_empty (void); -gboolean gnm_app_clipboard_is_cut (void); -Sheet *gnm_app_clipboard_sheet_get (void); -SheetView *gnm_app_clipboard_sheet_view_get (void); -GnmCellRegion *gnm_app_clipboard_contents_get (void); -GnmRange const *gnm_app_clipboard_area_get (void); - -/********************************************************************** - * Temporary home for extra actions until we rework this in 1.5 - * with libgoffice - **/ - -typedef struct _GnmAction GnmAction; -typedef void (*GnmActionHandler) (GnmAction const *action, WorkbookControl *wbc, - gpointer user_data); -struct _GnmAction { - char *id; /* id of the function that will handle this */ - char *label; /* untranslated, gettext domain will be passed later */ - char *icon_name; /* optionally NULL */ - /* simplistic for now : - * is the action always available (File -> New) or only available - * when we are not editing (Cell -> Format) - * Later on this needs to be more comprehensive with things like - * per-sheetobject flags - **/ - gboolean always_available; - - GnmActionHandler handler; -}; -typedef struct { - GSList *actions; - char *layout; - char const *domain; - gpointer user_data; -} GnmAppExtraUI; - -GnmAction *gnm_action_new (char const *name, char const *label, - char const *icon, gboolean always_available, - GnmActionHandler handler); -void gnm_action_free (GnmAction *action); - -GnmAppExtraUI *gnm_app_add_extra_ui (GSList *actions, char *layout, - char const *domain, - gpointer user_data); -void gnm_app_remove_extra_ui (GnmAppExtraUI *extra_ui); -void gnm_app_foreach_extra_ui (GFunc func, gpointer data); - -/**********************************************************************/ - -/* internal implementation util */ -void _gnm_app_flag_windows_changed (void); - -#endif /* GNUMERIC_APPLICATION_H */ diff --git a/lib/goffice/split/command-context-priv.h b/lib/goffice/split/command-context-priv.h deleted file mode 100644 index 65707db8a5..0000000000 --- a/lib/goffice/split/command-context-priv.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef GNUMERIC_GNM_CMD_CONTEXT_PRIV_H -#define GNUMERIC_GNM_CMD_CONTEXT_PRIV_H - -#include "command-context.h" - -typedef struct { - GTypeInterface base; - - char * (*get_password) (GnmCmdContext *cc, - char const *filename); - void (*set_sensitive) (GnmCmdContext *cc, - gboolean sensitive); - void (*progress_set) (GnmCmdContext *cc, gfloat val); - void (*progress_message_set) (GnmCmdContext *cc, gchar const *msg); - struct { - void (*error) (GnmCmdContext *cc, GError *err); - void (*error_info) (GnmCmdContext *ctxt, ErrorInfo *error); - } error; -} GnmCmdContextClass; - -#define GNM_CMD_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GNM_CMD_CONTEXT_TYPE, GnmCmdContextClass)) -#define IS_GNM_CMD_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNM_CMD_CONTEXT_TYPE)) - -/* protected, these do not really belong here, they are associated with io-context */ -void cmd_context_progress_set (GnmCmdContext *cc, gfloat f); -void cmd_context_progress_message_set (GnmCmdContext *cc, char const *msg); - -#endif /* GNUMERIC_GNM_CMD_CONTEXT_PRIV_H */ diff --git a/lib/goffice/split/command-context-stderr.c b/lib/goffice/split/command-context-stderr.c deleted file mode 100644 index c4093c8452..0000000000 --- a/lib/goffice/split/command-context-stderr.c +++ /dev/null @@ -1,112 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * command-context-stderr.c : Error dispatch for line oriented clients - * - * Author: - * Jon K Hellan - * - * (C) 2002 Jon K Hellan - */ -#include -#include -#include -#include "gnumeric.h" -#include "command-context-stderr.h" -#include "command-context-priv.h" -#include -#include "error-info.h" -#include "ranges.h" - -struct _CmdContextStderr { - GObject base; - int status; -}; -typedef GObjectClass CmdContextStderrClass; - -#define COMMAND_CONTEXT_STDERR_CLASS(k) \ - (G_TYPE_CHECK_CLASS_CAST ((k), CMD_CONTEXT_STDERR_TYPE, CmdContextStderrClass)) - -GnmCmdContext * -cmd_context_stderr_new (void) -{ - return g_object_new (CMD_CONTEXT_STDERR_TYPE, NULL); -} - -void -cmd_context_stderr_set_status (CmdContextStderr *ccs, int status) -{ - g_return_if_fail (ccs != NULL); - g_return_if_fail (IS_COMMAND_CONTEXT_STDERR (ccs)); - - ccs->status = status; -} - -int -cmd_context_stderr_get_status (CmdContextStderr *ccs) -{ - g_return_val_if_fail (ccs != NULL, -1); - g_return_val_if_fail (IS_COMMAND_CONTEXT_STDERR (ccs), -1); - - return ccs->status; -} - -static void -ccs_error_error (GnmCmdContext *cc, GError *error) -{ - CmdContextStderr *ccs = COMMAND_CONTEXT_STDERR (cc); - - fprintf (stderr, "Error: %s\n", error->message); - ccs->status = -1; -} -static void -ccs_error_info (GnmCmdContext *cc, ErrorInfo *error) -{ - CmdContextStderr *ccs = COMMAND_CONTEXT_STDERR (cc); - - error_info_print (error); - ccs->status = -1; -} - -static char * -ccs_get_password (G_GNUC_UNUSED GnmCmdContext *cc, - G_GNUC_UNUSED char const* filename) -{ - return NULL; -} -static void -ccs_set_sensitive (G_GNUC_UNUSED GnmCmdContext *cc, - G_GNUC_UNUSED gboolean sensitive) -{ -} - -static void -ccs_progress_set (GnmCmdContext *cc, gfloat val) -{ -} - -static void -ccs_progress_message_set (GnmCmdContext *cc, gchar const *msg) -{ -} - -static void -ccs_init (CmdContextStderr *ccs) -{ - ccs->status = 0; -} - -static void -ccs_gnm_cmd_context_init (GnmCmdContextClass *cc_class) -{ - cc_class->get_password = ccs_get_password; - cc_class->set_sensitive = ccs_set_sensitive; - cc_class->progress_set = ccs_progress_set; - cc_class->progress_message_set = ccs_progress_message_set; - cc_class->error.error = ccs_error_error; - cc_class->error.error_info = ccs_error_info; -} - -GSF_CLASS_FULL (CmdContextStderr, cmd_context_stderr, - NULL, ccs_init, - G_TYPE_OBJECT, 0, - GSF_INTERFACE (ccs_gnm_cmd_context_init, GNM_CMD_CONTEXT_TYPE)) diff --git a/lib/goffice/split/command-context-stderr.h b/lib/goffice/split/command-context-stderr.h deleted file mode 100644 index b6932ee38d..0000000000 --- a/lib/goffice/split/command-context-stderr.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GNUMERIC_COMMAND_CONTEXT_STDERR_H -#define GNUMERIC_COMMAND_CONTEXT_STDERR_H - -#include "gnumeric.h" -#include - -#define CMD_CONTEXT_STDERR_TYPE (cmd_context_stderr_get_type ()) -#define COMMAND_CONTEXT_STDERR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CMD_CONTEXT_STDERR_TYPE, CmdContextStderr)) -#define IS_COMMAND_CONTEXT_STDERR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CMD_CONTEXT_STDERR_TYPE)) - -typedef struct _CmdContextStderr CmdContextStderr; - -GType cmd_context_stderr_get_type (void); -GnmCmdContext *cmd_context_stderr_new (void); -void cmd_context_stderr_set_status (CmdContextStderr *, int status); -int cmd_context_stderr_get_status (CmdContextStderr *); - -#endif /* GNUMERIC_COMMAND_CONTEXT_STDERR_H */ diff --git a/lib/goffice/split/command-context.c b/lib/goffice/split/command-context.c deleted file mode 100644 index 590f4a7650..0000000000 --- a/lib/goffice/split/command-context.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * command-context.c : Error dispatch utilities. - * - * Author: - * Jody Goldberg - * - * (C) 1999-2001 Jody Goldberg - */ -#include -#include -#include "gnumeric.h" -#include "command-context-priv.h" -#include "ranges.h" - -#include - -#define CC_CLASS(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GNM_CMD_CONTEXT_TYPE, GnmCmdContextClass)) - -static GError * -format_message (GQuark id, char const *message) -{ - char const *msg = message ? message : ""; - return g_error_new_literal (id, 0, msg); -} - -void -gnm_cmd_context_error (GnmCmdContext *context, GError *err) -{ - g_return_if_fail (IS_GNM_CMD_CONTEXT (context)); - CC_CLASS (context)->error.error (context, err); -} - -void -gnm_cmd_context_error_info (GnmCmdContext *context, ErrorInfo *error) -{ - g_return_if_fail (IS_GNM_CMD_CONTEXT (context)); - CC_CLASS (context)->error.error_info (context, error); -} - -void -gnm_cmd_context_error_system (GnmCmdContext *context, char const *message) -{ - GError *err = format_message (gnm_error_system (), message); - gnm_cmd_context_error (context, err); - g_error_free (err); -} - -void -gnm_cmd_context_error_import (GnmCmdContext *context, char const *message) -{ - GError *err = format_message (gnm_error_import (), message); - gnm_cmd_context_error (context, err); - g_error_free (err); -} - -void -gnm_cmd_context_error_export (GnmCmdContext *context, char const *message) -{ - GError *err = format_message (gnm_error_export (), message); - gnm_cmd_context_error (context, err); - g_error_free (err); -} - -void -gnm_cmd_context_error_invalid (GnmCmdContext *context, char const *msg, char const *val) -{ - GError *err = g_error_new (gnm_error_invalid(), 0, "Invalid %s : '%s'", msg, val); - gnm_cmd_context_error (context, err); - g_error_free (err); -} - -void -gnm_cmd_context_error_calc (GnmCmdContext *context, char const *msg) -{ - GError *err = format_message (gnm_error_calc (), msg); - gnm_cmd_context_error (context, err); - g_error_free (err); -} - -char const * -range_name(GnmRange const *src) -{ - return "undefined"; -} - - -void -gnm_cmd_context_error_splits_array (GnmCmdContext *context, - G_GNUC_UNUSED char const *cmd, - GnmRange const *array) -{ - GError *err; - - if (array != NULL) - err = g_error_new (gnm_error_array(), 1, - _("Would split array %s"), range_name (array)); - else - err = g_error_new (gnm_error_array(), 0, - _("Would split an array")); - gnm_cmd_context_error (context, err); -} - -GQuark -gnm_error_system (void) -{ - static GQuark quark; - if (!quark) - quark = g_quark_from_static_string ("gnm_error_system"); - return quark; -} -GQuark -gnm_error_import (void) -{ - static GQuark quark; - if (!quark) - quark = g_quark_from_static_string ("gnm_error_import"); - return quark; -} -GQuark -gnm_error_export (void) -{ - static GQuark quark; - if (!quark) - quark = g_quark_from_static_string ("gnm_error_export"); - return quark; -} -GQuark -gnm_error_array (void) -{ - static GQuark quark; - if (!quark) - quark = g_quark_from_static_string ("gnm_error_array"); - return quark; -} - -GQuark -gnm_error_calc (void) -{ - static GQuark quark; - if (!quark) - quark = g_quark_from_static_string ("gnm_error_calc"); - return quark; -} - -GQuark -gnm_error_invalid (void) -{ - static GQuark quark; - if (!quark) - quark = g_quark_from_static_string ("gnm_error_invalid"); - return quark; -} - -void -cmd_context_progress_set (GnmCmdContext *context, gfloat f) -{ - g_return_if_fail (IS_GNM_CMD_CONTEXT (context)); - - CC_CLASS (context)->progress_set (context, f); -} - -void -cmd_context_progress_message_set (GnmCmdContext *context, gchar const *msg) -{ - g_return_if_fail (IS_GNM_CMD_CONTEXT (context)); - - if (msg == NULL) - msg = " "; - CC_CLASS (context)->progress_message_set (context, msg); -} - -char * -gnm_cmd_context_get_password (GnmCmdContext *cc, char const *filename) -{ - g_return_val_if_fail (IS_GNM_CMD_CONTEXT (cc), NULL); - - return CC_CLASS (cc)->get_password (cc, filename); -} - -void -gnm_cmd_context_set_sensitive (GnmCmdContext *cc, gboolean sensitive) -{ - g_return_if_fail (IS_GNM_CMD_CONTEXT (cc)); - - CC_CLASS (cc)->set_sensitive (cc, sensitive); -} - -GType -gnm_cmd_context_get_type (void) -{ - static GType gnm_cmd_context_type = 0; - - if (!gnm_cmd_context_type) { - static GTypeInfo const gnm_cmd_context_info = { - sizeof (GnmCmdContextClass), /* class_size */ - NULL, /* base_init */ - NULL, /* base_finalize */ - }; - - gnm_cmd_context_type = g_type_register_static (G_TYPE_INTERFACE, - "GnmCmdContext", &gnm_cmd_context_info, 0); - } - - return gnm_cmd_context_type; -} - diff --git a/lib/goffice/split/command-context.h b/lib/goffice/split/command-context.h deleted file mode 100644 index a44d9193be..0000000000 --- a/lib/goffice/split/command-context.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef GNM_CMD_CONTEXT_H -#define GNM_CMD_CONTEXT_H - -#include "gnumeric.h" -#include - -#define GNM_CMD_CONTEXT_TYPE (gnm_cmd_context_get_type ()) -#define GNM_CMD_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_CMD_CONTEXT_TYPE, GnmCmdContext)) -#define IS_GNM_CMD_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_CMD_CONTEXT_TYPE)) - -GType gnm_cmd_context_get_type (void); - -void gnm_cmd_context_error (GnmCmdContext *cc, GError *err); -char *gnm_cmd_context_get_password (GnmCmdContext *cc, char const *fname); -void gnm_cmd_context_set_sensitive (GnmCmdContext *cc, gboolean flag); - -/* utility routines for common errors */ -void gnm_cmd_context_error_system (GnmCmdContext *cc, char const *msg); -void gnm_cmd_context_error_import (GnmCmdContext *cc, char const *msg); -void gnm_cmd_context_error_export (GnmCmdContext *cc, char const *msg); -void gnm_cmd_context_error_invalid (GnmCmdContext *cc, - char const *msg, char const *val); -void gnm_cmd_context_error_info (GnmCmdContext *cc, ErrorInfo *error); - -/* An initial set of std errors */ -GQuark gnm_error_system (void); -GQuark gnm_error_import (void); -GQuark gnm_error_export (void); -GQuark gnm_error_invalid (void); - -/***************************************************************************/ -/* some gnumeric specific utility routines */ -void gnm_cmd_context_error_calc (GnmCmdContext *cc, char const *msg); -void gnm_cmd_context_error_splits_array (GnmCmdContext *cc, char const *cmd, - GnmRange const *array); - -GQuark gnm_error_array (void); -GQuark gnm_error_calc (void); - -#endif /* GNM_CMD_CONTEXT_H */ diff --git a/lib/goffice/split/dates.c b/lib/goffice/split/dates.c deleted file mode 100644 index 0aad4579e0..0000000000 --- a/lib/goffice/split/dates.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * dates.c: Include the string definitions for the date names - * - * Author: - * Miguel de Icaza (miguel@kernel.org) - */ - -#include -#include -#include "gnumeric.h" -#include "dates.h" - -/* FIXME : use nl_langinfo */ -const char *day_short [] = -{ - N_("*Sun"), - N_("*Mon"), - N_("*Tue"), - N_("*Wed"), - N_("*Thu"), - N_("*Fri"), - N_("*Sat"), - NULL, -}; - -const char *day_long [] = -{ - N_("Sunday"), - N_("Monday"), - N_("Tuesday"), - N_("Wednesday"), - N_("Thursday"), - N_("Friday"), - N_("Saturday"), - NULL -}; - -const char *month_short [] = -{ - N_("*Jan"), - N_("*Feb"), - N_("*Mar"), - N_("*Apr"), - N_("*May"), - N_("*Jun"), - N_("*Jul"), - N_("*Aug"), - N_("*Sep"), - N_("*Oct"), - N_("*Nov"), - N_("*Dec"), - NULL -}; - -const char *month_long [] = -{ - N_("January"), - N_("February"), - N_("March"), - N_("April"), - N_("May"), - N_("June"), - N_("July"), - N_("August"), - N_("September"), - N_("October"), - N_("November"), - N_("December"), - NULL -}; - diff --git a/lib/goffice/split/dates.h b/lib/goffice/split/dates.h deleted file mode 100644 index 7397dc2004..0000000000 --- a/lib/goffice/split/dates.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GNUMERIC_DATES_H -#define GNUMERIC_DATES_H - -extern const char *day_short []; -extern const char *day_long []; -extern const char *month_short []; -extern const char *month_long []; - -#endif diff --git a/lib/goffice/split/dependent.h b/lib/goffice/split/dependent.h deleted file mode 100644 index 46201394cb..0000000000 --- a/lib/goffice/split/dependent.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef GNUMERIC_EVAL_H -#define GNUMERIC_EVAL_H - -#include "gnumeric.h" -#include - -struct _GnmDependent -{ - guint flags; - Sheet *sheet; - GnmExpr const *expression; - - /* Double-linked list. */ - struct _GnmDependent *next_dep, *prev_dep; -}; - -typedef struct { - void (*eval) (GnmDependent *dep); - void (*set_expr) (GnmDependent *dep, GnmExpr const *new_expr); - void (*debug_name) (GnmDependent const *dep, FILE *out); -} DependentClass; - -typedef enum { - DEPENDENT_NO_FLAG = 0, - - /* Types */ - DEPENDENT_CELL = 0x00000001, /* builtin type */ - DEPENDENT_DYNAMIC_DEP = 0x00000002, /* builtin type */ - DEPENDENT_NAME = 0x00000003, /* builtin pseudo type */ - DEPENDENT_TYPE_MASK = 0x00000fff, - - /* Linked into the workbook wide expression list */ - DEPENDENT_IS_LINKED = 0x00001000, - DEPENDENT_NEEDS_RECALC = 0x00002000, - DEPENDENT_BEING_CALCULATED = 0x00004000, - /* GnmDependent is in the midst of a cyclic calculation */ - DEPENDENT_BEING_ITERATED = 0x00008000, - - DEPENDENT_GOES_INTERSHEET = 0x00010000, - DEPENDENT_GOES_INTERBOOK = 0x00020000, - DEPENDENT_USES_NAME = 0x00040000, - DEPENDENT_HAS_3D = 0x00080000, - DEPENDENT_ALWAYS_UNLINK = 0x00100000, - DEPENDENT_HAS_DYNAMIC_DEPS = 0x00200000, - DEPENDENT_LINK_FLAGS = 0x003ff000, - - /* An internal utility flag */ - DEPENDENT_FLAGGED = 0x01000000, - DEPENDENT_CAN_RELOCATE = 0x02000000 -} DependentFlags; - -#define dependent_type(dep) ((dep)->flags & DEPENDENT_TYPE_MASK) -#define dependent_is_cell(dep) (dependent_type (dep) == DEPENDENT_CELL) -#define dependent_needs_recalc(dep) ((dep)->flags & DEPENDENT_NEEDS_RECALC) -#define dependent_is_linked(dep) ((dep)->flags & DEPENDENT_IS_LINKED) - -struct _GnmDepContainer { - GnmDependent *head, *tail; - - /* Large ranges hashed on 'range' to accelerate duplicate culling. This - * is tranversed by g_hash_table_foreach mostly. - */ - GHashTable **range_hash; - GnmMemChunk *range_pool; - - /* Single ranges, this maps an GnmEvalPos * to a GSList of its - * dependencies. - */ - GHashTable *single_hash; - GnmMemChunk *single_pool; - - /* All of the ExprNames that refer to this container */ - GHashTable *referencing_names; - - /* Dynamic Deps */ - GHashTable *dynamic_deps; -}; - -typedef void (*DepFunc) (GnmDependent *dep, gpointer user); - -guint32 dependent_type_register (DependentClass const *klass); -void dependent_types_init (void); -void dependent_types_shutdown (void); - -void dependent_set_expr (GnmDependent *dep, GnmExpr const *new_expr); -void dependent_set_sheet (GnmDependent *dep, Sheet *sheet); -void dependent_link (GnmDependent *dep, GnmCellPos const *pos); -void dependent_unlink (GnmDependent *dep, GnmCellPos const *pos); -gboolean dependent_eval (GnmDependent *dep); -void dependent_queue_recalc (GnmDependent *dep); -void dependent_add_dynamic_dep (GnmDependent *dep, GnmValueRange const *v); - -GSList *dependents_relocate (GnmExprRelocateInfo const *info); -void dependents_unrelocate (GSList *info); -void dependents_unrelocate_free (GSList *info); -void dependents_link (GSList *deps, GnmExprRewriteInfo const *rwinfo); - -void cell_queue_recalc (GnmCell const *cell); -void cell_foreach_dep (GnmCell const *cell, DepFunc func, gpointer user); -gboolean cell_eval_content (GnmCell *cell); - -void sheet_region_queue_recalc (Sheet const *sheet, GnmRange const *range); -void sheet_deps_destroy (Sheet *sheet); -void workbook_deps_destroy (Workbook *wb); -void workbook_queue_all_recalc (Workbook *wb); - -GnmDepContainer *gnm_dep_container_new (void); -void gnm_dep_container_dump (GnmDepContainer const *deps); - -#define DEPENDENT_CONTAINER_FOREACH_DEPENDENT(dc, dep, code) \ - do { \ - GnmDependent *dep = (dc)->head; \ - while (dep) { \ - GnmDependent *_next = dep->next_dep; \ - code; \ - dep = _next; \ - } \ - } while (0) - -#define DEPENDENT_MAKE_TYPE(t, set_expr_handler) \ -guint \ -t ## _get_dep_type (void) \ -{ \ - static guint32 type = 0; \ - if (type == 0) { \ - static DependentClass klass; \ - klass.eval = &t ## _eval; \ - klass.set_expr = set_expr_handler; \ - klass.debug_name = &t ## _debug_name; \ - type = dependent_type_register (&klass); \ - } \ - return type; \ -} - -void dependent_debug_name (GnmDependent const *dep, FILE *out); - -#endif /* GNUMERIC_EVAL_H */ diff --git a/lib/goffice/split/error-info.h b/lib/goffice/split/error-info.h deleted file mode 100644 index 60b402f547..0000000000 --- a/lib/goffice/split/error-info.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef GNUMERIC_ERROR_INFO_H -#define GNUMERIC_ERROR_INFO_H - -#include - -typedef enum { - GNM_WARNING = 1, - GNM_ERROR -} GnmSeverity; - -ErrorInfo *error_info_new_str (char const *msg); -ErrorInfo *error_info_new_printf (char const *msg_format, ...) G_GNUC_PRINTF (1, 2); -ErrorInfo *error_info_new_vprintf (GnmSeverity severity, - char const *msg_format, - va_list args); -ErrorInfo *error_info_new_str_with_details (char const *msg, ErrorInfo *details); -ErrorInfo *error_info_new_str_with_details_list (char const *msg, GSList *details); -ErrorInfo *error_info_new_from_error_list (GSList *errors); -ErrorInfo *error_info_new_from_errno (void); -void error_info_add_details (ErrorInfo *error, ErrorInfo *details); -void error_info_add_details_list (ErrorInfo *error, GSList *details); -void error_info_free (ErrorInfo *error); -void error_info_print (ErrorInfo *error); -char const *error_info_peek_message (ErrorInfo *error); -GSList *error_info_peek_details (ErrorInfo *error); -GnmSeverity error_info_peek_severity (ErrorInfo *error); - -#define GNM_INIT_RET_ERROR_INFO(ret_error) \ -G_STMT_START { \ - g_assert (ret_error != NULL); \ - *ret_error = NULL; \ -} G_STMT_END - -#endif /* GNUMERIC_ERROR_INFO_H */ diff --git a/lib/goffice/split/file.h b/lib/goffice/split/file.h deleted file mode 100644 index 6ad5e81c95..0000000000 --- a/lib/goffice/split/file.h +++ /dev/null @@ -1,162 +0,0 @@ -#ifndef GNUMERIC_FILE_H -#define GNUMERIC_FILE_H - -#include "gnumeric.h" -#include -#include - - -/* - * File format levels. They are ordered. When we save a file, we - * remember the name, but not if we already have a name at a higher level. - * When created, workbooks are assigned a name at level FILE_FL_NEW. - */ -typedef enum { - FILE_FL_NONE, /* No name assigned, won't happen */ - FILE_FL_WRITE_ONLY, /* PostScript etc, won't be remembered */ - FILE_FL_NEW, /* Wb just created */ - FILE_FL_MANUAL, /* Save gets punted to save as */ - FILE_FL_MANUAL_REMEMBER, /* Ditto, but remember in history */ - FILE_FL_AUTO, /* Save will save to this filename */ - FILE_FL_LAST -} FileFormatLevel; - -/* - * File probe level tells file opener (its probe method to be exact), how - * hard it should try to recognize the type of the file. File openers may - * ignore this or support only some probe levels, but if specifies - * "reccomened" behaviour. - * Before opening any file we detect its type by calling probe for - * every registered file opener (in order of priority) and passing - * FILE_PROBE_FILE_NAME as probe level. If none of them recogizes the file, - * we increase probe level and try again... - */ -typedef enum { - FILE_PROBE_FILE_NAME, /* Test only file name, don't read file contents */ - FILE_PROBE_CONTENT, /* Read the whole file if it's necessary */ - FILE_PROBE_LAST -} FileProbeLevel; - -/* - * FileSaveScope specifies what information file saver can save in a file. - * Many savers can save the whole workbook (with all sheets), but others - * save only current sheet, usually because of file format limitations. - */ -typedef enum { - FILE_SAVE_WORKBOOK, - FILE_SAVE_SHEET, - FILE_SAVE_RANGE, - FILE_SAVE_LAST -} FileSaveScope; - -/* - * GnmFileOpener - */ - -typedef struct _GnmFileOpenerClass GnmFileOpenerClass; - -#define TYPE_GNM_FILE_OPENER (gnm_file_opener_get_type ()) -#define GNM_FILE_OPENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GNM_FILE_OPENER, GnmFileOpener)) -#define IS_GNM_FILE_OPENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GNM_FILE_OPENER)) - -typedef gboolean (*GnmFileOpenerProbeFunc) (GnmFileOpener const *fo, - GsfInput *input, - FileProbeLevel pl); -typedef void (*GnmFileOpenerOpenFunc) (GnmFileOpener const *fo, - IOContext *io_context, - WorkbookView *wbv, - GsfInput *input); -typedef void (*GnmFileOpenerOpenFuncWithEnc) (GnmFileOpener const *fo, - gchar const *enc, - IOContext *io_context, - WorkbookView *wbv, - GsfInput *input); - -GType gnm_file_opener_get_type (void); - -GnmFileOpener *gnm_file_opener_new (char const *id, - char const *description, - GSList *suffixes, - GSList *mimes, - GnmFileOpenerProbeFunc probe_func, - GnmFileOpenerOpenFunc open_func); -GnmFileOpener *gnm_file_opener_new_with_enc (char const *id, - char const *description, - GSList *suffixes, - GSList *mimes, - GnmFileOpenerProbeFunc probe_func, - GnmFileOpenerOpenFuncWithEnc open_func); - - -gboolean gnm_file_opener_probe (GnmFileOpener const *fo, GsfInput *input, - FileProbeLevel pl); -void gnm_file_opener_open (GnmFileOpener const *fo, gchar const *opt_enc, - IOContext *io_context, - WorkbookView *wbv, GsfInput *input); - -char const *gnm_file_opener_get_id (GnmFileOpener const *fo); -char const *gnm_file_opener_get_description (GnmFileOpener const *fo); -gboolean gnm_file_opener_is_encoding_dependent (GnmFileOpener const *fo); -gboolean gnm_file_opener_can_probe (GnmFileOpener const *fo, - FileProbeLevel pl); -GSList const *gnm_file_opener_get_suffixes (GnmFileOpener const *fo); -GSList const *gnm_file_opener_get_mimes (GnmFileOpener const *fo); - -/* - * GnmFileSaver - */ - -typedef struct _GnmFileSaverClass GnmFileSaverClass; - -#define TYPE_GNM_FILE_SAVER (gnm_file_saver_get_type ()) -#define GNM_FILE_SAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GNM_FILE_SAVER, GnmFileSaver)) -#define IS_GNM_FILE_SAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GNM_FILE_SAVER)) - -typedef void (*GnmFileSaverSaveFunc) (GnmFileSaver const *fs, - IOContext *io_context, - WorkbookView const *wbv, - GsfOutput *output); -GType gnm_file_saver_get_type (void); - -GnmFileSaver *gnm_file_saver_new (char const *id, - char const *extension, - char const *description, - FileFormatLevel level, - GnmFileSaverSaveFunc save_func); - -void gnm_file_saver_set_save_scope (GnmFileSaver *fs, FileSaveScope scope); -FileSaveScope gnm_file_saver_get_save_scope (GnmFileSaver const *fs); - -void gnm_file_saver_save (GnmFileSaver const *fs, IOContext *io_context, - WorkbookView const *wbv, GsfOutput *output); -void gnm_file_saver_set_overwrite_files (GnmFileSaver *fs, - gboolean overwrite); -gboolean gnm_vrfy_uri_ext (gchar const *std_ext, - gchar const *uri, - gchar **new_uri); -char const *gnm_file_saver_get_id (GnmFileSaver const *fs); -char const *gnm_file_saver_get_extension (GnmFileSaver const *fs); -char const *gnm_file_saver_get_mime_type (GnmFileSaver const *fs); -char const *gnm_file_saver_get_description (GnmFileSaver const *fs); -FileFormatLevel gnm_file_saver_get_format_level (GnmFileSaver const *fs); - -/* - * - */ - -GList *get_file_openers (void); -void gnm_file_opener_unregister (GnmFileOpener *fo); -void gnm_file_opener_register (GnmFileOpener *fo, gint priority); -GnmFileOpener *gnm_file_opener_for_id (char const *id); - -GList *get_file_savers (void); -void gnm_file_saver_unregister (GnmFileSaver *fs); -void gnm_file_saver_register (GnmFileSaver *fs); -void gnm_file_saver_register_as_default (GnmFileSaver *fs, gint priority); - -GnmFileSaver *gnm_file_saver_get_default (void); -GnmFileSaver *gnm_file_saver_for_mime_type (char const *mime_type); -GnmFileSaver *gnm_file_saver_for_file_name (char const *file_name); -GnmFileSaver *gnm_file_saver_for_id (char const *id); - -#endif /* GNUMERIC_FILE_H */ diff --git a/lib/goffice/split/format.h b/lib/goffice/split/format.h deleted file mode 100644 index 2e2bb40105..0000000000 --- a/lib/goffice/split/format.h +++ /dev/null @@ -1,133 +0,0 @@ -#ifndef GNUMERIC_FORMAT_H -#define GNUMERIC_FORMAT_H - -#include -#include "gnumeric.h" -#include "numbers.h" -#include "regutf8.h" -#include - -typedef enum { - FMT_UNKNOWN = -1, - - FMT_GENERAL = 0, - FMT_NUMBER = 1, - FMT_CURRENCY = 2, - FMT_ACCOUNT = 3, - FMT_DATE = 4, - FMT_TIME = 5, - FMT_PERCENT = 6, - FMT_FRACTION = 7, - FMT_SCIENCE = 8, - FMT_TEXT = 9, - FMT_SPECIAL = 10, - - FMT_MARKUP = 11 /* Internal use only */ -} FormatFamily; - -typedef struct { - unsigned char const * const symbol; - unsigned char const * const description; - gboolean const precedes; - gboolean const has_space; -} CurrencySymbol; - -typedef struct { - gboolean thousands_sep; - int num_decimals; /* 0 - 30 */ - int negative_fmt; /* 0 - 3 */ - int currency_symbol_index; - int list_element; - gboolean date_has_days; - gboolean date_has_months; - int fraction_denominator; -} FormatCharacteristics; - -struct _GnmFormat { - int ref_count; - char *format; - GSList *entries; /* Of type StyleFormatEntry. */ - char *regexp_str; - GByteArray *match_tags; - go_regex_t regexp; - FormatFamily family; - FormatCharacteristics family_info; - PangoAttrList *markup; /* only for FMT_MARKUP */ -}; - -char *style_format_delocalize (char const *descriptor_string); -GnmFormat *style_format_new_markup (PangoAttrList *markup, gboolean add_ref); -GnmFormat *style_format_new_XL (char const *descriptor_string, - gboolean delocalize); -GnmFormat *style_format_build (FormatFamily family, - FormatCharacteristics const *info); - -char *style_format_as_XL (GnmFormat const *fmt, - gboolean localized); -char *style_format_str_as_XL (char const *descriptor_string, - gboolean localized); - -void style_format_ref (GnmFormat *sf); -void style_format_unref (GnmFormat *sf); -gboolean style_format_equal (GnmFormat const *a, GnmFormat const *b); - -GnmFormat *style_format_general (void); -GnmFormat *style_format_default_date (void); -GnmFormat *style_format_default_time (void); -GnmFormat *style_format_default_date_time (void); -GnmFormat *style_format_default_percentage (void); -GnmFormat *style_format_default_money (void); - -#define style_format_is_general(sf) ((sf)->family == FMT_GENERAL) -#define style_format_is_markup(sf) ((sf)->family == FMT_MARKUP) -#define style_format_is_text(sf) ((sf)->family == FMT_TEXT) - -char *format_value (GnmFormat const *format, GnmValue const *value, GnmColor **color, - double col_width, GnmDateConventions const *date_conv); -void format_value_gstring (GString *result, GnmFormat const *format, - GnmValue const *value, GnmColor **color, - double col_width, GnmDateConventions const *date_conv); - -void format_color_init (void); -void format_color_shutdown (void); - -GnmFormat *format_add_decimal (GnmFormat const *fmt); -GnmFormat *format_remove_decimal (GnmFormat const *fmt); -GnmFormat *format_toggle_thousands (GnmFormat const *fmt); - -typedef struct { - int right_optional, right_spaces, right_req, right_allowed; - int left_spaces, left_req; - float scale; - gboolean rendered; - gboolean decimal_separator_seen; - gboolean group_thousands; - gboolean has_fraction; -} format_info_t; -void render_number (GString *result, gnm_float number, format_info_t const *info); - -/* Locale support routines */ -void gnm_set_untranslated_bools (void); -char const * gnm_setlocale (int category, char const *val); -GString const *format_get_currency (gboolean *precedes, gboolean *space_sep); -gboolean format_month_before_day (void); -char format_get_arg_sep (void); -char format_get_col_sep (void); -GString const *format_get_thousand (void); -GString const *format_get_decimal (void); -char const * format_boolean (gboolean b); - -void number_format_init (void); -void number_format_shutdown (void); - -void currency_date_format_init (void); -void currency_date_format_shutdown (void); - -FormatFamily cell_format_classify (GnmFormat const *fmt, FormatCharacteristics *info); - -/* Indexed by FormatCharacteristics */ -extern char const * const * const cell_formats []; - -extern CurrencySymbol const currency_symbols []; - -#endif /* GNUMERIC_FORMAT_H */ diff --git a/lib/goffice/split/func.h b/lib/goffice/split/func.h deleted file mode 100644 index a673304b7d..0000000000 --- a/lib/goffice/split/func.h +++ /dev/null @@ -1,251 +0,0 @@ -#ifndef GNUMERIC_FUNC_H -#define GNUMERIC_FUNC_H - -#include "gnumeric.h" -#include "dependent.h" - -/* Setup of the symbol table */ -void functions_init (void); -void functions_shutdown (void); - -/* Used to build manual */ -void function_dump_defs (char const *filename, gboolean def_or_state); - -/******************************************************************************/ -/* Function group support */ - -typedef struct { - GnmString *internal_name, *display_name; - gboolean has_translation; - GSList *functions; -} GnmFuncGroup; - -GnmFuncGroup *gnm_func_group_get_nth (gint n); -GnmFuncGroup *gnm_func_group_fetch (char const *name); -GnmFuncGroup *gnm_func_group_fetch_with_translation (char const *name, - char const *translation); - -/******************************************************************************/ - -/* - * Function registration routines - * - * Functions come in two fashions: Those that only deal with - * very specific data types and a constant number of arguments, - * and those who don't. - * - * The former kind of functions receives a precomputed array of - * GnmValue pointers. - * - * The latter sort of functions receives the plain ExprNodes and - * it is up to that routine to do the value computations and range - * processing. - */ - -/** - * Argument tokens passed in 'args' - * - * With intersection and iteration support - * f : float (no errors, string conversion attempted) - * b : boolean (identical to f, Do we need this ?) - * s : string (no errors) - * S : 'scalar': any non-error value - * E : scalar including errors - * Without intersection or iteration support - * r : cell range content is _NOT_ guaranteed to have been evaluated yet - * A : area either range or array (as above) - * a : array - * ? : anything - * - * For optional arguments do: - * "ff|ss" where the strings are optional - **/ - -typedef enum { - GNM_FUNC_TYPE_ARGS, /* Arguments get marshalled by type */ - GNM_FUNC_TYPE_NODES, /* Takes unevaulated expers directly */ - - /* implementation has not been loaded yet, but we know where it is */ - GNM_FUNC_TYPE_STUB -} GnmFuncType; - -typedef enum { - GNM_FUNC_SIMPLE = 0, - GNM_FUNC_VOLATILE = 1 << 0, /* eg now(), today() */ - GNM_FUNC_RETURNS_NON_SCALAR = 1 << 1, /* eg transpose(), mmult() */ - - /* For functions that are not exactly compatible with various import - * formats. We need to recalc their results to avoid changing values - * unexpectedly when we recalc later. This probably needs to be done - * on a per import format basis. It may not belong here. - */ - GNM_FUNC_RECALC_ONLOAD = 1 << 2, - - /* an unknown function that will hopefully be defined later */ - GNM_FUNC_IS_PLACEHOLDER = 1 << 3, - GNM_FUNC_FREE_NAME = 1 << 4, - GNM_FUNC_IS_WORKBOOK_LOCAL = 1 << 5, - - GNM_FUNC_AUTO_UNKNOWN = 0 << 8, - GNM_FUNC_AUTO_MONETARY = 1 << 8, /* Like PV */ - GNM_FUNC_AUTO_DATE = 2 << 8, /* Like DATE */ - GNM_FUNC_AUTO_TIME = 3 << 8, /* Like TIME */ - GNM_FUNC_AUTO_PERCENT = 4 << 8, /* Like IRR */ - GNM_FUNC_AUTO_FIRST = 5 << 8, /* Like SUM */ - GNM_FUNC_AUTO_SECOND = 6 << 8, /* Like IF */ - GNM_FUNC_AUTO_UNITLESS = 7 << 8, /* Like COUNT */ - GNM_FUNC_AUTO_MASK = 7 << 8 /* The bits we use for AUTO. */ -} GnmFuncFlags; - -/* I do not like this it is going to be different for different apps - * probably want to split it into bit file with our notion of its state, and 2 - * bits of state per import format. - */ -typedef enum { - GNM_FUNC_IMPL_STATUS_EXISTS = 0, - GNM_FUNC_IMPL_STATUS_UNIMPLEMENTED, - GNM_FUNC_IMPL_STATUS_SUBSET, - GNM_FUNC_IMPL_STATUS_COMPLETE, - GNM_FUNC_IMPL_STATUS_SUPERSET, - GNM_FUNC_IMPL_STATUS_SUBSET_WITH_EXTENSIONS, - GNM_FUNC_IMPL_STATUS_UNDER_DEVELOPMENT, - GNM_FUNC_IMPL_STATUS_UNIQUE_TO_GNUMERIC -} GnmFuncImplStatus; - -typedef enum { - GNM_FUNC_TEST_STATUS_UNKNOWN = 0, - GNM_FUNC_TEST_STATUS_NO_TESTSUITE, - GNM_FUNC_TEST_STATUS_BASIC, - GNM_FUNC_TEST_STATUS_EXHAUSTIVE, - GNM_FUNC_TEST_STATUS_UNDER_DEVELOPMENT -} GnmFuncTestStatus; -typedef struct _GnmFuncDescriptor GnmFuncDescriptor; - -typedef GnmValue *(*GnmFuncArgs) (FunctionEvalInfo *ei, GnmValue **args); -typedef GnmValue *(*GnmFuncNodes) (FunctionEvalInfo *ei, GnmExprList *l); -typedef DependentFlags (*GnmFuncLink) (FunctionEvalInfo *ei); -typedef void (*GnmFuncUnlink) (FunctionEvalInfo *ei); - -typedef void (*GnmFuncRefNotify) (GnmFunc *f, int refcount); -typedef gboolean (*GnmFuncLoadDesc) (GnmFunc const *f, GnmFuncDescriptor *fd); - -struct _GnmFuncDescriptor { - char const *name; - char const *arg_spec; - char const *arg_names; - char const **help; /* this is easier for compilers */ - GnmFuncArgs fn_args; - GnmFuncNodes fn_nodes; - GnmFuncLink linker; - GnmFuncUnlink unlinker; - GnmFuncRefNotify ref_notify; - GnmFuncFlags flags; - GnmFuncImplStatus impl_status; - GnmFuncTestStatus test_status; -}; - -struct _GnmFunc { - char const *name; - char const *arg_names; - char const *help; - GnmFuncType fn_type; - union { - GnmFuncNodes nodes; - struct { - char const *arg_spec; - GnmFuncArgs func; - int min_args, max_args; - char *arg_types; - } args; - GnmFuncLoadDesc load_desc; - } fn; - GnmFuncGroup *fn_group; /* most recent it was assigned to */ - GnmFuncLink linker; - GnmFuncUnlink unlinker; - GnmFuncRefNotify ref_notify; - GnmFuncImplStatus impl_status; - GnmFuncTestStatus test_status; - GnmFuncFlags flags; - - gint ref_count; - gpointer user_data; -}; - -struct _FunctionEvalInfo { - GnmEvalPos const *pos; - GnmExprFunction const *func_call; -}; - -void gnm_func_free (GnmFunc *func); -void gnm_func_ref (GnmFunc *func); -void gnm_func_unref (GnmFunc *func); -void gnm_func_load_stub (GnmFunc *fn_def); -char const *gnm_func_get_name (GnmFunc const *fn_def); -gpointer gnm_func_get_user_data (GnmFunc const *func); -void gnm_func_set_user_data (GnmFunc *func, gpointer user_data); -GnmFunc *gnm_func_lookup (char const *name, Workbook const *scope); -GnmFunc *gnm_func_add (GnmFuncGroup *group, - GnmFuncDescriptor const *descriptor); -GnmFunc *gnm_func_add_stub (GnmFuncGroup *group, - char const *name, - GnmFuncLoadDesc load_desc, - GnmFuncRefNotify opt_ref_notify); -GnmFunc *gnm_func_add_placeholder (Workbook *optional_context, - char const *name, - char const *type, - gboolean copy_name); -GnmExpr const *gnm_func_placeholder_factory (const char *name, - GnmExprList *args, - GnmExprConventions *convs); - - -/* TODO */ -void function_def_count_args (GnmFunc const *fn_def, - gint *min, int *max); -char function_def_get_arg_type (GnmFunc const *fn_def, - gint arg_idx); -char const *function_def_get_arg_type_string (GnmFunc const *fn_def, - gint arg_idx); -char *function_def_get_arg_name (GnmFunc const *fn_def, - gint arg_idx); - -/*************************************************************************/ - -GnmValue *function_call_with_list (FunctionEvalInfo *ei, GnmExprList *args, - GnmExprEvalFlags flags); -GnmValue *function_call_with_values (GnmEvalPos const *ep, char const *name, - gint argc, GnmValue *values []); -GnmValue *function_def_call_with_values (GnmEvalPos const *ep, GnmFunc const *fn, - gint argc, GnmValue *values []); - -/* Utilies to interate through ranges and argument lists */ -typedef GnmValue * (*FunctionIterateCB) (GnmEvalPos const *ep, - GnmValue *value, gpointer user_data); -GnmValue *function_iterate_argument_values (GnmEvalPos const *ep, - FunctionIterateCB cb, - gpointer user_data, - GnmExprList *expr_node_list, - gboolean strict, - CellIterFlags iter_flags); -GnmValue *function_iterate_do_value (GnmEvalPos const *ep, - FunctionIterateCB cb, - gpointer user_data, - GnmValue *value, - gboolean strict, - CellIterFlags iter_flags); - -/******************************************************************************/ - -/* Detailed function help */ -typedef struct { - GPtrArray *sections; - gboolean help_is_localized; - char *help_copy; - GnmFunc const *fndef; -} TokenizedHelp; - -TokenizedHelp *tokenized_help_new (GnmFunc const *fn_def); -char const *tokenized_help_find (TokenizedHelp *tok, char const *token); -void tokenized_help_destroy (TokenizedHelp *tok); - -#endif /* GNUMERIC_FUNC_H */ diff --git a/lib/goffice/split/global-gnome-font.c b/lib/goffice/split/global-gnome-font.c deleted file mode 100644 index 4614d6dd18..0000000000 --- a/lib/goffice/split/global-gnome-font.c +++ /dev/null @@ -1,21 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Global Gnome Font data structures. To avoid duplicating this across - * workbooks. - * - * Author: - * Miguel de Icaza (miguel@gnu.org) - */ -#include "gnumeric.h" -#include "global-gnome-font.h" - -GList *gnumeric_font_family_list = NULL; -GList *gnumeric_point_size_list = NULL; - -int const gnumeric_point_sizes [] = { - 4, 8, 9, 10, 11, 12, 14, 16, 18, - 20, 22, 24, 26, 28, 36, 48, 72, - 0 -}; - diff --git a/lib/goffice/split/global-gnome-font.h b/lib/goffice/split/global-gnome-font.h deleted file mode 100644 index cf102fe72c..0000000000 --- a/lib/goffice/split/global-gnome-font.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef GNUMERIC_GLOBAL_GNOME_FONT_H -#define GNUMERIC_GLOBAL_GNOME_FONT_H - -extern GList *gnumeric_font_family_list; -extern GList *gnumeric_point_size_list; -extern int const gnumeric_point_sizes []; - -#endif diff --git a/lib/goffice/split/gnumeric-gconf-priv.h b/lib/goffice/split/gnumeric-gconf-priv.h deleted file mode 100644 index bcc5f5b4c3..0000000000 --- a/lib/goffice/split/gnumeric-gconf-priv.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef GNM_CONF_PRIV_H -#define GNM_CONF_PRIV_H - -/* - * Note: This file must stay synchronized with the corresponding schema file! - * - * This file should only be included into gnucash-gconf.c and - * dialogs/dialog-preferences.c - */ - - -/* - * schemas/gnucash-dialogs.schemas - */ -#define FUNCTION_SELECT_GCONF_RECENT "/apps/gnucash/functionselector/recentfunctions" -#define FUNCTION_SELECT_GCONF_NUM_OF_RECENT "/apps/gnucash/functionselector/num-of-recent" - -#define CONF_DEFAULT_FONT_DIR "/apps/gnucash/core/defaultfont/" -#define CONF_DEFAULT_FONT_NAME CONF_DEFAULT_FONT_DIR "name" -#define CONF_DEFAULT_FONT_SIZE CONF_DEFAULT_FONT_DIR "size" -#define CONF_DEFAULT_FONT_BOLD CONF_DEFAULT_FONT_DIR "bold" -#define CONF_DEFAULT_FONT_ITALIC CONF_DEFAULT_FONT_DIR "italic" - -#define PLUGIN_GCONF_DIRECTORY "/apps/gnucash/plugins" -#define PLUGIN_GCONF_ACTIVATE_NEW PLUGIN_GCONF_DIRECTORY "/activate-new" -#define PLUGIN_GCONF_ACTIVE PLUGIN_GCONF_DIRECTORY "/active" -#define PLUGIN_GCONF_FILE_STATES PLUGIN_GCONF_DIRECTORY "/file-states" -#define PLUGIN_GCONF_EXTRA_DIRS PLUGIN_GCONF_DIRECTORY "/extra-dirs" - -#define AUTOFORMAT_GCONF_DIRECTORY "/apps/gnucash/autoformat" -#define AUTOFORMAT_GCONF_EXTRA_DIRS AUTOFORMAT_GCONF_DIRECTORY "/extra-dirs" -#define AUTOFORMAT_GCONF_SYS_DIR AUTOFORMAT_GCONF_DIRECTORY "/sys-dir" -#define AUTOFORMAT_GCONF_USR_DIR AUTOFORMAT_GCONF_DIRECTORY "/usr-dir" - -#define PRINTSETUP_GCONF_DIRECTORY "/apps/gnucash/printsetup" -#define PRINTSETUP_GCONF_ALL_SHEETS PRINTSETUP_GCONF_DIRECTORY "/all-sheets" -#define PRINTSETUP_GCONF_PRINTER_CONFIG PRINTSETUP_GCONF_DIRECTORY "/printer-config" -#define PRINTSETUP_GCONF_HEADER PRINTSETUP_GCONF_DIRECTORY "/header" -#define PRINTSETUP_GCONF_FOOTER PRINTSETUP_GCONF_DIRECTORY "/footer" -#define PRINTSETUP_GCONF_HF_FONT_NAME PRINTSETUP_GCONF_DIRECTORY "/hf-font-name" -#define PRINTSETUP_GCONF_HF_FONT_SIZE PRINTSETUP_GCONF_DIRECTORY "/hf-font-size" -#define PRINTSETUP_GCONF_HF_FONT_BOLD PRINTSETUP_GCONF_DIRECTORY "/hf-font-bold" -#define PRINTSETUP_GCONF_HF_FONT_ITALIC PRINTSETUP_GCONF_DIRECTORY "/hf-font-italic" -#define PRINTSETUP_GCONF_CENTER_HORIZONTALLY PRINTSETUP_GCONF_DIRECTORY "/center-horizontally" -#define PRINTSETUP_GCONF_CENTER_VERTICALLY PRINTSETUP_GCONF_DIRECTORY "/center-vertically" -#define PRINTSETUP_GCONF_PRINT_GRID_LINES PRINTSETUP_GCONF_DIRECTORY "/print-grid-lines" -#define PRINTSETUP_GCONF_EVEN_IF_ONLY_STYLES PRINTSETUP_GCONF_DIRECTORY "/print-even-if-only-styles" -#define PRINTSETUP_GCONF_PRINT_BLACK_AND_WHITE PRINTSETUP_GCONF_DIRECTORY "/print-black-n-white" -#define PRINTSETUP_GCONF_PRINT_TITLES PRINTSETUP_GCONF_DIRECTORY "/print-titles" -#define PRINTSETUP_GCONF_RIGHT_THEN_DOWN PRINTSETUP_GCONF_DIRECTORY "/right-then-down" -#define PRINTSETUP_GCONF_SCALE_PERCENTAGE PRINTSETUP_GCONF_DIRECTORY "/scale-percentage" -#define PRINTSETUP_GCONF_SCALE_PERCENTAGE_VALUE PRINTSETUP_GCONF_DIRECTORY "/scale-percentage-value" -#define PRINTSETUP_GCONF_SCALE_WIDTH PRINTSETUP_GCONF_DIRECTORY "/scale-width" -#define PRINTSETUP_GCONF_SCALE_HEIGHT PRINTSETUP_GCONF_DIRECTORY "/scale-height" -#define PRINTSETUP_GCONF_REPEAT_TOP PRINTSETUP_GCONF_DIRECTORY "/repeat-top" -#define PRINTSETUP_GCONF_REPEAT_LEFT PRINTSETUP_GCONF_DIRECTORY "/repeat-left" -#define PRINTSETUP_GCONF_MARGIN_TOP PRINTSETUP_GCONF_DIRECTORY "/margin-top" -#define PRINTSETUP_GCONF_MARGIN_BOTTOM PRINTSETUP_GCONF_DIRECTORY "/margin-bottom" -#define PRINTSETUP_GCONF_HEADER_FORMAT_LEFT PRINTSETUP_GCONF_DIRECTORY "/hf-left" -#define PRINTSETUP_GCONF_HEADER_FORMAT_MIDDLE PRINTSETUP_GCONF_DIRECTORY "/hf-middle" -#define PRINTSETUP_GCONF_HEADER_FORMAT_RIGHT PRINTSETUP_GCONF_DIRECTORY "/hf-right" - -#define DIALOGS_GCONF_DIRECTORY "/apps/gnucash/dialogs" -#define DIALOGS_GCONF_UNFOCUSED_RS DIALOGS_GCONF_DIRECTORY "/rs/unfocused" - -/* - * schemas/gnucash-general.schemas - */ - -#define GNM_CONF_UNDO_DIRECTORY "/apps/gnucash/undo" -#define GNM_CONF_UNDO_SIZE GNM_CONF_UNDO_DIRECTORY "/size" -#define GNM_CONF_UNDO_MAXNUM GNM_CONF_UNDO_DIRECTORY "/maxnum" -#define GNM_CONF_UNDO_SHOW_SHEET_NAME GNM_CONF_UNDO_DIRECTORY "/show_sheet_name" -#define GNM_CONF_UNDO_MAX_DESCRIPTOR_WIDTH GNM_CONF_UNDO_DIRECTORY "/max_descriptor_width" - -#define GNM_CONF_FONT_DIRECTORY "/apps/gnucash/core/defaultfont" -#define GNM_CONF_FONT_NAME GNM_CONF_FONT_DIRECTORY "/name" -#define GNM_CONF_FONT_SIZE GNM_CONF_FONT_DIRECTORY "/size" -#define GNM_CONF_FONT_BOLD GNM_CONF_FONT_DIRECTORY "/bold" -#define GNM_CONF_FONT_ITALIC GNM_CONF_FONT_DIRECTORY "/italic" - -#define GNM_CONF_FILE_DIRECTORY "/apps/gnucash/core/file" -#define GNM_CONF_FILE_HISTORY_N GNM_CONF_FILE_DIRECTORY "/history/n" -#define GNM_CONF_FILE_HISTORY_FILES GNM_CONF_FILE_DIRECTORY "/history/files" -#define GNM_CONF_FILE_OVERWRITE_DEFAULT GNM_CONF_FILE_DIRECTORY "/save/def-overwrite" -#define GNM_CONF_FILE_SINGLE_SHEET_SAVE GNM_CONF_FILE_DIRECTORY "/save/single_sheet" - -#define GNM_CONF_WORKBOOK_NSHEETS "/apps/gnucash/core/workbook/n-sheet" - -#define GNM_CONF_GUI_DIRECTORY "/apps/gnucash/core/gui" -#define GNM_CONF_GUI_RES_H GNM_CONF_GUI_DIRECTORY "/screen/horizontaldpi" -#define GNM_CONF_GUI_RES_V GNM_CONF_GUI_DIRECTORY "/screen/verticaldpi" -#define GNM_CONF_GUI_ED_AUTOCOMPLETE GNM_CONF_GUI_DIRECTORY "/editing/autocomplete" -#define GNM_CONF_GUI_ED_TRANSITION_KEYS GNM_CONF_GUI_DIRECTORY "/editing/transitionkeys" -#define GNM_CONF_GUI_ED_LIVESCROLLING GNM_CONF_GUI_DIRECTORY "/editing/livescrolling" -#define GNM_CONF_GUI_ED_RECALC_LAG GNM_CONF_GUI_DIRECTORY "/editing/recalclag" -#define GNM_CONF_GUI_WINDOW_X GNM_CONF_GUI_DIRECTORY "/window/x" -#define GNM_CONF_GUI_WINDOW_Y GNM_CONF_GUI_DIRECTORY "/window/y" -#define GNM_CONF_GUI_ZOOM GNM_CONF_GUI_DIRECTORY "/window/zoom" - -#define GNM_CONF_XML_COMPRESSION "/apps/gnucash/core/xml/compression-level" - -#define GNM_CONF_SORT_DIRECTORY "/apps/gnucash/core/sort" -#define GNM_CONF_SORT_DEFAULT_BY_CASE GNM_CONF_SORT_DIRECTORY "/default/by-case" -#define GNM_CONF_SORT_DEFAULT_RETAIN_FORM GNM_CONF_SORT_DIRECTORY "/default/retain-formats" -#define GNM_CONF_SORT_DEFAULT_ASCENDING GNM_CONF_SORT_DIRECTORY "/default/ascending" -#define GNM_CONF_SORT_DIALOG_MAX_INITIAL GNM_CONF_SORT_DIRECTORY "/dialog/max-initial-clauses" - -#define GNM_CONF_CUTANDPASTE_DIRECTORY "/apps/gnucash/cut-and-paste" -#define GNM_CONF_CUTANDPASTE_PREFER_CLIPBOARD GNM_CONF_CUTANDPASTE_DIRECTORY "/prefer-clipboard" - -/* - * schemas/gnucash-plugins.schemas - */ - -#define PLUGIN_GCONF_LATEX "/apps/gnucash/plugin/latex" -#define PLUGIN_GCONF_LATEX_USE_UTF8 PLUGIN_GCONF_LATEX "/use-utf8" - -#endif /* GNM_CONF_PRIV_H */ diff --git a/lib/goffice/split/gnumeric-gconf.c b/lib/goffice/split/gnumeric-gconf.c deleted file mode 100644 index 3ea99ba9fd..0000000000 --- a/lib/goffice/split/gnumeric-gconf.c +++ /dev/null @@ -1,1175 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gnumeric-gconf.c: - * - * - * Author: - * Andreas J. Guelzow - * - * (C) Copyright 2002-2004 Andreas J. Guelzow - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include "application.h" -#include "gnumeric-gconf.h" -#include "gnumeric-gconf-priv.h" -#include "gutils.h" -#include "mstyle.h" - -static GnmAppPrefs prefs; -GnmAppPrefs const *gnm_app_prefs = &prefs; - -#ifdef WITH_GNOME -#include -#include -#include -#include - -static GConfClient *gconf_client = NULL; -static GConfClient * -gnm_app_get_gconf_client (void) -{ - if (!gconf_client) { - gconf_client = gconf_client_get_default (); - gconf_client_add_dir (gconf_client, "/apps/gnumeric", - GCONF_CLIENT_PRELOAD_RECURSIVE, - NULL); - } - return gconf_client; -} -void -go_conf_sync (void) -{ - gconf_client_suggest_sync (gnm_app_get_gconf_client (), NULL); -} - -void -go_conf_set_bool (char const *key, gboolean val) -{ - gconf_client_set_bool (gnm_app_get_gconf_client (), key, val, NULL); -} -void -go_conf_set_int (char const *key, gint val) -{ - gconf_client_set_int (gnm_app_get_gconf_client (), key, val, NULL); -} -void -go_conf_set_double (char const *key, gnm_float val) -{ - gconf_client_set_float (gnm_app_get_gconf_client (), key, val, NULL); -} -void -go_conf_set_string (char const *key, char const *str) -{ - gconf_client_set_string (gnm_app_get_gconf_client (), key, str, NULL); -} -void -go_conf_set_str_list (char const *key, GSList *list) -{ - gconf_client_set_list (gnm_app_get_gconf_client (), - key, GCONF_VALUE_STRING, list, NULL); -} - -static GConfValue * -go_conf_get (char const *key, GConfValueType t) -{ - GError *err = NULL; - GConfValue *val = gconf_client_get (gnm_app_get_gconf_client (), key, &err); - - if (err != NULL) { - g_warning ("Unable to load key '%s' : because %s", - key, err->message); - g_error_free (err); - return NULL; - } - if (val == NULL) { - g_warning ("Unable to load key '%s'", key); - return NULL; - } - - if (val->type != t) { -#if 1 /* gconf_value_type_to_string is internal */ - g_warning ("Expected `%d' got `%d' for key %s", - t, val->type, key); -#else - g_warning ("Expected `%s' got `%s' for key %s", - gconf_value_type_to_string (t), - gconf_value_type_to_string (val->type), - key); -#endif - gconf_value_free (val); - return NULL; - } - - return val; -} -gboolean -go_conf_load_bool (char const *key, gboolean default_val) -{ - gboolean res; - GConfValue *val = go_conf_get (key, GCONF_VALUE_BOOL); - - if (val != NULL) { - res = gconf_value_get_bool (val); - gconf_value_free (val); - } else { - g_warning ("Using default value '%s'", default_val ? "true" : "false"); - return default_val; - } - return res; -} - -int -go_conf_load_int (char const *key, int minima, int maxima, int default_val) -{ - int res = -1; - GConfValue *val = go_conf_get (key, GCONF_VALUE_INT); - - if (val != NULL) { - res = gconf_value_get_int (val); - gconf_value_free (val); - if (res < minima || maxima < res) { - g_warning ("Invalid value '%d' for %s. If should be >= %d and <= %d", - res, key, minima, maxima); - val = NULL; - } - } - if (val == NULL) { - g_warning ("Using default value '%d'", default_val); - return default_val; - } - return res; -} - -double -go_conf_load_double (char const *key, - double minima, double maxima, double default_val) -{ - double res = -1; - GConfValue *val = go_conf_get (key, GCONF_VALUE_FLOAT); - - if (val != NULL) { - res = gconf_value_get_float (val); - gconf_value_free (val); - if (res < minima || maxima < res) { - g_warning ("Invalid value '%g' for %s. If should be >= %g and <= %g", - res, key, minima, maxima); - val = NULL; - } - } - if (val == NULL) { - g_warning ("Using default value '%g'", default_val); - return default_val; - } - return res; -} -char * -go_conf_load_string (char const *key) -{ - return gconf_client_get_string (gnm_app_get_gconf_client (), key, NULL); -} -GSList * -go_conf_load_str_list (char const *key) -{ - return gconf_client_get_list (gnm_app_get_gconf_client (), - key, GCONF_VALUE_STRING, NULL); -} - -static GConfSchema * -get_schema (char const *key) -{ - char *schema_key = g_strconcat ("/schemas", key, NULL); - GConfSchema *schema = gconf_client_get_schema ( - gnm_app_get_gconf_client (), schema_key, NULL); - g_free (schema_key); - return schema; -} -char * -go_conf_get_short_desc (char const *key) -{ - GConfSchema *schema = get_schema (key); - - if (schema != NULL) { - char *desc = g_strdup (gconf_schema_get_short_desc (schema)); - gconf_schema_free (schema); - return desc; - } - return NULL; -} -char * -go_conf_get_long_desc (char const *key) -{ - GConfSchema *schema = get_schema (key); - - if (schema != NULL) { - char *desc = g_strdup (gconf_schema_get_long_desc (schema)); - gconf_schema_free (schema); - return desc; - } - return NULL; -} - -GType -go_conf_get_type (char const *key) -{ - GConfSchema *schema = get_schema (key); - GType t; - - switch (gconf_schema_get_type (schema)) { - case GCONF_VALUE_STRING: t = G_TYPE_STRING; break; - case GCONF_VALUE_FLOAT: t = G_TYPE_FLOAT; break; - case GCONF_VALUE_INT: t = G_TYPE_INT; break; - case GCONF_VALUE_BOOL: t = G_TYPE_BOOLEAN; break; - default : - t = G_TYPE_NONE; - } - - if (schema != NULL) - gconf_schema_free (schema); - return t; -} - -char * -go_conf_get_value_as_str (char const *key) -{ - char *value_string; - GConfClient *gconf = gnm_app_get_gconf_client (); - - switch (go_conf_get_type (key)) { - case G_TYPE_STRING: - value_string = gconf_client_get_string (gconf, key, NULL); - - break; - case G_TYPE_INT: - value_string = g_strdup_printf ("%i", gconf_client_get_int (gconf, key, - NULL)); - break; - case G_TYPE_FLOAT: - value_string = g_strdup_printf ("%f", gconf_client_get_float (gconf, key, - NULL)); - break; - case G_TYPE_BOOLEAN: - value_string = g_strdup (format_boolean (gconf_client_get_bool (gconf, key, NULL))); - break; - default: - value_string = g_strdup ("ERROR FIXME"); - } - - return value_string; -} - -int -go_conf_get_bool (char const *key) -{ - GConfClient *gconf = gnm_app_get_gconf_client (); - return gconf_client_get_bool (gconf, key, NULL); -} - -int -go_conf_get_int (char const *key) -{ - GConfClient *gconf = gnm_app_get_gconf_client (); - return gconf_client_get_int (gconf, key, NULL); -} - -double -go_conf_get_double (char const *key) -{ - GConfClient *gconf = gnm_app_get_gconf_client (); - return gconf_client_get_float (gconf, key, NULL); -} - - -gboolean -go_conf_set_value_from_str (char const *key, char const *val_str) -{ - GConfClient *client = gnm_app_get_gconf_client (); - - switch (go_conf_get_type (key)) { - case G_TYPE_STRING: - go_conf_set_string (key, val_str); - break; - case G_TYPE_FLOAT: { - GnmDateConventions const *conv = NULL; /* workbook_date_conv (state->wb); */ - GnmValue *value = format_match_number (val_str, NULL, conv); - if (value != NULL) { - gnm_float the_float = value_get_as_float (value); - gconf_client_set_float (client, key, the_float, NULL); - } - if (value) - value_release (value); - break; - } - case G_TYPE_INT: { - GnmDateConventions const *conv = NULL; /* workbook_date_conv (state->wb); */ - GnmValue *value = format_match_number (val_str, NULL, conv); - if (value != NULL) { - int the_int = value_get_as_int (value); - go_conf_set_int (key, the_int); - } - if (value) - value_release (value); - break; - } - case G_TYPE_BOOLEAN: { - GnmDateConventions const *conv = NULL; /* workbook_date_conv (state->wb); */ - GnmValue *value = format_match_number (val_str, NULL, conv); - gboolean err, the_bool; - if (value != NULL) { - err = FALSE; - the_bool = value_get_as_bool (value, &err); - gconf_client_set_bool (client, key, the_bool, NULL); - } - if (value) - value_release (value); - break; - } - default: - g_warning ("Unsupported gconf type in preference dialog"); - } - - return TRUE; -} - -void -go_conf_remove_monitor (guint monitor_id) -{ - gconf_client_notify_remove (gnm_app_get_gconf_client (), - GPOINTER_TO_INT (monitor_id)); -} - -typedef struct { - void (*monitor) (char const *key, gpointer data); - gpointer data; -} GOConfClosure; -static void -cb_key_changed (GConfClient *client, guint cnxn_id, - GConfEntry *entry, GOConfClosure *close) -{ - close->monitor (gconf_entry_get_key (entry), close->data); -} -guint -go_conf_add_monitor (char const *key, - GOConfMonitorFunc monitor, gpointer data) -{ - GOConfClosure *close = g_new0 (GOConfClosure, 1); - close->monitor = monitor; - close->data = data; - return gconf_client_notify_add (gnm_app_get_gconf_client (), key, - (GConfClientNotifyFunc) cb_key_changed, close, g_free, NULL); -} -#else -void -go_conf_set_bool (G_GNUC_UNUSED char const *key, G_GNUC_UNUSED gboolean val) -{ -} -void -go_conf_set_int (G_GNUC_UNUSED char const *key, G_GNUC_UNUSED gint val) -{ -} -void -go_conf_set_double (G_GNUC_UNUSED char const *key, G_GNUC_UNUSED gnm_float val) -{ -} -void -go_conf_set_string (G_GNUC_UNUSED char const *key, G_GNUC_UNUSED char const *str) -{ -} -void -go_conf_set_str_list (G_GNUC_UNUSED char const *key, G_GNUC_UNUSED GSList *list) -{ -} -gboolean -go_conf_get_bool (char const *key) -{ - return FALSE; -} - -int -go_conf_get_int (char const *key) -{ - return 0; -} - -double -go_conf_get_double (char const *key) -{ - return 0.; -} - -char * -go_conf_get_string (char const *key) -{ - return g_strdup (""); -} - -GSList * -go_conf_get_str_list (char const *key) -{ - return NULL; -} - -gboolean -go_conf_load_bool (G_GNUC_UNUSED char const *key, - gboolean default_val) -{ - return default_val; -} -int -go_conf_load_int (G_GNUC_UNUSED char const *key, - G_GNUC_UNUSED int minima, G_GNUC_UNUSED int maxima, - int default_val) -{ - return default_val; -} - -double -go_conf_load_double (G_GNUC_UNUSED char const *key, - G_GNUC_UNUSED double minima, G_GNUC_UNUSED double maxima, - double default_val) -{ - return default_val; -} -char * -go_conf_load_string (G_GNUC_UNUSED char const *key) -{ - return NULL; -} -GSList * -go_conf_load_str_list (G_GNUC_UNUSED char const *key) -{ - return NULL; -} -char * -go_conf_get_short_desc (char const *key) -{ - return NULL; -} -char * -go_conf_get_long_desc (char const *key) -{ - return NULL; -} - -GType -go_conf_get_type (char const *key) -{ - return G_TYPE_NONE; -} - -char * -go_conf_get_value_as_str (char const *key) -{ - return g_strdup (""); -} - -gboolean -go_conf_set_value_from_str (char const *key, char const *val_str) -{ - return TRUE; -} - -void -go_conf_sync (void) -{ -} - -void -go_conf_remove_monitor (guint monitor_id) -{ -} - -guint -go_conf_add_monitor (char const *key, - GOConfMonitorFunc monitor, gpointer data) -{ - return 1; -} - -#endif - -static void -gnm_conf_init_printer_decoration_font (void) -{ - gchar *name; - if (prefs.printer_decoration_font == NULL) - prefs.printer_decoration_font = mstyle_new (); - - name = go_conf_load_string (PRINTSETUP_GCONF_HF_FONT_NAME); - if (name) { - mstyle_set_font_name (prefs.printer_decoration_font, name); - g_free (name); - } else - mstyle_set_font_name (prefs.printer_decoration_font, DEFAULT_FONT); - mstyle_set_font_size (prefs.printer_decoration_font, - go_conf_load_double (PRINTSETUP_GCONF_HF_FONT_SIZE, 1., 100., DEFAULT_SIZE)); - mstyle_set_font_bold (prefs.printer_decoration_font, - go_conf_load_bool (PRINTSETUP_GCONF_HF_FONT_BOLD, FALSE)); - mstyle_set_font_italic (prefs.printer_decoration_font, - go_conf_load_bool (PRINTSETUP_GCONF_HF_FONT_ITALIC, FALSE)); -} - -static void -gnm_conf_init_essential (void) -{ - prefs.default_font.name = go_conf_load_string (CONF_DEFAULT_FONT_NAME); - if (prefs.default_font.name == NULL) - prefs.default_font.name = g_strdup (DEFAULT_FONT); - prefs.default_font.size = go_conf_load_double ( - CONF_DEFAULT_FONT_SIZE, 1., 100., DEFAULT_SIZE); - prefs.default_font.is_bold = go_conf_load_bool ( - CONF_DEFAULT_FONT_BOLD, FALSE); - prefs.default_font.is_italic = go_conf_load_bool ( - CONF_DEFAULT_FONT_ITALIC, FALSE); - - prefs.file_history_max = go_conf_load_int ( - GNM_CONF_FILE_HISTORY_N, 0, 20, 4); - prefs.file_history_files = go_conf_load_str_list (GNM_CONF_FILE_HISTORY_FILES); - prefs.plugin_file_states = go_conf_load_str_list (PLUGIN_GCONF_FILE_STATES); - prefs.plugin_extra_dirs = go_conf_load_str_list (PLUGIN_GCONF_EXTRA_DIRS); - prefs.active_plugins = go_conf_load_str_list (PLUGIN_GCONF_ACTIVE); - prefs.activate_new_plugins = go_conf_load_bool ( - PLUGIN_GCONF_ACTIVATE_NEW, TRUE); - - // printf( "prefs.activate_new_plugins: %d\n", prefs.activate_new_plugins ); - - prefs.horizontal_dpi = go_conf_load_double ( - GNM_CONF_GUI_RES_H, 10., 1000., 96.); - prefs.vertical_dpi = go_conf_load_double ( - GNM_CONF_GUI_RES_V, 10., 1000., 96.); - prefs.initial_sheet_number = go_conf_load_int ( - GNM_CONF_WORKBOOK_NSHEETS, 1, 64, 3); - prefs.horizontal_window_fraction = go_conf_load_double ( - GNM_CONF_GUI_WINDOW_X, .1, 1., .6); - prefs.vertical_window_fraction = go_conf_load_double ( - GNM_CONF_GUI_WINDOW_Y, .1, 1., .6); - prefs.zoom = go_conf_load_double ( - GNM_CONF_GUI_ZOOM, .1, 5., 1.); - - /* Unfortunately we need the printing stuff in essentials since the */ - /* first pi is created for the new sheet before the idle loop has a */ - /* chance to run */ - prefs.printer_config = go_conf_load_string (PRINTSETUP_GCONF_PRINTER_CONFIG); - prefs.print_center_horizontally = go_conf_load_bool - (PRINTSETUP_GCONF_CENTER_HORIZONTALLY, FALSE); - prefs.print_center_vertically = go_conf_load_bool - (PRINTSETUP_GCONF_CENTER_VERTICALLY, FALSE); - prefs.print_grid_lines = go_conf_load_bool - (PRINTSETUP_GCONF_PRINT_GRID_LINES, FALSE); - prefs.print_even_if_only_styles = go_conf_load_bool - (PRINTSETUP_GCONF_EVEN_IF_ONLY_STYLES, FALSE); - prefs.print_black_and_white = go_conf_load_bool - (PRINTSETUP_GCONF_PRINT_BLACK_AND_WHITE, FALSE); - prefs.print_titles = go_conf_load_bool - (PRINTSETUP_GCONF_PRINT_TITLES, FALSE); - prefs.print_order_right_then_down = go_conf_load_bool - (PRINTSETUP_GCONF_RIGHT_THEN_DOWN, FALSE); - prefs.print_scale_percentage = go_conf_load_bool - (PRINTSETUP_GCONF_SCALE_PERCENTAGE, TRUE); - prefs.print_scale_percentage_value = go_conf_load_double - (PRINTSETUP_GCONF_SCALE_PERCENTAGE_VALUE, 1, 500, 100); - prefs.print_scale_width = go_conf_load_int - (PRINTSETUP_GCONF_SCALE_WIDTH, 0, 100, 1); - prefs.print_scale_height = go_conf_load_int - (PRINTSETUP_GCONF_SCALE_HEIGHT, 0, 100, 1); - prefs.print_repeat_top = go_conf_load_string (PRINTSETUP_GCONF_REPEAT_TOP); - prefs.print_repeat_left = go_conf_load_string (PRINTSETUP_GCONF_REPEAT_LEFT); -#if 0 - prefs.print_tb_margins.top.points = go_conf_load_double - (PRINTSETUP_GCONF_MARGIN_TOP, 0.0, 10000.0, 120.0); - prefs.print_tb_margins.bottom.points = go_conf_load_double - (PRINTSETUP_GCONF_MARGIN_BOTTOM, 0.0, 10000.0, 120.0); - { - /* Note: the desired display unit is stored in the */ - /* printer config. So we are never using this field */ - /* inside the margin structure, but only setting it */ - /* in various input routines. */ - prefs.print_tb_margins.top.desired_display - = gnome_print_unit_get_by_abbreviation ("cm"); - prefs.print_tb_margins.bottom.desired_display - = prefs.print_tb_margins.top.desired_display; - } -#endif // 0 - prefs.print_all_sheets = go_conf_load_bool ( - PRINTSETUP_GCONF_ALL_SHEETS, TRUE); - prefs.printer_header = go_conf_load_str_list (PRINTSETUP_GCONF_HEADER); - prefs.printer_footer = go_conf_load_str_list (PRINTSETUP_GCONF_FOOTER); - prefs.printer_header_formats_left = go_conf_load_str_list (PRINTSETUP_GCONF_HEADER_FORMAT_LEFT); - prefs.printer_header_formats_middle = go_conf_load_str_list (PRINTSETUP_GCONF_HEADER_FORMAT_MIDDLE); - prefs.printer_header_formats_right = go_conf_load_str_list (PRINTSETUP_GCONF_HEADER_FORMAT_RIGHT); - - prefs.auto_complete = go_conf_load_bool (GNM_CONF_GUI_ED_AUTOCOMPLETE, TRUE); - prefs.live_scrolling = go_conf_load_bool (GNM_CONF_GUI_ED_LIVESCROLLING, TRUE); -} - -static gboolean -gnm_conf_init_extras (void) -{ - char *tmp; - - prefs.num_of_recent_funcs = go_conf_load_int ( - FUNCTION_SELECT_GCONF_NUM_OF_RECENT, 0, 40, 10); - prefs.recent_funcs = go_conf_load_str_list (FUNCTION_SELECT_GCONF_RECENT); - - prefs.transition_keys = go_conf_load_bool ( - GNM_CONF_GUI_ED_TRANSITION_KEYS, FALSE); - prefs.recalc_lag = go_conf_load_int ( - GNM_CONF_GUI_ED_RECALC_LAG, -5000, 5000, 200); - prefs.show_sheet_name = go_conf_load_bool ( - GNM_CONF_UNDO_SHOW_SHEET_NAME, TRUE); - prefs.max_descriptor_width = go_conf_load_int ( - GNM_CONF_UNDO_MAX_DESCRIPTOR_WIDTH, 5, 256, 15); - prefs.undo_size = go_conf_load_int ( - GNM_CONF_UNDO_SIZE, 1, 1000000, 100000); - prefs.undo_max_number = go_conf_load_int ( - GNM_CONF_UNDO_MAXNUM, 0, 10000, 100); - - prefs.autoformat.extra_dirs = go_conf_load_str_list (AUTOFORMAT_GCONF_EXTRA_DIRS); - tmp = go_conf_load_string (AUTOFORMAT_GCONF_SYS_DIR); - if (tmp == NULL) - tmp = g_strdup ("autoformat-templates"); - prefs.autoformat.sys_dir = gnm_sys_data_dir (tmp); - g_free (tmp); - tmp = go_conf_load_string (AUTOFORMAT_GCONF_USR_DIR); - if (tmp == NULL) - tmp = g_strdup ("autoformat-templates"); - prefs.autoformat.usr_dir = gnm_usr_dir (tmp); - g_free (tmp); - - prefs.xml_compression_level = go_conf_load_int ( - GNM_CONF_XML_COMPRESSION, 0, 9, 9); - prefs.file_overwrite_default_answer = go_conf_load_bool ( - GNM_CONF_FILE_OVERWRITE_DEFAULT, FALSE); - prefs.file_ask_single_sheet_save = go_conf_load_bool ( - GNM_CONF_FILE_SINGLE_SHEET_SAVE, TRUE); - prefs.sort_default_by_case = go_conf_load_bool ( - GNM_CONF_SORT_DEFAULT_BY_CASE, FALSE); - prefs.sort_default_retain_formats = go_conf_load_bool ( - GNM_CONF_SORT_DEFAULT_RETAIN_FORM, TRUE); - prefs.sort_default_ascending = go_conf_load_bool ( - GNM_CONF_SORT_DEFAULT_ASCENDING, TRUE); - prefs.sort_max_initial_clauses = go_conf_load_int ( - GNM_CONF_SORT_DIALOG_MAX_INITIAL, 0, 256, 10); - prefs.unfocused_range_selection = go_conf_load_bool ( - DIALOGS_GCONF_UNFOCUSED_RS, TRUE); - prefs.prefer_clipboard_selection = go_conf_load_bool ( - GNM_CONF_CUTANDPASTE_PREFER_CLIPBOARD, TRUE); - prefs.latex_use_utf8 = go_conf_load_bool ( - PLUGIN_GCONF_LATEX_USE_UTF8, TRUE); - - gnm_conf_init_printer_decoration_font (); - - return FALSE; -} - -/** - * gnm_conf_init - * - * @fast : Load non-essential prefs in an idle handler - **/ -void -gnm_conf_init (gboolean fast) -{ - gnm_conf_init_essential (); - if (fast) - g_timeout_add (1000, (GSourceFunc) gnm_conf_init_extras, NULL); - else - gnm_conf_init_extras (); -} - -void -gnm_conf_shutdown (void) -{ - mstyle_unref (prefs.printer_decoration_font); - prefs.printer_decoration_font = NULL; -#ifdef WITH_GNOME - if (gconf_client) { - gconf_client_remove_dir (gconf_client, "/apps/gnumeric", NULL); - g_object_unref (G_OBJECT (gconf_client)); - gconf_client = NULL; - } -#endif -} - -void -gnm_gconf_set_plugin_file_states (GSList *list) -{ - g_return_if_fail (prefs.plugin_file_states != list); - - /* the const_casts are ok, the const in the header is just to keep - * people for doing stupid things */ - g_slist_foreach ((GSList *)prefs.plugin_file_states, (GFunc)g_free, NULL); - g_slist_free ((GSList *)prefs.plugin_file_states); - prefs.plugin_file_states = list; - - go_conf_set_str_list (PLUGIN_GCONF_FILE_STATES, list); -} - -void -gnm_gconf_set_plugin_extra_dirs (GSList *list) -{ - g_return_if_fail (prefs.plugin_extra_dirs != list); - - /* the const_casts are ok, the const in the header is just to keep - * people for doing stupid things */ - g_slist_foreach ((GSList *)prefs.plugin_extra_dirs, (GFunc)g_free, NULL); - g_slist_free ((GSList *)prefs.plugin_extra_dirs); - prefs.plugin_extra_dirs = list; - - go_conf_set_str_list (PLUGIN_GCONF_EXTRA_DIRS, list); -} - -void -gnm_gconf_set_active_plugins (GSList *list) -{ - go_conf_set_str_list (PLUGIN_GCONF_ACTIVE, list); -} - -void -gnm_gconf_set_activate_new_plugins (gboolean val) -{ - go_conf_set_bool (PLUGIN_GCONF_ACTIVATE_NEW, val); -} - -void -gnm_gconf_set_recent_funcs (GSList *list) -{ - go_conf_set_str_list (FUNCTION_SELECT_GCONF_RECENT, list); - - /* the const_casts are ok, the const in the header is just to keep - * people for doing stupid things */ - g_slist_foreach ((GSList *)prefs.recent_funcs, (GFunc)g_free, NULL); - g_slist_free ((GSList *)prefs.recent_funcs); - - prefs.recent_funcs = list; -} - -void -gnm_gconf_set_num_recent_functions (gint val) -{ - if (val < 0) - val = 0; - prefs.num_of_recent_funcs = val; - go_conf_set_int ( FUNCTION_SELECT_GCONF_NUM_OF_RECENT, val); -} - -void -gnm_gconf_set_file_history_files (GSList *list) -{ - g_return_if_fail (prefs.file_history_files != list); - - /* the const_casts are ok, the const in the header is just to keep - * people for doing stupid things */ - g_slist_foreach ((GSList *)prefs.file_history_files, (GFunc)g_free, NULL); - g_slist_free ((GSList *)prefs.file_history_files); - prefs.file_history_files = list; - go_conf_set_str_list (GNM_CONF_FILE_HISTORY_FILES, list); -} - -void -gnm_gconf_set_file_history_number (gint val) -{ - if (val < 0) - val = 0; - prefs.file_history_max = val; - go_conf_set_int (GNM_CONF_FILE_HISTORY_N, val); -} - - -void -gnm_gconf_set_undo_size (gint val) -{ - if (val < 1) - val = 1; - prefs.undo_size = val; - go_conf_set_int (GNM_CONF_UNDO_SIZE, val); -} - - -void -gnm_gconf_set_undo_max_number (gint val) -{ - if (val < 1) - val = 1; - prefs.undo_max_number = val; - go_conf_set_int (GNM_CONF_UNDO_MAXNUM, val); -} - -void -gnm_gconf_set_autoformat_sys_dirs (char const * string) -{ - go_conf_set_string (AUTOFORMAT_GCONF_SYS_DIR, string); -} - -void -gnm_gconf_set_autoformat_usr_dirs (char const * string) -{ - go_conf_set_string (AUTOFORMAT_GCONF_USR_DIR, string); -} - -void -gnm_gconf_set_all_sheets (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_ALL_SHEETS, val); -} - -void -gnm_gconf_set_printer_config (gchar *str) -{ - go_conf_set_string (PRINTSETUP_GCONF_PRINTER_CONFIG, str); - g_free (prefs.printer_config); - prefs.printer_config = str; -} - -void -gnm_gconf_set_printer_header (gchar const *left, gchar const *middle, - gchar const *right) -{ - GSList *list = NULL; - list = g_slist_prepend (list, g_strdup (right)); - list = g_slist_prepend (list, g_strdup (middle)); - list = g_slist_prepend (list, g_strdup (left)); - go_conf_set_str_list (PRINTSETUP_GCONF_HEADER, list); - gnm_slist_free_custom ((GSList *)prefs.printer_header, g_free); - prefs.printer_header = list; -} - -void -gnm_gconf_set_printer_footer (gchar const *left, gchar const *middle, - gchar const *right) -{ - GSList *list = NULL; - list = g_slist_prepend (list, g_strdup (right)); - list = g_slist_prepend (list, g_strdup (middle)); - list = g_slist_prepend (list, g_strdup (left)); - go_conf_set_str_list (PRINTSETUP_GCONF_FOOTER, list); - gnm_slist_free_custom ((GSList *)prefs.printer_footer, g_free); - prefs.printer_footer = list; -} - -void -gnm_gconf_set_print_center_horizontally (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_CENTER_HORIZONTALLY, val); -} - -void -gnm_gconf_set_print_center_vertically (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_CENTER_VERTICALLY, val); -} - -void -gnm_gconf_set_print_grid_lines (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_PRINT_GRID_LINES, val); -} - -void -gnm_gconf_set_print_even_if_only_styles (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_EVEN_IF_ONLY_STYLES, val); -} - -void -gnm_gconf_set_print_black_and_white (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_PRINT_BLACK_AND_WHITE, val); -} - -void -gnm_gconf_set_print_titles (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_PRINT_TITLES, val); -} - -void -gnm_gconf_set_print_order_right_then_down (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_RIGHT_THEN_DOWN, val); -} - -void -gnm_gconf_set_print_scale_percentage (gboolean val) -{ - go_conf_set_bool (PRINTSETUP_GCONF_SCALE_PERCENTAGE, val); -} - -void -gnm_gconf_set_print_scale_percentage_value (gnm_float val) -{ - go_conf_set_double (PRINTSETUP_GCONF_SCALE_PERCENTAGE_VALUE, val); -} - -#if 0 -void -gnm_gconf_set_print_tb_margins (PrintMargins const *pm) -{ - /* We are not saving the GnomePrintUnits since they are */ - /* duplicated in the gnomeprintconfig */ - go_conf_set_double (PRINTSETUP_GCONF_MARGIN_TOP, pm->top.points); - go_conf_set_double (PRINTSETUP_GCONF_MARGIN_BOTTOM, pm->bottom.points); -} -#endif // 0 - -void -gnm_gconf_set_print_header_formats (GSList *left, GSList *middle, - GSList *right) -{ - go_conf_set_str_list (PRINTSETUP_GCONF_HEADER_FORMAT_LEFT, left); - gnm_slist_free_custom (left, g_free); - go_conf_set_str_list (PRINTSETUP_GCONF_HEADER_FORMAT_MIDDLE, middle); - gnm_slist_free_custom (middle, g_free); - go_conf_set_str_list (PRINTSETUP_GCONF_HEADER_FORMAT_RIGHT, right); - gnm_slist_free_custom (right, g_free); -} - -void -gnm_gconf_set_gui_window_x (gnm_float val) -{ - prefs.horizontal_window_fraction = val; - go_conf_set_double (GNM_CONF_GUI_WINDOW_X, val); -} - -void -gnm_gconf_set_gui_window_y (gnm_float val) -{ - prefs.vertical_window_fraction = val; - go_conf_set_double (GNM_CONF_GUI_WINDOW_Y, val); -} - -void -gnm_gconf_set_gui_zoom (gnm_float val) -{ - prefs.zoom = val; - go_conf_set_double (GNM_CONF_GUI_WINDOW_Y, val); -} - -void -gnm_gconf_set_default_font_size (gnm_float val) -{ - prefs.default_font.size = val; - go_conf_set_double (GNM_CONF_FONT_SIZE, val); -} - -void -gnm_gconf_set_default_font_name (char const *str) -{ - g_return_if_fail (str != NULL); - - /* the const_casts are ok, the const in the header is just to keep - * people for doing stupid things */ - if (prefs.default_font.name != NULL) - g_free ((char *) prefs.default_font.name); - prefs.default_font.name = g_strdup (str); - go_conf_set_string (GNM_CONF_FONT_NAME, str); -} - -void -gnm_gconf_set_default_font_bold (gboolean val) -{ - prefs.default_font.is_bold = val; - go_conf_set_bool (GNM_CONF_FONT_BOLD, val); -} - -void -gnm_gconf_set_default_font_italic (gboolean val) -{ - prefs.default_font.is_italic = val; - go_conf_set_bool (GNM_CONF_FONT_ITALIC, val); -} - -void -gnm_gconf_set_hf_font (GnmStyle const *mstyle) -{ - GnmStyle *old_style = (prefs.printer_decoration_font != NULL) ? - prefs.printer_decoration_font : - mstyle_new_default (); - - prefs.printer_decoration_font = mstyle_copy_merge (old_style, mstyle); - mstyle_unref (old_style); - - if (mstyle_is_element_set (mstyle, MSTYLE_FONT_SIZE)) - go_conf_set_double (PRINTSETUP_GCONF_HF_FONT_SIZE, - mstyle_get_font_size (mstyle)); - if (mstyle_is_element_set (mstyle, MSTYLE_FONT_NAME)) - go_conf_set_string (PRINTSETUP_GCONF_HF_FONT_NAME, - mstyle_get_font_name (mstyle)); - if (mstyle_is_element_set (mstyle, MSTYLE_FONT_BOLD)) - go_conf_set_bool (PRINTSETUP_GCONF_HF_FONT_BOLD, - mstyle_get_font_bold (mstyle)); - if (mstyle_is_element_set (mstyle, MSTYLE_FONT_ITALIC)) - go_conf_set_bool (PRINTSETUP_GCONF_HF_FONT_ITALIC, - mstyle_get_font_italic (mstyle)); -} - - -void -gnm_gconf_set_max_descriptor_width (gint val) -{ - if (val < 1) - val = 1; - prefs.max_descriptor_width = val; - go_conf_set_int (GNM_CONF_UNDO_MAX_DESCRIPTOR_WIDTH, val); -} - -void -gnm_gconf_set_sort_dialog_max_initial (gint val) -{ - if (val < 1) - val = 1; - prefs.sort_max_initial_clauses = val; - go_conf_set_int (GNM_CONF_SORT_DIALOG_MAX_INITIAL, val); -} - -void -gnm_gconf_set_workbook_nsheets (gint val) -{ - if (val < 1) - val = 1; - prefs.initial_sheet_number = val; - go_conf_set_int (GNM_CONF_WORKBOOK_NSHEETS, val); -} - -void -gnm_gconf_set_xml_compression (gint val) -{ - if (val < 0) - val = 0; - prefs.xml_compression_level = val; - go_conf_set_int (GNM_CONF_XML_COMPRESSION, val); -} - -void -gnm_gconf_set_show_sheet_name (gboolean val) -{ - prefs.show_sheet_name = val; - go_conf_set_bool( GNM_CONF_UNDO_SHOW_SHEET_NAME, - val != FALSE); -} - -void -gnm_gconf_set_latex_use_utf8 (gboolean val) -{ - prefs.latex_use_utf8 = val; - go_conf_set_bool( PLUGIN_GCONF_LATEX_USE_UTF8, - val != FALSE); -} - -void -gnm_gconf_set_sort_retain_form (gboolean val) -{ - prefs.sort_default_retain_formats = val; - go_conf_set_bool( GNM_CONF_SORT_DEFAULT_RETAIN_FORM, - val != FALSE); -} - -void -gnm_gconf_set_sort_by_case (gboolean val) -{ - prefs.sort_default_by_case = val; - go_conf_set_bool( GNM_CONF_SORT_DEFAULT_BY_CASE, - val != FALSE); -} - -void -gnm_gconf_set_sort_ascending (gboolean val) -{ - prefs.sort_default_ascending = val; - go_conf_set_bool( GNM_CONF_SORT_DEFAULT_ASCENDING, - val != FALSE); -} - -void -gnm_gconf_set_gui_transition_keys (gboolean val) -{ - prefs.transition_keys = val; - go_conf_set_bool( GNM_CONF_GUI_ED_TRANSITION_KEYS, - val != FALSE); -} - -void -gnm_gconf_set_gui_livescrolling (gboolean val) -{ - prefs.live_scrolling = val; - go_conf_set_bool( GNM_CONF_GUI_ED_LIVESCROLLING, - val != FALSE); -} - -void -gnm_gconf_set_file_overwrite (gboolean val) -{ - prefs.file_overwrite_default_answer = val; - go_conf_set_bool( GNM_CONF_FILE_OVERWRITE_DEFAULT, - val != FALSE); -} - -void -gnm_gconf_set_file_single_sheet_save (gboolean val) -{ - prefs.file_ask_single_sheet_save = val; - go_conf_set_bool( GNM_CONF_FILE_SINGLE_SHEET_SAVE, - val != FALSE); -} - -void -gnm_gconf_set_gui_resolution_h (gnm_float val) -{ - if (val < 50) - val = 50; - if (val > 250) - val = 250; - prefs.horizontal_dpi = val; - go_conf_set_double (GNM_CONF_GUI_RES_H, val); -} - -void -gnm_gconf_set_gui_resolution_v (gnm_float val) -{ - if (val < 50) - val = 50; - if (val > 250) - val = 250; - prefs.vertical_dpi = val; - go_conf_set_double (GNM_CONF_GUI_RES_V, val); -} - -void -gnm_gconf_set_unfocused_rs (gboolean val) -{ - prefs.unfocused_range_selection = val; - go_conf_set_bool( DIALOGS_GCONF_UNFOCUSED_RS, - val != FALSE); -} - -void -gnm_gconf_set_autocomplete (gboolean val) -{ - prefs.auto_complete = val; - go_conf_set_bool( GNM_CONF_GUI_ED_AUTOCOMPLETE, - val != FALSE); -} - -void -gnm_gconf_set_prefer_clipboard (gboolean val) -{ - prefs.prefer_clipboard_selection = val; - go_conf_set_bool( GNM_CONF_CUTANDPASTE_PREFER_CLIPBOARD, - val != FALSE); -} - diff --git a/lib/goffice/split/gnumeric-gconf.h b/lib/goffice/split/gnumeric-gconf.h deleted file mode 100644 index ac9d8fe812..0000000000 --- a/lib/goffice/split/gnumeric-gconf.h +++ /dev/null @@ -1,214 +0,0 @@ -#ifndef GNM_CONF_H -#define GNM_CONF_H - -#include -#include -//#include - -typedef struct { - struct { - GSList const *extra_dirs; - char *sys_dir; - char *usr_dir; - } autoformat; - - struct { - char const *name; - float size; - gboolean is_bold, is_italic; - } default_font; - - gint file_history_max; - GSList const *file_history_files; - guint num_of_recent_funcs; - GSList const *recent_funcs; - - GSList const *plugin_file_states; - GSList const *plugin_extra_dirs; - GSList const *active_plugins; - gboolean activate_new_plugins; - - gboolean show_sheet_name; - guint max_descriptor_width; - gint undo_size; - gint undo_max_number; - - gint initial_sheet_number; - float horizontal_window_fraction; - float vertical_window_fraction; - float zoom; - - gint xml_compression_level; - gboolean file_overwrite_default_answer; - gboolean file_ask_single_sheet_save; - - gboolean sort_default_by_case; - gboolean sort_default_retain_formats; - gboolean sort_default_ascending; - gint sort_max_initial_clauses; - - gboolean print_all_sheets; /* vs print only selected */ - gchar *printer_config; - GSList const *printer_header; - GSList const *printer_footer; - GSList const *printer_header_formats_left; - GSList const *printer_header_formats_middle; - GSList const *printer_header_formats_right; - GnmStyle *printer_decoration_font; - gboolean print_center_horizontally; - gboolean print_center_vertically; - gboolean print_grid_lines; - gboolean print_even_if_only_styles; - gboolean print_black_and_white; - gboolean print_titles; - gboolean print_order_right_then_down; - gboolean print_scale_percentage; - float print_scale_percentage_value; - gint print_scale_width; - gint print_scale_height; - gchar *print_repeat_top; - gchar *print_repeat_left; - //PrintMargins print_tb_margins; - - float horizontal_dpi; - float vertical_dpi; - gboolean auto_complete; - gboolean transition_keys; - gboolean live_scrolling; - gint recalc_lag; - gboolean unfocused_range_selection; - gboolean prefer_clipboard_selection; /* As opposed to "primary". */ - gboolean latex_use_utf8; -} GnmAppPrefs; -extern GnmAppPrefs const *gnm_app_prefs; - -void gnm_conf_init (gboolean fast); -void gnm_conf_shutdown (void); -void gnm_conf_sync (void); - -/* autocorrect */ -void gnm_gconf_set_autocorrect_init_caps (gboolean val); -void gnm_gconf_set_autocorrect_first_letter (gboolean val); -void gnm_gconf_set_autocorrect_names_of_days (gboolean val); -void gnm_gconf_set_autocorrect_replace (gboolean val); - -/* autocomplete */ -void gnm_gconf_set_autocomplete (gboolean val); - -/* autoformat */ -void gnm_gconf_set_autoformat_sys_dirs (char const * string); -void gnm_gconf_set_autoformat_usr_dirs (char const * string); - -/* file history */ -void gnm_gconf_set_file_history_files (GSList *list); -void gnm_gconf_set_file_history_number (gint value); - -/* plugins */ -void gnm_gconf_set_plugin_file_states (GSList *list); -void gnm_gconf_set_plugin_extra_dirs (GSList *list); -void gnm_gconf_set_active_plugins (GSList *list); -void gnm_gconf_set_activate_new_plugins (gboolean val); - -/* undo */ -void gnm_gconf_set_show_sheet_name (gboolean val); -void gnm_gconf_set_max_descriptor_width (gint val); -void gnm_gconf_set_undo_size (gint val); -void gnm_gconf_set_undo_max_number (gint val); - -/* xml/files */ -void gnm_gconf_set_recent_funcs (GSList *list); -void gnm_gconf_set_xml_compression (gint value); -void gnm_gconf_set_file_overwrite (gboolean value); -void gnm_gconf_set_file_single_sheet_save (gboolean value); - -/* print-setup & printing */ -void gnm_gconf_set_all_sheets (gboolean val); -void gnm_gconf_set_printer_config (gchar *str); -void gnm_gconf_set_printer_header (gchar const *left, gchar const *middle, - gchar const *right); -void gnm_gconf_set_printer_footer (gchar const *left, gchar const *middle, - gchar const *right); -void gnm_gconf_set_print_center_horizontally (gboolean val); -void gnm_gconf_set_print_center_vertically (gboolean val); -void gnm_gconf_set_print_grid_lines (gboolean val); -void gnm_gconf_set_print_even_if_only_styles (gboolean val); -void gnm_gconf_set_print_black_and_white (gboolean val); -void gnm_gconf_set_print_titles (gboolean val); -void gnm_gconf_set_print_order_right_then_down (gboolean val); -void gnm_gconf_set_print_scale_percentage (gboolean val); -void gnm_gconf_set_print_scale_percentage_value (gnm_float val); -//void gnm_gconf_set_print_tb_margins (PrintMargins const *pm); -void gnm_gconf_set_print_header_formats (GSList *left, GSList *middle, - GSList *right); - -/* gui */ -void gnm_gconf_set_gui_window_x (gnm_float val); -void gnm_gconf_set_gui_window_y (gnm_float val); -void gnm_gconf_set_gui_zoom (gnm_float val); -void gnm_gconf_set_gui_transition_keys (gboolean value); -void gnm_gconf_set_gui_livescrolling (gboolean value); -void gnm_gconf_set_gui_resolution_h (gnm_float val); -void gnm_gconf_set_gui_resolution_v (gnm_float val); - -/* default font */ -void gnm_gconf_set_default_font_size (gnm_float val); -void gnm_gconf_set_default_font_name (char const *str); -void gnm_gconf_set_default_font_bold (gboolean val); -void gnm_gconf_set_default_font_italic (gboolean val); - -/* hf font */ -void gnm_gconf_set_hf_font (GnmStyle const *mstyle); - -/* sorting */ -void gnm_gconf_set_sort_dialog_max_initial (gint value); -void gnm_gconf_set_sort_retain_form (gboolean value); -void gnm_gconf_set_sort_by_case (gboolean value); -void gnm_gconf_set_sort_ascending (gboolean value); - -/* workbook */ -void gnm_gconf_set_workbook_nsheets (gint value); -void gnm_gconf_set_unfocused_rs (gboolean value); - -/* function selector and formula guru */ -void gnm_gconf_set_num_recent_functions (gint value); - -/* standard plugins */ -void gnm_gconf_set_latex_use_utf8 (gboolean value); - -/* application interface */ -void gnm_gconf_set_prefer_clipboard (gboolean value); - -/**************************************************************/ - -char *go_conf_get_short_desc (char const *key); -char *go_conf_get_long_desc (char const *key); -GType go_conf_get_type (char const *key); -char *go_conf_get_value_as_str (char const *key); -gboolean go_conf_set_value_from_str (char const *key, char const *val_str); - -gboolean go_conf_get_bool (char const *key); -int go_conf_get_int (char const *key); -double go_conf_get_double (char const *key); -char *go_conf_get_string (char const *key); -GSList *go_conf_get_str_list (char const *key); - -gboolean go_conf_load_bool (char const *key, gboolean default_val); -int go_conf_load_int (char const *key, int minima, int maxima, int default_val); -double go_conf_load_double (char const *key, double minima, double maxima, double default_val); -char *go_conf_load_string (char const *key); -GSList *go_conf_load_str_list (char const *key); - -void go_conf_set_bool (char const *key, gboolean val); -void go_conf_set_int (char const *key, gint val); -void go_conf_set_double (char const *key, gnm_float val); -void go_conf_set_string (char const *key, char const *str); -void go_conf_set_str_list (char const *key, GSList *list); - -void go_conf_sync (void); - -typedef void (*GOConfMonitorFunc) (char const *key, gpointer data); -void go_conf_remove_monitor (guint monitor_id); -guint go_conf_add_monitor (char const *key, - GOConfMonitorFunc monitor, gpointer data); - -#endif /* GNM_CONF_H */ diff --git a/lib/goffice/split/gnumeric.h b/lib/goffice/split/gnumeric.h deleted file mode 100644 index 79872cace2..0000000000 --- a/lib/goffice/split/gnumeric.h +++ /dev/null @@ -1,180 +0,0 @@ -#ifndef GNUMERIC_H -#define GNUMERIC_H - -#include - -#ifndef __attribute__ -# if !defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) -/* OK, this compiler probably doesn't understand __attribute__ */ -# define __attribute__(Spec) /* empty */ -# endif -#endif - -#define SHEET_MAX_ROWS (16*16*16*16) /* 0, 1, ... */ -#define SHEET_MAX_COLS (4*4*4*4) /* 0, 1, ... */ - -/* - * Note: more than 364238 columns will introduce a column named TRUE. - */ - -typedef struct _GnmApp GnmApp; -typedef struct _Workbook Workbook; -typedef struct _WorkbookView WorkbookView; -typedef struct _WorkbookControl WorkbookControl; - -typedef struct _Sheet Sheet; -typedef struct _SheetView SheetView; -typedef struct _SheetControl SheetControl; - -typedef struct _SheetObject SheetObject; -typedef struct _SheetObjectAnchor SheetObjectAnchor; -typedef struct _SheetObjectView SheetObjectView; -typedef struct _SheetObjectViewContainer SheetObjectViewContainer; - -typedef struct _GnmDepContainer GnmDepContainer; -typedef struct _GnmDependent GnmDependent; -typedef struct _GnmCell GnmCell; -typedef struct _GnmComment GnmComment; - -typedef union _GnmValue GnmValue; -typedef struct _GnmValueBool GnmValueBool; -typedef struct _GnmValueInt GnmValueInt; -typedef struct _GnmValueFloat GnmValueFloat; -typedef struct _GnmValueErr GnmValueErr; -typedef struct _GnmValueStr GnmValueStr; -typedef struct _GnmValueRange GnmValueRange; -typedef struct _GnmValueArray GnmValueArray; - -typedef enum { - GNM_ERROR_NULL, - GNM_ERROR_DIV0, - GNM_ERROR_VALUE, - GNM_ERROR_REF, - GNM_ERROR_NAME, - GNM_ERROR_NUM, - GNM_ERROR_NA, - GNM_ERROR_RECALC, - GNM_ERROR_UNKNOWN -} GnmStdError; - -typedef struct _RenderedValue RenderedValue; - -typedef GSList GnmExprList; -typedef union _GnmExpr GnmExpr; -typedef struct _GnmExprConstant GnmExprConstant; -typedef struct _GnmExprFunction GnmExprFunction; -typedef struct _GnmExprUnary GnmExprUnary; -typedef struct _GnmExprBinary GnmExprBinary; -typedef struct _GnmExprName GnmExprName; -typedef struct _GnmExprCellRef GnmExprCellRef; -typedef struct _GnmExprArray GnmExprArray; -typedef struct _GnmExprSet GnmExprSet; - -typedef struct _GnmExprRelocateInfo GnmExprRelocateInfo; -typedef struct _GnmExprRewriteInfo GnmExprRewriteInfo; - -typedef struct _GnmExprConventions GnmExprConventions; -typedef struct _GnmDateConventions GnmDateConventions; - - -typedef struct _GnmNamedExpr GnmNamedExpr; -typedef struct _GnmNamedExprCollection GnmNamedExprCollection; - -typedef struct _GnmPasteTarget GnmPasteTarget; -typedef struct _GnmCellRegion GnmCellRegion; - -typedef struct _ColRowInfo ColRowInfo; -typedef struct _ColRowCollection ColRowCollection; -typedef struct _ColRowSegment ColRowSegment; -typedef GSList ColRowVisList; -typedef GSList ColRowStateGroup; -typedef GSList ColRowStateList; -typedef GList ColRowIndexList; -typedef struct _ColRowIndexSet ColRowIndexSet; - -typedef struct _GnmFormat GnmFormat; -typedef struct _GnmFont GnmFont; -typedef struct _GnmColor GnmColor; -typedef struct _GnmBorder GnmBorder; -typedef struct _GnmRow GnmRow; -typedef struct _GnmStyle GnmStyle; - -typedef struct _SheetStyleData SheetStyleData; -typedef struct _GnmStyleRegion GnmStyleRegion; -typedef GSList GnmStyleList; - -typedef struct _FormatTemplate FormatTemplate; /* does not really belong here */ - -typedef struct { - int col, row; -} GnmCellPos; -typedef struct { - GnmCellPos start, end; -} GnmRange; -typedef struct { - Sheet *sheet; - GnmRange range; -} GnmSheetRange; -typedef struct _GnmCellRef GnmCellRef; /* abs/rel point with sheet */ -typedef struct _GnmRangeRef GnmRangeRef; /* abs/rel range with sheet */ -typedef struct _GnmEvalPos GnmEvalPos; -typedef struct _GnmParsePos GnmParsePos; -typedef struct _GnmParseError GnmParseError; -typedef struct _FunctionEvalInfo FunctionEvalInfo; -typedef struct _GnmFunc GnmFunc; -typedef struct _ErrorInfo ErrorInfo; - -typedef enum { - CELL_ITER_ALL = 0, - CELL_ITER_IGNORE_NONEXISTENT = 1 << 0, - CELL_ITER_IGNORE_EMPTY = 1 << 1, - CELL_ITER_IGNORE_BLANK = (CELL_ITER_IGNORE_NONEXISTENT | CELL_ITER_IGNORE_EMPTY), - CELL_ITER_IGNORE_HIDDEN = 1 << 2, /* hidden manually */ - - /* contains SUBTOTAL, or hidden row in a filter */ - CELL_ITER_IGNORE_SUBTOTAL = 1 << 3 -} CellIterFlags; -typedef GnmValue *(*CellIterFunc) (Sheet *sheet, int col, int row, - GnmCell *cell, gpointer user_data); - -typedef enum { - SPANCALC_SIMPLE = 0x0, /* Just calc spans */ - SPANCALC_RESIZE = 0x1, /* Calculate sizes of all cells */ - SPANCALC_RE_RENDER = 0x2, /* Render and Size all cells */ - SPANCALC_RENDER = 0x4, /* Render and Size any unrendered cells */ - SPANCALC_ROW_HEIGHT = 0x8 /* Resize the row height */ -} SpanCalcFlags; - -typedef enum { - GNM_EXPR_EVAL_SCALAR_NON_EMPTY = 0, - GNM_EXPR_EVAL_PERMIT_NON_SCALAR = 0x1, - GNM_EXPR_EVAL_PERMIT_EMPTY = 0x2 -} GnmExprEvalFlags; - -typedef struct _GnmMemChunk GnmMemChunk; -typedef struct _GnmString GnmString; - -typedef struct _GnmCmdContext GnmCmdContext; -typedef struct _IOContext IOContext; -typedef struct _GnmFileSaver GnmFileSaver; -typedef struct _GnmFileOpener GnmFileOpener; -typedef struct _XmlParseContext XmlParseContext; - -typedef struct _GnmPlugin GnmPlugin; -typedef struct _GnmPluginService GnmPluginService; -typedef struct _GnmPluginLoader GnmPluginLoader; - -typedef struct _GnmSortData GnmSortData; -typedef struct _GnmSearchReplace GnmSearchReplace; -typedef struct _GnmConsolidate GnmConsolidate; -typedef struct _GnmValidation GnmValidation; -typedef struct _GnmFilter GnmFilter; -typedef struct _GnmFilterCondition GnmFilterCondition; -typedef struct _GnmHLink GnmHLink; -typedef struct _GnmInputMsg GnmInputMsg; - -typedef struct _PrintInformation PrintInformation; -typedef struct _SolverParameters SolverParameters; -typedef struct _GnmRelocUndo GnmRelocUndo; - -#endif /* GNUMERIC_H */ diff --git a/lib/goffice/split/gui-file.h b/lib/goffice/split/gui-file.h deleted file mode 100644 index cae737e8ee..0000000000 --- a/lib/goffice/split/gui-file.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GNUMERIC_GUI_FILE_H -#define GNUMERIC_GUI_FILE_H - -#include "gui-gnumeric.h" - -typedef struct { - char *name; - char *desc; - char *ext; - gboolean has_pixbuf_saver; -} GnmImageFormat; - -gboolean gui_file_save_as (WorkbookControlGUI *wbcg, WorkbookView *); -gboolean gui_file_save (WorkbookControlGUI *wbcg, WorkbookView *); -void gui_file_open (WorkbookControlGUI *wbcg, - char const *default_format); -void gui_wb_view_show (WorkbookControlGUI *wbcg, WorkbookView *wbv); -gboolean gui_file_read (WorkbookControlGUI *wbcg, char const *file_name, - GnmFileOpener const *optional_format, - gchar const *optional_encoding); -char * gui_image_file_select (WorkbookControlGUI *wbcg, const char *initial); -char * gui_get_image_save_info (WorkbookControlGUI *wbcg, GSList *formats, - GnmImageFormat **ret_format); - -#endif /* GNUMERIC_GUI_FILE_H */ diff --git a/lib/goffice/split/gui-gnumeric.h b/lib/goffice/split/gui-gnumeric.h deleted file mode 100644 index 42c5dc560b..0000000000 --- a/lib/goffice/split/gui-gnumeric.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef GUI_GNUMERIC_H -#define GUI_GNUMERIC_H - -#include "gnumeric.h" - -typedef struct _ItemCursor ItemCursor; -typedef struct _ItemGrid ItemGrid; -typedef struct _ItemBar ItemBar; -typedef struct _ItemEdit ItemEdit; -typedef struct _GnmCanvas GnmCanvas; -typedef struct _GnumericPane GnmPane; -typedef struct _SheetControlGUI SheetControlGUI; -typedef struct _WorkbookControlComponent WorkbookControlComponent; -typedef struct _WorkbookControlGUI WorkbookControlGUI; -typedef struct _WorkbookControlStandalone WorkbookControlStandalone; - -#endif /* GUI_GNUMERIC_H */ diff --git a/lib/goffice/split/gui-util.c b/lib/goffice/split/gui-util.c deleted file mode 100644 index ae4cedb8a8..0000000000 --- a/lib/goffice/split/gui-util.c +++ /dev/null @@ -1,1449 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gnumeric-util.c: Various GUI utility functions. - * - * Author: - * Miguel de Icaza (miguel@gnu.org) - */ - -#include -#include -#include "gnumeric.h" -#include "gui-util.h" - -//#include "workbook-control-gui-priv.h" -#include "gutils.h" -//#include "parse-util.h" -#include "style.h" -#include "style-color.h" -#include "error-info.h" -#include "value.h" -#include "number-match.h" -#include "format.h" -#include "application.h" -//#include "workbook.h" -//#include "libgnumeric.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -gboolean -gnumeric_dialog_question_yes_no (GtkWindow *parent, - gchar const *message, - gboolean default_answer) -{ - GtkWidget *dialog = gtk_message_dialog_new (parent, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - message); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), - default_answer ? GTK_RESPONSE_YES : GTK_RESPONSE_NO); - return gnumeric_dialog_run (parent, - GTK_DIALOG (dialog)) == GTK_RESPONSE_YES; -} -/* - * TODO: - * Get rid of trailing newlines /whitespace. - */ -void -gnumeric_notice (GtkWindow *parent, GtkMessageType type, char const *str) -{ - GtkWidget *dialog; - - dialog = gtk_message_dialog_new (parent, - GTK_DIALOG_DESTROY_WITH_PARENT, type, - GTK_BUTTONS_OK, str); - gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE); - - gnumeric_dialog_run (parent, GTK_DIALOG (dialog)); -} - -void -gnumeric_notice_nonmodal (GtkWindow *parent, GtkWidget **ref, GtkMessageType type, char const *str) -{ - GtkWidget *dialog; - - if (*ref != NULL) - gtk_widget_destroy (*ref); - - *ref = dialog = gtk_message_dialog_new (parent, GTK_DIALOG_DESTROY_WITH_PARENT, type, - GTK_BUTTONS_OK, str); - - g_signal_connect_object (G_OBJECT (dialog), - "response", - G_CALLBACK (gtk_widget_destroy), G_OBJECT (dialog), 0); - g_signal_connect (G_OBJECT (dialog), - "destroy", - G_CALLBACK (gtk_widget_destroyed), ref); - - gtk_widget_show (dialog); - - return; -} - -#if 0 -static void -fsel_response_cb (GtkFileChooser *dialog, - gint response_id, - gboolean *result) -{ - if (response_id == GTK_RESPONSE_OK) { - char *uri = gtk_file_chooser_get_uri (dialog); - - if (uri) { - g_free (uri); - *result = TRUE; - } - } - - gtk_main_quit (); -} - -static gint -gu_delete_handler (GtkDialog *dialog, - GdkEventAny *event, - gpointer data) -{ - gtk_dialog_response (dialog, GTK_RESPONSE_CANCEL); - return TRUE; /* Do not destroy */ -} -#endif // 0 - unused, jsled - -#if 0 -gboolean -gnumeric_dialog_file_selection (WorkbookControlGUI *wbcg, GtkWidget *w) -{ - /* Note: wbcg will be NULL if called (indirectly) from gog-style.c */ - gboolean result = FALSE; - gulong delete_handler; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (w), FALSE); - - gtk_window_set_modal (GTK_WINDOW (w), TRUE); - if (wbcg) - gnumeric_set_transient (wbcg_toplevel (wbcg), - GTK_WINDOW (w)); - g_signal_connect (w, "response", - G_CALLBACK (fsel_response_cb), &result); - delete_handler = - g_signal_connect (w, - "delete_event", - G_CALLBACK (gu_delete_handler), - NULL); - - gtk_widget_show_all (w); - gtk_grab_add (w); - gtk_main (); - - g_signal_handler_disconnect (w, delete_handler); - - return result; -} -#endif // 0 - - -static gint -cb_modal_dialog_keypress (GtkWidget *w, GdkEventKey *e) -{ - if(e->keyval == GDK_Escape) { - gtk_dialog_response (GTK_DIALOG (w), GTK_RESPONSE_CANCEL); - return TRUE; - } - - return FALSE; -} - -/** - * gnumeric_dialog_run - * - * Pop up a dialog as child of a window. - */ -gint -gnumeric_dialog_run (GtkWindow *parent, GtkDialog *dialog) -{ - gint result; - - g_return_val_if_fail (GTK_IS_DIALOG (dialog), GTK_RESPONSE_NONE); - - if (parent) { - g_return_val_if_fail (GTK_IS_WINDOW (parent), GTK_RESPONSE_NONE); - - gnumeric_set_transient (parent, GTK_WINDOW (dialog)); - } - - g_signal_connect (G_OBJECT (dialog), - "key-press-event", - G_CALLBACK (cb_modal_dialog_keypress), NULL); - - while ((result = gtk_dialog_run (dialog)) >= 0) - ; - gtk_widget_destroy (GTK_WIDGET (dialog)); - return result; -} - -#define ERROR_INFO_MAX_LEVEL 9 -#define ERROR_INFO_TAG_NAME "errorinfotag%i" - -static void -insert_error_info (GtkTextBuffer* text, ErrorInfo *error, gint level) -{ - gchar *message = (gchar *) error_info_peek_message (error); - GSList *details_list, *l; - GtkTextIter start, last; - gchar *tag_name = g_strdup_printf (ERROR_INFO_TAG_NAME, - MIN (level, ERROR_INFO_MAX_LEVEL)); - if (message == NULL) - message = g_strdup (_("Multiple errors\n")); - else - message = g_strdup_printf ("%s\n", message); - gtk_text_buffer_get_bounds (text, &start, &last); - gtk_text_buffer_insert_with_tags_by_name (text, &last, - message, -1, - tag_name, NULL); - g_free (tag_name); - g_free (message); - details_list = error_info_peek_details (error); - for (l = details_list; l != NULL; l = l->next) { - ErrorInfo *detail_error = l->data; - insert_error_info (text, detail_error, level + 1); - } - return; -} - -/** - * gnumeric_error_info_dialog_new - * - */ -GtkWidget * -gnumeric_error_info_dialog_new (ErrorInfo *error) -{ - GtkWidget *dialog; - GtkWidget *scrolled_window; - GtkTextView *view; - GtkTextBuffer *text; - GtkMessageType mtype; - gchar *message; - gint bf_lim = 1; - gint i; - GdkScreen *screen; - - g_return_val_if_fail (error != NULL, NULL); - - message = (gchar *) error_info_peek_message (error); - if (message == NULL) - bf_lim++; - - mtype = GTK_MESSAGE_ERROR; - if (error_info_peek_severity (error) < GNM_ERROR) - mtype = GTK_MESSAGE_WARNING; - dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, - mtype, GTK_BUTTONS_CLOSE, " "); - screen = gtk_widget_get_screen (dialog); - gtk_widget_set_size_request (dialog, - gdk_screen_get_width (screen) / 3, - gdk_screen_get_width (screen) / 4); - scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type - (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_SHADOW_ETCHED_IN); - view = GTK_TEXT_VIEW (gtk_text_view_new ()); - gtk_text_view_set_wrap_mode (view, GTK_WRAP_WORD); - gtk_text_view_set_editable (view, FALSE); - gtk_text_view_set_cursor_visible (view, FALSE); - - gtk_text_view_set_pixels_below_lines - (view, gtk_text_view_get_pixels_inside_wrap (view) + 3); - text = gtk_text_view_get_buffer (view); - for (i = ERROR_INFO_MAX_LEVEL; i-- > 0;) { - gchar *tag_name = g_strdup_printf (ERROR_INFO_TAG_NAME, i); - gtk_text_buffer_create_tag - (text, tag_name, - "left_margin", i * 12, - "right_margin", i * 12, - "weight", ((i < bf_lim) - ? PANGO_WEIGHT_BOLD - : PANGO_WEIGHT_NORMAL), - NULL); - g_free (tag_name); - } - insert_error_info (text, error, 0); - - gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (view)); - gtk_widget_show_all (GTK_WIDGET (scrolled_window)); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), scrolled_window, TRUE, TRUE, 0); - - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); - return dialog; -} - -/** - * gnumeric_error_info_dialog_show - * - */ -void -gnumeric_error_info_dialog_show (GtkWindow *parent, ErrorInfo *error) -{ - GtkWidget *dialog = gnumeric_error_info_dialog_new (error); - gnumeric_dialog_run (parent, GTK_DIALOG (dialog)); -} - -static void -cb_parent_mapped (GtkWidget *parent, GtkWindow *window) -{ - if (GTK_WIDGET_MAPPED (window)) { - gtk_window_present (window); - g_signal_handlers_disconnect_by_func (G_OBJECT (parent), - G_CALLBACK (cb_parent_mapped), window); - } -} - -/** - * gnumeric_set_transient - * @wbcg : The calling window - * @window : the transient window - * - * Make the window a child of the workbook in the command context, if there is - * one. - * The function duplicates the positioning functionality in - * gnome_dialog_set_parent, but does not require the transient window to be - * a GnomeDialog. - */ -void -gnumeric_set_transient (GtkWindow *toplevel, GtkWindow *window) -{ -/* FIXME: */ -/* GtkWindowPosition position = gnome_preferences_get_dialog_position(); */ - GtkWindowPosition position = GTK_WIN_POS_CENTER_ON_PARENT; - - g_return_if_fail (GTK_IS_WINDOW (toplevel)); - g_return_if_fail (GTK_IS_WINDOW (window)); - - gtk_window_set_transient_for (window, toplevel); - - if (position == GTK_WIN_POS_NONE) - position = GTK_WIN_POS_CENTER_ON_PARENT; - gtk_window_set_position (window, position); - - if (!GTK_WIDGET_MAPPED (toplevel)) - g_signal_connect_after (G_OBJECT (toplevel), - "map", - G_CALLBACK (cb_parent_mapped), window); -} - -typedef struct { - WorkbookControlGUI *wbcg; - GtkWidget *dialog; - char const *key; - gboolean freed; -} KeyedDialogContext; - -#if 0 -static void -cb_free_keyed_dialog_context (KeyedDialogContext *ctxt) -{ - if (ctxt->freed) - return; - ctxt->freed = TRUE; - - /* - * One of these causes a recursive call which will do nothing due to - * ->freed. - */ - g_object_set_data (G_OBJECT (ctxt->wbcg), ctxt->key, NULL); - g_object_set_data (G_OBJECT (ctxt->dialog), "KeyedDialog", NULL); - g_free (ctxt); -} - -static gint -cb_keyed_dialog_keypress (GtkWidget *dialog, GdkEventKey *event, - G_GNUC_UNUSED gpointer user) -{ - if (event->keyval == GDK_Escape) { - gtk_object_destroy (GTK_OBJECT (dialog)); - return TRUE; - } - return FALSE; -} -#endif // 0 - unused, jsled - -#if 0 -/** - * gnumeric_keyed_dialog - * - * @wbcg A WorkbookControlGUI - * @dialog A transient window - * @key A key to identify the dialog - * - * Make dialog a transient child of wbcg, attaching to wbcg object data to - * identify the dialog. The object data makes it possible to ensure that - * only one dialog of a kind can be displayed for a wbcg. Deallocation of - * the object data is managed here. - **/ -void -gnumeric_keyed_dialog (WorkbookControlGUI *wbcg, GtkWindow *dialog, const char *key) -{ - KeyedDialogContext *ctxt; - - g_return_if_fail (IS_WORKBOOK_CONTROL_GUI (wbcg)); - g_return_if_fail (GTK_IS_WINDOW (dialog)); - g_return_if_fail (key != NULL); - - wbcg_set_transient (wbcg, dialog); - - ctxt = g_new (KeyedDialogContext, 1); - ctxt->wbcg = wbcg; - ctxt->dialog = GTK_WIDGET (dialog); - ctxt->key = key; - ctxt->freed = FALSE; - g_object_set_data_full (G_OBJECT (wbcg), - key, ctxt, (GDestroyNotify) cb_free_keyed_dialog_context); - g_object_set_data_full (G_OBJECT (dialog), - "KeyedDialog", ctxt, (GDestroyNotify) cb_free_keyed_dialog_context); - g_signal_connect (G_OBJECT (dialog), - "key_press_event", - G_CALLBACK (cb_keyed_dialog_keypress), NULL); -} -#endif // 0 - -/** - * gnumeric_dialog_raise_if_exists - * - * @wbcg A WorkbookControlGUI - * @key A key to identify the dialog - * - * Raise the dialog identified by key if it is registered on the wbcg. - * Returns TRUE if dialog found, FALSE if not. - **/ -gpointer -gnumeric_dialog_raise_if_exists (WorkbookControlGUI *wbcg, const char *key) -{ - KeyedDialogContext *ctxt; - - g_return_val_if_fail (wbcg != NULL, NULL); - g_return_val_if_fail (key != NULL, NULL); - - /* Ensure we only pop up one copy per workbook */ - ctxt = g_object_get_data (G_OBJECT (wbcg), key); - if (ctxt && GTK_IS_WINDOW (ctxt->dialog)) { - gdk_window_raise (ctxt->dialog->window); - return ctxt->dialog; - } else - return NULL; -} - -static gboolean -cb_activate_default (GtkWindow *window) -{ - /* - * gtk_window_activate_default has a bad habit of trying - * to activate the focus widget. - */ - return window->default_widget && - GTK_WIDGET_IS_SENSITIVE (window->default_widget) && - gtk_window_activate_default (window); -} - - -/** - * gnumeric_editable_enters: Make the "activate" signal of an editable click - * the default dialog button. - * @window: dialog to affect. - * @editable: Editable to affect. - * - * This is a literal copy of gnome_dialog_editable_enters, but not restricted - * to GnomeDialogs. - * - * Normally if there's an editable widget (such as #GtkEntry) in your - * dialog, pressing Enter will activate the editable rather than the - * default dialog button. However, in most cases, the user expects to - * type something in and then press enter to close the dialog. This - * function enables that behavior. - * - **/ -void -gnumeric_editable_enters (GtkWindow *window, GtkWidget *w) -{ - g_return_if_fail (GTK_IS_WINDOW(window)); - -#if 0 - /* because I really do not feel like changing all the calls to this routine */ - if (IS_GNM_EXPR_ENTRY (w)) - w = GTK_WIDGET (gnm_expr_entry_get_entry (GNM_EXPR_ENTRY (w))); -#endif // 0 - - g_signal_connect_swapped (G_OBJECT (w), - "activate", - G_CALLBACK (cb_activate_default), window); -} - -int -gtk_radio_group_get_selected (GSList *radio_group) -{ - GSList *l; - int i, c; - - g_return_val_if_fail (radio_group != NULL, 0); - - c = g_slist_length (radio_group); - - for (i = 0, l = radio_group; l; l = l->next, i++){ - GtkRadioButton *button = l->data; - - if (GTK_TOGGLE_BUTTON (button)->active) - return c - i - 1; - } - - return 0; -} - - -int -gnumeric_glade_group_value (GladeXML *gui, const char *group[]) -{ - int i; - for (i = 0; group[i]; i++) { - GtkWidget *w = glade_xml_get_widget (gui, group[i]); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w))) - return i; - } - return -1; -} - -static void -kill_popup_menu (GtkWidget *widget, GtkMenu *menu) -{ - g_return_if_fail (menu != NULL); - g_return_if_fail (GTK_IS_MENU (menu)); - - g_object_unref (G_OBJECT (menu)); -} - -void -gnumeric_popup_menu (GtkMenu *menu, GdkEventButton *event) -{ - g_return_if_fail (menu != NULL); - g_return_if_fail (GTK_IS_MENU (menu)); - - g_object_ref (menu); - gtk_object_sink (GTK_OBJECT (menu)); - - g_signal_connect (G_OBJECT (menu), - "hide", - G_CALLBACK (kill_popup_menu), menu); - - /* Do NOT pass the button used to create the menu. - * instead pass 0. Otherwise bringing up a menu with - * the right button will disable clicking on the menu with the left. - */ - gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, - (event != NULL) ? event->time - : gtk_get_current_event_time()); -} - - -GtkWidget * -gnumeric_create_tooltip (void) -{ - GtkWidget *tip, *label, *frame; - static GtkRcStyle*rc_style = NULL; - - if (rc_style == NULL) { - int i; - rc_style = gtk_rc_style_new (); - - for (i = 5; --i >= 0 ; ) { - rc_style->color_flags[i] = GTK_RC_BG; - rc_style->bg[i] = gs_yellow; - } - } - - tip = gtk_window_new (GTK_WINDOW_POPUP); - if (rc_style != NULL) - gtk_widget_modify_style (tip, rc_style); - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); - label = gtk_label_new (""); - - gtk_container_add (GTK_CONTAINER (tip), frame); - gtk_container_add (GTK_CONTAINER (frame), label); - - return label; -} - -void -gnumeric_position_tooltip (GtkWidget *tip, int horizontal) -{ - GtkRequisition req; - int x, y; - - gtk_widget_size_request (tip, &req); - gdk_window_get_pointer (NULL, &x, &y, NULL); - - if (horizontal){ - x -= req.width / 2; - y -= req.height + 20; - } else { - x -= req.width + 20; - y -= req.height / 2; - } - - if (x < 0) - x = 0; - if (y < 0) - y = 0; - - gtk_window_move (GTK_WINDOW (gtk_widget_get_toplevel (tip)), x, y); -} - -/** - * gnm_glade_xml_new : - * @cc : #GnmCmdContext - * @gladefile : - * - * Simple utility to open glade files - **/ -GladeXML * -gnm_glade_xml_new (GnmCmdContext *cc, char const *gladefile, - char const *root, char const *domain) -{ - GladeXML *gui; - char *f; - - g_return_val_if_fail (gladefile != NULL, NULL); - - if (!g_path_is_absolute (gladefile)) { - char *d = gnm_sys_glade_dir (); - f = g_build_filename (d, gladefile, NULL); - g_free (d); - } else - f = g_strdup (gladefile); - - gui = glade_xml_new (f, root, domain); - if (gui == NULL && cc != NULL) { - char *msg = g_strdup_printf (_("Unable to open file '%s'"), f); - gnm_cmd_context_error_system (cc, msg); - g_free (msg); - } - g_free (f); - - return gui; -} - -static gint -cb_non_modal_dialog_keypress (GtkWidget *w, GdkEventKey *e) -{ - if(e->keyval == GDK_Escape) { - gtk_widget_destroy (w); - return TRUE; - } - - return FALSE; -} - -void -gnumeric_non_modal_dialog (GtkWindow *toplevel, GtkWindow *dialog) -{ - gnumeric_set_transient (toplevel, dialog); - g_signal_connect (G_OBJECT (dialog), - "key-press-event", - G_CALLBACK (cb_non_modal_dialog_keypress), NULL); -} - -static void -popup_item_activate (GtkWidget *item, gpointer *user_data) -{ - GnumericPopupMenuElement const *elem = - g_object_get_data (G_OBJECT (item), "descriptor"); - GnumericPopupMenuHandler handler = - g_object_get_data (G_OBJECT (item), "handler"); - - g_return_if_fail (elem != NULL); - g_return_if_fail (handler != NULL); - - if (handler (elem, user_data)) - gtk_widget_destroy (gtk_widget_get_toplevel (item)); -} - -static void -gnumeric_create_popup_menu_list (GSList *elements, - GnumericPopupMenuHandler handler, - gpointer user_data, - int display_filter, - int sensitive_filter, - GdkEventButton *event) -{ - GtkWidget *menu, *item; - char const *trans; - - menu = gtk_menu_new (); - - for (; elements != NULL ; elements = elements->next) { - GnumericPopupMenuElement const *element = elements->data; - char const * const name = element->name; - char const * const pix_name = element->pixmap; - - item = NULL; - - if (element->display_filter != 0 && - !(element->display_filter & display_filter)) - continue; - - if (name != NULL && *name != '\0') { - trans = _(name); - item = gtk_image_menu_item_new_with_mnemonic (trans); - if (element->sensitive_filter != 0 && - (element->sensitive_filter & sensitive_filter)) - gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); - if (pix_name != NULL) { - GtkWidget *image = gtk_image_new_from_stock (pix_name, - GTK_ICON_SIZE_MENU); - gtk_widget_show (image); - gtk_image_menu_item_set_image ( - GTK_IMAGE_MENU_ITEM (item), - image); - } - } else { - /* separator */ - item = gtk_menu_item_new (); - gtk_widget_set_sensitive (item, FALSE); - } - - if (element->index != 0) { - g_signal_connect (G_OBJECT (item), - "activate", - G_CALLBACK (&popup_item_activate), user_data); - g_object_set_data ( - G_OBJECT (item), "descriptor", (gpointer)(element)); - g_object_set_data ( - G_OBJECT (item), "handler", (gpointer)handler); - } - - gtk_widget_show (item); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - } - - gnumeric_popup_menu (GTK_MENU (menu), event); -} - -void -gnumeric_create_popup_menu (GnumericPopupMenuElement const *elements, - GnumericPopupMenuHandler handler, - gpointer user_data, - int display_filter, int sensitive_filter, - GdkEventButton *event) -{ - int i; - GSList *tmp = NULL; - - for (i = 0; elements [i].name != NULL; i++) - tmp = g_slist_prepend (tmp, (gpointer)(elements + i)); - - tmp = g_slist_reverse (tmp); - gnumeric_create_popup_menu_list (tmp, handler, user_data, - display_filter, sensitive_filter, event); - g_slist_free (tmp); -} - -/** - * go_combo_color_get_style_color : - * - * A utility wrapper to map between gal's colour combo and gnumeric's StyleColors. - */ -GnmColor * -go_combo_color_get_style_color (GtkWidget *go_combo_color) -{ - GnmColor *sc = NULL; - guint16 r, g, b; - GOColor color = go_combo_color_get_color (GO_COMBO_COLOR (go_combo_color), NULL); - if (UINT_RGBA_A (color) >= 0x80) { - r = UINT_RGBA_R (color); r |= (r << 8); - g = UINT_RGBA_G (color); g |= (g << 8); - b = UINT_RGBA_B (color); b |= (b << 8); - sc = style_color_new (r, g, b); - } - return sc; -} - -#ifdef WITH_GNOME -#include -#endif -void -gnumeric_help_display (char const *link) -{ - g_return_if_fail (link != NULL); -#ifdef WITH_GNOME - gnome_help_display ("gnumeric", link, NULL); -#else - g_warning ("TODO : launch help browser for %s", link); -#endif -} - -static void -cb_help (GtkWidget *button, char const *link) -{ - gnumeric_help_display (link); -} - -void -gnumeric_init_help_button (GtkWidget *w, char const *link) -{ - GtkWidget *parent = gtk_widget_get_parent (w); - if (GTK_IS_BUTTON_BOX (parent)) - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (parent), - w, TRUE); - - g_signal_connect (G_OBJECT (w), - "clicked", - G_CALLBACK (cb_help), (gpointer) link); -} - -static void -gnumeric_help_pbox_goto (void *ignore, int ignore2, char const *link) -{ - gnumeric_help_display (link); -} - -void -gnumeric_pbox_init_help (GtkWidget *dialog, char const *link) -{ - g_signal_connect (G_OBJECT (dialog), - "help", - G_CALLBACK (gnumeric_help_pbox_goto), (gpointer)link); -} - -char * -gnumeric_textview_get_text (GtkTextView *text_view) -{ - GtkTextIter start, end; - GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); - - g_return_val_if_fail (buf != NULL, NULL); - - gtk_text_buffer_get_start_iter (buf, &start); - gtk_text_buffer_get_end_iter (buf, &end); - return gtk_text_buffer_get_text (buf, &start, &end, FALSE); -} - -void -gnumeric_textview_set_text (GtkTextView *text_view, char const *txt) -{ - gtk_text_buffer_set_text ( - gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)), - txt, -1); -} - -void -focus_on_entry (GtkEntry *entry) -{ - if (entry == NULL) - return; - gtk_widget_grab_focus (GTK_WIDGET(entry)); - gtk_editable_set_position (GTK_EDITABLE (entry), 0); - gtk_editable_select_region (GTK_EDITABLE (entry), 0, entry->text_length); -} - -gboolean -entry_to_float_with_format_default (GtkEntry *entry, gnm_float *the_float, gboolean update, - GnmFormat *format, gnm_float num) -{ - char const *text = gtk_entry_get_text (entry); - gboolean need_default = (text == NULL); - - if (!need_default) { - char *new_text = g_strdup (text); - need_default = (0 == strlen (g_strstrip(new_text))); - g_free (new_text); - } - - if (need_default && !update) { - *the_float = num; - return FALSE; - } - - if (need_default) - float_to_entry (entry, num); - - return entry_to_float_with_format (entry, the_float, update, format); -} - -gboolean -entry_to_float_with_format (GtkEntry *entry, gnm_float *the_float, gboolean update, - GnmFormat *format) -{ - GnmValue *value = format_match_number (gtk_entry_get_text (entry), format, NULL); - - *the_float = 0.0; - if (!value) - return TRUE; - - if (!VALUE_IS_NUMBER (value)) { - value_release (value); - return TRUE; - } - - *the_float = value_get_as_float (value); - if (update) { - char *tmp = format_value (format, value, NULL, 16, NULL); - gtk_entry_set_text (entry, tmp); - g_free (tmp); - } - - value_release (value); - return FALSE; -} - -/** - * entry_to_int: - * @entry: - * @the_int: - * @update: - * - * retrieve an int from an entry field parsing all reasonable formats - * - **/ -gboolean -entry_to_int (GtkEntry *entry, gint *the_int, gboolean update) -{ - GnmValue *value = format_match_number (gtk_entry_get_text (entry), NULL, NULL); - - *the_int = 0; - if (!value) - return TRUE; - - if (value->type != VALUE_INTEGER) { - value_release (value); - return TRUE; - } - - *the_int = value_get_as_int (value); - if (update) { - char *tmp = format_value (NULL, value, NULL, 16, NULL); - gtk_entry_set_text (entry, tmp); - g_free (tmp); - } - - value_release (value); - return FALSE; -} - -/** - * float_to_entry: - * @entry: - * @the_float: - * - **/ -void -float_to_entry (GtkEntry *entry, gnm_float the_float) -{ - GnmValue *val = value_new_float (the_float); - char *text = format_value (NULL, val, NULL, 16, NULL); - value_release(val); - if (text != NULL) { - gtk_entry_set_text (entry, text); - g_free (text); - } -} - -/** - * int_to_entry: - * @entry: - * @the_float: - * - * - **/ -void -int_to_entry (GtkEntry *entry, gint the_int) -{ - GnmValue *val = value_new_int (the_int); - char *text = format_value (NULL, val, NULL, 16, NULL); - value_release(val); - if (text != NULL) { - gtk_entry_set_text (entry, text); - g_free (text); - } -} - -char * -gnumeric_icondir (char const *filename) -{ - //return g_build_filename (gnumeric_icon_dir, filename, NULL); - return g_build_filename( "FIXME-icondir", filename, NULL ); -} - -GtkWidget * -gnumeric_load_image (char const *filename) -{ - char *path = gnumeric_icondir (filename); - GtkWidget *image = gtk_image_new_from_file (path); - g_free (path); - - if (image) - gtk_widget_show (image); - - return image; -} - -/** - * gnumeric_load_pixbuf : utility routine to create pixbufs from file named @name. - * looking in the gnumeric icondir. - **/ -GdkPixbuf * -gnumeric_load_pixbuf (char const *filename) -{ - char *path = gnumeric_icondir (filename); - GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (path, NULL); - g_free (path); - return pixbuf; -} - - -/** - * gnm_pixbuf_tile: created a pixbuf consistent of the source pixbuf tiled - * enough times to fill out the space needed. - * - * The fractional tiles are spead evenly left-right and top-bottom. - */ -GdkPixbuf * -gnm_pixbuf_tile (const GdkPixbuf *src, int w, int h) -{ - int src_w = gdk_pixbuf_get_width (src); - int src_h = gdk_pixbuf_get_height (src); - - int tile_x = w / src_w; /* Number of full tiles */ - int tile_y = h / src_h; - - int left_x = w - tile_x * src_w; - int left_y = h - tile_y * src_h; - - int dst_y = 0; - int stripe_y; - GdkPixbuf *dst = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src), - gdk_pixbuf_get_has_alpha (src), - gdk_pixbuf_get_bits_per_sample (src), - w, h); - - for (stripe_y = -1; stripe_y <= tile_y; stripe_y++) { - int dst_x = 0; - int stripe_x; - int this_h, start_y = 0; - - if (stripe_y == -1) { - this_h = (left_y + 1) / 2; - start_y = src_h - this_h; - } else if (stripe_y == tile_y) - this_h = left_y / 2; - else - this_h = src_h; - - if (this_h == 0) - continue; - - for (stripe_x = -1; stripe_x <= tile_x; stripe_x++) { - int this_w, start_x = 0; - - if (stripe_x == -1) { - this_w = (left_x + 1) / 2; - start_x = src_w - this_w; - } else if (stripe_x == tile_x) - this_w = left_x / 2; - else - this_w = src_w; - - if (this_w == 0) - continue; - - gdk_pixbuf_copy_area (src, start_x, start_y, - this_w, this_h, - dst, - dst_x, dst_y); - - dst_x += this_w; - } - - dst_y += this_h; - } - - return dst; -} - - -static void -add_atk_relation (GtkWidget *w0, GtkWidget *w1, AtkRelationType type) -{ - AtkObject *atk0 = gtk_widget_get_accessible(w0); - AtkObject *atk1 = gtk_widget_get_accessible(w1); - AtkRelationSet *relation_set = atk_object_ref_relation_set (atk0); - AtkRelation *relation = atk_relation_new (&atk1, 1, type); - atk_relation_set_add (relation_set, relation); - g_object_unref (relation_set); - g_object_unref (relation); -} - -/** - * gnm_setup_label_atk : - * @label : #GtkWidget - * @target : #GtkWidget - * - * A convenience routine to setup label-for/labeled-by relationship between a - * pair of widgets - **/ -void -gnm_setup_label_atk (GtkWidget *label, GtkWidget *target) -{ - add_atk_relation (label, target, ATK_RELATION_LABEL_FOR); - add_atk_relation (target, label, ATK_RELATION_LABELLED_BY); -} - - -int -gnm_measure_string (PangoContext *context, const PangoFontDescription *font_desc, const char *str) -{ - PangoLayout *layout = pango_layout_new (context); - int width; - - pango_layout_set_text (layout, str, -1); - pango_layout_set_font_description (layout, font_desc); - pango_layout_get_pixel_size (layout, &width, NULL); - - g_object_unref (layout); - - return width; -} - -static void -cb_focus_to_entry (GtkWidget *button, GtkWidget *entry) -{ - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) - gtk_widget_grab_focus (entry); -} - -static gboolean -cb_activate_button (GtkWidget *button) -{ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); - return FALSE; -} - -void -gnm_link_button_and_entry (GtkWidget *button, GtkWidget *entry) -{ - g_signal_connect (G_OBJECT (button), - "clicked", G_CALLBACK (cb_focus_to_entry), - entry); - g_signal_connect_swapped (G_OBJECT (entry), - "focus_in_event", - G_CALLBACK (cb_activate_button), - button); -} - -/* ------------------------------------------------------------------------- */ - -void -gnm_widget_set_cursor (GtkWidget *w, GdkCursor *cursor) -{ - gdk_window_set_cursor (w->window, cursor); -} - -void -gnm_widget_set_cursor_type (GtkWidget *w, GdkCursorType ct) -{ - GdkDisplay *display = gdk_drawable_get_display (w->window); - GdkCursor *cursor = gdk_cursor_new_for_display (display, ct); - gnm_widget_set_cursor (w, cursor); - gdk_cursor_unref (cursor); -} - -GdkCursor * -gnm_fat_cross_cursor (GdkDisplay *display) -{ - /* We don't actually own a ref, but that's ok. */ - static GdkPixbuf *pixbuf = NULL; - - if (!pixbuf) - pixbuf = gnm_app_get_pixbuf ("cursor_cross"); - - return gdk_cursor_new_from_pixbuf (display, pixbuf, 17, 17); -} - -/* ------------------------------------------------------------------------- */ - -/** - * gnumeric_button_new_with_stock_image - * - * Code from gedit - * - * Creates a new GtkButton with custom label and stock image. - * - * text : button label - * sotck_id : id for stock icon - * - * return : newly created button - * - **/ - -GtkWidget* -gnumeric_button_new_with_stock_image (const gchar* text, const gchar* stock_id) -{ - GtkWidget *button; - GtkStockItem item; - GtkWidget *label; - GtkWidget *image; - GtkWidget *hbox; - GtkWidget *align; - - button = gtk_button_new (); - - if (GTK_BIN (button)->child) - gtk_container_remove (GTK_CONTAINER (button), - GTK_BIN (button)->child); - - if (gtk_stock_lookup (stock_id, &item)) { - label = gtk_label_new_with_mnemonic (text); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (button)); - - image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON); - hbox = gtk_hbox_new (FALSE, 2); - - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - - gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - gtk_container_add (GTK_CONTAINER (button), align); - gtk_container_add (GTK_CONTAINER (align), hbox); - gtk_widget_show_all (align); - - return button; - } - - label = gtk_label_new_with_mnemonic (text); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (button)); - - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - - gtk_widget_show (label); - gtk_container_add (GTK_CONTAINER (button), label); - - return button; -} - -/** - * gnumeric_dialog_add_button - * - * Code from gedit - * - * Creates and adds a button with stock image to the action area of an existing dialog. - * - * dialog : dialog you want to add a button - * text : button label - * sotck_id : stock icon id - * response_id : respond id when button clicked - * - * return : newly created button - * - **/ - -GtkWidget* -gnumeric_dialog_add_button (GtkDialog *dialog, const gchar* text, const gchar* stock_id, - gint response_id) -{ - GtkWidget *button; - - g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); - g_return_val_if_fail (text != NULL, NULL); - g_return_val_if_fail (stock_id != NULL, NULL); - - button = gnumeric_button_new_with_stock_image (text, stock_id); - g_return_val_if_fail (button != NULL, NULL); - - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - - gtk_widget_show (button); - - gtk_dialog_add_action_widget (dialog, button, response_id); - - return button; -} - -/** - * gnumeric_message_dialog_new : - * - * A convenience fonction to build HIG compliant message dialogs. - * - * parent : transient parent, or NULL for none. - * flags - * type : type of dialog - * primary_message : message displayed in bold - * secondary_message : message displayed below - * - * return : a GtkDialog, without buttons. - **/ - -GtkWidget * -gnumeric_message_dialog_new (GtkWindow * parent, - GtkDialogFlags flags, - GtkMessageType type, - gchar const * primary_message, - gchar const * secondary_message) -{ - GtkWidget * dialog; - GtkWidget * label; - GtkWidget * image; - GtkWidget * hbox; - gchar * message; - const gchar *stock_id = NULL; - GtkStockItem item; - - dialog = gtk_dialog_new_with_buttons ("", parent, flags, NULL); - - if (dialog) { - image = gtk_image_new (); - - switch (type) { - case GTK_MESSAGE_INFO: - stock_id = GTK_STOCK_DIALOG_INFO; - break; - - case GTK_MESSAGE_QUESTION: - stock_id = GTK_STOCK_DIALOG_QUESTION; - break; - - case GTK_MESSAGE_WARNING: - stock_id = GTK_STOCK_DIALOG_WARNING; - break; - - case GTK_MESSAGE_ERROR: - stock_id = GTK_STOCK_DIALOG_ERROR; - break; - - default: - g_warning ("Unknown GtkMessageType %d", type); - break; - } - - if (stock_id == NULL) - stock_id = GTK_STOCK_DIALOG_INFO; - - if (gtk_stock_lookup (stock_id, &item)) { - gtk_image_set_from_stock (GTK_IMAGE (image), stock_id, - GTK_ICON_SIZE_DIALOG); - - gtk_window_set_title (GTK_WINDOW (dialog), item.label); - } else - g_warning ("Stock dialog ID doesn't exist?"); - - if (primary_message) { - if (secondary_message) { - message = g_strdup_printf ("%s\n\n%s", - primary_message, - secondary_message); - } else { - message = g_strdup_printf ("%s", - primary_message); - } - } else { - message = g_strdup_printf (secondary_message); - } - label = gtk_label_new (message); - g_free (message); - - hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0); - gtk_box_pack_start_defaults (GTK_BOX (hbox), - label); - gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog)->vbox), - hbox); - - gtk_label_set_use_markup (GTK_LABEL (label), TRUE); - gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); - gtk_misc_set_alignment (GTK_MISC (label), 0.0 , 0.0); - gtk_misc_set_alignment (GTK_MISC (label), 0.0 , 0.0); - gtk_box_set_spacing (GTK_BOX (hbox), 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 12); - gtk_container_set_border_width (GTK_CONTAINER (dialog), 6); - gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); - gtk_window_set_resizable (GTK_WINDOW(dialog), FALSE); - gtk_widget_show_all (GTK_WIDGET (GTK_DIALOG (dialog)->vbox)); - } - - return dialog; -} - -GdkPixbuf* -gnm_pixbuf_intelligent_scale (GdkPixbuf *buf, guint width, guint height) -{ - GdkPixbuf *scaled; - int w, h; - unsigned long int ow = gdk_pixbuf_get_width (buf); - unsigned long int oh = gdk_pixbuf_get_height (buf); - - if (ow <= width && oh <= height) - scaled = g_object_ref (buf); - else - { - if (ow * height > oh * width) - { - w = width; - h = width * (((double)oh)/(double)ow); - } - else - { - h = height; - w = height * (((double)ow)/(double)oh); - } - - scaled = gdk_pixbuf_scale_simple (buf, w, h, GDK_INTERP_BILINEAR); - } - - return scaled; -} - -void -gnm_widget_disable_focus (GtkWidget *w) -{ - if (GTK_IS_CONTAINER (w)) - gtk_container_foreach (GTK_CONTAINER (w), - (GtkCallback) gnm_widget_disable_focus, NULL); - GTK_WIDGET_UNSET_FLAGS (w, GTK_CAN_FOCUS); -} - - -gboolean -gnm_tree_model_iter_prev (GtkTreeModel *model, GtkTreeIter* iter) -{ - GtkTreePath *path = gtk_tree_model_get_path (model, iter); - - if (gtk_tree_path_prev (path) && - gtk_tree_model_get_iter (model, iter, path)) { - gtk_tree_path_free (path); - return TRUE; - } - gtk_tree_path_free (path); - return FALSE; -} diff --git a/lib/goffice/split/gui-util.h b/lib/goffice/split/gui-util.h deleted file mode 100644 index cd4c26bb8c..0000000000 --- a/lib/goffice/split/gui-util.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef GNUMERIC_GUI_UTIL_H -#define GNUMERIC_GUI_UTIL_H - -#include "workbook-control-gui.h" -#include "error-info.h" -#include "command-context.h" -#include "gnumeric.h" -#include "gutils.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define GNM_ACTION_DEF(name) \ - void name (GtkAction *a, WorkbookControlGUI *wbcg) -gboolean gnumeric_dialog_question_yes_no (GtkWindow *toplevel, - char const *message, - gboolean default_answer); -gboolean gnumeric_dialog_file_selection (WorkbookControlGUI *wbcg, - GtkWidget *w); -void gnumeric_notice (GtkWindow *parent, GtkMessageType type, - char const *str); -void gnumeric_notice_nonmodal (GtkWindow *parent, GtkWidget **ref, - GtkMessageType type, char const *str); - -void gnumeric_non_modal_dialog (GtkWindow *toplevel, GtkWindow *dialog); -gint gnumeric_dialog_run (GtkWindow *parent, GtkDialog *dialog); -GtkWidget* gnumeric_error_info_dialog_new (ErrorInfo *error); -void gnumeric_error_info_dialog_show (GtkWindow *parent, - ErrorInfo *error); -void gnumeric_set_transient (GtkWindow *parent, GtkWindow *window); -void gnumeric_keyed_dialog (WorkbookControlGUI *wbcg, - GtkWindow *dialog, - char const *key); -gpointer gnumeric_dialog_raise_if_exists (WorkbookControlGUI *wbcg, - char const *key); -void gnumeric_editable_enters (GtkWindow *window, GtkWidget *w); - -/* Utility routine as Gtk does not have any decent routine to do this */ -int gtk_radio_group_get_selected (GSList *radio_group); -/* Utility routine as libglade does not have any decent routine to do this */ -int gnumeric_glade_group_value (GladeXML *gui, char const *group[]); - -/* Use this on menus that are popped up */ -void gnumeric_popup_menu (GtkMenu *menu, GdkEventButton *event); - -/* - * Pseudo-tool-tip support code. - */ -void gnumeric_position_tooltip (GtkWidget *tip, int horizontal); -GtkWidget *gnumeric_create_tooltip (void); - -GladeXML *gnm_glade_xml_new (GnmCmdContext *cc, char const *gladefile, - char const *root, char const *domain); - -typedef struct { - char const *name; - char const *pixmap; - int display_filter; - int sensitive_filter; - - int index; -} GnumericPopupMenuElement; - -typedef gboolean (*GnumericPopupMenuHandler) (GnumericPopupMenuElement const *e, - gpointer user_data); - -void gnumeric_create_popup_menu (GnumericPopupMenuElement const *elements, - GnumericPopupMenuHandler handler, - gpointer user_data, - int display_filter, - int sensitive_filter, - GdkEventButton *event); - -#define gnumeric_filter_modifiers(a) ((a) &(~(GDK_LOCK_MASK|GDK_MOD2_MASK|GDK_MOD5_MASK))) - -GnmColor *go_combo_color_get_style_color (GtkWidget *color_combo); - -void gnumeric_help_display (char const *link); -void gnumeric_init_help_button (GtkWidget *w, char const *link); -void gnumeric_pbox_init_help (GtkWidget *dialog, char const *link); - -char *gnumeric_textview_get_text (GtkTextView *text_view); -void gnumeric_textview_set_text (GtkTextView *text_view, char const *txt); - -void focus_on_entry (GtkEntry *entry); - -/* WARNING : These do not handle dates correctly - * We should be passing in a DateConvention */ -#define entry_to_float(entry, the_float, update) \ - entry_to_float_with_format (entry, the_float, update, NULL) -gboolean entry_to_float_with_format (GtkEntry *entry, gnm_float *the_float, gboolean update, - GnmFormat *format); -gboolean entry_to_float_with_format_default (GtkEntry *entry, gnm_float *the_float, gboolean update, - GnmFormat *format, gnm_float num); -gboolean entry_to_int (GtkEntry *entry, gint *the_int, gboolean update); -void float_to_entry (GtkEntry *entry, gnm_float the_float); -void int_to_entry (GtkEntry *entry, gint the_int); - -GtkWidget *gnumeric_load_image (char const *name); -GdkPixbuf *gnumeric_load_pixbuf (char const *name); -char *gnumeric_icondir (char const *subdir); - -GdkPixbuf *gnm_pixbuf_tile (GdkPixbuf const *src, int w, int h); - -void gnm_setup_label_atk (GtkWidget *label, GtkWidget *target); - -int gnm_measure_string (PangoContext *context, PangoFontDescription const *font_desc, char const *str); - -void gnm_link_button_and_entry (GtkWidget *button, GtkWidget *entry); - -void gnm_widget_set_cursor_type (GtkWidget *w, GdkCursorType ct); -void gnm_widget_set_cursor (GtkWidget *w, GdkCursor *ct); -GdkCursor *gnm_fat_cross_cursor (GdkDisplay *display); - -GtkWidget * gnumeric_button_new_with_stock_image (char const *text, char const *stock_id); -GtkWidget * gnumeric_dialog_add_button (GtkDialog *dialog, char const *text, char const *stock_id, - gint response_id); -GtkWidget * gnumeric_message_dialog_new (GtkWindow * parent, - GtkDialogFlags flags, - GtkMessageType type, - char const *primary_message, - char const *secondary_message); - -GdkPixbuf* gnm_pixbuf_intelligent_scale (GdkPixbuf *pixbuf, - guint width, guint height); -void gnm_widget_disable_focus (GtkWidget *w); - -typedef gboolean gnm_iter_search_t (GtkTreeModel *model, GtkTreeIter* iter); -#define gnm_tree_model_iter_next gtk_tree_model_iter_next -gboolean gnm_tree_model_iter_prev (GtkTreeModel *model, GtkTreeIter* iter); - - -#endif /* GNUMERIC_GUI_UTIL_H */ diff --git a/lib/goffice/split/gutils.h b/lib/goffice/split/gutils.h deleted file mode 100644 index af0b3e3150..0000000000 --- a/lib/goffice/split/gutils.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef GNUMERIC_UTILS_H -#define GNUMERIC_UTILS_H - -#include "gnumeric.h" -#include "numbers.h" -#include - -/* Misc convenience routines that would be nice to have in glib */ - -typedef gpointer (*GnmMapFunc) (gpointer value); - -GSList *gnm_hash_keys (GHashTable *hash); -GSList *gnm_hash_values (GHashTable *hash); - -GSList *gnm_slist_map (GSList const *list, GnmMapFunc map_func); -GSList *gnm_slist_create (gpointer item1, ...); -void gnm_slist_free_custom (GSList *list, GFreeFunc free_func); -#define gnm_string_slist_copy(list) gnm_slist_map (list, (GnmMapFunc) g_strdup) -GSList *gnm_strsplit_to_slist (char const *str, char const *delimiter); -#define GNM_SLIST_FOREACH(list,valtype,val,stmnt) \ -G_STMT_START { \ - GSList const *gnm_l; \ - for (gnm_l = (list); gnm_l != NULL; gnm_l = gnm_l->next) { \ - valtype *val = gnm_l->data; \ - stmnt \ - ; \ - } \ -} G_STMT_END -#define GNM_SLIST_PREPEND(list,item) \ - (list = g_slist_prepend (list, item)) -#define GNM_SLIST_APPEND(list,item) \ - (list = g_slist_append (list, item)) -#define GNM_SLIST_REMOVE(list,item) \ - (list = g_slist_remove (list, item)) -#define GNM_SLIST_CONCAT(list_a,list_b) \ - (list_a = g_slist_concat (list_a, list_b)) -#define GNM_SLIST_REVERSE(list) \ - (list = g_slist_reverse (list)) -#define GNM_SLIST_SORT(list,cmp_func) \ - (list = g_slist_sort (list, cmp_func)) - -void gnm_ptr_array_insert (GPtrArray *array, gpointer value, int index); -gint gnm_list_index_custom (GList *list, gpointer data, GCompareFunc cmp_func); -void gnm_list_free_custom (GList *list, GFreeFunc free_func); -#define GNM_LIST_FOREACH(list,valtype,val,stmnt) \ -G_STMT_START { \ - GList *gnm_l; \ - for (gnm_l = (list); gnm_l != NULL; gnm_l = gnm_l->next) { \ - valtype *val = gnm_l->data; \ - stmnt \ - ; \ - } \ -} G_STMT_END -#define GNM_LIST_PREPEND(list,item) \ - (list = g_list_prepend (list, item)) -#define GNM_LIST_APPEND(list,item) \ - (list = g_list_append (list, item)) -#define GNM_LIST_REMOVE(list,item) \ - (list = g_list_remove (list, item)) -#define GNM_LIST_CONCAT(list_a,list_b) \ - (list_a = g_list_concat (list_a, list_b)) -#define GNM_LIST_REVERSE(list) \ - (list = g_list_reverse (list)) -#define GNM_LIST_SORT(list,cmp_func) \ - (list = g_list_sort (list, cmp_func)) - -int gnm_str_compare (void const *x, void const *y); -guint gnm_ascii_strcase_hash (gconstpointer v); -gint gnm_ascii_strcase_equal (gconstpointer v, gconstpointer v2); -gint gnm_utf8_collate_casefold (char const *a, char const *b); -char *gnm_utf8_strcapital (char const *p, ssize_t len); -void gnm_strescape (GString *target, char const *str); -char const *gnm_strunescape (GString *target, char const *str); -void gnm_string_append_gstring (GString *target, const GString *src); -char const *gnm_guess_encoding (char const *raw, size_t len, - char const *user_guess, - char **utf8_str); - -char const *gnm_get_real_name (void); -void gnm_destroy_password (char *passwd); - -/* System and user paths */ -char *gnm_sys_lib_dir (char const *subdir); -char *gnm_sys_data_dir (char const *subdir); -char *gnm_sys_glade_dir (void); -char *gnm_sys_plugin_dir (void); -char *gnm_usr_dir (char const *subdir); -char *gnm_usr_plugin_dir (void); - -GnmMemChunk *gnm_mem_chunk_new (char const *, size_t, size_t); -void gnm_mem_chunk_destroy (GnmMemChunk *, gboolean); -gpointer gnm_mem_chunk_alloc (GnmMemChunk *); -gpointer gnm_mem_chunk_alloc0 (GnmMemChunk *); -void gnm_mem_chunk_free (GnmMemChunk *, gpointer); -void gnm_mem_chunk_foreach_leak (GnmMemChunk *, GFunc, gpointer); - -void gnm_time_counter_push (void); -gdouble gnm_time_counter_pop (void); - -#endif /* GNUMERIC_UTILS_H */ diff --git a/lib/goffice/split/mathfunc.c b/lib/goffice/split/mathfunc.c deleted file mode 100644 index 062e9d46c1..0000000000 --- a/lib/goffice/split/mathfunc.c +++ /dev/null @@ -1,7328 +0,0 @@ -/* - * mathfunc.c: Mathematical functions. - * - * Authors: - * Ross Ihaka. (See note 1.) - * The R Development Core Team. (See note 1.) - * Morten Welinder - * Miguel de Icaza (miguel@gnu.org) - * Jukka-Pekka Iivonen (iivonen@iki.fi) - * James Theiler. (See note 2.) - * Brian Gough. (See note 2.) - * Makoto Matsumoto and Takuji Nishimura (Mersenne Twister, see note in code) - * Ian Smith (iandjmsmith@aol.com). (See note 3.) - */ - -/* - * NOTE 1: most of this file comes from the "R" package, notably version 2 - * or newer (we re-sync from time to time). - * "R" is distributed under GPL licence, see file COPYING. - * The relevant parts are copyright (C) 1998 Ross Ihaka and - * 2000-2004 The R Development Core Team. - * - * Thank you! - */ - -/* - * NOTE 2: most of the random distribution code comes from the GNU Scientific - * Library (GSL), notably version 1.1.1. GSL is distributed under GPL licence, - * see COPYING. The relevant parts are copyright (C) 1996, 1997, 1998, 1999, - * 2000 James Theiler and Brian Gough. - * - * Thank you! - */ - -/* - * NOTE 3: the pbeta (and support) code comes from Ian Smith. (Translated - * into C, adapted to Gnumeric naming convensions, and R's API conventions - * by Morten Welinder. Blame me for problems.) - * - * Copyright © Ian Smith 2002-2003 - * Version 1.0.24 - * Thanks to Jerry W. Lewis for help with testing of and improvements to the code. - * - * Thank you! - */ - - -/* for random() */ -#define _SVID_SOURCE 1 -#define _BSD_SOURCE 1 - -#include -#include "gnumeric.h" -#include "mathfunc.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined (HAVE_IEEEFP_H) || defined (HAVE_IEEE754_H) -/* Make sure we have this symbol defined, since the existance of either - header file implies it. */ -#ifndef IEEE_754 -#define IEEE_754 -#endif -#endif - -#define M_LN_SQRT_2PI GNM_const(0.918938533204672741780329736406) /* log(sqrt(2*pi)) */ -#define M_SQRT_32 GNM_const(5.656854249492380195206754896838) /* sqrt(32) */ -#define M_1_SQRT_2PI GNM_const(0.398942280401432677939946059934) /* 1/sqrt(2pi) */ -#define M_SQRT_2dPI GNM_const(0.797884560802865355879892119869) /* sqrt(2/pi) */ -#define M_2PIgnum (2 * M_PIgnum) -#define M_Egnum GNM_const(2.718281828459045235360287471352662497757247) - -#define ML_UNDERFLOW (GNUM_EPSILON * GNUM_EPSILON) -#define ML_ERROR(cause) /* Nothing */ -#define MATHLIB_ERROR g_error -#define MATHLIB_WARNING g_warning -#define MATHLIB_WARNING2 g_warning -#define MATHLIB_WARNING4 g_warning - -static inline gnm_float fmin2 (gnm_float x, gnm_float y) { return MIN (x, y); } -static inline gnm_float fmax2 (gnm_float x, gnm_float y) { return MAX (x, y); } -static inline int imin2 (int x, int y) { return MIN (x, y); } -static inline int imax2 (int x, int y) { return MAX (x, y); } - -#define MATHLIB_STANDALONE -#define ML_ERR_return_NAN { return gnm_nan; } -static void pnorm_both (gnm_float x, gnm_float *cum, gnm_float *ccum, int i_tail, gboolean log_p); - -#define SQR(x) ((x)*(x)) -/* Scale factor for continued fractions. ==2^256. */ -static const gnm_float scalefactor = SQR(SQR(SQR(GNM_const(4294967296.0)))); -#undef SQR - -/* MW ---------------------------------------------------------------------- */ - -gnm_float gnm_nan; -gnm_float gnm_pinf; -gnm_float gnm_ninf; - -void -mathfunc_init (void) -{ - const char *bug_url = "http://bugzilla.gnome.org/enter_bug.cgi?product=gnumeric"; - - gnm_pinf = go_pinf; - if (finitegnum (gnm_pinf) || !(gnm_pinf > 0)) { - g_error ("Failed to generate +Inf. Please report at %s", - bug_url); - abort (); - } - - gnm_ninf = go_ninf; - if (finitegnum (gnm_ninf) || !(gnm_ninf < 0)) { - g_error ("Failed to generate -Inf. Please report at %s", - bug_url); - abort (); - } - - gnm_nan = go_nan; - if (!isnangnum (gnm_nan)) { - g_error ("Failed to generate NaN. Please report at %s", - bug_url); - abort (); - } -} - -/* - * In preparation for truncation, make the value a tiny bit larger (seen - * absolutely). This makes ROUND (etc.) behave a little closer to what - * people want, even if it is a bit bogus. - */ -gnm_float -gnumeric_add_epsilon (gnm_float x) -{ - if (!finitegnum (x) || x == 0) - return x; - else { - int exp; - gnm_float mant = frexpgnum (gnumabs (x), &exp); - gnm_float absres = ldexpgnum (mant + GNUM_EPSILON, exp); - return (x < 0) ? -absres : absres; - } -} - -gnm_float -gnumeric_sub_epsilon (gnm_float x) -{ - if (!finitegnum (x) || x == 0) - return x; - else { - int exp; - gnm_float mant = frexpgnum (gnumabs (x), &exp); - gnm_float absres = ldexpgnum (mant - GNUM_EPSILON, exp); - return (x < 0) ? -absres : absres; - } -} - -gnm_float -gnumeric_fake_floor (gnm_float x) -{ - return floorgnum (gnumeric_add_epsilon (x)); -} - -gnm_float -gnumeric_fake_ceil (gnm_float x) -{ - return ceilgnum (gnumeric_sub_epsilon (x)); -} - -gnm_float -gnumeric_fake_round (gnm_float x) -{ - return (x >= 0) - ? gnumeric_fake_floor (x + 0.5) - : -gnumeric_fake_floor (-x + 0.5); -} - -gnm_float -gnumeric_fake_trunc (gnm_float x) -{ - return (x >= 0) - ? gnumeric_fake_floor (x) - : -gnumeric_fake_floor (-x); -} - -/* ------------------------------------------------------------------------- */ -/* --- BEGIN MAGIC R SOURCE MARKER --- */ - -/* The following source code was imported from the R project. */ -/* It was automatically transformed by tools/import-R. */ - -/* Imported src/nmath/dpq.h from R. */ - /* Utilities for `dpq' handling (density/probability/quantile) */ - -/* give_log in "d"; log_p in "p" & "q" : */ -#define give_log log_p - /* "DEFAULT" */ - /* --------- */ -#define R_D__0 (log_p ? gnm_ninf : 0.) /* 0 */ -#define R_D__1 (log_p ? 0. : 1.) /* 1 */ -#define R_DT_0 (lower_tail ? R_D__0 : R_D__1) /* 0 */ -#define R_DT_1 (lower_tail ? R_D__1 : R_D__0) /* 1 */ - -#define R_D_Lval(p) (lower_tail ? (p) : (1 - (p))) /* p */ -#define R_D_Cval(p) (lower_tail ? (1 - (p)) : (p)) /* 1 - p */ - -#define R_D_val(x) (log_p ? loggnum(x) : (x)) /* x in pF(x,..) */ -#define R_D_qIv(p) (log_p ? expgnum(p) : (p)) /* p in qF(p,..) */ -#define R_D_exp(x) (log_p ? (x) : expgnum(x)) /* expgnum(x) */ -#define R_D_log(p) (log_p ? (p) : loggnum(p)) /* loggnum(p) */ -#define R_D_Clog(p) (log_p ? log1pgnum(-(p)) : (1 - (p)))/* [log](1-p) */ - -/* loggnum(1-expgnum(x)): R_D_LExp(x) == (log1pgnum(- R_D_qIv(x))) but even more stable:*/ -#define R_D_LExp(x) (log_p ? swap_log_tail(x) : log1pgnum(-x)) - -/*till 1.8.x: - * #define R_DT_val(x) R_D_val(R_D_Lval(x)) - * #define R_DT_Cval(x) R_D_val(R_D_Cval(x)) */ -#define R_DT_val(x) (lower_tail ? R_D_val(x) : R_D_Clog(x)) -#define R_DT_Cval(x) (lower_tail ? R_D_Clog(x) : R_D_val(x)) - -/*#define R_DT_qIv(p) R_D_Lval(R_D_qIv(p)) * p in qF ! */ -#define R_DT_qIv(p) (log_p ? (lower_tail ? expgnum(p) : - expm1gnum(p)) \ - : R_D_Lval(p)) - -/*#define R_DT_CIv(p) R_D_Cval(R_D_qIv(p)) * 1 - p in qF */ -#define R_DT_CIv(p) (log_p ? (lower_tail ? -expm1gnum(p) : expgnum(p)) \ - : R_D_Cval(p)) - -#define R_DT_exp(x) R_D_exp(R_D_Lval(x)) /* expgnum(x) */ -#define R_DT_Cexp(x) R_D_exp(R_D_Cval(x)) /* expgnum(1 - x) */ - -#define R_DT_log(p) (lower_tail? R_D_log(p) : R_D_LExp(p))/* loggnum(p) in qF */ -#define R_DT_Clog(p) (lower_tail? R_D_LExp(p): R_D_log(p))/* log1pgnum (-p) in qF*/ -#define R_DT_Log(p) (lower_tail? (p) : swap_log_tail(p)) -/* == R_DT_log when we already "know" log_p == TRUE :*/ - - -#define R_Q_P01_check(p) \ - if ((log_p && p > 0) || \ - (!log_p && (p < 0 || p > 1)) ) \ - ML_ERR_return_NAN - - -/* additions for density functions (C.Loader) */ -#define R_D_fexp(f,x) (give_log ? -0.5*loggnum(f)+(x) : expgnum(x)/sqrtgnum(f)) -#define R_D_forceint(x) floorgnum((x) + 0.5) -#define R_D_nonint(x) (gnumabs((x) - floorgnum((x)+0.5)) > 1e-7) -/* [neg]ative or [non int]eger : */ -#define R_D_negInonint(x) (x < 0. || R_D_nonint(x)) - -#define R_D_nonint_check(x) \ - if(R_D_nonint(x)) { \ - MATHLIB_WARNING("non-integer x = %" GNUM_FORMAT_f "", x); \ - return R_D__0; \ - } - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/ftrunc.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * #include - * double ftrunc(double x); - * - * DESCRIPTION - * - * Truncation toward zero. - */ - - -gnm_float gnm_trunc(gnm_float x) -{ - if(x >= 0) return floorgnum(x); - else return ceilgnum(x); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dnorm.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * Copyright (C) 2003 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * double dnorm4(double x, double mu, double sigma, int give_log) - * {dnorm (..) is synonymous and preferred inside R} - * - * DESCRIPTION - * - * Compute the density of the normal distribution. - */ - - -gnm_float dnorm(gnm_float x, gnm_float mu, gnm_float sigma, gboolean give_log) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(mu) || isnangnum(sigma)) - return x + mu + sigma; -#endif - if(!finitegnum(sigma)) return R_D__0; - if(!finitegnum(x) && mu == x) return gnm_nan;/* x-mu is NaN */ - if (sigma <= 0) { - if (sigma < 0) ML_ERR_return_NAN; - /* sigma == 0 */ - return (x == mu) ? gnm_pinf : R_D__0; - } - x = (x - mu) / sigma; - - if(!finitegnum(x)) return R_D__0; - return (give_log ? - -(M_LN_SQRT_2PI + 0.5 * x * x + loggnum(sigma)) : - M_1_SQRT_2PI * expgnum(-0.5 * x * x) / sigma); - /* M_1_SQRT_2PI = 1 / sqrtgnum(2 * pi) */ -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pnorm.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000-2002 The R Development Core Team - * Copyright (C) 2003 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * #include - * - * double pnorm5(double x, double mu, double sigma, int lower_tail,int log_p); - * {pnorm (..) is synonymous and preferred inside R} - * - * void pnorm_both(double x, double *cum, double *ccum, - * int i_tail, int log_p); - * - * DESCRIPTION - * - * The main computation evaluates near-minimax approximations derived - * from those in "Rational Chebyshev approximations for the error - * function" by W. J. Cody, Math. Comp., 1969, 631-637. This - * transportable program uses rational functions that theoretically - * approximate the normal distribution function to at least 18 - * significant decimal digits. The accuracy achieved depends on the - * arithmetic system, the compiler, the intrinsic functions, and - * proper selection of the machine-dependent constants. - * - * REFERENCE - * - * Cody, W. D. (1993). - * ALGORITHM 715: SPECFUN - A Portable FORTRAN Package of - * Special Function Routines and Test Drivers". - * ACM Transactions on Mathematical Software. 19, 22-32. - * - * EXTENSIONS - * - * The "_both" , lower, upper, and log_p variants were added by - * Martin Maechler, Jan.2000; - * as well as log1p() and similar improvements later on. - * - * James M. Rath contributed bug report PR#699 and patches correcting SIXTEN - * and if() clauses {with a bug: "|| instead of &&" -> PR #2883) more in line - * with the original Cody code. - */ - -gnm_float pnorm(gnm_float x, gnm_float mu, gnm_float sigma, gboolean lower_tail, gboolean log_p) -{ - gnm_float p, cp = 0; - - /* Note: The structure of these checks has been carefully thought through. - * For example, if x == mu and sigma == 0, we get the correct answer 1. - */ -#ifdef IEEE_754 - if(isnangnum(x) || isnangnum(mu) || isnangnum(sigma)) - return x + mu + sigma; -#endif - if(!finitegnum(x) && mu == x) return gnm_nan;/* x-mu is NaN */ - if (sigma <= 0) { - if(sigma < 0) ML_ERR_return_NAN; - /* sigma = 0 : */ - return (x < mu) ? R_DT_0 : R_DT_1; - } - p = (x - mu) / sigma; - if(!finitegnum(p)) - return (x < mu) ? R_DT_0 : R_DT_1; - x = p; - - pnorm_both(x, &p, &cp, (lower_tail ? 0 : 1), log_p); - - return(lower_tail ? p : cp); -} - -#define SIXTEN 16 /* Cutoff allowing exact "*" and "/" */ - -void pnorm_both(gnm_float x, gnm_float *cum, gnm_float *ccum, int i_tail, gboolean log_p) -{ -/* i_tail in {0,1,2} means: "lower", "upper", or "both" : - if(lower) return *cum := P[X <= x] - if(upper) return *ccum := P[X > x] = 1 - P[X <= x] -*/ - static const gnm_float a[5] = { - GNM_const(2.2352520354606839287), - GNM_const(161.02823106855587881), - GNM_const(1067.6894854603709582), - GNM_const(18154.981253343561249), - GNM_const(0.065682337918207449113) - }; - static const gnm_float b[4] = { - GNM_const(47.20258190468824187), - GNM_const(976.09855173777669322), - GNM_const(10260.932208618978205), - GNM_const(45507.789335026729956) - }; - static const gnm_float c[9] = { - GNM_const(0.39894151208813466764), - GNM_const(8.8831497943883759412), - GNM_const(93.506656132177855979), - GNM_const(597.27027639480026226), - GNM_const(2494.5375852903726711), - GNM_const(6848.1904505362823326), - GNM_const(11602.651437647350124), - GNM_const(9842.7148383839780218), - GNM_const(1.0765576773720192317e-8) - }; - static const gnm_float d[8] = { - GNM_const(22.266688044328115691), - GNM_const(235.38790178262499861), - GNM_const(1519.377599407554805), - GNM_const(6485.558298266760755), - GNM_const(18615.571640885098091), - GNM_const(34900.952721145977266), - GNM_const(38912.003286093271411), - GNM_const(19685.429676859990727) - }; - static const gnm_float p[6] = { - GNM_const(0.21589853405795699), - GNM_const(0.1274011611602473639), - GNM_const(0.022235277870649807), - GNM_const(0.001421619193227893466), - GNM_const(2.9112874951168792e-5), - GNM_const(0.02307344176494017303) - }; - static const gnm_float q[5] = { - GNM_const(1.28426009614491121), - GNM_const(0.468238212480865118), - GNM_const(0.0659881378689285515), - GNM_const(0.00378239633202758244), - GNM_const(7.29751555083966205e-5) - }; - - gnm_float xden, xnum, temp, del, eps, xsq, y; -#ifdef NO_DENORMS - gnm_float min = GNUM_MIN; -#endif - int i, lower, upper; - -#ifdef IEEE_754 - if(isnangnum(x)) { *cum = *ccum = x; return; } -#endif - - /* Consider changing these : */ - eps = GNUM_EPSILON * 0.5; - - /* i_tail in {0,1,2} =^= {lower, upper, both} */ - lower = i_tail != 1; - upper = i_tail != 0; - - y = gnumabs(x); - if (y <= 0.67448975) { /* qnorm(3/4) = .6744.... -- earlier had 0.66291 */ - if (y > eps) { - xsq = x * x; - xnum = a[4] * xsq; - xden = xsq; - for (i = 0; i < 3; ++i) { - xnum = (xnum + a[i]) * xsq; - xden = (xden + b[i]) * xsq; - } - } else xnum = xden = 0.0; - - temp = x * (xnum + a[3]) / (xden + b[3]); - if(lower) *cum = 0.5 + temp; - if(upper) *ccum = 0.5 - temp; - if(log_p) { - if(lower) *cum = loggnum(*cum); - if(upper) *ccum = loggnum(*ccum); - } - } - else if (y <= M_SQRT_32) { - - /* Evaluate pnorm for 0.674.. = qnorm(3/4) < |x| <= sqrtgnum(32) ~= 5.657 */ - - xnum = c[8] * y; - xden = y; - for (i = 0; i < 7; ++i) { - xnum = (xnum + c[i]) * y; - xden = (xden + d[i]) * y; - } - temp = (xnum + c[7]) / (xden + d[7]); - -#define do_del(X) \ - xsq = gnm_trunc(X * SIXTEN) / SIXTEN; \ - del = (X - xsq) * (X + xsq); \ - if(log_p) { \ - *cum = (-xsq * xsq * 0.5) + (-del * 0.5) + loggnum(temp); \ - if((lower && x > 0.) || (upper && x <= 0.)) \ - *ccum = log1pgnum(-expgnum(-xsq * xsq * 0.5) * \ - expgnum(-del * 0.5) * temp); \ - } \ - else { \ - *cum = expgnum(-xsq * xsq * 0.5) * expgnum(-del * 0.5) * temp; \ - *ccum = 1.0 - *cum; \ - } - -#define swap_tail \ - if (x > 0.) {/* swap ccum <--> cum */ \ - temp = *cum; if(lower) *cum = *ccum; *ccum = temp; \ - } - - do_del(y); - swap_tail; - } - -/* else |x| > sqrtgnum(32) = 5.657 : - * the next two case differentiations were really for lower=T, log=F - * Particularly *not* for log_p ! - - * Cody had (-37.5193 < x && x < 8.2924) ; R originally had y < 50 - * - * Note that we do want symmetry(0), lower/upper -> hence use y - */ - else if(log_p - /* ^^^^^ MM FIXME: can speedup for log_p and much larger |x| ! - * Then, make use of Abramowitz & Stegun, 26.2.13, something like - - xsq = x*x; - - if(xsq * GNUM_EPSILON < 1.) - del = (1. - (1. - 5./(xsq+6.)) / (xsq+4.)) / (xsq+2.); - else - del = 0.; - *cum = -.5*xsq - M_LN_SQRT_2PI - loggnum(x) + log1pgnum(-del); - *ccum = log1pgnum(-expgnum(*cum)); /.* ~ loggnum(1) = 0 *./ - - swap_tail; - - */ - || (lower && -37.5193 < x && x < 8.2924) - || (upper && -8.2924 < x && x < 37.5193) - ) { - - /* Evaluate pnorm for x in (-37.5, -5.657) union (5.657, 37.5) */ - xsq = 1.0 / (x * x); - xnum = p[5] * xsq; - xden = xsq; - for (i = 0; i < 4; ++i) { - xnum = (xnum + p[i]) * xsq; - xden = (xden + q[i]) * xsq; - } - temp = xsq * (xnum + p[4]) / (xden + q[4]); - temp = (M_1_SQRT_2PI - temp) / y; - - do_del(x); - swap_tail; - } - else { /* no log_p , large x such that probs are 0 or 1 */ - if(x > 0) { *cum = 1.; *ccum = 0.; } - else { *cum = 0.; *ccum = 1.; } - } - - -#ifdef NO_DENORMS - /* do not return "denormalized" -- we do in R */ - if(log_p) { - if(*cum > -min) *cum = -0.; - if(*ccum > -min)*ccum = -0.; - } - else { - if(*cum < min) *cum = 0.; - if(*ccum < min) *ccum = 0.; - } -#endif - return; -} -/* Cleaning up done by tools/import-R: */ -#undef SIXTEN -#undef do_del -#undef swap_tail - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qnorm.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * based on AS 111 (C) 1977 Royal Statistical Society - * and on AS 241 (C) 1988 Royal Statistical Society - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * double qnorm5(double p, double mu, double sigma, - * int lower_tail, int log_p) - * {qnorm (..) is synonymous and preferred inside R} - * - * DESCRIPTION - * - * Compute the quantile function for the normal distribution. - * - * For small to moderate probabilities, algorithm referenced - * below is used to obtain an initial approximation which is - * polished with a final Newton step. - * - * For very large arguments, an algorithm of Wichura is used. - * - * REFERENCE - * - * Beasley, J. D. and S. G. Springer (1977). - * Algorithm AS 111: The percentage points of the normal distribution, - * Applied Statistics, 26, 118-121. - * - * Wichura, M.J. (1988). - * Algorithm AS 241: The Percentage Points of the Normal Distribution. - * Applied Statistics, 37, 477-484. - */ - - -gnm_float qnorm(gnm_float p, gnm_float mu, gnm_float sigma, gboolean lower_tail, gboolean log_p) -{ - gnm_float p_, q, r, val; - -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(mu) || isnangnum(sigma)) - return p + mu + sigma; -#endif - if (p == R_DT_0) return gnm_ninf; - if (p == R_DT_1) return gnm_pinf; - R_Q_P01_check(p); - - if(sigma < 0) ML_ERR_return_NAN; - if(sigma == 0) return mu; - - p_ = R_DT_qIv(p);/* real lower_tail prob. p */ - q = p_ - 0.5; - -#ifdef DEBUG_qnorm - REprintf("qnorm(p=%10.7" GNUM_FORMAT_g ", m=%" GNUM_FORMAT_g ", s=%" GNUM_FORMAT_g ", l.t.= %d, log= %d): q = %" GNUM_FORMAT_g "\n", - p,mu,sigma, lower_tail, log_p, q); -#endif - - -/*-- use AS 241 --- */ -/* gnm_float ppnd16_(gnm_float *p, long *ifault)*/ -/* ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3 - - Produces the normal deviate Z corresponding to a given lower - tail area of P; Z is accurate to about 1 part in 10**16. - - (original fortran code used PARAMETER(..) for the coefficients - and provided hash codes for checking them...) -*/ - if (gnumabs(q) <= .425) {/* 0.075 <= p <= 0.925 */ - r = .180625 - q * q; - val = - q * (((((((r * GNM_const(2509.0809287301226727) + - GNM_const(33430.575583588128105)) * r + GNM_const(67265.770927008700853)) * r + - GNM_const(45921.953931549871457)) * r + GNM_const(13731.693765509461125)) * r + - GNM_const(1971.5909503065514427)) * r + GNM_const(133.14166789178437745)) * r + - GNM_const(3.387132872796366608)) - / (((((((r * GNM_const(5226.495278852854561) + - GNM_const(28729.085735721942674)) * r + GNM_const(39307.89580009271061)) * r + - GNM_const(21213.794301586595867)) * r + GNM_const(5394.1960214247511077)) * r + - GNM_const(687.1870074920579083)) * r + GNM_const(42.313330701600911252)) * r + 1.); - } - else { /* closer than 0.075 from {0,1} boundary */ - - /* r = min(p, 1-p) < 0.075 */ - if (q > 0) - r = R_DT_CIv(p);/* 1-p */ - else - r = p_;/* = R_DT_Iv(p) ^= p */ - - r = sqrtgnum(- ((log_p && - ((lower_tail && q <= 0) || (!lower_tail && q > 0))) ? - p : /* else */ loggnum(r))); - /* r = sqrtgnum(-loggnum(r)) <==> min(p, 1-p) = expgnum( - r^2 ) */ -#ifdef DEBUG_qnorm - REprintf("\t close to 0 or 1: r = %7" GNUM_FORMAT_g "\n", r); -#endif - - if (r <= 5.) { /* <==> min(p,1-p) >= expgnum(-25) ~= 1.3888e-11 */ - r += -1.6; - val = (((((((r * GNM_const(7.7454501427834140764e-4) + - GNM_const(.0227238449892691845833)) * r + GNM_const(.24178072517745061177)) * - r + GNM_const(1.27045825245236838258)) * r + - GNM_const(3.64784832476320460504)) * r + GNM_const(5.7694972214606914055)) * - r + GNM_const(4.6303378461565452959)) * r + - GNM_const(1.42343711074968357734)) - / (((((((r * - GNM_const(1.05075007164441684324e-9) + GNM_const(5.475938084995344946e-4)) * - r + GNM_const(.0151986665636164571966)) * r + - GNM_const(.14810397642748007459)) * r + GNM_const(.68976733498510000455)) * - r + GNM_const(1.6763848301838038494)) * r + - GNM_const(2.05319162663775882187)) * r + 1.); - } - else { /* very close to 0 or 1 */ - r += -5.; - val = (((((((r * GNM_const(2.01033439929228813265e-7) + - GNM_const(2.71155556874348757815e-5)) * r + - GNM_const(.0012426609473880784386)) * r + GNM_const(.026532189526576123093)) * - r + GNM_const(.29656057182850489123)) * r + - GNM_const(1.7848265399172913358)) * r + GNM_const(5.4637849111641143699)) * - r + GNM_const(6.6579046435011037772)) - / (((((((r * - GNM_const(2.04426310338993978564e-15) + GNM_const(1.4215117583164458887e-7))* - r + GNM_const(1.8463183175100546818e-5)) * r + - GNM_const(7.868691311456132591e-4)) * r + GNM_const(.0148753612908506148525)) - * r + GNM_const(.13692988092273580531)) * r + - GNM_const(.59983220655588793769)) * r + 1.); - } - - if(q < 0.0) - val = -val; - /* return (q >= 0.)? r : -r ;*/ - } - return mu + sigma * val; -} - - - - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/plnorm.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The lognormal distribution function. - */ - - -gnm_float plnorm(gnm_float x, gnm_float logmean, gnm_float logsd, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(logmean) || isnangnum(logsd)) - return x + logmean + logsd; -#endif - if (logsd <= 0) ML_ERR_return_NAN; - - if (x > 0) - return pnorm(loggnum(x), logmean, logsd, lower_tail, log_p); - return 0; -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qlnorm.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * This the lognormal quantile function. - */ - - -gnm_float qlnorm(gnm_float p, gnm_float logmean, gnm_float logsd, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(logmean) || isnangnum(logsd)) - return p + logmean + logsd; -#endif - R_Q_P01_check(p); - - if (p == R_DT_1) return gnm_pinf; - if (p == R_DT_0) return 0; - return expgnum(qnorm(p, logmean, logsd, lower_tail, log_p)); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/ppois.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The distribution function of the Poisson distribution. - */ - - -gnm_float ppois(gnm_float x, gnm_float lambda, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(lambda)) - return x + lambda; -#endif - if(lambda < 0.) ML_ERR_return_NAN; - - x = floorgnum(x + 1e-7); - if (x < 0) return R_DT_0; - if (lambda == 0.) return R_DT_1; - if (!finitegnum(x)) return R_DT_1; - - return pgamma(lambda, x + 1, 1., !lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qpois.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The quantile function of the Poisson distribution. - * - * METHOD - * - * Uses the Cornish-Fisher Expansion to include a skewness - * correction to a normal approximation. This gives an - * initial value which never seems to be off by more than - * 1 or 2. A search is then conducted of values close to - * this initial start point. - */ - - -gnm_float qpois(gnm_float p, gnm_float lambda, gboolean lower_tail, gboolean log_p) -{ - gnm_float mu, sigma, gamma, z, y; -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(lambda)) - return p + lambda; -#endif - if(!finitegnum(lambda)) - ML_ERR_return_NAN; - R_Q_P01_check(p); - if(lambda < 0) ML_ERR_return_NAN; - - if (p == R_DT_0) return 0; - if (p == R_DT_1) return gnm_pinf; - - if(lambda == 0) return 0; - - mu = lambda; - sigma = sqrtgnum(lambda); - gamma = sigma; - - /* Note : "same" code in qpois.c, qbinom.c, qnbinom.c -- - * FIXME: This is far from optimal [cancellation for p ~= 1, etc]: */ - if(!lower_tail || log_p) { - p = R_DT_qIv(p); /* need check again (cancellation!): */ - if (p == 0.) return 0; - if (p == 1.) return gnm_pinf; - } - /* temporary hack --- FIXME --- */ - if (p + 1.01*GNUM_EPSILON >= 1.) return gnm_pinf; - - /* y := approx.value (Cornish-Fisher expansion) : */ - z = qnorm(p, 0., 1., /*lower_tail*/TRUE, /*log_p*/FALSE); - y = floorgnum(mu + sigma * (z + gamma * (z*z - 1) / 6) + 0.5); - - z = ppois(y, lambda, /*lower_tail*/TRUE, /*log_p*/FALSE); - - /* fuzz to ensure left continuity; 1 - 1e-7 may lose too much : */ - p *= 1 - 64*GNUM_EPSILON; - -/*-- Fixme, here y can be way off -- - should use interval search instead of primitive stepping down or up */ - -#ifdef maybe_future - if((lower_tail && z >= p) || (!lower_tail && z <= p)) { -#else - if(z >= p) { -#endif - /* search to the left */ - for(;;) { - if(y == 0 || - (z = ppois(y - 1, lambda, /*l._t.*/TRUE, /*log_p*/FALSE)) < p) - return y; - y = y - 1; - } - } - else { /* search to the right */ - for(;;) { - y = y + 1; - if((z = ppois(y, lambda, /*l._t.*/TRUE, /*log_p*/FALSE)) >= p) - return y; - } - } -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/stirlerr.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * Computes the log of the error term in Stirling's formula. - * For n > 15, uses the series 1/12n - 1/360n^3 + ... - * For n <=15, integers or half-integers, uses stored values. - * For other n < 15, uses lgamma directly (don't use this to - * write lgamma!) - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * R has lgammafn, and lgamma is not part of ISO C - */ - - -/* stirlerr(n) = loggnum(n!) - loggnum( sqrtgnum(2*pi*n)*(n/e)^n ) - * = loggnum Gamma(n+1) - 1/2 * [loggnum(2*pi) + loggnum(n)] - n*[loggnum(n) - 1] - * = loggnum Gamma(n+1) - (n + 1/2) * loggnum(n) + n - loggnum(2*pi)/2 - * - * see also lgammacor() in ./lgammacor.c which computes almost the same! - */ - -static gnm_float stirlerr(gnm_float n) -{ - -#define S0 GNM_const(0.083333333333333333333) /* 1/12 */ -#define S1 GNM_const(0.00277777777777777777778) /* 1/360 */ -#define S2 GNM_const(0.00079365079365079365079365) /* 1/1260 */ -#define S3 GNM_const(0.000595238095238095238095238) /* 1/1680 */ -#define S4 GNM_const(0.0008417508417508417508417508)/* 1/1188 */ - -/* - error for 0, 0.5, 1.0, 1.5, ..., 14.5, 15.0. -*/ - static const gnm_float sferr_halves[31] = { - 0.0, /* n=0 - wrong, place holder only */ - GNM_const(0.1534264097200273452913848), /* 0.5 */ - GNM_const(0.0810614667953272582196702), /* 1.0 */ - GNM_const(0.0548141210519176538961390), /* 1.5 */ - GNM_const(0.0413406959554092940938221), /* 2.0 */ - GNM_const(0.03316287351993628748511048), /* 2.5 */ - GNM_const(0.02767792568499833914878929), /* 3.0 */ - GNM_const(0.02374616365629749597132920), /* 3.5 */ - GNM_const(0.02079067210376509311152277), /* 4.0 */ - GNM_const(0.01848845053267318523077934), /* 4.5 */ - GNM_const(0.01664469118982119216319487), /* 5.0 */ - GNM_const(0.01513497322191737887351255), /* 5.5 */ - GNM_const(0.01387612882307074799874573), /* 6.0 */ - GNM_const(0.01281046524292022692424986), /* 6.5 */ - GNM_const(0.01189670994589177009505572), /* 7.0 */ - GNM_const(0.01110455975820691732662991), /* 7.5 */ - GNM_const(0.010411265261972096497478567), /* 8.0 */ - GNM_const(0.009799416126158803298389475), /* 8.5 */ - GNM_const(0.009255462182712732917728637), /* 9.0 */ - GNM_const(0.008768700134139385462952823), /* 9.5 */ - GNM_const(0.008330563433362871256469318), /* 10.0 */ - GNM_const(0.007934114564314020547248100), /* 10.5 */ - GNM_const(0.007573675487951840794972024), /* 11.0 */ - GNM_const(0.007244554301320383179543912), /* 11.5 */ - GNM_const(0.006942840107209529865664152), /* 12.0 */ - GNM_const(0.006665247032707682442354394), /* 12.5 */ - GNM_const(0.006408994188004207068439631), /* 13.0 */ - GNM_const(0.006171712263039457647532867), /* 13.5 */ - GNM_const(0.005951370112758847735624416), /* 14.0 */ - GNM_const(0.005746216513010115682023589), /* 14.5 */ - GNM_const(0.005554733551962801371038690) /* 15.0 */ - }; - gnm_float nn; - - if (n <= 15.0) { - nn = n + n; - if (nn == (int)nn) return(sferr_halves[(int)nn]); - return(lgamma1p (n) - (n + 0.5)*loggnum(n) + n - M_LN_SQRT_2PI); - } - - nn = n*n; - if (n>500) return((S0-S1/nn)/n); - if (n> 80) return((S0-(S1-S2/nn)/nn)/n); - if (n> 35) return((S0-(S1-(S2-S3/nn)/nn)/nn)/n); - /* 15 < n <= 35 : */ - return((S0-(S1-(S2-(S3-S4/nn)/nn)/nn)/nn)/n); -} -/* Cleaning up done by tools/import-R: */ -#undef S0 -#undef S1 -#undef S2 -#undef S3 -#undef S4 - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/bd0.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * Evaluates the "deviance part" - * bd0(x,M) := M * D0(x/M) = M*[ x/M * log(x/M) + 1 - (x/M) ] = - * = x * log(x/M) + M - x - * where M = E[X] = n*p (or = lambda), for x, M > 0 - * - * in a manner that should be stable (with small relative error) - * for all x and np. In particular for x/np close to 1, direct - * evaluation fails, and evaluation is based on the Taylor series - * of log((1+v)/(1-v)) with v = (x-np)/(x+np). - */ - -static gnm_float bd0(gnm_float x, gnm_float np) -{ - gnm_float ej, s, s1, v; - int j; - - if (gnumabs(x-np) < 0.1*(x+np)) { - v = (x-np)/(x+np); - s = (x-np)*v;/* s using v -- change by MM */ - ej = 2*x*v; - v = v*v; - for (j=1; ; j++) { /* Taylor series */ - ej *= v; - s1 = s+ej/((j<<1)+1); - if (s1==s) /* last term was effectively 0 */ - return(s1); - s = s1; - } - } - /* else: | x - np | is not too small */ - return(x*loggnum(x/np)+np-x); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dpois.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * dpois() checks argument validity and calls dpois_raw(). - * - * dpois_raw() computes the Poisson probability lb^x exp(-lb) / x!. - * This does not check that x is an integer, since dgamma() may - * call this with a fractional x argument. Any necessary argument - * checks should be done in the calling function. - * - */ - - -static gnm_float dpois_raw(gnm_float x, gnm_float lambda, gboolean give_log) -{ - if (lambda == 0) return( (x == 0) ? R_D__1 : R_D__0 ); - if (x == 0) return( R_D_exp(-lambda) ); - if (x < 0) return( R_D__0 ); - - return(R_D_fexp( M_2PIgnum*x, -stirlerr(x)-bd0(x,lambda) )); -} - -gnm_float dpois(gnm_float x, gnm_float lambda, gboolean give_log) -{ -#ifdef IEEE_754 - if(isnangnum(x) || isnangnum(lambda)) - return x + lambda; -#endif - - if (lambda < 0) ML_ERR_return_NAN; - R_D_nonint_check(x); - if (x < 0 || !finitegnum(x)) return R_D__0; - x = R_D_forceint(x); - - return( dpois_raw(x,lambda,give_log) ); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dgamma.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000 The R Core Development Team - * Copyright (C) 2004 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * Computes the density of the gamma distribution, - * - * 1/s (x/s)^{a-1} exp(-x/s) - * p(x;a,s) = ----------------------- - * (a-1)! - * - * where `s' is the scale (= 1/lambda in other parametrizations) - * and `a' is the shape parameter ( = alpha in other contexts). - * - * The old (R 1.1.1) version of the code is available via `#define D_non_pois' - */ - - -gnm_float dgamma(gnm_float x, gnm_float shape, gnm_float scale, gboolean give_log) -{ - gnm_float pr; -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(shape) || isnangnum(scale)) - return x + shape + scale; -#endif - if (shape <= 0 || scale <= 0) ML_ERR_return_NAN; - if (x < 0) - return R_D__0; - if (x == 0) { - if (shape < 1) return gnm_pinf; - if (shape > 1) return R_D__0; - /* else */ - return give_log ? -loggnum(scale) : 1 / scale; - } - - if (shape < 1) { - pr = dpois_raw(shape, x/scale, give_log); - return give_log ? pr + loggnum(shape/x) : pr*shape/x; - } - /* else shape >= 1 */ - pr = dpois_raw(shape-1, x/scale, give_log); - return give_log ? pr - loggnum(scale) : pr/scale; -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pgamma.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 1999-2000 The R Development Core Team - * Copyright (C) 2003-2004 The R Foundation - * Copyright (C) 2004 Morten Welinder - * Copyright (C) 2002-2003 Ian Smith - * - * Formerly based on AS 239 (C) 1988 Royal Statistical Society - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * #include - * double pgamma(double x, double alph, double scale, - * int lower_tail, int log_p) - * - * DESCRIPTION - * - * This function computes the distribution function for the - * gamma distribution with shape parameter alph and scale parameter - * scale. This is also known as the incomplete gamma function. - * See Abramowitz and Stegun (6.5.1) for example. - * - * NOTES - * - * This function is an adaptation of Algorithm 239 from the - * Applied Statistics Series. The algorithm is faster than - * those by W. Fullerton in the FNLIB library and also the - * TOMS 542 alorithm of W. Gautschi. It provides comparable - * accuracy to those algorithms and is considerably simpler. - * - * REFERENCES - * - * Algorithm AS 239, Incomplete Gamma Function - * Applied Statistics 37, 1988. - */ - - - - -/* - * Compute the log of a sum from logs of terms, i.e., - * - * log (exp (logx) + exp (logy)) - * - * without causing overflows and without throwing away large handfuls - * of accuracy. - */ -static gnm_float -logspace_add (gnm_float logx, gnm_float logy) -{ - return fmax2 (logx, logy) + log1pgnum (expgnum (-gnumabs (logx - logy))); -} - - -/* - * Compute the log of a difference from logs of terms, i.e., - * - * log (exp (logx) - exp (logy)) - * - * without causing overflows and without throwing away large handfuls - * of accuracy. - */ -static gnm_float -logspace_sub (gnm_float logx, gnm_float logy) -{ - return logx + log1pgnum (-expgnum (logy - logx)); -} - - -static gnm_float -dpois_wrap (gnm_float x_plus_1, gnm_float lambda, gboolean give_log) -{ -#if 0 - printf ("x+1=%.14" GNUM_FORMAT_g " lambda=%.14" GNUM_FORMAT_g "\n", x_plus_1, lambda); -#endif - - if (x_plus_1 > 1) - return dpois_raw (x_plus_1 - 1, lambda, give_log); - else { - gnm_float d = dpois_raw (x_plus_1, lambda, give_log); - return give_log - ? d + loggnum (x_plus_1 / lambda) - : d * (x_plus_1 / lambda); - } -} - -/* - * Abramowitz and Stegun 6.5.29 [right] - */ -static gnm_float -pgamma_smallx (gnm_float x, gnm_float alph, gboolean lower_tail, gboolean log_p) -{ - gnm_float sum = 0, c = alph, n = 0, term; - -#if 0 - printf ("x:%.14" GNUM_FORMAT_g " alph:%.14" GNUM_FORMAT_g "\n", x, alph); -#endif - - /* - * Relative to 6.5.29 all terms have been multiplied by alph - * and the first, thus being 1, is omitted. - */ - - do { - n++; - c *= -x / n; - term = c / (alph + n); - sum += term; - } while (gnumabs (term) > GNUM_EPSILON * gnumabs (sum)); - - if (lower_tail) { - gnm_float f1 = log_p ? log1pgnum (sum) : 1 + sum; - gnm_float f2; - if (alph > 1) { - f2 = dpois_raw (alph, x, log_p); - f2 = log_p ? f2 + x : f2 * expgnum (x); - } else if (log_p) - f2 = alph * loggnum (x) - lgamma1p (alph); - else - f2 = powgnum (x, alph) / expgnum (lgamma1p (alph)); - - return log_p ? f1 + f2 : f1 * f2; - } else { - gnm_float lf2 = alph * loggnum (x) - lgamma1p (alph); -#if 0 - printf ("1:%.14" GNUM_FORMAT_g " 2:%.14" GNUM_FORMAT_g "\n", alph * loggnum (x), lgamma1p (alph)); - printf ("sum=%.14" GNUM_FORMAT_g " log1pgnum (sum)=%.14" GNUM_FORMAT_g " lf2=%.14" GNUM_FORMAT_g "\n", sum, log1pgnum (sum), lf2); -#endif - if (log_p) - return swap_log_tail (log1pgnum (sum) + lf2); - else { - gnm_float f1m1 = sum; - gnm_float f2m1 = expm1gnum (lf2); - return -(f1m1 + f2m1 + f1m1 * f2m1); - } - } -} - -static gnm_float -pd_upper_series (gnm_float x, gnm_float y, gboolean log_p) -{ - gnm_float term = x / y; - gnm_float sum = term; - - do { - y++; - term *= x / y; - sum += term; - } while (term > sum * GNUM_EPSILON); - - return log_p ? loggnum (sum) : sum; -} - -static gnm_float -pd_lower_cf (gnm_float i, gnm_float d) -{ - gnm_float f = 0, of; - - gnm_float a1 = 0; - gnm_float b1 = 1; - gnm_float a2 = i; - gnm_float b2 = d; - gnm_float c1 = 0; - gnm_float c2 = a2; - gnm_float c3; - gnm_float c4 = b2; - - while (1) { - c1++; - c2--; - c3 = c1 * c2; - c4 += 2; - a1 = c4 * a2 + c3 * a1; - b1 = c4 * b2 + c3 * b1; - - c1++; - c2--; - c3 = c1 * c2; - c4 += 2; - a2 = c4 * a1 + c3 * a2; - b2 = c4 * b1 + c3 * b2; - - if (b2 > scalefactor) { - a1 = a1 / scalefactor; - b1 = b1 / scalefactor; - a2 = a2 / scalefactor; - b2 = b2 / scalefactor; - } - - if (b2 != 0) { - of = f; - f = a2 / b2; - if (gnumabs (f - of) <= GNUM_EPSILON * fmin2 (1.0, gnumabs (f))) - return f; - } - } -} - -static gnm_float -pd_lower_series (gnm_float lambda, gnm_float y) -{ - gnm_float term = 1, sum = 0; - - while (y >= 1 && term > sum * GNUM_EPSILON) { - term *= y / lambda; - sum += term; - y--; - } - - if (y != floorgnum (y)) { - /* - * The series does not converge as the terms start getting - * bigger (besides flipping sign) for y < -lambda. - */ - gnm_float f = pd_lower_cf (y, lambda + 1 - y); - sum += term * f; - } - - return sum; -} - -/* - * Asymptotic expansion to calculate the probability that poisson variate - * has value <= x. - */ -static gnm_float -ppois_asymp (gnm_float x, gnm_float lambda, - gboolean lower_tail, gboolean log_p) -{ - static const gnm_float coef15 = 1 / GNM_const(12.0); - static const gnm_float coef25 = 1 / GNM_const(288.0); - static const gnm_float coef35 = -139 / GNM_const(51840.0); - static const gnm_float coef45 = -571 / GNM_const(2488320.0); - static const gnm_float coef55 = 163879 / GNM_const(209018880.0); - static const gnm_float coef65 = 5246819 / GNM_const(75246796800.0); - static const gnm_float coef75 = -534703531 / GNM_const(902961561600.0); - static const gnm_float coef1 = 2 / GNM_const(3.0); - static const gnm_float coef2 = -4 / GNM_const(135.0); - static const gnm_float coef3 = 8 / GNM_const(2835.0); - static const gnm_float coef4 = 16 / GNM_const(8505.0); - static const gnm_float coef5 = -8992 / GNM_const(12629925.0); - static const gnm_float coef6 = -334144 / GNM_const(492567075.0); - static const gnm_float coef7 = 698752 / GNM_const(1477701225.0); - static const gnm_float two = 2; - - gnm_float dfm, pt,s2pt,res1,res2,elfb,term; - gnm_float ig2,ig3,ig4,ig5,ig6,ig7,ig25,ig35,ig45,ig55,ig65,ig75; - gnm_float f, np, nd; - - dfm = lambda - x; - pt = -x * log1pmx (dfm / x); - s2pt = sqrtgnum (2 * pt); - if (dfm < 0) s2pt = -s2pt; - - ig2 = 1.0 + pt; - term = pt * pt * 0.5; - ig3 = ig2 + term; - term *= pt / 3; - ig4 = ig3 + term; - term *= pt / 4; - ig5 = ig4 + term; - term *= pt / 5; - ig6 = ig5 + term; - term *= pt / 6; - ig7 = ig6 + term; - - term = pt * (two / 3); - ig25 = 1.0 + term; - term *= pt * (two / 5); - ig35 = ig25 + term; - term *= pt * (two / 7); - ig45 = ig35 + term; - term *= pt * (two / 9); - ig55 = ig45 + term; - term *= pt * (two / 11); - ig65 = ig55 + term; - term *= pt * (two / 13); - ig75 = ig65 + term; - - elfb = ((((((coef75/x + coef65)/x + coef55)/x + coef45)/x + coef35)/x + coef25)/x + coef15) + x; - res1 = ((((((ig7*coef7/x + ig6*coef6)/x + ig5*coef5)/x + ig4*coef4)/x + ig3*coef3)/x + ig2*coef2)/x + coef1)*sqrtgnum(x); - res2 = ((((((ig75*coef75/x + ig65*coef65)/x + ig55*coef55)/x + ig45*coef45)/x + ig35*coef35)/x + ig25*coef25)/x + coef15)*s2pt; - - if (!lower_tail) elfb = -elfb; - f = (res1 + res2) / elfb; - - np = pnorm (s2pt, 0.0, 1.0, !lower_tail, log_p); - nd = dnorm (s2pt, 0.0, 1.0, log_p); - -#if 0 - printf ("f=%.14" GNUM_FORMAT_g " np=%.14" GNUM_FORMAT_g " nd=%.14" GNUM_FORMAT_g " f*nd=%.14" GNUM_FORMAT_g "\n", f, np, nd, f * nd); -#endif - - if (log_p) - return (f >= 0) - ? logspace_add (np, loggnum (gnumabs (f)) + nd) - : logspace_sub (np, loggnum (gnumabs (f)) + nd); - else - return np + f * nd; -} - - -static gnm_float -pgamma_raw (gnm_float x, gnm_float alph, gboolean lower_tail, gboolean log_p) -{ - gnm_float res; - -#if 0 - printf ("x=%.14" GNUM_FORMAT_g " alph=%.14" GNUM_FORMAT_g " low=%d log=%d\n", x, alph, lower_tail, log_p); -#endif - - if (x < 1) { - res = pgamma_smallx (x, alph, lower_tail, log_p); - } else if (x <= alph - 1 && x < 0.8 * (alph + 50)) { - gnm_float sum = pd_upper_series (x, alph, log_p); - gnm_float d = dpois_wrap (alph, x, log_p); - - if (!lower_tail) - res = log_p - ? swap_log_tail (d + sum) - : 1 - d * sum; - else - res = log_p ? sum + d : sum * d; - } else if (alph - 1 < x && alph < 0.8 * (x + 50)) { - gnm_float sum; - gnm_float d = dpois_wrap (alph, x, log_p); - - if (alph < 1) { - gnm_float f = pd_lower_cf (alph, x - (alph - 1)) - * x / alph; - sum = log_p ? loggnum (f) : f; - } else { - sum = pd_lower_series (x, alph - 1); - sum = log_p ? log1pgnum (sum) : 1 + sum; - } - - if (!lower_tail) - res = log_p ? sum + d : sum * d; - else - res = log_p - ? swap_log_tail (d + sum) - : 1 - d * sum; - } else { - res = ppois_asymp (alph - 1, x, !lower_tail, log_p); - } - - /* - * We lose a fair amount of accuracy to underflow in the cases - * where the final result is very close to DBL_MIN. In those - * cases, simply redo via log space. - */ - if (!log_p && res < GNUM_MIN / GNUM_EPSILON) - return expgnum (pgamma_raw (x, alph, lower_tail, 1)); - else - return res; -} - - -gnm_float pgamma(gnm_float x, gnm_float alph, gnm_float scale, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(alph) || isnangnum(scale)) - return x + alph + scale; -#endif - if(alph <= 0. || scale <= 0.) - ML_ERR_return_NAN; - if (x <= 0.) - return R_DT_0; - x /= scale; -#ifdef IEEE_754 - if (isnangnum(x)) /* eg. original x = scale = +Inf */ - return x; -#endif - - return pgamma_raw (x, alph, lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/chebyshev.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * SYNOPSIS - * - * int chebyshev_init(double *dos, int nos, double eta) - * double chebyshev_eval(double x, double *a, int n) - * - * DESCRIPTION - * - * "chebyshev_init" determines the number of terms for the - * double precision orthogonal series "dos" needed to insure - * the error is no larger than "eta". Ordinarily eta will be - * chosen to be one-tenth machine precision. - * - * "chebyshev_eval" evaluates the n-term Chebyshev series - * "a" at "x". - * - * NOTES - * - * These routines are translations into C of Fortran routines - * by W. Fullerton of Los Alamos Scientific Laboratory. - * - * Based on the Fortran routine dcsevl by W. Fullerton. - * Adapted from R. Broucke, Algorithm 446, CACM., 16, 254 (1973). - */ - - -/* NaNs propagated correctly */ - -#if 0 -static int chebyshev_init(gnm_float *dos, int nos, gnm_float eta) -{ - int i, ii; - gnm_float err; - - if (nos < 1) - return 0; - - err = 0.0; - i = 0; /* just to avoid compiler warnings */ - for (ii=1; ii<=nos; ii++) { - i = nos - ii; - err += gnumabs(dos[i]); - if (err > eta) { - return i; - } - } - return i; -} -#endif // 0 -- jsled, unused - - -static gnm_float chebyshev_eval(gnm_float x, const gnm_float *a, const int n) -{ - gnm_float b0, b1, b2, twox; - int i; - - if (n < 1 || n > 1000) ML_ERR_return_NAN; - - if (x < -1.1 || x > 1.1) ML_ERR_return_NAN; - - twox = x * 2; - b2 = b1 = 0; - b0 = 0; - for (i = 1; i <= n; i++) { - b2 = b1; - b1 = b0; - b0 = twox * b1 - b2 + a[n - i]; - } - return (b0 - b2) * 0.5; -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/lgammacor.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000-2001 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * #include - * double lgammacor(double x); - * - * DESCRIPTION - * - * Compute the log gamma correction factor for x >= 10 so that - * - * log(gamma(x)) = .5*log(2*pi) + (x-.5)*log(x) -x + lgammacor(x) - * - * [ lgammacor(x) is called Del(x) in other contexts (e.g. dcdflib)] - * - * NOTES - * - * This routine is a translation into C of a Fortran subroutine - * written by W. Fullerton of Los Alamos Scientific Laboratory. - * - * SEE ALSO - * - * Loader(1999)'s stirlerr() {in ./stirlerr.c} is *very* similar in spirit, - * is faster and cleaner, but is only defined "fast" for half integers. - */ - - -static gnm_float lgammacor(gnm_float x) -{ - static const gnm_float algmcs[15] = { - GNM_const(+.1666389480451863247205729650822e+0), - GNM_const(-.1384948176067563840732986059135e-4), - GNM_const(+.9810825646924729426157171547487e-8), - GNM_const(-.1809129475572494194263306266719e-10), - GNM_const(+.6221098041892605227126015543416e-13), - GNM_const(-.3399615005417721944303330599666e-15), - GNM_const(+.2683181998482698748957538846666e-17), - GNM_const(-.2868042435334643284144622399999e-19), - GNM_const(+.3962837061046434803679306666666e-21), - GNM_const(-.6831888753985766870111999999999e-23), - GNM_const(+.1429227355942498147573333333333e-24), - GNM_const(-.3547598158101070547199999999999e-26), - GNM_const(+.1025680058010470912000000000000e-27), - GNM_const(-.3401102254316748799999999999999e-29), - GNM_const(+.1276642195630062933333333333333e-30) - }; - - gnm_float tmp; - -#ifdef NOMORE_FOR_THREADS - static int nalgm = 0; - static gnm_float xbig = 0, xmax = 0; - - /* Initialize machine dependent constants, the first time gamma() is called. - FIXME for threads ! */ - if (nalgm == 0) { - /* For IEEE gnm_float precision : nalgm = 5 */ - nalgm = chebyshev_init(algmcs, 15, GNUM_EPSILON/2);/*was d1mach(3)*/ - xbig = 1 / sqrtgnum(GNUM_EPSILON/2); /* ~ 94906265.6 for IEEE gnm_float */ - xmax = expgnum(fmin2(loggnum(GNUM_MAX / 12), -loggnum(12 * GNUM_MIN))); - /* = GNUM_MAX / 48 ~= 3.745e306 for IEEE gnm_float */ - } -#else -/* For IEEE gnm_float precision GNUM_EPSILON = 2^-52 = GNM_const(2.220446049250313e-16) : - * xbig = 2 ^ 26.5 - * xmax = GNUM_MAX / 48 = 2^1020 / 3 */ -# define nalgm 5 -# define xbig 94906265.62425156 -# define xmax GNM_const(3.745194030963158e306) -#endif - - if (x < 10) - ML_ERR_return_NAN - else if (x >= xmax) { - ML_ERROR(ME_UNDERFLOW); - return ML_UNDERFLOW; - } - else if (x < xbig) { - tmp = 10 / x; - return chebyshev_eval(tmp * tmp * 2 - 1, algmcs, nalgm) / x; - } - else return 1 / (x * 12); -} -/* Cleaning up done by tools/import-R: */ -#undef nalgm -#undef xbig -#undef xmax - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/lbeta.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * Copyright (C) 2003 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * #include - * double lbeta(double a, double b); - * - * DESCRIPTION - * - * This function returns the value of the log beta function. - * - * NOTES - * - * This routine is a translation into C of a Fortran subroutine - * by W. Fullerton of Los Alamos Scientific Laboratory. - */ - - -static gnm_float lbeta(gnm_float a, gnm_float b) -{ - gnm_float corr, p, q; - - p = q = a; - if(b < p) p = b;/* := min(a,b) */ - if(b > q) q = b;/* := max(a,b) */ - -#ifdef IEEE_754 - if(isnangnum(a) || isnangnum(b)) - return a + b; -#endif - - /* both arguments must be >= 0 */ - - if (p < 0) - ML_ERR_return_NAN - else if (p == 0) { - return gnm_pinf; - } - else if (!finitegnum(q)) { - return gnm_ninf; - } - - if (p >= 10) { - /* p and q are big. */ - corr = lgammacor(p) + lgammacor(q) - lgammacor(p + q); - return loggnum(q) * -0.5 + M_LN_SQRT_2PI + corr - + (p - 0.5) * loggnum(p / (p + q)) + q * log1pgnum(-p / (p + q)); - } - else if (q >= 10) { - /* p is small, but q is big. */ - corr = lgammacor(q) - lgammacor(p + q); - return lgammagnum(p) + corr + p - p * loggnum(p + q) - + (q - 0.5) * log1pgnum(-p / (p + q)); - } - else - /* p and q are small: p <= q < 10. */ - return lgammagnum(p) + lgammagnum(q) - lgammagnum(p + q); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dt.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * The t density is evaluated as - * sqrt(n/2) / ((n+1)/2) * Gamma((n+3)/2) / Gamma((n+2)/2). - * * (1+x^2/n)^(-n/2) - * / sqrt( 2 pi (1+x^2/n) ) - * - * This form leads to a stable computation for all - * values of n, including n -> 0 and n -> infinity. - */ - - -gnm_float dt(gnm_float x, gnm_float n, gboolean give_log) -{ - gnm_float t, u; -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(n)) - return x + n; -#endif - - if (n <= 0) ML_ERR_return_NAN; - if(!finitegnum(x)) - return R_D__0; - if(!finitegnum(n)) - return dnorm(x, 0., 1., give_log); - - t = -bd0(n/2.,(n+1)/2.) + stirlerr((n+1)/2.) - stirlerr(n/2.); - if ( x*x > 0.2*n ) - u = log1pgnum (x*x/n ) * n/2; - else - u = -bd0(n/2.,(n+x*x)/2.) + x*x/2.; - - return R_D_fexp(M_2PIgnum*(1+x*x/n), t-u); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pt.c from R. */ -/* - * R : A Computer Language for Statistical Data Analysis - * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - - -gnm_float pt(gnm_float x, gnm_float n, gboolean lower_tail, gboolean log_p) -{ -/* return P[ T <= x ] where - * T ~ t_{n} (t distrib. with n degrees of freedom). - - * --> ./pnt.c for NON-central - */ - gnm_float val; -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(n)) - return x + n; -#endif - if (n <= 0.0) ML_ERR_return_NAN; - - if(!finitegnum(x)) - return (x < 0) ? R_DT_0 : R_DT_1; - if(!finitegnum(n)) - return pnorm(x, 0.0, 1.0, lower_tail, log_p); - if (0 && n > 4e5) { /*-- Fixme(?): test should depend on `n' AND `x' ! */ - /* Approx. from Abramowitz & Stegun 26.7.8 (p.949) */ - val = 1./(4.*n); - return pnorm(x*(1. - val)/sqrtgnum(1. + x*x*2.*val), 0.0, 1.0, - lower_tail, log_p); - } - - val = (n > x * x) - ? pbeta (x * x / (n + x * x), 0.5, n / 2, /*lower_tail*/0, log_p) - : pbeta (n / (n + x * x), n / 2.0, 0.5, /*lower_tail*/1, log_p); - - /* Use "1 - v" if lower_tail and x > 0 (but not both):*/ - if(x <= 0.) - lower_tail = !lower_tail; - - if(log_p) { - if(lower_tail) return log1pgnum(-0.5*expgnum(val)); - else return val - M_LN2gnum; /* = loggnum(.5* pbeta(....)) */ - } - else { - val /= 2.; - return R_D_Cval(val); - } -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qt.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000-2002 The R Development Core Team - * Copyright (C) 2003 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The "Student" t distribution quantile function. - * - * NOTES - * - * This is a C translation of the Fortran routine given in: - * Hill, G.W (1970) "Algorithm 396: Student's t-quantiles" - * CACM 13(10), 619-620. - * - * ADDITIONS: - * - lower_tail, log_p - * - using expm1() : takes care of Lozy (1979) "Remark on Algo.", TOMS - * - Apply 2-term Taylor expansion as in - * Hill, G.W (1981) "Remark on Algo.396", ACM TOMS 7, 250-1 - * - Improve the formula decision for 1 < df < 2 - */ - - -gnm_float qt(gnm_float p, gnm_float ndf, gboolean lower_tail, gboolean log_p) -{ - const gnm_float eps = 1.e-12; - - gnm_float a, b, c, d, p_, P, q, x, y; - gboolean neg; - -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(ndf)) - return p + ndf; -#endif - if (p == R_DT_0) return gnm_ninf; - if (p == R_DT_1) return gnm_pinf; - R_Q_P01_check(p); - - if (ndf < 1) /* FIXME: not yet treated here */ - ML_ERR_return_NAN; - - /* FIXME: This test should depend on ndf AND p !! - * ----- and in fact should be replaced by - * something like Abramowitz & Stegun 26.7.5 (p.949) - */ - if (ndf > 1e20) return qnorm(p, 0., 1., lower_tail, log_p); - - p_ = R_D_qIv(p); /* note: expgnum(p) may underflow to 0; fix later */ - - if((lower_tail && p_ > 0.5) || (!lower_tail && p_ < 0.5)) { - neg = FALSE; P = 2 * R_D_Cval(p_); - } else { - neg = TRUE; P = 2 * R_D_Lval(p_); - } /* 0 <= P <= 1 ; P = 2*min(p_, 1 - p_) in all cases */ - - if (gnumabs(ndf - 2) < eps) { /* df ~= 2 */ - if(P > 0) - q = sqrtgnum(2 / (P * (2 - P)) - 2); - else { /* P = 0, but maybe = expgnum(p) ! */ - if(log_p) q = M_SQRT2gnum * expgnum(- .5 * R_D_Lval(p)); - else q = gnm_pinf; - } - } - else if (ndf < 1 + eps) { /* df ~= 1 (df < 1 excluded above): Cauchy */ - if(P > 0) - q = - tangnum((P+1) * M_PI_2gnum); - - else { /* P = 0, but maybe p_ = expgnum(p) ! */ - if(log_p) q = M_1_PI * expgnum(-R_D_Lval(p));/* cot(e) ~ 1/e */ - else q = gnm_pinf; - } - } - else { /*-- usual case; including, e.g., df = 1.1 */ - a = 1 / (ndf - 0.5); - b = 48 / (a * a); - c = ((20700 * a / b - 98) * a - 16) * a + 96.36; - d = ((94.5 / (b + c) - 3) / b + 1) * sqrtgnum(a * M_PI_2gnum) * ndf; - if(P > 0 || !log_p) - y = powgnum(d * P, 2 / ndf); - else /* P = 0 && log_p; P = 2*expgnum(p) */ - y = expgnum(2 / ndf * (loggnum(d) + M_LN2gnum + R_D_Lval(p))); - - if ((ndf < 2.1 && P > 0.5) || y > 0.05 + a) { /* P > P0(df) */ - /* Asymptotic inverse expansion about normal */ - if(P > 0 || !log_p) - x = qnorm(0.5 * P, 0., 1., /*lower_tail*/TRUE, /*log_p*/FALSE); - else /* P = 0 && log_p; P = 2*expgnum(p') */ - x = qnorm( p, 0., 1., lower_tail, /*log_p*/TRUE); - - y = x * x; - if (ndf < 5) - c += 0.3 * (ndf - 4.5) * (x + 0.6); - c = (((0.05 * d * x - 5) * x - 7) * x - 2) * x + b + c; - y = (((((0.4 * y + 6.3) * y + 36) * y + 94.5) / c - - y - 3) / b + 1) * x; - y = expm1gnum(a * y * y); - } else { - y = ((1 / (((ndf + 6) / (ndf * y) - 0.089 * d - 0.822) - * (ndf + 2) * 3) + 0.5 / (ndf + 4)) - * y - 1) * (ndf + 1) / (ndf + 2) + 1 / y; - } - q = sqrtgnum(ndf * y); - - /* Now apply 2-term Taylor expansion improvement (1-term = Newton): - * as by Hill (1981) [ref.above] */ - - /* FIXME: This is can be far from optimal when log_p = TRUE ! - * and probably also improvable when lower_tail = FALSE */ - x = (pt(q, ndf, /*lower_tail = */FALSE, /*log_p = */FALSE) - P/2) / - dt(q, ndf, /* give_log = */FALSE); - /* Newton (=Taylor 1 term): - * q += x; - * Taylor 2-term : */ - q += x * (1. + x * q * (ndf + 1) / (2 * (q * q + ndf))); - } - if(neg) q = -q; - return q; -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qf.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The quantile function of the F distribution. -*/ - - -gnm_float qf(gnm_float p, gnm_float n1, gnm_float n2, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(n1) || isnangnum(n2)) - return p + n1 + n2; -#endif - if (n1 <= 0. || n2 <= 0.) ML_ERR_return_NAN; - - R_Q_P01_check(p); - if (p == R_DT_0) - return 0; - - /* fudge the extreme DF cases -- qbeta doesn't do this well */ - - if (n2 > 4e5) - return qchisq(p, n1, lower_tail, log_p) / n1; - - if (n1 > 4e5) - return 1/qchisq(p, n2, !lower_tail, log_p) * n2; - - p = (1. / qbeta(R_DT_CIv(p), n2/2, n1/2, TRUE, FALSE) - 1.) * (n2 / n1); - return !isnangnum(p) ? p : gnm_nan; -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pchisq.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * DESCRIPTION - * - * The distribution function of the chi-squared distribution. - */ - - -gnm_float pchisq(gnm_float x, gnm_float df, gboolean lower_tail, gboolean log_p) -{ - return pgamma(x, df/2., 2., lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qchisq.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The quantile function of the chi-squared distribution. - */ - - -gnm_float qchisq(gnm_float p, gnm_float df, gboolean lower_tail, gboolean log_p) -{ - return qgamma(p, 0.5 * df, 2.0, lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dweibull.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The density function of the Weibull distribution. - */ - - -gnm_float dweibull(gnm_float x, gnm_float shape, gnm_float scale, gboolean give_log) -{ - gnm_float tmp1, tmp2; -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(shape) || isnangnum(scale)) - return x + shape + scale; -#endif - if (shape <= 0 || scale <= 0) ML_ERR_return_NAN; - - if (x < 0) return R_D__0; - if (!finitegnum(x)) return R_D__0; - tmp1 = powgnum(x / scale, shape - 1); - tmp2 = tmp1 * (x / scale); - return give_log ? - -tmp2 + loggnum(shape * tmp1 / scale) : - shape * tmp1 * expgnum(-tmp2) / scale; -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pweibull.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000-2002 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The distribution function of the Weibull distribution. - */ - - -gnm_float pweibull(gnm_float x, gnm_float shape, gnm_float scale, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(shape) || isnangnum(scale)) - return x + shape + scale; -#endif - if(shape <= 0 || scale <= 0) ML_ERR_return_NAN; - - if (x <= 0) - return R_DT_0; - x = -powgnum(x / scale, shape); - if (lower_tail) - return (log_p - /* loggnum(1 - expgnum(x)) for x < 0 : */ - ? (x > -M_LN2gnum ? loggnum(-expm1gnum(x)) : log1pgnum(-expgnum(x))) - : -expm1gnum(x)); - /* else: !lower_tail */ - return R_D_exp(x); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pbinom.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000, 2002 The R Development Core Team - * Copyright (C) 2004 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The distribution function of the binomial distribution. - */ - -gnm_float pbinom(gnm_float x, gnm_float n, gnm_float p, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(n) || isnangnum(p)) - return x + n + p; - if (!finitegnum(n) || !finitegnum(p)) ML_ERR_return_NAN; - -#endif - if(R_D_nonint(n)) ML_ERR_return_NAN; - n = R_D_forceint(n); - if(n <= 0 || p < 0 || p > 1) ML_ERR_return_NAN; - - x = floorgnum(x + 1e-7); - if (x < 0.0) return R_DT_0; - if (n <= x) return R_DT_1; - return pbeta(p, x + 1, n - x, !lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dbinom.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * To compute the binomial probability, call dbinom(x,n,p). - * This checks for argument validity, and calls dbinom_raw(). - * - * dbinom_raw() does the actual computation; note this is called by - * other functions in addition to dbinom()). - * (1) dbinom_raw() has both p and q arguments, when one may be represented - * more accurately than the other (in particular, in df()). - * (2) dbinom_raw() does NOT check that inputs x and n are integers. This - * should be done in the calling function, where necessary. - * (3) Also does not check for 0 <= p <= 1 and 0 <= q <= 1 or NaN's. - * Do this in the calling function. - */ - - -static gnm_float dbinom_raw(gnm_float x, gnm_float n, gnm_float p, gnm_float q, gboolean give_log) -{ - gnm_float f, lc; - - if (p == 0) return((x == 0) ? R_D__1 : R_D__0); - if (q == 0) return((x == n) ? R_D__1 : R_D__0); - - if (x == 0) { - if(n == 0) return R_D__1; - lc = (p < 0.1) ? -bd0(n,n*q) - n*p : n*loggnum(q); - return( R_D_exp(lc) ); - } - if (x == n) { - lc = (q < 0.1) ? -bd0(n,n*p) - n*q : n*loggnum(p); - return( R_D_exp(lc) ); - } - if (x < 0 || x > n) return( R_D__0 ); - - lc = stirlerr(n) - stirlerr(x) - stirlerr(n-x) - bd0(x,n*p) - bd0(n-x,n*q); - f = (M_2PIgnum*x*(n-x))/n; - - return R_D_fexp(f,lc); -} - -gnm_float dbinom(gnm_float x, gnm_float n, gnm_float p, gboolean give_log) -{ -#ifdef IEEE_754 - /* NaNs propagated correctly */ - if (isnangnum(x) || isnangnum(n) || isnangnum(p)) return x + n + p; -#endif - - if (p < 0 || p > 1 || R_D_negInonint(n)) - ML_ERR_return_NAN; - R_D_nonint_check(x); - - n = R_D_forceint(n); - x = R_D_forceint(x); - - return dbinom_raw(x,n,p,1-p,give_log); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qbinom.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000, 2002 The R Development Core Team - * Copyright (C) 2003--2004 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The quantile function of the binomial distribution. - * - * METHOD - * - * Uses the Cornish-Fisher Expansion to include a skewness - * correction to a normal approximation. This gives an - * initial value which never seems to be off by more than - * 1 or 2. A search is then conducted of values close to - * this initial start point. - */ - - -gnm_float qbinom(gnm_float p, gnm_float n, gnm_float pr, gboolean lower_tail, gboolean log_p) -{ - gnm_float q, mu, sigma, gamma, z, y; - -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(n) || isnangnum(pr)) - return p + n + pr; -#endif - if(!finitegnum(p) || !finitegnum(n) || !finitegnum(pr)) - ML_ERR_return_NAN; - R_Q_P01_check(p); - - if(n != floorgnum(n + 0.5)) ML_ERR_return_NAN; - if (pr < 0 || pr > 1 || n < 0) - ML_ERR_return_NAN; - - if (pr == 0. || n == 0) return 0.; - if (p == R_DT_0) return 0.; - if (p == R_DT_1) return n; - - q = 1 - pr; - if(q == 0.) return n; /* covers the full range of the distribution */ - mu = n * pr; - sigma = sqrtgnum(n * pr * q); - gamma = (q - pr) / sigma; - -#ifdef DEBUG_qbinom - REprintf("qbinom(p=%7" GNUM_FORMAT_g ", n=%" GNUM_FORMAT_g ", pr=%7" GNUM_FORMAT_g ", l.t.=%d, log=%d): sigm=%" GNUM_FORMAT_g ", gam=%" GNUM_FORMAT_g "\n", - p,n,pr, lower_tail, log_p, sigma, gamma); -#endif - /* Note : "same" code in qpois.c, qbinom.c, qnbinom.c -- - * FIXME: This is far from optimal [cancellation for p ~= 1, etc]: */ - if(!lower_tail || log_p) { - p = R_DT_qIv(p); /* need check again (cancellation!): */ - if (p == 0.) return 0.; - if (p == 1.) return n; - } - /* temporary hack --- FIXME --- */ - if (p + 1.01*GNUM_EPSILON >= 1.) return n; - - /* y := approx.value (Cornish-Fisher expansion) : */ - z = qnorm(p, 0., 1., /*lower_tail*/TRUE, /*log_p*/FALSE); - y = floorgnum(mu + sigma * (z + gamma * (z*z - 1) / 6) + 0.5); - if(y > n) /* way off */ y = n; - -#ifdef DEBUG_qbinom - REprintf(" new (p,1-p)=(%7" GNUM_FORMAT_g ",%7" GNUM_FORMAT_g "), z=qnorm(..)=%7" GNUM_FORMAT_g ", y=%5" GNUM_FORMAT_g "\n", p, 1-p, z, y); -#endif - z = pbinom(y, n, pr, /*lower_tail*/TRUE, /*log_p*/FALSE); - - /* fuzz to ensure left continuity: */ - p *= 1 - 64*GNUM_EPSILON; - -/*-- Fixme, here y can be way off -- - should use interval search instead of primitive stepping down or up */ - -#ifdef maybe_future - if((lower_tail && z >= p) || (!lower_tail && z <= p)) { -#else - if(z >= p) { -#endif - /* search to the left */ -#ifdef DEBUG_qbinom - REprintf("\tnew z=%7" GNUM_FORMAT_g " >= p = %7" GNUM_FORMAT_g " --> search to left (y--) ..\n", z,p); -#endif - for(;;) { - if(y == 0 || - (z = pbinom(y - 1, n, pr, /*l._t.*/TRUE, /*log_p*/FALSE)) < p) - return y; - y = y - 1; - } - } - else { /* search to the right */ -#ifdef DEBUG_qbinom - REprintf("\tnew z=%7" GNUM_FORMAT_g " < p = %7" GNUM_FORMAT_g " --> search to right (y++) ..\n", z,p); -#endif - for(;;) { - y = y + 1; - if(y == n || - (z = pbinom(y, n, pr, /*l._t.*/TRUE, /*log_p*/FALSE)) >= p) - return y; - } - } -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dnbinom.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000 and Feb, 2001. - * - * Merge in to R: - * Copyright (C) 2000--2001, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * Computes the negative binomial distribution. For integer n, - * this is probability of x failures before the nth success in a - * sequence of Bernoulli trials. We do not enforce integer n, since - * the distribution is well defined for non-integers, - * and this can be useful for e.g. overdispersed discrete survival times. - */ - - -gnm_float dnbinom(gnm_float x, gnm_float n, gnm_float p, gboolean give_log) -{ - gnm_float prob; - -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(n) || isnangnum(p)) - return x + n + p; -#endif - - if (p < 0 || p > 1 || n <= 0) ML_ERR_return_NAN; - R_D_nonint_check(x); - if (x < 0 || !finitegnum(x)) return R_D__0; - x = R_D_forceint(x); - - prob = dbinom_raw(n, x+n, p, 1-p, give_log); - p = ((gnm_float)n)/(n+x); - return((give_log) ? loggnum(p) + prob : p * prob); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pnbinom.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The distribution function of the negative binomial distribution. - * - * NOTES - * - * x = the number of failures before the n-th success - */ - - -gnm_float pnbinom(gnm_float x, gnm_float n, gnm_float p, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(n) || isnangnum(p)) - return x + n + p; - if(!finitegnum(n) || !finitegnum(p)) ML_ERR_return_NAN; -#endif - if (n <= 0 || p <= 0 || p >= 1) ML_ERR_return_NAN; - - x = floorgnum(x + 1e-7); - if (x < 0) return R_DT_0; - if (!finitegnum(x)) return R_DT_1; - return pbeta(p, n, x + 1, lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/qnbinom.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * SYNOPSIS - * - * #include - * double qnbinom(double p, double n, double pr, int lower_tail, int log_p) - * - * DESCRIPTION - * - * The quantile function of the negative binomial distribution. - * - * NOTES - * - * x = the number of failures before the n-th success - * - * METHOD - * - * Uses the Cornish-Fisher Expansion to include a skewness - * correction to a normal approximation. This gives an - * initial value which never seems to be off by more than - * 1 or 2. A search is then conducted of values close to - * this initial start point. - */ - - -gnm_float qnbinom(gnm_float p, gnm_float n, gnm_float pr, gboolean lower_tail, gboolean log_p) -{ - gnm_float P, Q, mu, sigma, gamma, z, y; - -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(n) || isnangnum(pr)) - return p + n + pr; -#endif - R_Q_P01_check(p); - if (pr <= 0 || pr >= 1 || n <= 0) ML_ERR_return_NAN; - - if (p == R_DT_0) return 0; - if (p == R_DT_1) return gnm_pinf; - Q = 1.0 / pr; - P = (1.0 - pr) * Q; - mu = n * P; - sigma = sqrtgnum(n * P * Q); - gamma = (Q + P)/sigma; - - /* Note : "same" code in qpois.c, qbinom.c, qnbinom.c -- - * FIXME: This is far from optimal [cancellation for p ~= 1, etc]: */ - if(!lower_tail || log_p) { - p = R_DT_qIv(p); /* need check again (cancellation!): */ - if (p == R_DT_0) return 0; - if (p == R_DT_1) return gnm_pinf; - } - /* temporary hack --- FIXME --- */ - if (p + 1.01*GNUM_EPSILON >= 1.) return gnm_pinf; - - /* y := approx.value (Cornish-Fisher expansion) : */ - z = qnorm(p, 0., 1., /*lower_tail*/TRUE, /*log_p*/FALSE); - y = floorgnum(mu + sigma * (z + gamma * (z*z - 1) / 6) + 0.5); - - z = pnbinom(y, n, pr, /*lower_tail*/TRUE, /*log_p*/FALSE); - - /* fuzz to ensure left continuity: */ - p *= 1 - 64*GNUM_EPSILON; - -/*-- Fixme, here y can be way off -- - should use interval search instead of primitive stepping down or up */ - -#ifdef maybe_future - if((lower_tail && z >= p) || (!lower_tail && z <= p)) { -#else - if(z >= p) { -#endif - /* search to the left */ - for(;;) { - if(y == 0 || - (z = pnbinom(y - 1, n, pr, /*l._t.*/TRUE, /*log_p*/FALSE)) < p) - return y; - y = y - 1; - } - } - else { /* search to the right */ - - for(;;) { - y = y + 1; - if((z = pnbinom(y, n, pr, /*l._t.*/TRUE, /*log_p*/FALSE)) >= p) - return y; - } - } -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dbeta.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * Beta density, - * (a+b-1)! a-1 b-1 - * p(x;a,b) = ------------ x (1-x) - * (a-1)!(b-1)! - * - * = (a+b-1) dbinom(a-1; a+b-2,x) - * - * We must modify this when a<1 or b<1, to avoid passing negative - * arguments to dbinom_raw. Note that the modifications require - * division by x and/or 1-x, so cannot be used except where necessary. - */ - - -gnm_float dbeta(gnm_float x, gnm_float a, gnm_float b, gboolean give_log) -{ - gnm_float f, p; - volatile gnm_float am1, bm1; /* prevent roundoff trouble on some - platforms */ - -#ifdef IEEE_754 - /* NaNs propagated correctly */ - if (isnangnum(x) || isnangnum(a) || isnangnum(b)) return x + a + b; -#endif - - if (a <= 0 || b <= 0) ML_ERR_return_NAN; - if (x < 0 || x > 1) return(R_D__0); - if (x == 0) { - if(a > 1) return(R_D__0); - if(a < 1) return(gnm_pinf); - /* a == 1 : */ return(R_D_val(b)); - } - if (x == 1) { - if(b > 1) return(R_D__0); - if(b < 1) return(gnm_pinf); - /* b == 1 : */ return(R_D_val(a)); - } - if (a < 1) { - if (b < 1) { /* a,b < 1 */ - f = a*b/((a+b)*x*(1-x)); - p = dbinom_raw(a,a+b, x,1-x, give_log); - } - else { /* a < 1 <= b */ - f = a/x; - bm1 = b - 1; - p = dbinom_raw(a,a+bm1, x,1-x, give_log); - } - } - else { - if (b < 1) { /* a >= 1 > b */ - f = b/(1-x); - am1 = a - 1; - p = dbinom_raw(am1,am1+b, x,1-x, give_log); - } - else { /* a,b >= 1 */ - f = a+b-1; - am1 = a - 1; - bm1 = b - 1; - p = dbinom_raw(am1,am1+bm1, x,1-x, give_log); - } - } - return( (give_log) ? p + loggnum(f) : p*f ); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dhyper.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, 2001 The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * Given a sequence of r successes and b failures, we sample n (\le b+r) - * items without replacement. The hypergeometric probability is the - * probability of x successes: - * - * choose(r, x) * choose(b, n-x) - * p(x; r,b,n) = ----------------------------- = - * choose(r+b, n) - * - * dbinom(x,r,p) * dbinom(n-x,b,p) - * = -------------------------------- - * dbinom(n,r+b,p) - * - * for any p. For numerical stability, we take p=n/(r+b); with this choice, - * the denominator is not exponentially small. - */ - - -gnm_float dhyper(gnm_float x, gnm_float r, gnm_float b, gnm_float n, gboolean give_log) -{ - gnm_float p, q, p1, p2, p3; - -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(r) || isnangnum(b) || isnangnum(n)) - return x + r + b + n; -#endif - - if (R_D_negInonint(r) || R_D_negInonint(b) || R_D_negInonint(n) || n > r+b) - ML_ERR_return_NAN; - if (R_D_negInonint(x)) - return(R_D__0); - - x = R_D_forceint(x); - r = R_D_forceint(r); - b = R_D_forceint(b); - n = R_D_forceint(n); - - if (n < x || r < x || n - x > b) return(R_D__0); - if (n == 0) return((x == 0) ? R_D__1 : R_D__0); - - p = ((gnm_float)n)/((gnm_float)(r+b)); - q = ((gnm_float)(r+b-n))/((gnm_float)(r+b)); - - p1 = dbinom_raw(x, r, p,q,give_log); - p2 = dbinom_raw(n-x,b, p,q,give_log); - p3 = dbinom_raw(n,r+b, p,q,give_log); - - return( (give_log) ? p1 + p2 - p3 : p1*p2/p3 ); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dexp.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * DESCRIPTION - * - * The density of the exponential distribution. - */ - - -gnm_float dexp(gnm_float x, gnm_float scale, gboolean give_log) -{ -#ifdef IEEE_754 - /* NaNs propagated correctly */ - if (isnangnum(x) || isnangnum(scale)) return x + scale; -#endif - if (scale <= 0.0) ML_ERR_return_NAN; - - if (x < 0.) - return R_D__0; - return (give_log ? - (-x / scale) - loggnum(scale) : - expgnum(-x / scale) / scale); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pexp.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000-2002 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The distribution function of the exponential distribution. - */ - -gnm_float pexp(gnm_float x, gnm_float scale, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(scale)) - return x + scale; - if (scale < 0) ML_ERR_return_NAN; -#else - if (scale <= 0) ML_ERR_return_NAN; -#endif - - if (x <= 0.) - return R_DT_0; - /* same as weibull( shape = 1): */ - x = -(x / scale); - if (lower_tail) - return (log_p - /* loggnum(1 - expgnum(x)) for x < 0 : */ - ? (x > -M_LN2gnum ? loggnum(-expm1gnum(x)) : log1pgnum(-expgnum(x))) - : -expm1gnum(x)); - /* else: !lower_tail */ - return R_D_exp(x); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dgeom.c from R. */ -/* - * AUTHOR - * Catherine Loader, catherine@research.bell-labs.com. - * October 23, 2000. - * - * Merge in to R: - * Copyright (C) 2000, 2001 The R Core Development Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * - * DESCRIPTION - * - * Computes the geometric probabilities, Pr(X=x) = p(1-p)^x. - */ - - -gnm_float dgeom(gnm_float x, gnm_float p, gboolean give_log) -{ - gnm_float prob; - -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(p)) return x + p; -#endif - - if (p < 0 || p > 1) ML_ERR_return_NAN; - - R_D_nonint_check(x); - if (x < 0 || !finitegnum(x) || p == 0) return R_D__0; - x = R_D_forceint(x); - - /* prob = (1-p)^x, stable for small p */ - prob = dbinom_raw(0.,x, p,1-p, give_log); - - return((give_log) ? loggnum(p) + prob : p*prob); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/pgeom.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000, 2001 The R Development Core Team - * Copyright (C) 2004 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * DESCRIPTION - * - * The distribution function of the geometric distribution. - */ - - -gnm_float pgeom(gnm_float x, gnm_float p, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(p)) - return x + p; -#endif - x = floorgnum(x +1e-7); - if(p < 0 || p > 1) ML_ERR_return_NAN; - - if (x < 0. || p == 0.) return R_DT_0; - if (!finitegnum(x)) return R_DT_1; - - if(p == 1.) { /* we cannot assume IEEE */ - x = lower_tail ? 1: 0; - return log_p ? loggnum(x) : x; - } - x = log1pgnum(-p) * (x + 1); - if (log_p) - return R_DT_Clog(x); - else - return lower_tail ? -expm1gnum(x) : expgnum(x); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/dcauchy.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998 Ross Ihaka - * Copyright (C) 2000 The R Development Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * DESCRIPTION - * - * The density of the Cauchy distribution. - */ - - -gnm_float dcauchy(gnm_float x, gnm_float location, gnm_float scale, gboolean give_log) -{ - gnm_float y; -#ifdef IEEE_754 - /* NaNs propagated correctly */ - if (isnangnum(x) || isnangnum(location) || isnangnum(scale)) - return x + location + scale; -#endif - if (scale <= 0) ML_ERR_return_NAN; - - y = (x - location) / scale; - return give_log ? - - loggnum(M_PIgnum * scale * (1. + y * y)) : - 1. / (M_PIgnum * scale * (1. + y * y)); -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/bessel.h from R. */ - -/* Constants und Documentation that apply to several of the - * ./bessel_[ijky].c files */ - -/* ******************************************************************* - - Explanation of machine-dependent constants - - beta = Radix for the floating-point system - minexp = Smallest representable power of beta - maxexp = Smallest power of beta that overflows - it = p = Number of bits (base-beta digits) in the mantissa - (significand) of a working precision (floating-point) variable - NSIG = Decimal significance desired. Should be set to - INT(LOG10(2)*it+1). Setting NSIG lower will result - in decreased accuracy while setting NSIG higher will - increase CPU time without increasing accuracy. The - truncation error is limited to a relative error of - T=.5*10^(-NSIG). - ENTEN = 10 ^ K, where K is the largest long such that - ENTEN is machine-representable in working precision - ENSIG = 10 ^ NSIG - RTNSIG = 10 ^ (-K) for the smallest long K such that - K >= NSIG/4 - ENMTEN = Smallest ABS(X) such that X/4 does not underflow - XINF = Largest positive machine number; approximately beta ^ maxexp - == GNUM_MAX (defined in #include ) - SQXMIN = Square root of beta ^ minexp = sqrtgnum(GNUM_MIN) - - EPS = The smallest positive floating-point number such that 1.0+EPS > 1.0 - = beta ^ (-p) == GNUM_EPSILON - - - For I : - - EXPARG = Largest working precision argument that the library - EXP routine can handle and upper limit on the - magnitude of X when IZE=1; approximately LOG(beta ^ maxexp) - - For I and J : - - xlrg_IJ = (was = XLARGE). Upper limit on the magnitude of X (when - IZE=2 for I()). Bear in mind that if ABS(X)=N, then at least - N iterations of the backward recursion will be executed. - The value of 10 ^ 4 is used on every machine. - - For j : - XMIN_J = Smallest acceptable argument for RBESY; approximately - max(2*beta ^ minexp, 2/XINF), rounded up - - For Y : - - xlrg_Y = (was = XLARGE). Upper bound on X; - approximately 1/DEL, because the sine and cosine functions - have lost about half of their precision at that point. - - EPS_SINC = Machine number below which singnum(x)/x = 1; approximately SQRT(EPS). - THRESH = Lower bound for use of the asymptotic form; - approximately AINT(-LOG10(EPS/2.0))+1.0 - - - For K : - - xmax_k = (was = XMAX). Upper limit on the magnitude of X when ize = 1; - i.e. maximal x for UNscaled answer. - - Solution to equation: - W(X) * (1 -1/8 X + 9/128 X^2) = beta ^ minexp - where W(X) = EXP(-X)*SQRT(PI/2X) - - -------------------------------------------------------------------- - - Approximate values for some important machines are: - - beta minexp maxexp it NSIG ENTEN ENSIG RTNSIG ENMTEN EXPARG - IEEE (IBM/XT, - SUN, etc.) (S.P.) 2 -126 128 24 8 1e38 1e8 1e-2 4.70e-38 88 - IEEE (...) (D.P.) 2 -1022 1024 53 16 1e308 1e16 1e-4 8.90e-308 709 - CRAY-1 (S.P.) 2 -8193 8191 48 15 1e2465 1e15 1e-4 1.84e-2466 5677 - Cyber 180/855 - under NOS (S.P.) 2 -975 1070 48 15 1e322 1e15 1e-4 1.25e-293 741 - IBM 3033 (D.P.) 16 -65 63 14 5 1e75 1e5 1e-2 2.16e-78 174 - VAX (S.P.) 2 -128 127 24 8 1e38 1e8 1e-2 1.17e-38 88 - VAX D-Format (D.P.) 2 -128 127 56 17 1e38 1e17 1e-5 1.17e-38 88 - VAX G-Format (D.P.) 2 -1024 1023 53 16 1e307 1e16 1e-4 2.22e-308 709 - - -And routine specific : - - xlrg_IJ xlrg_Y xmax_k EPS_SINC XMIN_J XINF THRESH - IEEE (IBM/XT, - SUN, etc.) (S.P.) 1e4 1e4 85.337 1e-4 2.36e-38 3.40e38 8. - IEEE (...) (D.P.) 1e4 1e8 705.342 1e-8 4.46e-308 1.79e308 16. - CRAY-1 (S.P.) 1e4 2e7 5674.858 5e-8 3.67e-2466 5.45e2465 15. - Cyber 180/855 - under NOS (S.P.) 1e4 2e7 672.788 5e-8 6.28e-294 1.26e322 15. - IBM 3033 (D.P.) 1e4 1e8 177.852 1e-8 2.77e-76 7.23e75 17. - VAX (S.P.) 1e4 1e4 86.715 1e-4 1.18e-38 1.70e38 8. - VAX e-Format (D.P.) 1e4 1e9 86.715 1e-9 1.18e-38 1.70e38 17. - VAX G-Format (D.P.) 1e4 1e8 706.728 1e-8 2.23e-308 8.98e307 16. - -*/ -#define nsig_BESS 16 -#define ensig_BESS 1e16 -#define rtnsig_BESS 1e-4 -#define enmten_BESS 8.9e-308 -#define enten_BESS 1e308 - -#define exparg_BESS 709. -#define xlrg_BESS_IJ 1e4 -#define xlrg_BESS_Y 1e8 -#define thresh_BESS_Y 16. - -#define xmax_BESS_K 705.342/* maximal x for UNscaled answer */ - - -/* sqrtgnum(GNUM_MIN) = 1.491668e-154 */ -#define sqxmin_BESS_K 1.49e-154 - -/* x < eps_sinc <==> singnum(x)/x == 1 (particularly "==>"); - Linux (around 2001-02) gives GNM_const(2.14946906753213e-08) - Solaris 2.5.1 gives GNM_const(2.14911933289084e-08) -*/ -#define M_eps_sinc 2.149e-8 - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/bessel_i.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998-2001 Ross Ihaka and the R Development Core team. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* DESCRIPTION --> see below */ - - -/* From http://www.netlib.org/specfun/ribesl Fortran translated by f2c,... - * ------------------------------=#---- Martin Maechler, ETH Zurich - */ - -#ifndef MATHLIB_STANDALONE -#endif - -static void I_bessel(gnm_float *x, gnm_float *alpha, long *nb, - long *ize, gnm_float *bi, long *ncalc); - -gnm_float bessel_i(gnm_float x, gnm_float alpha, gnm_float expo) -{ - long nb, ncalc, ize; - gnm_float *bi; -#ifndef MATHLIB_STANDALONE - char *vmax; -#endif - -#ifdef IEEE_754 - /* NaNs propagated correctly */ - if (isnangnum(x) || isnangnum(alpha)) return x + alpha; -#endif - if (x < 0) { - ML_ERROR(ME_RANGE); - return gnm_nan; - } - ize = (long)expo; - if (alpha < 0) { - /* Using Abramowitz & Stegun 9.6.2 - * this may not be quite optimal (CPU and accuracy wise) */ - return(bessel_i(x, -alpha, expo) + - bessel_k(x, -alpha, expo) * ((ize == 1)? 2. : 2.*expgnum(-x))/M_PIgnum - * singnum(-M_PIgnum * alpha)); - } - nb = 1+ (long)floorgnum(alpha);/* nb-1 <= alpha < nb */ - alpha -= (nb-1); -#ifdef MATHLIB_STANDALONE - bi = (gnm_float *) calloc(nb, sizeof(gnm_float)); - if (!bi) MATHLIB_ERROR("%s", "bessel_i allocation error"); -#else - vmax = vmaxget(); - bi = (gnm_float *) R_alloc(nb, sizeof(gnm_float)); -#endif - I_bessel(&x, &alpha, &nb, &ize, bi, &ncalc); - if(ncalc != nb) {/* error input */ - if(ncalc < 0) - MATHLIB_WARNING4("bessel_i(%" GNUM_FORMAT_g "): ncalc (=%ld) != nb (=%ld); alpha=%" GNUM_FORMAT_g "." - " Arg. out of range?\n", - x, ncalc, nb, alpha); - else - MATHLIB_WARNING2("bessel_i(%" GNUM_FORMAT_g ",nu=%" GNUM_FORMAT_g "): precision lost in result\n", - x, alpha+nb-1); - } - x = bi[nb-1]; -#ifdef MATHLIB_STANDALONE - free(bi); -#else - vmaxset(vmax); -#endif - return x; -} - -static void I_bessel(gnm_float *x, gnm_float *alpha, long *nb, - long *ize, gnm_float *bi, long *ncalc) -{ -/* ------------------------------------------------------------------- - - This routine calculates Bessel functions I_(N+ALPHA) (X) - for non-negative argument X, and non-negative order N+ALPHA, - with or without exponential scaling. - - - Explanation of variables in the calling sequence - - X - Non-negative argument for which - I's or exponentially scaled I's (I*EXP(-X)) - are to be calculated. If I's are to be calculated, - X must be less than EXPARG_BESS (see bessel.h). - ALPHA - Fractional part of order for which - I's or exponentially scaled I's (I*EXP(-X)) are - to be calculated. 0 <= ALPHA < 1.0. - NB - Number of functions to be calculated, NB > 0. - The first function calculated is of order ALPHA, and the - last is of order (NB - 1 + ALPHA). - IZE - Type. IZE = 1 if unscaled I's are to be calculated, - = 2 if exponentially scaled I's are to be calculated. - BI - Output vector of length NB. If the routine - terminates normally (NCALC=NB), the vector BI contains the - functions I(ALPHA,X) through I(NB-1+ALPHA,X), or the - corresponding exponentially scaled functions. - NCALC - Output variable indicating possible errors. - Before using the vector BI, the user should check that - NCALC=NB, i.e., all orders have been calculated to - the desired accuracy. See error returns below. - - - ******************************************************************* - ******************************************************************* - - Error returns - - In case of an error, NCALC != NB, and not all I's are - calculated to the desired accuracy. - - NCALC < 0: An argument is out of range. For example, - NB <= 0, IZE is not 1 or 2, or IZE=1 and ABS(X) >= EXPARG_BESS. - In this case, the BI-vector is not calculated, and NCALC is - set to MIN0(NB,0)-1 so that NCALC != NB. - - NB > NCALC > 0: Not all requested function values could - be calculated accurately. This usually occurs because NB is - much larger than ABS(X). In this case, BI[N] is calculated - to the desired accuracy for N <= NCALC, but precision - is lost for NCALC < N <= NB. If BI[N] does not vanish - for N > NCALC (because it is too small to be represented), - and BI[N]/BI[NCALC] = 10**(-K), then only the first NSIG-K - significant figures of BI[N] can be trusted. - - - Intrinsic functions required are: - - DBLE, EXP, gamma_cody, INT, MAX, MIN, REAL, SQRT - - - Acknowledgement - - This program is based on a program written by David J. - Sookne (2) that computes values of the Bessel functions J or - I of float argument and long order. Modifications include - the restriction of the computation to the I Bessel function - of non-negative float argument, the extension of the computation - to arbitrary positive order, the inclusion of optional - exponential scaling, and the elimination of most underflow. - An earlier version was published in (3). - - References: "A Note on Backward Recurrence Algorithms," Olver, - F. W. J., and Sookne, D. J., Math. Comp. 26, 1972, - pp 941-947. - - "Bessel Functions of Real Argument and Integer Order," - Sookne, D. J., NBS Jour. of Res. B. 77B, 1973, pp - 125-132. - - "ALGORITHM 597, Sequence of Modified Bessel Functions - of the First Kind," Cody, W. J., Trans. Math. Soft., - 1983, pp. 242-245. - - Latest modification: May 30, 1989 - - Modified by: W. J. Cody and L. Stoltz - Applied Mathematics Division - Argonne National Laboratory - Argonne, IL 60439 -*/ - - /*------------------------------------------------------------------- - Mathematical constants - -------------------------------------------------------------------*/ - const gnm_float const__ = 1.585; - - /* Local variables */ - long nend, intx, nbmx, k, l, n, nstart; - gnm_float pold, test, p, em, en, empal, emp2al, halfx, - aa, bb, cc, psave, plast, tover, psavel, sum, nu, twonu; - - /*Parameter adjustments */ - --bi; - nu = *alpha; - twonu = nu + nu; - - /*------------------------------------------------------------------- - Check for X, NB, OR IZE out of range. - ------------------------------------------------------------------- */ - if (*nb > 0 && *x >= 0. && (0. <= nu && nu < 1.) && - (1 <= *ize && *ize <= 2) ) { - - *ncalc = *nb; - if((*ize == 1 && *x > exparg_BESS) || - (*ize == 2 && *x > xlrg_BESS_IJ)) { - ML_ERROR(ME_RANGE); - for(k=1; k <= *nb; k++) - bi[k]=gnm_pinf; - return; - } - intx = (long) (*x);/* --> we will probably fail when *x > LONG_MAX */ - if (*x >= rtnsig_BESS) { /* "non-small" x */ -/* ------------------------------------------------------------------- - Initialize the forward sweep, the P-sequence of Olver - ------------------------------------------------------------------- */ - nbmx = *nb - intx; - n = intx + 1; - en = (gnm_float) (n + n) + twonu; - plast = 1.; - p = en / *x; - /* ------------------------------------------------ - Calculate general significance test - ------------------------------------------------ */ - test = ensig_BESS + ensig_BESS; - if (intx << 1 > nsig_BESS * 5) { - test = sqrtgnum(test * p); - } else { - test /= powgnum(const__, (gnm_float)intx); - } - if (nbmx >= 3) { - /* -------------------------------------------------- - Calculate P-sequence until N = NB-1 - Check for possible overflow. - ------------------------------------------------ */ - tover = enten_BESS / ensig_BESS; - nstart = intx + 2; - nend = *nb - 1; - for (k = nstart; k <= nend; ++k) { - n = k; - en += 2.; - pold = plast; - plast = p; - p = en * plast / *x + pold; - if (p > tover) { - /* ------------------------------------------------ - To avoid overflow, divide P-sequence by TOVER. - Calculate P-sequence until ABS(P) > 1. - ---------------------------------------------- */ - tover = enten_BESS; - p /= tover; - plast /= tover; - psave = p; - psavel = plast; - nstart = n + 1; - do { - ++n; - en += 2.; - pold = plast; - plast = p; - p = en * plast / *x + pold; - } - while (p <= 1.); - - bb = en / *x; - /* ------------------------------------------------ - Calculate backward test, and find NCALC, - the highest N such that the test is passed. - ------------------------------------------------ */ - test = pold * plast / ensig_BESS; - test *= .5 - .5 / (bb * bb); - p = plast * tover; - --n; - en -= 2.; - nend = imin2(*nb,n); - for (l = nstart; l <= nend; ++l) { - *ncalc = l; - pold = psavel; - psavel = psave; - psave = en * psavel / *x + pold; - if (psave * psavel > test) { - goto L90; - } - } - *ncalc = nend + 1; -L90: - --(*ncalc); - goto L120; - } - } - n = nend; - en = (gnm_float)(n + n) + twonu; - /*--------------------------------------------------- - Calculate special significance test for NBMX > 2. - --------------------------------------------------- */ - test = fmax2(test,sqrtgnum(plast * ensig_BESS) * sqrtgnum(p + p)); - } - /* -------------------------------------------------------- - Calculate P-sequence until significance test passed. - -------------------------------------------------------- */ - do { - ++n; - en += 2.; - pold = plast; - plast = p; - p = en * plast / *x + pold; - } while (p < test); - -L120: -/* ------------------------------------------------------------------- - Initialize the backward recursion and the normalization sum. - ------------------------------------------------------------------- */ - ++n; - en += 2.; - bb = 0.; - aa = 1. / p; - em = (gnm_float) n - 1.; - empal = em + nu; - emp2al = em - 1. + twonu; - sum = aa * empal * emp2al / em; - nend = n - *nb; - if (nend < 0) { - /* ----------------------------------------------------- - N < NB, so store BI[N] and set higher orders to 0.. - ----------------------------------------------------- */ - bi[n] = aa; - nend = -nend; - for (l = 1; l <= nend; ++l) { - bi[n + l] = 0.; - } - } else { - if (nend > 0) { - /* ----------------------------------------------------- - Recur backward via difference equation, - calculating (but not storing) BI[N], until N = NB. - --------------------------------------------------- */ - for (l = 1; l <= nend; ++l) { - --n; - en -= 2.; - cc = bb; - bb = aa; - aa = en * bb / *x + cc; - em -= 1.; - emp2al -= 1.; - if (n == 1) { - break; - } - if (n == 2) { - emp2al = 1.; - } - empal -= 1.; - sum = (sum + aa * empal) * emp2al / em; - } - } - /* --------------------------------------------------- - Store BI[NB] - --------------------------------------------------- */ - bi[n] = aa; - if (*nb <= 1) { - sum = sum + sum + aa; - goto L230; - } - /* ------------------------------------------------- - Calculate and Store BI[NB-1] - ------------------------------------------------- */ - --n; - en -= 2.; - bi[n] = en * aa / *x + bb; - if (n == 1) { - goto L220; - } - em -= 1.; - if (n == 2) - emp2al = 1.; - else - emp2al -= 1.; - - empal -= 1.; - sum = (sum + bi[n] * empal) * emp2al / em; - } - nend = n - 2; - if (nend > 0) { - /* -------------------------------------------- - Calculate via difference equation - and store BI[N], until N = 2. - ------------------------------------------ */ - for (l = 1; l <= nend; ++l) { - --n; - en -= 2.; - bi[n] = en * bi[n + 1] / *x + bi[n + 2]; - em -= 1.; - if (n == 2) - emp2al = 1.; - else - emp2al -= 1.; - empal -= 1.; - sum = (sum + bi[n] * empal) * emp2al / em; - } - } - /* ---------------------------------------------- - Calculate BI[1] - -------------------------------------------- */ - bi[1] = 2. * empal * bi[2] / *x + bi[3]; -L220: - sum = sum + sum + bi[1]; - -L230: - /* --------------------------------------------------------- - Normalize. Divide all BI[N] by sum. - --------------------------------------------------------- */ - if (nu != 0.) - sum *= (expgnum(lgamma1p (nu)) * powgnum(*x * .5, -nu)); - if (*ize == 1) - sum *= expgnum(-(*x)); - aa = enmten_BESS; - if (sum > 1.) - aa *= sum; - for (n = 1; n <= *nb; ++n) { - if (bi[n] < aa) - bi[n] = 0.; - else - bi[n] /= sum; - } - return; - } else { - /* ----------------------------------------------------------- - Two-term ascending series for small X. - -----------------------------------------------------------*/ - aa = 1.; - empal = 1. + nu; - if (*x > enmten_BESS) - halfx = .5 * *x; - else - halfx = 0.; - if (nu != 0.) - aa = powgnum(halfx, nu) / expgnum(lgamma1p(nu)); - if (*ize == 2) - aa *= expgnum(-(*x)); - if (*x + 1. > 1.) - bb = halfx * halfx; - else - bb = 0.; - - bi[1] = aa + aa * bb / empal; - if (*x != 0. && bi[1] == 0.) - *ncalc = 0; - if (*nb > 1) { - if (*x == 0.) { - for (n = 2; n <= *nb; ++n) { - bi[n] = 0.; - } - } else { - /* ------------------------------------------------- - Calculate higher-order functions. - ------------------------------------------------- */ - cc = halfx; - tover = (enmten_BESS + enmten_BESS) / *x; - if (bb != 0.) - tover = enmten_BESS / bb; - for (n = 2; n <= *nb; ++n) { - aa /= empal; - empal += 1.; - aa *= cc; - if (aa <= tover * empal) - bi[n] = aa = 0.; - else - bi[n] = aa + aa * bb / empal; - if (bi[n] == 0. && *ncalc > n) - *ncalc = n - 1; - } - } - } - } - } else { - *ncalc = imin2(*nb,0) - 1; - } -} - -/* ------------------------------------------------------------------------ */ -/* Imported src/nmath/bessel_k.c from R. */ -/* - * Mathlib : A C Library of Special Functions - * Copyright (C) 1998-2001 Ross Ihaka and the R Development Core team. - * Copyright (C) 2002-3 The R Foundation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* DESCRIPTION --> see below */ - - -/* From http://www.netlib.org/specfun/rkbesl Fortran translated by f2c,... - * ------------------------------=#---- Martin Maechler, ETH Zurich - */ - -#ifndef MATHLIB_STANDALONE -#endif - -static void K_bessel(gnm_float *x, gnm_float *alpha, long *nb, - long *ize, gnm_float *bk, long *ncalc); - -gnm_float bessel_k(gnm_float x, gnm_float alpha, gnm_float expo) -{ - long nb, ncalc, ize; - gnm_float *bk; -#ifndef MATHLIB_STANDALONE - char *vmax; -#endif - -#ifdef IEEE_754 - /* NaNs propagated correctly */ - if (isnangnum(x) || isnangnum(alpha)) return x + alpha; -#endif - if (x < 0) { - ML_ERROR(ME_RANGE); - return gnm_nan; - } - ize = (long)expo; - if(alpha < 0) - alpha = -alpha; - nb = 1+ (long)floorgnum(alpha);/* nb-1 <= |alpha| < nb */ - alpha -= (nb-1); -#ifdef MATHLIB_STANDALONE - bk = (gnm_float *) calloc(nb, sizeof(gnm_float)); - if (!bk) MATHLIB_ERROR("%s", "bessel_k allocation error"); -#else - vmax = vmaxget(); - bk = (gnm_float *) R_alloc(nb, sizeof(gnm_float)); -#endif - K_bessel(&x, &alpha, &nb, &ize, bk, &ncalc); - if(ncalc != nb) {/* error input */ - if(ncalc < 0) - MATHLIB_WARNING4("bessel_k(%" GNUM_FORMAT_g "): ncalc (=%ld) != nb (=%ld); alpha=%" GNUM_FORMAT_g ". Arg. out of range?\n", - x, ncalc, nb, alpha); - else - MATHLIB_WARNING2("bessel_k(%" GNUM_FORMAT_g ",nu=%" GNUM_FORMAT_g "): precision lost in result\n", - x, alpha+nb-1); - } - x = bk[nb-1]; -#ifdef MATHLIB_STANDALONE - free(bk); -#else - vmaxset(vmax); -#endif - return x; -} - -static void K_bessel(gnm_float *x, gnm_float *alpha, long *nb, - long *ize, gnm_float *bk, long *ncalc) -{ -/*------------------------------------------------------------------- - - This routine calculates modified Bessel functions - of the third kind, K_(N+ALPHA) (X), for non-negative - argument X, and non-negative order N+ALPHA, with or without - exponential scaling. - - Explanation of variables in the calling sequence - - X - Non-negative argument for which - K's or exponentially scaled K's (K*EXP(X)) - are to be calculated. If K's are to be calculated, - X must not be greater than XMAX_BESS_K. - ALPHA - Fractional part of order for which - K's or exponentially scaled K's (K*EXP(X)) are - to be calculated. 0 <= ALPHA < 1.0. - NB - Number of functions to be calculated, NB > 0. - The first function calculated is of order ALPHA, and the - last is of order (NB - 1 + ALPHA). - IZE - Type. IZE = 1 if unscaled K's are to be calculated, - = 2 if exponentially scaled K's are to be calculated. - BK - Output vector of length NB. If the - routine terminates normally (NCALC=NB), the vector BK - contains the functions K(ALPHA,X), ... , K(NB-1+ALPHA,X), - or the corresponding exponentially scaled functions. - If (0 < NCALC < NB), BK(I) contains correct function - values for I <= NCALC, and contains the ratios - K(ALPHA+I-1,X)/K(ALPHA+I-2,X) for the rest of the array. - NCALC - Output variable indicating possible errors. - Before using the vector BK, the user should check that - NCALC=NB, i.e., all orders have been calculated to - the desired accuracy. See error returns below. - - - ******************************************************************* - - Error returns - - In case of an error, NCALC != NB, and not all K's are - calculated to the desired accuracy. - - NCALC < -1: An argument is out of range. For example, - NB <= 0, IZE is not 1 or 2, or IZE=1 and ABS(X) >= XMAX_BESS_K. - In this case, the B-vector is not calculated, - and NCALC is set to MIN0(NB,0)-2 so that NCALC != NB. - NCALC = -1: Either K(ALPHA,X) >= XINF or - K(ALPHA+NB-1,X)/K(ALPHA+NB-2,X) >= XINF. In this case, - the B-vector is not calculated. Note that again - NCALC != NB. - - 0 < NCALC < NB: Not all requested function values could - be calculated accurately. BK(I) contains correct function - values for I <= NCALC, and contains the ratios - K(ALPHA+I-1,X)/K(ALPHA+I-2,X) for the rest of the array. - - - Intrinsic functions required are: - - ABS, AINT, EXP, INT, LOG, MAX, MIN, SINH, SQRT - - - Acknowledgement - - This program is based on a program written by J. B. Campbell - (2) that computes values of the Bessel functions K of float - argument and float order. Modifications include the addition - of non-scaled functions, parameterization of machine - dependencies, and the use of more accurate approximations - for SINH and SIN. - - References: "On Temme's Algorithm for the Modified Bessel - Functions of the Third Kind," Campbell, J. B., - TOMS 6(4), Dec. 1980, pp. 581-586. - - "A FORTRAN IV Subroutine for the Modified Bessel - Functions of the Third Kind of Real Order and Real - Argument," Campbell, J. B., Report NRC/ERB-925, - National Research Council, Canada. - - Latest modification: May 30, 1989 - - Modified by: W. J. Cody and L. Stoltz - Applied Mathematics Division - Argonne National Laboratory - Argonne, IL 60439 - - ------------------------------------------------------------------- -*/ - /*--------------------------------------------------------------------- - * Mathematical constants - * A = LOG(2) - Euler's constant - * D = SQRT(2/PI) - ---------------------------------------------------------------------*/ - const gnm_float a = GNM_const(.11593151565841244881); - - /*--------------------------------------------------------------------- - P, Q - Approximation for LOG(GAMMA(1+ALPHA))/ALPHA + Euler's constant - Coefficients converted from hex to decimal and modified - by W. J. Cody, 2/26/82 */ - static const gnm_float p[8] = { GNM_const(.805629875690432845),GNM_const(20.4045500205365151), - GNM_const(157.705605106676174),GNM_const(536.671116469207504),GNM_const(900.382759291288778), - GNM_const(730.923886650660393),GNM_const(229.299301509425145),GNM_const(.822467033424113231) }; - static const gnm_float q[7] = { GNM_const(29.4601986247850434),GNM_const(277.577868510221208), - GNM_const(1206.70325591027438),GNM_const(2762.91444159791519),GNM_const(3443.74050506564618), - GNM_const(2210.63190113378647),GNM_const(572.267338359892221) }; - /* R, S - Approximation for (1-ALPHA*PI/SIN(ALPHA*PI))/(2.D0*ALPHA) */ - static const gnm_float r[5] = { GNM_const(-.48672575865218401848),GNM_const(13.079485869097804016), - GNM_const(-101.96490580880537526),GNM_const(347.65409106507813131), - GNM_const(3.495898124521934782e-4) }; - static const gnm_float s[4] = { GNM_const(-25.579105509976461286),GNM_const(212.57260432226544008), - GNM_const(-610.69018684944109624),GNM_const(422.69668805777760407) }; - /* T - Approximation for SINH(Y)/Y */ - static const gnm_float t[6] = { GNM_const(1.6125990452916363814e-10), - GNM_const(2.5051878502858255354e-8),GNM_const(2.7557319615147964774e-6), - GNM_const(1.9841269840928373686e-4),GNM_const(.0083333333333334751799), - GNM_const(.16666666666666666446) }; - /*---------------------------------------------------------------------*/ - static const gnm_float estm[6] = { 52.0583,5.7607,2.7782,14.4303,185.3004, 9.3715 }; - static const gnm_float estf[7] = { 41.8341,7.1075,6.4306,42.511,1.35633,84.5096,20.}; - - /* Local variables */ - long iend, i, j, k, m, ii, mplus1; - gnm_float x2by4, twox, c, blpha, ratio, wminf; - gnm_float d1, d2, d3, f0, f1, f2, p0, q0, t1, t2, twonu; - gnm_float dm, ex, bk1, bk2, nu; - - ii = 0; /* -Wall */ - - ex = *x; - nu = *alpha; - *ncalc = imin2(*nb,0) - 2; - if (*nb > 0 && (0. <= nu && nu < 1.) && (1 <= *ize && *ize <= 2)) { - if(ex <= 0 || (*ize == 1 && ex > xmax_BESS_K)) { - if(ex <= 0) { - ML_ERROR(ME_RANGE); - for(i=0; i < *nb; i++) - bk[i] = gnm_pinf; - } else /* would only have underflow */ - for(i=0; i < *nb; i++) - bk[i] = 0.; - *ncalc = *nb; - return; - } - k = 0; - if (nu < sqxmin_BESS_K) { - nu = 0.; - } else if (nu > .5) { - k = 1; - nu -= 1.; - } - twonu = nu + nu; - iend = *nb + k - 1; - c = nu * nu; - d3 = -c; - if (ex <= 1.) { - /* ------------------------------------------------------------ - Calculation of P0 = GAMMA(1+ALPHA) * (2/X)**ALPHA - Q0 = GAMMA(1-ALPHA) * (X/2)**ALPHA - ------------------------------------------------------------ */ - d1 = 0.; d2 = p[0]; - t1 = 1.; t2 = q[0]; - for (i = 2; i <= 7; i += 2) { - d1 = c * d1 + p[i - 1]; - d2 = c * d2 + p[i]; - t1 = c * t1 + q[i - 1]; - t2 = c * t2 + q[i]; - } - d1 = nu * d1; - t1 = nu * t1; - f1 = loggnum(ex); - f0 = a + nu * (p[7] - nu * (d1 + d2) / (t1 + t2)) - f1; - q0 = expgnum(-nu * (a - nu * (p[7] + nu * (d1-d2) / (t1-t2)) - f1)); - f1 = nu * f0; - p0 = expgnum(f1); - /* ----------------------------------------------------------- - Calculation of F0 = - ----------------------------------------------------------- */ - d1 = r[4]; - t1 = 1.; - for (i = 0; i < 4; ++i) { - d1 = c * d1 + r[i]; - t1 = c * t1 + s[i]; - } - /* d2 := sinhgnum(f1)/ nu = sinhgnum(f1)/(f1/f0) - * = f0 * sinhgnum(f1)/f1 */ - if (gnumabs(f1) <= .5) { - f1 *= f1; - d2 = 0.; - for (i = 0; i < 6; ++i) { - d2 = f1 * d2 + t[i]; - } - d2 = f0 + f0 * f1 * d2; - } else { - d2 = sinhgnum(f1) / nu; - } - f0 = d2 - nu * d1 / (t1 * p0); - if (ex <= 1e-10) { - /* --------------------------------------------------------- - X <= 1.0E-10 - Calculation of K(ALPHA,X) and X*K(ALPHA+1,X)/K(ALPHA,X) - --------------------------------------------------------- */ - bk[0] = f0 + ex * f0; - if (*ize == 1) { - bk[0] -= ex * bk[0]; - } - ratio = p0 / f0; - c = ex * GNUM_MAX; - if (k != 0) { - /* --------------------------------------------------- - Calculation of K(ALPHA,X) - and X*K(ALPHA+1,X)/K(ALPHA,X), ALPHA >= 1/2 - --------------------------------------------------- */ - *ncalc = -1; - if (bk[0] >= c / ratio) { - return; - } - bk[0] = ratio * bk[0] / ex; - twonu += 2.; - ratio = twonu; - } - *ncalc = 1; - if (*nb == 1) - return; - - /* ----------------------------------------------------- - Calculate K(ALPHA+L,X)/K(ALPHA+L-1,X), - L = 1, 2, ... , NB-1 - ----------------------------------------------------- */ - *ncalc = -1; - for (i = 1; i < *nb; ++i) { - if (ratio >= c) - return; - - bk[i] = ratio / ex; - twonu += 2.; - ratio = twonu; - } - *ncalc = 1; - goto L420; - } else { - /* ------------------------------------------------------ - 10^-10 < X <= 1.0 - ------------------------------------------------------ */ - c = 1.; - x2by4 = ex * ex / 4.; - p0 = .5 * p0; - q0 = .5 * q0; - d1 = -1.; - d2 = 0.; - bk1 = 0.; - bk2 = 0.; - f1 = f0; - f2 = p0; - do { - d1 += 2.; - d2 += 1.; - d3 = d1 + d3; - c = x2by4 * c / d2; - f0 = (d2 * f0 + p0 + q0) / d3; - p0 /= d2 - nu; - q0 /= d2 + nu; - t1 = c * f0; - t2 = c * (p0 - d2 * f0); - bk1 += t1; - bk2 += t2; - } while (gnumabs(t1 / (f1 + bk1)) > GNUM_EPSILON || - gnumabs(t2 / (f2 + bk2)) > GNUM_EPSILON); - bk1 = f1 + bk1; - bk2 = 2. * (f2 + bk2) / ex; - if (*ize == 2) { - d1 = expgnum(ex); - bk1 *= d1; - bk2 *= d1; - } - wminf = estf[0] * ex + estf[1]; - } - } else if (GNUM_EPSILON * ex > 1.) { - /* ------------------------------------------------- - X > 1./EPS - ------------------------------------------------- */ - *ncalc = *nb; - bk1 = 1. / (M_SQRT_2dPI * sqrtgnum(ex)); - for (i = 0; i < *nb; ++i) - bk[i] = bk1; - return; - - } else { - /* ------------------------------------------------------- - X > 1.0 - ------------------------------------------------------- */ - twox = ex + ex; - blpha = 0.; - ratio = 0.; - if (ex <= 4.) { - /* ---------------------------------------------------------- - Calculation of K(ALPHA+1,X)/K(ALPHA,X), 1.0 <= X <= 4.0 - ----------------------------------------------------------*/ - d2 = gnm_trunc(estm[0] / ex + estm[1]); - m = (long) d2; - d1 = d2 + d2; - d2 -= .5; - d2 *= d2; - for (i = 2; i <= m; ++i) { - d1 -= 2.; - d2 -= d1; - ratio = (d3 + d2) / (twox + d1 - ratio); - } - /* ----------------------------------------------------------- - Calculation of I(|ALPHA|,X) and I(|ALPHA|+1,X) by backward - recurrence and K(ALPHA,X) from the wronskian - -----------------------------------------------------------*/ - d2 = gnm_trunc(estm[2] * ex + estm[3]); - m = (long) d2; - c = gnumabs(nu); - d3 = c + c; - d1 = d3 - 1.; - f1 = GNUM_MIN; - f0 = (2. * (c + d2) / ex + .5 * ex / (c + d2 + 1.)) * GNUM_MIN; - for (i = 3; i <= m; ++i) { - d2 -= 1.; - f2 = (d3 + d2 + d2) * f0; - blpha = (1. + d1 / d2) * (f2 + blpha); - f2 = f2 / ex + f1; - f1 = f0; - f0 = f2; - } - f1 = (d3 + 2.) * f0 / ex + f1; - d1 = 0.; - t1 = 1.; - for (i = 1; i <= 7; ++i) { - d1 = c * d1 + p[i - 1]; - t1 = c * t1 + q[i - 1]; - } - p0 = expgnum(c * (a + c * (p[7] - c * d1 / t1) - loggnum(ex))) / ex; - f2 = (c + .5 - ratio) * f1 / ex; - bk1 = p0 + (d3 * f0 - f2 + f0 + blpha) / (f2 + f1 + f0) * p0; - if (*ize == 1) { - bk1 *= expgnum(-ex); - } - wminf = estf[2] * ex + estf[3]; - } else { - /* --------------------------------------------------------- - Calculation of K(ALPHA,X) and K(ALPHA+1,X)/K(ALPHA,X), by - backward recurrence, for X > 4.0 - ----------------------------------------------------------*/ - dm = gnm_trunc(estm[4] / ex + estm[5]); - m = (long) dm; - d2 = dm - .5; - d2 *= d2; - d1 = dm + dm; - for (i = 2; i <= m; ++i) { - dm -= 1.; - d1 -= 2.; - d2 -= d1; - ratio = (d3 + d2) / (twox + d1 - ratio); - blpha = (ratio + ratio * blpha) / dm; - } - bk1 = 1. / ((M_SQRT_2dPI + M_SQRT_2dPI * blpha) * sqrtgnum(ex)); - if (*ize == 1) - bk1 *= expgnum(-ex); - wminf = estf[4] * (ex - gnumabs(ex - estf[6])) + estf[5]; - } - /* --------------------------------------------------------- - Calculation of K(ALPHA+1,X) - from K(ALPHA,X) and K(ALPHA+1,X)/K(ALPHA,X) - --------------------------------------------------------- */ - bk2 = bk1 + bk1 * (nu + .5 - ratio) / ex; - } - /*-------------------------------------------------------------------- - Calculation of 'NCALC', K(ALPHA+I,X), I = 0, 1, ... , NCALC-1, - & K(ALPHA+I,X)/K(ALPHA+I-1,X), I = NCALC, NCALC+1, ... , NB-1 - -------------------------------------------------------------------*/ - *ncalc = *nb; - bk[0] = bk1; - if (iend == 0) - return; - - j = 1 - k; - if (j >= 0) - bk[j] = bk2; - - if (iend == 1) - return; - - m = imin2((long) (wminf - nu),iend); - for (i = 2; i <= m; ++i) { - t1 = bk1; - bk1 = bk2; - twonu += 2.; - if (ex < 1.) { - if (bk1 >= GNUM_MAX / twonu * ex) - break; - } else { - if (bk1 / ex >= GNUM_MAX / twonu) - break; - } - bk2 = twonu / ex * bk1 + t1; - ii = i; - ++j; - if (j >= 0) { - bk[j] = bk2; - } - } - - m = ii; - if (m == iend) { - return; - } - ratio = bk2 / bk1; - mplus1 = m + 1; - *ncalc = -1; - for (i = mplus1; i <= iend; ++i) { - twonu += 2.; - ratio = twonu / ex + 1./ratio; - ++j; - if (j >= 1) { - bk[j] = ratio; - } else { - if (bk2 >= GNUM_MAX / ratio) - return; - - bk2 *= ratio; - } - } - *ncalc = imax2(1, mplus1 - k); - if (*ncalc == 1) - bk[0] = bk2; - if (*nb == 1) - return; - -L420: - for (i = *ncalc; i < *nb; ++i) { /* i == *ncalc */ -#ifndef IEEE_754 - if (bk[i-1] >= GNUM_MAX / bk[i]) - return; -#endif - bk[i] *= bk[i-1]; - (*ncalc)++; - } - } -} - -/* ------------------------------------------------------------------------ */ -/* --- END MAGIC R SOURCE MARKER --- */ - - -/* --- BEGIN IANDJMSMITH SOURCE MARKER --- */ - -/* Continued fraction for calculation of - * 1/i + x/(i+d) + x*x/(i+2*d) + x*x*x/(i+3*d) + ... - */ -static gnm_float -logcf (gnm_float x, gnm_float i, gnm_float d) -{ - gnm_float c1 = 2 * d; - gnm_float c2 = i + d; - gnm_float c4 = c2 + d; - gnm_float a1 = c2; - gnm_float b1 = i * (c2 - i * x); - gnm_float b2 = d * d * x; - gnm_float a2 = c4 * c2 - b2; - const gnm_float cfVSmall = 1.0e-14; - -#if 0 - assert (i > 0); - assert (d >= 0); -#endif - - b2 = c4 * b1 - i * b2; - - while (gnumabs (a2 * b1 - a1 * b2) > gnumabs (cfVSmall * b1 * b2)) { - gnm_float c3 = c2*c2*x; - c2 += d; - c4 += d; - a1 = c4 * a2 - c3 * a1; - b1 = c4 * b2 - c3 * b1; - - c3 = c1 * c1 * x; - c1 += d; - c4 += d; - a2 = c4 * a1 - c3 * a2; - b2 = c4 * b1 - c3 * b2; - - if (gnumabs (b2) > scalefactor) { - a1 *= 1 / scalefactor; - b1 *= 1 / scalefactor; - a2 *= 1 / scalefactor; - b2 *= 1 / scalefactor; - } else if (gnumabs (b2) < 1 / scalefactor) { - a1 *= scalefactor; - b1 *= scalefactor; - a2 *= scalefactor; - b2 *= scalefactor; - } - } - - return a2 / b2; -} - - -/* Accurate calculation of log(1+x)-x, particularly for small x. */ -gnm_float -log1pmx (gnm_float x) -{ - static const gnm_float minLog1Value = -0.79149064; - static const gnm_float two = 2; - - if (gnumabs (x) < 1.0e-2) { - gnm_float term = x / (2 + x); - gnm_float y = term * term; - return term * ((((two / 9 * y + two / 7) * y + two / 5) * y + two / 3) * y - x); - } else if (x < minLog1Value || x > 1) { - return log1pgnum (x) - x; - } else { - gnm_float term = x / (2 + x); - gnm_float y = term * term; - return term * (2 * y * logcf (y, 3, 2) - x); - } -} - -/* Accurate loggnum (1 - expgnum (p)) for p <= 0. */ -gnm_float -swap_log_tail (gnm_float lp) -{ - if (lp > -1 / loggnum (2)) - return loggnum (-expm1gnum (lp)); /* Good formula for lp near zero. */ - else - return log1pgnum (-expgnum (lp)); /* Good formula for small lp. */ -} - - -/* Calculation of logfbit(x)-logfbit(1+x). y2 must be < 1. */ -static gnm_float -logfbitdif (gnm_float x) -{ - gnm_float y = 1 / (2 * x + 3); - gnm_float y2 = y * y; - return y2 * logcf (y2, 3, 2); -} - -/* - * lfbc{1-7} from this Mathematica program: - * - * Table[Numerator[BernoulliB[2n]/(2n(2n - 1))], {n, 1, 22}] - * Table[Denominator[BernoulliB[2n]/(2n(2n - 1))], {n, 1, 22}] - */ -static const gnm_float lfbc1 = GNM_const (1.0) / 12; -static const gnm_float lfbc2 = GNM_const (1.0) / 30; -static const gnm_float lfbc3 = GNM_const (1.0) / 105; -static const gnm_float lfbc4 = GNM_const (1.0) / 140; -static const gnm_float lfbc5 = GNM_const (1.0) / 99; -static const gnm_float lfbc6 = GNM_const (691.0) / 30030; -static const gnm_float lfbc7 = GNM_const (1.0) / 13; -/* lfbc{8,9} to make logfbit(6) and logfbit(7) exact. */ -static const gnm_float lfbc8 = GNM_const (3.5068606896459316479e-01); -static const gnm_float lfbc9 = GNM_const (1.6769998201671114808); - -/* This is also stirlerr(x+1). */ -gnm_float -logfbit (gnm_float x) -{ - /* - * Error part of Stirling's formula where - * log(x!) = log(sqrt(twopi))+(x+0.5)*log(x+1)-(x+1)+logfbit(x). - * - * Are we ever concerned about the relative error involved in this - * function? I don't think so. - */ - if (x >= 1e10) return 1 / (12 * (x + 1)); - else if (x >= 6) { - gnm_float x1 = x + 1; - gnm_float x2 = 1 / (x1 * x1); - gnm_float x3 = - x2 * (lfbc2 - x2 * - (lfbc3 - x2 * - (lfbc4 - x2 * - (lfbc5 - x2 * - (lfbc6 - x2 * - (lfbc7 - x2 * - (lfbc8 - x2 * - lfbc9))))))); - return lfbc1 * (1 - x3) / x1; - } - else if (x == 5) return GNM_const (0.13876128823070747998745727023762908562e-1); - else if (x == 4) return GNM_const (0.16644691189821192163194865373593391145e-1); - else if (x == 3) return GNM_const (0.20790672103765093111522771767848656333e-1); - else if (x == 2) return GNM_const (0.27677925684998339148789292746244666596e-1); - else if (x == 1) return GNM_const (0.41340695955409294093822081407117508025e-1); - else if (x == 0) return GNM_const (0.81061466795327258219670263594382360138e-1); - else if (x > -1) { - gnm_float x1 = x; - gnm_float x2 = 0; - while (x1 < 6) { - x2 += logfbitdif (x1); - x1++; - } - return x2 + logfbit (x1); - } - else return gnm_pinf; -} - -/* Calculation of logfbit1(x)-logfbit1(1+x). */ -static gnm_float -logfbit1dif (gnm_float x) -{ - return (logfbitdif (x) - 1 / (4 * (x + 1) * (x + 2))) / (x + 1.5); -} - -/* Derivative logfbit. */ -static gnm_float -logfbit1 (gnm_float x) -{ - if (x >= 1e10) return -lfbc1 * powgnum (x + 1, -2); - else if (x >= 6) { - gnm_float x1 = x + 1; - gnm_float x2 = 1 / (x1 * x1); - gnm_float x3 = - x2 * (3 * lfbc2 - x2* - (5 * lfbc3 - x2 * - (7 * lfbc4 - x2 * - (9 * lfbc5 - x2 * - (11 * lfbc6 - x2 * - (13 * lfbc7 - x2 * - (15 * lfbc8 - x2 * - 17 * lfbc9))))))); - return -lfbc1 * (1 - x3) * x2; - } - else if (x > -1) { - gnm_float x1 = x; - gnm_float x2 = 0; - while (x1 < 6) { - x2 += logfbit1dif (x1); - x1++; - } - return x2 + logfbit1 (x1); - } - else return gnm_ninf; -} - - -/* Calculation of logfbit3(x)-logfbit3(1+x). */ -static gnm_float -logfbit3dif (gnm_float x) -{ - return -(2 * x + 3) * powgnum ((x + 1) * (x + 2), -3); -} - - -/* Third derivative logfbit. */ -static gnm_float -logfbit3 (gnm_float x) -{ - if (x >= 1e10) return -0.5 * powgnum (x + 1, -4); - else if (x >= 6) { - gnm_float x1 = x + 1; - gnm_float x2 = 1 / (x1 * x1); - gnm_float x3 = - x2 * (60 * lfbc2 - x2 * - (210 * lfbc3 - x2 * - (504 * lfbc4 - x2 * - (990 * lfbc5 - x2 * - (1716 * lfbc6 - x2 * - (2730 * lfbc7 - x2 * - (4080 * lfbc8 - x2 * - 5814 * lfbc9))))))); - return -lfbc1 * (6 - x3) * x2 * x2; - } - else if (x > -1) { - gnm_float x1 = x; - gnm_float x2 = 0; - while (x1 < 6) { - x2 += logfbit3dif (x1); - x1++; - } - return x2 + logfbit3 (x1); - } - else return gnm_ninf; -} - -/* Calculation of logfbit5(x)-logfbit5(1+x). */ -static gnm_float -logfbit5dif (gnm_float x) -{ - return -6 * (2 * x + 3) * ((5 * x + 15) * x + 12) * - powgnum ((x + 1) * (x + 2), -5); -} - -/* Fifth derivative logfbit. */ -static gnm_float -logfbit5 (gnm_float x) -{ - if (x >= 1e10) return -10 * powgnum (x + 1, -6); - else if (x >= 6) { - gnm_float x1 = x + 1; - gnm_float x2 = 1 / (x1 * x1); - gnm_float x3 = - x2 * (2520 * lfbc2 - x2 * - (15120 * lfbc3 - x2 * - (55440 * lfbc4 - x2 * - (154440 * lfbc5 - x2 * - (360360 * lfbc6 - x2 * - (742560 * lfbc7 - x2 * - (1395360 * lfbc8 - x2 * - 2441880 * lfbc9))))))); - return -lfbc1 * (120 - x3) * x2 * x2 * x2; - } else if (x > -1) { - gnm_float x1 = x; - gnm_float x2 = 0; - while (x1 < 6) { - x2 += logfbit5dif (x1); - x1++; - } - return x2 + logfbit5 (x1); - } - else return gnm_ninf; -} - -/* Calculation of logfbit7(x)-logfbit7(1+x). */ -static gnm_float -logfbit7dif (gnm_float x) -{ - return -120 * - (2 * x + 3) * - ((((14 * x + 84) * x + 196) * x + 210) * x + 87) * - powgnum ((x + 1) * (x + 2), -7); -} - -/* Seventh derivative logfbit. */ -static gnm_float -logfbit7 (gnm_float x) -{ - if (x >= 1e10) return -420 * powgnum (x + 1, -8); - else if (x >= 6) { - gnm_float x1 = x + 1; - gnm_float x2 = 1 / (x1 * x1); - gnm_float x3 = - x2 * (181440 * lfbc2 - x2 * - (1663200 * lfbc3 - x2 * - (8648640 * lfbc4 - x2 * - (32432400 * lfbc5 - x2 * - (98017920 * lfbc6 - x2 * - (253955520 * lfbc7 - x2 * - (586051200 * lfbc8 - x2 * - 1235591280 * lfbc9))))))); - return -lfbc1 * (5040 - x3) * x2 * x2 * x2 * x2; - } else if (x > -1) { - gnm_float x1 = x; - gnm_float x2 = 0; - while (x1 < 6) { - x2 += logfbit7dif (x1); - x1++; - } - return x2 + logfbit7 (x1); - } - else return gnm_ninf; -} - - -static gnm_float -lfbaccdif (gnm_float a, gnm_float b) -{ - if (a > 0.03 * (a + b)) - return logfbit (a + b) - logfbit (b); - else { - gnm_float a2 = a * a; - gnm_float ab2 = a / 2 + b; - return a * (logfbit1 (ab2) + a2 / 24 * - (logfbit3 (ab2) + a2 / 80 * - (logfbit5 (ab2) + a2 / 168 * - logfbit7 (ab2)))); - } -} - -/* Calculates log(gamma(a+1) accurately for for small a (0 < a & a < 0.5). */ -gnm_float -lgamma1p (gnm_float a) -{ - static const gnm_float eulers_const = GNM_const (0.57721566490153286060651209008240243104215933593992); - - /* coeffs[i] holds (zeta(i+2)-1)/(i+2) */ - static const gnm_float coeffs[40] = { - GNM_const (0.3224670334241132182362075833230126e-0), - GNM_const (0.6735230105319809513324605383715000e-1), - GNM_const (0.2058080842778454787900092413529198e-1), - GNM_const (0.7385551028673985266273097291406834e-2), - GNM_const (0.2890510330741523285752988298486755e-2), - GNM_const (0.1192753911703260977113935692828109e-2), - GNM_const (0.5096695247430424223356548135815582e-3), - GNM_const (0.2231547584535793797614188036013401e-3), - GNM_const (0.9945751278180853371459589003190170e-4), - GNM_const (0.4492623673813314170020750240635786e-4), - GNM_const (0.2050721277567069155316650397830591e-4), - GNM_const (0.9439488275268395903987425104415055e-5), - GNM_const (0.4374866789907487804181793223952411e-5), - GNM_const (0.2039215753801366236781900709670839e-5), - GNM_const (0.9551412130407419832857179772951265e-6), - GNM_const (0.4492469198764566043294290331193655e-6), - GNM_const (0.2120718480555466586923135901077628e-6), - GNM_const (0.1004322482396809960872083050053344e-6), - GNM_const (0.4769810169363980565760193417246730e-7), - GNM_const (0.2271109460894316491031998116062124e-7), - GNM_const (0.1083865921489695409107491757968159e-7), - GNM_const (0.5183475041970046655121248647057669e-8), - GNM_const (0.2483674543802478317185008663991718e-8), - GNM_const (0.1192140140586091207442548202774640e-8), - GNM_const (0.5731367241678862013330194857961011e-9), - GNM_const (0.2759522885124233145178149692816341e-9), - GNM_const (0.1330476437424448948149715720858008e-9), - GNM_const (0.6422964563838100022082448087644648e-10), - GNM_const (0.3104424774732227276239215783404066e-10), - GNM_const (0.1502138408075414217093301048780668e-10), - GNM_const (0.7275974480239079662504549924814047e-11), - GNM_const (0.3527742476575915083615072228655483e-11), - GNM_const (0.1711991790559617908601084114443031e-11), - GNM_const (0.8315385841420284819798357793954418e-12), - GNM_const (0.4042200525289440065536008957032895e-12), - GNM_const (0.1966475631096616490411045679010286e-12), - GNM_const (0.9573630387838555763782200936508615e-13), - GNM_const (0.4664076026428374224576492565974577e-13), - GNM_const (0.2273736960065972320633279596737272e-13), - GNM_const (0.1109139947083452201658320007192334e-13) - }; - const int N = sizeof (coeffs) / sizeof (coeffs[0]); - - const gnm_float c = GNM_const (0.2273736845824652515226821577978691e-12); /* zeta(N+2)-1 */ - gnm_float lgam; - int i; - - if (gnumabs (a) >= 0.5) - return lgammagnum (a + 1); - - /* Abramowitz & Stegun 6.1.33 */ - /* http://functions.wolfram.com/06.11.06.0008.01 */ - lgam = c * logcf (-a / 2, N + 2, 1); - for (i = N - 1; i >= 0; i--) - lgam = coeffs[i] - a * lgam; - - return (a * lgam - eulers_const) * a - log1pmx (a); -} - -static gnm_float -compbfunc (gnm_float x, gnm_float a, gnm_float b) -{ - const gnm_float sumAcc = 5E-16; - gnm_float term = x; - gnm_float d = 2; - gnm_float sum = term / (a + 1); - while (gnumabs (term) > gnumabs (sum * sumAcc)) { - term *= (d - b) * x / d; - sum += term / (a + d); - d++; - } - return a * (b - 1) * sum; -} - -static gnm_float -pbeta_smalla (gnm_float x, gnm_float a, gnm_float b, gboolean lower_tail, gboolean log_p) -{ - gnm_float r; - -#if 0 - assert (a >= 0 && b >= 0); - assert (a < 1); - assert (b < 1 || (1 + b) * x <= 1); -#endif - - if (x > 0.5) { - gnm_float olda = a; - a = b; - b = olda; - x = 1 - x; - lower_tail = !lower_tail; - } - - r = (a + b + 0.5) * log1pmx (a / (1 + b)) + - a * (a - 0.5) / (1 + b) + - lfbaccdif (a, b); - r += a * loggnum ((1 + b) * x) - lgamma1p (a); - if (lower_tail) { - if (log_p) - return r + log1pgnum (-compbfunc (x, a, b)) + loggnum (b / (a + b)); - else - return expgnum (r) * (1 - compbfunc (x, a, b)) * (b / (a + b)); - } else { - /* x=0.500000001 a=0.5 b=0.000001 ends up here [swapped] - * with r=-7.94418987455065e-08 and cbf=-3.16694087508444e-07. - * - * x=0.0000001 a=0.999999 b=0.02 end up here with - * r=-16.098276918385 and cbf=-4.89999787339858e-08. - */ - if (log_p) { - return swap_log_tail (r + log1pgnum (-compbfunc (x, a, b)) + loggnum (b / (a + b))); - } else { - r = -expm1gnum (r); - r += compbfunc (x, a, b) * (1 - r); - r += (a / (a + b)) * (1 - r); - return r; - } - } -} - -/* Cumulative Students t-distribution, with odd parameterisation for - * use with binApprox. - * p is x*x/(k+x*x) - * q is 1-p - * logqk2 is LN(q)*k/2 - * approxtdistDens returns with approx density function, for use in - * binApprox - */ -static gnm_float -tdistexp (gnm_float p, gnm_float q, gnm_float logqk2, gnm_float k, - gnm_float *approxtdistDens) -{ - const gnm_float sumAcc = 5E-16; - const gnm_float cfVSmall = 1.0e-14; - const gnm_float lstpi = loggnum (2 * M_PIgnum) / 2; - - if (floorgnum (k / 2) * 2 == k) - *approxtdistDens = expgnum (logqk2 + logfbit (k - 1) - 2 * logfbit (k * 0.5 - 1) - lstpi); - else - *approxtdistDens = expgnum (logqk2 + k * log1pmx (1 / k) + 2 * logfbit ((k - 1) * 0.5) - logfbit (k - 1) - lstpi); - - if (k * p < 4 * q) { - gnm_float sum = 1; - gnm_float aki = k + 1; - gnm_float ai = 3; - gnm_float term = aki * p / ai; - - while (term > sumAcc * sum) { - sum += term; - ai += 2; - aki += 2; - term *= aki * p / ai; - } - sum += term; - - return 0.5 - *approxtdistDens * sum * sqrtgnum (k * p); - } else { - gnm_float q1 = 2 * (1 + q); - gnm_float q8 = 8 * q; - gnm_float a1 = 0; - gnm_float b1 = 1; - gnm_float c1 = -6 * q; - gnm_float a2 = 1; - gnm_float b2 = (k - 1) * p + 3; - gnm_float cadd = -14 * q; - gnm_float c2 = b2 + q1; - - while (gnumabs (a2 * b1 - a1 * b2) > gnumabs (cfVSmall * b1 * b2)) { - a1 = c2 * a2 + c1 * a1; - b1 = c2 * b2 + c1 * b1; - c1 += cadd; - cadd -= q8; - c2 += q1; - a2 = c2 * a1 + c1 * a2; - b2 = c2 * b1 + c1 * b2; - c1 += cadd; - cadd -= q8; - c2 += q1; - - if (gnumabs (b2) > scalefactor) { - a1 *= 1 / scalefactor; - b1 *= 1 / scalefactor; - a2 *= 1 / scalefactor; - b2 *= 1 / scalefactor; - } else if (gnumabs (b2) < 1 / scalefactor) { - a1 *= scalefactor; - b1 *= scalefactor; - a2 *= scalefactor; - b2 *= scalefactor; - } - } - - return *approxtdistDens * (1 - q * a2 / b2) / sqrtgnum (k * p); - } -} - - -/* Asymptotic expansion to calculate the probability that binomial variate - * has value <= a. - * (diffFromMean = (a+b)*p-a). - */ -static gnm_float -binApprox (gnm_float a, gnm_float b, gnm_float diffFromMean, - gboolean lower_tail, gboolean log_p) -{ - gnm_float pq1, res, comt, comf, t; - gnm_float ib05, ib15, ib25, ib35, ib3; - gnm_float elfb, coef15, coef25, coef35; - gnm_float approxtdistDens; - - gnm_float n = a + b; - gnm_float n1 = n + 1; - gnm_float lvv = b - n * diffFromMean; - gnm_float lval = (a * log1pmx (lvv / (a * n1)) + - b * log1pmx (-lvv / (b * n1))) / n; - gnm_float tp = -expm1gnum (lval); - gnm_float mfac = n1 * tp; - gnm_float ib2 = 1 + mfac; - gnm_float t1 = (n + 2) * tp; - - mfac = 2 * mfac; - - ib3 = ib2 + mfac*t1; - ib05 = tdistexp (tp, 1 - tp, n1 * lval, 2 * n1, &approxtdistDens); - ib15 = sqrtgnum (mfac); - mfac = t1 * (GNM_const (2.0) / 3); - ib25 = 1 + mfac; - ib35 = ib25 + mfac * (n + 3) * tp * (GNM_const (2.0) / 5); - - pq1 = (n * n) / (a * b); - - res = (ib2 * (1 + 2 * pq1) / 135 - 2 * ib3 * ((2 * pq1 - 43) * pq1 - 22) / (2835 * (n + 3))) / (n + 2); - res = (GNM_const (1.0) / 3 - res) * 2 * sqrtgnum (pq1 / n1) * (a - b) / n; - - n1 = (n + 1.5) * (n + 2.5); - coef15 = (-17 + 2 * pq1) / (24 * (n + 1.5)); - coef25 = (-503 + 4 * pq1 * (19 + pq1)) / (1152 * n1); - coef35 = (-315733 + pq1 * (53310 + pq1 * (8196 - 1112 * pq1))) / - (414720 * n1 * (n + 3.5)); - elfb = ((coef35 + coef25) + coef15) + 1; - - comt = ib15 * ((coef35 * ib35 + coef25 * ib25) + coef15); - comf = approxtdistDens / elfb; - - if (lvv > 0) - t = ib05 - (res - comt) * comf; - else - t = ib05 + (res + comt) * comf; - - return (!lower_tail != (lvv > 0)) ? R_D_Clog (t) : R_D_val (t); -} - -/* Probability that binomial variate with sample size i+j and - * event prob p (=1-q) has value i (diffFromMean = (i+j)*p-i) - */ -static gnm_float -binomialTerm (gnm_float i, gnm_float j, gnm_float p, gnm_float q, - gnm_float diffFromMean, gboolean log_p) -{ - const gnm_float minLog1Value = -0.79149064; - gnm_float c1,c2,c3; - gnm_float c4,c5,c6,ps,logbinomialTerm,dfm; - gnm_float t; - - if (i == 0 && j <= 0) - return R_D__1; - - if (i <= -1 || j < 0) - return R_D__0; - - c1 = (i + 1) + j; - if (p < q) { - c2 = i; - c3 = j; - ps = p; - dfm = diffFromMean; - } else { - c3 = i; - c2 = j; - ps = q; - dfm = -diffFromMean; - } - - c5 = (dfm - (1 - ps)) / (c2 + 1); - c6 = -(dfm + ps) / (c3 + 1); - - if (c5 < minLog1Value) { - if (c2 == 0) { - logbinomialTerm = c3 * log1pgnum (-ps); - return log_p ? logbinomialTerm : expgnum (logbinomialTerm); - } else if (ps == 0 && c2 > 0) { - return R_D__0; - } else { - t = loggnum ((ps * c1) / (c2 + 1)) - c5; - } - } else { - t = log1pmx (c5); - } - - c4 = logfbit (i + j) - logfbit (i) - logfbit (j); - logbinomialTerm = c4 + c2 * t - c5 + (c3 * log1pmx (c6) - c6); - - return log_p - ? logbinomialTerm + 0.5 * loggnum (c1 / ((c2 + 1) * (c3 + 1) * 2 * M_PIgnum)) - : expgnum (logbinomialTerm) * sqrtgnum (c1 / ((c2 + 1) * (c3 + 1) * 2 * M_PIgnum)); -} - - -/* - * Probability that binomial variate with sample size ii+jj - * and event prob pp (=1-qq) has value <=i. - * (diffFromMean = (ii+jj)*pp-ii). - */ -static gnm_float -binomialcf (gnm_float ii, gnm_float jj, gnm_float pp, gnm_float qq, - gnm_float diffFromMean, gboolean lower_tail, gboolean log_p) -{ - const gnm_float sumAlways = 0; - const gnm_float sumFactor = 6; - const gnm_float cfSmall = 1.0e-12; - - gnm_float prob,p,q,a1,a2,b1,b2,c1,c2,c3,c4,n1,q1,dfm; - gnm_float i,j,ni,nj,numb,ip1; - gboolean swapped; - - ip1 = ii + 1; - if (ii > -1 && (jj <= 0 || pp == 0)) { - return R_DT_1; - } else if (ii > -1 && ii < 0) { - ii = -ii; - ip1 = ii; - prob = binomialTerm (ii, jj, pp, qq, (ii + jj) * pp - ii, log_p) * - ii / ((ii + jj) * pp); - ii--; - diffFromMean = (ii + jj) * pp - ii; - } else - prob = binomialTerm (ii, jj, pp, qq, diffFromMean, log_p); - - n1 = (ii + 3) + jj; - if (ii < 0) - swapped = FALSE; - else if (pp > qq) - swapped = (n1 * qq >= jj + 1); - else - swapped = (n1 * pp <= ii + 2); - - if (prob == R_D__0) { - if (swapped == !lower_tail) - return R_D__0; - else - return R_D__1; - } - - if (swapped) { - j = ip1; - ip1 = jj; - i = jj - 1; - p = qq; - q = pp; - dfm = 1 - diffFromMean; - } else { - i = ii; - j = jj; - p = pp; - q = qq; - dfm = diffFromMean; - } - - if (i > sumAlways) { - numb = floorgnum (sumFactor * sqrtgnum (p + 0.5) * expgnum (loggnum (n1 * p * q) / 3)); - numb = floorgnum (numb - dfm); - if (numb > i) numb = floorgnum (i); - } else - numb = floorgnum (i); - if (numb < 0) numb = 0; - - a1 = 0; - b1 = 1; - q1 = q + 1; - a2 = (i - numb) * q; - b2 = dfm + numb + 1; - c1 = 0; - - c2 = a2; - c4 = b2; - - while (gnumabs (a2 * b1 - a1 * b2) > gnumabs (cfSmall * b1 * b2)) { - c1++; - c2 -= q; - c3 = c1 * c2; - c4 += q1; - a1 = c4 * a2 + c3 * a1; - b1 = c4 * b2 + c3 * b1; - c1++; - c2 -= q; - c3 = c1 * c2; - c4 += q1; - a2 = c4 * a1 + c3 * a2; - b2 = c4 * b1 + c3 * b2; - - if (gnumabs (b2) > scalefactor) { - a1 *= 1 / scalefactor; - b1 *= 1 / scalefactor; - a2 *= 1 / scalefactor; - b2 *= 1 / scalefactor; - } else if (gnumabs (b2) < 1 / scalefactor) { - a1 *= scalefactor; - b1 *= scalefactor; - a2 *= scalefactor; - b2 *= scalefactor; - } - } - - a1 = a2 / b2; - - ni = (i - numb + 1) * q; - nj = (j + numb) * p; - while (numb > 0) { - a1 = (1 + a1) * (ni / nj); - ni = ni + q; - nj = nj - p; - numb--; - } - - prob = log_p ? prob + log1pgnum (a1) : prob * (1 + a1); - - if (swapped) { - if (log_p) - prob += loggnum (ip1 * q / nj); - else - prob *= ip1 * q / nj; - } - - if (swapped == !lower_tail) - return prob; - else - return log_p ? swap_log_tail (prob) : 1 - prob; -} - -static gnm_float -binomial (gnm_float ii, gnm_float jj, gnm_float pp, gnm_float qq, - gnm_float diffFromMean, gboolean lower_tail, gboolean log_p) -{ - gnm_float mij = fmin2 (ii, jj); - - if (mij > 500 && gnumabs (diffFromMean) < 0.01 * mij) - return binApprox (jj - 1, ii, diffFromMean, lower_tail, log_p); - - return binomialcf (ii, jj, pp, qq, diffFromMean, lower_tail, log_p); -} - - -gnm_float -pbeta (gnm_float x, gnm_float a, gnm_float b, gboolean lower_tail, gboolean log_p) -{ - if (isnangnum (x) || isnangnum (a) || isnangnum (b)) - return x + a + b; - - if (x <= 0) return R_DT_0; - if (x >= 1) return R_DT_1; - - if (a < 1 && (b < 1 || (1 + b) * x <= 1)) - return pbeta_smalla (x, a, b, lower_tail, log_p); - - if (b < 1 && (1 + a) * (1 - x) <= 1) /* a/(1+a) <= x ??? */ - return pbeta_smalla (1 - x, b, a, !lower_tail, log_p); - - if (a < 1) - return binomial (-a, b, x, 1 - x, 0, !lower_tail, log_p); - - if (b < 1) - return binomial (-b, a, 1 - x, x, 0, lower_tail, log_p); - - return binomial (a - 1, b, x, 1 - x, (a + b - 1) * x - a + 1, - !lower_tail, log_p); -} - -/* --- END IANDJMSMITH SOURCE MARKER --- */ -/* ------------------------------------------------------------------------ */ - -/* - * New phyper implementation. Copyright 2004 Morten Welinder. - * Distributed under the GNU General Public License. - * - * Thanks to Ian Smith for ideas. - */ -/* - * Calculate - * - * phyper (i, NR, NB, n, TRUE, FALSE) - * [log] ---------------------------------- - * dhyper (i, NR, NB, n, FALSE) - * - * without actually calling phyper. This assumes that - * - * i * (NR + NB) <= n * NR - * - */ -static gnm_float -pdhyper (gnm_float i, gnm_float NR, gnm_float NB, gnm_float n, gboolean log_p) -{ - gnm_float sum = 0; - gnm_float term = 1; - - while (i > 0 && term >= GNUM_EPSILON * sum) { - term *= i * (NB - n + i) / (n + 1 - i) / (NR + 1 - i); - sum += term; - i--; - } - - return log_p ? log1pgnum (sum) : 1 + sum; -} - - -gnm_float -phyper (gnm_float i, gnm_float NR, gnm_float NB, gnm_float n, int lower_tail, int log_p) -{ - gnm_float d, pd; - -#ifdef IEEE_754 - if (isnangnum (i) || isnangnum (NR) || isnangnum (NB) || isnangnum (n)) - return i + NR + NB + n; -#endif - - i = floorgnum (i + 1e-7); - NR = floorgnum (NR + 0.5); - NB = floorgnum (NB + 0.5); - n = floorgnum (n + 0.5); - - if (NR < 0 || NB < 0 || !finitegnum (NR + NB) || n < 0 || n > NR + NB) - ML_ERR_return_NAN; - - if (i * (NR + NB) > n * NR) { - /* Swap tails. */ - gnm_float oldNB = NB; - NB = NR; - NR = oldNB; - i = n - i - 1; - lower_tail = !lower_tail; - } - - if (i < 0) - return R_DT_0; - - d = dhyper (i, NR, NB, n, log_p); - pd = pdhyper (i, NR, NB, n, log_p); - - return log_p ? R_DT_log (d + pd) : R_D_Lval (d * pd); -} - - -gnm_float -pcauchy (gnm_float x, gnm_float location, gnm_float scale, - gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum(x) || isnangnum(location) || isnangnum(scale)) - return x + location + scale; -#endif - if (scale <= 0) ML_ERR_return_NAN; - - x = (x - location) / scale; - if (isnangnum(x)) ML_ERR_return_NAN; -#ifdef IEEE_754 - if (!finitegnum(x)) { - if(x < 0) return R_DT_0; - else return R_DT_1; - } -#endif - - if (!lower_tail) - x = -x; - - if (gnumabs (x) > 1) { - gnm_float temp = atangnum (1 / x) / M_PIgnum; - return (x > 0) ? R_D_Clog (temp) : R_D_val (-temp); - } else - return R_D_val (0.5 + atangnum (x) / M_PIgnum); -} - -gnm_float -pf (gnm_float x, gnm_float n1, gnm_float n2, gboolean lower_tail, gboolean log_p) -{ -#ifdef IEEE_754 - if (isnangnum (x) || isnangnum (n1) || isnangnum (n2)) - return x + n2 + n1; -#endif - if (n1 <= 0 || n2 <= 0) ML_ERR_return_NAN; - - if (x <= 0) - return R_DT_0; - - /* Avoid squeezing pbeta's first parameter against 1. */ - if (n1 * x > n2) - return pbeta (n2 / (n2 + n1 * x), n2 / 2, n1 / 2, - !lower_tail, log_p); - else - return pbeta (n1 * x / (n2 + n1 * x), n1 / 2, n2 / 2, - lower_tail, log_p); -} - -/* ------------------------------------------------------------------------ */ - -typedef gnm_float (*PFunc) (gnm_float x, const gnm_float shape[], - gboolean lower_tail, gboolean log_p); -typedef gnm_float (*DPFunc) (gnm_float x, const gnm_float shape[], - gboolean log_p); - -static gnm_float -pfuncinverter (gnm_float p, const gnm_float shape[], - gboolean lower_tail, gboolean log_p, - gnm_float xlow, gnm_float xhigh, gnm_float x0, - PFunc pfunc, DPFunc dpfunc_dx) -{ - gboolean have_xlow = finitegnum (xlow); - gboolean have_xhigh = finitegnum (xhigh); - gnm_float exlow, exhigh; - gnm_float x = 0, e = 0; - int i; - - if (p == R_DT_0) return xlow; - if (p == R_DT_1) return xhigh; - - exlow = R_DT_0 - p; - exhigh = R_DT_1 - p; - if (!lower_tail) { - exlow = -exlow; - exhigh = -exhigh; - } - -#ifdef DEBUG_pfuncinverter - printf ("p=%.15g\n", p); -#endif - - for (i = 0; i < 100; i++) { - if (i == 0) { - /* Use supplied guess. */ - x = x0; - if (x0 <= xlow || x0 >= xhigh) { - if (have_xlow || have_xhigh) - x0 = ((have_xhigh ? xhigh : xlow + 1) + - (have_xlow ? xlow : xhigh - 1)) / 2; - else - x0 = 0; - } - } else if (i == 1) { - /* - * Under the assumption that the initial guess was - * good, pick a nearby point that is hopefully on - * the other side. If we already have both sides, - * just bisect. - */ - if (have_xlow && have_xhigh) - x = (xlow + xhigh) / 2; - else if (have_xlow) - x = xlow * 1.1; - else - x = xhigh / 1.1; - } else if (have_xlow && have_xhigh) { - switch (i % 8) { - case 0: - case 4: - x = xhigh - (xhigh - xlow) * - (exhigh / (exhigh - exlow)); - break; - case 2: - x = (xhigh + 1000 * xlow) / 1001; - break; - case 6: - x = (1000 * xhigh + xlow) / 1001; - break; - default: - x = (xhigh + xlow) / 2; - } - } else if (have_xlow) { - /* Agressively seek right in search of xhigh. */ - x = (xlow < 1) ? 1 : (2 * i) * xlow; - } else { - /* Agressively seek left in search of xlow. */ - x = (xhigh > -1) ? -1 : (2 * i) * xhigh; - } - - newton_retry: - if ((have_xlow && x <= xlow) || (have_xhigh && x >= xhigh)) - continue; - - e = pfunc (x, shape, lower_tail, log_p) - p; - if (!lower_tail) e = -e; - -#ifdef DEBUG_pfuncinverter - printf (" x=%.15g e=%.15g l=%.15g h=%.15g\n", - x, e, xlow, xhigh); -#endif - - if (e == 0) - goto done; - else if (e > 0) { - xhigh = x; - exhigh = e; - have_xhigh = TRUE; - } else { - xlow = x; - exlow = e; - have_xlow = TRUE; - } - - if (have_xlow && have_xhigh) { - gnm_float prec = (xhigh - xlow) / - (gnumabs (xlow) + gnumabs (xhigh)); - if (prec < GNUM_EPSILON * 4) { - x = (xhigh + xlow) / 2; - e = pfunc (x, shape, lower_tail, log_p) - p; - if (!lower_tail) e = -e; - goto done; - } - - if (i % 3 < 2 && (i == 0 || prec < 0.05)) { - gnm_float d = dpfunc_dx (x, shape, log_p); - if (d) { - /* - * Deliberately overshoot a bit to help - * with getting good points on both - * sides of the root. - */ - x = x - e / d * 1.000001; - if (x > xlow && x < xhigh) { -#ifdef DEBUG_pfuncinverter - printf ("Newton ok\n"); -#endif - i++; - goto newton_retry; - } - } - } - } - } - - ML_ERROR(ME_PRECISION); - done: - /* Make sure to keep a lucky near-hit. */ - - if (have_xhigh && gnumabs (e) > exhigh) - e = exhigh, x = xhigh; - if (gnumabs (e) > -exlow) - e = exlow, x = xlow; - -#ifdef DEBUG_pfuncinverter - printf ("--> %.15g\n\n", x); -#endif - return x; -} - -/* ------------------------------------------------------------------------ */ - -static gnm_float -dgamma1 (gnm_float x, const gnm_float *palpha, gboolean log_p) -{ - if (log_p) - return 0; /* i.e., bail. */ - else - return dgamma (x, *palpha, 1, log_p); -} - -static gnm_float -pgamma1 (gnm_float x, const gnm_float *palpha, - gboolean lower_tail, gboolean log_p) -{ - return pgamma (x, *palpha, 1, lower_tail, log_p); -} - - -gnm_float -qgamma (gnm_float p, gnm_float alpha, gnm_float scale, - gboolean lower_tail, gboolean log_p) -{ - gnm_float res1, x0, v; - -#ifdef IEEE_754 - if (isnangnum(p) || isnangnum(alpha) || isnangnum(scale)) - return p + alpha + scale; -#endif - R_Q_P01_check(p); - if (alpha <= 0) ML_ERR_return_NAN; - - /* Make an initial guess, x0, assuming scale==1. */ - v = 2 * alpha; - if (v < -1.24 * R_DT_log (p)) - x0 = powgnum (R_DT_qIv (p) * alpha * expgnum (lgammagnum (alpha) + alpha * M_LN2gnum), - 1 / alpha) / 2; - else { - gnm_float x1 = qnorm (p, 0, 1, lower_tail, log_p); - gnm_float p1 = 0.222222 / v; - x0 = v * powgnum (x1 * sqrtgnum (p1) + 1 - p1, 3) / 2; - } - - res1 = pfuncinverter (p, &alpha, lower_tail, log_p, 0, gnm_pinf, x0, - pgamma1, dgamma1); - - return res1 * scale; -} - -/* ------------------------------------------------------------------------ */ - -static gnm_float -dbeta1 (gnm_float x, const gnm_float shape[], gboolean log_p) -{ - if (log_p) - return 0; /* i.e., bail. */ - else - return dbeta (x, shape[0], shape[1], log_p); -} - -static gnm_float -pbeta1 (gnm_float x, const gnm_float shape[], - gboolean lower_tail, gboolean log_p) -{ - return pbeta (x, shape[0], shape[1], lower_tail, log_p); -} - - -gnm_float -qbeta (gnm_float p, gnm_float pin, gnm_float qin, gboolean lower_tail, gboolean log_p) -{ - gnm_float x0, shape[2]; - -#ifdef IEEE_754 - if (isnangnum (pin) || isnangnum (qin) || isnangnum (p)) - return pin + qin + p; -#endif - R_Q_P01_check (p); - - if (pin < 0. || qin < 0.) ML_ERR_return_NAN; - - /* - * For small pin, p seems to have exponent 1, for large pin, it - * seems more like 0. - * - * For small pin, pin itself seems to have exponent 2, for large pin, - * it is more like 1. - */ - x0 = powgnum (R_DT_qIv (p), 1 / (pin + 1)) * - powgnum (pin, (pin + 2) / (pin + 1)) / - qin; - x0 /= (1 + x0); - - shape[0] = pin; - shape[1] = qin; - return pfuncinverter (p, shape, lower_tail, log_p, 0, 1, x0, - pbeta1, dbeta1); -} - -/* ------------------------------------------------------------------------ */ -/* http://www.math.keio.ac.jp/matumoto/CODES/MT2002/mt19937ar.c */ -/* Imported by hand -- MW. */ - -/* - A C-program for MT19937, with initialization improved 2002/1/26. - Coded by Takuji Nishimura and Makoto Matsumoto. - - Before using, initialize the state by using init_genrand(seed) - or init_by_array(init_key, key_length). - - Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - Any feedback is very welcome. - http://www.math.keio.ac.jp/matumoto/emt.html - email: matumoto@math.keio.ac.jp -*/ - -#if 0 -#include -#endif - -/* Period parameters */ -#define N 624 -#define M 397 -#define MATRIX_A 0x9908b0dfUL /* constant vector a */ -#define UPPER_MASK 0x80000000UL /* most significant w-r bits */ -#define LOWER_MASK 0x7fffffffUL /* least significant r bits */ - -static unsigned long mt[N]; /* the array for the state vector */ -static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */ - -/* initializes mt[N] with a seed */ -static void init_genrand(unsigned long s) -{ - mt[0]= s & 0xffffffffUL; - for (mti=1; mti> 30)) + mti); - /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ - /* In the previous versions, MSBs of the seed affect */ - /* only MSBs of the array mt[]. */ - /* 2002/01/09 modified by Makoto Matsumoto */ - mt[mti] &= 0xffffffffUL; - /* for >32 bit machines */ - } -} - -/* initialize by an array with array-length */ -/* init_key is the array for initializing keys */ -/* key_length is its length */ -static void mt_init_by_array(unsigned long init_key[], int key_length) -{ - int i, j, k; - init_genrand(19650218UL); - i=1; j=0; - k = (N>key_length ? N : key_length); - for (; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL)) - + init_key[j] + j; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ - i++; j++; - if (i>=N) { mt[0] = mt[N-1]; i=1; } - if (j>=key_length) j=0; - } - for (k=N-1; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL)) - - i; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ - i++; - if (i>=N) { mt[0] = mt[N-1]; i=1; } - } - - mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ -} - -/* generates a random number on [0,0xffffffff]-interval */ -static unsigned long genrand_int32(void) -{ - unsigned long y; - static unsigned long mag01[2]={0x0UL, MATRIX_A}; - /* mag01[x] = x * MATRIX_A for x=0,1 */ - - if (mti >= N) { /* generate N words at one time */ - int kk; - - if (mti == N+1) /* if init_genrand() has not been called, */ - init_genrand(5489UL); /* a default initial seed is used */ - - for (kk=0;kk> 1) ^ mag01[y & 0x1UL]; - } - for (;kk> 1) ^ mag01[y & 0x1UL]; - } - y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); - mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; - - mti = 0; - } - - y = mt[mti++]; - - /* Tempering */ - y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680UL; - y ^= (y << 15) & 0xefc60000UL; - y ^= (y >> 18); - - return y; -} - -#if 0 -/* generates a random number on [0,0x7fffffff]-interval */ -long genrand_int31(void) -{ - return (long)(genrand_int32()>>1); -} - -/* generates a random number on [0,1]-real-interval */ -double genrand_real1(void) -{ - return genrand_int32()*(1.0/4294967295.0); - /* divided by 2^32-1 */ -} - -/* generates a random number on [0,1)-real-interval */ -double genrand_real2(void) -{ - return genrand_int32()*(1.0/4294967296.0); - /* divided by 2^32 */ -} - -/* generates a random number on (0,1)-real-interval */ -double genrand_real3(void) -{ - return (((double)genrand_int32()) + 0.5)*(1.0/4294967296.0); - /* divided by 2^32 */ -} -#endif - -/* generates a random number on [0,1) with 53-bit resolution*/ -static double genrand_res53(void) -{ - unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6; - return(a*67108864.0+b)*(1.0/9007199254740992.0); -} -/* These real versions are due to Isaku Wada, 2002/01/09 added */ - -#if 0 -int main(void) -{ - int i; - unsigned long init[4]={0x123, 0x234, 0x345, 0x456}, length=4; - init_by_array(init, length); - printf("1000 outputs of genrand_int32()\n"); - for (i=0; i<1000; i++) { - printf("%10lu ", genrand_int32()); - if (i%5==4) printf("\n"); - } - printf("\n1000 outputs of genrand_real2()\n"); - for (i=0; i<1000; i++) { - printf("%10.8f ", genrand_real2()); - if (i%5==4) printf("\n"); - } - return 0; -} -#endif - - -#undef N -#undef M -#undef MATRIX_A -#undef UPPER_MASK -#undef LOWER_MASK - -/* ------------------------------------------------------------------------ */ - -/* FIXME: we need something that catches partials and EAGAIN. */ -#define fullread read - -#define RANDOM_DEVICE "/dev/urandom" - -/* - * Conservative random number generator. The result is (supposedly) uniform - * and between 0 and 1. (0 possible, 1 not.) The result should have about - * 64 bits randomness. - */ -gnm_float -random_01 (void) -{ - static int device_fd = -2; - static int seeded = -2; - - while (seeded) { - if (seeded == -2) { - const char *seed = g_getenv ("GNUMERIC_PRNG_SEED"); - if (seed) { - int len = strlen (seed); - int i; - unsigned long *longs = g_new (unsigned long, len + 1); - - /* We drop only one character into each long. */ - for (i = 0; i < len; i++) - longs[i] = (unsigned char)seed[i]; - mt_init_by_array (longs, len); - g_free (longs); - seeded = 1; - - g_warning ("Using pseudo-random numbers."); - } else { - seeded = 0; - break; - } - } - - /* - * Only 52-bit precision. But hey, if you are using pseudo - * random numbers that ought to be good enough to you. - */ - return genrand_res53 (); - } - - if (device_fd == -2) { - device_fd = open (RANDOM_DEVICE, O_RDONLY); - /* - * We could check that we really have a device, but it hard - * to come up with a non-paranoid reason to. - */ - } - - if (device_fd >= 0) { - static ssize_t bytes_left = 0; - static unsigned char data[32 * sizeof (gnm_float)]; - gnm_float res = 0; - size_t i; - - if (bytes_left < (ssize_t)sizeof (gnm_float)) { - ssize_t got = fullread (device_fd, &data, sizeof (data)); - if (got < (ssize_t)sizeof (gnm_float)) - goto failure; - bytes_left += got; - } - - bytes_left -= sizeof (gnm_float); - for (i = 0; i < sizeof (gnm_float); i++) - res = (res + data[bytes_left + i]) / 256; - return res; - - failure: - /* It failed when it shouldn't. Disable. */ - g_warning ("Reading from %s failed; reverting to pseudo-random.", - RANDOM_DEVICE); - close (device_fd); - device_fd = -1; - } - -#ifdef HAVE_RANDOM - { - int r1, r2; - - r1 = random () & 2147483647; - r2 = random () & 2147483647; - - return (r1 + (r2 / 2147483648.0)) / 2147483648.0; - } -#elif defined (HAVE_DRAND48) - return drand48 (); -#else - { - /* - * We try to work around lack of randomness in rand's - * lower bits. - */ - const int prime = 65537; - int r1, r2, r3, r4; - - g_assert (RAND_MAX > ((1 << 12) - 1)); - - r1 = (rand () ^ (rand () << 12)) % prime; - r2 = (rand () ^ (rand () << 12)) % prime; - r3 = (rand () ^ (rand () << 12)) % prime; - r4 = (rand () ^ (rand () << 12)) % prime; - - return (r1 + (r2 + (r3 + r4 / (gnm_float)prime) / prime) / prime) / prime; - } -#endif -} - -/* - * Generate a N(0,1) distributed number. - */ -gnm_float -random_normal (void) -{ - static gboolean has_saved = FALSE; - static gnm_float saved; - - if (has_saved) { - has_saved = FALSE; - return saved; - } else { - gnm_float u, v, r2, rsq; - do { - u = 2 * random_01 () - 1; - v = 2 * random_01 () - 1; - r2 = u * u + v * v; - } while (r2 > 1 || r2 == 0); - - rsq = sqrtgnum (-2 * loggnum (r2) / r2); - - has_saved = TRUE; - saved = v * rsq; - - return u * rsq; - } -} - -gnm_float -random_lognormal (gnm_float zeta, gnm_float sigma) -{ - return expgnum (sigma * random_normal () + zeta); -} - -static gnm_float -random_gaussian (gnm_float sigma) -{ - return sigma * random_normal (); -} - -/* - * Generate a poisson distributed number. - */ -gnm_float -random_poisson (gnm_float lambda) -{ - /* - * This may not be optimal code, but it sure is easy to - * understand compared to R's code. - */ - return qpois (random_01 (), lambda, TRUE, FALSE); -} - -/* - * Generate a binomial distributed number. - */ -gnm_float -random_binomial (gnm_float p, int trials) -{ - return qbinom (random_01 (), trials, p, TRUE, FALSE); -} - -/* - * Generate a negative binomial distributed number. - */ -gnm_float -random_negbinom (gnm_float p, int f) -{ - return qnbinom (random_01 (), f, p, TRUE, FALSE); -} - -/* - * Generate an exponential distributed number. - */ -gnm_float -random_exponential (gnm_float b) -{ - return -b * loggnum (random_01 ()); -} - -/* - * Generate a bernoulli distributed number. - */ -gnm_float -random_bernoulli (gnm_float p) -{ - gnm_float r = random_01 (); - - return (r <= p) ? 1.0 : 0.0; -} - -/* - * Generate a cauchy distributed number. From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_cauchy (gnm_float a) -{ - gnm_float u; - - do { - u = random_01 (); - } while (u == 0.5); - - return a * tangnum (M_PIgnum * u); -} - -/* - * Generate a Weibull distributed number. From the GNU Scientific - * library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_weibull (gnm_float a, gnm_float b) -{ - gnm_float x, z; - - do { - x = random_01 (); - } while (x == 0.0); - - z = powgnum (-loggnum (x), 1 / b); - - return a * z; -} - -/* - * Generate a Laplace (two-sided exponential probability) distributed number. - * From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_laplace (gnm_float a) -{ - gnm_float u; - - do { - u = 2 * random_01 () - 1.0; - } while (u == 0.0); - - if (u < 0) - return a * loggnum (-u); - else - return -a * loggnum (u); -} - -gnm_float -random_laplace_pdf (gnm_float x, gnm_float a) -{ - return (1 / (2 * a)) * expgnum (-gnumabs (x) / a); -} - -/* - * Generate a Rayleigh distributed number. From the GNU Scientific library - * 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_rayleigh (gnm_float sigma) -{ - gnm_float u; - - do { - u = random_01 (); - } while (u == 0.0); - - return sigma * sqrtgnum (-2.0 * loggnum (u)); -} - -/* - * Generate a Rayleigh tail distributed number. From the GNU Scientific library - * 1.1.1. The Rayleigh tail distribution has the form - * p(x) dx = (x / sigma^2) exp((a^2 - x^2)/(2 sigma^2)) dx - * - * for x = a ... +infty - * - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_rayleigh_tail (gnm_float a, gnm_float sigma) -{ - gnm_float u; - - do { - u = random_01 (); - } while (u == 0.0); - - return sqrtgnum (a * a - 2.0 * sigma * sigma * loggnum (u)); -} - -/* The Gamma distribution of order a>0 is defined by: - * - * p(x) dx = {1 / \Gamma(a) b^a } x^{a-1} e^{-x/b} dx - * - * for x>0. If X and Y are independent gamma-distributed random - * variables of order a1 and a2 with the same scale parameter b, then - * X+Y has gamma distribution of order a1+a2. - * - * The algorithms below are from Knuth, vol 2, 2nd ed, p. 129. - */ - -static gnm_float -gamma_frac (gnm_float a) -{ - /* This is exercise 16 from Knuth; see page 135, and the solution is - * on page 551. */ - - gnm_float x, q; - gnm_float p = M_Egnum / (a + M_Egnum); - do { - gnm_float v; - gnm_float u = random_01 (); - do { - v = random_01 (); - } while (v == 0.0); - - if (u < p) { - x = powgnum (v, 1 / a); - q = expgnum (-x); - } else { - x = 1 - loggnum (v); - q = powgnum (x, a - 1); - } - } while (random_01 () >= q); - - return x; -} - -static gnm_float -gamma_large (gnm_float a) -{ - /* - * Works only if a > 1, and is most efficient if a is large - * - * This algorithm, reported in Knuth, is attributed to Ahrens. A - * faster one, we are told, can be found in: J. H. Ahrens and - * U. Dieter, Computing 12 (1974) 223-246. - */ - - gnm_float sqa, x, y, v; - sqa = sqrtgnum (2 * a - 1); - do { - do { - y = tangnum (M_PIgnum * random_01 ()); - x = sqa * y + a - 1; - } while (x <= 0); - v = random_01 (); - } while (v > (1 + y * y) * expgnum ((a - 1) * loggnum (x / (a - 1)) - - sqa * y)); - - return x; -} - -static gnm_float -ran_gamma_int (unsigned int a) -{ - if (a < 12) { - gnm_float prod; - - do { - unsigned int i; - prod = 1; - - for (i = 0; i < a; i++) - prod *= random_01 (); - - /* - * This handles the 0-probability event of getting - * an actual zero as well as the possibility of - * underflow. - */ - } while (prod == 0); - - return -loggnum (prod); - } else - return gamma_large (a); -} - -/* - * Generate a Gamma distributed number. From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_gamma (gnm_float a, gnm_float b) -{ - /* assume a > 0 */ - /* FIXME: why not simply a gnm_float? */ - unsigned int na = floorgnum (a); - - if (a == na) - return b * ran_gamma_int (na); - else if (na == 0) - return b * gamma_frac (a); - else - return b * (ran_gamma_int (na) + gamma_frac (a - na)); -} - -/* - * Generate a Pareto distributed number. From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_pareto (gnm_float a, gnm_float b) -{ - gnm_float x; - - do { - x = random_01 (); - } while (x == 0.0); - - return b * powgnum (x, -1 / a); -} - -/* - * Generate a F-distributed number. From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_fdist (gnm_float nu1, gnm_float nu2) -{ - gnm_float Y1 = random_gamma (nu1 / 2, 2.0); - gnm_float Y2 = random_gamma (nu2 / 2, 2.0); - - return (Y1 * nu2) / (Y2 * nu1); -} - -/* - * Generate a Beta-distributed number. From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_beta (gnm_float a, gnm_float b) -{ - gnm_float x1 = random_gamma (a, 1.0); - gnm_float x2 = random_gamma (b, 1.0); - - return x1 / (x1 + x2); -} - -/* - * Generate a Chi-Square-distributed number. From the GNU Scientific library - * 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_chisq (gnm_float nu) -{ - return 2 * random_gamma (nu / 2, 1.0); -} - -/* - * Generate a logistic-distributed number. From the GNU Scientific library - * 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_logistic (gnm_float a) -{ - gnm_float x; - - do { - x = random_01 (); - } while (x == 0 || x == 1); - - return a * loggnum (x / (1 - x)); -} - -/* - * Generate a geometric-distributed number. From the GNU Scientific library - * 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_geometric (gnm_float p) -{ - gnm_float u; - - if (p == 1) - return 1; - do { - u = random_01 (); - } while (u == 0); - - return floorgnum (loggnum (u) / log1pgnum (-p) + 1); -} - -/* - * Generate a hypergeometric-distributed number. From the GNU Scientific - * library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_hypergeometric (unsigned int n1, unsigned int n2, unsigned int t) -{ - unsigned int n = n1 + n2; - - unsigned int i = 0; - unsigned int a = n1; - unsigned int b = n1 + n2; - unsigned int k = 0; - - /* FIXME: performance for large t? */ - - if (t > n) - t = n; - - if (t < n / 2) { - for (i = 0 ; i < t ; i++) { - gnm_float u = random_01 (); - - if (b * u < a) { - k++; - if (k == n1) - return k ; - a-- ; - } - b--; - } - return k; - } else { - for (i = 0 ; i < n - t ; i++) { - gnm_float u = random_01 (); - - if (b * u < a) { - k++; - if (k == n1) - return n1 - k; - a--; - } - b-- ; - } - return n1 - k; - } -} - - -/* - * Generate a logarithmic-distributed number. From the GNU Scientific library - * 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_logarithmic (gnm_float p) -{ - gnm_float c, v; - - c = log1pgnum (-p); - do { - v = random_01 (); - } while (v == 0); - - if (v >= p) - return 1; - else { - gnm_float u, q; - - do { - u = random_01 (); - } while (u == 0); - q = expm1gnum (c * u); - - if (v <= q * q) - return floorgnum (1 + loggnum (v) / loggnum (q)); - else if (v <= q) - return 2; - else - return 1; - } -} - -/* - * Generate a T-distributed number. From the GNU Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_tdist (gnm_float nu) -{ - if (nu <= 2) { - gnm_float Y1 = random_normal (); - gnm_float Y2 = random_chisq (nu); - - gnm_float t = Y1 / sqrtgnum (Y2 / nu); - - return t; - } else { - gnm_float Y1, Y2, Z, t; - do { - Y1 = random_normal (); - Y2 = random_exponential (1 / (nu / 2 - 1)); - - Z = Y1 * Y1 / (nu - 2); - } while (1 - Z < 0 || expgnum (-Y2 - Z) > (1 - Z)); - - /* Note that there is a typo in Knuth's formula, the line below - * is taken from the original paper of Marsaglia, Mathematics - * of Computation, 34 (1980), p 234-256. */ - - t = Y1 / sqrtgnum ((1 - 2 / nu) * (1 - Z)); - return t; - } -} - -/* - * Generate a Type I Gumbel-distributed random number. From the GNU - * Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_gumbel1 (gnm_float a, gnm_float b) -{ - gnm_float x; - - do { - x = random_01 (); - } while (x == 0.0); - - return (loggnum (b) - loggnum (-loggnum (x))) / a; -} - -/* - * Generate a Type II Gumbel-distributed random number. From the GNU - * Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - */ -gnm_float -random_gumbel2 (gnm_float a, gnm_float b) -{ - gnm_float x; - - do { - x = random_01 (); - } while (x == 0.0); - - return powgnum (-b / loggnum (x), 1 / a); -} - -/* - * Generate a stable Levy-distributed random number. From the GNU - * Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough. - * - * The stable Levy probability distributions have the form - * - * p(x) dx = (1/(2 pi)) \int dt exp(- it x - |c t|^alpha) - * - * with 0 < alpha <= 2. - * - * For alpha = 1, we get the Cauchy distribution - * For alpha = 2, we get the Gaussian distribution with sigma = sqrt(2) c. - * - * Fromn Chapter 5 of Bratley, Fox and Schrage "A Guide to - * Simulation". The original reference given there is, - * - * J.M. Chambers, C.L. Mallows and B. W. Stuck. "A method for - * simulating stable random variates". Journal of the American - * Statistical Association, JASA 71 340-344 (1976). - */ -gnm_float -random_levy (gnm_float c, gnm_float alpha) -{ - gnm_float u, v, t, s; - - do { - u = random_01 (); - } while (u == 0.0); - - u = M_PIgnum * (u - 0.5); - - if (alpha == 1) { /* cauchy case */ - t = tangnum (u); - return c * t; - } - - do { - v = random_exponential (1.0); - } while (v == 0); - - if (alpha == 2) { /* gaussian case */ - t = 2 * singnum (u) * sqrtgnum (v); - return c * t; - } - - /* general case */ - - t = singnum (alpha * u) / powgnum (cosgnum (u), 1 / alpha); - s = powgnum (cosgnum ((1 - alpha) * u) / v, (1 - alpha) / alpha); - - return c * t * s; -} - -/* - * The following routine for the skew-symmetric case was provided by - * Keith Briggs. - * - * The stable Levy probability distributions have the form - * - * 2*pi* p(x) dx - * - * = int dt exp(mu*i*t-|sigma*t|^alpha*(1-i*beta*sign(t)*tan(pi*alpha/2))) for - * alpha != 1 - * = int dt exp(mu*i*t-|sigma*t|^alpha*(1+i*beta*sign(t)*2/pi*log(|t|))) for - alpha == 1 - * - * with 00. - * - * For beta=0, sigma=c, mu=0, we get gsl_ran_levy above. - * - * For alpha = 1, beta=0, we get the Lorentz distribution - * For alpha = 2, beta=0, we get the Gaussian distribution - * - * See A. Weron and R. Weron: Computer simulation of Lévy alpha-stable - * variables and processes, preprint Technical University of Wroclaw. - * http://www.im.pwr.wroc.pl/~hugo/Publications.html - */ -gnm_float -random_levy_skew (gnm_float c, gnm_float alpha, gnm_float beta) -{ - gnm_float V, W, X; - - if (beta == 0) /* symmetric case */ - return random_levy (c, alpha); - - do { - V = random_01 (); - } while (V == 0.0); - - V = M_PIgnum * (V - 0.5); - - do { - W = random_exponential (1.0); - } while (W == 0); - - if (alpha == 1) { - X = ((M_PI_2gnum + beta * V) * tangnum (V) - - beta * loggnum (M_PI_2gnum * W * cosgnum (V) / - (M_PI_2gnum + beta * V))) / M_PI_2gnum; - return c * (X + beta * loggnum (c) / M_PI_2gnum); - } else { - gnm_float t = beta * tangnum (M_PI_2gnum * alpha); - gnm_float B = atangnum (t) / alpha; - gnm_float S = pow1p (t * t, 1 / (2 * alpha)); - - X = S * singnum (alpha * (V + B)) / powgnum (cosgnum (V), - 1 / alpha) - * powgnum (cosgnum (V - alpha * (V + B)) / W, - (1 - alpha) / alpha); - return c * X; - } -} - -gnm_float -random_exppow_pdf (gnm_float x, gnm_float a, gnm_float b) -{ - gnm_float lngamma = lgamma1p (1 / b); - - return (1 / (2 * a)) * expgnum (-powgnum (gnumabs (x / a), b) - lngamma); -} - -/* - * The exponential power probability distribution is - * - * p(x) dx = (1/(2 a Gamma(1+1/b))) * exp(-|x/a|^b) dx - * - * for -infty < x < infty. For b = 1 it reduces to the Laplace - * distribution. - * - * The exponential power distribution is related to the gamma - * distribution by E = a * pow(G(1/b),1/b), where E is an exponential - * power variate and G is a gamma variate. - * - * We use this relation for b < 1. For b >=1 we use rejection methods - * based on the laplace and gaussian distributions which should be - * faster. - * - * See P. R. Tadikamalla, "Random Sampling from the Exponential Power - * Distribution", Journal of the American Statistical Association, - * September 1980, Volume 75, Number 371, pages 683-686. - * - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough - */ - -gnm_float -random_exppow (gnm_float a, gnm_float b) -{ - if (b < 1) { - gnm_float u = random_01 (); - gnm_float v = random_gamma (1 / b, 1.0); - gnm_float z = a * powgnum (v, 1 / b) ; - - if (u > 0.5) - return z; - else - return -z; - } else if (b == 1) - return random_laplace (a); /* Laplace distribution */ - else if (b < 2) { - /* Use laplace distribution for rejection method */ - gnm_float x, y, h, ratio, u; - - /* Scale factor chosen by upper bound on ratio at b = 2 */ - gnm_float s = 1.4489; - do { - x = random_laplace (a); - y = random_laplace_pdf (x, a); - h = random_exppow_pdf (x, a, b); - ratio = h / (s * y); - u = random_01 (); - } while (u > ratio); - - return x ; - } else if (b == 2) /* Gaussian distribution */ - return random_gaussian (a / sqrtgnum (2.0)); - else { - /* Use gaussian for rejection method */ - gnm_float x, y, h, ratio, u; - const gnm_float sigma = a / sqrtgnum (2.0); - - /* Scale factor chosen by upper bound on ratio at b = infinity. - * This could be improved by using a rational function - * approximation to the bounding curve. */ - - gnm_float s = 2.4091 ; /* this is sqrt(pi) e / 2 */ - - do { - x = random_gaussian (sigma) ; - y = dnorm (x, 0.0, gnumabs (sigma), FALSE) ; - h = random_exppow_pdf (x, a, b) ; - ratio = h / (s * y) ; - u = random_01 (); - } while (u > ratio); - - return x; - } -} - -/* - * Generate a Gaussian tail-distributed random number. From the GNU - * Scientific library 1.1.1. - * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough - */ -gnm_float -random_gaussian_tail (gnm_float a, gnm_float sigma) -{ - /* - * Returns a gaussian random variable larger than a - * This implementation does one-sided upper-tailed deviates. - */ - - gnm_float s = a / sigma; - - if (s < 1) { - /* For small s, use a direct rejection method. The limit s < 1 - * can be adjusted to optimise the overall efficiency */ - - gnm_float x; - - do { - x = random_gaussian (1.0); - } while (x < s); - return x * sigma; - } else { - /* Use the "supertail" deviates from the last two steps - * of Marsaglia's rectangle-wedge-tail method, as described - * in Knuth, v2, 3rd ed, pp 123-128. (See also exercise 11, - * p139, and the solution, p586.) - */ - - gnm_float u, v, x; - - do { - u = random_01 (); - do { - v = random_01 (); - } while (v == 0.0); - x = sqrtgnum (s * s - 2 * loggnum (v)); - } while (x * u > s); - return x * sigma; - } -} - -/* - * Generate a Landau-distributed random number. From the GNU Scientific - * library 1.1.1. - * - * Copyright (C) 2001 David Morrison - * - * Adapted from the CERN library routines DENLAN, RANLAN, and DISLAN - * as described in http://consult.cern.ch/shortwrups/g110/top.html. - * Original author: K.S. K\"olbig. - * - * The distribution is given by the complex path integral, - * - * p(x) = (1/(2 pi i)) \int_{c-i\inf}^{c+i\inf} ds exp(s log(s) + x s) - * - * which can be converted into a real integral over [0,+\inf] - * - * p(x) = (1/pi) \int_0^\inf dt \exp(-t log(t) - x t) sin(pi t) - */ - -gnm_float -random_landau (void) -{ - static gnm_float F[982] = { - 00.000000, 00.000000, 00.000000, 00.000000, 00.000000, - -2.244733, -2.204365, -2.168163, -2.135219, -2.104898, - -2.076740, -2.050397, -2.025605, -2.002150, -1.979866, - -1.958612, -1.938275, -1.918760, -1.899984, -1.881879, - -1.864385, -1.847451, -1.831030, -1.815083, -1.799574, - -1.784473, -1.769751, -1.755383, -1.741346, -1.727620, - -1.714187, -1.701029, -1.688130, -1.675477, -1.663057, - -1.650858, -1.638868, -1.627078, -1.615477, -1.604058, - -1.592811, -1.581729, -1.570806, -1.560034, -1.549407, - -1.538919, -1.528565, -1.518339, -1.508237, -1.498254, - -1.488386, -1.478628, -1.468976, -1.459428, -1.449979, - -1.440626, -1.431365, -1.422195, -1.413111, -1.404112, - -1.395194, -1.386356, -1.377594, -1.368906, -1.360291, - -1.351746, -1.343269, -1.334859, -1.326512, -1.318229, - -1.310006, -1.301843, -1.293737, -1.285688, -1.277693, - -1.269752, -1.261863, -1.254024, -1.246235, -1.238494, - -1.230800, -1.223153, -1.215550, -1.207990, -1.200474, - -1.192999, -1.185566, -1.178172, -1.170817, -1.163500, - -1.156220, -1.148977, -1.141770, -1.134598, -1.127459, - -1.120354, -1.113282, -1.106242, -1.099233, -1.092255, - -1.085306, -1.078388, -1.071498, -1.064636, -1.057802, - -1.050996, -1.044215, -1.037461, -1.030733, -1.024029, - -1.017350, -1.010695, -1.004064, -0.997456, -0.990871, - -0.984308, -0.977767, -0.971247, -0.964749, -0.958271, - -0.951813, -0.945375, -0.938957, -0.932558, -0.926178, - -0.919816, -0.913472, -0.907146, -0.900838, -0.894547, - -0.888272, -0.882014, -0.875773, -0.869547, -0.863337, - -0.857142, -0.850963, -0.844798, -0.838648, -0.832512, - -0.826390, -0.820282, -0.814187, -0.808106, -0.802038, - -0.795982, -0.789940, -0.783909, -0.777891, -0.771884, - -0.765889, -0.759906, -0.753934, -0.747973, -0.742023, - -0.736084, -0.730155, -0.724237, -0.718328, -0.712429, - -0.706541, -0.700661, -0.694791, -0.688931, -0.683079, - -0.677236, -0.671402, -0.665576, -0.659759, -0.653950, - -0.648149, -0.642356, -0.636570, -0.630793, -0.625022, - -0.619259, -0.613503, -0.607754, -0.602012, -0.596276, - -0.590548, -0.584825, -0.579109, -0.573399, -0.567695, - -0.561997, -0.556305, -0.550618, -0.544937, -0.539262, - -0.533592, -0.527926, -0.522266, -0.516611, -0.510961, - -0.505315, -0.499674, -0.494037, -0.488405, -0.482777, - -0.477153, -0.471533, -0.465917, -0.460305, -0.454697, - -0.449092, -0.443491, -0.437893, -0.432299, -0.426707, - -0.421119, -0.415534, -0.409951, -0.404372, -0.398795, - -0.393221, -0.387649, -0.382080, -0.376513, -0.370949, - -0.365387, -0.359826, -0.354268, -0.348712, -0.343157, - -0.337604, -0.332053, -0.326503, -0.320955, -0.315408, - -0.309863, -0.304318, -0.298775, -0.293233, -0.287692, - -0.282152, -0.276613, -0.271074, -0.265536, -0.259999, - -0.254462, -0.248926, -0.243389, -0.237854, -0.232318, - -0.226783, -0.221247, -0.215712, -0.210176, -0.204641, - -0.199105, -0.193568, -0.188032, -0.182495, -0.176957, - -0.171419, -0.165880, -0.160341, -0.154800, -0.149259, - -0.143717, -0.138173, -0.132629, -0.127083, -0.121537, - -0.115989, -0.110439, -0.104889, -0.099336, -0.093782, - -0.088227, -0.082670, -0.077111, -0.071550, -0.065987, - -0.060423, -0.054856, -0.049288, -0.043717, -0.038144, - -0.032569, -0.026991, -0.021411, -0.015828, -0.010243, - -0.004656, 00.000934, 00.006527, 00.012123, 00.017722, - 00.023323, 00.028928, 00.034535, 00.040146, 00.045759, - 00.051376, 00.056997, 00.062620, 00.068247, 00.073877, - 00.079511, 00.085149, 00.090790, 00.096435, 00.102083, - 00.107736, 00.113392, 00.119052, 00.124716, 00.130385, - 00.136057, 00.141734, 00.147414, 00.153100, 00.158789, - 00.164483, 00.170181, 00.175884, 00.181592, 00.187304, - 00.193021, 00.198743, 00.204469, 00.210201, 00.215937, - 00.221678, 00.227425, 00.233177, 00.238933, 00.244696, - 00.250463, 00.256236, 00.262014, 00.267798, 00.273587, - 00.279382, 00.285183, 00.290989, 00.296801, 00.302619, - 00.308443, 00.314273, 00.320109, 00.325951, 00.331799, - 00.337654, 00.343515, 00.349382, 00.355255, 00.361135, - 00.367022, 00.372915, 00.378815, 00.384721, 00.390634, - 00.396554, 00.402481, 00.408415, 00.414356, 00.420304, - 00.426260, 00.432222, 00.438192, 00.444169, 00.450153, - 00.456145, 00.462144, 00.468151, 00.474166, 00.480188, - 00.486218, 00.492256, 00.498302, 00.504356, 00.510418, - 00.516488, 00.522566, 00.528653, 00.534747, 00.540850, - 00.546962, 00.553082, 00.559210, 00.565347, 00.571493, - 00.577648, 00.583811, 00.589983, 00.596164, 00.602355, - 00.608554, 00.614762, 00.620980, 00.627207, 00.633444, - 00.639689, 00.645945, 00.652210, 00.658484, 00.664768, - 00.671062, 00.677366, 00.683680, 00.690004, 00.696338, - 00.702682, 00.709036, 00.715400, 00.721775, 00.728160, - 00.734556, 00.740963, 00.747379, 00.753807, 00.760246, - 00.766695, 00.773155, 00.779627, 00.786109, 00.792603, - 00.799107, 00.805624, 00.812151, 00.818690, 00.825241, - 00.831803, 00.838377, 00.844962, 00.851560, 00.858170, - 00.864791, 00.871425, 00.878071, 00.884729, 00.891399, - 00.898082, 00.904778, 00.911486, 00.918206, 00.924940, - 00.931686, 00.938446, 00.945218, 00.952003, 00.958802, - 00.965614, 00.972439, 00.979278, 00.986130, 00.992996, - 00.999875, 01.006769, 01.013676, 01.020597, 01.027533, - 01.034482, 01.041446, 01.048424, 01.055417, 01.062424, - 01.069446, 01.076482, 01.083534, 01.090600, 01.097681, - 01.104778, 01.111889, 01.119016, 01.126159, 01.133316, - 01.140490, 01.147679, 01.154884, 01.162105, 01.169342, - 01.176595, 01.183864, 01.191149, 01.198451, 01.205770, - 01.213105, 01.220457, 01.227826, 01.235211, 01.242614, - 01.250034, 01.257471, 01.264926, 01.272398, 01.279888, - 01.287395, 01.294921, 01.302464, 01.310026, 01.317605, - 01.325203, 01.332819, 01.340454, 01.348108, 01.355780, - 01.363472, 01.371182, 01.378912, 01.386660, 01.394429, - 01.402216, 01.410024, 01.417851, 01.425698, 01.433565, - 01.441453, 01.449360, 01.457288, 01.465237, 01.473206, - 01.481196, 01.489208, 01.497240, 01.505293, 01.513368, - 01.521465, 01.529583, 01.537723, 01.545885, 01.554068, - 01.562275, 01.570503, 01.578754, 01.587028, 01.595325, - 01.603644, 01.611987, 01.620353, 01.628743, 01.637156, - 01.645593, 01.654053, 01.662538, 01.671047, 01.679581, - 01.688139, 01.696721, 01.705329, 01.713961, 01.722619, - 01.731303, 01.740011, 01.748746, 01.757506, 01.766293, - 01.775106, 01.783945, 01.792810, 01.801703, 01.810623, - 01.819569, 01.828543, 01.837545, 01.846574, 01.855631, - 01.864717, 01.873830, 01.882972, 01.892143, 01.901343, - 01.910572, 01.919830, 01.929117, 01.938434, 01.947781, - 01.957158, 01.966566, 01.976004, 01.985473, 01.994972, - 02.004503, 02.014065, 02.023659, 02.033285, 02.042943, - 02.052633, 02.062355, 02.072110, 02.081899, 02.091720, - 02.101575, 02.111464, 02.121386, 02.131343, 02.141334, - 02.151360, 02.161421, 02.171517, 02.181648, 02.191815, - 02.202018, 02.212257, 02.222533, 02.232845, 02.243195, - 02.253582, 02.264006, 02.274468, 02.284968, 02.295507, - 02.306084, 02.316701, 02.327356, 02.338051, 02.348786, - 02.359562, 02.370377, 02.381234, 02.392131, 02.403070, - 02.414051, 02.425073, 02.436138, 02.447246, 02.458397, - 02.469591, 02.480828, 02.492110, 02.503436, 02.514807, - 02.526222, 02.537684, 02.549190, 02.560743, 02.572343, - 02.583989, 02.595682, 02.607423, 02.619212, 02.631050, - 02.642936, 02.654871, 02.666855, 02.678890, 02.690975, - 02.703110, 02.715297, 02.727535, 02.739825, 02.752168, - 02.764563, 02.777012, 02.789514, 02.802070, 02.814681, - 02.827347, 02.840069, 02.852846, 02.865680, 02.878570, - 02.891518, 02.904524, 02.917588, 02.930712, 02.943894, - 02.957136, 02.970439, 02.983802, 02.997227, 03.010714, - 03.024263, 03.037875, 03.051551, 03.065290, 03.079095, - 03.092965, 03.106900, 03.120902, 03.134971, 03.149107, - 03.163312, 03.177585, 03.191928, 03.206340, 03.220824, - 03.235378, 03.250005, 03.264704, 03.279477, 03.294323, - 03.309244, 03.324240, 03.339312, 03.354461, 03.369687, - 03.384992, 03.400375, 03.415838, 03.431381, 03.447005, - 03.462711, 03.478500, 03.494372, 03.510328, 03.526370, - 03.542497, 03.558711, 03.575012, 03.591402, 03.607881, - 03.624450, 03.641111, 03.657863, 03.674708, 03.691646, - 03.708680, 03.725809, 03.743034, 03.760357, 03.777779, - 03.795300, 03.812921, 03.830645, 03.848470, 03.866400, - 03.884434, 03.902574, 03.920821, 03.939176, 03.957640, - 03.976215, 03.994901, 04.013699, 04.032612, 04.051639, - 04.070783, 04.090045, 04.109425, 04.128925, 04.148547, - 04.168292, 04.188160, 04.208154, 04.228275, 04.248524, - 04.268903, 04.289413, 04.310056, 04.330832, 04.351745, - 04.372794, 04.393982, 04.415310, 04.436781, 04.458395, - 04.480154, 04.502060, 04.524114, 04.546319, 04.568676, - 04.591187, 04.613854, 04.636678, 04.659662, 04.682807, - 04.706116, 04.729590, 04.753231, 04.777041, 04.801024, - 04.825179, 04.849511, 04.874020, 04.898710, 04.923582, - 04.948639, 04.973883, 04.999316, 05.024942, 05.050761, - 05.076778, 05.102993, 05.129411, 05.156034, 05.182864, - 05.209903, 05.237156, 05.264625, 05.292312, 05.320220, - 05.348354, 05.376714, 05.405306, 05.434131, 05.463193, - 05.492496, 05.522042, 05.551836, 05.581880, 05.612178, - 05.642734, 05.673552, 05.704634, 05.735986, 05.767610, - 05.799512, 05.831694, 05.864161, 05.896918, 05.929968, - 05.963316, 05.996967, 06.030925, 06.065194, 06.099780, - 06.134687, 06.169921, 06.205486, 06.241387, 06.277630, - 06.314220, 06.351163, 06.388465, 06.426130, 06.464166, - 06.502578, 06.541371, 06.580553, 06.620130, 06.660109, - 06.700495, 06.741297, 06.782520, 06.824173, 06.866262, - 06.908795, 06.951780, 06.995225, 07.039137, 07.083525, - 07.128398, 07.173764, 07.219632, 07.266011, 07.312910, - 07.360339, 07.408308, 07.456827, 07.505905, 07.555554, - 07.605785, 07.656608, 07.708035, 07.760077, 07.812747, - 07.866057, 07.920019, 07.974647, 08.029953, 08.085952, - 08.142657, 08.200083, 08.258245, 08.317158, 08.376837, - 08.437300, 08.498562, 08.560641, 08.623554, 08.687319, - 08.751955, 08.817481, 08.883916, 08.951282, 09.019600, - 09.088889, 09.159174, 09.230477, 09.302822, 09.376233, - 09.450735, 09.526355, 09.603118, 09.681054, 09.760191, - 09.840558, 09.922186, 10.005107, 10.089353, 10.174959, - 10.261958, 10.350389, 10.440287, 10.531693, 10.624646, - 10.719188, 10.815362, 10.913214, 11.012789, 11.114137, - 11.217307, 11.322352, 11.429325, 11.538283, 11.649285, - 11.762390, 11.877664, 11.995170, 12.114979, 12.237161, - 12.361791, 12.488946, 12.618708, 12.751161, 12.886394, - 13.024498, 13.165570, 13.309711, 13.457026, 13.607625, - 13.761625, 13.919145, 14.080314, 14.245263, 14.414134, - 14.587072, 14.764233, 14.945778, 15.131877, 15.322712, - 15.518470, 15.719353, 15.925570, 16.137345, 16.354912, - 16.578520, 16.808433, 17.044929, 17.288305, 17.538873, - 17.796967, 18.062943, 18.337176, 18.620068, 18.912049, - 19.213574, 19.525133, 19.847249, 20.180480, 20.525429, - 20.882738, 21.253102, 21.637266, 22.036036, 22.450278, - 22.880933, 23.329017, 23.795634, 24.281981, 24.789364, - 25.319207, 25.873062, 26.452634, 27.059789, 27.696581, - 28.365274, 29.068370, 29.808638, 30.589157, 31.413354, - 32.285060, 33.208568, 34.188705, 35.230920, 36.341388, - 37.527131, 38.796172, 40.157721, 41.622399, 43.202525, - 44.912465, 46.769077, 48.792279, 51.005773, 53.437996, - 56.123356, 59.103894 - }; - gnm_float X, U, V, RANLAN; - int I, i; - - do { - X = random_01 (); - } while (X == 0.0); - U = 1000.0 * X; - i = U; - U = U - i; - - /* Account for difference between C and Fortran convention for lower - * bound. */ - I = i - 1; - - if (I >= 70 && I <= 800) - RANLAN = F[I] + U * (F[I + 1] - F[I]); - else if (I >= 7 && I <= 980) - RANLAN = F[I] + U * (F[I + 1] - F[I] - - 0.25 * (1 - U) * (F[I + 2] - F[I + 1] - - F[I] + F[I - 1])); - else if (I < 7) { - V = loggnum (X); - U = 1 / V; - RANLAN = ((0.99858950 + (3.45213058E1 + 1.70854528E1 * U) * U) / - (1 + (3.41760202E1 + 4.01244582 * U) * U)) * - ( -loggnum ( -0.91893853 - V) - 1); - } else { - U = 1 - X; - V = U * U; - if (X <= 0.999) - RANLAN = (1.00060006 + 2.63991156E2 * - U + 4.37320068E3 * V) / - ((1 + 2.57368075E2 * U + 3.41448018E3 * V) * U); - else - RANLAN = (1.00001538 + 6.07514119E3 * U + - 7.34266409E5 * V) / - ((1 + 6.06511919E3 * U + 6.94021044E5 * V) * U); - } - - return RANLAN; -} - - -/* ------------------------------------------------------------------------ */ - -/* - * Generate 2^n being careful not to overflow - */ -gnm_float -gpow2 (int n) -{ -#ifdef NEED_FAKE_LDEXPGNUM - g_assert (FLT_RADIX == 2); - - /* gpow2 is used in our implementation of ldexpgnum. */ - if (n >= DBL_MIN_EXP && n <= DBL_MAX_EXP) - return (gnm_float) ldexp (1.0, n); - else if (n >= GNUM_MIN_EXP && n <= GNUM_MAX_EXP) { - gnm_float res = 1.0; - gnm_float p = (n >= 0) ? GNM_const (2) : GNM_const (0.5); - - n = abs (n); - while (n > 0) { - if (n & 1) res *= p; - p *= p; - n >>= 1; - } - return res; - } else - return (n > 0) ? gnm_pinf : ML_UNDERFLOW; -#else - return ldexpgnum (1.0, n); -#endif -} - - -/* - * Generate 10^n being careful not to overflow - */ -gnm_float -gpow10 (int n) -{ - gnm_float res = 1.0; - gnm_float p; - const int maxn = GNUM_MAX_EXP; - - static const gnm_float fast[] = { - GNM_const (1e-20), - GNM_const (1e-19), - GNM_const (1e-18), - GNM_const (1e-17), - GNM_const (1e-16), - GNM_const (1e-15), - GNM_const (1e-14), - GNM_const (1e-13), - GNM_const (1e-12), - GNM_const (1e-11), - GNM_const (1e-10), - GNM_const (1e-9), - GNM_const (1e-8), - GNM_const (1e-7), - GNM_const (1e-6), - GNM_const (1e-5), - GNM_const (1e-4), - GNM_const (1e-3), - GNM_const (1e-2), - GNM_const (1e-1), - GNM_const (1e0), - GNM_const (1e1), - GNM_const (1e2), - GNM_const (1e3), - GNM_const (1e4), - GNM_const (1e5), - GNM_const (1e6), - GNM_const (1e7), - GNM_const (1e8), - GNM_const (1e9), - GNM_const (1e10), - GNM_const (1e11), - GNM_const (1e12), - GNM_const (1e13), - GNM_const (1e14), - GNM_const (1e15), - GNM_const (1e16), - GNM_const (1e17), - GNM_const (1e18), - GNM_const (1e19), - GNM_const (1e20) - }; - - if (n >= -20 && n <= 20) - return (fast + 20)[n]; - - if (n >= 0) { - p = 10.0; - n = (n > maxn) ? maxn : n; - } else { - p = GNM_const (0.1); - /* Note carefully that we avoid overflow. */ - n = (n < -maxn) ? maxn : -n; - } - while (n > 0) { - if (n & 1) res *= p; - p *= p; - n >>= 1; - } - return res; -} - - -/* - * Euclid's Algorithm. Assumes non-negative numbers. - */ -int -gcd (int a, int b) -{ - while (b != 0) { - int r = a % b; - a = b; - b = r; - } - return a; -} - - -gnm_float -combin (int n, int k) -{ - if (n >= 15) { - return floorgnum (0.5 + expgnum (lgammagnum (n + 1) - lgammagnum (k + 1) - lgammagnum (n - k + 1))); - } else { - return fact (n) / fact (k) / fact (n - k); - } -} - -gnm_float -permut (int n, int k) -{ - if (n >= 15) { - return floorgnum (0.5 + expgnum (lgammagnum (n + 1) - lgammagnum (n - k + 1))); - } else { - return fact (n) / fact (n - k); - } -} - -gnm_float -fact (int n) -{ - static gnm_float table[100]; - static gboolean init = FALSE; - - if (n < 0) - return gnm_nan; - - if (n < (int)G_N_ELEMENTS (table)) { - if (!init) { - int i; - table[0] = 1; - for (i = 1; i < (int)G_N_ELEMENTS (table); i++) - table[i] = table[i - 1] * i; - init = TRUE; - } - return table[n]; - } else - return floorgnum (0.5 + expgnum (lgammagnum (n + 1))); -} - -gnm_float -beta (gnm_float a, gnm_float b) -{ - int sign; - gnm_float absres = expgnum (lbeta3 (a, b, &sign)); - - return sign == -1 ? -absres : absres; -} - -gnm_float -lbeta3 (gnm_float a, gnm_float b, int *sign) -{ - int sign_a, sign_b, sign_ab; - gnm_float ab = a + b; - gnm_float res_a, res_b, res_ab; - - *sign = 1; - if (a > 0 && b > 0) - return lbeta (a, b); - -#ifdef IEEE_754 - if (isnangnum(ab)) - return ab; -#endif - - if ((a <= 0 && a == floorgnum (a)) || - (b <= 0 && b == floorgnum (b)) || - (ab <= 0 && ab == floorgnum (ab))) - return gnm_nan; - - res_a = lgamma_rgnum (a, &sign_a); - res_b = lgamma_rgnum (b, &sign_b); - res_ab = lgamma_rgnum (ab, &sign_ab); - - *sign = sign_a * sign_b * sign_ab; - return res_a + res_b - res_ab; -} - - -/* Calculate (1+x)^r accurately. */ -gnm_float -pow1p (gnm_float x, gnm_float y) -{ - if (gnumabs (x) > 0.5) - return powgnum (1 + x, y); - else - return expgnum (y * log1pgnum (x)); -} - -/* Calculate ((1+x)^r)-1 accurately. */ -gnm_float -pow1pm1 (gnm_float x, gnm_float y) -{ - if (x <= -1) - return powgnum (1 + x, y) - 1; - else - return expm1gnum (y * log1pgnum (x)); -} - - -/* - --------------------------------------------------------------------- - Matrix functions - --------------------------------------------------------------------- - */ - -/* Calculates the product of two matrixes. - */ -void -mmult (gnm_float *A, gnm_float *B, int cols_a, int rows_a, int cols_b, - gnm_float *product) -{ - gnm_float tmp; - int c, r, i; - - for (c = 0; c < cols_b; ++c) { - for (r = 0; r < rows_a; ++r) { - tmp = 0; - for (i = 0; i < cols_a; ++i) - tmp += A[r + i * rows_a] * B[i + c * cols_a]; - product[r + c * rows_a] = tmp; - } - } -} - -void -continued_fraction (gnm_float val, int max_denom, int *res_num, int *res_denom) -{ - int n1, n2, d1, d2; - gnm_float x, y; - - if (val < 0) { - continued_fraction (gnumabs (val), max_denom, res_num, res_denom); - *res_num = -*res_num; - return; - } - - n1 = 0; d1 = 1; - n2 = 1; d2 = 0; - - x = val; - y = 1; - - do { - int a = (int) (x / y); - gnm_float newy = x - a * y; - int n3, d3; - - if ((n2 && a > (INT_MAX - n1) / n2) || - (d2 && a > (INT_MAX - d1) / d2) || - a * d2 + d1 > max_denom) { - *res_num = n2; - *res_denom = d2; - return; - } - - n3 = a * n2 + n1; - d3 = a * d2 + d1; - - x = y; - y = newy; - - n1 = n2; n2 = n3; - d1 = d2; d2 = d3; - } while (y > 1e-10); - - *res_num = n2; - *res_denom = d2; -} - - -void -stern_brocot (float val, int max_denom, int *res_num, int *res_denom) -{ - int an = 0, ad = 1; - int bn = 1, bd = 1; - int n, d; - float sp, delta; - - while ((d = ad + bd) <= max_denom) { - sp = 1e-5 * d;/* Quick and dirty, do adaptive later */ - n = an + bn; - delta = val * d - n; - if (delta > sp) { - an = n; - ad = d; - } else if (delta < -sp) { - bn = n; - bd = d; - } else { - *res_num = n; - *res_denom = d; - return; - } - } - if (bd > max_denom || gnumabs (val * ad - an) < gnumabs (val * bd - bn)) { - *res_num = an; - *res_denom = ad; - } else { - *res_num = bn; - *res_denom = bd; - } -} diff --git a/lib/goffice/split/mathfunc.h b/lib/goffice/split/mathfunc.h deleted file mode 100644 index af9b1f4a6d..0000000000 --- a/lib/goffice/split/mathfunc.h +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef GNUMERIC_MATHFUNC_H -#define GNUMERIC_MATHFUNC_H - -#include "numbers.h" -#include -#include - -#ifdef qgamma -/* It was reported that mips-sgi-irix6.5 has a weird and conflicting define - for qgamma. See bug 1689. */ -#warning "Your is somewhat broken; we'll work around that." -#undef qgamma -#endif - -#define M_PIgnum GNM_const(3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117) -#define M_PI_2gnum (M_PIgnum / 2) -/* The following are very good given a good compiler. */ -#define M_LN2gnum (loggnum (2)) -#define M_LN10gnum (loggnum (10)) -#define M_SQRT2gnum (sqrtgnum (2)) - -extern gnm_float gnm_nan; -extern gnm_float gnm_pinf; -extern gnm_float gnm_ninf; - -/* ------------------------------------------------------------------------- */ - -gnm_float gnumeric_add_epsilon (gnm_float x); -gnm_float gnumeric_sub_epsilon (gnm_float x); -gnm_float gnumeric_fake_floor (gnm_float x); -gnm_float gnumeric_fake_ceil (gnm_float x); -gnm_float gnumeric_fake_round (gnm_float x); -gnm_float gnumeric_fake_trunc (gnm_float x); - -/* ------------------------------------------------------------------------- */ - -gnm_float log1pmx (gnm_float x); -gnm_float swap_log_tail (gnm_float lp); -gnm_float lgamma1p (gnm_float a); -gnm_float pow1p (gnm_float x, gnm_float y); -gnm_float pow1pm1 (gnm_float x, gnm_float y); -gnm_float gnm_trunc (gnm_float x); -gnm_float logfbit (gnm_float x); - -gnm_float beta (gnm_float a, gnm_float b); -gnm_float lbeta3 (gnm_float a, gnm_float b, int *sign); - -gnm_float bessel_i (gnm_float x, gnm_float alpha, gnm_float expo); -gnm_float bessel_k (gnm_float x, gnm_float alpha, gnm_float expo); - -/* "d": density. */ -/* "p": distribution function. */ -/* "q": inverse distribution function. */ - -/* The normal distribution. */ -gnm_float dnorm (gnm_float x, gnm_float mu, gnm_float sigma, gboolean give_log); -gnm_float pnorm (gnm_float x, gnm_float mu, gnm_float sigma, gboolean lower_tail, gboolean log_p); -gnm_float qnorm (gnm_float p, gnm_float mu, gnm_float sigma, gboolean lower_tail, gboolean log_p); - -/* The log-normal distribution. */ -gnm_float plnorm (gnm_float x, gnm_float logmean, gnm_float logsd, gboolean lower_tail, gboolean log_p); -gnm_float qlnorm (gnm_float x, gnm_float logmean, gnm_float logsd, gboolean lower_tail, gboolean log_p); - -/* The gamma distribution. */ -gnm_float dgamma (gnm_float x, gnm_float shape, gnm_float scale, gboolean give_log); -gnm_float pgamma (gnm_float x, gnm_float p, gnm_float scale, gboolean lower_tail, gboolean log_p); -gnm_float qgamma (gnm_float p, gnm_float alpha, gnm_float scale, gboolean lower_tail, gboolean log_p); - -/* The beta distribution. */ -gnm_float dbeta (gnm_float x, gnm_float a, gnm_float b, gboolean give_log); -gnm_float pbeta (gnm_float x, gnm_float pin, gnm_float qin, gboolean lower_tail, gboolean log_p); -gnm_float qbeta (gnm_float alpha, gnm_float p, gnm_float q, gboolean lower_tail, gboolean log_p); - -/* The t distribution. */ -gnm_float dt (gnm_float x, gnm_float n, gboolean give_log); -gnm_float pt (gnm_float x, gnm_float n, gboolean lower_tail, gboolean log_p); -gnm_float qt (gnm_float p, gnm_float ndf, gboolean lower_tail, gboolean log_p); - -/* The F distribution. */ -gnm_float pf (gnm_float x, gnm_float n1, gnm_float n2, gboolean lower_tail, gboolean log_p); -gnm_float qf (gnm_float x, gnm_float n1, gnm_float n2, gboolean lower_tail, gboolean log_p); - -/* The chi-squared distribution. */ -gnm_float pchisq (gnm_float x, gnm_float df, gboolean lower_tail, gboolean log_p); -gnm_float qchisq (gnm_float p, gnm_float df, gboolean lower_tail, gboolean log_p); - -/* The Weibull distribution. */ -gnm_float dweibull (gnm_float x, gnm_float shape, gnm_float scale, gboolean give_log); -gnm_float pweibull (gnm_float x, gnm_float shape, gnm_float scale, gboolean lower_tail, gboolean log_p); - -/* The Poisson distribution. */ -gnm_float dpois (gnm_float x, gnm_float lambda, gboolean give_log); -gnm_float ppois (gnm_float x, gnm_float lambda, gboolean lower_tail, gboolean log_p); -gnm_float qpois (gnm_float p, gnm_float lambda, gboolean lower_tail, gboolean log_p); - -/* The exponential distribution. */ -gnm_float dexp (gnm_float x, gnm_float scale, gboolean give_log); -gnm_float pexp (gnm_float x, gnm_float scale, gboolean lower_tail, gboolean log_p); - -/* Binomial distribution. */ -gnm_float dbinom (gnm_float x, gnm_float n, gnm_float p, gboolean give_log); -gnm_float pbinom (gnm_float x, gnm_float n, gnm_float p, gboolean lower_tail, gboolean log_p); -gnm_float qbinom (gnm_float x, gnm_float n, gnm_float p, gboolean lower_tail, gboolean log_p); - -/* Negative binomial distribution. */ -gnm_float dnbinom (gnm_float x, gnm_float n, gnm_float p, gboolean give_log); -gnm_float pnbinom (gnm_float x, gnm_float n, gnm_float p, gboolean lower_tail, gboolean log_p); -gnm_float qnbinom (gnm_float p, gnm_float n, gnm_float pr, gboolean lower_tail, gboolean log_p); - -/* Hyper-geometrical distribution. */ -gnm_float dhyper (gnm_float x, gnm_float r, gnm_float b, gnm_float n, gboolean give_log); -gnm_float phyper (gnm_float x, gnm_float NR, gnm_float NB, gnm_float n, gboolean lower_tail, gboolean log_p); - -/* Geometrical distribution. */ -gnm_float dgeom (gnm_float x, gnm_float p, gboolean give_log); -gnm_float pgeom (gnm_float x, gnm_float p, gboolean lower_tail, gboolean log_p); - -/* Cauchy distribution. */ -gnm_float dcauchy (gnm_float x, gnm_float location, gnm_float scale, gboolean give_log); -gnm_float pcauchy (gnm_float x, gnm_float location, gnm_float scale, gboolean lower_tail, gboolean log_p); - -/* Random number generation. */ -gnm_float random_01 (void); -gnm_float random_poisson (gnm_float lambda); -gnm_float random_binomial (gnm_float p, int trials); -gnm_float random_negbinom (gnm_float p, int f); -gnm_float random_exponential (gnm_float b); -gnm_float random_bernoulli (gnm_float p); -gnm_float random_normal (void); -gnm_float random_cauchy (gnm_float a); -gnm_float random_lognormal (gnm_float zeta, gnm_float sigma); -gnm_float random_weibull (gnm_float a, gnm_float b); -gnm_float random_laplace (gnm_float a); -gnm_float random_rayleigh (gnm_float sigma); -gnm_float random_rayleigh_tail (gnm_float a, gnm_float sigma); -gnm_float random_gamma (gnm_float a, gnm_float b); -gnm_float random_pareto (gnm_float a, gnm_float b); -gnm_float random_fdist (gnm_float nu1, gnm_float nu2); -gnm_float random_beta (gnm_float a, gnm_float b); -gnm_float random_logistic (gnm_float a); -gnm_float random_geometric (gnm_float p); -gnm_float random_hypergeometric (unsigned int n1, unsigned int n2, - unsigned int t); -gnm_float random_logarithmic (gnm_float p); -gnm_float random_chisq (gnm_float nu); -gnm_float random_tdist (gnm_float nu); -gnm_float random_gumbel1 (gnm_float a, gnm_float b); -gnm_float random_gumbel2 (gnm_float a, gnm_float b); -gnm_float random_levy (gnm_float c, gnm_float alpha); -gnm_float random_levy_skew (gnm_float c, gnm_float alpha, - gnm_float beta); -gnm_float random_exppow (gnm_float a, gnm_float b); -gnm_float random_landau (void); -gnm_float random_gaussian_tail (gnm_float a, gnm_float sigma); - -/* The probability density functions. */ -gnm_float random_exppow_pdf (gnm_float x, gnm_float a, gnm_float b); -gnm_float random_laplace_pdf (gnm_float x, gnm_float a); - -/* ------------------------------------------------------------------------- */ - -/* Matrix functions. */ -void mmult (gnm_float *A, gnm_float *B, int cols_a, int rows_a, int cols_b, - gnm_float *product); - -/* ------------------------------------------------------------------------- */ - -/* Misc. */ -gnm_float gpow10 (int n); -gnm_float gpow2 (int n); -int gcd (int a, int b); -gnm_float combin (int n, int k); -gnm_float permut (int n, int k); -gnm_float fact (int n); - -/* ------------------------------------------------------------------------- */ - -void continued_fraction (gnm_float val, int max_denom, int *res_num, int *res_denom); -void stern_brocot (float val, int max_denom, int *res_num, int *res_denom); - -/* ------------------------------------------------------------------------- */ - -void mathfunc_init (void); - -/* ------------------------------------------------------------------------- */ - -#endif diff --git a/lib/goffice/split/module-plugin-defs.h b/lib/goffice/split/module-plugin-defs.h deleted file mode 100644 index 09118de542..0000000000 --- a/lib/goffice/split/module-plugin-defs.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef GNUMERIC_MODULE_PLUGIN_DEFS_H -#define GNUMERIC_MODULE_PLUGIN_DEFS_H - -//#include /* for wbcg typedef */ -// +jsled -- CNP from gui-gnumeric.h -// typedef struct _WorkbookControl WorkbookControl; -// -jsled -#include -//#include -- not used? -#include -// +jsled -- CNP from application.h -//typedef struct _GnmAction GnmAction; -// -jsled - -/* - * Every plugin should put somewhere a line with: - * GNUMERIC_MODULE_PLUGIN_INFO_DECL; - */ -#define GNUMERIC_MODULE_PLUGIN_INFO_DECL ModulePluginFileStruct plugin_file_struct = GNUMERIC_MODULE_PLUGIN_FILE_STRUCT_INITIALIZER - -/* This type is intended for use with "ui" service. - * Plugins should define arrays of structs of the form: - * ModulePluginUIActions _actions[] = { ... }; - */ -typedef struct { - char const *name; - void (*handler) (GnmAction const *action, WorkbookControl *wbc); -} ModulePluginUIActions; - -/* function executed to activate "general" service */ -void plugin_init_general (ErrorInfo **ret_error); -/* function executed to deactivate "general" service */ -void plugin_cleanup_general (ErrorInfo **ret_error); - -/* optional function executed immediately after loading a plugin */ -void plugin_init (void); -/* optional function executed before unloading a plugin */ -void plugin_cleanup (void); - - -#ifdef PLUGIN_ID - -static GnmPlugin *gnm_get_current_plugin (void) -{ - static GnmPlugin *plugin = NULL; - if (plugin == NULL) plugin = plugins_get_plugin_by_id (PLUGIN_ID); - return plugin; -} -#define PLUGIN (gnm_get_current_plugin ()) - -/* Use this macro for defining types inside plugins */ -#define PLUGIN_CLASS(name, prefix, class_init, instance_init, parent_type) \ -GType \ -prefix ## _get_type (void) \ -{ \ - GType type = 0; \ - if (type == 0) { \ - static GTypeInfo const object_info = { \ - sizeof (name ## Class), \ - (GBaseInitFunc) NULL, \ - (GBaseFinalizeFunc) NULL, \ - (GClassInitFunc) class_init, \ - (GClassFinalizeFunc) NULL, \ - NULL, /* class_data */ \ - sizeof (name), \ - 0, /* n_preallocs */ \ - (GInstanceInitFunc) instance_init, \ - NULL \ - }; \ - type = g_type_module_register_type ( \ - G_TYPE_MODULE (gnm_get_current_plugin ()), parent_type, #name, \ - &object_info, 0); \ - } \ - return type; \ -} - -#endif - - -/* All fields in this structure are PRIVATE. */ -typedef struct { - guint32 magic_number; - gchar version[64]; -} ModulePluginFileStruct; - -// +jsled -- @@fixme; gnucash version, I guess. -#define GNUMERIC_VERSION "9.8.7" -// -jsled -#define GNUMERIC_MODULE_PLUGIN_MAGIC_NUMBER 0x476e756d -#define GNUMERIC_MODULE_PLUGIN_FILE_STRUCT_INITIALIZER {GNUMERIC_MODULE_PLUGIN_MAGIC_NUMBER, GNUMERIC_VERSION} - -#endif /* GNUMERIC_MODULE_PLUGIN_DEFS_H */ diff --git a/lib/goffice/split/mstyle.c b/lib/goffice/split/mstyle.c deleted file mode 100644 index e3e96a7c7e..0000000000 --- a/lib/goffice/split/mstyle.c +++ /dev/null @@ -1,1786 +0,0 @@ -/* vim: set sw=8: */ -/* - * GnmStyle.c: The guts of the style engine. - * - * Authors: - * Michael Meeks - * Almer S. Tigelaar - * Jody Goldberg - * Morten Welinder - */ -#include -#include "gnumeric.h" -#include "mstyle.h" - -#include "str.h" -#include "style-border.h" -#include "style-color.h" -//#include "validation.h" -//#include "pattern.h" -#include "format.h" -//#include "sheet-style.h" -#include "application.h" -#include "gutils.h" -#include "gnumeric-gconf.h" - -#include - -#ifndef USE_MSTYLE_POOL -#define USE_MSTYLE_POOL 1 -#endif - -#if USE_MSTYLE_POOL -/* Memory pool for mstyles. */ -static GnmMemChunk *mstyle_pool; -#define CHUNK_ALLOC(T,p) ((T*)gnm_mem_chunk_alloc (p)) -#define CHUNK_ALLOC0(T,p) ((T*)gnm_mem_chunk_alloc0 (p)) -#define CHUNK_FREE(p,v) gnm_mem_chunk_free ((p), (v)) -#else -#define CHUNK_ALLOC(T,c) g_new (T,1) -#define CHUNK_ALLOC0(T,c) g_new0 (T,1) -#define CHUNK_FREE(p,v) g_free ((v)) -#endif - -typedef struct { - MStyleElementType type; - union { - union { - GnmColor *any; - GnmColor *fore; - GnmColor *back; - GnmColor *pattern; - } color; - union { - GnmBorder *top; - GnmBorder *bottom; - GnmBorder *left; - GnmBorder *right; - GnmBorder *diagonal; - GnmBorder *rev_diagonal; - - /* Used for loading */ - GnmBorder *any; - } border; - guint32 pattern; - - union { - GnmString *name; - gboolean bold; - gboolean italic; - StyleUnderlineType underline; - gboolean strikethrough; - float size; - } font; - GnmFormat *format; - union { - guint16 v; - guint16 h; - } align; - int indent; - int rotation; - gboolean wrap_text; - gboolean shrink_to_fit; - gboolean content_locked; - gboolean content_hidden; - - GnmValidation *validation; - GnmHLink *hlink; - GnmInputMsg *input_msg; - - /* Convenience members */ - gpointer any_pointer; - gboolean any_boolean; - float any_float; - guint16 any_guint16; - guint32 any_guint32; - } u; -} MStyleElement; - -struct _GnmStyle { - guint32 ref_count; - guint32 link_count; - Sheet *linked_sheet; - MStyleElement elements[MSTYLE_ELEMENT_MAX]; - PangoAttrList *pango_attrs; - double pango_attrs_zoom; - GnmFont *font; - double font_zoom; -}; - -#define MSTYLE_ANY_COLOR MSTYLE_COLOR_FORE: \ - case MSTYLE_COLOR_BACK: \ - case MSTYLE_COLOR_PATTERN - -#define MSTYLE_ANY_BORDER MSTYLE_BORDER_TOP: \ - case MSTYLE_BORDER_BOTTOM: \ - case MSTYLE_BORDER_LEFT: \ - case MSTYLE_BORDER_RIGHT: \ - case MSTYLE_BORDER_DIAGONAL: \ - case MSTYLE_BORDER_REV_DIAGONAL - -#define MSTYLE_ANY_POINTER MSTYLE_FONT_NAME: \ - case MSTYLE_FORMAT: \ - case MSTYLE_VALIDATION: \ - case MSTYLE_HLINK: \ - case MSTYLE_INPUT_MSG - -#define MSTYLE_ANY_BOOLEAN MSTYLE_FONT_BOLD: \ - case MSTYLE_FONT_ITALIC: \ - case MSTYLE_FONT_STRIKETHROUGH: \ - case MSTYLE_WRAP_TEXT:\ - case MSTYLE_SHRINK_TO_FIT:\ - case MSTYLE_CONTENT_LOCKED:\ - case MSTYLE_CONTENT_HIDDEN - -#define MSTYLE_ANY_GUINT16 MSTYLE_ALIGN_V: \ - case MSTYLE_ALIGN_H - -#define MSTYLE_ANY_GUINT32 MSTYLE_PATTERN: \ - case MSTYLE_ROTATION - -#define MSTYLE_ANY_FLOAT MSTYLE_FONT_SIZE - - -static const char * -mstyle_names[MSTYLE_ELEMENT_MAX] = { - "--UnSet--", - "--Conflict--", - "Color.Back", - "Color.Pattern", - "Border.Top", - "Border.Bottom", - "Border.Left", - "Border.Right", - "Border.RevDiagonal", - "Border.Diagonal", - "Pattern", - "--MaxBlank--", - "Color.Fore", - "Font.Name", - "Font.Bold", - "Font.Italic", - "Font.Underline", - "Font.Strikethrough", - "Font.Size", - "Format", - "Align.v", - "Align.h", - "Indent", - "Rotation", - "WrapText", - "ShrinkToFit", - "Content.Locked", - "Content.Hidden", - "Validation", - "Hyper Link", - "Input Msg" -}; - -/* Some ref/link count debugging */ -#if 0 -#define d(arg) printf arg -#else -#define d(arg) do { } while (0) -#endif - -static guint -mstyle_hash_internal (gconstpointer st, int i) -{ - const GnmStyle *mstyle = (const GnmStyle *)st; - guint32 hash = 0; - - while (i-- > (MSTYLE_ELEMENT_CONFLICT + 1)) { - const MStyleElement *e = &mstyle->elements[i]; - hash = (hash << 7) ^ (hash >> (sizeof (hash) * 8 - 7)); - switch (i) { - case MSTYLE_ANY_COLOR: - /* auto colours break things */ - if (!e->u.color.any->is_auto) - hash = hash ^ GPOINTER_TO_UINT (e->u.color.any); - break; - case MSTYLE_ANY_BORDER: - hash = hash ^ GPOINTER_TO_UINT (e->u.border.any); - break; - case MSTYLE_ANY_POINTER: - /* - * FIXME FIXME FIXME - * Will someone please convince me that it is safe - * to use the raw pointers here? -- MW. - */ - hash = hash ^ GPOINTER_TO_UINT (e->u.any_pointer); - break; - case MSTYLE_ELEMENT_MAX_BLANK: /* A dummy element */ - break; - case MSTYLE_ANY_BOOLEAN: - if (e->u.any_boolean) - hash = hash ^ 0x1379; - break; - case MSTYLE_ANY_FLOAT: - hash = hash ^ ((int)(e->u.any_float * 97)); - break; - case MSTYLE_ANY_GUINT16: - hash = hash ^ e->u.any_guint16; - break; - case MSTYLE_ANY_GUINT32: - hash = hash ^ e->u.any_guint32; - break; - case MSTYLE_INDENT: - hash = hash ^ e->u.indent; - break; - case MSTYLE_FONT_UNDERLINE: - hash = hash ^ e->u.font.underline; - break; - -#ifndef DEBUG_SWITCH_ENUM - default: - g_assert_not_reached (); - break; -#endif - } - } - - return hash; -} - -guint -mstyle_hash_XL (gconstpointer st) -{ - return mstyle_hash_internal (st, MSTYLE_VALIDATION); -} - -guint -mstyle_hash (gconstpointer st) -{ - return mstyle_hash_internal (st, MSTYLE_ELEMENT_MAX); -} - - -static char * -mstyle_element_dump (const MStyleElement *e) -{ - GString *ans = g_string_new (NULL); - char *txt_ans; - - /* This leaks ans from above. Let's consider that a feature. */ - g_return_val_if_fail (e != NULL, g_strdup ("Duff element")); - - switch (e->type) { - case MSTYLE_ELEMENT_UNSET: - g_string_printf (ans, "\tUnset\n"); - break; - case MSTYLE_COLOR_BACK: - g_string_printf (ans, "\tbackground col %hx:%hx:%hx\n", - e->u.color.any->color.red, - e->u.color.any->color.green, - e->u.color.any->color.blue); - break; - case MSTYLE_COLOR_PATTERN: - g_string_printf (ans, "\tpattern col %hx:%hx:%hx\n", - e->u.color.any->color.red, - e->u.color.any->color.green, - e->u.color.any->color.blue); - break; - case MSTYLE_BORDER_TOP: - case MSTYLE_BORDER_BOTTOM: - case MSTYLE_BORDER_LEFT: - case MSTYLE_BORDER_RIGHT: - case MSTYLE_BORDER_DIAGONAL: - case MSTYLE_BORDER_REV_DIAGONAL: - if (e->u.border.any) - g_string_printf (ans, "\t%s %d\n", mstyle_names[e->type], e->u.border.any->line_type); - else - g_string_printf (ans, "\t%s blank\n", mstyle_names[e->type]); - break; - - case MSTYLE_PATTERN : - g_string_printf (ans, "\tpattern %d\n", e->u.pattern); - break; - - case MSTYLE_COLOR_FORE: - g_string_printf (ans, "\tforegnd col %hx:%hx:%hx\n", - e->u.color.any->color.red, - e->u.color.any->color.green, - e->u.color.any->color.blue); - break; - case MSTYLE_FONT_NAME: - g_string_printf (ans, "\tname '%s'\n", e->u.font.name->str); - break; - case MSTYLE_FONT_BOLD: - if (e->u.font.bold) - g_string_printf (ans, "\tbold\n"); - else - g_string_printf (ans, "\tnot bold\n"); - break; - case MSTYLE_FONT_ITALIC: - if (e->u.font.italic) - g_string_printf (ans, "\titalic\n"); - else - g_string_printf (ans, "\tnot italic\n"); - break; - case MSTYLE_FONT_UNDERLINE: - switch (e->u.font.underline) { - default : - case UNDERLINE_NONE : - g_string_printf (ans, "\tnot underline\n"); - case UNDERLINE_SINGLE : - g_string_printf (ans, "\tsingle underline\n"); - case UNDERLINE_DOUBLE : - g_string_printf (ans, "\tdouble underline\n"); - }; - break; - case MSTYLE_FONT_STRIKETHROUGH: - if (e->u.font.strikethrough) - g_string_printf (ans, "\tstrikethrough\n"); - else - g_string_printf (ans, "\tnot strikethrough\n"); - break; - case MSTYLE_FONT_SIZE: - g_string_printf (ans, "\tsize %f\n", e->u.font.size); - break; - - case MSTYLE_FORMAT: { - char *fmt = style_format_as_XL (e->u.format, TRUE); - g_string_printf (ans, "\tformat '%s'\n", fmt); - g_free (fmt); - break; - } - - case MSTYLE_ALIGN_V: - g_string_printf (ans, "\tvalign %hd\n", e->u.align.v); - break; - case MSTYLE_ALIGN_H: - g_string_printf (ans, "\thalign %hd\n", e->u.align.h); - break; - case MSTYLE_INDENT: - g_string_printf (ans, "\tindent %d\n", e->u.indent); - break; - case MSTYLE_ROTATION: - g_string_printf (ans, "\trotation %d\n", e->u.rotation); - break; - - case MSTYLE_WRAP_TEXT : - g_string_printf (ans, "\twrap text %d\n", e->u.wrap_text); - break; - case MSTYLE_SHRINK_TO_FIT : - g_string_printf (ans, "\tshrink to fit %d\n", e->u.shrink_to_fit); - break; - case MSTYLE_CONTENT_LOCKED : - g_string_printf (ans, "\tlocked %d\n", e->u.content_locked); - break; - case MSTYLE_CONTENT_HIDDEN : - g_string_printf (ans, "\thidden %d\n", e->u.content_hidden); - break; - case MSTYLE_VALIDATION : - g_string_printf (ans, "\tvalidation %p\n", e->u.validation); - break; - - case MSTYLE_HLINK : - g_string_printf (ans, "\thlink %p\n", e->u.hlink); - break; - - case MSTYLE_INPUT_MSG : - g_string_printf (ans, "\tinput msg %p\n", e->u.input_msg); - break; - - default: - g_string_printf (ans, "\t%s\n", mstyle_names[e->type]); - break; - } - - txt_ans = ans->str; - g_string_free (ans, FALSE); - - return txt_ans; -} - -static gboolean -mstyle_element_equal (MStyleElement const *a, - MStyleElement const *b) -{ - if ((a->type == MSTYLE_ELEMENT_UNSET || - b->type == MSTYLE_ELEMENT_UNSET) && a->type != b->type) - return FALSE; - - g_return_val_if_fail (a->type == b->type, FALSE); - - switch (a->type) { - case MSTYLE_ANY_COLOR: - return (a->u.color.any == b->u.color.any || - (a->u.color.any->is_auto && b->u.color.any->is_auto)); - case MSTYLE_ANY_BORDER: - return (a->u.border.any == b->u.border.any); - case MSTYLE_PATTERN: - return (a->u.pattern == b->u.pattern); - case MSTYLE_FONT_NAME: - return (a->u.font.name == b->u.font.name); - case MSTYLE_FONT_BOLD: - return (a->u.font.bold == b->u.font.bold); - case MSTYLE_FONT_ITALIC: - return (a->u.font.italic == b->u.font.italic); - case MSTYLE_FONT_UNDERLINE: - return (a->u.font.underline == b->u.font.underline); - case MSTYLE_FONT_STRIKETHROUGH: - return (a->u.font.strikethrough == b->u.font.strikethrough); - case MSTYLE_FONT_SIZE: - return (a->u.font.size == b->u.font.size); - case MSTYLE_FORMAT: - return (a->u.format == b->u.format); - case MSTYLE_ALIGN_V: - return (a->u.align.v == b->u.align.v); - case MSTYLE_ALIGN_H: - return (a->u.align.h == b->u.align.h); - case MSTYLE_INDENT: - return (a->u.indent == b->u.indent); - case MSTYLE_ROTATION: - return (a->u.rotation == b->u.rotation); - case MSTYLE_WRAP_TEXT: - return (a->u.wrap_text == b->u.wrap_text); - case MSTYLE_SHRINK_TO_FIT: - return (a->u.shrink_to_fit == b->u.shrink_to_fit); - case MSTYLE_CONTENT_LOCKED: - return (a->u.content_locked == b->u.content_locked); - case MSTYLE_CONTENT_HIDDEN: - return (a->u.content_hidden == b->u.content_hidden); - case MSTYLE_VALIDATION: - return (a->u.validation == b->u.validation); - case MSTYLE_HLINK: - return (a->u.hlink == b->u.hlink); - case MSTYLE_INPUT_MSG: - return (a->u.input_msg == b->u.input_msg); - default: - return TRUE; - } - - return FALSE; -} - -static inline MStyleElement -mstyle_element_ref (const MStyleElement *e) -{ - switch (e->type) { - case MSTYLE_ANY_COLOR: - style_color_ref (e->u.color.any); - break; - case MSTYLE_ANY_BORDER: - style_border_ref (e->u.border.any); - break; - case MSTYLE_FONT_NAME: - gnm_string_ref (e->u.font.name); - break; - case MSTYLE_FORMAT: - style_format_ref (e->u.format); - break; -#if 0 - case MSTYLE_VALIDATION: - if (e->u.validation) - validation_ref (e->u.validation); - break; -#endif //0 - case MSTYLE_HLINK: - if (e->u.hlink) - g_object_ref (G_OBJECT (e->u.hlink)); - break; - case MSTYLE_INPUT_MSG: - if (e->u.input_msg) - g_object_ref (G_OBJECT (e->u.input_msg)); - break; - default: - break; - } - return *e; -} - -static inline void -mstyle_element_unref (MStyleElement e) -{ - switch (e.type) { - case MSTYLE_ANY_COLOR: - style_color_unref (e.u.color.any); - break; - case MSTYLE_ANY_BORDER: - style_border_unref (e.u.border.any); - break; - case MSTYLE_FONT_NAME: - gnm_string_unref (e.u.font.name); - break; - case MSTYLE_FORMAT: - style_format_unref (e.u.format); - break; -#if 0 - case MSTYLE_VALIDATION: - if (e.u.validation) - validation_unref (e.u.validation); - break; -#endif // 0 - case MSTYLE_HLINK: - if (e.u.hlink) - g_object_unref (G_OBJECT (e.u.hlink)); - break; - case MSTYLE_INPUT_MSG: - if (e.u.input_msg) - g_object_unref (G_OBJECT (e.u.input_msg)); - break; - default: - break; - } -} - -/** - * mstyle_elements_compare: - * @a: style to be tagged - * @b: style to compare. - * - * Compares styles and tags conflicts into a. - **/ -static inline void -mstyle_elements_compare (MStyleElement *a, - const MStyleElement *b) -{ - int i; - - g_return_if_fail (a != NULL); - g_return_if_fail (b != NULL); - - for (i = 0; i < MSTYLE_ELEMENT_MAX; i++) { - if (b[i].type == MSTYLE_ELEMENT_UNSET || - b[i].type == MSTYLE_ELEMENT_CONFLICT || - a[i].type == MSTYLE_ELEMENT_CONFLICT) - continue; - if (a[i].type == MSTYLE_ELEMENT_UNSET) { - mstyle_element_ref (&b[i]); - a[i] = b[i]; - } else if (!mstyle_element_equal (a+i, b+i)) { - mstyle_element_unref (a[i]); - a[i].type = MSTYLE_ELEMENT_CONFLICT; - } - } - -} - -void -mstyle_compare (GnmStyle *a, const GnmStyle *b) -{ - mstyle_elements_compare (a->elements, - b->elements); -} - -static void -mstyle_elements_unref (MStyleElement *e) -{ - int i; - - if (e) - for (i = 0; i < MSTYLE_ELEMENT_MAX; i++) { - mstyle_element_unref (e[i]); - e[i].type = MSTYLE_ELEMENT_UNSET; - } -} - -static void -mstyle_elements_copy (GnmStyle *new_style, const GnmStyle *old_style) -{ - int i; - MStyleElement *ans; - const MStyleElement *e; - - e = old_style->elements; - ans = new_style->elements; - - for (i = 0; i < MSTYLE_ELEMENT_MAX; i++) { - mstyle_element_ref (&e[i]); - ans[i] = e[i]; - } -} - -static inline void -mstyle_pango_clear (GnmStyle *mstyle) -{ - if (mstyle->pango_attrs) { - pango_attr_list_unref (mstyle->pango_attrs); - mstyle->pango_attrs = NULL; - } -} - - -static inline void -mstyle_font_clear (GnmStyle *mstyle) -{ - if (mstyle->font) { - style_font_unref (mstyle->font); - mstyle->font = NULL; - } -} - - -GnmStyle * -mstyle_new (void) -{ - GnmStyle *style = CHUNK_ALLOC0 (GnmStyle, mstyle_pool); - - style->ref_count = 1; - style->link_count = 0; - style->linked_sheet = NULL; - style->pango_attrs = NULL; - style->font = NULL; - d(("new %p\n", style)); - - return style; -} - -GnmStyle * -mstyle_copy (const GnmStyle *style) -{ - GnmStyle *new_style = CHUNK_ALLOC (GnmStyle, mstyle_pool); - - new_style->ref_count = 1; - new_style->link_count = 0; - new_style->linked_sheet = NULL; - mstyle_elements_copy (new_style, style); - - if ((new_style->pango_attrs = style->pango_attrs)) - pango_attr_list_ref (new_style->pango_attrs); - if ((new_style->font = style->font)) { - style_font_ref (new_style->font); - new_style->font_zoom = style->font_zoom; - } - - d(("copy %p\n", new_style)); - return new_style; -} - -GnmStyle * -mstyle_copy_merge (const GnmStyle *orig, const GnmStyle *overlay) -{ - int i; - GnmStyle *res = CHUNK_ALLOC0 (GnmStyle, mstyle_pool); - - MStyleElement *res_e; - const MStyleElement *orig_e; - const MStyleElement *overlay_e; - - res->ref_count = 1; - res->link_count = 0; - res->linked_sheet = NULL; - res_e = res->elements; - orig_e = orig->elements; - overlay_e = overlay->elements; - - for (i = 0; i < MSTYLE_ELEMENT_MAX; i++) - res_e[i] = mstyle_element_ref ( - (overlay_e[i].type ? overlay_e : orig_e) + i); - - d(("copy merge %p\n", res)); - return res; -} - -/** - * mstyle_new_default: - * - * Return the default style, - * this should _never_ _ever_ have any of its elements - * set. - * - * Return value: the default style. - **/ - -GnmStyle * -mstyle_new_default (void) -{ - GnmStyle *mstyle = mstyle_new (); - - mstyle_set_font_name (mstyle, gnm_app_prefs->default_font.name); - mstyle_set_font_size (mstyle, gnm_app_prefs->default_font.size); - mstyle_set_font_bold (mstyle, gnm_app_prefs->default_font.is_bold); - mstyle_set_font_italic (mstyle, gnm_app_prefs->default_font.is_italic); - - mstyle_set_format_text (mstyle, "General"); - mstyle_set_align_v (mstyle, VALIGN_BOTTOM); - mstyle_set_align_h (mstyle, HALIGN_GENERAL); - mstyle_set_indent (mstyle, 0); - mstyle_set_rotation (mstyle, 0); - mstyle_set_wrap_text (mstyle, FALSE); - mstyle_set_shrink_to_fit (mstyle, FALSE); - mstyle_set_content_locked (mstyle, TRUE); - mstyle_set_content_hidden (mstyle, FALSE); - mstyle_set_font_uline (mstyle, UNDERLINE_NONE); - mstyle_set_font_strike (mstyle, FALSE); - - mstyle_set_hlink (mstyle, NULL); - mstyle_set_input_msg (mstyle, NULL); - mstyle_set_validation (mstyle, NULL); - - mstyle_set_color (mstyle, MSTYLE_COLOR_FORE, - style_color_black ()); - mstyle_set_color (mstyle, MSTYLE_COLOR_BACK, - style_color_white ()); - mstyle_set_color (mstyle, MSTYLE_COLOR_PATTERN, - style_color_black ()); - - /* To negate borders */ - mstyle_set_border (mstyle, MSTYLE_BORDER_TOP, - style_border_ref (style_border_none ())); - mstyle_set_border (mstyle, MSTYLE_BORDER_LEFT, - style_border_ref (style_border_none ())); - mstyle_set_border (mstyle, MSTYLE_BORDER_BOTTOM, - style_border_ref (style_border_none ())); - mstyle_set_border (mstyle, MSTYLE_BORDER_RIGHT, - style_border_ref (style_border_none ())); - mstyle_set_border (mstyle, MSTYLE_BORDER_DIAGONAL, - style_border_ref (style_border_none ())); - mstyle_set_border (mstyle, MSTYLE_BORDER_REV_DIAGONAL, - style_border_ref (style_border_none ())); - - /* This negates the back and pattern colors */ - mstyle_set_pattern (mstyle, 0); - - return mstyle; -} - -void -mstyle_ref (GnmStyle *style) -{ - g_return_if_fail (style->ref_count > 0); - - style->ref_count++; - d(("ref %p = %d\n", style, style->ref_count)); -} - -void -mstyle_unref (GnmStyle *style) -{ - g_return_if_fail (style->ref_count > 0); - - d(("unref %p = %d\n", style, style->ref_count-1)); - if (style->ref_count-- <= 1) { - g_return_if_fail (style->link_count == 0); - g_return_if_fail (style->linked_sheet == NULL); - - if (style->elements) - mstyle_elements_unref (style->elements); - mstyle_pango_clear (style); - mstyle_font_clear (style); - - CHUNK_FREE (mstyle_pool, style); - } -} - -/** - * Replace auto pattern color in style with sheet's auto pattern color. - * make_copy tells if we are allowed to modify the style in place or we must - * make a copy first. - */ -static GnmStyle * -link_pattern_color (GnmStyle *style, GnmColor *auto_color, gboolean make_copy) -{ - MStyleElementType etype = MSTYLE_COLOR_PATTERN; - GnmColor *pattern_color = style->elements[etype].u.color.any; - - if (pattern_color->is_auto && auto_color != pattern_color) { - style_color_ref (auto_color); - if (make_copy) { - GnmStyle *orig = style; - style = mstyle_copy (style); - mstyle_unref (orig); - } - mstyle_set_color (style, etype, auto_color); - } - return style; -} - -/** - * Replace auto border colors in style with sheet's auto pattern - * color. (pattern is *not* a typo.) - * make_copy tells if we are allowed to modify the style in place or we must - * make a copy first. - * - * FIXME: We conjecture that XL color 64 in border should change with the - * pattern, but not color 127. That distinction is not yet represented in - * our data structures. - */ -static GnmStyle * -link_border_colors (GnmStyle *style, GnmColor *auto_color, gboolean make_copy) -{ - GnmBorder *border; - GnmColor *color; - int i; - - for (i = MSTYLE_BORDER_TOP ; i <= MSTYLE_BORDER_DIAGONAL ; ++i) { - if (mstyle_is_element_set (style, i)) { - border = style->elements[i].u.border.any; - color = border->color; - if (color->is_auto && auto_color != color) { - GnmBorder *new_border; - StyleBorderOrientation orientation; - - switch (i) { - case MSTYLE_BORDER_LEFT: - case MSTYLE_BORDER_RIGHT: - orientation = STYLE_BORDER_VERTICAL; - break; - case MSTYLE_BORDER_REV_DIAGONAL: - case MSTYLE_BORDER_DIAGONAL: - orientation = STYLE_BORDER_DIAGONAL; - break; - case MSTYLE_BORDER_TOP: - case MSTYLE_BORDER_BOTTOM: - default: - orientation = STYLE_BORDER_HORIZONTAL; - break; - } - style_color_ref (auto_color); - new_border = style_border_fetch ( - border->line_type, auto_color, - orientation); - - if (make_copy) { - GnmStyle *orig = style; - style = mstyle_copy (style); - mstyle_unref (orig); - make_copy = FALSE; - } - mstyle_set_border (style, i, new_border); - } - } - } - return style; -} - -/** - * mstyle_link_sheet : - * @style : - * @sheet : - * - * ABSORBS a reference to the style and sets the link count to 1. - * - * Where auto pattern color occurs in the style (it may for pattern and - * borders), it is replaced with the sheet's auto pattern color. We make - * sure that we do not modify the style which was passed in to us, but also - * that we don't copy more than once. The final argument to the - * link_xxxxx_color functions tell whether or not to copy. - */ -GnmStyle * -mstyle_link_sheet (GnmStyle *style, Sheet *sheet) -{ - GnmColor *auto_color; - gboolean style_is_orig = TRUE; - - if (style->linked_sheet != NULL) { - GnmStyle *orig = style; - style = mstyle_copy (style); - mstyle_unref (orig); - style_is_orig = FALSE; - - /* safety test */ - g_return_val_if_fail (style->linked_sheet != sheet, style); - } - - g_return_val_if_fail (style->link_count == 0, style); - g_return_val_if_fail (style->linked_sheet == NULL, style); - - //auto_color = sheet_style_get_auto_pattern_color (sheet); - auto_color = style_color_black(); - if (mstyle_is_element_set (style, MSTYLE_COLOR_PATTERN)) - style = link_pattern_color (style, auto_color, style_is_orig); - style = link_border_colors (style, auto_color, style_is_orig); - style_color_unref (auto_color); - - style->linked_sheet = sheet; - style->link_count = 1; - -#if 0 - /* Not needed for validation anymore, leave it as template for conditionals */ - if (mstyle_is_element_set (style, MSTYLE_VALIDATION)) - validation_link (style->elements[MSTYLE_VALIDATION].u.validation, sheet); -#endif - - d(("link sheet %p = 1\n", style)); - return style; -} - -void -mstyle_link (GnmStyle *style) -{ - g_return_if_fail (style->link_count > 0); - - style->link_count++; - d(("link %p = %d\n", style, style->link_count)); -} - -void -mstyle_link_multiple (GnmStyle *style, int count) -{ - g_return_if_fail (style->link_count > 0); - - style->link_count += count; - d(("multiple link %p + %d = %d\n", style, count, style->link_count)); -} - -void -mstyle_unlink (GnmStyle *style) -{ - g_return_if_fail (style->link_count > 0); - - d(("unlink %p = %d\n", style, style->link_count-1)); - if (style->link_count-- == 1) { -#if 0 - /* Not needed for validation anymore, leave it as template for conditionals */ - if (mstyle_is_element_set (style, MSTYLE_VALIDATION)) - validation_unlink (style->elements[MSTYLE_VALIDATION].u.validation); -#endif - //sheet_style_unlink (style->linked_sheet, style); - style->linked_sheet = NULL; - mstyle_unref (style); - } -} - -char * -mstyle_to_string (const GnmStyle *style) -{ - guint i; - GString *ans; - char *txt_ans; - - g_return_val_if_fail (style != NULL, g_strdup ("(null)")); - - ans = g_string_new ("Elements : "); - for (i = 0; i < MSTYLE_ELEMENT_MAX; i++) { - char *txt; - - if (style->elements[i].type) { - txt = mstyle_element_dump (&style->elements[i]); - g_string_append_printf (ans, "%s ", txt); - g_free (txt); - } else - g_string_append_printf (ans, ".\n"); - } - txt_ans = ans->str; - g_string_free (ans, FALSE); - - return txt_ans; -} - -void -mstyle_dump (const GnmStyle *style) -{ - char *txt; - - fprintf (stderr, "Style Refs %d\n", - style->ref_count); - txt = mstyle_to_string (style); - fprintf (stderr, "%s\n", txt); - g_free (txt); -} - -gboolean -mstyle_equal (const GnmStyle *a, const GnmStyle *b) -{ - int i; - MStyleElement const *ea, *eb; - - g_return_val_if_fail (a != NULL, FALSE); - g_return_val_if_fail (b != NULL, FALSE); - - if (a == b) - return TRUE; - - ea = a->elements; - eb = b->elements; - for (i = 1; i < MSTYLE_ELEMENT_MAX; i++) { - /* Elements in the same position should have the same types */ - if (ea[i].type != eb[i].type) { - if (ea[i].type != MSTYLE_ELEMENT_UNSET && - eb[i].type != MSTYLE_ELEMENT_UNSET) - g_warning ("%s mismatched types.", mstyle_names[i]); - return FALSE; - } - - if (!mstyle_element_equal (ea+i, eb+i)) - return FALSE; - } - - return TRUE; -} - -gboolean -mstyle_equal_XL (const GnmStyle *a, const GnmStyle *b) -{ - int i; - MStyleElement const *ea, *eb; - - g_return_val_if_fail (a != NULL, FALSE); - g_return_val_if_fail (b != NULL, FALSE); - - if (a == b) - return TRUE; - - ea = a->elements; - eb = b->elements; - for (i = 1; i < MSTYLE_VALIDATION; i++) { - /* Elements in the same position should have the same types */ - if (ea[i].type != eb[i].type) { - if (ea[i].type != MSTYLE_ELEMENT_UNSET && - eb[i].type != MSTYLE_ELEMENT_UNSET) - g_warning ("%s mismatched types.", mstyle_names[i]); - return FALSE; - } - - if (!mstyle_element_equal (ea+i, eb+i)) - return FALSE; - } - - return TRUE; -} - -gboolean -mstyle_empty (const GnmStyle *style) -{ - int i; - - g_return_val_if_fail (style != NULL, FALSE); - - for (i = 0; i < MSTYLE_ELEMENT_MAX; i++) - if (style->elements[i].type) - return FALSE; - return TRUE; -} - -gboolean -mstyle_verify (const GnmStyle *style) -{ - int j; - - for (j = 0; j < MSTYLE_ELEMENT_MAX; j++) { - MStyleElement e = style->elements[j]; - - g_return_val_if_fail (e.type < MSTYLE_ELEMENT_MAX, FALSE); - g_return_val_if_fail (e.type != MSTYLE_ELEMENT_CONFLICT, FALSE); - } - return TRUE; -} - -gboolean -mstyle_is_element_set (const GnmStyle *st, MStyleElementType t) -{ - g_return_val_if_fail (st != NULL, FALSE); - g_return_val_if_fail (t > 0 && t < MSTYLE_ELEMENT_MAX, FALSE); - - return st->elements[t].type != MSTYLE_ELEMENT_UNSET && - st->elements[t].type != MSTYLE_ELEMENT_CONFLICT; -} - -gboolean -mstyle_is_element_conflict (const GnmStyle *st, MStyleElementType t) -{ - g_return_val_if_fail (st != NULL, FALSE); - g_return_val_if_fail (t > 0 && t < MSTYLE_ELEMENT_MAX, FALSE); - - return st->elements[t].type == MSTYLE_ELEMENT_CONFLICT; -} - -void -mstyle_unset_element (GnmStyle *st, MStyleElementType t) -{ - g_return_if_fail (st != NULL); - g_return_if_fail (t > 0 && t < MSTYLE_ELEMENT_MAX); - - mstyle_element_unref (st->elements[t]); - st->elements[t].type = MSTYLE_ELEMENT_UNSET; -} - -/** - * mstyle_replace_element: - * @src: Source mstyle - * @dst: Destination mstyle - * @t: Element to replace - * - * This function replaces element 't' in mstyle 'dst' with element 't' - * in mstyle 'src'. (If element 't' was already set in mstyle 'dst' then - * the element will first be unset) - **/ -void -mstyle_replace_element (GnmStyle *src, GnmStyle *dst, MStyleElementType t) -{ - g_return_if_fail (src != NULL); - g_return_if_fail (dst != NULL); - - mstyle_element_ref (&src->elements[t]); - - if (mstyle_is_element_set (dst, t)) - mstyle_unset_element (dst, t); - - dst->elements[t] = src->elements[t]; -} - -void -mstyle_set_color (GnmStyle *st, MStyleElementType t, - GnmColor *col) -{ - g_return_if_fail (st != NULL); - g_return_if_fail (col != NULL); - - switch (t) { - case MSTYLE_ANY_COLOR: - mstyle_element_unref (st->elements[t]); - st->elements[t].type = t; - st->elements[t].u.color.any = col; - mstyle_pango_clear (st); - break; - default: - g_warning ("Not a color element"); - break; - } -} - -GnmColor * -mstyle_get_color (GnmStyle const *st, MStyleElementType t) -{ - g_return_val_if_fail (mstyle_is_element_set (st, t), NULL); - - switch (t) { - case MSTYLE_ANY_COLOR: - return st->elements[t].u.color.any; - - default: - g_warning ("Not a color element"); - return NULL; - } -} - -void -mstyle_set_border (GnmStyle *st, MStyleElementType t, - GnmBorder *border) -{ - g_return_if_fail (st != NULL); - - /* NOTE : It is legal for border to be NULL */ - switch (t) { - case MSTYLE_ANY_BORDER: - mstyle_element_unref (st->elements[t]); - st->elements[t].type = t; - st->elements[t].u.border.any = border; - break; - default: - g_warning ("Not a border element"); - break; - } - -} - -GnmBorder * -mstyle_get_border (const GnmStyle *st, MStyleElementType t) -{ - switch (t) { - case MSTYLE_ANY_BORDER: - return st->elements[t].u.border.any; - - default: - g_warning ("Not a border element"); - return NULL; - } -} - -void -mstyle_set_pattern (GnmStyle *st, int pattern) -{ - g_return_if_fail (st != NULL); - g_return_if_fail (pattern >= 0); - //g_return_if_fail (pattern <= GNUMERIC_SHEET_PATTERNS); - - st->elements[MSTYLE_PATTERN].type = MSTYLE_PATTERN; - st->elements[MSTYLE_PATTERN].u.pattern = pattern; -} - -int -mstyle_get_pattern (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_PATTERN), 0); - - return style->elements[MSTYLE_PATTERN].u.pattern; -} - -GnmFont * -mstyle_get_font (const GnmStyle *style, PangoContext *context, double zoom) -{ - g_return_val_if_fail (style != NULL, NULL); - - if (!style->font || style->font_zoom != zoom) { - const gchar *name; - gboolean bold, italic; - double size; - - mstyle_font_clear ((GnmStyle *)style); - - if (mstyle_is_element_set (style, MSTYLE_FONT_NAME)) - name = mstyle_get_font_name (style); - else - name = DEFAULT_FONT; - - if (mstyle_is_element_set (style, MSTYLE_FONT_BOLD)) - bold = mstyle_get_font_bold (style); - else - bold = FALSE; - - if (mstyle_is_element_set (style, MSTYLE_FONT_ITALIC)) - italic = mstyle_get_font_italic (style); - else - italic = FALSE; - - if (mstyle_is_element_set (style, MSTYLE_FONT_SIZE)) - size = mstyle_get_font_size (style); - else - size = DEFAULT_SIZE; - - ((GnmStyle *)style)->font = - style_font_new (context, name, size, - zoom, bold, italic); - ((GnmStyle *)style)->font_zoom = zoom; - } - - style_font_ref (style->font); - return style->font; -} - -void -mstyle_set_font_name (GnmStyle *style, const char *name) -{ - g_return_if_fail (name != NULL); - g_return_if_fail (style != NULL); - - mstyle_element_unref (style->elements[MSTYLE_FONT_NAME]); - style->elements[MSTYLE_FONT_NAME].type = MSTYLE_FONT_NAME; - style->elements[MSTYLE_FONT_NAME].u.font.name = gnm_string_get (name); - mstyle_font_clear (style); - mstyle_pango_clear (style); -} - -const char * -mstyle_get_font_name (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FONT_NAME), NULL); - - return style->elements[MSTYLE_FONT_NAME].u.font.name->str; -} - -void -mstyle_set_font_bold (GnmStyle *style, gboolean bold) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_FONT_BOLD].type = MSTYLE_FONT_BOLD; - style->elements[MSTYLE_FONT_BOLD].u.font.bold = bold; - mstyle_font_clear (style); - mstyle_pango_clear (style); -} - -gboolean -mstyle_get_font_bold (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FONT_BOLD), FALSE); - - return style->elements[MSTYLE_FONT_BOLD].u.font.bold; -} - -void -mstyle_set_font_italic (GnmStyle *style, gboolean italic) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_FONT_ITALIC].type = MSTYLE_FONT_ITALIC; - style->elements[MSTYLE_FONT_ITALIC].u.font.italic = italic; - mstyle_font_clear (style); - mstyle_pango_clear (style); -} - -gboolean -mstyle_get_font_italic (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FONT_ITALIC), FALSE); - - return style->elements[MSTYLE_FONT_ITALIC].u.font.italic; -} - -void -mstyle_set_font_uline (GnmStyle *style, StyleUnderlineType const underline) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_FONT_UNDERLINE].type = MSTYLE_FONT_UNDERLINE; - style->elements[MSTYLE_FONT_UNDERLINE].u.font.underline = underline; - mstyle_pango_clear (style); -} - -StyleUnderlineType -mstyle_get_font_uline (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FONT_UNDERLINE), FALSE); - - return style->elements[MSTYLE_FONT_UNDERLINE].u.font.underline; -} - -void -mstyle_set_font_strike (GnmStyle *style, gboolean const strikethrough) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_FONT_STRIKETHROUGH].type = MSTYLE_FONT_STRIKETHROUGH; - style->elements[MSTYLE_FONT_STRIKETHROUGH].u.font.strikethrough = strikethrough; - mstyle_pango_clear (style); -} - -gboolean -mstyle_get_font_strike (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FONT_STRIKETHROUGH), FALSE); - - return style->elements[MSTYLE_FONT_STRIKETHROUGH].u.font.strikethrough; -} -void -mstyle_set_font_size (GnmStyle *style, double size) -{ - g_return_if_fail (style != NULL); - g_return_if_fail (size >= 1.); - - style->elements[MSTYLE_FONT_SIZE].type = MSTYLE_FONT_SIZE; - style->elements[MSTYLE_FONT_SIZE].u.font.size = size; - mstyle_font_clear (style); - mstyle_pango_clear (style); -} - -double -mstyle_get_font_size (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FONT_SIZE), 12.0); - - return style->elements[MSTYLE_FONT_SIZE].u.font.size; -} - -void -mstyle_set_format (GnmStyle *style, GnmFormat *format) -{ - g_return_if_fail (style != NULL); - g_return_if_fail (format != NULL); - - style_format_ref (format); - mstyle_element_unref (style->elements[MSTYLE_FORMAT]); - style->elements[MSTYLE_FORMAT].type = MSTYLE_FORMAT; - style->elements[MSTYLE_FORMAT].u.format = format; -} - -void -mstyle_set_format_text (GnmStyle *style, const char *format) -{ - GnmFormat *sf; - - g_return_if_fail (style != NULL); - g_return_if_fail (format != NULL); - - /* FIXME FIXME FIXME : This is a potential problem - * I am not sure people are feeding us only translated formats. - * This entire function should be deleted. - */ - sf = style_format_new_XL (format, FALSE); - mstyle_set_format (style, sf); - style_format_unref (sf); -} - -GnmFormat * -mstyle_get_format (GnmStyle const *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_FORMAT), NULL); - - return style->elements[MSTYLE_FORMAT].u.format; -} - -void -mstyle_set_align_h (GnmStyle *style, StyleHAlignFlags a) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_ALIGN_H].type = MSTYLE_ALIGN_H; - style->elements[MSTYLE_ALIGN_H].u.align.h = a; -} - -StyleHAlignFlags -mstyle_get_align_h (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_ALIGN_H), 0); - - return style->elements[MSTYLE_ALIGN_H].u.align.h; -} - -void -mstyle_set_align_v (GnmStyle *style, StyleVAlignFlags a) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_ALIGN_V].type = MSTYLE_ALIGN_V; - style->elements[MSTYLE_ALIGN_V].u.align.v = a; -} - -StyleVAlignFlags -mstyle_get_align_v (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_ALIGN_V), 0); - - return style->elements[MSTYLE_ALIGN_V].u.align.v; -} - -void -mstyle_set_indent (GnmStyle *style, int i) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_INDENT].type = MSTYLE_INDENT; - style->elements[MSTYLE_INDENT].u.indent = i; -} - -int -mstyle_get_indent (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_INDENT), 0); - - return style->elements[MSTYLE_INDENT].u.indent; -} - -void -mstyle_set_rotation (GnmStyle *style, int rot_deg) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_ROTATION].type = MSTYLE_ROTATION; - style->elements[MSTYLE_ROTATION].u.rotation = rot_deg; -} - -int -mstyle_get_rotation (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_ROTATION), 0); - - return style->elements[MSTYLE_ROTATION].u.rotation; -} - -void -mstyle_set_wrap_text (GnmStyle *style, gboolean f) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_WRAP_TEXT].type = MSTYLE_WRAP_TEXT; - style->elements[MSTYLE_WRAP_TEXT].u.wrap_text = f; -} - -gboolean -mstyle_get_wrap_text (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_WRAP_TEXT), FALSE); - - return style->elements[MSTYLE_WRAP_TEXT].u.wrap_text; -} - -/* - * Same as mstyle_get_wrap_text except that if either halign or valign - * is _JUSTIFY, the result will be TRUE. - */ -gboolean -mstyle_get_effective_wrap_text (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_WRAP_TEXT), FALSE); - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_ALIGN_V), FALSE); - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_ALIGN_H), FALSE); - - /* Note: HALIGN_GENERAL never expands to HALIGN_JUSTIFY. */ - return (style->elements[MSTYLE_WRAP_TEXT].u.wrap_text || - style->elements[MSTYLE_ALIGN_V].u.align.v == VALIGN_JUSTIFY || - style->elements[MSTYLE_ALIGN_H].u.align.h == HALIGN_JUSTIFY); -} - -void -mstyle_set_shrink_to_fit (GnmStyle *style, gboolean f) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_SHRINK_TO_FIT].type = MSTYLE_SHRINK_TO_FIT; - style->elements[MSTYLE_SHRINK_TO_FIT].u.wrap_text = f; -} - -gboolean -mstyle_get_shrink_to_fit (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_SHRINK_TO_FIT), FALSE); - - return style->elements[MSTYLE_SHRINK_TO_FIT].u.wrap_text; -} -void -mstyle_set_content_locked (GnmStyle *style, gboolean f) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_CONTENT_LOCKED].type = MSTYLE_CONTENT_LOCKED; - style->elements[MSTYLE_CONTENT_LOCKED].u.content_locked = f; -} - -gboolean -mstyle_get_content_locked (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_CONTENT_LOCKED), FALSE); - - return style->elements[MSTYLE_CONTENT_LOCKED].u.content_locked; -} -void -mstyle_set_content_hidden (GnmStyle *style, gboolean f) -{ - g_return_if_fail (style != NULL); - - style->elements[MSTYLE_CONTENT_HIDDEN].type = MSTYLE_CONTENT_HIDDEN; - style->elements[MSTYLE_CONTENT_HIDDEN].u.content_hidden = f; -} - -gboolean -mstyle_get_content_hidden (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_CONTENT_HIDDEN), FALSE); - - return style->elements[MSTYLE_CONTENT_HIDDEN].u.content_hidden; -} - -void -mstyle_set_validation (GnmStyle *style, GnmValidation *v) -{ - g_return_if_fail (style != NULL); - - mstyle_element_unref (style->elements[MSTYLE_VALIDATION]); - style->elements[MSTYLE_VALIDATION].type = MSTYLE_VALIDATION; - style->elements[MSTYLE_VALIDATION].u.validation = v; -} - -GnmValidation * -mstyle_get_validation (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_VALIDATION), NULL); - - return style->elements[MSTYLE_VALIDATION].u.validation; -} - -void -mstyle_set_hlink (GnmStyle *style, GnmHLink *link) -{ - g_return_if_fail (style != NULL); - - mstyle_element_unref (style->elements[MSTYLE_HLINK]); - style->elements[MSTYLE_HLINK].type = MSTYLE_HLINK; - style->elements[MSTYLE_HLINK].u.hlink = link; -} - -GnmHLink * -mstyle_get_hlink (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_HLINK), NULL); - - return style->elements[MSTYLE_HLINK].u.hlink; -} - -void -mstyle_set_input_msg (GnmStyle *style, GnmInputMsg *msg) -{ - g_return_if_fail (style != NULL); - - mstyle_element_unref (style->elements[MSTYLE_INPUT_MSG]); - style->elements[MSTYLE_INPUT_MSG].type = MSTYLE_INPUT_MSG; - style->elements[MSTYLE_INPUT_MSG].u.input_msg = msg; -} - -GnmInputMsg * -mstyle_get_input_msg (const GnmStyle *style) -{ - g_return_val_if_fail (mstyle_is_element_set (style, MSTYLE_INPUT_MSG), NULL); - - return style->elements[MSTYLE_INPUT_MSG].u.input_msg; -} - -gboolean -mstyle_visible_in_blank (const GnmStyle *st) -{ - MStyleElementType i; - - if (mstyle_is_element_set (st, MSTYLE_PATTERN) && - mstyle_get_pattern (st) > 0) - return TRUE; - - for (i = MSTYLE_BORDER_TOP ; i <= MSTYLE_BORDER_DIAGONAL ; ++i) - if (mstyle_is_element_set (st, i) && - style_border_visible_in_blank (mstyle_get_border (st, i))) - return TRUE; - - return FALSE; -} - -static void -add_attr (PangoAttrList *attrs, PangoAttribute *attr) -{ - attr->start_index = 0; - attr->end_index = G_MAXINT; - pango_attr_list_insert (attrs, attr); -} - -/** - * mstyle_get_pango_attrs : - * @style : #GnmStyle - **/ -PangoAttrList * -mstyle_get_pango_attrs (const GnmStyle *mstyle, - PangoContext *context, - double zoom) -{ - PangoAttrList *l; - - if (mstyle->pango_attrs) { - if (zoom == mstyle->pango_attrs_zoom) { - pango_attr_list_ref (mstyle->pango_attrs); - return mstyle->pango_attrs; - } - pango_attr_list_unref (((GnmStyle *)mstyle)->pango_attrs); - } - - ((GnmStyle *)mstyle)->pango_attrs = l = pango_attr_list_new (); - ((GnmStyle *)mstyle)->pango_attrs_zoom = zoom; - - /* Foreground colour. */ - /* See http://bugzilla.gnome.org/show_bug.cgi?id=105322 */ - if (0) { - const GnmColor *fore = mstyle_get_color (mstyle, MSTYLE_COLOR_FORE); - add_attr (l, pango_attr_foreground_new ( - fore->color.red, fore->color.green, fore->color.blue)); - } - - /* Handle underlining. */ - switch (mstyle_get_font_uline (mstyle)) { - case UNDERLINE_SINGLE : - add_attr (l, pango_attr_underline_new (PANGO_UNDERLINE_SINGLE)); - break; - case UNDERLINE_DOUBLE : - add_attr (l, pango_attr_underline_new (PANGO_UNDERLINE_DOUBLE)); - break; - default : - break; - } - - if (mstyle_get_font_strike (mstyle)) - add_attr (l, pango_attr_strikethrough_new (TRUE)); - - { - GnmFont *font = mstyle_get_font (mstyle, context, zoom); - add_attr (l, pango_attr_font_desc_new (font->pango.font_descr)); - style_font_unref (font); - } - - pango_attr_list_ref (l); - return l; -} - -PangoAttrList * -mstyle_generate_attrs_full (GnmStyle const *st) -{ - GnmColor *fore = mstyle_get_color (st, MSTYLE_COLOR_FORE); - PangoAttrList *l = pango_attr_list_new (); - - add_attr (l, pango_attr_family_new (mstyle_get_font_name (st))); - add_attr (l, pango_attr_size_new (mstyle_get_font_size (st) * PANGO_SCALE)); - add_attr (l, pango_attr_style_new (mstyle_get_font_italic (st) - ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL)); - add_attr (l, pango_attr_weight_new (mstyle_get_font_bold (st) - ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL)); - add_attr (l, pango_attr_foreground_new ( - fore->color.red, fore->color.green, fore->color.blue)); - add_attr (l, pango_attr_strikethrough_new (mstyle_get_font_strike (st))); - switch (mstyle_get_font_uline (st)) { - case UNDERLINE_SINGLE : - add_attr (l, pango_attr_underline_new (PANGO_UNDERLINE_SINGLE)); - break; - case UNDERLINE_DOUBLE : - add_attr (l, pango_attr_underline_new (PANGO_UNDERLINE_DOUBLE)); - break; - default : - add_attr (l, pango_attr_underline_new (PANGO_UNDERLINE_NONE)); - break; - } - - return l; -} - -void -mstyle_set_from_pango_attribute (GnmStyle *style, PangoAttribute const *attr) -{ - switch (attr->klass->type) { - case PANGO_ATTR_FAMILY : - mstyle_set_font_name (style, ((PangoAttrString *)attr)->value); - break; - case PANGO_ATTR_SIZE : - mstyle_set_font_size (style, - (double )(((PangoAttrInt *)attr)->value) / PANGO_SCALE); - break; - case PANGO_ATTR_STYLE : - mstyle_set_font_italic (style, - ((PangoAttrInt *)attr)->value == PANGO_STYLE_ITALIC); - break; - case PANGO_ATTR_WEIGHT : - mstyle_set_font_bold (style, - ((PangoAttrInt *)attr)->value >= PANGO_WEIGHT_BOLD); - break; - case PANGO_ATTR_FOREGROUND : - mstyle_set_color (style, MSTYLE_COLOR_FORE, - style_color_new_pango ( - &((PangoAttrColor *)attr)->color)); - break; - case PANGO_ATTR_UNDERLINE : - switch (((PangoAttrInt *)attr)->value) { - case PANGO_UNDERLINE_NONE : - mstyle_set_font_uline (style, UNDERLINE_NONE); - break; - case PANGO_UNDERLINE_SINGLE : - mstyle_set_font_uline (style, UNDERLINE_SINGLE); - break; - case PANGO_UNDERLINE_DOUBLE : - mstyle_set_font_uline (style, UNDERLINE_DOUBLE); - break; - } - break; - case PANGO_ATTR_STRIKETHROUGH : - mstyle_set_font_strike (style, - ((PangoAttrInt *)attr)->value != 0); - break; - default : - break; /* ignored */ - } -} - -/* ------------------------------------------------------------------------- */ - -void -mstyle_init (void) -{ -#if USE_MSTYLE_POOL - mstyle_pool = - gnm_mem_chunk_new ("mstyle pool", - sizeof (GnmStyle), - 16 * 1024 - 128); -#endif -} - -#if USE_MSTYLE_POOL -static void -cb_mstyle_pool_leak (gpointer data, gpointer user) -{ - GnmStyle *mstyle = data; - fprintf (stderr, "Leaking mstyle at %p.\n", mstyle); - mstyle_dump (mstyle); -} -#endif - -void -mstyle_shutdown (void) -{ -#if USE_MSTYLE_POOL - gnm_mem_chunk_foreach_leak (mstyle_pool, cb_mstyle_pool_leak, NULL); - gnm_mem_chunk_destroy (mstyle_pool, FALSE); - mstyle_pool = NULL; -#endif -} diff --git a/lib/goffice/split/mstyle.h b/lib/goffice/split/mstyle.h deleted file mode 100644 index d86ef3aea0..0000000000 --- a/lib/goffice/split/mstyle.h +++ /dev/null @@ -1,158 +0,0 @@ -#ifndef GNUMERIC_MSTYLE_H -#define GNUMERIC_MSTYLE_H - -#include "gnumeric.h" -#include "style.h" - -/* - * Keep element_size up to date. - */ -typedef enum { - /* Delimiter */ - MSTYLE_ELEMENT_UNSET = 0, - /* When there is a conflict in a merge */ - MSTYLE_ELEMENT_CONFLICT, - /* Types that are visible in blank cells */ - MSTYLE_COLOR_BACK, - MSTYLE_COLOR_PATTERN, - - MSTYLE_BORDER_TOP, - MSTYLE_BORDER_BOTTOM, - MSTYLE_BORDER_LEFT, - MSTYLE_BORDER_RIGHT, - MSTYLE_BORDER_REV_DIAGONAL, - MSTYLE_BORDER_DIAGONAL, - - MSTYLE_PATTERN, - /* Delimiter */ - MSTYLE_ELEMENT_MAX_BLANK, - /* Normal types */ - MSTYLE_COLOR_FORE, - MSTYLE_FONT_NAME, - MSTYLE_FONT_BOLD, - MSTYLE_FONT_ITALIC, - MSTYLE_FONT_UNDERLINE, - MSTYLE_FONT_STRIKETHROUGH, - MSTYLE_FONT_SIZE, - - MSTYLE_FORMAT, - - MSTYLE_ALIGN_V, - MSTYLE_ALIGN_H, - MSTYLE_INDENT, - MSTYLE_ROTATION, - MSTYLE_WRAP_TEXT, - MSTYLE_SHRINK_TO_FIT, - - MSTYLE_CONTENT_LOCKED, - MSTYLE_CONTENT_HIDDEN, - - /* Things not in MS Excel's Style */ - MSTYLE_VALIDATION, - MSTYLE_HLINK, /* patch equal_XL if this is changed */ - MSTYLE_INPUT_MSG, /* patch equal_XL if this is changed */ - /* Delimiter */ - MSTYLE_ELEMENT_MAX -} MStyleElementType; - -GnmStyle *mstyle_new (void); -GnmStyle *mstyle_new_default (void); -GnmStyle *mstyle_copy (const GnmStyle *st); -GnmStyle *mstyle_copy_merge (const GnmStyle *orig, const GnmStyle *overlay); -void mstyle_ref (GnmStyle *st); -void mstyle_unref (GnmStyle *st); - -GnmStyle *mstyle_link_sheet (GnmStyle *st, Sheet *sheet); -void mstyle_link (GnmStyle *st); -void mstyle_link_multiple (GnmStyle *st, int count); -void mstyle_unlink (GnmStyle *st); - -gboolean mstyle_equal (GnmStyle const *a, GnmStyle const *b); -gboolean mstyle_equal_XL (GnmStyle const *a, GnmStyle const *b); -gboolean mstyle_verify (GnmStyle const *st); -guint mstyle_hash (gconstpointer st); -guint mstyle_hash_XL (gconstpointer st); -gboolean mstyle_empty (const GnmStyle *st); - -/* - * Wafer thin element access functions. - */ -gboolean mstyle_is_element_set (const GnmStyle *st, MStyleElementType t); -gboolean mstyle_is_element_conflict (const GnmStyle *st, MStyleElementType t); -void mstyle_compare (GnmStyle *a, const GnmStyle *b); -void mstyle_unset_element (GnmStyle *st, MStyleElementType t); -void mstyle_replace_element (GnmStyle *src, GnmStyle *dst, MStyleElementType t); -void mstyle_set_color (GnmStyle *st, MStyleElementType t, - GnmColor *col); -GnmColor *mstyle_get_color (const GnmStyle *st, MStyleElementType t); -void mstyle_set_border (GnmStyle *st, MStyleElementType t, - GnmBorder *border); -GnmBorder *mstyle_get_border (const GnmStyle *st, MStyleElementType t); -void mstyle_set_pattern (GnmStyle *st, int pattern); -int mstyle_get_pattern (const GnmStyle *st); -void mstyle_set_font_name (GnmStyle *st, const char *name); -const char *mstyle_get_font_name (const GnmStyle *st); -void mstyle_set_font_bold (GnmStyle *st, gboolean bold); -gboolean mstyle_get_font_bold (const GnmStyle *st); -void mstyle_set_font_italic (GnmStyle *st, gboolean italic); -gboolean mstyle_get_font_italic (const GnmStyle *st); -void mstyle_set_font_uline (GnmStyle *st, StyleUnderlineType const t); -StyleUnderlineType mstyle_get_font_uline (const GnmStyle *st); -void mstyle_set_font_strike (GnmStyle *st, gboolean strikethrough); -gboolean mstyle_get_font_strike (const GnmStyle *st); -void mstyle_set_font_size (GnmStyle *st, double size); -double mstyle_get_font_size (const GnmStyle *st); - -/* this font must be unrefd after use */ -GnmFont *mstyle_get_font (const GnmStyle *st, - PangoContext *context, - double zoom); -void mstyle_set_format (GnmStyle *st, GnmFormat *); -void mstyle_set_format_text (GnmStyle *st, const char *format); -GnmFormat *mstyle_get_format (const GnmStyle *st); -void mstyle_set_align_h (GnmStyle *st, StyleHAlignFlags a); -StyleHAlignFlags mstyle_get_align_h (const GnmStyle *st); -void mstyle_set_align_v (GnmStyle *st, StyleVAlignFlags a); -StyleVAlignFlags mstyle_get_align_v (const GnmStyle *st); -void mstyle_set_indent (GnmStyle *st, int i); -int mstyle_get_indent (const GnmStyle *st); - -void mstyle_set_rotation (GnmStyle *st, int r); -int mstyle_get_rotation (const GnmStyle *st); - -void mstyle_set_wrap_text (GnmStyle *st, gboolean f); -gboolean mstyle_get_wrap_text (const GnmStyle *st); -gboolean mstyle_get_effective_wrap_text (const GnmStyle *st); -void mstyle_set_shrink_to_fit (GnmStyle *st, gboolean f); -gboolean mstyle_get_shrink_to_fit (const GnmStyle *st); - -void mstyle_set_content_locked (GnmStyle *st, gboolean f); -gboolean mstyle_get_content_locked (const GnmStyle *st); -void mstyle_set_content_hidden (GnmStyle *st, gboolean f); -gboolean mstyle_get_content_hidden (const GnmStyle *st); - -void mstyle_set_validation (GnmStyle *st, GnmValidation *v); -GnmValidation *mstyle_get_validation (const GnmStyle *st); - -void mstyle_set_hlink (GnmStyle *st, GnmHLink *link); -GnmHLink *mstyle_get_hlink (const GnmStyle *st); - -void mstyle_set_input_msg (GnmStyle *st, GnmInputMsg *msg); -GnmInputMsg *mstyle_get_input_msg (const GnmStyle *st); - -gboolean mstyle_visible_in_blank (const GnmStyle *st); - -PangoAttrList *mstyle_generate_attrs_full (const GnmStyle *st); -PangoAttrList *mstyle_get_pango_attrs (const GnmStyle *st, - PangoContext *context, - double zoom); -void mstyle_set_from_pango_attribute (GnmStyle *style, - PangoAttribute const *attr); - -char *mstyle_to_string (const GnmStyle *st); /* Debug only ! leaks like a sieve */ -void mstyle_dump (const GnmStyle *st); - -void mstyle_init (void); -void mstyle_shutdown (void); - -#endif /* GNUMERIC_MSTYLE_H */ diff --git a/lib/goffice/split/number-match.c b/lib/goffice/split/number-match.c deleted file mode 100644 index 347440b13e..0000000000 --- a/lib/goffice/split/number-match.c +++ /dev/null @@ -1,1295 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * number-match.c: This file includes the support for matching - * entered strings as numbers (by trying to apply one of the existing - * cell formats). - * - * The idea is simple: we create a regular expression from the format - * string that would match a value entered in that format. Then, on - * lookup we try to match the string against every regular expression - * we have: if a match is found, then we decode the number using a - * precomputed parallel-list of subexpressions. - * - * Author: - * Miguel de Icaza (miguel@gnu.org) - */ -#include -#include -#include "gnumeric.h" -#include "number-match.h" - -#include "dates.h" -#include "numbers.h" -#include "gutils.h" -#include "datetime.h" -#include "style.h" -#include "format.h" -#include "value.h" -#include "mathfunc.h" -#include "str.h" -#include "regutf8.h" - -#include -#include -#include -#include -#include -#undef DEBUG_NUMBER_MATCH - -/* - * Takes a list of strings (optionally include an * at the beginning - * that gets stripped, for i18n purposes). and returns a regexp that - * would match them - */ -static char * -create_option_list (char const *const *list) -{ - int len = 0; - char const *const *p; - char *res; - - for (p = list; *p; p++) { - char const *v = _(*p); - - if (*v == '*') - v++; - len += strlen (v) + 1; - } - len += 5; - - res = g_malloc (len); - res[0] = '('; - res[1] = 0; - for (p = list; *p; p++) { - char const *v = _(*p); - - if (*v == '*') - v++; - - strcat (res, v); - if (*(p + 1)) - strcat (res, "|"); - } - strcat (res, ")"); - - return res; -} - -typedef enum { - MATCH_DAY_FULL = 1, - MATCH_DAY_NUMBER = 2, - MATCH_MONTH_FULL = 3, - MATCH_MONTH_SHORT = 4, - MATCH_MONTH_NUMBER = 5, - MATCH_YEAR_FULL = 6, - MATCH_YEAR_SHORT = 7, - MATCH_HOUR = 8, - MATCH_MINUTE = 9, - MATCH_SECOND = 10, - MATCH_AMPM = 11, - MATCH_NUMBER = 12, - MATCH_NUMBER_DECIMALS = 13, - MATCH_PERCENT = 14, - MATCH_SKIP = 15, - MATCH_STRING_CONSTANT = 16, - MATCH_CUMMULATIVE_HOURS = 17, - MATCH_CUMMULATIVE_MINUTES = 18, - MATCH_CUMMULATIVE_SECONDS = 19, - MATCH_NUMERATOR = 20, - MATCH_DENOMINATOR = 21 -} MatchType; - -#define append_type(t) do { guint8 x = t; match_types = g_byte_array_append (match_types, &x, 1); } while (0) - -/* - * format_create_regexp: - * Create a regular expression for the given XL-style format. Note: - * the format as well as the regexp are UTF-8 encoded. - */ -static char * -format_create_regexp (unsigned char const *format, GByteArray **dest) -{ - GString *regexp; - GByteArray *match_types; - char *str; - gboolean hour_seen = FALSE; - gboolean number_seen = FALSE; - gboolean fraction = FALSE; - - g_return_val_if_fail (format != NULL, NULL); - -#ifdef DEBUG_NUMBER_MATCH - printf ("'%s' = ", format); -#endif - regexp = g_string_new ("^"); - match_types = g_byte_array_new (); - - for (; *format; format = g_utf8_next_char (format)) { - gunichar c = g_utf8_get_char (format); - switch (c) { - case '*': - /* FIXME: I don't think this will work for '^'. */ - if (format[1]) { - format++; - g_string_append_c (regexp, '['); - g_string_append_unichar (regexp, g_utf8_get_char (format)); - g_string_append_c (regexp, ']'); - g_string_append_c (regexp, '*'); - } - break; - - case 'P': case 'p': - if (format[1] == 'm' || format[1] == 'M') - format++; - break; - - case '\\': { - if (format[1] != '\0') - format++; - gnumeric_regexp_quote1 (regexp, format); - break; - } - - case '[' : - /* Currency symbol */ - if (format[1] == '$') { - for (format += 2; *format && *format != ']' ; ++format) - g_string_append_c (regexp, *format); - if (*format == ']') - ++format; - break; - } else if (format[1] == 'h' && format[2] == ']') { - g_string_append (regexp, "([-+]?[0-9]+)"); - append_type (MATCH_CUMMULATIVE_HOURS); - hour_seen = TRUE; - format += 2; - break; - } else if (format[1] == 'm' && format[2] == ']') { - g_string_append (regexp, "([-+]?[0-9]+)"); - append_type (hour_seen ? MATCH_MINUTE : MATCH_CUMMULATIVE_MINUTES); - format += 2; - break; - } else if (format[1] == 's' && format[2] == ']') { - g_string_append (regexp, "([-+]?[0-9]+)"); - append_type (MATCH_CUMMULATIVE_SECONDS); - format += 2; - break; - } - - case '%': - g_string_append (regexp, "%"); - append_type (MATCH_PERCENT); - break; - - case '#': case '0': case '.': case '+': case '?': { - gboolean include_sep = FALSE; - gboolean include_decimal = FALSE; - - while (*format == '#' || *format == '0' || *format == '.' || - *format == '-' || *format == 'E' || *format == 'e' || - *format == '+' || *format == '?' || *format == ',') { - switch (*format) { - case ',': include_sep = TRUE; break; - case '.': include_decimal = TRUE; break; - } - format++; - } - format--; - - if (format[1] == '/' && number_seen) - append_type (MATCH_NUMERATOR); - else - append_type (MATCH_NUMBER); - - if (include_sep) { - /* Not strictly correct. - * There should be a limit of 1-3 digits. - * However, that creates problems when - * There are formats like - * $#,##0.00 - * but not - * $###0.00 - * as a result $1000 would not be recognized. - */ - g_string_append (regexp, "([-+]?[0-9]+("); - gnumeric_regexp_quote (regexp, format_get_thousand ()->str); - g_string_append (regexp, "[0-9]{3})*)"); - append_type (MATCH_SKIP); - } else { - g_string_append (regexp, "([-+]?[0-9]+)"); - } - - if (include_decimal) { - g_string_append (regexp, "?("); - gnumeric_regexp_quote (regexp, format_get_decimal ()->str); - g_string_append (regexp, "[0-9]+([Ee][-+]?[0-9]+)?)"); - append_type (MATCH_NUMBER_DECIMALS); - } - - number_seen = TRUE; - break; - } - - case 'h': - case 'H': - hour_seen = TRUE; - if (format[1] == 'h' || format[1] == 'H') - format++; - - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_HOUR); - break; - - case 'M': - case 'm': - if (hour_seen) { - if (format[1] == 'm' || format[1] == 'M') - format++; - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_MINUTE); - hour_seen = FALSE; - } else { - if (format[1] == 'm' || format[1] == 'M') { - if (format[2] == 'm' || format[2] == 'M') { - if (format[3] == 'm' || format[3] == 'M') { - char *l; - - l = create_option_list (month_long); - g_string_append (regexp, l); - g_free (l); - - append_type (MATCH_MONTH_FULL); - format++; - } else { - char *l; - - l = create_option_list (month_short); - g_string_append (regexp, l); - g_free (l); - - append_type (MATCH_MONTH_SHORT); - } - format++; - } else { - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_MONTH_NUMBER); - } - format++; - } else { - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_MONTH_NUMBER); - } - } - break; - - case 's': - case 'S': - /* ICK! - * ICK! - * 'm' is ambiguous. It can be months or minutes. - */ - { - int l = match_types->len; - if (l > 0 && match_types->data[l - 1] == MATCH_MONTH_NUMBER) - match_types->data[l - 1] = MATCH_MINUTE; - } - - if (format[1] == 's' || format[1] == 'S') - format++; - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_SECOND); - break; - - case 'D': - case 'd': - if (format[1] == 'd' || format[1] == 'D') { - if (format[2] == 'd' || format[2] == 'D') { - if (format[3] == 'd' || format[3] == 'D') { - char *l; - - l = create_option_list (day_long); - g_string_append (regexp, l); - g_free (l); - - append_type (MATCH_DAY_FULL); - format++; - } else { - char *l; - - l = create_option_list (day_short); - g_string_append (regexp, l); - g_free (l); - } - format++; - } else { - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_DAY_NUMBER); - } - format++; - } else { - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_DAY_NUMBER); - } - break; - - case 'Y': - case 'y': - if (format[1] == 'y' || format[1] == 'Y') { - if (format[2] == 'y' || format[2] == 'Y') { - if (format[3] == 'y' || format[3] == 'Y') { - g_string_append (regexp, "([0-9][0-9][0-9][0-9])"); - append_type (MATCH_YEAR_FULL); - format++; - } - format++; - } else { - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_YEAR_SHORT); - } - format++; - } else { - g_string_append (regexp, "([0-9][0-9]?)"); - append_type (MATCH_YEAR_SHORT); - } - break; - - case ';': - /* TODO : Is it ok to only match the first entry ?? */ - /* FIXME: What is this? */ - while (*format) - format = g_utf8_next_char (format); - format = g_utf8_prev_char (format); - break; - - case 'A': case 'a': - if (*(format + 1) == 'm' || *(format + 1) == 'M') { - if (*(format + 2) == '/') { - if (*(format + 3) == 'P' || *(format + 3) == 'p') { - if (*(format + 4) == 'm' || *(format + 4) == 'M') { - format++; - } - format++; - } - format++; - } - format++; - } - g_string_append (regexp, "([Aa]|[Pp])[Mm]?"); - append_type (MATCH_AMPM); - break; - - case '"': - /* Matches a string */ - format++; - while (*format != '"') { - if (*format == 0) - goto error; - format = gnumeric_regexp_quote1 (regexp, format); - } - break; - - case '@': - g_string_append (regexp, "(.*)"); - append_type (MATCH_STRING_CONSTANT); - break; - - case '_': - if (format[1]) { - g_string_append (regexp, "[ ]?"); - format++; - } - break; - - case '/': - g_string_append_c (regexp, '/'); - if (number_seen) { - fraction = TRUE; - /* Fraction. Ick. */ - if (strncmp (regexp->str, "^([-+]?[0-9]+) ", 15) == 0) { - g_string_erase (regexp, 14, 1); - g_string_insert (regexp, 13, " +|"); - /* FIXME: The final regexp won't match a plain digit sequence. */ - } - - while (format[1] == '?' || g_ascii_isdigit (format[1])) - format++; - - g_string_append (regexp, "([0-9]+) *"); - append_type (MATCH_DENOMINATOR); - } - break; - -#if 0 - /* these were here explicitly before adding default. - * Leave them explicit for now as documentation. - */ - /* Default appears fine for this. */ - case 0x00a3: /* GBP sign. */ - case 0x00a5: /* JPY sign. */ - case 0x20ac: /* EUR sign. */ - case '^': - case '|': - case ']': - case '$': - case ':': - case '-': - case ' ': - case '(': - case ')': - -#endif - default : - gnumeric_regexp_quote1 (regexp, format); - } - } - - g_string_append_c (regexp, '$'); - - str = g_string_free (regexp, FALSE); - *dest = match_types; - -#ifdef DEBUG_NUMBER_MATCH - printf ("'%s'\n",str); -#endif - return str; - - error: - g_string_free (regexp, TRUE); - g_byte_array_free (match_types, TRUE); - return NULL; -} - -static void -print_regex_error (int ret) -{ - switch (ret) { - case REG_BADBR: - fprintf (stderr, - "There was an invalid `\\{...\\}' construct in the regular\n" - "expression. A valid `\\{...\\}' construct must contain either a\n" - "single number, or two numbers in increasing order separated by a\n" - "comma.\n"); - break; - - case REG_BADPAT: - fprintf (stderr, - "There was a syntax error in the regular expression.\n"); - break; - - case REG_BADRPT: - fprintf (stderr, - "A repetition operator such as `?' or `*' appeared in a bad\n" - "position (with no preceding subexpression to act on).\n"); - break; - - case REG_ECOLLATE: - fprintf (stderr, - "The regular expression referred to an invalid collating element\n" - "(one not defined in the current locale for string collation).\n"); - break; - - case REG_ECTYPE: - fprintf (stderr, - "The regular expression referred to an invalid character class name.\n"); - break; - -#if REG_EESCAPE != REG_BADPAT - case REG_EESCAPE: - fprintf (stderr, - "The regular expression ended with `\\'.\n"); - break; -#endif - - case REG_ESUBREG: - fprintf (stderr, - "There was an invalid number in the `\\DIGIT' construct.\n"); - break; - - case REG_EBRACK: - fprintf (stderr, - "There were unbalanced square brackets in the regular expression.\n"); - break; - -#if REG_EPAREN != REG_BADPAT - case REG_EPAREN: - fprintf (stderr, - "An extended regular expression had unbalanced parentheses, or a\n" - "basic regular expression had unbalanced `\\(' and `\\)'.\n"); - break; -#endif - -#if REG_EBRACE != REG_BADPAT - case REG_EBRACE: - fprintf (stderr, - "The regular expression had unbalanced `\\{' and `\\}'.\n"); - break; -#endif - -#ifdef REG_EBOL - case REG_EBOL: - fprintf (stderr, "Found ^ not at the beginning.\n"); - break; -#endif - -#ifdef REG_EEOL - case REG_EEOL: - fprintf (stderr, "Found $ not at the end.\n"); - break; -#endif - - case REG_ERANGE: - fprintf (stderr, - "One of the endpoints in a range expression was invalid.\n"); - break; - - case REG_ESPACE: - fprintf (stderr, - "`regcomp' ran out of memory.\n"); - break; - - default: - fprintf (stderr, "regexp error %d\n", ret); - } -} - -static GSList *format_match_list = NULL; -static GSList *format_dup_match_list = NULL; -static GSList *format_failed_match_list = NULL; - -void -format_match_release (GnmFormat *fmt) -{ - if (fmt->regexp_str != NULL) { - g_free (fmt->regexp_str); - go_regfree (&fmt->regexp); - g_byte_array_free (fmt->match_tags, TRUE); - } -} - -gboolean -format_match_create (GnmFormat *fmt) -{ - GByteArray *match_tags; - char *regexp; - go_regex_t r; - int ret; - - g_return_val_if_fail (fmt != NULL, FALSE); - g_return_val_if_fail (fmt->regexp_str == NULL, FALSE); - g_return_val_if_fail (fmt->match_tags == NULL, FALSE); - g_return_val_if_fail (strcmp (fmt->format, "General"), FALSE); - - regexp = format_create_regexp (fmt->format, &match_tags); - if (!regexp) { - fmt->regexp_str = NULL; - fmt->match_tags = NULL; - return FALSE; - } - - ret = go_regcomp (&r, regexp, REG_EXTENDED | REG_ICASE); - if (ret != 0) { - g_warning ("expression [%s] produced [%s]", fmt->format, regexp); - print_regex_error (ret); - g_free (regexp); - return FALSE; - } - - fmt->regexp_str = regexp; - fmt->regexp = r; - fmt->match_tags = match_tags; - - return TRUE; -} - -/* - * value_is_error : Check to see if a string begins with one of the magic - * error strings. - * - * @str : The string to test - * - * returns : an error if there is one, or NULL. - */ -static GnmValue * -value_is_error (char const *str) -{ - GnmStdError e; - - for (e = (GnmStdError)0; e < GNM_ERROR_UNKNOWN; e++) - if (0 == strcmp (str, value_error_name (e, TRUE))) - return value_new_error_std (NULL, e); - - return NULL; -} - -/* - * Loads the initial formats that we will recognize - */ -void -format_match_init (void) -{ - int i; - GnmFormat *fmt; - GHashTable *hash; - - currency_date_format_init (); - hash = g_hash_table_new (g_str_hash, g_str_equal); - - for (i = 0; cell_formats[i]; i++) { - char const * const * p = cell_formats[i]; - - for (; *p; p++) { - /* do not include text formats in the standard set */ - if (!strcmp ("@", *p)) - continue; - - fmt = style_format_new_XL (*p, FALSE); - if (fmt->regexp_str != NULL) { - /* TODO : * We could keep track of the regexps - * that General would match. and avoid putting - * them in the list. */ - if (g_hash_table_lookup (hash, fmt->regexp_str) == NULL) { - format_match_list = g_slist_append (format_match_list, fmt); - g_hash_table_insert (hash, fmt->regexp_str, fmt); - } else - format_dup_match_list = g_slist_append (format_dup_match_list, fmt); - } else - format_failed_match_list = g_slist_append (format_failed_match_list, fmt); - } - } - g_hash_table_destroy (hash); -} - -void -format_match_finish (void) -{ - GSList *l; - - for (l = format_match_list; l; l = l->next) - style_format_unref (l->data); - g_slist_free (format_match_list); - - for (l = format_dup_match_list; l; l = l->next) - style_format_unref (l->data); - g_slist_free (format_dup_match_list); - - for (l = format_failed_match_list; l; l = l->next) - style_format_unref (l->data); - g_slist_free (format_failed_match_list); - - currency_date_format_shutdown (); -} - -/* - * table_lookup: - * - * Looks the string in the table passed - */ -static int -table_lookup (char const *str, char const *const *table) -{ - char const *const *p = table; - int i = 0; - - for (p = table; *p; p++, i++) { - char const *v = *p; - char const *iv = _(*p); - - if (*v == '*') { - v++; - iv++; - } - - if (g_ascii_strcasecmp (str, v) == 0) - return i; - - if (g_ascii_strcasecmp (str, iv) == 0) - return i; - } - - return -1; -} - -/* - * extract_text: - * - * Returns a newly allocated string which is a region from - * STR. The ranges are defined in the regmatch_t variable MP - * in the fields rm_so and rm_eo - */ -static char * -extract_text (char const *str, const regmatch_t *mp) -{ - char *p; - - p = g_malloc (mp->rm_eo - mp->rm_so + 1); - strncpy (p, &str[mp->rm_so], mp->rm_eo - mp->rm_so); - p[mp->rm_eo - mp->rm_so] = 0; - - return p; -} - -/* - * Given a number of matches described by MP on S, - * compute the number based on the information on ARRAY - * - * Currently the code cannot mix a MATCH_NUMBER with any - * of the date/time matching. - */ -static GnmValue * -compute_value (char const *s, const regmatch_t *mp, - GByteArray *array, GnmDateConventions const *date_conv) -{ - int const len = array->len; - gnm_float number = 0.0; - guchar *data = array->data; - gboolean percentify = FALSE; - gboolean is_number = FALSE; - gboolean is_pm = FALSE; - gboolean is_explicit_am = FALSE; - gboolean is_neg = FALSE; - gboolean hours_are_cummulative = FALSE; - gboolean minutes_are_cummulative = FALSE; - gboolean seconds_are_cummulative = FALSE; - gboolean hours_set = FALSE; - gboolean minutes_set = FALSE; - gboolean seconds_set = FALSE; - int i; - int month, day, year, year_short; - int hours, minutes; - gnm_float seconds; - int numerator = 0, denominator = 1; - - GString const *thousands_sep = format_get_thousand (); - GString const *decimal = format_get_decimal (); - - month = day = year = year_short = -1; - hours = minutes = -1; - seconds = -1.; - - for (i = 0; i < len; ) { - MatchType type = *(data++); - char *str; - - str = extract_text (s, &mp[++i]); - -#ifdef DEBUG_NUMBER_MATCH - printf ("Item[%d] = \'%s\' is a %d\n", i, str, type); -#endif - switch (type) { - case MATCH_MONTH_FULL: - month = table_lookup (str, month_long); - if (month == -1) { - g_free (str); - return NULL; - } - month++; - break; - - case MATCH_MONTH_NUMBER: - month = atoi (str); - break; - - case MATCH_MONTH_SHORT: - month = table_lookup (str, month_short); - if (month == -1) { - g_free (str); - return NULL; - } - month++; - break; - - case MATCH_DAY_FULL: - /* FIXME: handle weekday */ - break; - - case MATCH_DAY_NUMBER: - day = atoi (str); - break; - - case MATCH_NUMERATOR: - numerator = atoi (str); - break; - - case MATCH_DENOMINATOR: - denominator = atoi (str); - if (denominator <= 0) - return NULL; - if (is_neg && numerator < 0) - return NULL; - - is_number = TRUE; - if (is_neg) - number -= numerator / (gnm_float)denominator; - else - number += numerator / (gnm_float)denominator; - break; - - case MATCH_NUMBER: - if (*str != '\0') { - char *ptr = str; - - switch (*ptr) { - case '-': - is_neg = TRUE; - ptr++; - break; - case '+': - ptr++; - /* Fall through. */ - default: - is_neg = FALSE; - } - - number = 0.; - /* FIXME: this loop is bogus. */ - while (1) { - int thisnumber; - if (number > DBL_MAX / 1000.0) { - g_free (str); - return NULL; - } - - number *= 1000.0; - - errno = 0; /* strtol sets errno, but does not clear it. */ - thisnumber = strtoul (ptr, &ptr, 10); - if (errno == ERANGE) { - g_free (str); - return NULL; - } - - number += thisnumber; - - if (strncmp (ptr, thousands_sep->str, thousands_sep->len) != 0) - break; - - ptr += thousands_sep->len; - } - is_number = TRUE; - if (is_neg) number = -number; - } - break; - - case MATCH_NUMBER_DECIMALS: { - char *exppart = NULL; - if (strncmp (str, decimal->str, decimal->len) == 0) { - char *end; - errno = 0; /* strtognum sets errno, but does not clear it. */ - if (seconds < 0) { - gnm_float fraction; - - for (end = str; *end && *end != 'e' && *end != 'E'; ) - end++; - if (*end) { - exppart = end + 1; - *end = 0; - } - - fraction = strtognum (str, &end); - if (is_neg) - number -= fraction; - else - number += fraction; - is_number = TRUE; - } else - seconds += strtognum (str, &end); - } - if (exppart) { - char *end; - int exponent; - - errno = 0; /* strtol sets errno, but does not clear it. */ - exponent = strtol (exppart, &end, 10); - number *= gpow10 (exponent); - } - break; - } - - case MATCH_CUMMULATIVE_HOURS: - hours_are_cummulative = TRUE; - if (str[0] == '-') is_neg = TRUE; - case MATCH_HOUR: - hours_set = TRUE; - hours = abs (atoi (str)); - break; - - case MATCH_CUMMULATIVE_MINUTES: - minutes_are_cummulative = TRUE; - if (str[0] == '-') is_neg = TRUE; - case MATCH_MINUTE: - minutes_set = TRUE; - minutes = abs (atoi (str)); - break; - - case MATCH_CUMMULATIVE_SECONDS : - seconds_are_cummulative = TRUE; - if (str[0] == '-') is_neg = TRUE; - case MATCH_SECOND: - seconds_set = TRUE; - seconds = abs (atoi (str)); - break; - - case MATCH_PERCENT: - percentify = TRUE; - break; - - case MATCH_YEAR_FULL: - year = atoi (str); - break; - - case MATCH_YEAR_SHORT: - year_short = atoi (str); - break; - - case MATCH_AMPM: - if (*str == 'p' || *str == 'P') - is_pm = TRUE; - else - is_explicit_am = TRUE; - break; - - case MATCH_SKIP: - break; - - case MATCH_STRING_CONSTANT: - return value_new_string_str (gnm_string_get_nocopy (str)); - - default : - g_warning ("compute_value: This should not happen."); - break; - } - - g_free (str); - } - - if (is_number) { - if (percentify) - number *= 0.01; - return value_new_float (number); - } - - if (!(year == -1 && month == -1 && day == -1)) { - time_t t = time (NULL); - static time_t lastt; - static struct tm tm; - GDate *date; - - if (t != lastt) { - /* - * Since localtime is moderately expensive, do - * at most one call per second. One per day - * would be enough but is harder to check for. - */ - lastt = t; - tm = *localtime (&t); - } - - if (year == -1) { - if (year_short != -1) { - /* Window of -75 thru +24 years. */ - /* (TODO: See what current - * version of MS Excel uses.) */ - /* Earliest allowable interpretation - * is 75 years ago. */ - int earliest_ccyy - = tm.tm_year + 1900 - 75; - int earliest_cc = earliest_ccyy / 100; - - g_return_val_if_fail (year_short >= 0 && - year_short <= 99, - NULL); - year = earliest_cc * 100 + year_short; - /* - * Our first guess at year has the same - * cc part as EARLIEST_CCYY, so is - * guaranteed to be in [earliest_ccyy - - * 99, earliest_ccyy + 99]. The yy - * part is of course year_short. - */ - if (year < earliest_ccyy) - year += 100; - /* - * year is now guaranteed to be in - * [earliest_ccyy, earliest_ccyy + 99], - * i.e. -75 thru +24 years from current - * year; and year % 100 == short_year. - */ - } else if (month != -1) { - /* Window of -6 thru +5 months. */ - /* (TODO: See what current - * version of MS Excel uses.) */ - int earliest_yyymm - = (tm.tm_year * 12 + - tm.tm_mon - 6); - year = earliest_yyymm / 12; - /* First estimate of yyy (i.e. years - * since 1900) is the yyy part of - * earliest_yyymm. year*12+month-1 is - * guaranteed to be in [earliest_yyymm - * - 11, earliest_yyymm + 11]. - */ - year += (year * 12 + month <= - earliest_yyymm); - /* year*12+month-1 is now guaranteed - * to be in [earliest_yyymm, - * earliest_yyymm + 11], i.e. - * representing -6 thru +5 months - * from now. - */ - year += 1900; - /* Finally convert from years since - * 1900 (yyy) to a proper 4-digit - * year. - */ - } else - year = 1900 + tm.tm_year; - } - if (month == -1) - month = tm.tm_mon + 1; - if (day == -1) - day = tm.tm_mday; - - if (year < 1900 || !g_date_valid_dmy (day, month, year)) - return NULL; - - date = g_date_new_dmy (day, month, year); - number = datetime_g_to_serial (date, date_conv); - g_date_free (date); - } - - if (!seconds_set && !minutes_set && !hours_set) - return value_new_int (number); - - if (!seconds_set) - seconds = 0; - - if (!minutes_set) - minutes = 0; - - if (!hours_set) - hours = 0; - - if (!hours_are_cummulative) { - if (is_pm) { - if (hours < 12) - hours += 12; - } else if (is_explicit_am && hours == 12) - hours = 0; - } - - if ((hours < 0 || hours > 23) && !hours_are_cummulative) - return NULL; - - if ((minutes < 0 || minutes > 59) && !minutes_are_cummulative) - return NULL; - - if ((seconds < 0 || seconds > 59) && !seconds_are_cummulative) - return NULL; - - if (hours == 0 && minutes == 0 && seconds == 0) - return value_new_int (number); - - number += (hours * 3600 + minutes * 60 + seconds) / (3600*24.0); - if (is_neg) number = -number; - - return value_new_float (number); -} - -/** - * format_match_simple : - * @s : A String to match against. - * - * Attempt to match the the supplied string as a simple value. - * - * WARNING WARNING WARNING : This routine should NEVER be changed to match - * VALUE_STRING that will break the parsers - * handling of named expressions. - */ -GnmValue * -format_match_simple (char const *text) -{ - /* Is it a boolean? */ - if (0 == g_ascii_strcasecmp (text, format_boolean (TRUE))) - return value_new_bool (TRUE); - if (0 == g_ascii_strcasecmp (text, format_boolean (FALSE))) - return value_new_bool (FALSE); - - /* Is it an error? */ - if (*text == '#') { - GnmValue *err = value_is_error (text); - if (err != NULL) - return err; - } - - /* Is it an integer? */ - { - char *end; - long l; - - errno = 0; /* strtol sets errno, but does not clear it. */ - l = strtol (text, &end, 10); - if (text != end && errno != ERANGE && l == (int)l) { - /* Allow and ignore spaces at the end. */ - while (*end == ' ') - end++; - if (*end == '\0') - return value_new_int ((int)l); - } - } - - /* Is it a double? */ - { - char *end; - gnm_float d; - - errno = 0; /* strtognum sets errno, but does not clear it. */ - d = strtognum (text, &end); - if (text != end && errno != ERANGE) { - /* Allow and ignore spaces at the end. */ - while (*end == ' ') - end++; - if (*end == '\0') - return value_new_float (d); - } - } - - return NULL; -} - -#define NM 40 - -/** - * format_match : - * - * @text : The text to parse - * @cur_fmt : The current format for the value (potentially NULL) - * @date_conv: optional date convention - * - * Attempts to parse the supplied string to see if it matches a known value - * format. The caller is responsible for releasing the resulting value. - **/ -GnmValue * -format_match (char const *text, GnmFormat *cur_fmt, - GnmDateConventions const *date_conv) -{ - GnmValue *v; - GSList *l; - regmatch_t mp[NM + 1]; - - if (text[0] == '\0') - return value_new_empty (); - - /* If it begins with a '\'' it is a string */ - if (text[0] == '\'') - return value_new_string (text + 1); - - if (cur_fmt) { - switch (cur_fmt->family) { - case FMT_TEXT: - return value_new_string (text); - - default: - if (cur_fmt->regexp_str != NULL && - go_regexec (&cur_fmt->regexp, text, NM, mp, 0) != REG_NOMATCH && - NULL != (v = compute_value (text, mp, cur_fmt->match_tags, - date_conv))) { -#ifdef DEBUG_NUMBER_MATCH - int i; - g_print ("matches expression: %s %s\n", cur_fmt->format, cur_fmt->regexp_str); - for (i = 0; i < NM; i++) { - char *p; - - if (mp[i].rm_so == -1) - break; - - p = extract_text (text, &mp[i]); - g_print ("%d %d->%s\n", mp[i].rm_so, mp[i].rm_eo, p); - } -#endif - - value_set_fmt (v, cur_fmt); - return v; - } else { -#ifdef DEBUG_NUMBER_MATCH - g_print ("does not match expression: %s %s\n", - cur_fmt->format, - cur_fmt->regexp_str ? cur_fmt->regexp_str : "(null)"); -#endif - } - } - } - - /* Check basic types */ - v = format_match_simple (text); - if (v != NULL) - return v; - - /* Fall back to checking the set of canned formats */ - for (l = format_match_list; l; l = l->next) { - GnmFormat *fmt = l->data; -#ifdef DEBUG_NUMBER_MATCH - printf ("test: %s \'%s\'\n", fmt->format, fmt->regexp_str); -#endif - if (go_regexec (&fmt->regexp, text, NM, mp, 0) == REG_NOMATCH) - continue; - -#ifdef DEBUG_NUMBER_MATCH - { - int i; - printf ("matches expression: %s %s\n", fmt->format, fmt->regexp_str); - for (i = 0; i < NM; i++) { - char *p; - - if (mp[i].rm_so == -1) - break; - - p = extract_text (text, &mp[i]); - printf ("%d %d->%s\n", mp[i].rm_so, mp[i].rm_eo, p); - } - } -#endif - - v = compute_value (text, mp, fmt->match_tags, date_conv); - -#ifdef DEBUG_NUMBER_MATCH - if (v) { - printf ("value = "); - value_dump (v); - } else - printf ("unable to compute value\n"); -#endif - if (v != NULL) { - value_set_fmt (v, fmt); - return v; - } - } - - return NULL; -} - -/** - * format_match_number : - * - * @text : The text to parse - * @cur_fmt : The current format for the value (potentially NULL) - * @date_conv: optional date convention - * - * Attempts to parse the supplied string to see if it matches a known value format. - * Will eventually use the current cell format in preference to canned formats. - * If @format is supplied it will get a copy of the matching format with no - * additional references. The caller is responsible for releasing the - * resulting value. Will ONLY return numbers. - */ -GnmValue * -format_match_number (char const *text, GnmFormat *cur_fmt, - GnmDateConventions const *date_conv) -{ - GnmValue *res = format_match (text, cur_fmt, date_conv); - - if (res != NULL) { - if (VALUE_IS_NUMBER (res)) - return res; - value_release (res); - } - return NULL; -} diff --git a/lib/goffice/split/number-match.h b/lib/goffice/split/number-match.h deleted file mode 100644 index c3b2d16a0f..0000000000 --- a/lib/goffice/split/number-match.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GNUMERIC_NUMBER_MATCH_H -#define GNUMERIC_NUMBER_MATCH_H - -#include "gnumeric.h" - -gboolean format_match_create (GnmFormat *fmt); -void format_match_release (GnmFormat *fmt); - -GnmValue *format_match_simple (char const *s); -GnmValue *format_match (char const *s, GnmFormat *cur_fmt, - GnmDateConventions const *date_conv); -GnmValue *format_match_number (char const *s, GnmFormat *cur_fmt, - GnmDateConventions const *date_conv); - -void format_match_init (void); -void format_match_finish (void); - -#endif /* GNUMERIC_NUMBER_MATCH_H */ diff --git a/lib/goffice/split/numbers.h b/lib/goffice/split/numbers.h deleted file mode 100644 index dfd7963941..0000000000 --- a/lib/goffice/split/numbers.h +++ /dev/null @@ -1,216 +0,0 @@ -#ifndef GNUMERIC_NUMBERS_H -#define GNUMERIC_NUMBERS_H - -#include -#ifdef HAVE_IEEEFP_H -#include -#endif -#ifdef HAVE_IEEE754_H -#include -#endif - -#ifdef WITH_LONG_DOUBLE - -#ifdef HAVE_SUNMATH_H -#include -#endif - -typedef long double gnm_float; -#ifdef HAVE_STRTOLD -#ifdef MUST_PROTOTYPE_STRTOLD -long double strtold (const char *, char **); -#endif -#define strtognum strtold -#else -#define NEED_FAKE_STRTOGNUM -/* Defined in gutils.c */ -gnm_float strtognum (const char *str, char **end); -#endif - -#ifdef HAVE_MODFL -#define modfgnum modfl -#else -#define NEED_FAKE_MODFGNUM -/* Defined in gutils.c */ -gnm_float modfgnum (gnm_float x, gnm_float *iptr); -#endif - -#ifdef HAVE_LDEXPL -#define ldexpgnum ldexpl -#else -#define NEED_FAKE_LDEXPGNUM -/* Defined in gutils.c */ -gnm_float ldexpgnum (gnm_float x, int exp); -#endif - -#ifdef HAVE_FREXPL -#define frexpgnum frexpl -#else -#define NEED_FAKE_FREXPGNUM -/* Defined in gutils.c */ -gnm_float frexpgnum (gnm_float x, int *exp); -#endif - -#ifdef HAVE_ERF -#define erfgnum erfl -#else -#define NEED_FAKE_ERFGNUM -/* Defined in gutils.c */ -gnm_float erfgnum (gnm_float x); -#endif - -#ifdef HAVE_ERFC -#define erfcgnum erfcl -#else -#define NEED_FAKE_ERFCGNUM -/* Defined in gutils.c */ -gnm_float erfcgnum (gnm_float x); -#endif - -#ifdef HAVE_YNL -#define yngnum ynl -#else -#define NEED_FAKE_YNGNUM -/* Defined in gutils.c */ -gnm_float yngnum (int n, gnm_float x); -#endif - -#define acosgnum acosl -#define acoshgnum acoshl -#define asingnum asinl -#define asinhgnum asinhl -#define atan2gnum atan2l -#define atangnum atanl -#define atanhgnum atanhl -#define ceilgnum ceill -#define cosgnum cosl -#define coshgnum coshl -#define expgnum expl -#define expm1gnum expm1l -#define finitegnum finitel -#define floorgnum floorl -#define fmodgnum fmodl -#define gnumabs fabsl -#define hypotgnum hypotl -#define isnangnum isnanl -#define lgammagnum lgammal -#define lgamma_rgnum lgammal_r -#define log10gnum log10l -#define log1pgnum log1pl -#define loggnum logl -#define powgnum powl -#define singnum sinl -#define sinhgnum sinhl -#define sqrtgnum sqrtl -#define tangnum tanl -#define tanhgnum tanhl - -#define GNUM_FORMAT_e "Le" -#define GNUM_FORMAT_E "LE" -#define GNUM_FORMAT_f "Lf" -#define GNUM_FORMAT_g "Lg" -#define GNUM_DIG LDBL_DIG -#define GNUM_MANT_DIG LDBL_MANT_DIG -#define GNUM_MIN_EXP LDBL_MIN_EXP -#define GNUM_MAX_EXP LDBL_MAX_EXP -#define GNUM_MIN LDBL_MIN -#define GNUM_MAX LDBL_MAX -#define GNUM_EPSILON LDBL_EPSILON -#define GNM_const(_c) _c ## L - -#else /* !WITH_LONG_DOUBLE */ - -typedef double gnm_float; - -#define acosgnum acos -#define acoshgnum acosh -#define asingnum asin -#define asinhgnum asinh -#define atan2gnum atan2 -#define atangnum atan -#define atanhgnum atanh -#define ceilgnum ceil -#define cosgnum cos -#define coshgnum cosh -#define erfcgnum erfc -#define erfgnum erf -#define expgnum exp -#define expm1gnum expm1 -#define floorgnum floor -#define fmodgnum fmod -#define frexpgnum frexp -#define gnumabs fabs -#define hypotgnum hypot -#define isnangnum isnan -#define ldexpgnum ldexp -#define lgammagnum lgamma -#define lgamma_rgnum lgamma_r -#define log10gnum log10 -#define log1pgnum log1p -#define loggnum log -#define modfgnum modf -#define powgnum pow -#define singnum sin -#define sinhgnum sinh -#define sqrtgnum sqrt -#define strtognum strtod -#define tangnum tan -#define tanhgnum tanh -#define yngnum yn - -/* What a circus! */ -#ifdef HAVE_FINITE -#define finitegnum finite -#elif defined(HAVE_ISFINITE) -#define finitegnum isfinite -#elif defined(FINITE) -#define finitegnum FINITE -#error "I don't know an equivalent of finite for your system; you lose" -#endif - -#ifndef HAVE_LGAMMA_R -#define NEED_FAKE_LGAMMA_R -/* Defined in gutils.c */ -gnm_float lgamma_rgnum (gnm_float x, int *signp); -#endif - -#ifndef HAVE_EXPM1 -#define NEED_FAKE_EXPM1 -/* Defined in gutils.c */ -gnm_float expm1 (gnm_float x); -#endif - -#ifndef HAVE_ASINH -#define NEED_FAKE_ASINH -/* Defined in gutils.c */ -gnm_float asinh (gnm_float x); -#endif - -#ifndef HAVE_ACOSH -#define NEED_FAKE_ACOSH -/* Defined in gutils.c */ -gnm_float acosh (gnm_float x); -#endif - -#ifndef HAVE_ATANH -#define NEED_FAKE_ATANH -/* Defined in gutils.c */ -gnm_float atanh (gnm_float x); -#endif - -#define GNUM_FORMAT_e "e" -#define GNUM_FORMAT_E "E" -#define GNUM_FORMAT_f "f" -#define GNUM_FORMAT_g "g" -#define GNUM_DIG DBL_DIG -#define GNUM_MANT_DIG DBL_MANT_DIG -#define GNUM_MIN_EXP DBL_MIN_EXP -#define GNUM_MAX_EXP DBL_MAX_EXP -#define GNUM_MIN DBL_MIN -#define GNUM_MAX DBL_MAX -#define GNUM_EPSILON DBL_EPSILON -#define GNM_const(_c) _c - -#endif - -#endif /* GNUMERIC_NUMBERS_H */ diff --git a/lib/goffice/split/plugin-loader-module.c b/lib/goffice/split/plugin-loader-module.c deleted file mode 100644 index 6e2893a6bc..0000000000 --- a/lib/goffice/split/plugin-loader-module.c +++ /dev/null @@ -1,653 +0,0 @@ -/* - * plugin-loader-module.c: Support for "g_module" (shared libraries) plugins. - * - * Author: Zbigniew Chyla (cyba@gnome.pl) - */ - -#include -#include -#include "gnumeric.h" -#include "plugin-loader-module.h" -#include "module-plugin-defs.h" - -#include "gutils.h" -#include "file.h" -#include "plugin.h" -#include "plugin-service.h" -#include "plugin-loader.h" - -#include -#include -#include -#include -#include -#include - -struct _GnmPluginLoaderModule { - GnmPluginLoader loader; - - gchar *module_file_name; - - GModule *handle; - void (*plugin_init_func) (void); - void (*plugin_cleanup_func) (void); -}; - -struct _GnmPluginLoaderModuleClass { - GnmPluginLoaderClass parent_class; -}; - -#define PARENT_TYPE (gnm_plugin_loader_get_type ()) - -static GObjectClass *parent_class = NULL; - -static void gnm_plugin_loader_module_set_attributes (GnmPluginLoader *loader, GHashTable *attrs, ErrorInfo **ret_error); -static void gnm_plugin_loader_module_load_base (GnmPluginLoader *loader, ErrorInfo **ret_error); -static void gnm_plugin_loader_module_unload_base (GnmPluginLoader *loader, ErrorInfo **ret_error); - -static void gnm_plugin_loader_module_load_service_general (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -#if 0 -static void gnm_plugin_loader_module_load_service_file_opener (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -static void gnm_plugin_loader_module_load_service_file_saver (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -static void gnm_plugin_loader_module_load_service_function_group (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -#endif // 0 -- unused, jsled -static void gnm_plugin_loader_module_load_service_plugin_loader (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -static void gnm_plugin_loader_module_load_service_ui (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - -static void -gnm_plugin_loader_module_set_attributes (GnmPluginLoader *loader, - GHashTable *attrs, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - gchar *module_file_name = NULL; - - GNM_INIT_RET_ERROR_INFO (ret_error); - module_file_name = g_hash_table_lookup (attrs, "module_file"); - if (module_file_name != NULL) { - loader_module->module_file_name = g_strdup (module_file_name); - } else { - *ret_error = error_info_new_str ( - _("Module file name not given.")); - } -} - -static void -gnm_plugin_loader_module_load_base (GnmPluginLoader *loader, ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - - GNM_INIT_RET_ERROR_INFO (ret_error); - if (g_module_supported ()) { - gchar *full_module_file_name; - GModule *handle; - ModulePluginFileStruct *plugin_file_struct = NULL; - gpointer plugin_init_func = NULL, plugin_cleanup_func = NULL; - - full_module_file_name = g_build_filename (gnm_plugin_get_dir_name (loader->plugin), - loader_module->module_file_name, NULL); - handle = g_module_open (full_module_file_name, 0); - if (handle != NULL) { - g_module_symbol (handle, "plugin_file_struct", (gpointer) &plugin_file_struct); - g_module_symbol (handle, "plugin_init", &plugin_init_func); - g_module_symbol (handle, "plugin_cleanup", &plugin_cleanup_func); - } - if (handle != NULL && plugin_file_struct != NULL && - plugin_file_struct->magic_number == GNUMERIC_MODULE_PLUGIN_MAGIC_NUMBER && - strcmp (plugin_file_struct->version, GNUMERIC_VERSION) == 0) { - loader_module->handle = handle; - loader_module->plugin_init_func = plugin_init_func; - loader_module->plugin_cleanup_func = plugin_cleanup_func; - if (loader_module->plugin_init_func != NULL) { - loader_module->plugin_init_func (); - } - } else { - if (handle == NULL) { - *ret_error = error_info_new_printf ( - _("Unable to open module file \"%s\"."), - full_module_file_name); - error_info_add_details (*ret_error, error_info_new_str (g_module_error())); - } else { - *ret_error = error_info_new_printf ( - _("Module file \"%s\" has invalid format."), - full_module_file_name); - if (plugin_file_struct == NULL) { - error_info_add_details (*ret_error, - error_info_new_str ( - _("File doesn't contain (\"plugin_file_struct\" symbol)."))); - } else if (plugin_file_struct->magic_number != GNUMERIC_MODULE_PLUGIN_MAGIC_NUMBER) { - error_info_add_details (*ret_error, - error_info_new_str ( - _("File has a bad magic number."))); - } else if (strcmp (plugin_file_struct->version, GNUMERIC_VERSION) == 0) { - error_info_add_details (*ret_error, - error_info_new_printf ( - _("Plugin version \"%s\" is different from application \"%s\"."), - plugin_file_struct->version, GNUMERIC_VERSION)); - } - g_module_close (handle); - } - } - g_free (full_module_file_name); - } else { - *ret_error = error_info_new_str ( - _("Dynamic module loading is not supported in this system.")); - } -} - -static void -gnm_plugin_loader_module_unload_base (GnmPluginLoader *loader, ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - - GNM_INIT_RET_ERROR_INFO (ret_error); - if (loader_module->plugin_cleanup_func != NULL) { - loader_module->plugin_cleanup_func (); - } - if (!g_module_close (loader_module->handle)) { - *ret_error = error_info_new_printf ( - _("Unable to close module file \"%s\"."), - loader_module->module_file_name); - error_info_add_details (*ret_error, error_info_new_str (g_module_error())); - } - loader_module->handle = NULL; - loader_module->plugin_init_func = NULL; - loader_module->plugin_cleanup_func = NULL; -} - -static void -gnm_plugin_loader_module_init (GnmPluginLoaderModule *loader_module) -{ - g_return_if_fail (IS_GNM_PLUGIN_LOADER_MODULE (loader_module)); - - loader_module->module_file_name = NULL; - loader_module->handle = NULL; -} - -static void -gnm_plugin_loader_module_finalize (GObject *obj) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (obj); - - g_free (loader_module->module_file_name); - loader_module->module_file_name = NULL; - - parent_class->finalize (obj); -} - -static void -gnm_plugin_loader_module_class_init (GObjectClass *gobject_class) -{ - GnmPluginLoaderClass *gnm_plugin_loader_class = GNM_PLUGIN_LOADER_CLASS (gobject_class); - - parent_class = g_type_class_peek_parent (gobject_class); - - gobject_class->finalize = gnm_plugin_loader_module_finalize; - - gnm_plugin_loader_class->set_attributes = gnm_plugin_loader_module_set_attributes; - gnm_plugin_loader_class->load_base = gnm_plugin_loader_module_load_base; - gnm_plugin_loader_class->unload_base = gnm_plugin_loader_module_unload_base; - gnm_plugin_loader_class->load_service_general = gnm_plugin_loader_module_load_service_general; - //gnm_plugin_loader_class->load_service_file_opener = gnm_plugin_loader_module_load_service_file_opener; - //gnm_plugin_loader_class->load_service_file_saver = gnm_plugin_loader_module_load_service_file_saver; - //gnm_plugin_loader_class->load_service_function_group = gnm_plugin_loader_module_load_service_function_group; - gnm_plugin_loader_class->load_service_plugin_loader = gnm_plugin_loader_module_load_service_plugin_loader; - gnm_plugin_loader_class->load_service_ui = gnm_plugin_loader_module_load_service_ui; -} - -GSF_CLASS (GnmPluginLoaderModule, gnm_plugin_loader_module, - gnm_plugin_loader_module_class_init, - gnm_plugin_loader_module_init, PARENT_TYPE) - -/* - * Service - general - */ - -typedef struct { - void (*module_func_init) (ErrorInfo **ret_error); - void (*module_func_cleanup) (ErrorInfo **ret_error); -} ServiceLoaderDataGeneral; - -static void -gnm_plugin_loader_module_func_init (GnmPluginService *service, ErrorInfo **ret_error) -{ - ErrorInfo *error = NULL; - ServiceLoaderDataGeneral *loader_data; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_GENERAL (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - loader_data->module_func_init (&error); - *ret_error = error; -} - -static void -gnm_plugin_loader_module_func_cleanup (GnmPluginService *service, ErrorInfo **ret_error) -{ - ErrorInfo *error = NULL; - ServiceLoaderDataGeneral *loader_data; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_GENERAL (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - loader_data->module_func_cleanup (&error); - *ret_error = error; -} - -static void -gnm_plugin_loader_module_load_service_general (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - gpointer module_func_init = NULL, module_func_cleanup = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_GENERAL (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - g_module_symbol (loader_module->handle, "plugin_init_general", &module_func_init); - g_module_symbol (loader_module->handle, "plugin_cleanup_general", &module_func_cleanup); - if (module_func_init != NULL && module_func_cleanup != NULL) { - PluginServiceGeneralCallbacks *cbs; - ServiceLoaderDataGeneral *loader_data; - - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_init = gnm_plugin_loader_module_func_init; - cbs->plugin_func_cleanup = gnm_plugin_loader_module_func_cleanup; - - loader_data = g_new (ServiceLoaderDataGeneral, 1); - loader_data->module_func_init = module_func_init; - loader_data->module_func_cleanup = module_func_cleanup; - g_object_set_data_full ( - G_OBJECT (service), "loader_data", loader_data, g_free); - } else { - *ret_error = error_info_new_printf ( - _("Module file \"%s\" has invalid format."), - loader_module->module_file_name); - if (module_func_init == NULL) { - error_info_add_details (*ret_error, - error_info_new_str ( - _("File doesn't contain \"plugin_init_general\" function."))); - } - if (module_func_cleanup == NULL) { - error_info_add_details (*ret_error, - error_info_new_str ( - _("File doesn't contain \"plugin_cleanup_general\" function."))); - } - } -} - -#if 0 -/* - * Service - file_opener - */ -typedef struct { - gboolean (*module_func_file_probe) (GnmFileOpener const *fo, GsfInput *input, - FileProbeLevel pl); - void (*module_func_file_open) (GnmFileOpener const *fo, IOContext *io_context, - WorkbookView *wbv, GsfInput *input); -} ServiceLoaderDataFileOpener; - -static gboolean -gnm_plugin_loader_module_func_file_probe (GnmFileOpener const *fo, GnmPluginService *service, - GsfInput *input, FileProbeLevel pl) -{ - ServiceLoaderDataFileOpener *loader_data; - - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE_FILE_OPENER (service), FALSE); - g_return_val_if_fail (input != NULL, FALSE); - - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - return loader_data->module_func_file_probe (fo, input, pl); -} - -static void -gnm_plugin_loader_module_func_file_open (GnmFileOpener const *fo, GnmPluginService *service, - IOContext *io_context, WorkbookView *wbv, - GsfInput *input) -{ - ServiceLoaderDataFileOpener *loader_data; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_FILE_OPENER (service)); - g_return_if_fail (input != NULL); - - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - loader_data->module_func_file_open (fo, io_context, wbv, input); -} - -static void -gnm_plugin_loader_module_load_service_file_opener (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - gchar *func_name_file_probe, *func_name_file_open; - gpointer module_func_file_probe = NULL, module_func_file_open = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_FILE_OPENER (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - func_name_file_probe = g_strconcat ( - plugin_service_get_id (service), "_file_probe", NULL); - g_module_symbol (loader_module->handle, func_name_file_probe, &module_func_file_probe); - func_name_file_open = g_strconcat ( - plugin_service_get_id (service), "_file_open", NULL); - g_module_symbol (loader_module->handle, func_name_file_open, &module_func_file_open); - if (module_func_file_open != NULL) { - PluginServiceFileOpenerCallbacks *cbs; - ServiceLoaderDataFileOpener *loader_data; - - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_file_probe = gnm_plugin_loader_module_func_file_probe; - cbs->plugin_func_file_open = gnm_plugin_loader_module_func_file_open; - - loader_data = g_new (ServiceLoaderDataFileOpener, 1); - loader_data->module_func_file_probe = module_func_file_probe; - loader_data->module_func_file_open = module_func_file_open; - g_object_set_data_full ( - G_OBJECT (service), "loader_data", loader_data, g_free); - } else { - *ret_error = error_info_new_printf ( - _("Module file \"%s\" has invalid format."), - loader_module->module_file_name); - error_info_add_details (*ret_error, error_info_new_printf ( - _("File doesn't contain \"%s\" function."), func_name_file_open)); - } - g_free (func_name_file_probe); - g_free (func_name_file_open); -} - -/* - * Service - file_saver - */ - -typedef struct { - void (*module_func_file_save) (GnmFileSaver const *fs, IOContext *io_context, - WorkbookView const *wbv, GsfOutput *output); -} ServiceLoaderDataFileSaver; - -static void -gnm_plugin_loader_module_func_file_save (GnmFileSaver const *fs, GnmPluginService *service, - IOContext *io_context, WorkbookView const *wbv, - GsfOutput *output) -{ - ServiceLoaderDataFileSaver *loader_data; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_FILE_SAVER (service)); - g_return_if_fail (GSF_IS_OUTPUT (output)); - - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - loader_data->module_func_file_save (fs, io_context, wbv, output); -} - -static void -gnm_plugin_loader_module_load_service_file_saver (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - gchar *func_name_file_save; - gpointer module_func_file_save = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_FILE_SAVER (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - func_name_file_save = g_strconcat ( - plugin_service_get_id (service), "_file_save", NULL); - g_module_symbol (loader_module->handle, func_name_file_save, &module_func_file_save); - if (module_func_file_save != NULL) { - PluginServiceFileSaverCallbacks *cbs; - ServiceLoaderDataFileSaver *loader_data; - - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_file_save = gnm_plugin_loader_module_func_file_save; - - loader_data = g_new (ServiceLoaderDataFileSaver, 1); - loader_data->module_func_file_save = module_func_file_save; - g_object_set_data_full ( - G_OBJECT (service), "loader_data", loader_data, g_free); - } else { - *ret_error = error_info_new_printf ( - _("Module file \"%s\" has invalid format."), - loader_module->module_file_name); - error_info_add_details (*ret_error, - error_info_new_printf ( - _("File doesn't contain \"%s\" function."), - func_name_file_save)); - } - g_free (func_name_file_save); -} - -/* - * Service - function_group - */ - -typedef struct { - GnmFuncDescriptor *module_fn_info_array; - GHashTable *function_indices; -} ServiceLoaderDataFunctionGroup; - -static void -function_group_loader_data_free (gpointer data) -{ - ServiceLoaderDataFunctionGroup *ld = data; - - g_hash_table_destroy (ld->function_indices); - g_free (ld); -} - -static gboolean -gnm_plugin_loader_module_func_desc_load (GnmPluginService *service, - char const *name, - GnmFuncDescriptor *res) -{ - ServiceLoaderDataFunctionGroup *loader_data; - gpointer func_index_ptr; - - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE_FUNCTION_GROUP (service), FALSE); - g_return_val_if_fail (name != NULL, FALSE); - - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - if (g_hash_table_lookup_extended (loader_data->function_indices, (gpointer) name, - NULL, &func_index_ptr)) { - int i = GPOINTER_TO_INT (func_index_ptr); - *res = loader_data->module_fn_info_array[i]; - return TRUE; - } - return FALSE; -} - -static void -gnm_plugin_loader_module_load_service_function_group (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - gchar *fn_info_array_name; - GnmFuncDescriptor *module_fn_info_array = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_FUNCTION_GROUP (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - fn_info_array_name = g_strconcat ( - plugin_service_get_id (service), "_functions", NULL); - g_module_symbol (loader_module->handle, fn_info_array_name, (gpointer) &module_fn_info_array); - if (module_fn_info_array != NULL) { - PluginServiceFunctionGroupCallbacks *cbs; - ServiceLoaderDataFunctionGroup *loader_data; - gint i; - - cbs = plugin_service_get_cbs (service); - cbs->func_desc_load = &gnm_plugin_loader_module_func_desc_load; - - loader_data = g_new (ServiceLoaderDataFunctionGroup, 1); - loader_data->module_fn_info_array = module_fn_info_array; - loader_data->function_indices = g_hash_table_new (&g_str_hash, &g_str_equal); - for (i = 0; module_fn_info_array[i].name != NULL; i++) { - g_hash_table_insert (loader_data->function_indices, - (gpointer) module_fn_info_array[i].name, - GINT_TO_POINTER (i)); - } - g_object_set_data_full ( - G_OBJECT (service), "loader_data", loader_data, function_group_loader_data_free); - } else { - *ret_error = error_info_new_printf ( - _("Module file \"%s\" has invalid format."), - loader_module->module_file_name); - error_info_add_details (*ret_error, - error_info_new_printf ( - _("File doesn't contain \"%s\" array."), - fn_info_array_name)); - } - g_free (fn_info_array_name); -} -#endif // 0 - -/* - * Service - plugin_loader - */ - -typedef struct { - GType (*module_func_get_loader_type) (ErrorInfo **ret_error); -} ServiceLoaderDataPluginLoader; - -static GType -gnm_plugin_loader_module_func_get_loader_type (GnmPluginService *service, - ErrorInfo **ret_error) -{ - ServiceLoaderDataPluginLoader *loader_data; - ErrorInfo *error = NULL; - GType loader_type; - - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE_PLUGIN_LOADER (service), 0); - - GNM_INIT_RET_ERROR_INFO (ret_error); - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - loader_type = loader_data->module_func_get_loader_type (&error); - if (error == NULL) { - return loader_type; - } else { - *ret_error = error; - return (GType) 0; - } -} - -static void -gnm_plugin_loader_module_load_service_plugin_loader (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - gchar *func_name_get_loader_type; - gpointer module_func_get_loader_type = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_PLUGIN_LOADER (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - func_name_get_loader_type = g_strconcat ( - plugin_service_get_id (service), "_get_loader_type", NULL); - g_module_symbol (loader_module->handle, func_name_get_loader_type, - &module_func_get_loader_type); - if (module_func_get_loader_type != NULL) { - PluginServicePluginLoaderCallbacks *cbs; - ServiceLoaderDataPluginLoader *loader_data; - - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_get_loader_type = gnm_plugin_loader_module_func_get_loader_type; - - loader_data = g_new (ServiceLoaderDataPluginLoader, 1); - loader_data->module_func_get_loader_type = module_func_get_loader_type; - g_object_set_data_full ( - G_OBJECT (service), "loader_data", loader_data, g_free); - } else - *ret_error = error_info_new_printf ( - _("Module doesn't contain \"%s\" function."), - func_name_get_loader_type); - g_free (func_name_get_loader_type); -} - -/* - * Service - ui - */ - -typedef struct { - ModulePluginUIActions *module_ui_actions_array; - GHashTable *ui_actions_hash; -} ServiceLoaderDataUI; - -static void -ui_loader_data_free (gpointer data) -{ - ServiceLoaderDataUI *ld = data; - - g_hash_table_destroy (ld->ui_actions_hash); - g_free (ld); -} - -static void -gnm_plugin_loader_module_func_exec_action (GnmPluginService *service, - GnmAction const *action, - WorkbookControl *wbc, - ErrorInfo **ret_error) -{ - ServiceLoaderDataUI *loader_data; - gpointer action_index_ptr; - int action_index; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_UI (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - loader_data = g_object_get_data (G_OBJECT (service), "loader_data"); - if (!g_hash_table_lookup_extended (loader_data->ui_actions_hash, action->id, - NULL, &action_index_ptr)) { - *ret_error = error_info_new_printf (_("Unknown action: %s"), action->id); - return; - } - action_index = GPOINTER_TO_INT (action_index_ptr); - loader_data->module_ui_actions_array [action_index].handler (action, wbc); -} - -static void -gnm_plugin_loader_module_load_service_ui (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - GnmPluginLoaderModule *loader_module = GNM_PLUGIN_LOADER_MODULE (loader); - char *ui_actions_array_name; - ModulePluginUIActions *module_ui_actions_array = NULL; - PluginServiceUICallbacks *cbs; - ServiceLoaderDataUI *loader_data; - gint i; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_UI (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - ui_actions_array_name = g_strconcat ( - plugin_service_get_id (service), "_ui_actions", NULL); - g_module_symbol (loader_module->handle, ui_actions_array_name, (gpointer) &module_ui_actions_array); - if (module_ui_actions_array == NULL) { - *ret_error = error_info_new_printf ( - _("Module file \"%s\" has invalid format."), - loader_module->module_file_name); - error_info_add_details (*ret_error, error_info_new_printf ( - _("File doesn't contain \"%s\" array."), ui_actions_array_name)); - g_free (ui_actions_array_name); - return; - } - g_free (ui_actions_array_name); - - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_exec_action = gnm_plugin_loader_module_func_exec_action; - - loader_data = g_new (ServiceLoaderDataUI, 1); - loader_data->module_ui_actions_array = module_ui_actions_array; - loader_data->ui_actions_hash = g_hash_table_new (g_str_hash, g_str_equal); - for (i = 0; module_ui_actions_array[i].name != NULL; i++) - g_hash_table_insert (loader_data->ui_actions_hash, - (gpointer) module_ui_actions_array[i].name, - GINT_TO_POINTER (i)); - g_object_set_data_full (G_OBJECT (service), - "loader_data", loader_data, ui_loader_data_free); -} diff --git a/lib/goffice/split/plugin-loader-module.h b/lib/goffice/split/plugin-loader-module.h deleted file mode 100644 index aab5209fb6..0000000000 --- a/lib/goffice/split/plugin-loader-module.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef GNUMERIC_PLUGIN_LOADER_MODULE_H -#define GNUMERIC_PLUGIN_LOADER_MODULE_H - -#include - -#define TYPE_GNM_PLUGIN_LOADER_MODULE (gnm_plugin_loader_module_get_type ()) -#define GNM_PLUGIN_LOADER_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GNM_PLUGIN_LOADER_MODULE, GnmPluginLoaderModule)) -#define GNM_PLUGIN_LOADER_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GNM_PLUGIN_LOADER_MODULE, GnmPluginLoaderModuleClass)) -#define IS_GNM_PLUGIN_LOADER_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GNM_PLUGIN_LOADER_MODULE)) -#define IS_GNM_PLUGIN_LOADER_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GNM_PLUGIN_LOADER_MODULE)) - -typedef struct _GnmPluginLoaderModule GnmPluginLoaderModule; -typedef struct _GnmPluginLoaderModuleClass GnmPluginLoaderModuleClass; - -GType gnm_plugin_loader_module_get_type (void); - -#endif /* GNUMERIC_PLUGIN_LOADER_MODULE_H */ diff --git a/lib/goffice/split/plugin-loader.c b/lib/goffice/split/plugin-loader.c deleted file mode 100644 index 9bcae69576..0000000000 --- a/lib/goffice/split/plugin-loader.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * plugin-loader.c: Base class for plugin loaders. - * - * Author: Zbigniew Chyla (cyba@gnome.pl) - */ - -#include -#include -#include "gnumeric.h" -#include "plugin-loader.h" - -#include "plugin.h" -#include "plugin-service.h" - -#include - -#define PL_GET_CLASS(loader) GNM_PLUGIN_LOADER_CLASS (G_OBJECT_GET_CLASS (loader)) - -static GObjectClass *parent_class = NULL; - -static void -gnm_plugin_loader_init (GnmPluginLoader *loader) -{ - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - - loader->plugin = NULL; - loader->is_base_loaded = FALSE; - loader->n_loaded_services = 0; -} - -static void -gnm_plugin_loader_finalize (GObject *obj) -{ - g_return_if_fail (IS_GNM_PLUGIN_LOADER (obj)); - - parent_class->finalize (obj); -} - -static void -gnm_plugin_loader_unload_service_general_real (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - PluginServiceGeneralCallbacks *cbs; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_GENERAL (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_init = NULL; - cbs->plugin_func_cleanup = NULL; -} - -static void -gnm_plugin_loader_unload_service_plugin_loader_real (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - PluginServicePluginLoaderCallbacks *cbs; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_PLUGIN_LOADER (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_get_loader_type = NULL; -} - -static void -gnm_plugin_loader_unload_service_ui_real (GnmPluginLoader *loader, - GnmPluginService *service, - ErrorInfo **ret_error) -{ - PluginServiceUICallbacks *cbs; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (IS_GNM_PLUGIN_SERVICE_UI (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - cbs = plugin_service_get_cbs (service); - cbs->plugin_func_exec_action = NULL; -} - -static void -gnm_plugin_loader_class_init (GObjectClass *gobject_class) -{ - GnmPluginLoaderClass *plugin_loader_class = GNM_PLUGIN_LOADER_CLASS (gobject_class); - - parent_class = g_type_class_peek_parent (gobject_class); - - gobject_class->finalize = gnm_plugin_loader_finalize; - - plugin_loader_class->set_attributes = NULL; - plugin_loader_class->load_base = NULL; - plugin_loader_class->unload_base = NULL; - plugin_loader_class->load_service_general = NULL; - plugin_loader_class->unload_service_general = gnm_plugin_loader_unload_service_general_real; - // plugin_loader_class->load_service_file_opener = NULL; - // plugin_loader_class->unload_service_file_opener = gnm_plugin_loader_unload_service_file_opener_real; - // plugin_loader_class->load_service_file_saver = NULL; - // plugin_loader_class->unload_service_file_saver = gnm_plugin_loader_unload_service_file_saver_real; - // plugin_loader_class->load_service_function_group = NULL; - // plugin_loader_class->unload_service_function_group = gnm_plugin_loader_unload_service_function_group_real; - plugin_loader_class->load_service_plugin_loader = NULL; - plugin_loader_class->unload_service_plugin_loader = gnm_plugin_loader_unload_service_plugin_loader_real; - plugin_loader_class->load_service_ui = NULL; - plugin_loader_class->unload_service_ui = gnm_plugin_loader_unload_service_ui_real; -} - -GSF_CLASS (GnmPluginLoader, gnm_plugin_loader, - gnm_plugin_loader_class_init, gnm_plugin_loader_init, - G_TYPE_OBJECT) - -void -gnm_plugin_loader_set_attributes (GnmPluginLoader *loader, - GHashTable *attrs, - ErrorInfo **ret_error) -{ - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - if (PL_GET_CLASS (loader)->set_attributes ) { - PL_GET_CLASS (loader)->set_attributes (loader, attrs, ret_error); - } else { - *ret_error = error_info_new_printf (_("Loader has no set_attributes method.\n")); - } -} - -void -gnm_plugin_loader_set_plugin (GnmPluginLoader *loader, GnmPlugin *plugin) -{ - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (IS_GNM_PLUGIN (plugin)); - - loader->plugin = plugin; -} - -void -gnm_plugin_loader_load_base (GnmPluginLoader *loader, ErrorInfo **ret_error) -{ - GnmPluginLoaderClass *gnm_plugin_loader_class; - ErrorInfo *error = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (!loader->is_base_loaded); - - GNM_INIT_RET_ERROR_INFO (ret_error); - gnm_plugin_loader_class = PL_GET_CLASS (loader); - if (gnm_plugin_loader_class->load_base != NULL) { - gnm_plugin_loader_class->load_base (loader, &error); - } else { - *ret_error = error_info_new_printf (_("Loader has no load_base method.\n")); - } - if (error == NULL) { - loader->is_base_loaded = TRUE; - plugin_message (3, "Loaded plugin \"%s\".\n", gnm_plugin_get_id (loader->plugin)); - } else { - *ret_error = error; - } -} - -void -gnm_plugin_loader_unload_base (GnmPluginLoader *loader, ErrorInfo **ret_error) -{ - GnmPluginLoaderClass *gnm_plugin_loader_class; - ErrorInfo *error = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (loader->is_base_loaded); - - GNM_INIT_RET_ERROR_INFO (ret_error); - gnm_plugin_loader_class = PL_GET_CLASS (loader); - if (gnm_plugin_loader_class->unload_base != NULL) { - gnm_plugin_loader_class->unload_base (loader, &error); - if (error == NULL) { - loader->is_base_loaded = FALSE; - plugin_message (3, "Unloaded plugin \"%s\".\n", gnm_plugin_get_id (loader->plugin)); - } else { - *ret_error = error; - } - } -} - -void -gnm_plugin_loader_load_service (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error) -{ - GnmPluginLoaderClass *gnm_plugin_loader_class; - void (*load_service_method) (GnmPluginLoader *, GnmPluginService *, ErrorInfo **) = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (IS_GNM_PLUGIN_SERVICE (service)); - g_return_if_fail (loader->is_base_loaded); - - GNM_INIT_RET_ERROR_INFO (ret_error); - gnm_plugin_loader_class = PL_GET_CLASS (loader); - if (IS_GNM_PLUGIN_SERVICE_GENERAL (service)) { - load_service_method = gnm_plugin_loader_class->load_service_general; - /*} else if (IS_GNM_PLUGIN_SERVICE_FILE_OPENER (service)) { - load_service_method = gnm_plugin_loader_class->load_service_file_opener; - } else if (IS_GNM_PLUGIN_SERVICE_FILE_SAVER (service)) { - load_service_method = gnm_plugin_loader_class->load_service_file_saver; - } else if (IS_GNM_PLUGIN_SERVICE_FUNCTION_GROUP (service)) { - load_service_method = gnm_plugin_loader_class->load_service_function_group;*/ - } else if (IS_GNM_PLUGIN_SERVICE_PLUGIN_LOADER (service)) { - load_service_method = gnm_plugin_loader_class->load_service_plugin_loader; - } else if (IS_GNM_PLUGIN_SERVICE_UI (service)) { - load_service_method = gnm_plugin_loader_class->load_service_ui; - } else if (IS_GNM_PLUGIN_SERVICE_SIMPLE (service)) { - load_service_method = NULL; - } else { - *ret_error = error_info_new_printf (_("Service '%s' not supported by loader."), - G_OBJECT_TYPE_NAME (service)); - } - if (load_service_method != NULL) - load_service_method (loader, service, ret_error); - - if (*ret_error == NULL) - loader->n_loaded_services++; -} - -void -gnm_plugin_loader_unload_service (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error) -{ - GnmPluginLoaderClass *gnm_plugin_loader_class; - void (*unload_service_method) (GnmPluginLoader *, GnmPluginService *, ErrorInfo **) = NULL; - ErrorInfo *error = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_LOADER (loader)); - g_return_if_fail (IS_GNM_PLUGIN_SERVICE (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - gnm_plugin_loader_class = PL_GET_CLASS (loader); - - if (IS_GNM_PLUGIN_SERVICE_GENERAL (service)) { - unload_service_method = gnm_plugin_loader_class->unload_service_general; - /*} else if (IS_GNM_PLUGIN_SERVICE_FILE_OPENER (service)) { - unload_service_method = gnm_plugin_loader_class->unload_service_file_opener; - } else if (IS_GNM_PLUGIN_SERVICE_FILE_SAVER (service)) { - unload_service_method = gnm_plugin_loader_class->unload_service_file_saver; - } else if (IS_GNM_PLUGIN_SERVICE_FUNCTION_GROUP (service)) { - unload_service_method = gnm_plugin_loader_class->unload_service_function_group;*/ - } else if (IS_GNM_PLUGIN_SERVICE_PLUGIN_LOADER (service)) { - unload_service_method = gnm_plugin_loader_class->unload_service_plugin_loader; - } else if (IS_GNM_PLUGIN_SERVICE_UI (service)) { - unload_service_method = gnm_plugin_loader_class->unload_service_ui; - } else if (IS_GNM_PLUGIN_SERVICE_SIMPLE (service)) { - unload_service_method = NULL; - } else - *ret_error = error_info_new_printf (_("Service '%s' not supported by loader."), - G_OBJECT_TYPE_NAME (service)); - - if (unload_service_method != NULL) - unload_service_method (loader, service, &error); - if (error == NULL) { - g_return_if_fail (loader->n_loaded_services > 0); - loader->n_loaded_services--; - if (loader->n_loaded_services == 0) { - gnm_plugin_loader_unload_base (loader, &error); - error_info_free (error); - } - } else { - *ret_error = error; - } -} - -gboolean -gnm_plugin_loader_is_base_loaded (GnmPluginLoader *loader) -{ - g_return_val_if_fail (IS_GNM_PLUGIN_LOADER (loader), FALSE); - - return loader->is_base_loaded; -} diff --git a/lib/goffice/split/plugin-loader.h b/lib/goffice/split/plugin-loader.h deleted file mode 100644 index 79b36806dd..0000000000 --- a/lib/goffice/split/plugin-loader.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef GNUMERIC_PLUGIN_LOADER_H -#define GNUMERIC_PLUGIN_LOADER_H - -#include -#include -#include -#include "gnumeric.h" -#include "error-info.h" -#include "plugin.h" - -#define TYPE_GNM_PLUGIN_LOADER (gnm_plugin_loader_get_type ()) -#define GNM_PLUGIN_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GNM_PLUGIN_LOADER, GnmPluginLoader)) -#define GNM_PLUGIN_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GNM_PLUGIN_LOADER, GnmPluginLoaderClass)) -#define IS_GNM_PLUGIN_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GNM_PLUGIN_LOADER)) -#define IS_GNM_PLUGIN_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GNM_PLUGIN_LOADER)) - -typedef struct _GnmPluginLoaderClass GnmPluginLoaderClass; - -struct _GnmPluginLoader { - GObject object; - - GnmPlugin *plugin; - gboolean is_base_loaded; - gint n_loaded_services; -}; - -struct _GnmPluginLoaderClass { - GObjectClass parent_class; - - void (*set_attributes) (GnmPluginLoader *loader, GHashTable *attrs, ErrorInfo **ret_error); - void (*load_base) (GnmPluginLoader *loader, ErrorInfo **ret_error); - void (*unload_base) (GnmPluginLoader *loader, ErrorInfo **ret_error); - void (*load_service_general) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - void (*unload_service_general) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - //void (*load_service_file_opener) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - //void (*unload_service_file_opener) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - //void (*load_service_file_saver) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - //void (*unload_service_file_saver) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - // void (*load_service_function_group) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - // void (*unload_service_function_group) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - void (*load_service_plugin_loader) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - void (*unload_service_plugin_loader) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - void (*load_service_ui) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); - void (*unload_service_ui) (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -}; - -GType gnm_plugin_loader_get_type (void); - -void gnm_plugin_loader_set_attributes (GnmPluginLoader *loader, - GHashTable *attrs, - ErrorInfo **ret_error); -void gnm_plugin_loader_set_plugin (GnmPluginLoader *loader, GnmPlugin *plugin); -void gnm_plugin_loader_load_base (GnmPluginLoader *loader, ErrorInfo **ret_error); -void gnm_plugin_loader_unload_base (GnmPluginLoader *loader, ErrorInfo **ret_error); -void gnm_plugin_loader_load_service (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -void gnm_plugin_loader_unload_service (GnmPluginLoader *loader, GnmPluginService *service, ErrorInfo **ret_error); -gboolean gnm_plugin_loader_is_base_loaded (GnmPluginLoader *loader); - -#endif /* GNUMERIC_PLUGIN_LOADER_H */ diff --git a/lib/goffice/split/plugin-service.c b/lib/goffice/split/plugin-service.c deleted file mode 100644 index 6179bd43d0..0000000000 --- a/lib/goffice/split/plugin-service.c +++ /dev/null @@ -1,772 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * plugin-service.c: Plugin services - reading XML info, activating, etc. - * (everything independent of plugin loading method) - * - * Author: Zbigniew Chyla (cyba@gnome.pl) - */ - -#include -#include "gnumeric.h" -#include "plugin-service-impl.h" - -#include "gutils.h" -//#include "workbook.h" -//#include "workbook-view.h" -//#include "func.h" -#include "io-context.h" -#include "error-info.h" -#include "file.h" -//#include "file-priv.h" -#include "plugin.h" -#include "xml-io.h" - -#include -#include -#include -#include -#include -#include - -#include - -static GHashTable *services = NULL; - -#if 0 -static FileFormatLevel -parse_format_level_str (gchar const *format_level_str, FileFormatLevel def) -{ - FileFormatLevel format_level; - - if (format_level_str == NULL) { - format_level = def; - } else if (g_ascii_strcasecmp (format_level_str, "none") == 0) { - format_level = FILE_FL_NONE; - } else if (g_ascii_strcasecmp (format_level_str, "write_only") == 0) { - format_level = FILE_FL_WRITE_ONLY; - } else if (g_ascii_strcasecmp (format_level_str, "new") == 0) { - format_level = FILE_FL_NEW; - } else if (g_ascii_strcasecmp (format_level_str, "manual") == 0) { - format_level = FILE_FL_MANUAL; - } else if (g_ascii_strcasecmp (format_level_str, "manual_remember") == 0) { - format_level = FILE_FL_MANUAL_REMEMBER; - } else if (g_ascii_strcasecmp (format_level_str, "auto") == 0) { - format_level = FILE_FL_AUTO; - } else { - format_level = def; - } - - return format_level; -} - -static GHashTable * -get_plugin_file_savers_hash (GnmPlugin *plugin) -{ - GHashTable *hash; - - hash = g_object_get_data (G_OBJECT (plugin), "file_savers_hash"); - if (hash == NULL) { - hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - g_object_set_data_full ( - G_OBJECT (plugin), "file_savers_hash", - hash, (GDestroyNotify) g_hash_table_destroy); - } - - return hash; -} -#endif // 0 -- unused, jsled - - -static void -plugin_service_init (GObject *obj) -{ - GnmPluginService *service = GNM_PLUGIN_SERVICE (obj); - - service->id = NULL; - service->is_active = FALSE; - service->is_loaded = FALSE; - service->plugin = NULL; - service->cbs_ptr = NULL; - service->saved_description = NULL; -} - -static void -plugin_service_finalize (GObject *obj) -{ - GnmPluginService *service = GNM_PLUGIN_SERVICE (obj); - GObjectClass *parent_class; - - g_free (service->id); - service->id = NULL; - g_free (service->saved_description); - service->saved_description = NULL; - - parent_class = g_type_class_peek (G_TYPE_OBJECT); - parent_class->finalize (obj); -} - -static void -plugin_service_class_init (GObjectClass *gobject_class) -{ - GnmPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); - - gobject_class->finalize = plugin_service_finalize; - plugin_service_class->read_xml = NULL; - plugin_service_class->activate = NULL; - plugin_service_class->deactivate = NULL; - plugin_service_class->get_description = NULL; -} - -GSF_CLASS (GnmPluginService, plugin_service, - plugin_service_class_init, plugin_service_init, - G_TYPE_OBJECT) - - -/****************************************************************************/ - -/* - * PluginServiceGeneral - */ - -typedef struct{ - GnmPluginServiceClass plugin_service_class; -} PluginServiceGeneralClass; - -struct _PluginServiceGeneral { - GnmPluginService plugin_service; - PluginServiceGeneralCallbacks cbs; -}; - - -static void -plugin_service_general_init (GObject *obj) -{ - PluginServiceGeneral *service_general = GNM_PLUGIN_SERVICE_GENERAL (obj); - - GNM_PLUGIN_SERVICE (obj)->cbs_ptr = &service_general->cbs; - service_general->cbs.plugin_func_init = NULL; - service_general->cbs.plugin_func_cleanup = NULL; -} - -static void -plugin_service_general_activate (GnmPluginService *service, ErrorInfo **ret_error) -{ - PluginServiceGeneral *service_general = GNM_PLUGIN_SERVICE_GENERAL (service); - ErrorInfo *error = NULL; - - GNM_INIT_RET_ERROR_INFO (ret_error); - plugin_service_load (service, &error); - if (error != NULL) { - *ret_error = error_info_new_str_with_details ( - _("Error while loading plugin service."), - error); - return; - } - g_return_if_fail (service_general->cbs.plugin_func_init != NULL); - service_general->cbs.plugin_func_init (service, &error); - if (error != NULL) { - *ret_error = error_info_new_str_with_details ( - _("Initializing function inside plugin returned error."), - error); - return; - } - service->is_active = TRUE; -} - -static void -plugin_service_general_deactivate (GnmPluginService *service, ErrorInfo **ret_error) -{ - PluginServiceGeneral *service_general = GNM_PLUGIN_SERVICE_GENERAL (service); - ErrorInfo *error = NULL; - - GNM_INIT_RET_ERROR_INFO (ret_error); - g_return_if_fail (service_general->cbs.plugin_func_cleanup != NULL); - service_general->cbs.plugin_func_cleanup (service, &error); - if (error != NULL) { - *ret_error = error_info_new_str_with_details ( - _("Cleanup function inside plugin returned error."), - error); - return; - } - service->is_active = FALSE; -} - -static char * -plugin_service_general_get_description (GnmPluginService *service) -{ - return g_strdup (_("General")); -} - -static void -plugin_service_general_class_init (GObjectClass *gobject_class) -{ - GnmPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); - - plugin_service_class->activate = plugin_service_general_activate; - plugin_service_class->deactivate = plugin_service_general_deactivate; - plugin_service_class->get_description = plugin_service_general_get_description; -} - -GSF_CLASS (PluginServiceGeneral, plugin_service_general, - plugin_service_general_class_init, plugin_service_general_init, - GNM_PLUGIN_SERVICE_TYPE) - -/** -- **/ - -/* - * PluginServicePluginLoader - */ - -typedef struct{ - GnmPluginServiceClass plugin_service_class; -} PluginServicePluginLoaderClass; - -struct _PluginServicePluginLoader { - GnmPluginService plugin_service; - PluginServicePluginLoaderCallbacks cbs; -}; - - -static void -plugin_service_plugin_loader_init (GObject *obj) -{ - PluginServicePluginLoader *service_plugin_loader = GNM_PLUGIN_SERVICE_PLUGIN_LOADER (obj); - - GNM_PLUGIN_SERVICE (obj)->cbs_ptr = &service_plugin_loader->cbs; -} - -GType -plugin_service_plugin_loader_generate_type (GnmPluginService *service, ErrorInfo **ret_error) -{ - PluginServicePluginLoader *service_plugin_loader = GNM_PLUGIN_SERVICE_PLUGIN_LOADER (service); - ErrorInfo *error = NULL; - GType loader_type; - - GNM_INIT_RET_ERROR_INFO (ret_error); - plugin_service_load (service, &error); - if (error == NULL) { - loader_type = service_plugin_loader->cbs.plugin_func_get_loader_type ( - service, &error); - if (error == NULL) - return loader_type; - *ret_error = error; - } else { - *ret_error = error_info_new_str_with_details ( - _("Error while loading plugin service."), - error); - } - return G_TYPE_NONE; -} - -static void -plugin_service_plugin_loader_activate (GnmPluginService *service, ErrorInfo **ret_error) -{ - gchar *full_id; - - GNM_INIT_RET_ERROR_INFO (ret_error); - full_id = g_strconcat ( - gnm_plugin_get_id (service->plugin), ":", service->id, NULL); - plugins_register_loader (full_id, service); - g_free (full_id); - service->is_active = TRUE; -} - -static void -plugin_service_plugin_loader_deactivate (GnmPluginService *service, ErrorInfo **ret_error) -{ - gchar *full_id; - - GNM_INIT_RET_ERROR_INFO (ret_error); - full_id = g_strconcat ( - gnm_plugin_get_id (service->plugin), ":", service->id, NULL); - plugins_register_loader (full_id, service); - g_free (full_id); - service->is_active = FALSE; -} - -static char * -plugin_service_plugin_loader_get_description (GnmPluginService *service) -{ - return g_strdup (_("Plugin loader")); -} - -static void -plugin_service_plugin_loader_class_init (GObjectClass *gobject_class) -{ - GnmPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); - - plugin_service_class->activate = plugin_service_plugin_loader_activate; - plugin_service_class->deactivate = plugin_service_plugin_loader_deactivate; - plugin_service_class->get_description = plugin_service_plugin_loader_get_description; -} - -GSF_CLASS (PluginServicePluginLoader, plugin_service_plugin_loader, - plugin_service_plugin_loader_class_init, plugin_service_plugin_loader_init, - GNM_PLUGIN_SERVICE_TYPE) - - -/* - * PluginServiceUI - */ -typedef struct{ - GnmPluginServiceClass plugin_service_class; -} PluginServiceUIClass; - -struct _PluginServiceUI { - GnmPluginService plugin_service; - - char *file_name; - GSList *actions; - - gpointer layout_id; - PluginServiceUICallbacks cbs; -}; - -static void -plugin_service_ui_init (GObject *obj) -{ - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (obj); - - GNM_PLUGIN_SERVICE (obj)->cbs_ptr = &service_ui->cbs; - service_ui->file_name = NULL; - service_ui->actions = NULL; - service_ui->layout_id = NULL; - service_ui->cbs.plugin_func_exec_action = NULL; -} - -static void -plugin_service_ui_finalize (GObject *obj) -{ - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (obj); - GObjectClass *parent_class; - - g_free (service_ui->file_name); - service_ui->file_name = NULL; - gnm_slist_free_custom (service_ui->actions, (GFreeFunc)gnm_action_free); - service_ui->actions = NULL; - - parent_class = g_type_class_peek (GNM_PLUGIN_SERVICE_TYPE); - parent_class->finalize (obj); -} - -static void -cb_ui_service_activate (GnmAction const *action, WorkbookControl *wbc, GnmPluginService *service) -{ - ErrorInfo *load_error = NULL; - - plugin_service_load (service, &load_error); - if (load_error == NULL) { - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (service); - ErrorInfo *ignored_error = NULL; - - g_return_if_fail (service_ui->cbs.plugin_func_exec_action != NULL); - service_ui->cbs.plugin_func_exec_action ( - service, action, wbc, &ignored_error); - if (ignored_error != NULL) { - error_info_print (ignored_error); - error_info_free (ignored_error); - } - } else { - error_info_print (load_error); - error_info_free (load_error); - } -} - -static void -plugin_service_ui_read_xml (GnmPluginService *service, xmlNode *tree, ErrorInfo **ret_error) -{ - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (service); - char *file_name; - xmlNode *verbs_node; - GSList *actions = NULL; - - GNM_INIT_RET_ERROR_INFO (ret_error); - file_name = xml_node_get_cstr (tree, "file"); - if (file_name == NULL) { - *ret_error = error_info_new_str ( - _("Missing file name.")); - return; - } - verbs_node = e_xml_get_child_by_name (tree, "actions"); - if (verbs_node != NULL) { - xmlNode *ptr; - xmlChar *name, *label, *icon; - gboolean always_available; - GnmAction *action; - - for (ptr = verbs_node->xmlChildrenNode; ptr != NULL; ptr = ptr->next) { - if (xmlIsBlankNode (ptr) || ptr->name == NULL || - strcmp (ptr->name, "action")) - continue; - name = xml_node_get_cstr (ptr, "name"); - label = xml_node_get_cstr (ptr, "label"); - icon = xml_node_get_cstr (ptr, "icon"); - if (!xml_node_get_bool (ptr, "always_available", &always_available)) - always_available = FALSE; - action = gnm_action_new (name, label, icon, always_available, - (GnmActionHandler) cb_ui_service_activate); - if (NULL != name) xmlFree (name); - if (NULL != name) xmlFree (label); - if (NULL != name) xmlFree (icon); - if (NULL != action) - GNM_SLIST_PREPEND (actions, action); - } - } - GNM_SLIST_REVERSE (actions); - - service_ui->file_name = file_name; - service_ui->actions = actions; -} - -static void -plugin_service_ui_activate (GnmPluginService *service, ErrorInfo **ret_error) -{ - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (service); - GError *err = NULL; - char *full_file_name; - char *xml_ui; - char const *textdomain; - - GNM_INIT_RET_ERROR_INFO (ret_error); - full_file_name = g_build_filename ( - gnm_plugin_get_dir_name (service->plugin), - service_ui->file_name, NULL); - if (!g_file_get_contents (full_file_name, &xml_ui, NULL, &err)) { - *ret_error = error_info_new_printf ( - _("Cannot read UI description from XML file %s."), - full_file_name); - g_free (full_file_name); - return; - } - g_free (full_file_name); - - textdomain = gnm_plugin_get_textdomain (service->plugin); - service_ui->layout_id = gnm_app_add_extra_ui ( - service_ui->actions, - xml_ui, textdomain, service); - service->is_active = TRUE; -} - -static void -plugin_service_ui_deactivate (GnmPluginService *service, ErrorInfo **ret_error) -{ - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (service); - - GNM_INIT_RET_ERROR_INFO (ret_error); - gnm_app_remove_extra_ui (service_ui->layout_id); - service_ui->layout_id = NULL; - service->is_active = FALSE; -} - -static char * -plugin_service_ui_get_description (GnmPluginService *service) -{ - PluginServiceUI *service_ui = GNM_PLUGIN_SERVICE_UI (service); - int n_actions; - - n_actions = g_slist_length (service_ui->actions); - return g_strdup_printf ( - ngettext ( - N_("User interface with %d action"), - N_("User interface with %d actions"), - n_actions), - n_actions); -} - -static void -plugin_service_ui_class_init (GObjectClass *gobject_class) -{ - GnmPluginServiceClass *plugin_service_class = GPS_CLASS (gobject_class); - - gobject_class->finalize = plugin_service_ui_finalize; - plugin_service_class->read_xml = plugin_service_ui_read_xml; - plugin_service_class->activate = plugin_service_ui_activate; - plugin_service_class->deactivate = plugin_service_ui_deactivate; - plugin_service_class->get_description = plugin_service_ui_get_description; -} - -GSF_CLASS (PluginServiceUI, plugin_service_ui, - plugin_service_ui_class_init, plugin_service_ui_init, - GNM_PLUGIN_SERVICE_TYPE) - -/************************************************************************** - * PluginServiceGObjectLoader - */ - -static char * -plugin_service_gobject_loader_get_description (GnmPluginService *service) -{ - return g_strdup (_("GObject loader")); -} - -static void -plugin_service_gobject_loader_read_xml (GnmPluginService *service, - G_GNUC_UNUSED xmlNode *tree, - G_GNUC_UNUSED ErrorInfo **ret_error) -{ - PluginServiceGObjectLoaderClass *gobj_loader_class = GPS_GOBJECT_LOADER_GET_CLASS (service); - g_return_if_fail (gobj_loader_class->pending != NULL); - g_hash_table_replace (gobj_loader_class->pending, service->id, service); -} - -static void -plugin_service_gobject_loader_class_init (PluginServiceGObjectLoaderClass *gobj_loader_class) -{ - GnmPluginServiceClass *psc = GPS_CLASS (gobj_loader_class); - - psc->get_description = plugin_service_gobject_loader_get_description; - psc->read_xml = plugin_service_gobject_loader_read_xml; - gobj_loader_class->pending = NULL; -} - -GSF_CLASS (PluginServiceGObjectLoader, plugin_service_gobject_loader, - plugin_service_gobject_loader_class_init, NULL, - GNM_PLUGIN_SERVICE_SIMPLE_TYPE) - -/************************************************************************** - * PluginServiceSimple - */ - -static void -plugin_service_simple_activate (GnmPluginService *service, ErrorInfo **ret_error) -{ - service->is_active = TRUE; -} - -static void -plugin_service_simple_deactivate (GnmPluginService *service, ErrorInfo **ret_error) -{ - service->is_active = FALSE; -} - -static void -plugin_service_simple_class_init (GObjectClass *gobject_class) -{ - GnmPluginServiceClass *psc = GPS_CLASS (gobject_class); - - psc->activate = plugin_service_simple_activate; - psc->deactivate = plugin_service_simple_deactivate; -} - -GSF_CLASS (PluginServiceSimple, plugin_service_simple, - plugin_service_simple_class_init, - NULL, - GNM_PLUGIN_SERVICE_TYPE) - -/* ---------------------------------------------------------------------- */ - -void -plugin_service_load (GnmPluginService *service, ErrorInfo **ret_error) -{ - g_return_if_fail (IS_GNM_PLUGIN_SERVICE (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - - if (service->is_loaded) - return; - gnm_plugin_load_service (service->plugin, service, ret_error); - if (*ret_error == NULL) - service->is_loaded = TRUE; -} - -void -plugin_service_unload (GnmPluginService *service, ErrorInfo **ret_error) -{ - ErrorInfo *error = NULL; - - g_return_if_fail (IS_GNM_PLUGIN_SERVICE (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - if (!service->is_loaded) { - return; - } - gnm_plugin_unload_service (service->plugin, service, &error); - if (error == NULL) { - service->is_loaded = FALSE; - } else { - *ret_error = error; - } -} - -GnmPluginService * -plugin_service_new (GnmPlugin *plugin, xmlNode *tree, ErrorInfo **ret_error) -{ - GnmPluginService *service = NULL; - char *type_str; - ErrorInfo *service_error = NULL; - GnmPluginServiceCreate ctor; - - g_return_val_if_fail (IS_GNM_PLUGIN (plugin), NULL); - g_return_val_if_fail (tree != NULL, NULL); - g_return_val_if_fail (strcmp (tree->name, "service") == 0, NULL); - - GNM_INIT_RET_ERROR_INFO (ret_error); - type_str = xml_node_get_cstr (tree, "type"); - if (type_str == NULL) { - *ret_error = error_info_new_str (_("No \"type\" attribute on \"service\" element.")); - return NULL; - } - - ctor = g_hash_table_lookup (services, type_str); - if (ctor == NULL) { - *ret_error = error_info_new_printf (_("Unknown service type: %s."), type_str); - g_free (type_str); - return NULL; - } - g_free (type_str); - - service = g_object_new (ctor(), NULL); - service->plugin = plugin; - service->id = xml_node_get_cstr (tree, "id"); - if (service->id == NULL) - service->id = g_strdup ("default"); - - if (GPS_GET_CLASS (service)->read_xml != NULL) { - GPS_GET_CLASS (service)->read_xml (service, tree, &service_error); - if (service_error != NULL) { - *ret_error = error_info_new_str_with_details ( - _("Error reading service information."), service_error); - g_object_unref (service); - service = NULL; - } - } - - return service; -} - -char const * -plugin_service_get_id (GnmPluginService *service) -{ - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE (service), NULL); - - return service->id; -} - -char const * -plugin_service_get_description (GnmPluginService *service) -{ - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE (service), NULL); - - if (service->saved_description == NULL) { - service->saved_description = GPS_GET_CLASS (service)->get_description (service); - } - - return service->saved_description; -} - -GnmPlugin * -plugin_service_get_plugin (GnmPluginService *service) -{ - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE (service), NULL); - - return service->plugin; -} - -gpointer -plugin_service_get_cbs (GnmPluginService *service) -{ - g_return_val_if_fail (IS_GNM_PLUGIN_SERVICE (service), NULL); - g_return_val_if_fail (service->cbs_ptr != NULL, NULL); - - return service->cbs_ptr; -} - -void -plugin_service_activate (GnmPluginService *service, ErrorInfo **ret_error) -{ - g_return_if_fail (IS_GNM_PLUGIN_SERVICE (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - if (service->is_active) { - return; - } -#ifdef PLUGIN_ALWAYS_LOAD - { - ErrorInfo *load_error = NULL; - - plugin_service_load (service, &load_error); - if (load_error != NULL) { - *ret_error = error_info_new_str_with_details ( - _("We must load service before activating it (PLUGIN_ALWAYS_LOAD is set) " - "but loading failed."), load_error); - return; - } - } -#endif - GPS_GET_CLASS (service)->activate (service, ret_error); -} - -void -plugin_service_deactivate (GnmPluginService *service, ErrorInfo **ret_error) -{ - g_return_if_fail (IS_GNM_PLUGIN_SERVICE (service)); - - GNM_INIT_RET_ERROR_INFO (ret_error); - if (!service->is_active) { - return; - } - GPS_GET_CLASS (service)->deactivate (service, ret_error); - if (*ret_error == NULL) { - ErrorInfo *ignored_error = NULL; - - service->is_active = FALSE; - /* FIXME */ - plugin_service_unload (service, &ignored_error); - error_info_free (ignored_error); - } -} - -/*****************************************************************************/ - -void -plugin_services_init (void) -{ - static struct { - char const *type_str; - GnmPluginServiceCreate ctor; - } const builtin_services[] = { - { "general", plugin_service_general_get_type}, - //{ "clipboard", plugin_service_clipboard_get_type}, - //{ "file_opener", plugin_service_file_opener_get_type}, - //{ "file_saver", plugin_service_file_saver_get_type}, - //{ "function_group", plugin_service_function_group_get_type}, - { "plugin_loader", plugin_service_plugin_loader_get_type}, - { "ui", plugin_service_ui_get_type} -/* base classes, not really for direct external use, - * put here for expositional purposes - */ -#if 0 - { "gobject_loader", plugin_service_gobject_loader_get_type} - { "simple", plugin_service_simple_get_type} -#endif - }; - unsigned i; - - g_return_if_fail (services == NULL); - - services = g_hash_table_new (g_str_hash, g_str_equal); - for (i = 0; i < G_N_ELEMENTS (builtin_services); i++) - plugin_service_define (builtin_services[i].type_str, - builtin_services[i].ctor); -} - -void -plugin_services_shutdown (void) -{ - g_return_if_fail (services != NULL); - g_hash_table_destroy (services); - services = NULL; -} - -/** - * Allow the definition of new service types - **/ -void -plugin_service_define (char const *type_str, GnmPluginServiceCreate ctor) -{ - g_return_if_fail (services != NULL); - - g_return_if_fail (NULL == g_hash_table_lookup (services, type_str)); - - g_hash_table_insert (services, (gpointer)type_str, ctor); -} diff --git a/lib/goffice/split/plugin-service.h b/lib/goffice/split/plugin-service.h deleted file mode 100644 index 76107ea1fd..0000000000 --- a/lib/goffice/split/plugin-service.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef GNUMERIC_PLUGIN_SERVICE_H -#define GNUMERIC_PLUGIN_SERVICE_H - -#include -#include -#include -#include "gnumeric.h" -#include "application.h" -#include "file.h" -#include "func.h" -#include "error-info.h" -#include "plugin.h" - -#define GNM_PLUGIN_SERVICE_TYPE (plugin_service_get_type ()) -#define GNM_PLUGIN_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_SERVICE_TYPE, GnmPluginService)) -#define IS_GNM_PLUGIN_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_SERVICE_TYPE)) - -GType plugin_service_get_type (void); - -#define GNM_PLUGIN_SERVICE_GENERAL_TYPE (plugin_service_general_get_type ()) -#define GNM_PLUGIN_SERVICE_GENERAL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_SERVICE_GENERAL_TYPE, PluginServiceGeneral)) -#define IS_GNM_PLUGIN_SERVICE_GENERAL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_SERVICE_GENERAL_TYPE)) - -GType plugin_service_general_get_type (void); -typedef struct _PluginServiceGeneral PluginServiceGeneral; -typedef struct { - void (*plugin_func_init) (GnmPluginService *service, ErrorInfo **ret_error); - void (*plugin_func_cleanup) (GnmPluginService *service, ErrorInfo **ret_error); -} PluginServiceGeneralCallbacks; - - -#define GNM_PLUGIN_SERVICE_PLUGIN_LOADER_TYPE (plugin_service_plugin_loader_get_type ()) -#define GNM_PLUGIN_SERVICE_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_SERVICE_PLUGIN_LOADER_TYPE, PluginServicePluginLoader)) -#define IS_GNM_PLUGIN_SERVICE_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_SERVICE_PLUGIN_LOADER_TYPE)) - -GType plugin_service_plugin_loader_get_type (void); -typedef struct _PluginServicePluginLoader PluginServicePluginLoader; -typedef struct { - GType (*plugin_func_get_loader_type) ( - GnmPluginService *service, ErrorInfo **ret_error); -} PluginServicePluginLoaderCallbacks; - -GType plugin_service_plugin_loader_generate_type (GnmPluginService *service, - ErrorInfo **ret_error); - -#define GNM_PLUGIN_SERVICE_UI_TYPE (plugin_service_ui_get_type ()) -#define GNM_PLUGIN_SERVICE_UI(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_SERVICE_UI_TYPE, PluginServiceUI)) -#define IS_GNM_PLUGIN_SERVICE_UI(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_SERVICE_UI_TYPE)) - -GType plugin_service_ui_get_type (void); -typedef struct _PluginServiceUI PluginServiceUI; -typedef struct { - void (*plugin_func_exec_action) ( - GnmPluginService *service, GnmAction const *action, - WorkbookControl *wbc, ErrorInfo **ret_error); -} PluginServiceUICallbacks; - -/****************************************************************************/ - -#define GNM_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE (plugin_service_gobject_loader_get_type ()) -#define GNM_PLUGIN_SERVICE_GOBJECT_LOADER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE, PluginServiceGObjectLoader)) -#define IS_GNM_PLUGIN_SERVICE_GOBJECT_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_SERVICE_GOBJECT_LOADER_TYPE)) - -GType plugin_service_gobject_loader_get_type (void); -typedef struct _PluginServiceGObjectLoader PluginServiceGObjectLoader; - -/****************************************************************************/ -#define GNM_PLUGIN_SERVICE_SIMPLE_TYPE (plugin_service_simple_get_type ()) -#define GNM_PLUGIN_SERVICE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_SERVICE_SIMPLE_TYPE, PluginServiceSimple)) -#define IS_GNM_PLUGIN_SERVICE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_SERVICE_SIMPLE_TYPE)) - -GType plugin_service_simple_get_type (void); -typedef struct _PluginServiceSimple PluginServiceSimple; - -/****************************************************************************/ - -GnmPluginService *plugin_service_new (GnmPlugin *plugin, xmlNode *tree, ErrorInfo **ret_error); -char const *plugin_service_get_id (GnmPluginService *service); -char const *plugin_service_get_description (GnmPluginService *service); -GnmPlugin *plugin_service_get_plugin (GnmPluginService *service); -gpointer plugin_service_get_cbs (GnmPluginService *service); -void plugin_service_activate (GnmPluginService *service, ErrorInfo **ret_error); -void plugin_service_deactivate (GnmPluginService *service, ErrorInfo **ret_error); -void plugin_service_load (GnmPluginService *service, ErrorInfo **ret_error); -void plugin_service_unload (GnmPluginService *service, ErrorInfo **ret_error); - -typedef GType (*GnmPluginServiceCreate) (void); -void plugin_services_init (void); -void plugin_services_shutdown (void); -void plugin_service_define (char const *type_str, - GnmPluginServiceCreate ctor); - -#endif /* GNUMERIC_PLUGIN_SERVICE_H */ diff --git a/lib/goffice/split/plugin-util.c b/lib/goffice/split/plugin-util.c deleted file mode 100644 index 8d2a2da277..0000000000 --- a/lib/goffice/split/plugin-util.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * plugin-util.c: Utility functions for gnumeric plugins - * - * Authors: - * Almer. S. Tigelaar. - * Zbigniew Chyla - * - */ - -#include -#include -#include "gnumeric.h" -#include "plugin-util.h" - -#include "command-context.h" -#include "io-context.h" - -#include -#include -#include -#include -#include -#include - -/** - * gnumeric_fopen_error_info: - * @file_name: the file to open - * @mode: the file mode - * @ret_error: ErrorInfo to fill when error occurs - * - * a wrapper around fopen (). - * It will fill ErrorInfo struct for you. - * for more info on the parameters see 'man 3 fopen' - * - * Return value: a pointer to a FILE struct if successful or NULL if not - **/ -FILE * -gnumeric_fopen_error_info (const char *file_name, const char *mode, ErrorInfo **ret_error) -{ - FILE *f; - - g_return_val_if_fail (file_name != NULL, NULL); - g_return_val_if_fail (mode != NULL, NULL); - g_return_val_if_fail (ret_error != NULL, NULL); - - *ret_error = NULL; - f = fopen (file_name, mode); - if (f == NULL) { - if (strchr (mode, 'w') != NULL && strchr (mode, 'r') == NULL) { - *ret_error = error_info_new_printf ( - _("Error while opening file \"%s\" for writing."), - file_name); - } else { - *ret_error = error_info_new_printf ( - _("Error while opening file \"%s\" for reading."), - file_name); - } - error_info_add_details (*ret_error, error_info_new_from_errno ()); - } - - return f; -} diff --git a/lib/goffice/split/plugin-util.h b/lib/goffice/split/plugin-util.h deleted file mode 100644 index 769e690464..0000000000 --- a/lib/goffice/split/plugin-util.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GNUMERIC_PLUGIN_UTIL_H -#define GNUMERIC_PLUGIN_UTIL_H - -#include "gnumeric.h" -#include "error-info.h" - -#include - -FILE *gnumeric_fopen_error_info (char const *file_name, char const *mode, - ErrorInfo **ret_error); - -#endif /* GNUMERIC_PLUGIN_UTIL_H */ diff --git a/lib/goffice/split/plugin.h b/lib/goffice/split/plugin.h deleted file mode 100644 index 9f21382020..0000000000 --- a/lib/goffice/split/plugin.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef GNUMERIC_PLUGIN_H -#define GNUMERIC_PLUGIN_H - -#include "gnumeric.h" -#include - -/* - * Use "#define PLUGIN_DEBUG x" to enable some plugin related debugging - * messages. -#undef PLUGIN_DEBUG - * Define PLUGIN_ALWAYS_LOAD to disable loading on demand feature - */ - -#define GNM_PLUGIN_TYPE (gnm_plugin_get_type ()) -#define GNM_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_PLUGIN_TYPE, GnmPlugin)) -#define IS_GNM_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_PLUGIN_TYPE)) - -GType gnm_plugin_get_type (void); - -void gnm_plugin_activate (GnmPlugin *pinfo, ErrorInfo **ret_error); -void gnm_plugin_deactivate (GnmPlugin *pinfo, ErrorInfo **ret_error); -gboolean gnm_plugin_is_active (GnmPlugin *pinfo); -gboolean gnm_plugin_can_deactivate (GnmPlugin *pinfo); -void gnm_plugin_load_service (GnmPlugin *pinfo, GnmPluginService *service, ErrorInfo **ret_error); -void gnm_plugin_unload_service (GnmPlugin *pinfo, GnmPluginService *service, ErrorInfo **ret_error); -gboolean gnm_plugin_is_loaded (GnmPlugin *pinfo); -void gnm_plugin_use_ref (GnmPlugin *pinfo); -void gnm_plugin_use_unref (GnmPlugin *pinfo); - -char const *gnm_plugin_get_dir_name (GnmPlugin *pinfo); -char const *gnm_plugin_get_id (GnmPlugin *pinfo); -char const *gnm_plugin_get_name (GnmPlugin *pinfo); -char const *gnm_plugin_get_description (GnmPlugin *pinfo); -char const *gnm_plugin_get_textdomain (GnmPlugin *pinfo); -GSList *gnm_plugin_get_dependencies_ids (GnmPlugin *pinfo); -GSList *gnm_plugin_get_services (GnmPlugin *pinfo); - -/* - * - */ - -void plugins_init (GnmCmdContext *context); -void plugins_shutdown (void); -void plugins_register_loader (const gchar *id_str, GnmPluginService *service); -void plugins_unregister_loader (const gchar *id_str); -GnmPlugin *plugins_get_plugin_by_id (const gchar *plugin_id); -GSList *plugins_get_available_plugins (void); -void plugins_rescan (ErrorInfo **ret_error, GSList **ret_new_plugins); -void plugin_db_mark_plugin_for_deactivation (GnmPlugin *pinfo, gboolean mark); -gboolean plugin_db_is_plugin_marked_for_deactivation (GnmPlugin *pinfo); -void plugin_db_activate_plugin_list (GSList *plugins, ErrorInfo **ret_error); -void plugin_db_deactivate_plugin_list (GSList *plugins, ErrorInfo **ret_error); - -void plugin_message (gint level, const gchar *format, ...) G_GNUC_PRINTF (2, 3); - -#endif /* GNUMERIC_PLUGIN_H */ diff --git a/lib/goffice/split/position.h b/lib/goffice/split/position.h deleted file mode 100644 index bf9ecd0cd0..0000000000 --- a/lib/goffice/split/position.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef GNUMERIC_POSITION_H -#define GNUMERIC_POSITION_H - -#include "gnumeric.h" - -struct _GnmEvalPos { - GnmCellPos eval; - Sheet *sheet; - GnmDependent *dep; /* optionally NULL */ -}; - -struct _GnmParsePos { - GnmCellPos eval; - Sheet *sheet; - Workbook *wb; -}; - -/** - * Used for getting a valid Sheet *from a GnmCellRef - * Syntax is GnmCellRef, valid Sheet * - */ -#define eval_sheet(a,b) (((a) != NULL) ? (a) : (b)) - -/* Initialization routines for Evaluation Positions */ -GnmEvalPos *eval_pos_init (GnmEvalPos *ep, Sheet *s, GnmCellPos const *pos); -GnmEvalPos *eval_pos_init_dep (GnmEvalPos *ep, GnmDependent const *dep); -GnmEvalPos *eval_pos_init_cell (GnmEvalPos *ep, GnmCell const *cell); -GnmEvalPos *eval_pos_init_sheet (GnmEvalPos *ep, Sheet *sheet); - -/* Initialization routines for Parse Positions */ -GnmParsePos *parse_pos_init (GnmParsePos *pp, Workbook *wb, - Sheet *sheet, int col, int row); -GnmParsePos *parse_pos_init_dep (GnmParsePos *pp, GnmDependent const *dep); -GnmParsePos *parse_pos_init_cell (GnmParsePos *pp, GnmCell const *cell); -GnmParsePos *parse_pos_init_evalpos (GnmParsePos *pp, GnmEvalPos const *pos); -GnmParsePos *parse_pos_init_editpos (GnmParsePos *pp, SheetView const *sv); -GnmParsePos *parse_pos_init_sheet (GnmParsePos *pp, Sheet *sheet); - -/*****************************************************************************/ - -struct _GnmCellRef { - Sheet *sheet; - int col, row; - - unsigned char col_relative; - unsigned char row_relative; -}; -struct _GnmRangeRef { - GnmCellRef a, b; -}; - -GnmCellRef *cellref_init (GnmCellRef *ref, Sheet *sheet, int col, int row, - gboolean rel); -gboolean cellref_equal (GnmCellRef const *a, GnmCellRef const *b); -guint cellref_hash (GnmCellRef const *cr); -void cellref_make_abs (GnmCellRef *dest, - GnmCellRef const *src, - GnmEvalPos const *ep); -int cellref_get_abs_col (GnmCellRef const *ref, - GnmEvalPos const *pos); -int cellref_get_abs_row (GnmCellRef const *cell_ref, - GnmEvalPos const *src_fp); -void cellref_get_abs_pos (GnmCellRef const *cell_ref, - GnmCellPos const *pos, - GnmCellPos *res); - -gboolean rangeref_equal (GnmRangeRef const *a, GnmRangeRef const *b); -guint rangeref_hash (GnmRangeRef const *cr); -GnmRangeRef *rangeref_dup (GnmRangeRef const *cr); -void rangeref_normalize (GnmRangeRef const *ref, GnmEvalPos const *ep, - Sheet **start_sheet, Sheet **end_sheet, - GnmRange *dest); - -guint cellpos_hash (GnmCellPos const *key); -gint cellpos_equal (GnmCellPos const *a, GnmCellPos const *b); - -#endif /* GNUMERIC_POSITION_H */ diff --git a/lib/goffice/split/ranges.h b/lib/goffice/split/ranges.h deleted file mode 100644 index 15303b6aa3..0000000000 --- a/lib/goffice/split/ranges.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef GNUMERIC_RANGES_H -#define GNUMERIC_RANGES_H - -#include "gnumeric.h" - -/** - * range_equal: - * @a: First range - * @b: Second range - * - * NB. commutative, symmetric, and transitive. - * - * Returns: True if both ranges are equal. - **/ -#define range_equal(a,b) ((a)->start.row == (b)->start.row && \ - (a)->end.row == (b)->end.row && \ - (a)->start.col == (b)->start.col && \ - (a)->end.col == (b)->end.col) - -/** - * range_overlap: - * @a: First range - * @b: Second range - * - * NB. commutative, symmetric, but not transitive. - * - * Returns: True if the ranges overlap at all. - **/ -#define range_overlap(a,b) (((a)->end.row >= (b)->start.row) && \ - ((b)->end.row >= (a)->start.row) && \ - ((a)->end.col >= (b)->start.col) && \ - ((b)->end.col >= (a)->start.col)) - -/** - * range_contains: - * @r: range to operate on - * @x: column, - * @y: row co-ordinate - * - * Determine if a range contains a col,row co-ordinate. - * - * Return value: TRUE if co-ordinate contained. - **/ -#define range_contains(r,x,y) (((y) <= (r)->end.row) && \ - ((y) >= (r)->start.row) && \ - ((x) >= (r)->start.col) && \ - ((x) <= (r)->end.col)) - -/* - * Quickly Test if a range is valid - */ -#define range_valid(r) ((r)->start.col <= (r)->end.col && \ - (r)->start.row <= (r)->end.row) - -GnmRange *range_init_full_sheet (GnmRange *r); -GnmRange *range_init_rangeref (GnmRange *range, GnmRangeRef const *rr); -GnmRange *range_init_value (GnmRange *range, GnmValue const *v); -GnmRange *range_init_cellpos (GnmRange *r, GnmCellPos const *start, GnmCellPos const *end); - -GnmRange *range_init (GnmRange *r, int start_col, int start_row, - int end_col, int end_row); -GnmValue *range_parse (Sheet *sheet, char const *range, gboolean strict); -gboolean parse_range (char const *text, GnmRange *r); -void range_list_destroy (GSList *ranges); - -int range_width (GnmRange const *r); -int range_height (GnmRange const *r); -gboolean range_is_singleton (GnmRange const *r); -gboolean range_is_infinite (GnmRange const *r); -gboolean range_is_full (GnmRange const *r, gboolean is_cols); -void range_clip_to_finite(GnmRange *range, Sheet *sheet); -gboolean range_contained (GnmRange const *a, GnmRange const *b); -gboolean range_adjacent (GnmRange const *a, GnmRange const *b); -GnmRange range_merge (GnmRange const *a, GnmRange const *b); -gboolean range_intersection (GnmRange *r, - GnmRange const *a, - GnmRange const *b); -void range_normalize (GnmRange *src); -GnmRange range_union (GnmRange const *a, GnmRange const *b); -void range_ensure_sanity (GnmRange *range); -gboolean range_is_sane (GnmRange const *range); -gboolean range_translate (GnmRange *range, int col_offset, int row_offset); -gboolean range_transpose (GnmRange *range, GnmCellPos const *origin); - -/* TODO : Do these 2 belong here ? or in sheet.h - * Probably sheet.h but that is overfull. - */ -gboolean range_trim (Sheet const *sheet, GnmRange *r, - gboolean cols); -gboolean range_has_header (Sheet const *sheet, GnmRange const *src, - gboolean top, gboolean ignore_styles); - -char const *range_name (GnmRange const *src); -void range_dump (GnmRange const *src, char const *suffix); -GnmRange *range_dup (GnmRange const *src); - -GSList *range_split_ranges (GnmRange const *hard, GnmRange const *soft); -GSList *range_fragment (GnmRange const *a, GnmRange const *b); -void range_fragment_free (GSList *fragments); - -GnmSheetRange *global_range_new (Sheet *sheet, GnmRange const *r); -GnmSheetRange *global_range_dup (GnmSheetRange const *src); -gboolean value_to_global_range (GnmValue const *v, GnmSheetRange *res); -void global_range_free (GnmSheetRange *gr); -gboolean global_range_overlap (GnmSheetRange const *a, GnmSheetRange const *b); -GnmValue *global_range_parse (Sheet *sheet, char const *range); -char *global_range_name (Sheet *sheet, GnmRange const *r); -gboolean global_range_contained (Sheet const *sheet, - GnmValue const *a, GnmValue const *b); -GSList *global_range_list_parse (Sheet *sheet, char const *str); -GnmValue *global_range_list_foreach (GSList *gr_list, GnmEvalPos const *ep, - CellIterFlags flags, - CellIterFunc handler, - gpointer closure); - -#endif /* GNUMERIC_RANGES_H */ diff --git a/lib/goffice/split/regutf8.c b/lib/goffice/split/regutf8.c deleted file mode 100644 index d225d6c54d..0000000000 --- a/lib/goffice/split/regutf8.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * regutf8.c: UTF-8 regexp routines. - * - * Author: - * Morten Welinder (terra@gnome.org) - */ - -#include -#include - -int -gnumeric_regcomp_XL (go_regex_t *preg, char const *pattern, int cflags) -{ - GString *res = g_string_new (NULL); - int retval; - - while (*pattern) { - switch (*pattern) { - case '~': - pattern++; - if (*pattern == '*') - g_string_append (res, "\\*"); - else - g_string_append_c (res, *pattern); - if (*pattern) pattern++; - break; - - case '*': - g_string_append (res, ".*"); - pattern++; - break; - - case '?': - g_string_append_c (res, '.'); - pattern++; - break; - - default: - pattern = gnumeric_regexp_quote1 (res, pattern); - } - } - - retval = go_regcomp (preg, res->str, cflags); - g_string_free (res, TRUE); - return retval; -} - -/* - * Quote a single UTF-8 encoded character from s into target and return the - * location of the next character in s. - */ -const char * -gnumeric_regexp_quote1 (GString *target, const char *s) -{ - g_return_val_if_fail (target != NULL, NULL); - g_return_val_if_fail (s != NULL, NULL); - - switch (*s) { - case '.': case '[': case '\\': - case '*': case '+': case '{': case '?': - case '^': case '$': - case '(': case '|': case ')': - g_string_append_c (target, '\\'); - g_string_append_c (target, *s); - return s + 1; - - case 0: - return s; - - default: - do { - g_string_append_c (target, *s); - s++; - } while ((*s & 0xc0) == 0x80); - - return s; - } -} - -/* - * Regexp quote a UTF-8 string. - */ -void -gnumeric_regexp_quote (GString *target, const char *s) -{ - g_return_if_fail (target != NULL); - g_return_if_fail (s != NULL); - - while (*s) - s = gnumeric_regexp_quote1 (target, s); -} diff --git a/lib/goffice/split/regutf8.h b/lib/goffice/split/regutf8.h deleted file mode 100644 index e8c00e51f1..0000000000 --- a/lib/goffice/split/regutf8.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef GNUMERIC_REGUTF8_H -#define GNUMERIC_REGUTF8_H - -#include -#include -#include - -/* -------------------------------------------------------------------------- */ - -#ifndef REG_EPAREN -#define REG_EPAREN REG_BADPAT -#endif - -#ifndef REG_EBRACE -#define REG_EBRACE REG_BADPAT -#endif - -#ifndef REG_EESCAPE -#define REG_EESCAPE REG_BADPAT -#endif - -#ifndef REG_NOERROR -#define REG_NOERROR 0 -#endif - -#ifndef REG_OK -#define REG_OK REG_NOERROR -#endif - -int gnumeric_regcomp_XL (go_regex_t *preg, char const *pattern, int cflags); - -const char *gnumeric_regexp_quote1 (GString *target, const char *s); -void gnumeric_regexp_quote (GString *target, const char *s); - -#endif diff --git a/lib/goffice/split/str.c b/lib/goffice/split/str.c deleted file mode 100644 index 078555e01d..0000000000 --- a/lib/goffice/split/str.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * String management for the Gnumeric Spreadsheet - * - * Author: - * Miguel de Icaza (miguel@kernel.org) - */ -#include -#include "gnumeric.h" -#include "str.h" -#include "gutils.h" - -#include -#include - -#ifndef USE_STRING_POOLS -#define USE_STRING_POOLS 1 -#endif - -#if USE_STRING_POOLS -/* Memory pool for strings. */ -static GnmMemChunk *string_pool; -#define CHUNK_ALLOC(T,p) ((T*)gnm_mem_chunk_alloc (p)) -#define CHUNK_FREE(p,v) gnm_mem_chunk_free ((p), (v)) -#else -#define CHUNK_ALLOC(T,c) g_new (T,1) -#define CHUNK_FREE(p,v) g_free ((v)) -#endif - -static GHashTable *string_hash_table; - -static GnmString * -gnm_string_lookup (char const *s) -{ - g_return_val_if_fail (s != NULL, NULL); - return g_hash_table_lookup (string_hash_table, s); -} - -GnmString * -gnm_string_get (char const *s) -{ - GnmString *string = gnm_string_lookup (s); - if (string){ - gnm_string_ref (string); - return string; - } - - /* If non-existant, create */ - string = CHUNK_ALLOC (GnmString, string_pool); - string->ref_count = 1; - string->str = g_strdup (s); - - g_hash_table_insert (string_hash_table, string->str, string); - - return string; -} - -/* - * gnm_string_get_nocopy : - * - * Take control of the supplied string. - * delete it if it is already available. - */ -GnmString * -gnm_string_get_nocopy (char *s) -{ - GnmString *string = gnm_string_lookup (s); - if (string) { - gnm_string_ref (string); - g_free (s); - return string; - } - - /* If non-existant, create */ - string = CHUNK_ALLOC (GnmString, string_pool); - string->ref_count = 1; - string->str = s; - - g_hash_table_insert (string_hash_table, string->str, string); - - return string; -} - -GnmString * -gnm_string_ref (GnmString *string) -{ - g_return_val_if_fail (string != NULL, NULL); - - string->ref_count++; - - return string; -} - -void -gnm_string_unref (GnmString *string) -{ - g_return_if_fail (string != NULL); - g_return_if_fail (string->ref_count > 0); - - if (--(string->ref_count) == 0){ - g_hash_table_remove (string_hash_table, string->str); - g_free (string->str); - CHUNK_FREE (string_pool, string); - } -} - -void -gnm_string_init (void) -{ - string_hash_table = g_hash_table_new (g_str_hash, g_str_equal); -#if USE_STRING_POOLS - string_pool = - gnm_mem_chunk_new ("string pool", - sizeof (GnmString), - 16 * 1024 - 128); -#endif -} - -#if USE_STRING_POOLS -static void -cb_string_pool_leak (gpointer data, gpointer user) -{ - GnmString *string = data; - fprintf (stderr, "Leaking string [%s] with ref_count=%d.\n", - string->str, string->ref_count); -} -#endif - -void -gnm_string_shutdown (void) -{ - g_hash_table_destroy (string_hash_table); - string_hash_table = NULL; -#if USE_STRING_POOLS - gnm_mem_chunk_foreach_leak (string_pool, cb_string_pool_leak, NULL); - gnm_mem_chunk_destroy (string_pool, FALSE); - string_pool = NULL; -#endif -} diff --git a/lib/goffice/split/str.h b/lib/goffice/split/str.h deleted file mode 100644 index 597e5565db..0000000000 --- a/lib/goffice/split/str.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef GNUMERIC_STRING_H -#define GNUMERIC_STRING_H - -#include "gnumeric.h" - -struct _GnmString { - int ref_count; - char *str; -}; - -void gnm_string_init (void); -void gnm_string_shutdown (void); - -GnmString *gnm_string_get (char const *s); -GnmString *gnm_string_get_nocopy (char *s); -GnmString *gnm_string_ref (GnmString *); -void gnm_string_unref (GnmString *); - -#endif /* GNUMERIC_STRING_H */ diff --git a/lib/goffice/split/style-border.c b/lib/goffice/split/style-border.c deleted file mode 100644 index 4c75ab9666..0000000000 --- a/lib/goffice/split/style-border.c +++ /dev/null @@ -1,861 +0,0 @@ -/* vim: set sw=8: */ - -/* - * border.c: Managing drawing and printing cell borders - * - * Copyright (C) 1999-2001 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#include -#include "gnumeric.h" -#include "style-border.h" - -#include "style-color.h" -#include "style.h" -#include "mstyle.h" -//#include "sheet-style.h" -//#include "sheet.h" - -struct LineDotPattern { - const gint elements; - const gint8 *const pattern; - const double *const pattern_d; -}; - -static const gint8 dashed_pattern[] = { 3, 1 }; -static const double dashed_pattern_d[] = { 3., 1. }; -static const struct LineDotPattern dashed_line = -{ sizeof (dashed_pattern), dashed_pattern, dashed_pattern_d }; - -static const gint8 med_dashed_pattern[] = { 9, 3 }; -static const double med_dashed_pattern_d[] = { 9., 3. }; -static const struct LineDotPattern med_dashed_line = -{ sizeof (med_dashed_pattern), med_dashed_pattern, med_dashed_pattern_d }; - -static const gint8 dotted_pattern[] = { 2, 2 }; -static const double dotted_pattern_d[] = { 2., 2. }; -static const struct LineDotPattern dotted_line = -{ sizeof (dotted_pattern), dotted_pattern, dotted_pattern_d }; - -static const gint8 hair_pattern[] = { 1, 1 }; -static const double hair_pattern_d[] = { 1., 1. }; -static const struct LineDotPattern hair_line = -{ sizeof (hair_pattern), hair_pattern, hair_pattern_d }; - -static const gint8 dash_dot_pattern[] = { 8, 3, 3, 3 }; -static const double dash_dot_pattern_d[] = { 8., 3., 3., 3. }; -static const struct LineDotPattern dash_dot_line = -{ sizeof (dash_dot_pattern), dash_dot_pattern, dash_dot_pattern_d }; - -static const gint8 med_dash_dot_pattern[] = { 9, 3, 3, 3 }; -static const double med_dash_dot_pattern_d[] = { 9., 3., 3., 3. }; -static const struct LineDotPattern med_dash_dot_line = -{ sizeof (med_dash_dot_pattern), med_dash_dot_pattern, med_dash_dot_pattern_d }; - -static const gint8 dash_dot_dot_pattern[] = { 3, 3, 9, 3, 3, 3 }; -static const double dash_dot_dot_pattern_d[] = { 3., 3., 9., 3., 3., 3. }; -static const struct LineDotPattern dash_dot_dot_line = -{ sizeof (dash_dot_dot_pattern), dash_dot_dot_pattern, dash_dot_dot_pattern_d }; - -static const gint8 med_dash_dot_dot_pattern[] = { 3, 3, 3, 3, 9, 3 }; -static const double med_dash_dot_dot_pattern_d[] = { 3., 3., 3., 3., 9., 3. }; -static const struct LineDotPattern med_dash_dot_dot_line = -{ sizeof (med_dash_dot_dot_pattern), med_dash_dot_dot_pattern, med_dash_dot_dot_pattern_d }; - -static const gint8 slant_pattern[] = { 11, 1, 5, 1 }; -static const double slant_pattern_d[] = { 11., 1., 5., 1. }; -static const struct LineDotPattern slant_line = -{ sizeof (slant_pattern), slant_pattern, slant_pattern_d }; - -struct { - gint width; - gint offset; - struct LineDotPattern const * pattern; -} static const style_border_data[] = { - /* 0x0 : STYLE_BORDER_NONE */ { 0, 0, NULL }, - /* 0x1 : STYLE_BORDER_THIN */ { 0, 0, NULL }, - /* 0x2 : STYLE_BORDER_MEDIUM */ { 2, 0, NULL }, - /* 0x3 : STYLE_BORDER_DASHED */ { 1, 0, &dashed_line }, - /* 0x4 : STYLE_BORDER_DOTTED */ { 1, 0, &dotted_line }, - /* 0x5 : STYLE_BORDER_THICK */ { 3, 0, NULL }, - /* 0x6 : STYLE_BORDER_DOUBLE */ { 0, 0, NULL }, - /* 0x7 : STYLE_BORDER_HAIR */ { 1, 0, &hair_line }, - /* 0x8 : STYLE_BORDER_MEDIUM_DASH */ { 2, 9, &med_dashed_line }, - /* 0x9 : STYLE_BORDER_DASH_DOT */ { 1, 0, &dash_dot_line }, - /* 0xa : STYLE_BORDER_MEDIUM_DASH_DOT */ { 2, 17,&med_dash_dot_line }, - /* 0xb : STYLE_BORDER_DASH_DOT_DOT */ { 1, 0, &dash_dot_dot_line }, - /* 0xc : STYLE_BORDER_MEDIUM_DASH_DOT_DOT */ { 2, 21,&med_dash_dot_dot_line }, - /* 0xd : STYLE_BORDER_SLANTED_DASH_DOT */ { 2, 6, &slant_line },/* How to slant */ - /* 0xe : STYLE_BORDER_INCONSISTENT */ { 3, 0, &hair_line }, -}; - -static GHashTable *border_hash = NULL; - -static gint -style_border_equal (gconstpointer v1, gconstpointer v2) -{ - GnmBorder const *k1 = (GnmBorder const *) v1; - GnmBorder const *k2 = (GnmBorder const *) v2; - - /* - * ->color is a pointer, but the comparison is safe because - * all colours are cached, see style_color_new. - */ - return (k1->color == k2->color) && - (k1->line_type == k2->line_type); -} - -static guint -style_border_hash (gconstpointer v) -{ - GnmBorder const *b = (GnmBorder const *) v; - - /* - * HACK ALERT! - * - * ->color is a pointer, but the comparison is safe because - * all colours are cached, see style_color_new. - * - * We assume that casting a pointer to (unsigned) does something - * useful. That's probably ok. - */ - return (((unsigned)b->color) ^ b->line_type); -} - -GnmBorder * -style_border_none (void) -{ - static GnmBorder * none = NULL; - if (none == NULL) { - none = g_new0 (GnmBorder, 1); - none->line_type = STYLE_BORDER_NONE; - none->color = style_color_grid (); - none->begin_margin = none->end_margin = none->width = 0; - none->ref_count = 1; - } - - g_return_val_if_fail (none != NULL, NULL); - - return none; -} - -/** - * style_border_none_set_color: - * @color : - * - * This function updates the color of style_border_none when the wanted grid - * color is known. style_border_none tells how to render the grid. Because - * the grid color may be different for different sheets, the functions which - * render the grid call this function first. The rule for selecting the - * grid color, which is the same as in Excel, is: - if the auto pattern - * color is default (which is black), the grid color is gray, as returned by - * style_color_grid (). - otherwise, the auto pattern color is used for the - * grid. - * NOTE : Absorbs a reference to @color. - */ -void -style_border_none_set_color (GnmColor *color) -{ - GnmBorder *none = style_border_none (); - GnmColor *nc; - - if (color == none->color) { - style_color_unref (color); - return; - } - - nc = none->color; - none->color = color; - style_color_unref (nc); - - if (none->gc) { - gdk_gc_set_rgb_fg_color (none->gc, &none->color->color); - } -} - -/** - * style_border_fetch : - * - * @line_type : dash style - * @color : colour - * @orientation : Not currently used. - * - * Fetches a GnmBorder from the cache, creating one if necessary. Absorbs - * the colour reference. In the future we may have different dash styles for - * the same pattern depending on whether this is a horizontal or vertical line. - */ -GnmBorder * -style_border_fetch (StyleBorderType const line_type, - GnmColor *color, - StyleBorderOrientation orientation) -{ - GnmBorder *border; - GnmBorder key; - - g_return_val_if_fail (line_type >= STYLE_BORDER_NONE, NULL); - g_return_val_if_fail (line_type < STYLE_BORDER_MAX, NULL); - - if (line_type == STYLE_BORDER_NONE) { - if (color) - style_color_unref (color); - return style_border_ref (style_border_none ()); - } - - g_return_val_if_fail (color != NULL, NULL); - key.line_type = line_type; - key.color = color; - - if (border_hash) { - border = g_hash_table_lookup (border_hash, &key); - if (border != NULL) { - if (color) - style_color_unref (color); - return style_border_ref (border); - } - } else - border_hash = g_hash_table_new (style_border_hash, - style_border_equal); - - border = g_new0 (GnmBorder, 1); - *border = key; - g_hash_table_insert (border_hash, border, border); - border->ref_count = 1; - border->gc = NULL; - border->gc_screen = NULL; - border->width = style_border_get_width (line_type); - if (border->line_type == STYLE_BORDER_DOUBLE) { - border->begin_margin = 1; - border->end_margin = 1; - } else { - border->begin_margin = (border->width) > 1 ? 1 : 0; - border->end_margin = (border->width) > 2 ? 1 : 0; - } - - return border; -} - -gboolean -style_border_visible_in_blank (GnmBorder const *border) -{ - g_return_val_if_fail (border != NULL, FALSE); - - return border->line_type != STYLE_BORDER_NONE; -} - -gint -style_border_get_width (StyleBorderType const line_type) -{ - g_return_val_if_fail (line_type >= STYLE_BORDER_NONE, 0); - g_return_val_if_fail (line_type < STYLE_BORDER_MAX, 0); - - if (line_type == STYLE_BORDER_NONE) - return 0; - - return style_border_data [line_type].width; -} - -StyleBorderOrientation -style_border_get_orientation (StyleBorderLocation type) -{ - switch (type) { - case STYLE_BORDER_LEFT: - case STYLE_BORDER_RIGHT: - return STYLE_BORDER_VERTICAL; - case STYLE_BORDER_DIAG: - case STYLE_BORDER_REV_DIAG: - return STYLE_BORDER_DIAGONAL; - case STYLE_BORDER_TOP: - case STYLE_BORDER_BOTTOM: - default: - return STYLE_BORDER_HORIZONTAL; - } -} - -void -style_border_set_gc_dash (GdkGC *gc, StyleBorderType const i) -{ - GdkLineStyle style = GDK_LINE_SOLID; - - g_return_if_fail (gc != NULL); - g_return_if_fail (i >= STYLE_BORDER_NONE); - g_return_if_fail (i < STYLE_BORDER_MAX); - - if (style_border_data[i].pattern != NULL) - style = GDK_LINE_ON_OFF_DASH; - - /* NOTE : Tricky. We Use CAP_NOT_LAST because with butt lines - * of width > 0 seem to exclude the far point (under Xfree86-4). - * The Docs for X11R6 say that NotLast will give the same behavior for - * lines of width 0. Strangely the R5 docs say this for 0 AND 1. - */ - gdk_gc_set_line_attributes (gc, style_border_data[i].width, style, - GDK_CAP_NOT_LAST, GDK_JOIN_MITER); - - if (style_border_data[i].pattern != NULL) { - struct LineDotPattern const * const pat = - style_border_data[i].pattern; - - gdk_gc_set_dashes (gc, style_border_data[i].offset, - (gint8 *)pat->pattern, pat->elements); - } - - /* The background should never be drawn */ - gdk_gc_set_rgb_bg_color (gc, &gs_white); -} - -static inline GdkGC * -style_border_get_gc (GnmBorder const *border, GdkDrawable *drawable) -{ - GdkScreen *this_screen; - if (border == NULL) - return NULL; - - this_screen = gdk_drawable_get_screen (drawable); - if (border->gc_screen != this_screen) { - if (border->gc) - g_object_unref (G_OBJECT (border->gc)); - if (border->gc_screen) - g_object_unref (G_OBJECT (border->gc_screen)); - ((GnmBorder *)border)->gc = gdk_gc_new (drawable); - ((GnmBorder *)border)->gc_screen = this_screen; - g_object_ref (this_screen); - style_border_set_gc_dash (border->gc, border->line_type); - gdk_gc_set_rgb_fg_color (border->gc, &border->color->color); - } - - return border->gc; -} - -static void -style_border_set_pc_dash (StyleBorderType const i, - GnomePrintContext *context) -{ - GdkLineStyle style = GDK_LINE_SOLID; - int w; - - g_return_if_fail (context != NULL); - g_return_if_fail (i >= STYLE_BORDER_NONE); - g_return_if_fail (i < STYLE_BORDER_MAX); - - if (i == STYLE_BORDER_NONE) - return; - - if (style_border_data[i].pattern != NULL) - style = GDK_LINE_ON_OFF_DASH; - - w = style_border_data[i].width; - if (w == 0) - w = 1; - gnome_print_setlinewidth (context, w); - - if (style_border_data[i].pattern != NULL) { - struct LineDotPattern const * const pat = - style_border_data[i].pattern; - gnome_print_setdash (context, pat->elements, - pat->pattern_d, style_border_data[i].offset); - } -} - -static inline gboolean -style_border_set_pc (GnmBorder const * const border, - GnomePrintContext *context) -{ - if (border == NULL) - return FALSE; - - gnome_print_gsave (context); - style_border_set_pc_dash (border->line_type, context); - gnome_print_setrgbcolor (context, - border->color->color.red / (double) 0xffff, - border->color->color.green / (double) 0xffff, - border->color->color.blue / (double) 0xffff); - return TRUE; -} - -GnmBorder * -style_border_ref (GnmBorder *border) -{ - /* NULL is ok */ - if (border != NULL) - ++border->ref_count; - return border; -} - -void -style_border_unref (GnmBorder *border) -{ - if (border == NULL) - return; - - g_return_if_fail (border->ref_count > 0); - - border->ref_count--; - if (border->ref_count != 0) - return; - - /* Just to be on the safe side. - * We are allowed to deref the border_none, - * but not to free it. - */ - g_return_if_fail (border != style_border_none ()); - - /* Remove here, before we mess with the hashed fields. */ - g_hash_table_remove (border_hash, border); - - if (border->color) { - style_color_unref (border->color); - border->color = NULL; - } - - if (border->gc) { - g_object_unref (G_OBJECT (border->gc)); - border->gc = NULL; - } - - if (border->gc_screen) { - g_object_unref (G_OBJECT (border->gc_screen)); - border->gc_screen = NULL; - } - - g_free (border); -} - -#if 0 -static gboolean -style_border_hmargins (GnmBorder const * const * prev_vert, - GnmRow const *sr, int col, - int offsets [2][2]) -{ - GnmBorder const *border = sr->top [col]; - GnmBorder const *t0 = prev_vert [col]; - GnmBorder const *t1 = prev_vert [col+1]; - GnmBorder const *b0 = sr->vertical [col]; - GnmBorder const *b1 = sr->vertical [col+1]; - - if (border->line_type == STYLE_BORDER_DOUBLE) { - /* pull inwards or outwards */ - if (!style_border_is_blank (t0)) { - if (t0->line_type == STYLE_BORDER_DOUBLE) - offsets [1][0] = t0->end_margin; - else - offsets [1][0] = -t0->begin_margin; - } else if (!style_border_is_blank (b0)) - offsets [1][0] = -b0->begin_margin; - else - offsets [1][0] = 0; - - if (!style_border_is_blank (t1)) { - if (t1->line_type == STYLE_BORDER_DOUBLE) - offsets [1][1] = -t1->begin_margin; - else - offsets [1][1] = t1->end_margin; - } else if (!style_border_is_blank (b1)) - offsets [1][1] = b1->end_margin; - else - offsets [1][1] = 0; - - if (!style_border_is_blank (b0)) { - if (b0->line_type == STYLE_BORDER_DOUBLE) - offsets [0][0] = b0->end_margin; - else - offsets [0][0]= -b0->begin_margin; - } else if (!style_border_is_blank (t0)) - offsets [0][0]= -t0->begin_margin; - else - offsets [0][0]= 0; - - if (!style_border_is_blank (b1)) { - if (b1->line_type == STYLE_BORDER_DOUBLE) - offsets [0][1] = -b1->begin_margin; - else - offsets [0][1] = b1->end_margin; - } else if (!style_border_is_blank (t1)) - offsets [0][1] = t1->end_margin; - else - offsets [0][1] = 0; - return TRUE; - } - - offsets [0][0] = offsets [0][1] = 0; - if (border->line_type == STYLE_BORDER_NONE) { - /* No need to check for show grid. That is done when the - * borders are loaded. Do not over write background patterns - */ - if (!style_border_is_blank (b0)) - offsets [0][0] = 1 + b0->end_margin; - else if (!style_border_is_blank (t0)) - offsets [0][0] = 1 + t0->end_margin; - else if (sr->top [col-1] == NULL) - offsets [0][0] = 1; - - if (!style_border_is_blank (b1)) - offsets [0][1] = -1 - b1->begin_margin; - else if (!style_border_is_blank (t1)) - offsets [0][1] = -1 - t1->begin_margin; - else if (sr->top [col+1] == NULL) - offsets [0][1] = -1; - } else { - /* pull outwards */ - if (style_border_is_blank (sr->top [col-1])) { - int offset = 0; - if (!style_border_is_blank (b0)) - offset = b0->begin_margin; - if (!style_border_is_blank (t0)) { - int tmp = t0->begin_margin; - if (offset < tmp) - offset = tmp; - } - offsets [0][0] = -offset; - } - - if (style_border_is_blank (sr->top [col+1])) { - int offset = 0; - if (!style_border_is_blank (b1)) - offset = b1->end_margin; - if (!style_border_is_blank (t1)) { - int tmp = t1->end_margin; - if (offset < tmp) - offset = tmp; - } - offsets [0][1] = offset; - } - } - return FALSE; -} - -static gboolean -style_border_vmargins (GnmBorder const * const * prev_vert, - GnmRow const *sr, int col, - int offsets [2][2]) -{ - GnmBorder const *border = sr->vertical [col]; - GnmBorder const *l0 = sr->top [col-1]; - GnmBorder const *r0 = sr->top [col]; - GnmBorder const *l1 = sr->bottom [col-1]; - GnmBorder const *r1 = sr->bottom [col]; - - if (border->line_type == STYLE_BORDER_DOUBLE) { - /* pull inwards or outwards */ - if (!style_border_is_blank (l0)) - offsets [1][0] = l0->end_margin; - else if (!style_border_is_blank (r0)) - offsets [1][0] = -r0->begin_margin; - else - offsets [1][0] = 0; - - if (!style_border_is_blank (l1)) - offsets [1][1] = -l1->begin_margin; - else if (!style_border_is_blank (r1)) - offsets [1][1] = r1->end_margin; - else - offsets [1][1] = 0; - - if (!style_border_is_blank (r0)) - offsets [0][0] = r0->end_margin; - else if (!style_border_is_blank (l0)) - offsets [0][0] = -l0->begin_margin; - else - offsets [0][0] = 0; - - if (!style_border_is_blank (r1)) - offsets [0][1] = -r1->begin_margin; - else if (!style_border_is_blank (l1)) - offsets [0][1] = l1->end_margin; - else - offsets [0][1] = 0; - return TRUE; - } - - offsets [0][0] = offsets [0][1] = 0; - if (border->line_type == STYLE_BORDER_NONE) { - /* No need to check for show grid. That is done when the - * borders are loaded. - */ - if (!style_border_is_blank (r0)) - offsets [0][0] = 1 + r0->end_margin; - else if (!style_border_is_blank (l0)) - offsets [0][0] = 1 + l0->end_margin; - /* Do not over write background patterns */ - else if (prev_vert [col] == NULL) - offsets [0][0] = 1; - - if (!style_border_is_blank (r1)) - offsets [0][1] = -1 - r1->begin_margin; - else if (!style_border_is_blank (l1)) - offsets [0][1] = -1 - l1->begin_margin; - /* Do not over write background patterns */ - else if (sr->vertical [col] == NULL) - offsets [0][1] = -1; - } else { - /* pull inwards */ - int offset = 0; - if (!style_border_is_blank (r0)) - offset = 1 + r0->end_margin; - if (!style_border_is_blank (l0)) { - int tmp = 1 + l0->end_margin; - if (offset < tmp) - offset = tmp; - } - offsets [0][0] = offset; - - offset = 0; - if (!style_border_is_blank (r1)) - offset = 1 + r1->begin_margin; - if (!style_border_is_blank (l1)) { - int tmp = 1 + l1->begin_margin; - if (offset < tmp) - offset = tmp; - } - offsets [0][1] = -offset; - } - return FALSE; -} - -/** - * style_borders_row_draw : - * - * TODO : This is not the final resting place for this. - * It will move into the gui layer eventually. - */ -void -style_borders_row_draw (GnmBorder const * const * prev_vert, - GnmRow const *sr, - GdkDrawable * const drawable, - int x, int y1, int y2, - int *colwidths, gboolean draw_vertical) -{ - int o[2][2]; - int col, next_x = x; - GdkGC *gc; - - for (col = sr->start_col; col <= sr->end_col ; col++, x = next_x) { - - if (colwidths[col] == -1) - continue; - next_x = x + colwidths[col]; - - gc = style_border_get_gc (sr->top [col], drawable); - if (gc != NULL) { - int y = y1; - if (style_border_hmargins (prev_vert, sr, col, o)) { - gdk_draw_line (drawable, gc, x + o[1][0], y1-1, - next_x + o[1][1] + 1, y1-1); - ++y; - } - - /* See note in style_border_set_gc_dash about +1 */ - gdk_draw_line (drawable, gc, x + o[0][0], y, - next_x + o[0][1] + 1, y); - } - - if (!draw_vertical) - continue; - - gc = style_border_get_gc (sr->vertical [col], drawable); - if (gc != NULL) { - int x1 = x; - if (style_border_vmargins (prev_vert, sr, col, o)) { - gdk_draw_line (drawable, gc, x-1, y1 + o[1][0], - x-1, y2 + o[1][1] + 1); - ++x1; - } - /* See note in style_border_set_gc_dash about +1 */ - gdk_draw_line (drawable, gc, x1, y1 + o[0][0], - x1, y2 + o[0][1] + 1); - } - } - if (draw_vertical) { - gc = style_border_get_gc (sr->vertical [col], drawable); - if (gc != NULL) { - int x1 = x; - if (style_border_vmargins (prev_vert, sr, col, o)) { - gdk_draw_line (drawable, gc, x-1, y1 + o[1][0], - x-1, y2 + o[1][1] + 1); - ++x1; - } - /* See note in style_border_set_gc_dash about +1 */ - gdk_draw_line (drawable, gc, x, y1 + o[0][0], - x1, y2 + o[0][1] + 1); - } - } -} -#endif /* GnmRow... */ - -void -style_border_draw_diag (GnmStyle const *style, - GdkDrawable *drawable, - int x1, int y1, int x2, int y2) -{ - GnmBorder const *diag; - GdkGC *gc; - - diag = mstyle_get_border (style, MSTYLE_BORDER_REV_DIAGONAL); - if (diag != NULL && diag->line_type != STYLE_BORDER_NONE) { - gc = style_border_get_gc (diag, drawable); - if (diag->line_type == STYLE_BORDER_DOUBLE) { - gdk_draw_line (drawable, gc, x1+1, y1+3, x2-3, y2-1); - gdk_draw_line (drawable, gc, x1+3, y1+1, x2-1, y2-3); - } else - gdk_draw_line (drawable, gc, x1, y1, x2, y2); - } - - diag = mstyle_get_border (style, MSTYLE_BORDER_DIAGONAL); - if (diag != NULL && diag->line_type != STYLE_BORDER_NONE) { - gc = style_border_get_gc (diag, drawable); - if (diag->line_type == STYLE_BORDER_DOUBLE) { - gdk_draw_line (drawable, gc, x1+1, y2-3, x2-3, y1+1); - gdk_draw_line (drawable, gc, x1+3, y2-1, x2-1, y1+3); - } else - gdk_draw_line (drawable, gc, x1, y2, x2, y1); - } -} - -static inline void -print_hline (GnomePrintContext *context, - float x1, float x2, float y, int width) -{ - if (width == 0 || width % 2) - y -= .5; - - /* exclude far pixel to match gdk */ - gnome_print_moveto (context, x1, y); - gnome_print_lineto (context, x2, y); - gnome_print_stroke (context); -} - -static inline void -print_vline (GnomePrintContext *context, - float x, float y1, float y2, int width) -{ - if (width == 0 || width % 2) - x += .5; - - /* exclude far pixel to match gdk */ - gnome_print_moveto (context, x, y1); - gnome_print_lineto (context, x, y2); - gnome_print_stroke (context); -} - -#if 0 // Sheet, Row -void -style_borders_row_print (GnmBorder const * const * prev_vert, - GnmRow const *sr, - GnomePrintContext *context, - float x, float y1, float y2, - Sheet const *sheet, gboolean draw_vertical) -{ - int o[2][2], col; - float next_x = x; - GnmBorder const *border; - - for (col = sr->start_col; col <= sr->end_col ; col++, x = next_x) { - /* TODO : make this sheet agnostic. Pass in an array of - * widths and a flag for whether or not to draw grids. - */ - ColRowInfo const *cri = sheet_col_get_info (sheet, col); - if (!cri->visible) - continue; - next_x = x + cri->size_pts; - - border = sr->top [col]; - if (style_border_set_pc (border, context)) { - float y = y1; - if (style_border_hmargins (prev_vert, sr, col, o)) { - print_hline (context, x + o[1][0], - next_x + o[1][1] + 1., y1+1., border->width); - --y; - } - - print_hline (context, x + o[0][0], - next_x + o[0][1] + 1., y, border->width); - gnome_print_grestore (context); - } - - if (!draw_vertical) - continue; - border = sr->vertical [col]; - if (style_border_set_pc (border, context)) { - float x1 = x; - if (style_border_vmargins (prev_vert, sr, col, o)) { - print_vline (context, x-1., y1 - o[1][0], - y2 - o[1][1] - 1., border->width); - ++x1; - } - print_vline (context, x1, y1 - o[0][0], - y2 - o[0][1] - 1., border->width); - gnome_print_grestore (context); - } - } - if (draw_vertical) { - border = sr->vertical [col]; - if (style_border_set_pc (border, context)) { - float x1 = x; - if (style_border_vmargins (prev_vert, sr, col, o)) { - print_vline (context, x-1., y1 - o[1][0] - 1., - y2 - o[1][1], border->width); - ++x1; - } - /* See note in style_border_set_gc_dash about +1 */ - print_vline (context, x, y1 - o[0][0], - y2 - o[0][1] - 1, border->width); - gnome_print_grestore (context); - } - } -} -#endif // 0 - -void -style_border_print_diag (GnmStyle const *style, - GnomePrintContext *context, - float x1, float y1, float x2, float y2) -{ - GnmBorder const *diag; - - diag = mstyle_get_border (style, MSTYLE_BORDER_REV_DIAGONAL); - if (diag != NULL && diag->line_type != STYLE_BORDER_NONE) { - style_border_set_pc (diag, context); - if (diag->line_type == STYLE_BORDER_DOUBLE) { - gnome_print_moveto (context, x1+1.5, y1-3.); - gnome_print_lineto (context, x2-2., y2+ .5); - gnome_print_stroke (context); - gnome_print_moveto (context, x1+ 3., y1-1.5); - gnome_print_lineto (context, x2- .5, y2+2.); - } else { - gnome_print_moveto (context, x1+.5, y1-.5); - gnome_print_lineto (context, x2+.5, y2-.5); - } - gnome_print_stroke (context); - gnome_print_grestore (context); - } - - diag = mstyle_get_border (style, MSTYLE_BORDER_DIAGONAL); - if (diag != NULL && diag->line_type != STYLE_BORDER_NONE) { - style_border_set_pc (diag, context); - if (diag->line_type == STYLE_BORDER_DOUBLE) { - gnome_print_moveto (context, x1+1.5, y2+2.); - gnome_print_lineto (context, x2-2., y1-1.5); - gnome_print_stroke (context); - gnome_print_moveto (context, x1+3., y2+ .5); - gnome_print_lineto (context, x2- .5, y1-3.); - } else { - gnome_print_moveto (context, x1+.5, y2-.5); - gnome_print_lineto (context, x2+.5, y1-.5); - } - gnome_print_stroke (context); - gnome_print_grestore (context); - } -} diff --git a/lib/goffice/split/style-border.h b/lib/goffice/split/style-border.h deleted file mode 100644 index b3c9162839..0000000000 --- a/lib/goffice/split/style-border.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef GNUMERIC_STYLE_BORDER_H -#define GNUMERIC_STYLE_BORDER_H - -#include "gnumeric.h" -#include -#include - -typedef enum { - STYLE_BORDER_HORIZONTAL, - STYLE_BORDER_VERTICAL, - STYLE_BORDER_DIAGONAL -} StyleBorderOrientation; - -typedef enum { - STYLE_BORDER_NONE = 0x0, - STYLE_BORDER_THIN = 0x1, - STYLE_BORDER_MEDIUM = 0x2, - STYLE_BORDER_DASHED = 0x3, - STYLE_BORDER_DOTTED = 0x4, - STYLE_BORDER_THICK = 0x5, - STYLE_BORDER_DOUBLE = 0x6, - STYLE_BORDER_HAIR = 0x7, - STYLE_BORDER_MEDIUM_DASH = 0x8, - STYLE_BORDER_DASH_DOT = 0x9, - STYLE_BORDER_MEDIUM_DASH_DOT = 0xa, - STYLE_BORDER_DASH_DOT_DOT = 0xb, - STYLE_BORDER_MEDIUM_DASH_DOT_DOT = 0xc, - STYLE_BORDER_SLANTED_DASH_DOT = 0xd, - - /* ONLY for internal use */ - STYLE_BORDER_INCONSISTENT = 0xe, - - STYLE_BORDER_MAX -} StyleBorderType; - -/* The order corresponds to the border_buttons name list - * in dialog_cell_format_impl */ -typedef enum _StyleBorderLocation { - STYLE_BORDER_TOP, STYLE_BORDER_BOTTOM, - STYLE_BORDER_LEFT, STYLE_BORDER_RIGHT, - STYLE_BORDER_REV_DIAG, STYLE_BORDER_DIAG, - - /* These are special. - * They are logical rather than actual borders, however, they - * require extra lines to be drawn so they need to be here. - */ - STYLE_BORDER_HORIZ, STYLE_BORDER_VERT, - - STYLE_BORDER_EDGE_MAX -} StyleBorderLocation; - -struct _GnmBorder { - /* Key elements */ - StyleBorderType line_type; - GnmColor *color; - int begin_margin, end_margin, width; - - /* Private */ - GdkGC *gc; - GdkScreen *gc_screen; - gint ref_count; -}; - -void style_border_unref (GnmBorder *border); -GnmBorder *style_border_ref (GnmBorder *border); - -#define style_border_is_blank(b) ((b) == NULL || (b)->line_type == STYLE_BORDER_NONE) -GnmBorder *style_border_none (void); -void style_border_none_set_color (GnmColor *color); - -GnmBorder *style_border_fetch (StyleBorderType const line_type, - GnmColor *color, - StyleBorderOrientation orientation); -gboolean style_border_visible_in_blank (GnmBorder const *border); - -StyleBorderOrientation style_border_get_orientation (StyleBorderLocation type); - -gint style_border_get_width (StyleBorderType const line_type); -void style_border_set_gc_dash (GdkGC *gc, StyleBorderType const line_type); - -void style_borders_row_draw (GnmBorder const * const * prev_vert, - GnmRow const *sr, - GdkDrawable *drawable, - int x, int y1, int y2, - int *colwidths, gboolean draw_vertical); -void style_border_draw_diag (GnmStyle const *style, - GdkDrawable *drawable, - int x1, int y1, int x2, int y2); - -void style_borders_row_print (GnmBorder const * const * prev_vert, - GnmRow const *sr, - GnomePrintContext *context, - float x, float y1, float y2, - Sheet const *sheet, gboolean draw_vertical); -void style_border_print_diag (GnmStyle const *style, - GnomePrintContext *context, - float x1, float y1, float x2, float y2); - -#endif /* GNUMERIC_STYLE_BORDER_H */ diff --git a/lib/goffice/split/style-color.c b/lib/goffice/split/style-color.c deleted file mode 100644 index bb79febcf8..0000000000 --- a/lib/goffice/split/style-color.c +++ /dev/null @@ -1,296 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * color.c: Color allocation on the Gnumeric spreadsheet - * - * Author: - * Miguel de Icaza (miguel@kernel.org) - * - */ -#include -#include "gnumeric.h" -#include "style-color.h" -#include "style-border.h" -#include -#include - -/* Public _unallocated_ colours, i.e., no valid .pixel. */ -GdkColor gs_black = { 0, 0x0000, 0x0000, 0x0000 }; /* "Black" */ -GdkColor gs_white = { 0, 0xffff, 0xffff, 0xffff }; /* "White" */ -GdkColor gs_yellow = { 0, 0xffff, 0xffff, 0xe0e0 }; /* "LightYellow" */ -GdkColor gs_lavender = { 0, 0xe6e6, 0xe6e6, 0xfafa }; /* "lavender" */ -GdkColor gs_dark_gray = { 0, 0x3333, 0x3333, 0x3333 }; /* "gray20" */ -GdkColor gs_light_gray = { 0, 0xc7c7, 0xc7c7, 0xc7c7 }; /* "gray78" */ - -static GHashTable *style_color_hash; -static GnmColor *sc_black; -static GnmColor *sc_white; -static GnmColor *sc_grid; - -GnmColor * -style_color_new_name (char const *name) -{ - GdkColor c; - - gdk_color_parse (name, &c); - return style_color_new (c.red, c.green, c.blue); -} - -static GnmColor * -style_color_new_uninterned (gushort red, gushort green, gushort blue, - gboolean is_auto) -{ - GnmColor *sc = g_new (GnmColor, 1); - - sc->color.red = red; - sc->color.green = green; - sc->color.blue = blue; - sc->color.pixel = gs_white.pixel; - sc->name = NULL; - sc->is_auto = is_auto; - - /* Make a contrasting selection color with an alpha of .5 */ - red += (gs_lavender.red - red)/2; - green += (gs_lavender.green - green)/2; - blue += (gs_lavender.blue - blue)/2; - sc->selected_color.red = red; - sc->selected_color.green = green; - sc->selected_color.blue = blue; - sc->selected_color.pixel = gs_white.pixel; - - sc->ref_count = 1; - - return sc; -} - -GnmColor * -style_color_new (gushort red, gushort green, gushort blue) -{ - GnmColor *sc; - GnmColor key; - - key.color.red = red; - key.color.green = green; - key.color.blue = blue; - key.is_auto = FALSE; - - sc = g_hash_table_lookup (style_color_hash, &key); - if (!sc) { - sc = style_color_new_uninterned (red, green, blue, FALSE); - g_hash_table_insert (style_color_hash, sc, sc); - } else - sc->ref_count++; - - return sc; -} - -GnmColor * -style_color_new_pango (PangoColor *c) -{ - return style_color_new (c->red, c->green, c->blue); -} - -/* scale 8 bit/color -> 16 bit/color by cloning */ -GnmColor * -style_color_new_i8 (guint8 red, guint8 green, guint8 blue) -{ - gushort red16, green16, blue16; - - red16 = ((gushort) red) << 8 | red; - green16 = ((gushort) green) << 8 | green; - blue16 = ((gushort) blue) << 8 | blue; - - return style_color_new (red16, green16, blue16); -} -GnmColor * -style_color_new_go (GOColor c) -{ - return style_color_new_i8 ( - UINT_RGBA_R (c), UINT_RGBA_G (c), UINT_RGBA_B (c)); -} - -GnmColor * -style_color_black (void) -{ - if (!sc_black) - sc_black = style_color_new (0, 0, 0); - return style_color_ref (sc_black); -} - -GnmColor * -style_color_white (void) -{ - if (!sc_white) - sc_white = style_color_new (0xffff, 0xffff, 0xffff); - return style_color_ref (sc_white); -} - -GnmColor * -style_color_grid (void) -{ - if (!sc_grid) - sc_grid = style_color_new (0xc7c7, 0xc7c7, 0xc7c7); - return style_color_ref (sc_grid); -} - -/** - * Support for Excel auto-colors. - */ - -/** - * Always black, as far as we know. - */ -GnmColor * -style_color_auto_font (void) -{ - static GnmColor *color = NULL; - - if (!color) - color = style_color_new_uninterned (0, 0, 0, TRUE); - return style_color_ref (color); -} - -/** - * Always white, as far as we know. - */ -GnmColor * -style_color_auto_back (void) -{ - static GnmColor *color = NULL; - - if (!color) - color = style_color_new_uninterned (0xffff, 0xffff, 0xffff, - TRUE); - return style_color_ref (color); -} - -/** - * Normally black, but follows grid color if so told. - */ -GnmColor * -style_color_auto_pattern (void) -{ - static GnmColor *color = NULL; - - if (!color) - color = style_color_new_uninterned (0, 0, 0, TRUE); - return style_color_ref (color); -} - -GnmColor * -style_color_ref (GnmColor *sc) -{ - if (sc != NULL) - sc->ref_count++; - - return sc; -} - -void -style_color_unref (GnmColor *sc) -{ - if (sc == NULL) - return; - - g_return_if_fail (sc->ref_count > 0); - - sc->ref_count--; - if (sc->ref_count != 0) - return; - - /* - * There is no need to deallocate colors, as they come from - * the GDK Color Context - */ - g_hash_table_remove (style_color_hash, sc); - g_free (sc); -} - -gint -style_color_equal (const GnmColor *k1, const GnmColor *k2) -{ - if (k1->color.red == k2->color.red && - k1->color.green == k2->color.green && - k1->color.blue == k2->color.blue && - k1->is_auto == k2->is_auto) - return 1; - - return 0; -} - -static guint -color_hash (gconstpointer v) -{ - const GnmColor *k = (const GnmColor *)v; - - return (k->color.red << 16) ^ (k->color.green << 8) ^ (k->color.blue << 0) ^ - (k->is_auto); -} - -void -gnumeric_color_init (void) -{ - GdkColor error; - - gdk_color_parse ("cyan", &error); - if (gdk_screen_get_default () != NULL) { - /* - * Make sure we can see bogus attempt at getting the pixel - * value. This is, by nature, not multi-head safe. - */ - gdk_rgb_find_color ( - gdk_screen_get_default_colormap ( - gdk_screen_get_default ()), - &error); - } else - error.pixel = 0; - - gs_black.pixel = error.pixel; - gs_white.pixel = error.pixel; - gs_yellow.pixel = error.pixel; - gs_lavender.pixel = error.pixel; - gs_dark_gray.pixel = error.pixel; - gs_light_gray.pixel = error.pixel; - - style_color_hash = g_hash_table_new (color_hash, - (GEqualFunc) style_color_equal); -} - -static void -cb_color_leak (gpointer key, gpointer value, gpointer user_data) -{ - GnmColor *color = value; - - fprintf (stderr, "Leaking style-color at %p [%04x:%04x:%04x].\n", - color, color->color.red, color->color.green, color->color.blue); -} - -void -gnumeric_color_shutdown (void) -{ - /* - * FIXME: this doesn't really belong here, but style-border.c isn't - * able to clean itself up yet. - */ - GnmBorder *none = style_border_none (); - style_color_unref (none->color); - none->color = NULL; - - if (sc_black) { - style_color_unref (sc_black); - sc_black = NULL; - } - - if (sc_white) { - style_color_unref (sc_white); - sc_white = NULL; - } - - if (sc_grid) { - style_color_unref (sc_grid); - sc_grid = NULL; - } - - g_hash_table_foreach (style_color_hash, cb_color_leak, NULL); - g_hash_table_destroy (style_color_hash); - style_color_hash = NULL; -} diff --git a/lib/goffice/split/style-color.h b/lib/goffice/split/style-color.h deleted file mode 100644 index a58eff7fbd..0000000000 --- a/lib/goffice/split/style-color.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef GNUMERIC_STYLE_COLOR_H -#define GNUMERIC_STYLE_COLOR_H - -#include "gnumeric.h" -#include -#include - -struct _GnmColor { - GdkColor color, selected_color; - char *name; - int ref_count; - gboolean is_auto; -}; - -/* Colors used by any GnumericSheet item */ -extern GdkColor gs_white, gs_light_gray, gs_dark_gray, gs_black, gs_lavender, gs_yellow; - -GnmColor *style_color_new_go (GOColor c); -GnmColor *style_color_new_name (char const *name); -GnmColor *style_color_new (gushort red, gushort green, gushort blue); -GnmColor *style_color_new_i8 (guint8 red, guint8 green, guint8 blue); -GnmColor *style_color_new_pango (PangoColor *c); -GnmColor *style_color_auto_font (void); -GnmColor *style_color_auto_back (void); -GnmColor *style_color_auto_pattern (void); -GnmColor *style_color_ref (GnmColor *sc); -void style_color_unref (GnmColor *sc); -gint style_color_equal (const GnmColor *k1, const GnmColor *k2); -GnmColor *style_color_black (void); -GnmColor *style_color_white (void); -GnmColor *style_color_grid (void); - -void gnumeric_color_init (void); -void gnumeric_color_shutdown (void); - -#endif /* GNUMERIC_STYLE_COLOR_H */ diff --git a/lib/goffice/split/style.c b/lib/goffice/split/style.c deleted file mode 100644 index 53037e2388..0000000000 --- a/lib/goffice/split/style.c +++ /dev/null @@ -1,685 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Style.c: Style resource management - * - * Author: - * Miguel de Icaza (miguel@gnu.org) - * (C) 1998-2002 Miguel de Icaza - */ -#include -#include -#include "gnumeric.h" -#include "style.h" -#include "mstyle.h" - -#include "format.h" -#include "style-color.h" -#include "global-gnome-font.h" -#include "application.h" -//#include "sheet.h" -//#include "cell.h" -#include "value.h" - -#include "gui-util.h" -#include "mathfunc.h" -#include "gnumeric-gconf.h" - -#include -#include -#include - -#undef DEBUG_REF_COUNT -#undef DEBUG_FONTS - -static GHashTable *style_font_hash; -static GHashTable *style_font_negative_hash; - -double gnumeric_default_font_width; -static char *gnumeric_default_font_name; -static double gnumeric_default_font_size; -static PangoFontFamily **pango_families; -static GStringChunk *size_names; - -/** - * get_substitute_font - * @fontname The font name - * - * Tries to find a gnome font which matches the Excel font. - * Returns the name of the substitute font if found. Otherwise returns NULL - */ -/* This is very ad hoc - throw it away when something better comes along */ -static gchar const * -get_substitute_font (gchar const *fontname) -{ - int i; - - static char const *map[][2] = { - { "Times New Roman", "Times"}, - { "Tms Rmn", "Times"}, - { "Arial", "Sans"}, - { "Albany", "Sans"}, - { "Helvetica", "Sans"}, - { "Courier New", "Courier"}, - { "£Í£Ó £Ð¥´¥·¥Ã¥¯", "Kochi Gothic"}, - { "£Í£Ó ¥´¥·¥Ã¥¯", "Kochi Gothic"}, - { "¥´¥·¥Ã¥¯", "Kochi Gothic"}, - { "MS UI Gothic", "Kochi Gothic"}, - { "£Í£Ó £ÐÌÀÄ«", "Kochi Mincho"}, - { "£Í£Ó ÌÀÄ«", "Kochi Mincho"}, - { "ÌÀÄ«", "Kochi Mincho"}, - { NULL } - }; - for (i = 0; map[i][0]; i++) - if (g_ascii_strcasecmp (map[i][0], fontname) == 0) - return map[i][1]; - - return NULL; -} - -static int -style_font_string_width (GnmFont const *font, char const *str) -{ - int w; - pango_layout_set_text (font->pango.layout, str, -1); - pango_layout_get_pixel_size (font->pango.layout, &w, NULL); - return w; -} - -static double -calc_font_width (GnmFont const *font, char const *teststr) -{ - char const *p1, *p2; - int w = 0, w1, w2, dw; - char buf[3]; - - for (p1 = teststr; *p1; p1++) { - buf[0] = *p1; - buf[1] = 0; - w1 = style_font_string_width (font, buf); - for (p2 = teststr; *p2; p2++) { - buf[1] = *p2; - buf[2] = 0; - w2 = style_font_string_width (font, buf); - dw = w2 - w1; - if (dw > w) { - w = dw; -#ifdef DEBUG_FONT_WIDTH - fprintf (stderr, " %s = %d", buf, w); -#endif - } - } - } - - return w; -} - - -static GnmFont * -style_font_new_simple (PangoContext *context, - char const *font_name, double size_pts, double scale, - gboolean bold, gboolean italic) -{ - GnmFont *font; - GnmFont key; - int height; - - if (font_name == NULL) { - g_warning ("font_name == NULL, using %s", DEFAULT_FONT); - font_name = DEFAULT_FONT; - } - if (size_pts <= 0) { - g_warning ("font_size <= 0, using %f", DEFAULT_SIZE); - size_pts = DEFAULT_SIZE; - } - - /* This cast does not mean we will change the name. */ - key.font_name = (char *)font_name; - key.size_pts = size_pts; - key.is_bold = bold; - key.is_italic = italic; - key.scale = scale; - - font = (GnmFont *) g_hash_table_lookup (style_font_hash, &key); - if (font == NULL) { - PangoFontDescription *desc; - double pts_scale; - - if (g_hash_table_lookup (style_font_negative_hash, &key)) - return NULL; - - font = g_new0 (GnmFont, 1); - font->font_name = g_strdup (font_name); - font->size_pts = size_pts; - font->scale = scale; - font->is_bold = bold; - font->is_italic = italic; - /* One reference for the cache, one for the caller. */ - font->ref_count = 2; - - g_object_ref (context); - font->pango.context = context; - desc = pango_context_get_font_description (context); - pango_font_description_set_family (desc, font_name); - pango_font_description_set_weight (desc, - bold ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL); - pango_font_description_set_style (desc, - italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); - /* FIXME: set scale separately? */ - pango_font_description_set_size (desc, - size_pts * scale * - PANGO_SCALE); - - font->pango.font = pango_context_load_font (context, desc); - if (font->pango.font == NULL) { - /* if we fail, try to be smart and map to something similar */ - char const *sub = get_substitute_font (font_name); - if (sub != NULL) { - pango_font_description_set_family (desc, font_name); - font->pango.font = pango_context_load_font (context, - desc); - } - - if (font->pango.font == NULL) { - g_object_unref (context); - font->pango.context = NULL; - font->pango.font_descr = NULL; - g_hash_table_insert (style_font_negative_hash, - font, font); - return NULL; - } - } - - font->gnome_print_font = gnm_font_find_closest_from_weight_slant (font_name, - bold ? GNOME_FONT_BOLD : GNOME_FONT_REGULAR, italic, size_pts); - - font->pango.font_descr = pango_font_describe (font->pango.font); - - font->pango.layout = pango_layout_new (context); - pango_layout_set_font_description (font->pango.layout, - font->pango.font_descr); - - font->pango.metrics = pango_font_get_metrics (font->pango.font, - gtk_get_default_language ()); - - height = pango_font_metrics_get_ascent (font->pango.metrics) + - pango_font_metrics_get_descent (font->pango.metrics); - font->height = PANGO_PIXELS (height); - font->approx_width.pixels.digit = calc_font_width (font, "0123456789"); - font->approx_width.pixels.decimal = calc_font_width (font, ".,"); - font->approx_width.pixels.hash = calc_font_width (font, "#"); - font->approx_width.pixels.sign = calc_font_width (font, "-+"); - font->approx_width.pixels.E = calc_font_width (font, "E"); - font->approx_width.pixels.e = calc_font_width (font, "e"); - - pts_scale = 72. / (gnm_app_display_dpi_get (TRUE) * scale); - font->approx_width.pts.digit = - font->approx_width.pixels.digit * pts_scale; - font->approx_width.pts.decimal = - font->approx_width.pixels.decimal * pts_scale; - font->approx_width.pts.sign = - font->approx_width.pixels.sign * pts_scale; - font->approx_width.pts.E = - font->approx_width.pixels.E * pts_scale; - font->approx_width.pts.e = - font->approx_width.pixels.e * pts_scale; - - g_hash_table_insert (style_font_hash, font, font); - } else - font->ref_count++; - -#ifdef DEBUG_REF_COUNT - g_message (__FUNCTION__ " font=%p name=%s%s%s ref_count=%d\n", - font, font->font_name, - font->is_bold ? " bold" : "", - font->is_italic ? " italic" : "", - font->ref_count); -#endif - return font; -} - -GnmFont * -style_font_new (PangoContext *context, - char const *font_name, double size_pts, double scale, - gboolean bold, gboolean italic) -{ - GnmFont *font; - - g_return_val_if_fail (font_name != NULL, NULL); - g_return_val_if_fail (size_pts > 0, NULL); - - font = style_font_new_simple (context, font_name, size_pts, - scale, bold, italic); - if (font) return font; - - font_name = gnumeric_default_font_name; - font = style_font_new_simple (context, font_name, size_pts, - scale, bold, italic); - if (font) return font; - - size_pts = gnumeric_default_font_size; - font = style_font_new_simple (context, font_name, size_pts, - scale, bold, italic); - if (font) return font; - - bold = FALSE; - font = style_font_new_simple (context, font_name, size_pts, - scale, bold, italic); - if (font) return font; - - italic = FALSE; - font = style_font_new_simple (context, font_name, size_pts, - scale, bold, italic); - if (font) return font; - - /* - * This should not be possible to reach as we have reverted all the way - * back to the default font. - */ - g_assert_not_reached (); - abort (); -} - -void -style_font_ref (GnmFont *sf) -{ - g_return_if_fail (sf != NULL); - - sf->ref_count++; -#ifdef DEBUG_REF_COUNT - g_message (__FUNCTION__ " font=%p name=%s%s%s ref_count=%d\n", - sf, sf->font_name, - sf->is_bold ? " bold" : "", - sf->is_italic ? " italic" : "", - sf->ref_count); -#endif -} - -void -style_font_unref (GnmFont *sf) -{ - g_return_if_fail (sf != NULL); - g_return_if_fail (sf->ref_count > 0); - - sf->ref_count--; -#ifdef DEBUG_REF_COUNT - g_message (__FUNCTION__ " font=%p name=%s%s%s ref_count=%d\n", - sf, sf->font_name, - sf->is_bold ? " bold" : "", - sf->is_italic ? " italic" : "", - sf->ref_count); -#endif - if (sf->ref_count != 0) - return; - - if (sf->pango.context != NULL) { - g_object_unref (G_OBJECT (sf->pango.context)); - sf->pango.context = NULL; - } - if (sf->pango.layout != NULL) { - g_object_unref (G_OBJECT (sf->pango.layout)); - sf->pango.layout = NULL; - } - if (sf->pango.font != NULL) { - g_object_unref (G_OBJECT (sf->pango.font)); - sf->pango.font = NULL; - } - if (sf->pango.font_descr != NULL) { - pango_font_description_free (sf->pango.font_descr); - sf->pango.font_descr = NULL; - } - if (sf->pango.metrics != NULL) { - pango_font_metrics_unref (sf->pango.metrics); - sf->pango.metrics = NULL; - } - if (sf->gnome_print_font != NULL) { - gnome_font_unref (sf->gnome_print_font); - sf->gnome_print_font = NULL; - } - g_hash_table_remove (style_font_hash, sf); - g_free (sf->font_name); - g_free (sf); -} - -/* - * The routines used to hash and compare the different styles - */ -gint -style_font_equal (gconstpointer v, gconstpointer v2) -{ - GnmFont const *k1 = (GnmFont const *) v; - GnmFont const *k2 = (GnmFont const *) v2; - - if (k1->size_pts != k2->size_pts) - return 0; - - if (k1->is_bold != k2->is_bold) - return 0; - if (k1->is_italic != k2->is_italic) - return 0; - if (k1->scale != k2->scale) - return 0; - - return !strcmp (k1->font_name, k2->font_name); -} - -guint -style_font_hash_func (gconstpointer v) -{ - GnmFont const *k = (GnmFont const *) v; - - return k->size_pts + g_str_hash (k->font_name); -} - -static int -compare_family_pointers_by_name (gconstpointer a, gconstpointer b) -{ - PangoFontFamily * const * const fa = a; - PangoFontFamily * const * const fb = b; - return g_utf8_collate (pango_font_family_get_name (*fa), - pango_font_family_get_name (*fb)); -} - -/** - * gnm_pango_context_get : - * - * Simple wrapper to handle windowless operation - **/ -PangoContext * -gnm_pango_context_get (void) -{ - PangoContext *context; - GdkScreen *screen = gdk_screen_get_default (); - - if (screen != NULL) { - context = gdk_pango_context_get_for_screen (screen); - /* FIXME: barf! */ - gdk_pango_context_set_colormap (context, - gdk_screen_get_default_colormap (screen)); - } else { - PangoFontMap *fontmap = pango_ft2_font_map_new (); - pango_ft2_font_map_set_resolution (PANGO_FT2_FONT_MAP (fontmap), 96, 96); - context = pango_ft2_font_map_create_context (PANGO_FT2_FONT_MAP (fontmap)); - } - pango_context_set_language (context, gtk_get_default_language ()); - pango_context_set_base_dir (context, PANGO_DIRECTION_LTR); - - return context; -} - -static void -font_init (void) -{ - PangoContext *context; - GnmFont *gnumeric_default_font = NULL; - int n_families, i; - - gnumeric_default_font_name = g_strdup (gnm_app_prefs->default_font.name); - gnumeric_default_font_size = gnm_app_prefs->default_font.size; - - context = gnm_pango_context_get (); - if (gnumeric_default_font_name && gnumeric_default_font_size >= 1) - gnumeric_default_font = style_font_new_simple (context, - gnumeric_default_font_name, gnumeric_default_font_size, - 1., FALSE, FALSE); - if (gnumeric_default_font == NULL) { - g_warning ("Configured default font '%s %f' not available, trying fallback...", - gnumeric_default_font_name, gnumeric_default_font_size); - gnumeric_default_font = style_font_new_simple (context, - DEFAULT_FONT, DEFAULT_SIZE, 1., FALSE, FALSE); - if (gnumeric_default_font != NULL) { - g_free (gnumeric_default_font_name); - gnumeric_default_font_name = g_strdup (DEFAULT_FONT); - gnumeric_default_font_size = DEFAULT_SIZE; - } else { - g_warning ("Fallback font '%s %f' not available, trying 'fixed'...", - DEFAULT_FONT, DEFAULT_SIZE); - gnumeric_default_font = style_font_new_simple (context, - "fixed", 10, 1., FALSE, FALSE); - if (gnumeric_default_font != NULL) { - g_free (gnumeric_default_font_name); - gnumeric_default_font_name = g_strdup ("fixed"); - gnumeric_default_font_size = 10; - } else { - g_warning ("Even 'fixed 10' failed ?? We're going to exit now," - "there is something wrong with your font configuration"); - exit (1); - } - } - } - - gnumeric_default_font_width = gnumeric_default_font->approx_width.pts.digit; - style_font_unref (gnumeric_default_font); - - size_names = g_string_chunk_new (128); - - pango_context_list_families (context, - &pango_families, &n_families); - qsort (pango_families, n_families, sizeof (*pango_families), - compare_family_pointers_by_name); - - for (i = 0 ; i < n_families ; i++) - gnumeric_font_family_list = g_list_prepend ( - gnumeric_font_family_list, - (gpointer) pango_font_family_get_name (pango_families[i])); - - gnumeric_font_family_list = g_list_reverse (gnumeric_font_family_list); - - for (i = 0; gnumeric_point_sizes [i] != 0; i++){ - char buffer[4 * sizeof (int)]; - sprintf (buffer, "%d", gnumeric_point_sizes [i]); - gnumeric_point_size_list = g_list_prepend ( - gnumeric_point_size_list, - g_string_chunk_insert (size_names, buffer)); - } - - g_object_unref (G_OBJECT (context)); -} - -static void -font_shutdown (void) -{ - g_free (gnumeric_default_font_name); - gnumeric_default_font_name = NULL; - - g_free (pango_families); - pango_families = NULL; - g_list_free (gnumeric_font_family_list); - gnumeric_font_family_list = NULL; - g_list_free (gnumeric_point_size_list); - gnumeric_point_size_list = NULL; - g_string_chunk_free (size_names); - size_names = NULL; -} - -void -style_init (void) -{ - number_format_init (); - style_font_hash = g_hash_table_new (style_font_hash_func, - style_font_equal); - style_font_negative_hash = g_hash_table_new (style_font_hash_func, - style_font_equal); - - font_init (); -} - -static void -delete_neg_font (GnmFont *sf, gpointer value, gpointer user_data) -{ - g_free (sf->font_name); - g_free (sf); -} - -static void -list_cached_fonts (GnmFont *font, gpointer value, GSList **lp) -{ - *lp = g_slist_prepend (*lp, font); -} - -/* - * Release all resources allocated by style_init. - */ -void -style_shutdown (void) -{ - font_shutdown (); - number_format_shutdown (); - { - /* Make a list of the fonts, then unref them. */ - GSList *fonts = NULL, *tmp; - g_hash_table_foreach (style_font_hash, (GHFunc) list_cached_fonts, &fonts); - for (tmp = fonts; tmp; tmp = tmp->next) { - GnmFont *sf = tmp->data; - if (sf->ref_count != 1) - g_warning ("Font %s has %d references instead of the expected single.", - sf->font_name, sf->ref_count); - style_font_unref (sf); - } - g_slist_free (fonts); - } - g_hash_table_destroy (style_font_hash); - style_font_hash = NULL; - - g_hash_table_foreach (style_font_negative_hash, (GHFunc) delete_neg_font, NULL); - g_hash_table_destroy (style_font_negative_hash); - style_font_negative_hash = NULL; -} - -/** - * required_updates_for_style - * @style: the style - * - * What changes are required after applying the supplied style. - */ -SpanCalcFlags -required_updates_for_style (GnmStyle const *style) -{ - SpanCalcFlags res = SPANCALC_SIMPLE; - - gboolean const row_height = - mstyle_is_element_set (style, MSTYLE_FONT_SIZE) || - mstyle_is_element_set (style, MSTYLE_WRAP_TEXT) || - mstyle_is_element_set (style, MSTYLE_ROTATION); - gboolean const size_change = row_height || - mstyle_is_element_set (style, MSTYLE_FONT_NAME) || - mstyle_is_element_set (style, MSTYLE_FONT_BOLD) || - mstyle_is_element_set (style, MSTYLE_FONT_ITALIC); - gboolean const format_change = - (mstyle_is_element_set (style, MSTYLE_FORMAT) || - mstyle_is_element_set (style, MSTYLE_INDENT) || - mstyle_is_element_set (style, MSTYLE_ALIGN_H) || - mstyle_is_element_set (style, MSTYLE_ALIGN_V) || - mstyle_is_element_set (style, MSTYLE_FONT_STRIKETHROUGH) || - mstyle_is_element_set (style, MSTYLE_FONT_UNDERLINE) || - mstyle_is_element_set (style, MSTYLE_COLOR_FORE) || - mstyle_is_element_set (style, MSTYLE_ROTATION)); - - if (row_height) - res |= SPANCALC_ROW_HEIGHT; - if (format_change || size_change) - res |= SPANCALC_RE_RENDER | SPANCALC_RESIZE; - return res; -} - -#if 0 // gnumeric - -/** - * style_default_halign : - * @style : - * @cell : - * - * Select the appropriate horizontal alignment depending on the style and cell - * value. - */ -StyleHAlignFlags -style_default_halign (GnmStyle const *mstyle, GnmCell const *c) -{ - StyleHAlignFlags align = mstyle_get_align_h (mstyle); - GnmValue *v; - - if (align != HALIGN_GENERAL) - return align; - - if (mstyle_get_rotation (mstyle) != 0) - return HALIGN_LEFT; - - g_return_val_if_fail (c != NULL, HALIGN_RIGHT); - - if (c->base.sheet && c->base.sheet->display_formulas && - cell_has_expr (c)) - return HALIGN_LEFT; - - for (v = c->value; v != NULL ; ) - switch (v->type) { - case VALUE_BOOLEAN : - case VALUE_ERROR : - return HALIGN_CENTER; - - case VALUE_INTEGER : - case VALUE_FLOAT : - return HALIGN_RIGHT; - - case VALUE_ARRAY : - /* Tail recurse into the array */ - if (v->v_array.x > 0 && v->v_array.y > 0) { - v = v->v_array.vals [0][0]; - continue; - } - - default : - return HALIGN_LEFT; - } - return HALIGN_RIGHT; -} - -#endif // 0 - -/** - * gnm_font_find_closest_from_weight_slant : - * - * A wrapper around gnome-print because it is stupid. - * At least this will warn us when it is stupid - **/ -GnomeFont * -gnm_font_find_closest_from_weight_slant (const guchar *family, - GnomeFontWeight weight, - gboolean italic, gdouble size) -{ - GnomeFont *font; - guchar const *fam; - guchar *name; - - g_return_val_if_fail (family != NULL, NULL); - - while (1) { - font = gnome_font_find_closest_from_weight_slant - (family, weight, italic, size); - fam = gnome_font_get_family_name (font); - if (fam != NULL && g_ascii_strcasecmp (family, fam) == 0) - return font; - - name = gnome_font_get_full_name (font); - g_warning ("GnomePrint: Requested %s but using %s (%s)", - family, fam, name); - g_free (name); - - /* put in some fallbacks */ - if (!g_ascii_strcasecmp (family, "Sans")) - family = "Sans Regular"; - else if (!g_ascii_strcasecmp (family, "Helvetica")) - family = "Sans"; - else if (!g_ascii_strcasecmp (family, "Albany")) - family = "Arial"; - /* one of the arials */ - else if (!g_ascii_strncasecmp (family, "Arial ", 6)) - family = "Arial"; - else if (!g_ascii_strcasecmp (family, "Arial")) - family = "Sans"; - else - return font; - - g_warning ("Trying to fallback to '%s'", family); - } - /* notreached */ - return font; -} diff --git a/lib/goffice/split/style.h b/lib/goffice/split/style.h deleted file mode 100644 index b4235b5c7b..0000000000 --- a/lib/goffice/split/style.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef GNUMERIC_STYLE_H -#define GNUMERIC_STYLE_H - -#include -#include -#include -#include - -#define DEFAULT_FONT "Sans" -#define DEFAULT_SIZE 10.0 - -/* Alignment definitions */ -/* Do not change these flags they are used as keys in the 1.0.x xml format. */ -typedef enum _StyleHAlignFlags { - HALIGN_GENERAL = 0x01, - HALIGN_LEFT = 0x02, - HALIGN_RIGHT = 0x04, - HALIGN_CENTER = 0x08, - HALIGN_FILL = 0x10, - HALIGN_JUSTIFY = 0x20, - HALIGN_CENTER_ACROSS_SELECTION = 0x40 -} StyleHAlignFlags; - -typedef enum _StyleVAlignFlags { - VALIGN_TOP = 1, - VALIGN_BOTTOM = 2, - VALIGN_CENTER = 4, - VALIGN_JUSTIFY = 8 -} StyleVAlignFlags; - -typedef enum _StyleUnderlineType { - UNDERLINE_NONE = 0, - UNDERLINE_SINGLE = 1, - UNDERLINE_DOUBLE = 2 -} StyleUnderlineType; - -struct _GnmFont { - int ref_count; - char *font_name; - double size_pts; - double scale; - struct { - /* This does not belong here. */ - struct { - double digit, decimal, sign, E, e, hash; - } pixels, pts; - } approx_width; - double height; - struct { - PangoContext *context; - PangoFontMetrics *metrics; - PangoFont *font; - PangoFontDescription *font_descr; - PangoLayout *layout; - } pango; - - GnomeFont *gnome_print_font; - - unsigned int is_bold:1; - unsigned int is_italic:1; -}; - -void style_init (void); -void style_shutdown (void); - -GnmFont *style_font_new (PangoContext *context, - const char *font_name, - double size_pts, double scale, - gboolean bold, gboolean italic); -void style_font_ref (GnmFont *sf); -void style_font_unref (GnmFont *sf); - -guint style_font_hash_func (gconstpointer v); -gint style_font_equal (gconstpointer v, gconstpointer v2); - -SpanCalcFlags required_updates_for_style (GnmStyle const *style); -StyleHAlignFlags style_default_halign (GnmStyle const *mstyle, GnmCell const *c); - -extern double gnumeric_default_font_width; - -GnomeFont *gnm_font_find_closest_from_weight_slant (const guchar *family, - GnomeFontWeight weight, - gboolean italic, - gdouble size); -PangoContext *gnm_pango_context_get (void); - -// #include "mstyle.h" - -#endif /* GNUMERIC_STYLE_H */ diff --git a/lib/goffice/split/validation.c b/lib/goffice/split/validation.c deleted file mode 100644 index c4947dfae6..0000000000 --- a/lib/goffice/split/validation.c +++ /dev/null @@ -1,320 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * validation.c: Implementation of validation. - * - * Copyright (C) Jody Goldberg - * - * based on work by - * Almer S. Tigelaar - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include "gnumeric.h" -#include "numbers.h" -#include "mathfunc.h" -#include "validation.h" -#include "expr.h" -#include "mstyle.h" -#include "workbook.h" -#include "sheet.h" -#include "cell.h" -#include "value.h" -#include "number-match.h" -#include "workbook-control.h" -#include "parse-util.h" - -#include -#include - -/** - * validation_new : - * - * @title : will be copied. - * @msg : will be copied. - * @expr0 : absorb the reference to the expression. - * @expr1 : absorb the reference to the expression. - */ -GnmValidation * -validation_new (ValidationStyle style, - ValidationType type, - ValidationOp op, - char const *title, char const *msg, - GnmExpr const *expr0, GnmExpr const *expr1, - gboolean allow_blank, gboolean use_dropdown) -{ - GnmValidation *v; - - if (type == VALIDATION_TYPE_CUSTOM && op != VALIDATION_OP_NONE) { - /* This can happen if an .xls file was saved as a .gnumeric. */ - g_warning ("VALIDATION_TYPE_CUSTOM needs to go with VALIDATION_OP_NONE. Fixing."); - op = VALIDATION_OP_NONE; - } - - v = g_new0 (GnmValidation, 1); - v->ref_count = 1; - - v->title = title ? gnm_string_get (title) : NULL; - v->msg = msg ? gnm_string_get (msg) : NULL; - v->expr[0] = expr0; - v->expr[1] = expr1; - v->style = style; - v->type = type; - v->op = op; - v->allow_blank = (allow_blank != FALSE); - v->use_dropdown = (use_dropdown != FALSE); - - return v; -} - -void -validation_ref (GnmValidation *v) -{ - g_return_if_fail (v != NULL); - v->ref_count++; -} - -void -validation_unref (GnmValidation *v) -{ - g_return_if_fail (v != NULL); - - v->ref_count--; - - if (v->ref_count < 1) { - int i; - - if (v->title != NULL) { - gnm_string_unref (v->title); - v->title = NULL; - } - if (v->msg != NULL) { - gnm_string_unref (v->msg); - v->msg = NULL; - } - for (i = 0 ; i < 2 ; i++) - if (v->expr[i] != NULL) { - gnm_expr_unref (v->expr[i]); - v->expr[i] = NULL; - } - g_free (v); - } -} - -/** - * validation_eval: - * - * Either pass @expr or @val. - * The parameters will be validated against the - * validation set in the GnmStyle if applicable. - **/ -ValidationStatus -validation_eval (WorkbookControl *wbc, GnmStyle const *mstyle, - Sheet *sheet, GnmCellPos const *pos, gboolean *showed_dialog) -{ - GnmValidation *v; - GnmCell *cell; - char *msg = NULL; - gboolean allocated_msg = FALSE; - ValidationStatus result; - - v = mstyle_get_validation (mstyle); - if (v == NULL) - return VALIDATION_STATUS_VALID; - - if (v->style == VALIDATION_TYPE_ANY) - return VALIDATION_STATUS_VALID; - - cell = sheet_cell_get (sheet, pos->col, pos->row); - if (cell != NULL) - dependent_eval (CELL_TO_DEP (cell)); - - if (cell_is_empty (cell)) { - if (v->allow_blank) - return VALIDATION_STATUS_VALID; - msg = g_strdup_printf (_("Cell %s is not permitted to be blank"), - cell_name (cell)); - } else { - GnmExpr const *val_expr = NULL, *expr = NULL; - GnmValue *val = cell->value; - - switch (v->type) { - case VALIDATION_TYPE_ANY : - return VALIDATION_STATUS_VALID; - - case VALIDATION_TYPE_AS_INT : - case VALIDATION_TYPE_AS_NUMBER : - case VALIDATION_TYPE_AS_DATE : /* What the hell does this do */ - case VALIDATION_TYPE_AS_TIME : { /* What the hell does this do */ - GnmValue *res = NULL; - /* we know it is not empty */ - if (val->type == VALUE_ERROR) { - msg = g_strdup_printf (_("'%s' is an error"), - value_peek_string (val)); - break; - } else if (val->type == VALUE_STRING) { - char const *s = value_peek_string (val); - res = format_match_number (s, NULL, - workbook_date_conv (sheet->workbook)); - if (res == NULL) { - char const *fmt; - /* FIXME what else is needed */ - if (v->type == VALIDATION_TYPE_AS_DATE) { - fmt = N_("'%s' is not a valid date"); - } else if (v->type == VALIDATION_TYPE_AS_TIME) { - fmt = N_("'%s' is not a valid time"); - } else - fmt = N_("'%s' is not a number"); - msg = g_strdup_printf (_(fmt), s); - break; - } - } else - res = value_dup (val); - - if (v->type == VALIDATION_TYPE_AS_INT && - res != NULL && res->type == VALUE_FLOAT) { - gnm_float f = value_get_as_float (res); - gboolean isint = gnumabs (f - gnumeric_fake_round (f)) < 1e-10; - if (!isint) { - char const *valstr = value_peek_string (val); - msg = g_strdup_printf (_("'%s' is not an integer"), valstr); - break; - } - } - - val_expr = gnm_expr_new_constant (res); - break; - } - - case VALIDATION_TYPE_IN_LIST : -#ifdef GOG_WARN_TODO -#warning TODO -#endif - return VALIDATION_STATUS_VALID; - - case VALIDATION_TYPE_TEXT_LENGTH : - /* XL appears to use a very basic value -> string mapping that - * ignores formatting. - * eg len (12/13/01) == len (37238) = 5 - * This seems wrong for - */ - val_expr = gnm_expr_new_constant ( - value_new_int (strlen (value_peek_string (val)))); - break; - - case VALIDATION_TYPE_CUSTOM : - expr = v->expr[0]; - if (expr == NULL) - return VALIDATION_STATUS_VALID; - gnm_expr_ref (expr); - break; - } - - if (msg == NULL && expr == NULL) { - GnmExprOp op; - - g_return_val_if_fail (val_expr != NULL, VALIDATION_STATUS_VALID); - - switch (v->op) { - case VALIDATION_OP_EQUAL : op = GNM_EXPR_OP_EQUAL; break; - case VALIDATION_OP_NOT_EQUAL : op = GNM_EXPR_OP_NOT_EQUAL; break; - case VALIDATION_OP_GT : op = GNM_EXPR_OP_GT; break; - case VALIDATION_OP_NOT_BETWEEN : - case VALIDATION_OP_LT : op = GNM_EXPR_OP_LT; break; - case VALIDATION_OP_BETWEEN : - case VALIDATION_OP_GTE : op = GNM_EXPR_OP_GTE; break; - case VALIDATION_OP_LTE : op = GNM_EXPR_OP_LTE; break; - default : - g_warning ("Invalid validation operator %d", v->op); - return VALIDATION_STATUS_VALID; - } - - if (v->expr [0] == NULL) - return VALIDATION_STATUS_VALID; - - gnm_expr_ref (v->expr[0]); - expr = gnm_expr_new_binary (val_expr, op, v->expr[0]); - } - - if (expr != NULL) { - GnmParsePos pp; - GnmEvalPos ep; - char *expr_str; - GnmValue *val; - gboolean dummy, valid; - - eval_pos_init_cell (&ep, cell); - val = gnm_expr_eval (expr, &ep, GNM_EXPR_EVAL_SCALAR_NON_EMPTY); - valid = value_get_as_bool (val, &dummy); - value_release (val); - - if (valid && v->op != VALIDATION_OP_BETWEEN) { - gnm_expr_unref (expr); - return VALIDATION_STATUS_VALID; - } - - if ((v->op == VALIDATION_OP_BETWEEN && valid) || - v->op == VALIDATION_OP_NOT_BETWEEN) { - g_return_val_if_fail (v->expr[1] != NULL, VALIDATION_STATUS_VALID); - - gnm_expr_ref (val_expr); - gnm_expr_ref (v->expr[1]); - gnm_expr_unref (expr); - expr = gnm_expr_new_binary (val_expr, - (v->op == VALIDATION_OP_BETWEEN) ? GNM_EXPR_OP_LTE : GNM_EXPR_OP_GT, - v->expr[1]); - val = gnm_expr_eval (expr, &ep, GNM_EXPR_EVAL_SCALAR_NON_EMPTY); - valid = value_get_as_bool (val, &dummy); - value_release (val); - if (valid) { - gnm_expr_unref (expr); - return VALIDATION_STATUS_VALID; - } - } - - expr_str = gnm_expr_as_string (expr, - parse_pos_init_evalpos (&pp, &ep), - gnm_expr_conventions_default); - msg = g_strdup_printf (_("%s is not true."), expr_str); - g_free (expr_str); - gnm_expr_unref (expr); - } - } - - if (v->msg != NULL && v->msg->str[0] != '\0') { - if (msg != NULL) - g_free (msg); - msg = v->msg->str; - } else { - if (msg != NULL) - allocated_msg = TRUE; - else - msg = _("That value is invalid.\n" - "Restrictions have been placed on this cell's contents."); - } - - if (showed_dialog != NULL) - *showed_dialog = TRUE; - result = wb_control_validation_msg (wbc, v->style, - (v->title != NULL && v->title->str[0] != '\0') - ? v->title->str - : _("Gnumeric: Validation"), - msg); - if (allocated_msg) - g_free (msg); - return result; -} diff --git a/lib/goffice/split/validation.h b/lib/goffice/split/validation.h deleted file mode 100644 index 5d07612726..0000000000 --- a/lib/goffice/split/validation.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef GNUMERIC_VALIDATION_H -#define GNUMERIC_VALIDATION_H - -#include "gnumeric.h" -#include "str.h" - -typedef enum { - VALIDATION_STATUS_VALID, /* things validate */ - VALIDATION_STATUS_INVALID_DISCARD, /* things do not validate and should be discarded */ - VALIDATION_STATUS_INVALID_EDIT /* things do not validate and editing should continue */ -} ValidationStatus; -typedef enum { - VALIDATION_STYLE_NONE, - VALIDATION_STYLE_STOP, - VALIDATION_STYLE_WARNING, - VALIDATION_STYLE_INFO, - VALIDATION_STYLE_PARSE_ERROR -} ValidationStyle; -typedef enum { - VALIDATION_TYPE_ANY, - VALIDATION_TYPE_AS_INT, - VALIDATION_TYPE_AS_NUMBER, - VALIDATION_TYPE_IN_LIST, - VALIDATION_TYPE_AS_DATE, - VALIDATION_TYPE_AS_TIME, - VALIDATION_TYPE_TEXT_LENGTH, - VALIDATION_TYPE_CUSTOM -} ValidationType; -typedef enum { - VALIDATION_OP_NONE = -1, - VALIDATION_OP_BETWEEN, - VALIDATION_OP_NOT_BETWEEN, - VALIDATION_OP_EQUAL, - VALIDATION_OP_NOT_EQUAL, - VALIDATION_OP_GT, - VALIDATION_OP_LT, - VALIDATION_OP_GTE, - VALIDATION_OP_LTE -} ValidationOp; - -struct _GnmValidation { - int ref_count; - - GnmString *title; - GnmString *msg; - GnmExpr const *expr [2]; - ValidationStyle style; - ValidationType type; - ValidationOp op; - gboolean allow_blank; - gboolean use_dropdown; -}; - -GnmValidation *validation_new (ValidationStyle style, - ValidationType type, - ValidationOp op, - char const *title, char const *msg, - GnmExpr const *expr0, GnmExpr const *expr1, - gboolean allow_blank, gboolean use_dropdown); - -void validation_ref (GnmValidation *v); -void validation_unref (GnmValidation *v); -ValidationStatus validation_eval (WorkbookControl *wbc, GnmStyle const *mstyle, - Sheet *sheet, GnmCellPos const *pos, - gboolean *showed_dialog); - -#endif /* GNUMERIC_VALIDATION_H */ diff --git a/lib/goffice/split/value.c b/lib/goffice/split/value.c deleted file mode 100644 index 4421241d08..0000000000 --- a/lib/goffice/split/value.c +++ /dev/null @@ -1,1829 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * value.c: Utilies for handling, creating, removing values. - * - * Authors: - * Miguel de Icaza (miguel@gnu.org). - * Michael Meeks (mmeeks@gnu.org) - * Jody Goldberg (jgolderg@home.com) - */ - -#include -#include -#include "gnumeric.h" -#include "value.h" - -//#include "parse-util.h" -#include "style.h" -#include "format.h" -#include "str.h" -#include "position.h" -#include "mathfunc.h" -#include "gutils.h" -//#include "workbook.h" -#include "split.h" - -#include -#include -#include -#include -#include -//#include -//#include -#include - -#ifndef USE_VALUE_POOLS -#define USE_VALUE_POOLS 1 -#endif - -#if USE_VALUE_POOLS -#define CHUNK_ALLOC(T,p) ((T*)gnm_mem_chunk_alloc (p)) -#define CHUNK_FREE(p,v) gnm_mem_chunk_free ((p), (v)) -#else -#define CHUNK_ALLOC(T,c) g_new (T,1) -#define CHUNK_FREE(p,v) g_free ((v)) -#endif - - -static struct { - char const *C_name; - char const *locale_name; - GnmString *locale_name_str; -} standard_errors[] = { - { N_("#NULL!"), NULL, NULL }, - { N_("#DIV/0!"), NULL, NULL }, - { N_("#VALUE!"), NULL, NULL }, - { N_("#REF!"), NULL, NULL }, - { N_("#NAME?"), NULL, NULL }, - { N_("#NUM!"), NULL, NULL }, - { N_("#N/A"), NULL, NULL }, - { N_("#RECALC!"), NULL, NULL }, - { N_("#UNKNOWN!"), NULL, NULL } -}; - - -GnmValue * -value_new_empty (void) -{ - /* This is a constant. No need to allocate any memory. */ - static GnmValueAny v = { VALUE_EMPTY, NULL }; - return (GnmValue *)&v; -} - -/* Memory pool for ints and bools. */ -static GnmMemChunk *value_int_pool; -GnmValue * -value_new_bool (gboolean b) -{ - GnmValueBool *v = CHUNK_ALLOC (GnmValueBool, value_int_pool); - *((GnmValueType *)&(v->type)) = VALUE_BOOLEAN; - v->fmt = NULL; - v->val = b; - return (GnmValue *)v; -} - -GnmValue * -value_new_int (int i) -{ - GnmValueInt *v = CHUNK_ALLOC (GnmValueInt, value_int_pool); - *((GnmValueType *)&(v->type)) = VALUE_INTEGER; - v->fmt = NULL; - v->val = i; - return (GnmValue *)v; -} - -static GnmMemChunk *value_float_pool; -GnmValue * -value_new_float (gnm_float f) -{ - if (finitegnum (f)) { - GnmValueFloat *v = CHUNK_ALLOC (GnmValueFloat, value_float_pool); - *((GnmValueType *)&(v->type)) = VALUE_FLOAT; - v->fmt = NULL; - v->val = f; - return (GnmValue *)v; - } else { - /* FIXME: bogus ep sent here. What to do? */ - return value_new_error_NUM (NULL); - } -} - -/* Memory pool for error values. */ -static GnmMemChunk *value_error_pool; -GnmValue * -value_new_error (GnmEvalPos const *ep, char const *mesg) -{ - GnmValueErr *v = CHUNK_ALLOC (GnmValueErr, value_error_pool); - *((GnmValueType *)&(v->type)) = VALUE_ERROR; - v->fmt = NULL; - v->mesg = gnm_string_get (mesg); - return (GnmValue *)v; -} - -GnmValue * -value_new_error_str (GnmEvalPos const *ep, GnmString *mesg) -{ - GnmValueErr *v = CHUNK_ALLOC (GnmValueErr, value_error_pool); - *((GnmValueType *)&(v->type)) = VALUE_ERROR; - v->fmt = NULL; - v->mesg = gnm_string_ref (mesg); - return (GnmValue *)v; -} - -GnmValue * -value_new_error_std (GnmEvalPos const *pos, GnmStdError err) -{ - size_t i = (size_t)err; - g_return_val_if_fail (i < G_N_ELEMENTS (standard_errors), NULL); - - return value_new_error_str (pos, standard_errors[i].locale_name_str); -} - - -GnmValue * -value_new_error_NULL (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_NULL].locale_name_str); -} - -GnmValue * -value_new_error_DIV0 (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_DIV0].locale_name_str); -} - -GnmValue * -value_new_error_VALUE (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_VALUE].locale_name_str); -} - -GnmValue * -value_new_error_REF (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_REF].locale_name_str); -} - -GnmValue * -value_new_error_NAME (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_NAME].locale_name_str); -} - -GnmValue * -value_new_error_NUM (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_NUM].locale_name_str); -} - -GnmValue * -value_new_error_NA (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_NA].locale_name_str); -} - -GnmValue * -value_new_error_RECALC (GnmEvalPos const *pos) -{ - return value_new_error_str (pos, standard_errors[GNM_ERROR_RECALC].locale_name_str); -} - -char const * -value_error_name (GnmStdError err, gboolean translated) -{ - size_t i = (size_t)err; - g_return_val_if_fail (i < G_N_ELEMENTS (standard_errors), NULL); - - if (translated) - return standard_errors[i].locale_name; - else - return standard_errors[i].C_name; -} - -/** - * value_error_set_pos : - * @err : - * @pos : - * - * Change the position of a ValueError. - */ -GnmValue * -value_error_set_pos (GnmValueErr *err, GnmEvalPos const *pos) -{ - g_return_val_if_fail (err != NULL, NULL); - g_return_val_if_fail (err->type == VALUE_ERROR, NULL); - - err->src = *pos; - return (GnmValue *)err; -} - -GnmStdError -value_error_classify (GnmValue const *v) -{ - size_t i; - - g_return_val_if_fail (v != NULL, GNM_ERROR_UNKNOWN); - - if (v->type != VALUE_ERROR) - return GNM_ERROR_UNKNOWN; - - for (i = 0; i < G_N_ELEMENTS (standard_errors); i++) - if (standard_errors[i].locale_name_str == v->v_err.mesg) - return (GnmStdError)i; - - return GNM_ERROR_UNKNOWN; -} - - -static GnmMemChunk *value_string_pool; - -/* NOTE : absorbs the reference */ -GnmValue * -value_new_string_str (GnmString *str) -{ - GnmValueStr *v = CHUNK_ALLOC (GnmValueStr, value_string_pool); - *((GnmValueType *)&(v->type)) = VALUE_STRING; - v->fmt = NULL; - v->val = str; - return (GnmValue *)v; -} - -GnmValue * -value_new_string (char const *str) -{ - return value_new_string_str (gnm_string_get (str)); -} - -GnmValue * -value_new_string_nocopy (char *str) -{ - return value_new_string_str (gnm_string_get_nocopy (str)); -} - -static GnmMemChunk *value_range_pool; -GnmValue * -value_new_cellrange_unsafe (GnmCellRef const *a, GnmCellRef const *b) -{ - GnmValueRange *v = CHUNK_ALLOC (GnmValueRange, value_range_pool); - *((GnmValueType *)&(v->type)) = VALUE_CELLRANGE; - v->fmt = NULL; - v->cell.a = *a; - v->cell.b = *b; - return (GnmValue *)v; -} - -/** - * value_new_cellrange : Create a new range reference. - * - * Attempt to do a sanity check for inverted ranges. - * NOTE : This is no longer necessary and will be removed. - * mixed mode references create the possibility of inversion. - * users of these values need to use the utility routines to - * evaluate the ranges in their context and normalize then. - */ -GnmValue * -value_new_cellrange (GnmCellRef const *a, GnmCellRef const *b, - int eval_col, int eval_row) -{ - GnmValueRange *v = CHUNK_ALLOC (GnmValueRange, value_range_pool); - int tmp; - - *((GnmValueType *)&(v->type)) = VALUE_CELLRANGE; - v->fmt = NULL; - v->cell.a = *a; - v->cell.b = *b; - - /* Sanity checking to avoid inverted ranges */ - tmp = a->col; - if (a->col_relative != b->col_relative) { - /* Make a tmp copy of a in the same mode as b */ - if (a->col_relative) - tmp += eval_col; - else - tmp -= eval_col; - } - if (tmp > b->col) { - v->cell.a.col = b->col; - v->cell.a.col_relative = b->col_relative; - v->cell.b.col = a->col; - v->cell.b.col_relative = a->col_relative; - } - - tmp = a->row; - if (a->row_relative != b->row_relative) { - /* Make a tmp copy of a in the same mode as b */ - if (a->row_relative) - tmp += eval_row; - else - tmp -= eval_row; - } - if (tmp > b->row) { - v->cell.a.row = b->row; - v->cell.a.row_relative = b->row_relative; - v->cell.b.row = a->row; - v->cell.b.row_relative = a->row_relative; - } - - return (GnmValue *)v; -} - -GnmValue * -value_new_cellrange_r (Sheet *sheet, GnmRange const *r) -{ - GnmValueRange *v = CHUNK_ALLOC (GnmValueRange, value_range_pool); - GnmCellRef *a, *b; - - *((GnmValueType *)&(v->type)) = VALUE_CELLRANGE; - v->fmt = NULL; - a = &v->cell.a; - b = &v->cell.b; - - a->sheet = sheet; - b->sheet = sheet; - a->col = r->start.col; - a->row = r->start.row; - b->col = r->end.col; - b->row = r->end.row; - a->col_relative = b->col_relative = FALSE; - a->row_relative = b->row_relative = FALSE; - - return (GnmValue *)v; -} - -static GnmMemChunk *value_array_pool; -GnmValue * -value_new_array_non_init (guint cols, guint rows) -{ - GnmValueArray *v = CHUNK_ALLOC (GnmValueArray, value_array_pool); - *((GnmValueType *)&(v->type)) = VALUE_ARRAY; - v->fmt = NULL; - v->x = cols; - v->y = rows; - v->vals = g_new (GnmValue **, cols); - return (GnmValue *)v; -} - -GnmValue * -value_new_array (guint cols, guint rows) -{ - guint x, y; - GnmValueArray *v = (GnmValueArray *)value_new_array_non_init (cols, rows); - - for (x = 0; x < cols; x++) { - v->vals[x] = g_new (GnmValue *, rows); - for (y = 0; y < rows; y++) - v->vals[x][y] = value_new_int (0); - } - return (GnmValue *)v; -} - -GnmValue * -value_new_array_empty (guint cols, guint rows) -{ - guint x, y; - GnmValueArray *v = (GnmValueArray *)value_new_array_non_init (cols, rows); - - for (x = 0; x < cols; x++) { - v->vals[x] = g_new (GnmValue *, rows); - for (y = 0; y < rows; y++) - v->vals[x][y] = NULL; - } - return (GnmValue *)v; -} - -GnmValue * -value_new_from_string (GnmValueType t, char const *str, GnmFormat *sf, - gboolean translated) -{ - GnmValue *res = NULL; - switch (t) { - case VALUE_EMPTY: - res = value_new_empty (); - break; - - case VALUE_BOOLEAN: - if (translated) { - /* FIXME: ascii??? */ - if (0 == g_ascii_strcasecmp (str, format_boolean (TRUE))) - res = value_new_bool (TRUE); - else if (0 == g_ascii_strcasecmp (str, format_boolean (FALSE))) - res = value_new_bool (FALSE); - } else { - if (0 == g_ascii_strcasecmp (str, "TRUE")) - res = value_new_bool (TRUE); - else if (0 == g_ascii_strcasecmp (str, "FALSE")) - res = value_new_bool (FALSE); - } - break; - - case VALUE_INTEGER: { - char *end; - long l; - - errno = 0; - l = strtol (str, &end, 10); - if (str != end && *end == '\0' && errno != ERANGE) - res = value_new_int ((int)l); - break; - } - - case VALUE_FLOAT: { - char *end; - gnm_float d; - - errno = 0; - d = strtognum (str, &end); - if (str != end && *end == '\0' && errno != ERANGE) - res = value_new_float (d); - break; - } - - case VALUE_ERROR: - /* - * Tricky. We are currently storing errors in translated - * format, so we might have to undo that. - */ - if (!translated) { - size_t i; - for (i = 0; i < G_N_ELEMENTS (standard_errors); i++) - if (strcmp (standard_errors[i].C_name, str) == 0) { - res = value_new_error_std (NULL, (GnmStdError)i); - break; - } - } - if (!res) - res = value_new_error (NULL, str); - break; - - case VALUE_STRING: - res = value_new_string (str); - break; - - /* Should not happen. */ - case VALUE_ARRAY: - case VALUE_CELLRANGE: - default: - g_warning ("value_new_from_string problem."); - return NULL; - } - - if (res) - value_set_fmt (res, sf); - return res; -} - -void -value_release (GnmValue *value) -{ - g_return_if_fail (value != NULL); - - if (VALUE_FMT (value) != NULL) - style_format_unref (VALUE_FMT (value)); - - switch (value->type) { - case VALUE_EMPTY: - /* We did not allocate anything, there is nothing to free */ - return; - - case VALUE_BOOLEAN: - case VALUE_INTEGER: - CHUNK_FREE (value_int_pool, value); - return; - - case VALUE_FLOAT: - CHUNK_FREE (value_float_pool, value); - return; - - case VALUE_ERROR: - /* Do not release VALUE_TERMINATE, it is a magic number */ - if (value == VALUE_TERMINATE) { - g_warning ("Someone freed VALUE_TERMINATE -- shame on them."); - return; - } - - gnm_string_unref (value->v_err.mesg); - CHUNK_FREE (value_error_pool, value); - return; - - case VALUE_STRING: - gnm_string_unref (value->v_str.val); - CHUNK_FREE (value_string_pool, value); - return; - - case VALUE_ARRAY: { - GnmValueArray *v = (GnmValueArray *)value; - int x, y; - - for (x = 0; x < v->x; x++) { - for (y = 0; y < v->y; y++) { - if (v->vals[x][y]) - value_release (v->vals[x][y]); - } - g_free (v->vals[x]); - } - - g_free (v->vals); - CHUNK_FREE (value_array_pool, value); - return; - } - - case VALUE_CELLRANGE: - CHUNK_FREE (value_range_pool, value); - return; - - default: - /* - * If we don't recognize the type this is probably garbage. - * Do not free it to avoid heap corruption - */ - g_warning ("value_release problem."); - return; - } - g_assert_not_reached (); -} - -/** - * value_dup : - * @src : #GnmValue - * - * Returns a copy of @src. @src == NULL will return NULL - **/ -GnmValue * -value_dup (GnmValue const *src) -{ - GnmValue *res; - - if (src == NULL) - return NULL; - - switch (src->type){ - case VALUE_EMPTY: - res = value_new_empty (); - break; - - case VALUE_BOOLEAN: - res = value_new_bool (src->v_bool.val); - break; - - case VALUE_INTEGER: - res = value_new_int (src->v_int.val); - break; - - case VALUE_FLOAT: - res = value_new_float (src->v_float.val); - break; - - case VALUE_ERROR: - res = value_new_error_str (&src->v_err.src, - src->v_err.mesg); - break; - - case VALUE_STRING: - gnm_string_ref (src->v_str.val); - res = value_new_string_str (src->v_str.val); - break; - - case VALUE_CELLRANGE: - res = value_new_cellrange_unsafe (&src->v_range.cell.a, - &src->v_range.cell.b); - break; - - case VALUE_ARRAY: { - int x, y; - GnmValueArray *array = (GnmValueArray *)value_new_array_non_init ( - src->v_array.x, src->v_array.y); - - for (x = 0; x < array->x; x++) { - array->vals[x] = g_new (GnmValue *, array->y); - for (y = 0; y < array->y; y++) - array->vals[x][y] = value_dup (src->v_array.vals[x][y]); - } - res = (GnmValue *)array; - break; - } - - default: - g_warning ("value_dup problem."); - res = value_new_empty (); - } - value_set_fmt (res, VALUE_FMT (src)); - return res; -} - -/** - * value_cmp : - * @ptr_a : - * @ptr_b : - * - * qsort style comparison function. - **/ -int -value_cmp (void const *ptr_a, void const *ptr_b) -{ - GnmValue const *a = *(GnmValue const **)ptr_a; - GnmValue const *b = *(GnmValue const **)ptr_b; - switch (value_compare (a, b, TRUE)) { - case IS_EQUAL : return 0; - case IS_LESS : return -1; - case IS_GREATER : return 1; - default : - break; - }; - return a->type - b->type; -} - -int -value_cmp_reverse (void const *ptr_a, void const *ptr_b) -{ - GnmValue const *a = *(GnmValue const **)ptr_a; - GnmValue const *b = *(GnmValue const **)ptr_b; - switch (value_compare (a, b, TRUE)) { - case IS_EQUAL : return 0; - case IS_LESS : return 1; - case IS_GREATER : return -1; - default : - break; - }; - return b->type - a->type; -} - -gint -value_equal (GnmValue const *a, GnmValue const *b) -{ - if (a->type != b->type) - return FALSE; - - switch (a->type) { - case VALUE_BOOLEAN: - return a->v_bool.val == b->v_bool.val; - - case VALUE_STRING: - return a->v_str.val == b->v_str.val; - - case VALUE_ERROR: - return a->v_err.mesg == b->v_err.mesg; - - case VALUE_INTEGER: - return a->v_int.val == b->v_int.val; - - case VALUE_FLOAT: - return a->v_float.val == b->v_float.val; - - case VALUE_EMPTY: - return TRUE; - - /* - case VALUE_CELLRANGE: - return cellref_equal (&a->v_range.cell.a, &b->v_range.cell.a) && - cellref_equal (&a->v_range.cell.b, &b->v_range.cell.b); - */ - - case VALUE_ARRAY: - if (a->v_array.x == b->v_array.x && a->v_array.y == b->v_array.y) { - int x, y; - - for (y = 0; y < a->v_array.y; y++) - for (x = 0; x < a->v_array.x; x++) - if (!value_equal (a->v_array.vals[x][y], - b->v_array.vals[x][y])) - return FALSE; - return TRUE; - } else - return FALSE; - -#ifndef DEBUG_SWITCH_ENUM - default: - g_assert_not_reached (); - return FALSE; -#endif - } -} - -guint -value_hash (GnmValue const *v) -{ - switch (v->type) { - case VALUE_BOOLEAN: - return v->v_bool.val ? 0x555aaaa : 0xaaa5555; - - case VALUE_STRING: - return g_str_hash (v->v_str.val->str); - - case VALUE_ERROR: - return g_str_hash (v->v_err.mesg->str); - - case VALUE_INTEGER: - return (guint)(v->v_int.val); - - case VALUE_FLOAT: { - int expt; - gnm_float mant = frexpgnum (gnumabs (v->v_float.val), &expt); - guint h = ((guint)(0x80000000u * mant)) ^ expt; - if (v->v_float.val >= 0) - h ^= 0x55555555; - return h; - } - - case VALUE_EMPTY: - return 42; - - //case VALUE_CELLRANGE: - /* FIXME: take sheet into account? */ - /* - return (cellref_hash (&v->v_range.cell.a) * 3) ^ - cellref_hash (&v->v_range.cell.b); - */ - //return 42; - - case VALUE_ARRAY: { - int i; - guint h = (v->v_array.x * 257) ^ (v->v_array.y + 42); - - /* For speed, just walk the diagonal. */ - for (i = 0; i < v->v_array.x && i < v->v_array.y; i++) { - h *= 5; - if (v->v_array.vals[i][i]) - h ^= value_hash (v->v_array.vals[i][i]); - } - return h; - } - -#ifndef DEBUG_SWITCH_ENUM - default: - g_assert_not_reached (); - return 0; -#endif - } -} - - -gboolean -value_get_as_bool (GnmValue const *v, gboolean *err) -{ - *err = FALSE; - - if (v == NULL) - return FALSE; - - switch (v->type) { - case VALUE_EMPTY: - return FALSE; - - case VALUE_BOOLEAN: - return v->v_bool.val; - - case VALUE_STRING: - return v->v_str.val->str[0] != '\0'; - - case VALUE_INTEGER: - return v->v_int.val != 0; - - case VALUE_FLOAT: - return v->v_float.val != 0.0; - - default: - g_warning ("Unhandled value in value_get_boolean."); - - case VALUE_CELLRANGE: - case VALUE_ARRAY: - case VALUE_ERROR: - *err = TRUE; - } - return FALSE; -} - -/* - * use only if you are sure the value is ok - */ -gboolean -value_get_as_checked_bool (GnmValue const *v) -{ - gboolean result, err; - - result = value_get_as_bool (v, &err); - - g_return_val_if_fail (!err, FALSE); - - return result; -} - -void -value_get_as_gstring (GnmValue const *v, GString *target, - GnmExprConventions const *conv) -{ - if (v == NULL) - return; - - switch (v->type){ - case VALUE_EMPTY: - return; - - case VALUE_ERROR: { - GnmStdError e = value_error_classify (v); - if (e == GNM_ERROR_UNKNOWN) { - g_string_append_c (target, '#'); - gnm_strescape (target, v->v_err.mesg->str); - } else - g_string_append (target, value_error_name (e, conv->output_translated)); - return; - } - - case VALUE_BOOLEAN: { - gboolean b = v->v_bool.val; - g_string_append (target, - conv->output_translated - ? format_boolean (b) - : (b ? "TRUE" : "FALSE")); - return; - } - - case VALUE_STRING: - g_string_append (target, v->v_str.val->str); - return; - - case VALUE_INTEGER: - g_string_append_printf (target, "%d", v->v_int.val); - return; - - case VALUE_FLOAT: - g_string_append_printf (target, "%.*" GNUM_FORMAT_g, GNUM_DIG, - v->v_float.val); - return; - - case VALUE_ARRAY: { - char const *row_sep, *col_sep; - char locale_arg_sep[2], locale_col_sep[2]; - int x, y; - - if (conv->output_argument_sep) - row_sep = conv->output_argument_sep; - else { - locale_arg_sep[0] = format_get_arg_sep (); - locale_arg_sep[1] = 0; - row_sep = locale_arg_sep; - } - - if (conv->output_array_col_sep) - col_sep = conv->output_array_col_sep; - else { - locale_col_sep[0] = format_get_col_sep (); - locale_col_sep[1] = 0; - col_sep = locale_col_sep; - } - - g_string_append_c (target, '{'); - for (y = 0; y < v->v_array.y; y++){ - if (y) - g_string_append (target, col_sep); - - for (x = 0; x < v->v_array.x; x++){ - GnmValue const *val = v->v_array.vals[x][y]; - - if (x) - g_string_append (target, row_sep); - - /* quote strings */ - if (val->type == VALUE_STRING) - gnm_strescape (target, val->v_str.val->str); - else - value_get_as_gstring (val, target, conv); - } - } - g_string_append_c (target, '}'); - return; - } - -#if 0 - case VALUE_CELLRANGE: { - char *tmp; - /* Note: this makes only sense for absolute references or - * references relative to A1 - */ - GnmRange range; - range_init_value (&range, v); - tmp = global_range_name (v->v_range.cell.a.sheet, &range); - g_string_append (target, tmp); - g_free (tmp); - return; - } -#endif // 0 - - default: - break; - } - - g_assert_not_reached (); -} - - -/** - * value_get_as_string : - * @v : - * - * simplistic value rendering - * - * Returns a string that must be freed. - */ -char * -value_get_as_string (GnmValue const *v) -{ - GString *res = g_string_sized_new (10); - value_get_as_gstring (v, res, gnm_expr_conventions_default); - return g_string_free (res, FALSE); -} - -/* - * Result will stay valid until (a) the value is disposed of, or (b) two - * further calls to this function are made. - */ -char const * -value_peek_string (GnmValue const *v) -{ - g_return_val_if_fail (v, ""); - - if (v->type == VALUE_STRING) - return v->v_str.val->str; - else if (v->type == VALUE_ERROR) - return v->v_err.mesg->str; - else { - static char *cache[2] = { NULL, NULL }; - static int next = 0; - char const *s; - - g_free (cache[next]); - s = cache[next] = value_get_as_string (v); - next = (next + 1) % G_N_ELEMENTS (cache); - return s; - } -} - -/* - * FIXME FIXME FIXME : Support errors - */ -int -value_get_as_int (GnmValue const *v) -{ - if (v == NULL) - return 0; - switch (v->type) { - case VALUE_EMPTY: - return 0; - - case VALUE_STRING: - return atoi (v->v_str.val->str); - - case VALUE_CELLRANGE: - g_warning ("Getting range as a int: what to do?"); - return 0; - - case VALUE_INTEGER: - return v->v_int.val; - - case VALUE_ARRAY: - return 0; - - case VALUE_FLOAT: - return (int) gnumeric_fake_trunc (v->v_float.val); - - case VALUE_BOOLEAN: - return v->v_bool.val ? 1 : 0; - - case VALUE_ERROR: - return 0; - - default: - g_warning ("value_get_as_int unknown type."); - return 0; - } - return 0; -} - -/* - * FIXME FIXME FIXME : Support errors - */ -gnm_float -value_get_as_float (GnmValue const *v) -{ - if (v == NULL) - return 0.; - - switch (v->type) { - case VALUE_EMPTY: - return 0.; - - case VALUE_STRING: - return strtognum (v->v_str.val->str, NULL); - - case VALUE_CELLRANGE: - g_warning ("Getting range as a double: what to do?"); - return 0.0; - - case VALUE_INTEGER: - return (gnm_float) v->v_int.val; - - case VALUE_ARRAY: - return 0.0; - - case VALUE_FLOAT: - return (gnm_float) v->v_float.val; - - case VALUE_BOOLEAN: - return v->v_bool.val ? 1. : 0.; - - case VALUE_ERROR: - return 0.; - - default: - g_warning ("value_get_as_float type error."); - break; - } - return 0.0; -} - -GnmRangeRef const * -value_get_rangeref (GnmValue const *v) -{ - g_return_val_if_fail (v->type == VALUE_CELLRANGE, NULL); - return &v->v_range.cell; -} - -#if 0 -// -- jsled -/** - * value_coerce_to_number : - * @v : - * @valid : - * - * If the value can be used as a number return that number - * otherwise free it at return an appropriate error - **/ -GnmValue * -value_coerce_to_number (GnmValue *v, gboolean *valid, GnmEvalPos const *ep) -{ - g_return_val_if_fail (v != NULL, NULL); - - *valid = FALSE; - if (v->type == VALUE_STRING) { - //GnmValue *tmp = format_match_number (value_peek_string (v), NULL, - //workbook_date_conv (ep->sheet->workbook)); - GnmValue *tmp = format_match_number (value_peek_string (v), NULL, - workbook_date_conv (NULL)); - value_release (v); - if (tmp == NULL) - return value_new_error_VALUE (ep); - v = tmp; - } else if (v->type == VALUE_ERROR) - return v; - - if (!VALUE_IS_NUMBER (v)) { - value_release (v); - return value_new_error_VALUE (ep); - } - - *valid = TRUE; - return v; -} -#endif // 0 - -void -value_array_set (GnmValue *array, int col, int row, GnmValue *v) -{ - g_return_if_fail (v); - g_return_if_fail (array->type == VALUE_ARRAY); - g_return_if_fail (col>=0); - g_return_if_fail (row>=0); - g_return_if_fail (array->v_array.y > row); - g_return_if_fail (array->v_array.x > col); - - if (array->v_array.vals[col][row] != NULL) - value_release (array->v_array.vals[col][row]); - array->v_array.vals[col][row] = v; -} - -void -value_array_resize (GnmValue *v, int width, int height) -{ - int x, y, xcpy, ycpy; - GnmValue *newval; - GnmValue ***tmp; - - g_warning ("Totally untested"); - g_return_if_fail (v); - g_return_if_fail (v->type == VALUE_ARRAY); - - newval = value_new_array (width, height); - - xcpy = MIN (width, v->v_array.x); - ycpy = MIN (height, v->v_array.y); - - for (x = 0; x < xcpy; x++) - for (y = 0; y < ycpy; y++) { - value_array_set (newval, x, y, v->v_array.vals[x][y]); - v->v_array.vals[x][y] = NULL; - } - - tmp = v->v_array.vals; - v->v_array.vals = newval->v_array.vals; - newval->v_array.vals = tmp; - newval->v_array.x = v->v_array.x; - newval->v_array.y = v->v_array.y; - v->v_array.x = width; - v->v_array.y = height; - - value_release (newval); -} - -static GnmValDiff -compare_bool_bool (GnmValue const *va, GnmValue const *vb) -{ - gboolean err; /* Ignored */ - gboolean const a = value_get_as_bool (va, &err); - gboolean const b = value_get_as_bool (vb, &err); - if (a) - return b ? IS_EQUAL : IS_GREATER; - return b ? IS_LESS : IS_EQUAL; -} - -static GnmValDiff -compare_int_int (GnmValue const *va, GnmValue const *vb) -{ - int const a = value_get_as_int (va); - int const b = value_get_as_int (vb); - if (a == b) - return IS_EQUAL; - else if (a < b) - return IS_LESS; - else - return IS_GREATER; -} - -static GnmValDiff -compare_float_float (GnmValue const *va, GnmValue const *vb) -{ - gnm_float const a = value_get_as_float (va); - gnm_float const b = value_get_as_float (vb); - if (a == b) - return IS_EQUAL; - else if (a < b) - return IS_LESS; - else - return IS_GREATER; -} - -/** - * value_diff : - * - * @a : value a - * @b : value b - * - * IGNORES format. - * - * Returns a non-negative difference between 2 values - */ -gnm_float -value_diff (GnmValue const *a, GnmValue const *b) -{ - GnmValueType ta, tb; - - /* Handle trivial and double NULL case */ - if (a == b) - return 0.; - - ta = VALUE_IS_EMPTY (a) ? VALUE_EMPTY : a->type; - tb = VALUE_IS_EMPTY (b) ? VALUE_EMPTY : b->type; - - /* string > empty */ - if (ta == VALUE_STRING) { - switch (tb) { - /* Strings are > (empty, or number) */ - case VALUE_EMPTY : - if (*a->v_str.val->str == '\0') - return 0.; - return DBL_MAX; - - /* If both are strings compare as string */ - case VALUE_STRING : - { - gint t = g_utf8_collate (a->v_str.val->str, b->v_str.val->str); - if (t == 0) - return 0.; - } - case VALUE_INTEGER : case VALUE_FLOAT : case VALUE_BOOLEAN : - default : - return DBL_MAX; - } - - } else if (tb == VALUE_STRING) { - switch (ta) { - /* (empty, or number) < String */ - case VALUE_EMPTY : - if (*b->v_str.val->str == '\0') - return 0.; - - case VALUE_INTEGER : case VALUE_FLOAT : case VALUE_BOOLEAN : - default : - return DBL_MAX; - } - } - - /* Booleans > all numbers (Why did excel do this ?? ) */ - if (ta == VALUE_BOOLEAN && (tb == VALUE_INTEGER || tb == VALUE_FLOAT)) - return DBL_MAX; - if (tb == VALUE_BOOLEAN && (ta == VALUE_INTEGER || ta == VALUE_FLOAT)) - return DBL_MAX; - - switch ((ta > tb) ? ta : tb) { - case VALUE_EMPTY: /* Empty Empty compare */ - return 0.; - - case VALUE_BOOLEAN: - return (compare_bool_bool (a, b) == IS_EQUAL) ? 0. : DBL_MAX; - - case VALUE_INTEGER: { - int const ia = value_get_as_int (a); - int const ib = value_get_as_int (b); - return abs (ia - ib); - } - - case VALUE_FLOAT: { - gnm_float const da = value_get_as_float (a); - gnm_float const db = value_get_as_float (b); - return gnumabs (da - db); - } - default: - return TYPE_MISMATCH; - } -} - -/** - * value_compare : - * - * @a : value a - * @b : value b - * @case_sensitive : are string comparisons case sensitive. - * - * IGNORES format. - */ -GnmValDiff -value_compare (GnmValue const *a, GnmValue const *b, gboolean case_sensitive) -{ - GnmValueType ta, tb; - - /* Handle trivial and double NULL case */ - if (a == b) - return IS_EQUAL; - - ta = VALUE_IS_EMPTY (a) ? VALUE_EMPTY : a->type; - tb = VALUE_IS_EMPTY (b) ? VALUE_EMPTY : b->type; - - /* string > empty */ - if (ta == VALUE_STRING) { - switch (tb) { - /* Strings are > (empty, or number) */ - case VALUE_EMPTY : - if (*a->v_str.val->str == '\0') - return IS_EQUAL; - - case VALUE_INTEGER : case VALUE_FLOAT : - return IS_GREATER; - - /* Strings are < FALSE ?? */ - case VALUE_BOOLEAN : - return IS_LESS; - - /* If both are strings compare as string */ - case VALUE_STRING : - { - gint t; - - if (case_sensitive) { - t = g_utf8_collate (a->v_str.val->str, b->v_str.val->str); - } else { - char *str_a = g_utf8_casefold (a->v_str.val->str, -1); - char *str_b = g_utf8_casefold (b->v_str.val->str, -1); - - t = g_utf8_collate (str_a, str_b); - g_free (str_a); - g_free (str_b); - } - - if (t == 0) - return IS_EQUAL; - else if (t > 0) - return IS_GREATER; - else - return IS_LESS; - } - default : - return TYPE_MISMATCH; - } - } else if (tb == VALUE_STRING) { - switch (ta) { - /* (empty, or number) < String */ - case VALUE_EMPTY : - if (*b->v_str.val->str == '\0') - return IS_EQUAL; - - case VALUE_INTEGER : case VALUE_FLOAT : - return IS_LESS; - - /* Strings are < FALSE ?? */ - case VALUE_BOOLEAN : - return IS_GREATER; - - default : - return TYPE_MISMATCH; - } - } - - /* Booleans > all numbers (Why did excel do this ?? ) */ - if (ta == VALUE_BOOLEAN && (tb == VALUE_INTEGER || tb == VALUE_FLOAT)) - return IS_GREATER; - if (tb == VALUE_BOOLEAN && (ta == VALUE_INTEGER || ta == VALUE_FLOAT)) - return IS_LESS; - - switch ((ta > tb) ? ta : tb) { - case VALUE_EMPTY: /* Empty Empty compare */ - return IS_EQUAL; - - case VALUE_BOOLEAN: - return compare_bool_bool (a, b); - - case VALUE_INTEGER: - return compare_int_int (a, b); - - case VALUE_FLOAT: - return compare_float_float (a, b); - default: - return TYPE_MISMATCH; - } -} - -void -value_set_fmt (GnmValue *v, GnmFormat const *fmt) -{ - if (fmt != NULL) - style_format_ref ((GnmFormat *)fmt); - if (VALUE_FMT (v) != NULL) - style_format_unref (VALUE_FMT (v)); - VALUE_FMT (v) = (GnmFormat *)fmt; -} - -/****************************************************************************/ - -#if 0 -static gboolean -criteria_test_equal (GnmValue const *x, GnmValue const *y) -{ - if (x == NULL || y == NULL) - return FALSE; - if (VALUE_IS_NUMBER (x) && VALUE_IS_NUMBER (y)) - return (value_get_as_float (x) == value_get_as_float (y)); - else - return (x->type == VALUE_STRING && - y->type == VALUE_STRING && - g_ascii_strcasecmp (x->v_str.val->str, y->v_str.val->str) == 0); -} - -static gboolean -criteria_test_unequal (GnmValue const *x, GnmValue const *y) -{ - if (x == NULL) - return y != NULL; - if (y == NULL) - return TRUE; - if (VALUE_IS_NUMBER (x) && VALUE_IS_NUMBER (y)) - return (value_get_as_float (x) != value_get_as_float (y)); - else - /* Hmm... Is this really right? number vs string, not unequal? */ - return (x->type == VALUE_STRING && - y->type == VALUE_STRING && - g_ascii_strcasecmp (x->v_str.val->str, y->v_str.val->str) != 0); -} - -static gboolean -criteria_test_less (GnmValue const *x, GnmValue const *y) -{ - if (x == NULL || y == NULL) - return FALSE; - if (VALUE_IS_NUMBER (x) && VALUE_IS_NUMBER (y)) - return (value_get_as_float (x) < value_get_as_float (y)); - else - return FALSE; -} - -static gboolean -criteria_test_greater (GnmValue const *x, GnmValue const *y) -{ - if (x == NULL || y == NULL) - return FALSE; - if (VALUE_IS_NUMBER (x) && VALUE_IS_NUMBER (y)) - return (value_get_as_float (x) > value_get_as_float (y)); - else - return FALSE; -} - -static gboolean -criteria_test_less_or_equal (GnmValue const *x, GnmValue const *y) -{ - if (x == NULL || y == NULL) - return FALSE; - if (VALUE_IS_NUMBER (x) && VALUE_IS_NUMBER (y)) - return (value_get_as_float (x) <= value_get_as_float (y)); - else - return FALSE; -} - -static gboolean -criteria_test_greater_or_equal (GnmValue const *x, GnmValue const *y) -{ - if (x == NULL || y == NULL) - return FALSE; - if (VALUE_IS_NUMBER (x) && VALUE_IS_NUMBER (y)) - return (value_get_as_float (x) >= value_get_as_float (y)); - else - return FALSE; -} -#endif // 0 - unused, jsled - -#if 0 ---jsled -/* - * Finds a column index of a field. - */ -int -find_column_of_field (GnmEvalPos const *ep, GnmValue *database, GnmValue *field) -{ - Sheet *sheet; - GnmCell *cell; - gchar *field_name; - int begin_col, end_col, row, n, column; - int offset; - - offset = database->v_range.cell.a.col; - - if (field->type == VALUE_INTEGER) - return value_get_as_int (field) + offset - 1; - - if (field->type != VALUE_STRING) - return -1; - - sheet = eval_sheet (database->v_range.cell.a.sheet, ep->sheet); - field_name = value_get_as_string (field); - column = -1; - - /* find the column that is labeled after `field_name' */ - begin_col = database->v_range.cell.a.col; - end_col = database->v_range.cell.b.col; - row = database->v_range.cell.a.row; - - for (n = begin_col; n <= end_col; n++) { - char const *txt; - gboolean match; - - cell = sheet_cell_get (sheet, n, row); - if (cell == NULL) - continue; - cell_eval (cell); - - txt = cell->value - ? value_peek_string (cell->value) - : ""; - match = (g_ascii_strcasecmp (field_name, txt) == 0); - if (match) { - column = n; - break; - } - } - - g_free (field_name); - return column; -} - -/* - * Frees the allocated memory. - */ -void -free_criterias (GSList *criterias) -{ - GSList *list = criterias; - - while (criterias != NULL) { - GSList *l; - database_criteria_t *criteria = criterias->data; - - for (l = criteria->conditions; l; l = l->next) { - func_criteria_t *cond = l->data; - value_release (cond->x); - g_free (cond); - } - - g_slist_free (criteria->conditions); - g_free (criteria); - criterias = criterias->next; - } - g_slist_free (list); -} - -/** - * parse_criteria : - * @crit_val : #GnmValue - * @fun : #criteria_test_fun_t result - * @test_value : #GnmValue the value to compare against. - * @iter_flags : - * @date_conv : #GnmDateConventions - * - * If @crit_val is a number set @text_val and @fun to test for equality, other - * wise parse it as a string and see if it matches one of the available - * operators. Caller is responsible for freeing @test_value. - **/ -void -parse_criteria (GnmValue *crit_val, criteria_test_fun_t *fun, GnmValue **test_value, - CellIterFlags *iter_flags, GnmDateConventions const *date_conv) -{ - int len; - char const *criteria; - - if (iter_flags) - *iter_flags = CELL_ITER_IGNORE_BLANK; - if (VALUE_IS_NUMBER (crit_val)) { - *fun = criteria_test_equal; - *test_value = value_dup (crit_val); - return; - } - - criteria = value_peek_string (crit_val); - if (strncmp (criteria, "<=", 2) == 0) { - *fun = criteria_test_less_or_equal; - len = 2; - } else if (strncmp (criteria, ">=", 2) == 0) { - *fun = criteria_test_greater_or_equal; - len = 2; - } else if (strncmp (criteria, "<>", 2) == 0) { - *fun = (criteria_test_fun_t) criteria_test_unequal; - len = 2; - if (iter_flags) - *iter_flags = CELL_ITER_ALL; - } else if (*criteria == '<') { - *fun = (criteria_test_fun_t) criteria_test_less; - len = 1; - } else if (*criteria == '=') { - *fun = (criteria_test_fun_t) criteria_test_equal; - len = 1; - } else if (*criteria == '>') { - *fun = (criteria_test_fun_t) criteria_test_greater; - len = 1; - } else { - *fun = (criteria_test_fun_t) criteria_test_equal; - len = 0; - } - - *test_value = format_match (criteria + len, NULL, date_conv); - if (*test_value == NULL) - *test_value = value_new_string (criteria + len); -} - -static GSList * -parse_criteria_range (Sheet *sheet, int b_col, int b_row, int e_col, int e_row, - int *field_ind) -{ - database_criteria_t *new_criteria; - GSList *criterias = NULL; - GSList *conditions; - GnmCell *cell; - func_criteria_t *cond; - GnmDateConventions const *date_conv = workbook_date_conv (sheet->workbook); - - int i, j; - - for (i = b_row; i <= e_row; i++) { - new_criteria = g_new (database_criteria_t, 1); - conditions = NULL; - - for (j = b_col; j <= e_col; j++) { - cell = sheet_cell_get (sheet, j, i); - if (cell != NULL) - cell_eval (cell); - if (cell_is_empty (cell)) - continue; - - cond = g_new (func_criteria_t, 1); - parse_criteria (cell->value, &cond->fun, &cond->x, NULL, date_conv); - cond->column = (field_ind != NULL) ? field_ind[j - b_col] : j - b_col; - conditions = g_slist_append (conditions, cond); - } - - new_criteria->conditions = conditions; - criterias = g_slist_append (criterias, new_criteria); - } - - return criterias; -} - -/* - * Parses the criteria cell range. - */ -GSList * -parse_database_criteria (GnmEvalPos const *ep, GnmValue *database, GnmValue *criteria) -{ - Sheet *sheet; - GnmCell *cell; - int i; - int b_col, b_row, e_col, e_row; - int *field_ind; - - sheet = eval_sheet (criteria->v_range.cell.a.sheet, ep->sheet); - b_col = criteria->v_range.cell.a.col; - b_row = criteria->v_range.cell.a.row; - e_col = criteria->v_range.cell.b.col; - e_row = criteria->v_range.cell.b.row; - - /* FIXME: are we sure that e_col>=b_col? */ - /* Find the index numbers for the columns of criterias */ - field_ind = g_alloca (sizeof (int) * (e_col - b_col + 1)); - for (i = b_col; i <= e_col; i++) { - cell = sheet_cell_get (sheet, i, b_row); - if (cell == NULL) - continue; - cell_eval (cell); - if (cell_is_empty (cell)) - continue; - field_ind[i - b_col] = - find_column_of_field (ep, database, cell->value); - if (field_ind[i - b_col] == -1) - return NULL; - } - - return parse_criteria_range (sheet, b_col, b_row + 1, - e_col, e_row, field_ind); -} - -/* Finds the rows from the given database that match the criteria. - */ -GSList * -find_rows_that_match (Sheet *sheet, int first_col, int first_row, - int last_col, int last_row, - GSList *criterias, gboolean unique_only) -{ - GSList *current, *conditions, *rows; - GnmCell *test_cell; - int row, add_flag; - rows = NULL; - - for (row = first_row; row <= last_row; row++) { - - current = criterias; - add_flag = 1; - for (current = criterias; current != NULL; - current = current->next) { - database_criteria_t *current_criteria; - - add_flag = 1; - current_criteria = current->data; - conditions = current_criteria->conditions; - - while (conditions != NULL) { - func_criteria_t const *cond = conditions->data; - - test_cell = sheet_cell_get (sheet, - first_col + cond->column, row); - if (test_cell != NULL) - cell_eval (test_cell); - if (cell_is_empty (test_cell)) - continue; - - if (!cond->fun (test_cell->value, cond->x)) { - add_flag = 0; - break; - } - conditions = conditions->next; - } - - if (add_flag) - break; - } - if (add_flag) { - gint *p; - - if (unique_only) { - GSList *c; - GnmCell *cell; - gint i, trow; - - for (c = rows; c != NULL; c = c->next) { - trow = *((gint *) c->data); - for (i = first_col; i <= last_col; i++) { - char const *t1, *t2; - test_cell = - sheet_cell_get (sheet, i, trow); - cell = - sheet_cell_get (sheet, i, row); - t1 = cell->value - ? value_peek_string (cell->value) - : ""; - t2 = test_cell->value - ? value_peek_string (test_cell->value) - : ""; - if (strcmp (t1, t2) != 0) - goto row_ok; - } - goto filter_row; -row_ok: - ; - } - } - p = g_new (gint, 1); - *p = row; - rows = g_slist_prepend (rows, (gpointer) p); -filter_row: - ; - } - } - - return g_slist_reverse (rows); -} -#endif // 0 --jsled - -/****************************************************************************/ - -GnmValueErr const value_terminate_err = { VALUE_ERROR, NULL, NULL }; -static GnmValueInt const the_value_zero = { VALUE_INTEGER, NULL, 0 }; -GnmValue const *value_zero = (GnmValue const *)&the_value_zero; - -void -value_init (void) -{ - size_t i; - - for (i = 0; i < G_N_ELEMENTS (standard_errors); i++) { - standard_errors[i].locale_name = _(standard_errors[i].C_name); - standard_errors[i].locale_name_str = - gnm_string_get (standard_errors[i].locale_name); - } - -#if USE_VALUE_POOLS - /* GnmValueInt and GnmValueBool ought to have the same size. */ - value_int_pool = - gnm_mem_chunk_new ("value int/bool pool", - MAX (sizeof (GnmValueInt), sizeof (GnmValueBool)), - 16 * 1024 - 128); - - value_float_pool = - gnm_mem_chunk_new ("value float pool", - sizeof (GnmValueFloat), - 16 * 1024 - 128); - - value_error_pool = - gnm_mem_chunk_new ("value error pool", - sizeof (GnmValueErr), - 16 * 1024 - 128); - - value_string_pool = - gnm_mem_chunk_new ("value string pool", - sizeof (GnmValueStr), - 16 * 1024 - 128); - - value_range_pool = - gnm_mem_chunk_new ("value range pool", - sizeof (GnmValueRange), - 16 * 1024 - 128); - - value_array_pool = - gnm_mem_chunk_new ("value array pool", - sizeof (GnmValueArray), - 16 * 1024 - 128); -#endif -} - -void -value_shutdown (void) -{ - size_t i; - - for (i = 0; i < G_N_ELEMENTS (standard_errors); i++) { - gnm_string_unref (standard_errors[i].locale_name_str); - standard_errors[i].locale_name_str = NULL; - } - -#if USE_VALUE_POOLS - gnm_mem_chunk_destroy (value_int_pool, FALSE); - value_int_pool = NULL; - - gnm_mem_chunk_destroy (value_float_pool, FALSE); - value_float_pool = NULL; - - gnm_mem_chunk_destroy (value_error_pool, FALSE); - value_error_pool = NULL; - - gnm_mem_chunk_destroy (value_string_pool, FALSE); - value_string_pool = NULL; - - gnm_mem_chunk_destroy (value_range_pool, FALSE); - value_range_pool = NULL; - - gnm_mem_chunk_destroy (value_array_pool, FALSE); - value_array_pool = NULL; -#endif -} - -/****************************************************************************/ diff --git a/lib/goffice/split/value.h b/lib/goffice/split/value.h deleted file mode 100644 index 15323d0428..0000000000 --- a/lib/goffice/split/value.h +++ /dev/null @@ -1,206 +0,0 @@ -#ifndef GNUMERIC_VALUE_H -#define GNUMERIC_VALUE_H - -#include -#include "gnumeric.h" -#include "position.h" -#include "numbers.h" - -typedef enum { - /* Use magic values to act as a signature - * DO NOT CHANGE THESE NUMBERS - * As of version 0.57 they are using as keys - * in the xml - */ - VALUE_EMPTY = 10, - VALUE_BOOLEAN = 20, /* Keep bool < int < float */ - VALUE_INTEGER = 30, - VALUE_FLOAT = 40, - VALUE_ERROR = 50, - VALUE_STRING = 60, - VALUE_CELLRANGE = 70, - VALUE_ARRAY = 80 -} GnmValueType; - -typedef struct { - GnmValueType const type; - GnmFormat *fmt; -} GnmValueAny; -struct _GnmValueBool { - GnmValueType const type; - GnmFormat *fmt; - gboolean val; -}; -struct _GnmValueInt { - GnmValueType const type; - GnmFormat *fmt; - int val; -}; -struct _GnmValueFloat { - GnmValueType const type; - GnmFormat *fmt; - gnm_float val; -}; -struct _GnmValueErr { - GnmValueType const type; - GnmFormat *fmt; - GnmString *mesg; - /* Currently unused. Intended to support audit functions */ - GnmEvalPos src; -}; -struct _GnmValueStr { - GnmValueType const type; - GnmFormat *fmt; - GnmString *val; -}; -struct _GnmValueRange { - GnmValueType const type; - GnmFormat *fmt; - GnmRangeRef cell; -}; -struct _GnmValueArray { - GnmValueType const type; - GnmFormat *fmt; - int x, y; - GnmValue ***vals; /* Array [x][y] */ -}; - -/* FIXME */ -union _GnmValue { - GnmValueType const type; - GnmValueAny v_any; - GnmValueBool v_bool; - GnmValueInt v_int; - GnmValueFloat v_float; - GnmValueErr v_err; - GnmValueStr v_str; - GnmValueRange v_range; - GnmValueArray v_array; -}; - -#define VALUE_TYPE(v) ((v)->v_any.type) -#define VALUE_FMT(v) ((v)->v_any.fmt) -#define VALUE_IS_EMPTY(v) (((v) == NULL) || ((v)->type == VALUE_EMPTY)) -#define VALUE_IS_EMPTY_OR_ERROR(v) (VALUE_IS_EMPTY(v) || (v)->type == VALUE_ERROR) -#define VALUE_IS_STRING(v) ((v)->type == VALUE_STRING) -#define VALUE_IS_NUMBER(v) (((v)->type == VALUE_INTEGER) || \ - ((v)->type == VALUE_FLOAT) || \ - ((v)->type == VALUE_BOOLEAN)) - -typedef enum { - IS_EQUAL, - IS_LESS, - IS_GREATER, - TYPE_MISMATCH -} GnmValDiff; - -GnmValue *value_new_empty (void); -GnmValue *value_new_bool (gboolean b); -GnmValue *value_new_int (int i); -GnmValue *value_new_float (gnm_float f); -GnmValue *value_new_error (GnmEvalPos const *pos, char const *mesg); -GnmValue *value_new_error_str (GnmEvalPos const *pos, GnmString *mesg); -GnmValue *value_new_error_std (GnmEvalPos const *pos, GnmStdError err); -GnmValue *value_new_error_NULL (GnmEvalPos const *pos); -GnmValue *value_new_error_DIV0 (GnmEvalPos const *pos); -GnmValue *value_new_error_VALUE (GnmEvalPos const *pos); -GnmValue *value_new_error_REF (GnmEvalPos const *pos); -GnmValue *value_new_error_NAME (GnmEvalPos const *pos); -GnmValue *value_new_error_NUM (GnmEvalPos const *pos); -GnmValue *value_new_error_NA (GnmEvalPos const *pos); -GnmValue *value_new_error_RECALC (GnmEvalPos const *pos); -GnmValue *value_new_string (char const *str); -GnmValue *value_new_string_nocopy (char *str); -GnmValue *value_new_string_str (GnmString *str); -GnmValue *value_new_cellrange_unsafe (GnmCellRef const *a, GnmCellRef const *b); -GnmValue *value_new_cellrange (GnmCellRef const *a, GnmCellRef const *b, - int eval_col, int eval_row); -GnmValue *value_new_cellrange_r (Sheet *sheet, GnmRange const *r); -GnmValue *value_new_array (guint cols, guint rows); -GnmValue *value_new_array_empty (guint cols, guint rows); -GnmValue *value_new_array_non_init (guint cols, guint rows); -GnmValue *value_new_from_string (GnmValueType t, char const *str, - GnmFormat *sf, gboolean translated); - -void value_release (GnmValue *v); -void value_set_fmt (GnmValue *v, GnmFormat const *fmt); -void value_dump (GnmValue const *v); -GnmValue *value_dup (GnmValue const *v); - -gnm_float value_diff (GnmValue const *a, GnmValue const *b); -GnmValDiff value_compare (GnmValue const *a, GnmValue const *b, - gboolean case_sensitive); -int value_cmp (void const *ptr_a, void const *ptr_b); -int value_cmp_reverse (void const *ptr_a, void const *ptr_b); -gint value_equal (GnmValue const *a, GnmValue const *b); -guint value_hash (GnmValue const *v); - -char const *value_peek_string (GnmValue const *v); -char *value_get_as_string (GnmValue const *v); -void value_get_as_gstring (GnmValue const *v, GString *target, - GnmExprConventions const *conv); - -int value_get_as_int (GnmValue const *v); -gnm_float value_get_as_float (GnmValue const *v); -GnmValue *value_coerce_to_number (GnmValue *v, gboolean *valid, - GnmEvalPos const *ep); - -GnmValue *value_error_set_pos (GnmValueErr *err, GnmEvalPos const *pos); -GnmStdError value_error_classify (GnmValue const *v); -char const *value_error_name (GnmStdError err, gboolean translated); - -gboolean value_get_as_bool (GnmValue const *v, gboolean *err); -gboolean value_get_as_checked_bool (GnmValue const *v); -GnmRangeRef const *value_get_rangeref (GnmValue const *v); - -/* Area functions ( works on VALUE_RANGE or VALUE_ARRAY */ -/* The GnmEvalPos provides a Sheet context; this allows - calculation of relative references. 'x','y' give the position */ -typedef GnmValue *(*ValueAreaFunc) (GnmValue const *v, GnmEvalPos const *ep, - int x, int y, gpointer user); -GnmValue *value_area_foreach (GnmValue const *v, GnmEvalPos const *ep, - CellIterFlags flags, - ValueAreaFunc func, gpointer user); -int value_area_get_width (GnmValue const *v, GnmEvalPos const *ep); -int value_area_get_height (GnmValue const *v, GnmEvalPos const *ep); -GnmValue const *value_area_fetch_x_y (GnmValue const *v, int x, int y, - GnmEvalPos const *ep); -GnmValue const *value_area_get_x_y (GnmValue const *v, int x, int y, - GnmEvalPos const *ep); - -/* A zero integer, not to be freed or changed. */ -extern GnmValue const *value_zero; -extern GnmValueErr const value_terminate_err; -#define VALUE_TERMINATE ((GnmValue *)&value_terminate_err) - -void value_array_set (GnmValue *array, int col, int row, GnmValue *v); -void value_array_resize (GnmValue *v, int width, int height); - -/* FIXME: this stuff below ought to go elsewhere. */ -typedef struct { - int row; - GSList *conditions; -} database_criteria_t; -typedef gboolean (*criteria_test_fun_t) (GnmValue const *x, GnmValue const *y); -typedef struct { - criteria_test_fun_t fun; - GnmValue *x; - int column; -} func_criteria_t; -void parse_criteria (GnmValue *criteria, - criteria_test_fun_t *fun, - GnmValue **test_value, - CellIterFlags *iter_flags, - GnmDateConventions const *date_conv); -void free_criterias (GSList *criterias); -GSList *find_rows_that_match (Sheet *sheet, int first_col, - int first_row, int last_col, int last_row, - GSList *criterias, gboolean unique_only); -GSList *parse_database_criteria (GnmEvalPos const *ep, GnmValue *database, GnmValue *criteria); -int find_column_of_field (GnmEvalPos const *ep, GnmValue *database, GnmValue *field); - -/* Protected */ -void value_init (void); -void value_shutdown (void); - -#endif /* GNUMERIC_VALUE_H */ diff --git a/lib/goffice/split/widgets/Makefile.am b/lib/goffice/split/widgets/Makefile.am deleted file mode 100644 index 61ed043da1..0000000000 --- a/lib/goffice/split/widgets/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -noinst_LTLIBRARIES = libgoffice-split-widgets.la - -AM_CFLAGS = $(GLIB_CFLAGS) $(GSF_CFLAGS) $(GNOME_CFLAGS) $(ART_CFLAGS) $(GLADE_CFLAGS) $(PRINT_CFLAGS) - -libgoffice_split_widgets_la_SOURCES = \ - widget-format-selector.h \ - widget-format-selector.c \ - widget-font-selector.h - -include $(srcdir)/../../goffice.mk diff --git a/lib/goffice/split/widgets/widget-font-selector.h b/lib/goffice/split/widgets/widget-font-selector.h deleted file mode 100644 index 3cbe8ffb06..0000000000 --- a/lib/goffice/split/widgets/widget-font-selector.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef GNUMERIC_WIDGET_FONT_SELECTOR_H -#define GNUMERIC_WIDGET_FONT_SELECTOR_H - -#include -#include -///#include -#include - -#define FONT_SELECTOR_TYPE (font_selector_get_type ()) -#define FONT_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), FONT_SELECTOR_TYPE, FontSelector)) -#define IS_FONT_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), FONT_SELECTOR_TYPE)) - -typedef struct _FontSelector FontSelector; - -GType font_selector_get_type (void); -GtkWidget *font_selector_new (void); - -void font_selector_set_value (FontSelector *fs, GnmValue const *v); -void font_selector_set_name (FontSelector *fs, char const *font_name); -void font_selector_set_style (FontSelector *fs, - gboolean is_bold, gboolean is_italic); -void font_selector_set_underline (FontSelector *fs, StyleUnderlineType sut); -void font_selector_set_strike (FontSelector *fs, gboolean strikethrough); -void font_selector_set_color (FontSelector *fs, GnmColor *color); -void font_selector_set_points (FontSelector *fs, double point_size); -void font_selector_editable_enters (FontSelector *fs, GtkWindow *dialog); - -void font_selector_set_from_pango (FontSelector *fs, PangoFontDescription const *desc); -void font_selector_get_pango (FontSelector *fs, PangoFontDescription *desc); - -#endif /* GNUMERIC_WIDGET_FONT_SELECTOR_H */ - diff --git a/lib/goffice/split/widgets/widget-format-selector.c b/lib/goffice/split/widgets/widget-format-selector.c deleted file mode 100644 index 127476e0bc..0000000000 --- a/lib/goffice/split/widgets/widget-format-selector.c +++ /dev/null @@ -1,1199 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/** - * widget-number-format-selector.c: Implements a widget to select number format. - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - **/ - -#include -#include "widget-format-selector.h" - -#include - -#include -#include -#include -//#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -/* The maximum number of chars in the formatting sample */ -#define FORMAT_PREVIEW_MAX 25 - -#define SETUP_LOCALE_SWITCH char *oldlocale = NULL - -#define START_LOCALE_SWITCH \ - do { \ - if (nfs->locale) { \ - currency_date_format_shutdown (); \ - oldlocale = g_strdup (setlocale (LC_ALL, NULL)); \ - gnm_setlocale (LC_ALL, nfs->locale); \ - currency_date_format_init (); \ - } \ - } while (0) - -#define END_LOCALE_SWITCH \ - do { \ - if (oldlocale) { \ - currency_date_format_shutdown (); \ - gnm_setlocale (LC_ALL, oldlocale); \ - g_free (oldlocale); \ - currency_date_format_init (); \ - } \ - } while (0) - -#define FMT_CUSTOM ((FormatFamily)(FMT_SPECIAL + 1)) - -/*Format Categories*/ -static char const *const format_category_names[] = { - N_("General"), - N_("Number"), - N_("Currency"), - N_("Accounting"), - N_("Date"), - N_("Time"), - N_("Percentage"), - N_("Fraction"), - N_("Scientific"), - N_("Text"), - N_("Special"), - N_("Custom"), - NULL -}; - -/* The available format widgets */ -typedef enum { - F_GENERAL_EXPLANATION, - F_NUMBER_EXPLANATION, - F_CURRENCY_EXPLANATION, - F_ACCOUNTING_EXPLANATION, - F_DATE_EXPLANATION, - F_TIME_EXPLANATION, - F_PERCENTAGE_EXPLANATION, - F_FRACTION_EXPLANATION, - F_SCIENTIFIC_EXPLANATION, - F_TEXT_EXPLANATION, - F_SPECIAL_EXPLANATION, - F_CUSTOM_EXPLANATION, - - F_SEPARATOR, - F_SYMBOL_LABEL, F_SYMBOL, - F_ENTRY, - F_LIST_LABEL, F_LIST_SCROLL, F_LIST, - F_DECIMAL_SPIN, - F_NEGATIVE_LABEL, F_NEGATIVE_SCROLL, F_NEGATIVE, - F_DECIMAL_LABEL, F_CODE_LABEL, F_SYMBOL_BOX, - F_DECIMAL_BOX, F_CODE_BOX, F_MAX_WIDGET -} FormatWidget; - -struct _NumberFormatSelector { - GtkHBox box; - GladeXML *gui; - - GnmValue *value; - char *locale; - - gboolean enable_edit; - - GnmDateConventions const *date_conv; - - struct { - GtkTextView *preview; - GtkWidget *preview_box; - GtkTextBuffer *preview_buffer; - - GtkWidget *widget[F_MAX_WIDGET]; - GtkWidget *menu; - GtkTreeModel *menu_model; - GtkSizeGroup *size_group; - - struct { - GtkTreeView *view; - GtkListStore *model; - GtkTreeSelection *selection; - } negative_types; - - struct { - GtkTreeView *view; - GtkListStore *model; - GtkTreeSelection *selection; - } formats; - - gulong entry_changed_id; - GnmFormat *spec; - gint current_type; - int num_decimals; - int negative_format; - int currency_index; - gboolean use_separator; - } format; -}; - -typedef struct { - GtkHBoxClass parent_class; - - gboolean (*number_format_changed) (NumberFormatSelector *nfs, const char *fmt); -} NumberFormatSelectorClass; - -static GtkHBoxClass *nfs_parent_class; - -/* Signals we emit */ -enum { - NUMBER_FORMAT_CHANGED, - LAST_SIGNAL -}; - -static guint nfs_signals[LAST_SIGNAL] = { 0 }; - -static void format_entry_set_text (NumberFormatSelector *nfs, gchar *text); - -static void -generate_format (NumberFormatSelector *nfs) -{ - FormatFamily const page = nfs->format.current_type; - GnmFormat *new_format; - - /* - * It is a strange idea not to reuse FormatCharacteristics - * in this file, so build one. - */ - FormatCharacteristics format = nfs->format.spec->family_info; - format.thousands_sep = nfs->format.use_separator; - format.num_decimals = nfs->format.num_decimals; - format.negative_fmt = nfs->format.negative_format; - format.currency_symbol_index = nfs->format.currency_index; - - new_format = style_format_build (page, &format); - if (new_format) { - char *tmp = style_format_as_XL (new_format, TRUE); - format_entry_set_text (nfs, tmp); - g_free (tmp); - } - - style_format_unref (new_format); -} - -static void -draw_format_preview (NumberFormatSelector *nfs, gboolean regen_format) -{ - gchar *preview; - GnmFormat *sf = NULL; - GnmColor *c = NULL; - - if (regen_format) - generate_format (nfs); - - /* Nothing to sample. */ - if (nfs->value == NULL) - return; - - sf = nfs->format.spec; - - if (sf == NULL || nfs->value == NULL) - return; - - if (style_format_is_general (sf) && - VALUE_FMT (nfs->value) != NULL) - sf = VALUE_FMT (nfs->value); - - preview = format_value (sf, nfs->value, &c, -1, nfs->date_conv); - if (strlen (preview) > FORMAT_PREVIEW_MAX) - strcpy (&preview[FORMAT_PREVIEW_MAX - 5], " ..."); - - gtk_text_buffer_set_text (nfs->format.preview_buffer, preview, -1); - if (c != NULL) { - gtk_widget_modify_text (GTK_WIDGET(nfs->format.preview), - GTK_STATE_NORMAL, &(c->color)); - style_color_unref (c); - } else { - GdkColor color; - gdk_color_parse ("black", &color); - gtk_widget_modify_text (GTK_WIDGET(nfs->format.preview), - GTK_STATE_NORMAL, &color); - } - - g_free (preview); -} - -static void -fillin_negative_samples (NumberFormatSelector *nfs) -{ - static char const *const decimals = "098765432109876543210987654321"; - static char const *const formats[4] = { - "-%s%s3%s210%s%s%s%s", - "%s%s3%s210%s%s%s%s", - "(%s%s3%s210%s%s%s%s)", - "(%s%s3%s210%s%s%s%s)" - }; - int const n = 30 - nfs->format.num_decimals; - - FormatFamily const page = nfs->format.current_type; - char const *space_b = "", *currency_b; - char const *space_a = "", *currency_a; - const char *decimal; - const char *thousand_sep; - int i; - GtkTreeIter iter; - GtkTreePath *path; - gboolean more; - SETUP_LOCALE_SWITCH; - - g_return_if_fail (page == FMT_NUMBER || page == FMT_CURRENCY); - g_return_if_fail (nfs->format.num_decimals <= 30); - - START_LOCALE_SWITCH; - - if (nfs->format.use_separator) - thousand_sep = format_get_thousand ()->str; - else - thousand_sep = ""; - if (nfs->format.num_decimals > 0) - decimal = format_get_decimal ()->str; - else - decimal = ""; - - if (page == FMT_CURRENCY) { - currency_b = (const gchar *)currency_symbols[nfs->format.currency_index].symbol; - /* - * FIXME : This should be better hidden. - * Ideally the render would do this for us. - */ - if (currency_b[0] == '[' && currency_b[1] == '$') { - char const *end = strchr (currency_b+2, '-'); - if (end == NULL) - end = strchr (currency_b+2, ']'); - currency_b = g_strndup (currency_b+2, end-currency_b-2); - } else - currency_b = g_strdup (currency_b); - - if (currency_symbols[nfs->format.currency_index].has_space) - space_b = " "; - - if (!currency_symbols[nfs->format.currency_index].precedes) { - currency_a = currency_b; - currency_b = ""; - space_a = space_b; - space_b = ""; - } else { - currency_a = ""; - } - } else - currency_a = currency_b = ""; - - more = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (nfs->format.negative_types.model), &iter); - for (i = 0 ; i < 4; i++) { - char *buf = g_strdup_printf (formats[i], - currency_b, space_b, thousand_sep, decimal, - decimals + n, space_a, currency_a); - if (!more) - gtk_list_store_append (nfs->format.negative_types.model, &iter); - gtk_list_store_set (nfs->format.negative_types.model, &iter, - 0, i, - 1, buf, - 2, (i % 2) ? "red" : NULL, - -1); - if (more) - more = gtk_tree_model_iter_next (GTK_TREE_MODEL (nfs->format.negative_types.model), - &iter); - - g_free (buf); - } - - /* If non empty then free the string */ - if (*currency_a) - g_free ((char*)currency_a); - if (*currency_b) - g_free ((char*)currency_b); - - path = gtk_tree_path_new (); - gtk_tree_path_append_index (path, nfs->format.negative_format); - gtk_tree_selection_select_path (nfs->format.negative_types.selection, path); - gtk_tree_path_free (path); - - END_LOCALE_SWITCH; -} - -static void -cb_decimals_changed (GtkSpinButton *spin, NumberFormatSelector *nfs) -{ - FormatFamily const page = nfs->format.current_type; - - nfs->format.num_decimals = gtk_spin_button_get_value_as_int (spin); - - if (page == FMT_NUMBER || page == FMT_CURRENCY) - fillin_negative_samples (nfs); - - draw_format_preview (nfs, TRUE); -} - -static void -cb_separator_toggle (GtkObject *obj, NumberFormatSelector *nfs) -{ - nfs->format.use_separator = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (obj)); - fillin_negative_samples (nfs); - - draw_format_preview (nfs, TRUE); -} - -static void -fmt_dialog_init_fmt_list (NumberFormatSelector *nfs, char const *const *formats, - GtkTreeIter *select) -{ - GtkTreeIter iter; - char *fmt; - char const *cur_fmt = nfs->format.spec->format; - - for (; *formats; formats++) { - gtk_list_store_append (nfs->format.formats.model, &iter); - fmt = style_format_str_as_XL (*formats, TRUE); - gtk_list_store_set (nfs->format.formats.model, &iter, - 0, fmt, -1); - g_free (fmt); - - if (!strcmp (*formats, cur_fmt)) - *select = iter; - } -} - -static void -fmt_dialog_enable_widgets (NumberFormatSelector *nfs, int page) -{ - SETUP_LOCALE_SWITCH; - static FormatWidget const contents[][12] = { - /* General */ - { - F_GENERAL_EXPLANATION, - F_MAX_WIDGET - }, - /* Number */ - { - F_NUMBER_EXPLANATION, - F_DECIMAL_BOX, - F_DECIMAL_LABEL, - F_DECIMAL_SPIN, - F_SEPARATOR, - F_NEGATIVE_LABEL, - F_NEGATIVE_SCROLL, - F_NEGATIVE, - F_MAX_WIDGET - }, - /* Currency */ - { - F_CURRENCY_EXPLANATION, - F_DECIMAL_BOX, - F_DECIMAL_LABEL, - F_DECIMAL_SPIN, - F_SEPARATOR, - F_SYMBOL_BOX, - F_SYMBOL_LABEL, - F_SYMBOL, - F_NEGATIVE_LABEL, - F_NEGATIVE_SCROLL, - F_NEGATIVE, - F_MAX_WIDGET - }, - /* Accounting */ - { - F_ACCOUNTING_EXPLANATION, - F_DECIMAL_BOX, - F_DECIMAL_LABEL, - F_DECIMAL_SPIN, - F_SYMBOL_BOX, - F_SYMBOL_LABEL, - F_SYMBOL, - F_MAX_WIDGET - }, - /* Date */ - { - F_DATE_EXPLANATION, - F_LIST_LABEL, - F_LIST_SCROLL, - F_LIST, - F_MAX_WIDGET - }, - /* Time */ - { - F_TIME_EXPLANATION, - F_LIST_LABEL, - F_LIST_SCROLL, - F_LIST, - F_MAX_WIDGET - }, - /* Percentage */ - { - F_PERCENTAGE_EXPLANATION, - F_DECIMAL_BOX, - F_DECIMAL_LABEL, - F_DECIMAL_SPIN, - F_MAX_WIDGET - }, - /* Fraction */ - { - F_FRACTION_EXPLANATION, - F_LIST_LABEL, - F_LIST_SCROLL, - F_LIST, - F_MAX_WIDGET - }, - /* Scientific */ - { - F_SCIENTIFIC_EXPLANATION, - F_DECIMAL_BOX, - F_DECIMAL_LABEL, - F_DECIMAL_SPIN, - F_MAX_WIDGET - }, - /* Text */ - { - F_TEXT_EXPLANATION, - F_MAX_WIDGET - }, - /* Special */ - { - F_SPECIAL_EXPLANATION, - F_MAX_WIDGET - }, - /* Custom */ - { - F_CUSTOM_EXPLANATION, - F_CODE_BOX, - F_CODE_LABEL, - F_ENTRY, - F_LIST_LABEL, - F_LIST_SCROLL, - F_LIST, - F_MAX_WIDGET - } - }; - - FormatFamily const old_page = nfs->format.current_type; - int i; - FormatWidget tmp; - - START_LOCALE_SWITCH; - - /* Hide widgets from old page */ - if (old_page >= 0) { - int i, j; - FormatWidget wi, wj; - for (i = 0; (wi = contents[old_page][i]) != F_MAX_WIDGET ; ++i) { - for (j = 0; (wj = contents[page][j]) != F_MAX_WIDGET ; ++j) - if (wi == wj) - goto stays; - gtk_widget_hide (nfs->format.widget[wi]); - stays: - ; /* No more */ - } - } - - /* Set the default format if appropriate */ - if (page == FMT_GENERAL || page == FMT_ACCOUNT || page == FMT_FRACTION || page == FMT_TEXT) { - int list_elem = 0; - char *tmp; - if (page == nfs->format.spec->family) - list_elem = nfs->format.spec->family_info.list_element; - - tmp = style_format_str_as_XL (cell_formats[page][list_elem], TRUE); - format_entry_set_text (nfs, tmp); - g_free (tmp); - } - - nfs->format.current_type = page; - for (i = 0; (tmp = contents[page][i]) != F_MAX_WIDGET ; ++i) { - GtkWidget *w = nfs->format.widget[tmp]; - - switch (tmp) { - case F_LIST: { - int start = 0, end = -1; - GtkTreeIter select; - - switch (page) { - case FMT_DATE: - case FMT_TIME: - case FMT_FRACTION: - start = end = page; - break; - - case FMT_CUSTOM: - start = 0; end = 8; - break; - - default : - g_assert_not_reached (); - }; - - select.stamp = 0; - gtk_list_store_clear (nfs->format.formats.model); - for (; start <= end ; ++start) - fmt_dialog_init_fmt_list (nfs, - cell_formats[start], &select); - - /* If this is the custom page and the format has - * not been found append it */ - /* TODO We should add the list of other custom formats created. - * It should be easy. All that is needed is a way to differentiate - * the std formats and the custom formats in the GnmFormat hash. - */ - if (page == FMT_CUSTOM && select.stamp == 0) { - char *tmp = style_format_as_XL (nfs->format.spec, TRUE); - format_entry_set_text (nfs, tmp); - g_free (tmp); - } else if (select.stamp == 0) - gtk_tree_model_get_iter_first ( - GTK_TREE_MODEL (nfs->format.formats.model), - &select); - - if (select.stamp != 0) - gtk_tree_selection_select_iter ( - nfs->format.formats.selection, &select); - - break; - } - - case F_NEGATIVE: - fillin_negative_samples (nfs); - break; - - case F_DECIMAL_SPIN: - gtk_spin_button_set_value (GTK_SPIN_BUTTON (nfs->format.widget[F_DECIMAL_SPIN]), - nfs->format.num_decimals); - break; - - case F_SEPARATOR: - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nfs->format.widget[F_SEPARATOR]), - nfs->format.use_separator); - break; - - default: - ; /* Nothing */ - } - - gtk_widget_show (w); - } - -#if 0 - if ((cl = GTK_CLIST (nfs->format.widget[F_LIST])) != NULL) - gnumeric_clist_make_selection_visible (cl); -#endif - - draw_format_preview (nfs, TRUE); - - END_LOCALE_SWITCH; -} - -/* - * Callback routine to manage the relationship between the number - * formating radio buttons and the widgets required for each mode. - */ - -static void -cb_format_class_changed (G_GNUC_UNUSED GtkTreeSelection *ignored, - NumberFormatSelector *nfs) -{ - int selected_item = 0; - GList *list; - GtkTreeSelection *selection = gtk_tree_view_get_selection - (GTK_TREE_VIEW(nfs->format.menu)); - - list = gtk_tree_selection_get_selected_rows - (selection, &nfs->format.menu_model); - if (list) { - GtkTreePath *path; - path = list->data; - selected_item = *(gtk_tree_path_get_indices (path)); - - if (selected_item >= 0) { - fmt_dialog_enable_widgets (nfs, selected_item); - } - g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL); - g_list_free (list); - } -} - -static void -cb_format_entry_changed (GtkEditable *w, NumberFormatSelector *nfs) -{ - char *fmt; - if (!nfs->enable_edit) - return; - - fmt = style_format_delocalize (gtk_entry_get_text (GTK_ENTRY (w))); - if (strcmp (nfs->format.spec->format, fmt)) { - style_format_unref (nfs->format.spec); - nfs->format.spec = style_format_new_XL (fmt, FALSE); - g_signal_emit (GTK_OBJECT (nfs), - nfs_signals[NUMBER_FORMAT_CHANGED], 0, - fmt); - draw_format_preview (nfs, FALSE); - } - g_free (fmt); -} - -/* - * We only want to emit the number format changed signal once for each - * format change. When not blocking signals when calling - * gtk_entry_set_text, one would be emitted for deleting the old text - * and one for inserting the new. That's why we block the signal and - * invoke cb_format_entry_changed explicitly. - */ -static void -format_entry_set_text (NumberFormatSelector *nfs, gchar *text) -{ - GtkEntry *entry = GTK_ENTRY (nfs->format.widget[F_ENTRY]); - - g_signal_handler_block (entry, nfs->format.entry_changed_id); - gtk_entry_set_text (entry, text); - g_signal_handler_unblock (entry, nfs->format.entry_changed_id); - cb_format_entry_changed (GTK_EDITABLE (entry), nfs); -} - -static void -cb_format_list_select (GtkTreeSelection *selection, NumberFormatSelector *nfs) -{ - GtkTreeIter iter; - gchar *text; - - if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (nfs->format.formats.model), - &iter, 0, &text, -1); - format_entry_set_text (nfs, text); -} - -static gboolean -cb_format_currency_select (G_GNUC_UNUSED GtkWidget *ct, - char * new_text, NumberFormatSelector *nfs) -{ - int i; - - /* ignore the clear while assigning a new value */ - if (!nfs->enable_edit || new_text == NULL || *new_text == '\0') - return FALSE; - - for (i = 0; currency_symbols[i].symbol != NULL ; ++i) - if (!strcmp (_(currency_symbols[i].description), new_text)) { - nfs->format.currency_index = i; - break; - } - - if (nfs->format.current_type == 1 || nfs->format.current_type == 2) - fillin_negative_samples (nfs); - draw_format_preview (nfs, TRUE); - - return TRUE; -} - -static void -cb_format_negative_form_selected (GtkTreeSelection *selection, NumberFormatSelector *nfs) -{ - GtkTreeIter iter; - int type; - - if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) - return; - - gtk_tree_model_get (GTK_TREE_MODEL (nfs->format.negative_types.model), - &iter, 0, &type, -1); - nfs->format.negative_format = type; - draw_format_preview (nfs, TRUE); -} - -static gint -funny_currency_order (gconstpointer _a, gconstpointer _b) -{ - char const *a = (char const *)_a; - char const *b = (char const *)_b; - - /* Keep the special 1 char versions, and both euro forms at the top */ - gboolean a1 = a[0] && (*(g_utf8_next_char (a)) == '\0' || - 0x20AC == g_utf8_get_char (a)); /* euro */ - gboolean b1 = b[0] && (*(g_utf8_next_char (b)) == '\0' || - 0x20AC == g_utf8_get_char (b)); /* euro */ - - if (a1) { - if (b1) { - return strcmp (a, b); - } else { - return -1; - } - } else { - if (b1) { - return +1; - } else { - return strcmp (a, b); - } - } -} - -static void -set_format_category (NumberFormatSelector *nfs, int row) -{ - GtkTreePath *path; - GtkTreeSelection *selection = gtk_tree_view_get_selection - ((GTK_TREE_VIEW(nfs->format.menu))); - - path = gtk_tree_path_new_from_indices (row, -1); - gtk_tree_selection_select_path (selection, path); - gtk_tree_path_free (path); -} - - -static void -set_format_category_menu_from_style (NumberFormatSelector *nfs) -{ - FormatFamily page; - - g_return_if_fail (IS_NUMBER_FORMAT_SELECTOR (nfs)); - - /* Attempt to extract general parameters from the current format */ - if ((page = nfs->format.spec->family) < 0) - page = FMT_CUSTOM; /* Default to custom */ - - set_format_category (nfs, page); - fmt_dialog_enable_widgets (nfs, page); -} - -static void -populate_menu (NumberFormatSelector *nfs) -{ - GtkTreeViewColumn *column; - GtkTreeSelection *selection; - GtkTreeIter iter; - GtkCellRenderer *renderer; - char const * const *categories = format_category_names; - - nfs->format.menu_model = GTK_TREE_MODEL (gtk_list_store_new - (1, G_TYPE_STRING)); - gtk_tree_view_set_model (GTK_TREE_VIEW (nfs->format.menu), - nfs->format.menu_model); - selection = gtk_tree_view_get_selection - (GTK_TREE_VIEW(nfs->format.menu)); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); - - while (*categories) { - gtk_list_store_append - (GTK_LIST_STORE (nfs->format.menu_model), &iter); - gtk_list_store_set (GTK_LIST_STORE (nfs->format.menu_model), - &iter, 0, _(*categories), -1); - categories++; - } - - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("", renderer, - "text", 0, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW(nfs->format.menu), column); - - g_signal_connect (selection, - "changed", - G_CALLBACK (cb_format_class_changed), nfs); -} - - -/* - * static void - * fmt_dialog_init_format_page (FormatState *state) - */ - -static void -nfs_init (NumberFormatSelector *nfs) -{ - /* The various format widgets */ - static char const *const widget_names[] = { - "format_general_explanation", - "format_number_explanation", - "format_currency_explanation", - "format_accounting_explanation", - "format_date_explanation", - "format_time_explanation", - "format_percentage_explanation", - "format_fraction_explanation", - "format_scientific_explanation", - "format_text_explanation", - "format_special_explanation", - "format_custom_explanation", - - "format_separator", - "format_symbol_label", - "format_symbol_select", - "format_entry", - "format_list_label", - "format_list_scroll", - "format_list", - "format_number_decimals", - "format_negatives_label", - "format_negatives_scroll", - "format_negatives", - "format_decimal_label", - "format_code_label", - "format_symbol_box", - "format_decimal_box", - "format_code_box", - NULL - }; - - GtkWidget *tmp; - GtkTreeViewColumn *column; - GoComboText *combo; - char const *name; - int i; - FormatFamily page; - - GtkWidget *toplevel; - GtkWidget *old_parent; - - nfs->enable_edit = FALSE; - nfs->locale = NULL; - - nfs->gui = gnm_glade_xml_new (NULL, "format-selector.glade", NULL, NULL); - if (nfs->gui == NULL) - return; - - toplevel = glade_xml_get_widget (nfs->gui, "number_box"); - old_parent = gtk_widget_get_toplevel (toplevel); - gtk_widget_reparent (toplevel, GTK_WIDGET (nfs)); - gtk_widget_destroy (old_parent); - gtk_widget_queue_resize (toplevel); - - nfs->format.spec = style_format_general (); - style_format_ref (nfs->format.spec); - - nfs->format.preview = NULL; - - /* The handlers will set the format family later. -1 flags that - * all widgets are already hidden. */ - nfs->format.current_type = -1; - - /* Even if the format was not recognized it has set intelligent defaults */ - nfs->format.use_separator = nfs->format.spec->family_info.thousands_sep; - nfs->format.num_decimals = nfs->format.spec->family_info.num_decimals; - nfs->format.negative_format = nfs->format.spec->family_info.negative_fmt; - nfs->format.currency_index = nfs->format.spec->family_info.currency_symbol_index; - - nfs->format.preview_box = glade_xml_get_widget (nfs->gui, "preview_box"); - nfs->format.preview = GTK_TEXT_VIEW (glade_xml_get_widget (nfs->gui, "preview")); - { - PangoFontMetrics *metrics; - PangoContext *context; - GtkWidget *w = GTK_WIDGET (nfs->format.preview); - gint char_width; - - /* request width in number of chars */ - context = gtk_widget_get_pango_context (w); - metrics = pango_context_get_metrics (context, - gtk_widget_get_style(w)->font_desc, - pango_context_get_language (context)); - char_width = pango_font_metrics_get_approximate_char_width (metrics); - gtk_widget_set_size_request (w, PANGO_PIXELS (char_width) * FORMAT_PREVIEW_MAX, -1); - pango_font_metrics_unref (metrics); - } - nfs->format.preview_buffer = gtk_text_view_get_buffer (nfs->format.preview); - - nfs->format.menu = glade_xml_get_widget (nfs->gui, "format_menu"); - populate_menu (nfs); - - /* Collect all the required format widgets and hide them */ - for (i = 0; (name = widget_names[i]) != NULL; ++i) { - tmp = glade_xml_get_widget (nfs->gui, name); - - if (tmp == NULL) { - g_warning ("nfs_init : failed to load widget %s", name); - } - - g_return_if_fail (tmp != NULL); - - gtk_widget_hide (tmp); - nfs->format.widget[i] = tmp; - } - - /* set minimum heights */ - gtk_widget_set_size_request (nfs->format.widget[F_LIST], -1, 100); - gtk_widget_set_size_request (nfs->format.widget[F_NEGATIVE], -1, 100); - - /* use size group for better widget alignment */ - nfs->format.size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - gtk_size_group_add_widget (nfs->format.size_group, - nfs->format.widget[F_SYMBOL_LABEL]); - gtk_size_group_add_widget (nfs->format.size_group, - nfs->format.widget[F_DECIMAL_LABEL]); - - /* hide preview by default until a value is set */ - gtk_widget_hide (nfs->format.preview_box); - - /* setup the structure of the negative type list */ - nfs->format.negative_types.model = gtk_list_store_new (3, - G_TYPE_INT, - G_TYPE_STRING, - G_TYPE_STRING); - nfs->format.negative_types.view = GTK_TREE_VIEW (nfs->format.widget[F_NEGATIVE]); - gtk_tree_view_set_model (nfs->format.negative_types.view, - GTK_TREE_MODEL (nfs->format.negative_types.model)); - column = gtk_tree_view_column_new_with_attributes (_("Negative Number Format"), - gtk_cell_renderer_text_new (), - "text", 1, - "foreground", 2, - NULL); - gtk_tree_view_append_column (nfs->format.negative_types.view, column); - nfs->format.negative_types.selection = - gtk_tree_view_get_selection (nfs->format.negative_types.view); - gtk_tree_selection_set_mode (nfs->format.negative_types.selection, - GTK_SELECTION_SINGLE); - g_signal_connect (G_OBJECT (nfs->format.negative_types.selection), - "changed", - G_CALLBACK (cb_format_negative_form_selected), nfs); - - /* Catch changes to the spin box */ - g_signal_connect (G_OBJECT (nfs->format.widget[F_DECIMAL_SPIN]), - "value_changed", - G_CALLBACK (cb_decimals_changed), nfs); - - /* Setup special handlers for : Numbers */ - g_signal_connect (G_OBJECT (nfs->format.widget[F_SEPARATOR]), - "toggled", - G_CALLBACK (cb_separator_toggle), nfs); - - /* setup custom format list */ - nfs->format.formats.model = - gtk_list_store_new (1, G_TYPE_STRING); - nfs->format.formats.view = - GTK_TREE_VIEW (nfs->format.widget[F_LIST]); - gtk_tree_view_set_model (nfs->format.formats.view, - GTK_TREE_MODEL (nfs->format.formats.model)); - column = gtk_tree_view_column_new_with_attributes (_("Number Formats"), - gtk_cell_renderer_text_new (), - "text", 0, - NULL); - gtk_tree_view_append_column (nfs->format.formats.view, column); - nfs->format.formats.selection = - gtk_tree_view_get_selection (nfs->format.formats.view); - gtk_tree_selection_set_mode (nfs->format.formats.selection, - GTK_SELECTION_BROWSE); - g_signal_connect (G_OBJECT (nfs->format.formats.selection), - "changed", - G_CALLBACK (cb_format_list_select), nfs); - - /* Setup handler Currency & Accounting currency symbols */ - combo = GO_COMBO_TEXT (nfs->format.widget[F_SYMBOL]); - if (combo != NULL) { - GList *ptr, *l = NULL; - - for (i = 0; currency_symbols[i].symbol != NULL ; ++i) - l = g_list_append (l, _((gchar *)currency_symbols[i].description)); - l = g_list_sort (l, funny_currency_order); - - for (ptr = l; ptr != NULL ; ptr = ptr->next) - go_combo_text_add_item (combo, ptr->data); - g_list_free (l); - go_combo_text_set_text (combo, - _((const gchar *)currency_symbols[nfs->format.currency_index].description), - GO_COMBO_TEXT_FROM_TOP); - g_signal_connect (G_OBJECT (combo), - "entry_changed", - G_CALLBACK (cb_format_currency_select), nfs); - } - - /* Setup special handler for Custom */ - nfs->format.entry_changed_id - = g_signal_connect (G_OBJECT (nfs->format.widget[F_ENTRY]), - "changed", - G_CALLBACK (cb_format_entry_changed), nfs); - - /* Connect signal for format menu */ - set_format_category_menu_from_style (nfs); - - if ((page = nfs->format.spec->family) < 0) - page = FMT_CUSTOM; /* Default to custom */ - fmt_dialog_enable_widgets (nfs, page); - - nfs->enable_edit = TRUE; -} - -static void -nfs_destroy (GtkObject *object) -{ - NumberFormatSelector *nfs = NUMBER_FORMAT_SELECTOR (object); - - g_free (nfs->locale); - nfs->locale = NULL; - - if (nfs->format.spec) { - style_format_unref (nfs->format.spec); - nfs->format.spec = NULL; - } - - if (nfs->format.size_group) { - g_object_unref (nfs->format.size_group); - nfs->format.size_group = NULL; - } - - if (nfs->value) { - value_release (nfs->value); - nfs->value = NULL; - } - - if (nfs->gui) { - g_object_unref (G_OBJECT (nfs->gui)); - nfs->gui = NULL; - } - - ((GtkObjectClass *)nfs_parent_class)->destroy (object); -} - -static void -nfs_class_init (GtkObjectClass *klass) -{ - klass->destroy = nfs_destroy; - - nfs_parent_class = g_type_class_peek (gtk_hbox_get_type ()); - - nfs_signals[NUMBER_FORMAT_CHANGED] = - g_signal_new ("number_format_changed", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (NumberFormatSelectorClass, number_format_changed), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, G_TYPE_POINTER); -} - -GSF_CLASS (NumberFormatSelector, number_format_selector, - nfs_class_init, nfs_init, GTK_TYPE_HBOX) - -GtkWidget * -number_format_selector_new (void) -{ - return g_object_new (NUMBER_FORMAT_SELECTOR_TYPE, NULL); -} - -void -number_format_selector_set_focus (NumberFormatSelector *nfs) -{ - g_return_if_fail (IS_NUMBER_FORMAT_SELECTOR (nfs)); - - gtk_widget_grab_focus (GTK_WIDGET (nfs->format.menu)); -} - -void -number_format_selector_set_style_format (NumberFormatSelector *nfs, - GnmFormat *style_format) -{ - GoComboText *combo; - - g_return_if_fail (IS_NUMBER_FORMAT_SELECTOR (nfs)); - g_return_if_fail (style_format != NULL); - - style_format_ref (style_format); - - style_format_unref (nfs->format.spec); - - nfs->format.spec = style_format; - - nfs->format.use_separator = style_format->family_info.thousands_sep; - nfs->format.num_decimals = style_format->family_info.num_decimals; - nfs->format.negative_format = style_format->family_info.negative_fmt; - nfs->format.currency_index = style_format->family_info.currency_symbol_index; - - combo = GO_COMBO_TEXT (nfs->format.widget[F_SYMBOL]); - go_combo_text_set_text - (combo, - _((const gchar *)currency_symbols[nfs->format.currency_index].description), - GO_COMBO_TEXT_FROM_TOP); - - set_format_category_menu_from_style (nfs); - draw_format_preview (nfs, TRUE); -} - -void -number_format_selector_set_value (NumberFormatSelector *nfs, - GnmValue const *value) -{ - g_return_if_fail (IS_NUMBER_FORMAT_SELECTOR (nfs)); - g_return_if_fail (value != NULL); - - if (nfs->value) { - value_release (nfs->value); - } - nfs->value = value_dup (value); - - gtk_widget_show (nfs->format.preview_box); - - draw_format_preview (nfs, TRUE); -} - -void -number_format_selector_set_date_conv (NumberFormatSelector *nfs, - GnmDateConventions const *date_conv) -{ - g_return_if_fail (IS_NUMBER_FORMAT_SELECTOR (nfs)); - g_return_if_fail (date_conv != NULL); - - /* FIXME is it safe ? */ - - nfs->date_conv = date_conv; - - draw_format_preview (nfs, TRUE); -} - -void -number_format_selector_editable_enters (NumberFormatSelector *nfs, - GtkWindow *window) -{ - g_return_if_fail (IS_NUMBER_FORMAT_SELECTOR (nfs)); - - gnumeric_editable_enters (window, - GTK_WIDGET (nfs->format.widget[F_DECIMAL_SPIN])); - gnumeric_editable_enters (window, - GTK_WIDGET (nfs->format.widget[F_ENTRY])); -} - - -void -number_format_selector_set_locale (NumberFormatSelector *nfs, - char const *locale) -{ - g_free (nfs->locale); - nfs->locale = g_strdup (locale); - - cb_format_class_changed (NULL, nfs); -} - -/* The following utility function should possibly be in format.h but we */ -/* access to the array of category names which are better located here. */ -char const * -number_format_selector_format_classification (GnmFormat const *style_format) -{ - FormatFamily page = style_format->family; - - if (page < 0 || page > FMT_CUSTOM) - page = FMT_CUSTOM; /* Default to custom */ - - return _(format_category_names[page]); -} diff --git a/lib/goffice/split/widgets/widget-format-selector.h b/lib/goffice/split/widgets/widget-format-selector.h deleted file mode 100644 index 9141486021..0000000000 --- a/lib/goffice/split/widgets/widget-format-selector.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * widget-number-format-selector.h: Implements a widget to select number format. - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - **/ - -#ifndef __WIDGET_FORMAT_SELECTOR_H__ -#define __WIDGET_FORMAT_SELECTOR_H__ - -//#include -#include - -#define NUMBER_FORMAT_SELECTOR_TYPE (number_format_selector_get_type ()) -#define NUMBER_FORMAT_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NUMBER_FORMAT_SELECTOR_TYPE, NumberFormatSelector)) -#define IS_NUMBER_FORMAT_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NUMBER_FORMAT_SELECTOR_TYPE)) - -typedef struct _NumberFormatSelector NumberFormatSelector; - - -GType number_format_selector_get_type (void); -GtkWidget * number_format_selector_new (void); - -void number_format_selector_set_focus (NumberFormatSelector *nfs); -void number_format_selector_set_style_format (NumberFormatSelector *nfs, - GnmFormat *style_format); -void number_format_selector_set_value (NumberFormatSelector *nfs, - GnmValue const *value); -void number_format_selector_set_date_conv (NumberFormatSelector *nfs, - GnmDateConventions const *date_conv); -void number_format_selector_editable_enters (NumberFormatSelector *nfs, - GtkWindow *window); -void number_format_selector_set_locale (NumberFormatSelector *nfs, - char const *locale); - -/* Number Format Selector Utilities */ - -char const * number_format_selector_format_classification (GnmFormat const *style_format); - -#endif /*__WIDGET_FORMAT_SELECTOR_H__*/ - diff --git a/lib/goffice/split/workbook-control-gui.h b/lib/goffice/split/workbook-control-gui.h deleted file mode 100644 index 338e0009ea..0000000000 --- a/lib/goffice/split/workbook-control-gui.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef GNUMERIC_WORKBOOK_CONTROL_GUI_H -#define GNUMERIC_WORKBOOK_CONTROL_GUI_H - -//#include "workbook-control.h" -#include "gnumeric.h" - -#include "gui-gnumeric.h" -#include -#include - -#define WORKBOOK_CONTROL_GUI_TYPE (workbook_control_gui_get_type ()) -#define WORKBOOK_CONTROL_GUI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WORKBOOK_CONTROL_GUI_TYPE, WorkbookControlGUI)) -#define IS_WORKBOOK_CONTROL_GUI(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), WORKBOOK_CONTROL_GUI_TYPE)) - -GType workbook_control_gui_get_type (void); -WorkbookControl *workbook_control_gui_new (WorkbookView *optional_view, - Workbook *optional_wb, - GdkScreen *optional_screen); - -int wbcg_sheet_to_page_index (WorkbookControlGUI *wbcg, Sheet *sheet, - SheetControlGUI **res); -GtkWindow *wbcg_toplevel (WorkbookControlGUI *wbcg); -void wbcg_set_transient (WorkbookControlGUI *wbcg, - GtkWindow *window); -SheetControlGUI *wbcg_cur_scg (WorkbookControlGUI *wbcg); -Sheet *wbcg_cur_sheet (WorkbookControlGUI *wbcg); -Sheet *wbcg_focus_cur_scg (WorkbookControlGUI *wbcg); - -gboolean wbcg_ui_update_begin (WorkbookControlGUI *wbcg); -void wbcg_ui_update_end (WorkbookControlGUI *wbcg); - -gboolean wbcg_rangesel_possible (WorkbookControlGUI const *wbcg); -gboolean wbcg_is_editing (WorkbookControlGUI const *wbcg); -void wbcg_autosave_cancel (WorkbookControlGUI *wbcg); -void wbcg_autosave_set (WorkbookControlGUI *wbcg, - int minutes, gboolean prompt); -void wbcg_set_status_text (WorkbookControlGUI *wbcg, - char const *text); -void wbcg_toggle_visibility (WorkbookControlGUI *wbcg, - GtkToggleAction *action); -void wbcg_copy_toolbar_visibility (WorkbookControlGUI *new_wbcg, - WorkbookControlGUI *wbcg); - -void wbcg_toggle_end_mode (WorkbookControlGUI *wbcg); -void wbcg_set_end_mode (WorkbookControlGUI *wbcg, gboolean flag); - -PangoFontDescription *wbcg_get_font_desc (WorkbookControlGUI *wbcg); - -#endif /* GNUMERIC_WORKBOOK_CONTROL_GUI_H */ diff --git a/lib/goffice/split/xml-io-version.h b/lib/goffice/split/xml-io-version.h deleted file mode 100644 index 5828fe4db2..0000000000 --- a/lib/goffice/split/xml-io-version.h +++ /dev/null @@ -1,23 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef GNUMERIC_XML_IO_VERSION_H -#define GNUMERIC_XML_IO_VERSION_H - -typedef enum -{ - GNUM_XML_UNKNOWN = -1, - GNUM_XML_V1, - GNUM_XML_V2, - GNUM_XML_V3, /* >= 0.52 */ - GNUM_XML_V4, /* >= 0.57 */ - GNUM_XML_V5, /* >= 0.58 */ - GNUM_XML_V6, /* >= 0.62 */ - GNUM_XML_V7, /* >= 0.66 */ - GNUM_XML_V8, /* >= 0.71 */ - GNUM_XML_V9, /* >= 0.73 add print scaling */ - GNUM_XML_V10, /* >= 1.03 remove useless Content node in cells */ - - /* NOTE : Keep this up to date (and in sync with the schema) */ - GNUM_XML_LATEST = GNUM_XML_V10 -} GnumericXMLVersion; - -#endif /* GNUMERIC_XML_IO_VERSION_H */ diff --git a/lib/goffice/split/xml-io.h b/lib/goffice/split/xml-io.h deleted file mode 100644 index 02b6ae81d8..0000000000 --- a/lib/goffice/split/xml-io.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef GNUMERIC_XML_IO_H -#define GNUMERIC_XML_IO_H - -#include -#include "gnumeric.h" -#include "xml-io-version.h" -//#include "file.h" -#include -#include -#include -#include - -struct _XmlParseContext { - xmlDocPtr doc; /* Xml document */ - xmlNsPtr ns; /* Main name space */ - - Sheet *sheet; /* the associated sheet */ - Workbook *wb; /* the associated workbook */ - WorkbookView *wb_view; - IOContext *io_context; - - GHashTable *style_table;/* old style styles compatibility */ - GHashTable *expr_map; /* - * Emitted expressions with ref count > 1 - * When writing this is map from expr pointer -> index - */ - GPtrArray *shared_exprs;/* - * When reading this is a map from index -> expr pointer - */ - GnumericXMLVersion version; - - GnmExprConventions *exprconv; -}; - -XmlParseContext *xml_parse_ctx_new (xmlDoc *doc, - xmlNs *ns, - WorkbookView *wb_view); -void xml_parse_ctx_destroy (XmlParseContext *ctxt); - - -xmlNodePtr xml_write_style (XmlParseContext *ctxt, GnmStyle *style); - -xmlChar *xml_cellregion_write (WorkbookControl *context, - GnmCellRegion *cr, int *size); -GnmCellRegion *xml_cellregion_read (WorkbookControl *context, Sheet *sheet, - guchar *buffer, int length); - -/* Some utility routines for setting attributes or content */ -xmlChar *xml_node_get_cstr (xmlNodePtr node, char const *name); -void xml_node_set_cstr (xmlNodePtr node, char const *name, char const *val); -gboolean xml_node_get_bool (xmlNodePtr node, char const *name, gboolean *result); -void xml_node_set_bool (xmlNodePtr node, char const *name, gboolean val); -gboolean xml_node_get_int (xmlNodePtr node, char const *name, int *result); -void xml_node_set_int (xmlNodePtr node, char const *name, int val); -gboolean xml_node_get_double (xmlNodePtr node, char const *name, double *result); -void xml_node_set_double (xmlNodePtr node, char const *name, double val, int precision); -gboolean xml_node_get_gocolor (xmlNodePtr node, char const *name, GOColor *result); -void xml_node_set_gocolor (xmlNodePtr node, char const *name, GOColor val); -GnmColor *xml_node_get_color (xmlNodePtr node, char const *name); -void xml_node_set_color (xmlNodePtr node, char const *name, GnmColor const *color); - -xmlNodePtr xml_write_style (XmlParseContext *ctxt, GnmStyle *style); -GnmStyle *xml_read_style (XmlParseContext *ctxt, xmlNodePtr tree); - -void xml_init (void); - -xmlNode *e_xml_get_child_by_name (xmlNode const *tree, char const *name); -xmlNode *e_xml_get_child_by_name_no_lang (xmlNode const *tree, char const *name); -xmlNode *e_xml_get_child_by_name_by_lang (xmlNode const *tree, char const *name); - -/* Gnumeric specific SAX utilities */ -void gnm_xml_out_add_color (GsfXMLOut *o, char const *id, GnmColor const *c); -void gnm_xml_out_add_gocolor (GsfXMLOut *o, char const *id, GOColor c); -void gnm_xml_out_add_cellpos (GsfXMLOut *o, char const *id, GnmCellPos const *p); - -#endif /* GNUMERIC_XML_IO_H */ diff --git a/lib/goffice/symbols.py b/lib/goffice/symbols.py deleted file mode 100755 index 99320838e3..0000000000 --- a/lib/goffice/symbols.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -""" -jsled, 2005 -- munge nm -a output to get a listing of actually undefined - symbols in libgoffice. - -USAGE: -[jsled@phoenix:~/../gnucash/lib/goffice]$ nm -a .libs/libgoffice.a | ./symbols.py | egrep -v "(xml|gtk_|g_|gdk_|pango_|gsf_|art_|gnome_|glade_)" | sort - -""" - -import sys, re - -def main(): - syms = {} - for line in sys.stdin: - line = line.strip() - match = re.match( r".*\b(U|T|D|c|t|R|B|C) ([^ ]+).*", line ) - if not match: - continue - sym = match.group(2) - type = match.group(1) - if not syms.has_key( sym ): - syms[sym] = type - elif syms[sym] == "U": - syms[sym] = type - for sym,status in syms.iteritems(): - if status == "U": - print sym - -if __name__ == "__main__": - main(); diff --git a/lib/goffice/utils/Makefile.am b/lib/goffice/utils/Makefile.am deleted file mode 100644 index ef826e66a7..0000000000 --- a/lib/goffice/utils/Makefile.am +++ /dev/null @@ -1,29 +0,0 @@ -noinst_LTLIBRARIES = libgoffice-utils.la - -AM_CFLAGS = ${GLIB_CFLAGS} ${ART_CFLAGS} ${GNOME_CFLAGS} ${GSF_CFLAGS} ${GLADE_CFLAGS} - -libgoffice_utils_la_SOURCES = \ - goffice-utils.h \ - go-color.c \ - go-color.h \ - go-file.c \ - go-file.h \ - go-font.c \ - go-font.h \ - go-format.c \ - go-format.h \ - go-gradient.c \ - go-gradient.h \ - go-line.c \ - go-line.h \ - go-marker.c \ - go-marker.h \ - go-pattern.c \ - go-pattern.h \ - go-locale.c \ - go-locale.h \ - go-units.h \ - go-math.c \ - go-math.h - -include $(srcdir)/../goffice.mk diff --git a/lib/goffice/utils/go-format.c b/lib/goffice/utils/go-format.c deleted file mode 100644 index 257e55c7b6..0000000000 --- a/lib/goffice/utils/go-format.c +++ /dev/null @@ -1,128 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gog-format.c : - * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include "go-format.h" -//#include -//#include -//#include -#include -#include -#include - -GOFormat * -go_format_new_from_XL (char const *descriptor_string, gboolean delocalize) -{ - return style_format_new_XL (descriptor_string, delocalize); -} - -char * -go_format_as_XL (GOFormat const *fmt, gboolean localized) -{ - return style_format_as_XL (fmt, localized); -} - -GOFormat * -go_format_ref (GOFormat *fmt) -{ - style_format_ref (fmt); - return fmt; -} - -void -go_format_unref (GOFormat *fmt) -{ - style_format_unref (fmt); -} - -char * -go_format_value (GOFormat const *fmt, double val) -{ - static GnmValueFloat tmp = { VALUE_FLOAT, NULL, 0. }; - static GnmDateConventions conv = { FALSE }; - tmp.val = val; - return format_value (fmt, (GnmValue *)&tmp, NULL, -1, &conv); -} - -gboolean -go_format_eq (GOFormat const *a, GOFormat const *b) -{ - if (a == NULL) - return b == NULL; - if (b == NULL) - return FALSE; - return style_format_equal (a, b); -} - -/** - * go_format_general : - * - * Returns the 'General' #GOFormat but does not add a reference - **/ -GOFormat * -go_format_general (void) -{ - return style_format_general (); -} - -/** - * go_format_default_date : - * - * Returns the default date #GOFormat but does not add a reference - **/ -GOFormat * -go_format_default_date (void) -{ - return style_format_default_date (); -} - -/** - * go_format_default_time : - * - * Returns the default time #GOFormat but does not add a reference - **/ -GOFormat * -go_format_default_time (void) -{ - return style_format_default_time (); -} - -/** - * go_format_default_percentage : - * - * Returns the default percentage #GOFormat but does not add a reference - **/ -GOFormat * -go_format_default_percentage (void) -{ - return style_format_default_percentage (); -} - -/** - * go_format_default_money : - * - * Returns the default money #GOFormat but does not add a reference - **/ -GOFormat * -go_format_default_money (void) -{ - return style_format_default_money (); -} diff --git a/lib/goffice/utils/go-format.h b/lib/goffice/utils/go-format.h deleted file mode 100644 index 2d291382ac..0000000000 --- a/lib/goffice/utils/go-format.h +++ /dev/null @@ -1,43 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * go-format.h : - * - * Copyright (C) 2003-2004 Jody Goldberg (jody@gnome.org) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef GO_FORMAT_H -#define GO_FORMAT_H - -#include -#include - -G_BEGIN_DECLS - -GOFormat *go_format_new_from_XL (char const *descriptor_string, gboolean delocalize); -char *go_format_as_XL (GOFormat const *fmt, gboolean localized); -GOFormat *go_format_ref (GOFormat *fmt); -void go_format_unref (GOFormat *fmt); -char *go_format_value (GOFormat const *fmt, double val); -gboolean go_format_eq (GOFormat const *a, GOFormat const *b); -GOFormat *go_format_general (void); -GOFormat *go_format_default_date (void); -GOFormat *go_format_default_time (void); -GOFormat *go_format_default_percentage (void); -GOFormat *go_format_default_money (void); - -G_END_DECLS - -#endif /* GO_FORMAT_H */ diff --git a/lib/goffice/utils/go-locale.c b/lib/goffice/utils/go-locale.c deleted file mode 100644 index 3b7b67e977..0000000000 --- a/lib/goffice/utils/go-locale.c +++ /dev/null @@ -1,318 +0,0 @@ -/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * gog-locale.c : - * - * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation - * All rights reserved. - * - * This file is part of the Gnome Library. - * - * The Gnome Library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * The Gnome Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include "go-locale.h" -#include -#include - -#ifndef WITH_GNOME -static GHashTable *alias_table = NULL; - -/*read an alias file for the locales*/ -static void -read_aliases (char const *file) -{ - FILE *fp; - char buf[256]; - if (!alias_table) - alias_table = g_hash_table_new (g_str_hash, g_str_equal); - fp = fopen (file,"r"); - if (!fp) - return; - while (fgets (buf,256,fp)) - { - char *p; - g_strstrip(buf); - if (buf[0]=='#' || buf[0]=='\0') - continue; - p = strtok (buf,"\t "); - if (!p) - continue; - p = strtok (NULL,"\t "); - if(!p) - continue; - if (!g_hash_table_lookup (alias_table, buf)) - g_hash_table_insert (alias_table, g_strdup(buf), g_strdup(p)); - } - fclose (fp); -} - -/*return the un-aliased language as a newly allocated string*/ -static char * -unalias_lang (char *lang) -{ - char *p; - int i; - if (!alias_table) - { - read_aliases ("/usr/share/locale/locale.alias"); - read_aliases ("/usr/local/share/locale/locale.alias"); - read_aliases ("/usr/lib/X11/locale/locale.alias"); - read_aliases ("/usr/openwin/lib/locale/locale.alias"); - } - i = 0; - while ((p=g_hash_table_lookup(alias_table,lang)) && strcmp(p, lang)) - { - lang = p; - if (i++ == 30) - { - static gboolean said_before = FALSE; - if (!said_before) - g_warning ("Too many alias levels for a locale, may indicate a loop"); - said_before = TRUE; - return lang; - } - } - return lang; -} - -/* Mask for components of locale spec. The ordering here is from - * least significant to most significant - */ -enum -{ - COMPONENT_CODESET = 1 << 0, - COMPONENT_TERRITORY = 1 << 1, - COMPONENT_MODIFIER = 1 << 2 -}; - -/* Break an X/Open style locale specification into components - */ -static guint -explode_locale (const gchar *locale, - gchar **language, - gchar **territory, - gchar **codeset, - gchar **modifier) -{ - const gchar *uscore_pos; - const gchar *at_pos; - const gchar *dot_pos; - - guint mask = 0; - - uscore_pos = strchr (locale, '_'); - dot_pos = strchr (uscore_pos ? uscore_pos : locale, '.'); - at_pos = strchr (dot_pos ? dot_pos : (uscore_pos ? uscore_pos : locale), '@'); - - if (at_pos) - { - mask |= COMPONENT_MODIFIER; - *modifier = g_strdup (at_pos); - } - else - at_pos = locale + strlen (locale); - - if (dot_pos) - { - mask |= COMPONENT_CODESET; - *codeset = g_new (gchar, 1 + at_pos - dot_pos); - strncpy (*codeset, dot_pos, at_pos - dot_pos); - (*codeset)[at_pos - dot_pos] = '\0'; - } - else - dot_pos = at_pos; - - if (uscore_pos) - { - mask |= COMPONENT_TERRITORY; - *territory = g_new (gchar, 1 + dot_pos - uscore_pos); - strncpy (*territory, uscore_pos, dot_pos - uscore_pos); - (*territory)[dot_pos - uscore_pos] = '\0'; - } - else - uscore_pos = dot_pos; - - *language = g_new (gchar, 1 + uscore_pos - locale); - strncpy (*language, locale, uscore_pos - locale); - (*language)[uscore_pos - locale] = '\0'; - - return mask; -} - -/* - * Compute all interesting variants for a given locale name - - * by stripping off different components of the value. - * - * For simplicity, we assume that the locale is in - * X/Open format: language[_territory][.codeset][@modifier] - * - * TODO: Extend this to handle the CEN format (see the GNUlibc docs) - * as well. We could just copy the code from glibc wholesale - * but it is big, ugly, and complicated, so I'm reluctant - * to do so when this should handle 99% of the time... - */ -static GList * -compute_locale_variants (const gchar *locale) -{ - GList *retval = NULL; - - gchar *language; - gchar *territory = NULL; - gchar *codeset = NULL; - gchar *modifier = NULL; - - guint mask; - guint i; - - g_return_val_if_fail (locale != NULL, NULL); - - mask = explode_locale (locale, &language, &territory, &codeset, &modifier); - - /* Iterate through all possible combinations, from least attractive - * to most attractive. - */ - for (i=0; i<=mask; i++) - if ((i & ~mask) == 0) - { - gchar *val = g_strconcat(language, - (i & COMPONENT_TERRITORY) ? territory : "", - (i & COMPONENT_CODESET) ? codeset : "", - (i & COMPONENT_MODIFIER) ? modifier : "", - NULL); - retval = g_list_prepend (retval, val); - } - - g_free (language); - if (mask & COMPONENT_CODESET) - g_free (codeset); - if (mask & COMPONENT_TERRITORY) - g_free (territory); - if (mask & COMPONENT_MODIFIER) - g_free (modifier); - - return retval; -} - -/* The following is (partly) taken from the gettext package. - Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. */ - -static const gchar * -guess_category_value (void) -{ - const gchar *retval; - - /* The highest priority value is the `LANGUAGE' environment - variable. This is a GNU extension. */ - retval = g_getenv ("LANGUAGE"); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* `LANGUAGE' is not set. So we have to proceed with the POSIX - methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some - systems this can be done by the `setlocale' function itself. */ - - /* Setting of LC_ALL overwrites all other. */ - retval = g_getenv ("LC_ALL"); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* Next comes the name of the desired category. */ - retval = g_getenv ("LC_MESSAGES"); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* Last possibility is the LANG environment variable. */ - retval = g_getenv ("LANG"); - if (retval != NULL && retval[0] != '\0') - return retval; - - return NULL; -} - - -/** - * go_locale_languages: - * - * This computes a list of language strings that the user wants. It searches in - * the standard environment variables to find the list, which is sorted in order - * from most desirable to least desirable. The `C' locale is appended to the - * list if it does not already appear (other routines depend on this - * behaviour). If @category_name is %NULL, then %LC_ALL is assumed. - * - * Return value: the list of languages, this list should not be freed - * owned by gnome-i18n. - **/ -GList const * -go_locale_languages (void) -{ - static GList *list = NULL; - - if (list == NULL ) - { - gint c_locale_defined= FALSE; - - const gchar *category_value; - gchar *category_memory, *orig_category_memory; - - category_value = guess_category_value (); - if (! category_value) - category_value = "C"; - orig_category_memory = category_memory = - g_malloc (strlen (category_value)+1); - - while (category_value[0] != '\0') - { - while (category_value[0] != '\0' && category_value[0] == ':') - ++category_value; - - if (category_value[0] != '\0') - { - char *cp= category_memory; - - while (category_value[0] != '\0' && category_value[0] != ':') - *category_memory++= *category_value++; - - category_memory[0]= '\0'; - category_memory++; - - cp = unalias_lang(cp); - - if (strcmp (cp, "C") == 0) - c_locale_defined= TRUE; - - list= g_list_concat (list, compute_locale_variants (cp)); - } - } - - g_free (orig_category_memory); - - if (!c_locale_defined) - list = g_list_append (list, (gpointer)"C"); - } - - return list; -} -#else -#include - -GList const * -go_locale_languages (void) -{ - return gnome_i18n_get_language_list ("LC_MESSAGES"); -} - -#endif diff --git a/lib/goffice/utils/go-math.c b/lib/goffice/utils/go-math.c deleted file mode 100644 index 1cc99c9ab1..0000000000 --- a/lib/goffice/utils/go-math.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * go-math.c: Mathematical functions. - * - * Authors: - * Morten Welinder - */ - -#include -#include "go-math.h" -#include -#include -#include -#include -#include -#include - -#if defined (HAVE_IEEEFP_H) || defined (HAVE_IEEE754_H) -/* Make sure we have this symbol defined, since the existance of either - header file implies it. */ -#ifndef IEEE_754 -#define IEEE_754 -#endif -#endif - -#define ML_UNDERFLOW (GO_EPSILON * GO_EPSILON) - -double go_nan; -double go_pinf; -double go_ninf; - -void -go_math_init (void) -{ - const char *bug_url = "http://bugzilla.gnome.org/enter_bug.cgi?product=gnumeric"; - char *old_locale; - double d; -#ifdef SIGFPE - void (*signal_handler)(int) = (void (*)(int))signal (SIGFPE, SIG_IGN); -#endif - - go_pinf = HUGE_VAL; - if (go_pinf > 0 && !go_finite (go_pinf)) - goto have_pinf; - -#if defined(INFINITY) && defined(__STDC_IEC_559__) - go_pinf = INFINITY; - if (go_pinf > 0 && !go_finite (go_pinf)) - goto have_pinf; -#endif - - /* Try sscanf with fixed strings. */ - old_locale = setlocale (LC_ALL, "C"); - if (sscanf ("Inf", "%lf", &d) != 1 && - sscanf ("+Inf", "%lf", &d) != 1) - d = 0; - setlocale (LC_ALL, old_locale); - go_pinf = d; - if (go_pinf > 0 && !go_finite (go_pinf)) - goto have_pinf; - - /* Try overflow. */ - go_pinf = (HUGE_VAL * HUGE_VAL); - if (go_pinf > 0 && !go_finite (go_pinf)) - goto have_pinf; - - g_error ("Failed to generate +Inf. Please report at %s", - bug_url); - abort (); - - have_pinf: - /* ---------------------------------------- */ - - go_ninf = -go_pinf; - if (go_ninf < 0 && !go_finite (go_ninf)) - goto have_ninf; - - g_error ("Failed to generate -Inf. Please report at %s", - bug_url); - abort (); - - have_ninf: - /* ---------------------------------------- */ - - go_nan = go_pinf * 0.0; - if (isnan (go_nan)) - goto have_nan; - - /* Try sscanf with fixed strings. */ - old_locale = setlocale (LC_ALL, "C"); - if (sscanf ("NaN", "%lf", &d) != 1 && - sscanf ("NAN", "%lf", &d) != 1 && - sscanf ("+NaN", "%lf", &d) != 1 && - sscanf ("+NAN", "%lf", &d) != 1) - d = 0; - setlocale (LC_ALL, old_locale); - go_nan = d; - if (isnan (go_nan)) - goto have_nan; - - go_nan = go_pinf / go_pinf; - if (isnan (go_nan)) - goto have_nan; - - g_error ("Failed to generate NaN. Please report at %s", - bug_url); - abort (); - - have_nan: -#ifdef SIGFPE - signal (SIGFPE, signal_handler); -#endif - return; -} - -/* - * In preparation for truncation, make the value a tiny bit larger (seen - * absolutely). This makes ROUND (etc.) behave a little closer to what - * people want, even if it is a bit bogus. - */ -double -go_add_epsilon (double x) -{ - if (!go_finite (x) || x == 0) - return x; - else { - int exp; - double mant = frexp (fabs (x), &exp); - double absres = ldexp (mant + DBL_EPSILON, exp); - return (x < 0) ? -absres : absres; - } -} - -double -go_sub_epsilon (double x) -{ - if (!go_finite (x) || x == 0) - return x; - else { - int exp; - double mant = frexp (fabs (x), &exp); - double absres = ldexp (mant - DBL_EPSILON, exp); - return (x < 0) ? -absres : absres; - } -} - -double -go_fake_floor (double x) -{ - return floor (go_add_epsilon (x)); -} - -double -go_fake_ceil (double x) -{ - return ceil (go_sub_epsilon (x)); -} - -double -go_fake_trunc (double x) -{ - return (x >= 0) - ? go_fake_floor (x) - : -go_fake_floor (-x); -} diff --git a/lib/goffice/utils/go-math.h b/lib/goffice/utils/go-math.h deleted file mode 100644 index 3dceec5478..0000000000 --- a/lib/goffice/utils/go-math.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef __GO_MATH_H -#define __GO_MATH_H - -#include -#ifdef HAVE_IEEEFP_H -#include -#endif -#ifdef HAVE_IEEE754_H -#include -#endif - -#include "config.h" - -/* What a circus! */ -#ifdef HAVE_FINITE -#define go_finite finite -#elif defined(HAVE_ISFINITE) -#define go_finite isfinite -#elif defined(FINITE) -#define go_finite FINITE -#else -#error "I don't know an equivalent of finite for your system; you lose" -#endif - -/* ------------------------------------------------------------------------- */ - -extern double go_nan; -extern double go_pinf; -extern double go_ninf; - -/* ------------------------------------------------------------------------- */ - -double go_add_epsilon (double x); -double go_sub_epsilon (double x); - -/* ------------------------------------------------------------------------- */ - -double go_fake_floor (double x); -double go_fake_ceil (double x); -double go_fake_trunc (double x); - -/* ------------------------------------------------------------------------- */ - -void go_math_init (void); - -/* ------------------------------------------------------------------------- */ - -#endif /* __GO_MATH_H */ diff --git a/lib/libgsf-1.12.3/AUTHORS b/lib/libgsf-1.12.3/AUTHORS new file mode 100644 index 0000000000..8c9e2c29ad --- /dev/null +++ b/lib/libgsf-1.12.3/AUTHORS @@ -0,0 +1,2 @@ +Jody Goldberg +Manuel Mausz diff --git a/lib/libgsf-1.12.3/BUGS b/lib/libgsf-1.12.3/BUGS new file mode 100644 index 0000000000..abaf36778a --- /dev/null +++ b/lib/libgsf-1.12.3/BUGS @@ -0,0 +1,23 @@ +General + - Can we buffer things to support sequential access only ? + +gsf-output-stdio.c: + +1. We require write permission in the target directory. + +2. A "chdir" between open and close might move the file! + +3. Changing the directory structure between open and close might + produce interesting effects. + +4. If the target file is multiple (hard) linked, the file will + be unlinked. (Thus, the other "copies" will not change.) + +5. If the target file is owned by someone else, we will most + likely take ownership. + +6. Race conditions (inter-process and inter-thread) all over. + +OLE2 + Properties + - in/out support for blobs and storages diff --git a/lib/libgsf-1.12.3/COPYING b/lib/libgsf-1.12.3/COPYING new file mode 100644 index 0000000000..b578119057 --- /dev/null +++ b/lib/libgsf-1.12.3/COPYING @@ -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. + + + Copyright (C) + + 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. + + , 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. diff --git a/lib/libgsf-1.12.3/COPYING.LIB b/lib/libgsf-1.12.3/COPYING.LIB new file mode 100644 index 0000000000..6e46c8b511 --- /dev/null +++ b/lib/libgsf-1.12.3/COPYING.LIB @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 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. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. 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. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; 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. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/lib/libgsf-1.12.3/ChangeLog b/lib/libgsf-1.12.3/ChangeLog new file mode 100644 index 0000000000..fa72cb1bb7 --- /dev/null +++ b/lib/libgsf-1.12.3/ChangeLog @@ -0,0 +1,3777 @@ +2005-09-06 Jody Goldberg + + * Release 1.12.3 + +2005-08-24 Jody Goldberg + + * configure.in : Make gconf optional + * Makefile.am : ditto. + +2005-08-22 Jody Goldberg + + * gsf-gnome/Makefile.am : Add -no-undefined on win32 [#314221] + +2005-08-19 Tim Janik + + * gsf/gsf-outfile-zip.c (zip_close_stream): call deflateEnd, free + stream and buffer space, so we are not holding on to large amounts + of memory until we're done with the current directory. + +2005-08-17 J.H.M. Dassen (Ray) + + * doc/gsf-office-thumbnailer.1: Added. + * doc/Makefile.am: Updated accordingly. + +2005-08-16 Stepan Kasal + + * configure.in: Update obsolete AC_TRY_* macros. + Before the tests for g_chmod and g_access, LIBGSF_LIBS should be + _prepended_ to LIBS, not appended; more specific libs have to be + listed first. + * gsf/gsf-impl-utils.h: Align tabs. + +2005-08-13 Morten Welinder + + * configure.in: Post release bump + +2005-08-13 Morten Welinder + + * Release 1.12.2 + +2005-08-11 Jean Brefort + + * gsf/gsf-impl-utils.h: made GSF_CLASS_FULL and GSF_DYNAMIC_CLASS_FULL + really full. + +2005-08-09 J.H.M. Dassen (Ray) + + * configure.in: Changed tests for g_chmod and g_access: actually try + linking the test fragments and use the LIBS being constructed in those + attempts. + +2005-08-09 Morten Welinder + + * configure.in: Test for g_chmod and g_access. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_close): Use the right + errno. Fixes part of #312930. + (chmod_wrapper): New function to help Win32. + (access_wrapper): Renamed from gsf_access and simplified. + +2005-08-09 J.H.M. Dassen (Ray) + + * thumbnailer/main.c (show_error_and_exit): Mark this G_GNUC_NORETURN + as well. + +2005-08-08 J.H.M. Dassen (Ray) + + * *: Updated the FSF's address. + +2005-08-07 Stepan Kasal + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new_FILE): Don't forget + to set the keep_open flag. + * thumbnailer/main.c (show_error_string_and_exit): Add G_GNUC_NORETURN. + +2005-08-05 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_prop_parse) : be more careful + +2005-08-02 Morten Welinder + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new_FILE): New function + for symmetry. (This is not as useful as it might seem since the + file must be seekable.) + +2005-08-02 Stepan Kasal + + * Makefile.am (clean-local): That rule contained command + "rm -f intl/po2tbl.sed". But it seems the subdirectory intl/ is + no longer used. + (ACLOCAL_AMFLAGS): Remove again. + (EXTRA_DIST): Remove files added by gettextize and files distributed + by default. + (DISTCLEANFILES): Add the three intltool-* scripts. + * configure.in (GCONFTOOL): Determine by a procedure similar to + what is in gnumeric/configure.in. + * thumbnailer/Makefile.am (install-data-local): Fix the rule so that + we pass distcheck. + * acinclude.m4, acinclude.m4.am15: Partial cleanup of the comments; + in particular, don't speak as if Automake 1.5 were something new. + +2005-07-11 Morten Welinder + + * gsf/gsf-output.c (gsf_output_set_name_from_filename): Make this + work for NULL filename. + +2005-07-30 Jody Goldberg + + http://bugzilla.gnome.org/show_bug.cgi?id=310118 + * gsf/gsf-msole-utils.c (msole_metadata_write_prop) : be more careful + about NULL strings. This fixes the crash on export, but there are + still some warnings on import that put us into an inconsistent + state. + (msole_prop_parse) : In the LPSTR case use the actual byte size not + the result of the conversion. If the encoding is off, we ended up + with the wrong size. + +2005-07-24 Dom Lachowicz + + * gsf/gsf-msole-utilc.c (msole_prop_parse): Move some g_prints behind + a debug macro. + +2005-07-19 Federico Mena Quintero + + * thumbnailer/main.c (main): Oops, remove some leftover debugging code. + + * configure.in: Generate thumbnailer/Makefile. Add a test for GConf. + + * Makefile.am (SUBDIRS): Added the thumbnailer directory. + + * gsf/gsf-utils.c (gsf_init): Call bindtextdomain() and + bind_textdomain_codeset(). + + * gsf/gsf-clip-data.c: Mark strings for translation. + + * gsf/gsf-blob.c: Likewise. + + * gsf/gsf-msole-utils.c: Mark strings in GErrors for translation. + + * gsf/Makefile.am (AM_CPPFLAGS): Add the locale directory. + +2005-07-19 gettextize + + * Makefile.am (SUBDIRS): Add po. + (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): Add config.rpath, m4/ChangeLog. + * configure.in (AC_CONFIG_FILES): Add po/Makefile.in. + +2005-07-19 Federico Mena Quintero + + * configure.in: Pull in intltool and gettext. + + * thumbnailer/gsf-office-thumbnailer.schemas.in: New file with the + schemas for the thumbnailer. + +2005-07-18 Federico Mena Quintero + + * thumbnailer/main.c: New file with a very simple GNOME + thumbnailer for MS Office files. This will grow to something more + sophisticated in the future. + + * thumbnailer/Makefile.am: New file. + + I'll add this subdir to the build tomorrow, when I get the GConf + bits right for configure.in. + +2005-07-18 Stepan Kasal + + * gsf/gsf-libxml.c (gsf_xml_in_doc_free): In the description, remove + the reference to the nonexistent gsf_xml_in_doc_prep. + +2005-07-07 Ivan, Wong Yat Cheung + + * msvc/.cvsignore: + * msvc/README: + * msvc/config.dsp: + * msvc/install.pl: + * msvc/autom4te.hack: New + Include a hacked version autoheader that doesn't need a posix + environment. The whole MSVC building process is now posix- + independent. + +2005-07-06 Federico Mena Quintero + + * gsf/gsf-blob.[ch]: New files with a GsfBlob object, used to hold + generic binary data. + + * gsf/gsf-clip-data.[ch]: New files with a GsfClipData object, + used to hold the VT_CF property data. + + * gsf/gsf-msole-utils.c (parse_vt_cf): New function; creates a + GsfClipData for the resulting GValue. + (msole_prop_parse): Handle the VT_CF property. + + * gsf/gsf-utils.h (GSF_ERROR): Add a generic error quark. + (GsfError): Add an enum with generic error values; so far we only + have GSF_ERROR_OUT_OF_MEMORY and GSF_ERROR_INVALID_DATA. + + * gsf/gsf-utils.c (gsf_error_quark): Implement. + + * gsf/Makefile.am: Added gsf-blob.[ch] and gsf-clip-data.[ch]. + + * doc/gsf-sections.txt: Added sections for GsfBlob and + GsfClipData. Added the GsfError stuff to the "utils" section. + + * doc/gsf-docs.sgml: Add the GsfBlob and GsfClipData sections. + Renamed the old "GsfBlob" entity to "GsfStructuredBlob", to match + the object to which it refers. + + * doc/tmpl/utils.sgml: Document the GError bits. + + * doc/tmpl/gsf-clip-data.sgml: New file. + + * doc/tmpl/gsf-blob.sgml: New file. + +2005-07-05 Jon K Hellan + + * gsf/gsf-msole-utils.c (msole_metadata_write_prop): Fix + VT_FILETIME export. + +2005-07-01 Morten Welinder + + * gsf/gsf-output-memory.c (gsf_output_memory_vprintf): Don't use a + va_list twice as an argument. (The standard does not allow that.) + Fixes i86_64 problems and was found by Jean. + + * gsf/gsf-utils.c (gsf_mem_dump_full): Kill a warning. + +2005-06-30 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_iconv_get_codepage_string_list) : + Add 0x8001 as a synonym for 1252 as per the OOo docs. I wish there + was something more normative than that. + + * gsf/gsf-docprop-vector.c : remove custom GTypeValueTable it was + wrong and unnecessary. This fixes the leak of the GValueArray + +2005-06-30 Ivan, Wong Yat Cheung + + * win: Rename to msvc + * msvc: Add MSVC build files, see msvc/README for + details. + +2005-06-23 Ivan, Wong Yat Cheung + + * configure.in: Check for the existence of S_ISREG, + if it is not defined (e.g. MS's PSDK), do + it ourself. + +2005-06-21 Ivan, Wong Yat Cheung + + * gsf/gsf-input-stdio.c: + * gsf/gsf-libxml.c: + * gsf/gsf-msole-utils.c: + * gsf/gsf-outfile-msole.c: + * gsf/gsf-outfile-stdio.c: + * gsf/gsf-output-stdio.c: + * gsf/gsf-timestamp.c: + * gsf/gsf-utils.h + * gsf-win32/gsf-input-win32.c: + * gsf-win32/gsf-output-win32.c: Remove all #warning. That is + a gcc only directive. Use /* FIXME FIXME FIXME Blah Blah */ instead. + Remove all _MSC_VER, which are either unnecessary or not belong + there. + +2005-06-13 Morten Welinder + + * gsf/gsf-msole-utils.c (msole_prop_parse): Use g_value_set_uint64 + and g_value_set_int64 where appropriate. + (msole_prop_cmp): Handle offsets larger than int. + +2005-06-12 Jody Goldberg + + * configure.in : post release bump + +2005-06-12 Jody Goldberg + + * Release 1.12.1 + +2005-06-12 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_lid_to_codepage) : codepages are + signed. + (gsf_msole_iconv_win_codepage) : ditto. + (gsf_msole_iconv_open_codepages_for_export) : ditto. + (gsf_msole_iconv_open_codepage_for_export) : ditto. + (gsf_msole_iconv_get_codepage_string_list) : ditto. + -535(uint16) == 65001 + +2005-06-12 Jody Goldberg + + * gsf/gsf-impl-utils.h (GSF_DYNAMIC_CLASS_FULL) : remove useless + trailing backslash that was confusing gtk-doc + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new_valist) : new. + (gsf_output_stdio_new_full) Use it here. + (gsf_output_stdio_new) : And use that here. + * gsf/gsf-outfile-stdio.c (gsf_output_stdio_new_valist) : new. + (gsf_outfile_stdio_new_full) Use it here. + (gsf_outfile_stdio_new) : And use that here. + +2005-06-10 Morten Welinder + + * gsf/gsf-libxml.c (gsf_xml_out_add_enum): New function. + +2005-06-08 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Test + directory-ness of the right mode. + +2005-06-04 Stepan Kasal + + * gsf/gsf-output.h (gsf_output_vprintf): Add the function attribute + G_GNUC_PRINTF (2, 0). Add the same to various static *vprintf + funtions in other files. + * gsf/gsf-output-csv.c (gsf_output_cvs_close): The parameter is + unused, mark it as such. + + * .cvsignore: Add gtk-doc.make; remove gsf-config; replace stamp-h + and stamp-* by stamp-h*. + +2005-06-03 Jody Goldberg + + * gsf/gsf-utils.h (gsf_init_dynamic) : new hook. Unimplemented yet. + + * gsf/gsf-impl-utils.h (prefix) : use a cleaner pattern for the + dynamic type/interface declarations. + +2005-06-02 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_vt_name) : suppress warning + (msole_prop_parse) : assign the right type. + +2005-06-02 Dom Lachowicz + + * gsf/gsf-outfile-zip.c (zip_flush): Check for Z_BUF_ERROR case. + This is the cause of AbiWord bug #7652 + +2005-06-02 Morten Welinder + + * gsf/gsf-libxml.c (gsf_xml_out_add_float): Use "C" locale + conventions. Fix ambiguities in docs. + +2005-06-01 Morten Welinder + + * gsf/gsf-input-gzip.c (gsf_input_gzip_read): Only trigger the + truncated-file check after we have added a single NUL byte. + (check_header): Avoid overflows. + +2005-05-31 Jody Goldberg + + * gsf/gsf-input-gzip.c (gsf_input_gzip_read) : get upset when an input + file is truncated. + (check_header) : Add a heuristic to warn about files with > 1000:1 + compression ratios. It is crude but likely to catch the worst + truncated files were we're using data rather than a trailer by + accident. + +2005-05-31 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_parse) : add some protection. + +2005-05-30 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_metadata_write_section) : warning + suppression. + (msole_prop_parse) : it seems GValue needs to be a G_OBJECT in order + for it to be unrefed. + +2005-05-28 Jody Goldberg + + * gsf/gsf-docprop-vector.c (gsf_docprop_vector_finalize) : patch leak. + +2005-05-25 Morten Welinder + + * configure.in (CFLAGS): Don't use -Wcrazy. + +2005-05-15 J.H.M. Dassen (Ray) + + * configure.in: Enable a number of additional warnings (when available) + for which the current code base is already virtually clean. + Ensure at link time that the shared objects, contain complete + dependency information for all symbols they use from elsewhere. + +2005-05-10 Jody Goldberg + + * configure.in : post release bump + +2005-05-09 Jody Goldberg + + * Release 1.12.0 + +2005-05-08 Jody Goldberg + + * gsf/gsf-outfile-msole.c (ole_bytes_left_in_block) : As per Stuart + Cunningham from the AAF group the header is always bb.size. + (gsf_outfile_msole_new_full) : ditto. pad the header with zeros. + +2005-05-08 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_start_element) : Do not check for a + namespace we have not seen yet. Fixes crash when reading OOo 2.0 + with the dtd from 1.0 + +2005-05-05 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_check_ns) : Add some safety. + +2005-05-04 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_vt_name) : handle sparse entries. + +2005-05-03 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_metadata_write) : complete rewrite. + Just write the properties then seek back to fill in the offsets + rather than measuring then writing. + (cb_count_props) : new. collect builtin vs user defined props + from the hash. + (msole_metadata_write_section) : new. write the props and collect the + offsets and ids. Handle linked props, vectors and variant vectors. + (msole_metadata_write_prop) : Adds padding to the simple types. + (gvalue_to_msole_vt) : map from a GValue to a variant type. Be smart + about handling boxed types, and check vectors to see if they are + fixed type vs variant. Use the table of builtin types if possible + to deal with ambiguities. + (cb_write_dict) : new. + (msole_vtname) : new util to get debug name. + +2005-04-27 Morten Welinder + + * gsf/gsf-utils.c (gsf_property_settings_collect, + gsf_property_settings_collect_valist, gsf_property_settings_free): + New functions. + + * gsf/gsf-outfile-zip.c (gsf_outfile_zip_new): Move guts into + gsf_outfile_zip_constructor. + (gsf_outfile_zip_constructor): New function. + (gsf_outfile_zip_class_init): Link in gsf_outfile_zip_constructor. + Add entry-name and sink properties. In the process separate + filenames from gsf_output_name which is UTF-8 encoded. + (stream_name_write_to_buf): Greatly simplify using GString. + + * gsf/gsf-infile-zip.c: New property "source". Install a proxy + layer between the zip file and the source so we don't dup + GsfInputStdio or GsfInputGnomeVFS objects (which is expensive and + subject to lots of problems). + +2005-04-26 Morten Welinder + + * tests/test-cp-zip.c (clone): Be a bit verbose. Make the copy + use the compression levels of the source. + + * gsf/gsf-outfile-zip.c: Add construct-only compression-level + property. + (gsf_outfile_zip_set_compression_method): Make this an empty stub + and deprecate. + + * gsf/gsf-zip-utils.c (gsf_vdir_add_child): Do not sort because + doing so breaks copying of OOo files. + + * gsf/gsf-infile-zip.c: Add readable compression-level property. + (vdir_child_by_index): simplify. (This is really use + g_slist_nth_data, modulo pointer types.) + +2005-04-26 Jody Goldberg + + * gsf/gsf-msole-utils.c (cb_measure_props) : handle custom props for + ints and uints. + +2005-04-26 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_gsf_name_to_prop) : fix my silliness + (check_variant) : new. + (cb_measure_props) : renamed from add_props. Signature changed to + match the new foreach semantics. Some initial work on handling + variant vectors vs single type vectors. Removed nasty kludge for + DocumentParts and HeadingPairs. + + * gsf/gsf-docprop-vector.c (gsf_value_get_docprop_vector) : Use + g_value_get_object and clarify the docs. + (gsf_value_set_docprop_vector) : delete + (VAL_IS_GSF_DOCPROP_VECTOR) : new. + (IS_GSF_DOCPROP_VECTOR) : adjust to use the std GObject semantics + +2005-04-23 Jody Goldberg + + * gsf/gsf-doc-meta-data.h (gsf_doc_prop_new) : new + (gsf_doc_prop_free) : new + (gsf_doc_prop_swap_val) : new + + * gsf/gsf-msole-utils.c : disable the debug spew + +2005-04-22 Stepan Kasal + + * configure.in: Use m4 macros for version numbering. + +2005-04-16 Jody Goldberg + + * tests/test-msole1.c : update for the new ms-ole property import api + + * gsf/gsf-msole-utils.c : disable debug spew + (msole_prop_id_to_gsf) : flag links + (msole_prop_read) : store the property directly. + (msole_prop_store) : delete. + +2005-04-16 Jody Goldberg + + * gsf/gsf-docprop-vector.c (gsf_value_get_docprop_varray) : Add some + safety. + +2005-04-16 Jody Goldberg + + * gsf/gsf-doc-meta-data.[ch] : Major interface changes to make the + hash like behavior perfectly clear, and to support links. + +2005-04-16 Jody Goldberg + + * doc/gsf-sections.txt : update + +2005-04-12 Morten Welinder + + * configure.in: revert last change. + +2005-04-12 Stepan Kasal + + * configure.in: Small changes in the pygtk check, though it's + currently not in use. + +2005-04-11 Jody Goldberg + + * tests/test-msole1.c: Make the test program work. + +2005-04-10 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_metadata_write) : replace incessant + if (success) with a 'goto err' and prune more non-C89 var decls + +2005-04-09 Jody Goldberg + + * gsf/gsf-outfile.h : remove G_GNUC_NULL_TERMINATED for now. + we do not want to require glib-2.7 + +2005-04-09 Jody Goldberg + + * gsf/gsf-outfile-impl.h (new_child) : change the signature to pass in + var_args. Changed all callers. + + * gsf/gsf-outfile.c (gsf_outfile_new_child_full) : new. + (gsf_outfile_new_child) : convert into a wrapper to + gsf_outfile_new_child_full. + * gsf/gsf-input.c (gsf_input_error_id) : renamed from gsf_input_error + and a deprecated wrapper with the old name. + * gsf/gsf-docprop-vector.c (gsf_value_get_docprop_varray) : new. + * gsf/gsf-infile-msvba.c (vba_project_read) : add a few new + signatures. + +2005-04-09 Jody Goldberg + + From Manuel Mausz + * gsf/gsf-msole-utils.c (gsf_msole_metadata_write) : initial + implementation. + +2005-04-07 Jody Goldberg + + * configure.in : bump the library version to indicate api change + +2005-04-04 Stepan Kasal + + * configure.in (LIBGSF_MODULES): This macro was replaced by... + (libgsf_reqs, libgsf_gnome_reqs): ... these two shell variables. + PKG_CHECK_MODULES from pkconfig-0.16.0 double quotes its arguments, + which is an error; using shell variables is a handy workaround. + * Makefile.am: Clean up. + * test/Makefile.am (LDADD): Use this, instead of the per-target + variables. + +2005-04-04 Morten Welinder + + * gsf/gsf-output-csv.c (gsf_output_csv_write_field): Fix auto + quoting. + + * gsf/gsf-output-iconv.h: Make GsfOutputIconvClass public. + * gsf/gsf-output-impl.h: Make GsfOutputClass public. + * gsf/gsf-output-csv.h: Make GsfOutputCsvClass public. + +2005-04-03 J.H.M. Dassen (Ray) + + * configure.in: Fixed the GNOME support check: "LIBGSF_MODULES" needed + to be expanded in the PKG_CHECK_MODULES. + +2005-04-01 Morten Welinder + + * gsf/gsf-output-iconv.c: New file. + * gsf/gsf-output-csv.c: New file. + + * gsf/gsf-output.c (gsf_output_dispose): Silently close if needed. + +2005-04-01 Stepan Kasal + + s/INCLUDES/AM_CPPFLAGS/ "automake -Wall" has told me this. + + * configure.in: More sophisticated check for zlib, an improved + version of the check in gnumeric (to be removed soon from there), + which in turn was inspired by libxml2's configure.in. + Require Autoconf 2.54 and other cosmetic changes. + * autogen.sh: Require Autoconf 2.54 and other cosmetic changes. + +2005-03-31 Morten Welinder + + * gsf/gsf-output.c (gsf_output_set_error): Make public. + + * */*.c: Don't test for NULL before g_free. + + * gsf/gsf-utils.h (GSF_LE_GET_GINT64, GSF_LE_SET_GINT64, + GSF_LE_SET_GUINT64): New macros for completeness. + +2005-03-29 Morten Welinder + + * gsf/gsf-impl-utils.h (GSF_PARAM_STATIC): Define suitably. + * gsf/*.c: Use GSF_PARAM_STATIC for properties. + + * configure.in: Don't check for readline and lstat. Do check for + mode_t. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Again use mode_t + for saved umask. + +2005-03-28 Morten Welinder + + * */*.c: Use canonical property names. + +2005-03-25 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_close): In case of + error, simply unlink the temporary file and leave the target file + alone. + + * gsf/gsf-output-gzip.c (gzip_output_block): If we cannot write to + the sink, set an error for ourself. + (gzip_flush): If we get a compression failure, set an error for + ourself. + + * gsf/gsf-input-gzip.c (gsf_input_gzip_class_init): Install + set_property, get_property, and constructor methods. + (check_header): Allow skipping the header. Allow getting + uncompressed size from construction property. + (gsf_input_gzip_read): Allow having to trailer. + (gsf_input_gzip_dup): Cleanly construct the new object. + + * gsf/gsf-output-gzip.c (gsf_output_gzip_class_init): Rename + "container" property to "raw" with opposite semantics. + +2005-03-25 Morten Welinder + + * gsf/gsf-output-gzip.c (gsf_output_gzip_set_property): Handle + NULL sink better. + (gsf_output_gzip_new): Don't bother closing the output on error. + + * gsf/gsf-output.c (gsf_output_dispose): Renamed from _finalize. + Don't complain when a stream with an error is not closed -- just + silently close it. + (gsf_output_class_init): Hook up for _dispose instead of + _finalize. + + * gsf/gsf-output-gzip.c (gsf_output_gzip_close): Do nothing for a + stream with an error. + +2005-03-25 Morten Welinder + + * gsf/gsf-output-gzip.c (gsf_output_gzip_class_init): Install + set_property, get_property, and constructor methods. + (gsf_output_gzip_constructor): Allow skipping the gzip header. + (gsf_output_gzip_close): Allow skipping the tail. + +2005-03-24 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_access): Renamed from + file_is_writable. Make it a full access wrapper. Caller changed. + +2005-03-23 Morten Welinder + + * gsf/gsf-utils.c (gsf_filename_to_utf8): Make this sane (which it + never was). We no longer use this, but keep it around. + (gsf_extension_pointer): Fix this for Win32. + +2005-03-23 Ivan, Wong Yat Cheung + + * gsf/gsf-msole-utils.c: Add new function + gsf_msole_iconv_get_codepage_string_list() which returns all + possible names of a codepage given a codepage number. This helps + gsf_msole_iconv_open_codepage_for_(im|ex)port(). + * gsf-win32/Makefile.am: some more minor changes so that + libgsf_win32_1_la can be built as dll. + +2005-03-23 Morten Welinder + + * gsf/gsf-output-stdio.c (follow_symlinks): Handle lack of ELOOP. + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): g_open has a + mandatory mode arg that open does not. + +2005-03-22 Morten Welinder + + * gsf/gsf-libxml.c (close_tag_if_neccessary): New function. + (gsf_xml_out_add_cstr_unchecked, gsf_xml_out_add_cstr): Use + close_tag_if_neccessary. Patch from #167166. + +2005-03-22 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Conditionalize + owner/group stuff on HAVE_CHOWN. Use file_is_writable. + (file_is_writable): New function. + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): Use f_open, not + open. + + * gsf/gsf-outfile-stdio.c (gsf_outfile_stdio_new): Simplify using + g_mkdir. + + * configure.in: Require glib 2.6 for g_filename_display_name. + + * gsf/gsf-output-stdio.c (rename_wrapper): Use g_rename and + g_unlink. + (gsf_output_stdio_new): Use g_stat. Fix error message. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek): Don't call perror. + (struct GsfInputStdio): Add filename member. + (gsf_input_stdio_finalize): Free filename member. + (gsf_input_stdio_dup): Use filename member. + (gsf_input_stdio_new): Fix error messages; initialize filename + member; use g_fopen to open file. + + * gsf/gsf-docprop-vector.c: Fix includes. + + * gsf/gsf-infile-stdio.c (gsf_infile_stdio_new): Simply using + glib's GDir stuff. (This should fix Win32 in the process.) + +2005-03-05 Jody Goldberg + + Patch from Frank Chiulli + * gsf/Makefile.am : Add gsf-docprop-vector + * gsf/gsf-docprop-vector.{c,h} : new files to add vector support + * tests/test-msole1.c (print_property) : support for vectors + * gsf/gsf-msole-utils.c (msole_prop_parse) : ditto + +2005-02-02 Dom Lachowicz + + * gsf/gsf-output-gnomevfs.c: A bit more robustness and documentation + for bug 159442. + +2005-01-16 Dom Lachowicz + + * gsf/gsf-output-gnomevfs.c: This should fix bug 159442 by truncating + newly-created files whenever possible WHILE preserving file permissions. + +2004-09-25 Stepan Kasal + + * gsf/gsf-output-stdio.c: Use g_file_read_link() - (bug 149827) + +2004-12-02 Dom Lachowicz + + * gsf/gsf-input-memory.c: Add mmap support on win32 (bug #160294) + * gsf/gsf-shared-memory.c: Ditto + +2004-12-06 Jody Goldberg + + * configure.in : post release bump + +2004-12-06 Jody Goldberg + + * Release 1.11.1 + +2004-12-05 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_close): Flush file if + we don't close it. + +2004-12-01 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Make sure new + files end us with as lose permissions as the umask says. + [#159331] + (rename_wrapper): New function to hide the fact that Win32's + rename does not unlink the target file if it exists. [#160108] + +2004-11-28 Jody Goldberg + + * configure.in : Post release bump + +2004-11-28 Jody Goldberg + + * Release 1.11.0 + +2004-11-28 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_prop_parse) : NULL unhandled types + +2004-11-25 Sven Herzberg + + * gsf-gnome/gsf-output-gnomevfs.c: (gsf_output_gnomevfs_new_uri): + truncate the output file to length 0 when opening (fix #159442) + +2004-11-23 Jody Goldberg + + * gsf/gsf-output-stdio.c (gsf_output_stdio_close) : add a hook to + accept existing FILE* + (gsf_output_stdio_new_FILE) : new. + +2004-11-19 Veerapuram Varadhan + + * Add gsf/gsf-meta-names.h + + * gsf/gsf-doc-meta-data.[ch] (gsf_get_prop_val, + gsf_get_prop_val_str): new + (gsf_doc_meta_data_get_prop) : return GsfDocProp instead of + GsfDocMetaData. Caller should release the return value. + + * gsf/Makefile.am : Add gsf-meta-names.h to the list of headers. + +2004-11-16 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_start_element) : Check the unknown + handler if we come across something that has not been registered + yet. + (gsf_xml_in_doc_set_unknown_handler) : new. + (gsf_xml_in_doc_new) : split part of this out into + (gsf_xml_in_doc_extend) : here, so that we can add nodes to a + description later. + +2004-11-12 Morten Welinder + + * gsf/gsf-libxml.c (gsf_xml_out_add_cstr): Escape 1..31 when used + in attributes. + +2004-11-02 Jody Goldberg + + * tests/test-msole1.c (test) : fix leak and use + gsf_msole_metadata_read_real. + + * gsf/gsf-msole-utils.c (gsf_msole_metadata_read) : store them in + GsfDocProp + (gsf_msole_metadata_read_real) : renamed from gsf_msole_metadata_read + (gsf_msole_metadata_read) : a quick stub to avoid creating a leak in + existing calls to this routine. + +2004-11-02 Jody Goldberg + + From Frank + * gsf/gsf-msole-utils.c (gsf_msole_metadata_read) : store the + properties + * tests/test-msole1.c (test) : dump the properties + * gsf/Makefile.am : Add gsf-doc-meta-data.c to the build + * gsf/gsf-doc-meta-data.c (gsf_doc_meta_data_set_prop) : init + the GValue before we assign. + +2004-09-20 Morten Welinder + + * gsf/*.c: Remove useless casts of 0 to gsf_off_t in parameters. + + * gsf/gsf-output.c (gsf_output_set_name_from_filename): New function. + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Use + gsf_output_set_name_from_filename. + * gsf/gsf-outfile-stdio.c (gsf_outfile_stdio_new): Use + gsf_output_set_name_from_filename. + + * gsf/gsf-input.c (gsf_input_set_name_from_filename): New function. + * gsf/gsf-input-stdio.c (gsf_input_stdio_new): Use + gsf_input_set_name_from_filename. + * gsf/gsf-infile-stdio.c (gsf_infile_stdio_new): Use + gsf_input_set_name_from_filename. + + * gsf/gsf-infile-zip.c (zip_update_stream_in): Add seek error check. + (gsf_infile_zip_read): Ditto. + +2004-09-19 Dom Lachowicz + + * configure.in: Morten's VFS local copy requires VFS >= 2.2. Upgrade configure check. + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new_uri): Follow symlinks similarly to the STDIO input + * gsf/gsf-input-stdio.c (gsf_input_stdio_new): Convert file name to UTF8 + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Convert file name to UTF8 + * BUGS: remove above + +2004-09-17 Morten Welinder + + * gsf/gsf-infile-zip.c (zip_find_trailer): Fix gsf_input_seek + check. + + * gsf/gsf-input.c: Doc fixes, notably reversing the sense of + gsf_input_seek_emulate's return value. + +2004-09-17 Morten Welinder + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new_uri): + Force local copy for small (<256KB) files that are not local. + + * gsf/gsf-infile-msole.c (gsf_infile_msole_new): Add a proxy layer + so we don't have to dup files or net connections. + + * gsf/gsf-input.c (gsf_input_dup): Provide error messages. + + * gsf/gsf-input-proxy.c (gsf_input_proxy_read): gsf_input_read + updates our position so we should not. + + * gsf/gsf-input-proxy.[ch]: New file. + +2004-09-16 Morten Welinder + + * gsf/gsf-input-textline.c (gsf_input_textline_dup): Set size. + + * gsf/gsf-input-memory.c (gsf_input_memory_dup): Set size. + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_seek): Ugly + work-around for gnome-vfs bug. + + * gsf/gsf-input.c (gsf_input_dup): Check size and seek return + value. + + * gsf/gsf-infile.c (gsf_infile_child_by_name): Protect against + NULL input name. + (gsf_infile_child_by_index): Ditto. + + * gsf/gsf-infile-msole.c (gsf_infile_msole_new_child): Handle + failure to dup. + (ole_info_get_sb_file): Handle failure to dup. + (gsf_infile_msole_new_child): Handle failure from + ole_info_get_sb_file. + +2004-09-15 Dom Lachowicz + + * gsf-win32/gsf-input-win32.c: Create more meaningful error messages + from HRESULTs. + * gsf-win32/gsf-output-win32.c: Ditto. Add error reporting. + +2004-08-27 Stepan Kasal + + * gsf/gsf-outfile-zip.c (gsf_outfile_zip_seek): Use G_GNUC_UNUSED. + * gsf/gsf-output-gzip.c (gsf_output_gzip_seek): Likewise. + * gsf/gsf-structured-blob.c (blob_dup): Likewise. + * gsf/gsf-input-textline.c (gsf_input_textline_dup): Likewise. + * gsf/gsf-input-memory.c (gsf_input_memory_dup): Likewise. + (gsf_input_mmap_new): Remove useless #warning. + +2004-08-26 Morten Welinder + + * gsf/gsf-shared-memory.c (gsf_shared_memory_finalize): Don't + check size overflow here. + (gsf_shared_memory_mmapped_new): Check it here. Return NULL if we + don't have mmap. + + * gsf/gsf-timestamp.c (gsf_value_set_timestamp): Renamed from + g_value_set_timestamp. + +2004-08-25 Stepan Kasal + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close_root): Be careful + with empty files (fixes bug #150923). + +2004-08-25 Morten Welinder + + * gsf/gsf-utils.c (gsf_base64_encode_step): Avoid potential + rounding error. + + * gsf/gsf-input-bzip.c (gsf_input_memory_new_from_bzip): Kill + pointless #warning. + +2004-08-23 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_out_add_cstr) : Add some libxml compat + behavior and ignore NULLs + (gsf_xml_out_add_cstr_unchecked) : ditto + +2004-08-17 Stepan Kasal + + * gsf/gsf-utils.c (BASE64_LINE_LEN): New constant to determine + the line length, my mbox indicates that 76 is commonly used. + (gsf_base64_encode_simple): Use it. + (gsf_base64_encode_step): Use it too; remember that `already' + holds line length / 4. + (gsf_base64_encode_close): Don't add '\n' if not necessary. + +2004-07-29 Stepan Kasal + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_new_full): One more sanity + check, bb.size has to be at least DIRENT_SIZE. + (gsf_outfile_msole_close_root): For non-root dirs, don't set + FIRSTBLOCK to DIRENT_MAGIC_END, it is BAT_MAGIC_END_OF_CHAIN; though + both are -1. Explanation: BAT_MAGIC_END_OF_CHAIN is of type ``block + number'' while DIRENT_MAGIC_END is of type ``dirent number''. + +2004-08-20 Jody Goldberg + + * configure.in : post release version bump + +2004-08-20 Jody Goldberg + + * Release 1.10.1 + +2004-08-17 Jon K Hellan + + * gsf/gsf-utils.c (gsf_base64_decode_simple): Revert base64 + initialization change. + +2004-08-16 Morten Welinder + + * gsf/gsf-utils.c (gsf_base64_encode_simple): Request line + breaking. + +2004-08-13 Jon K Hellan + + * gsf/gsf-utils.c (gsf_base64_decode_simple): Initialize during + first use. + +2004-08-10 Morten Welinder + + * gsf/gsf-input-textline.c (gsf_input_textline_utf8_gets): Fix + off-by-one in buffer length check. + +2004-08-08 Jon K Hellan + + * gsf/gsf-output-stdio.c (follow_symlinks, gsf_output_stdio_new): + Use g_error_new_literal, not g_error_new on strings which we do + not control. + +2004-07-30 Christopher James Lahey + + * gsf/gsf-input.c (gsf_input_class_init), gsf/gsf-output.c + (gsf_output_class_init): Use correct types for properties here. + +2004-07-30 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_out_class_init) : Init the parent_class + here. + (gsf_xml_out_init) : not here. + +2004-07-27 Stepan Kasal + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_new_full): + Fix a race condition with a static buffer. + Write correct sb.shift to the header, even if it differs + from the default. + +2004-07-29 Jody Goldberg + + * gsf/gsf-outfile-msole.c (ole_bytes_left_in_block) : sigh. + Pull my head out of my rearend. a one line function with two + errors. I really shouldn't code when tired. + (ole_pad_zero) : remove residual parm rename ole_ from bb_ + (ole_pad_bat_unused) : add a residual parm. + (gsf_outfile_msole_close_root) : pad metabat with BAT_UNUSED + +2004-07-29 Morten Welinder + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): Use NULL, not 0 for + pointer. + (gsf_input_memory_seek): Use G_GNUC_UNUSED instead of + void-casting. + + * gsf/gsf-libxml.c (gsfXMLInParser): Ditto. + (gsf_xml_in_get_entity, gsf_xml_in_warning, gsf_xml_in_error, + gsf_xml_in_fatal_error): Use G_GNUC_UNUSED instead of + void-casting. + (gsf_xml_out_add_color): Make buffer size overflow safe. + + * gsf/gsf-utils.c: Always #define G_ARMFLOAT_ENDIAN. + +2004-07-28 Stepan Kasal + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close_root): + Check for overflow of the size field of a regular file entry. + +2004-07-28 Jody Goldberg + + * gsf/gsf-outfile-msole.c (bb_pad_zero) : add a residual param to not + fill the entire block if desired and clarify that the current block + is cur_size - HEADER not block_size. + (gsf_outfile_msole_close_root) : Clarify the metabat writing logic a + bit and just in case add a CHAIN_END to the last incomplete metabat + (ole_bytes_left_in_block) : similar to Kasal's suggestion without the + -1 % size + 1 + (bb_pad_zero) : use it here to make this safe to use when not at the + end of the file. + (ole_pad_bat_unused) : and here to fix the mystery corruption when XL + reads the file. + +2004-07-27 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close_root) : the last + xbat does not require a forwarding link + +2004-07-27 Stepan Kasal + + * gsf/gsf-outfile-msole.c (metabat_size): Nuke; doesn't have to + be an instance variable, it can be local ... + (gsf_outfile_msole_close_root): ... here. + (gsf_outfile_msole_set_block_shift): Don't set metabat_size. + +2004-07-26 Jody Goldberg + + * gsf/gsf-outfile-msole.c (OLE_DEFAULT_METABAT_SIZE): delete + (gsf_outfile_msole_close_root) : pull out of + (gsf_outfile_msole_close) : here as a cleanup gesture. + + Per : Stepan Kasal + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_set_block_shift) : Use + BAT_INDEX_SIZE, not hardwired shift of 2. + (gsf_outfile_msole_close): Use the current sb.shift, not + OLE_DEFAULT_SB_SHIFT. + +2004-07-23 Stepan Kasal + + Replace various instances of local parent_class variables by + a static ones, initialized by class_init. + * gsf/gsf-*.c: (20 files touched) + * gsf/gsf-output-transaction.c: A general cleanup. + +2004-07-21 Stepan Kasal + + The gsf_ouput_printf method didn't correctly update cur_offset. + + The implementations of vprintf virtual method shouldn't touch + cur_offset but they should return the number of bytes written; + the dispatcher updates cur_offset accordingly. + + * gsf/gsf-output-impl.h (Vprintf): The virtual private method now + returns number of bytes printed. + * gsf/gsf-output.c (gsf_output_vprintf): Renamed to ... + (gsf_output_ireal_vprintf): ... this. + (gsf_output_printf): Collect the va_list and call ... + (gsf_output_vprintf): ... this new function, which dispatches + the Vprintf virtual method and takes care of updating cur_offset + and cur_size, via ... + (gsf_output_inc_cur_offset): ... a new static function, extracted + from ... + (gsf_output_write): ... there. + (gsf_output_real_vprintf): In this fallback code, don't call + gsf_output_write, but only dispatch to the Write virual method, + so that gsf_output_inc_cur_offset is not called twice. + * gsf/gsf-output.h (gsf_output_vprintf): New public method. + * gsf/gsf-output-stdio.c (gsf_output_stdio_vprintf): Adapt. + * gsf/gsf-output-transaction.c (gsf_output_trans_vprintf): Likewise. + * gsf/gsf-outfile-msole.c (gsf_output_class): New static variable, + which is set to point to GsfOutput class structure. + (gsf_outfile_msole_vprintf): Adapt. If it's a MSOLE_BIG_FILE, + call vprintf method of the underlaying file, else fall back to + gsf_output_class->Vprintf. + * gsf/gsf-output-memory.c (parent_class): New static variable. + (gsf_output_memory_vprintf): Use it too. Adapt to the new prototype. + +2004-07-21 Stepan Kasal + + Make the two fseek() wrappers more consistent. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek): Fix the overflow + checking. + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek): Set errno=0 + before calling fseek(). + +2004-07-21 Stepan Kasal + + Gnomish autogen.sh uses ACLOCAL_FLAGS, if some of the macros are + in nonstandard places. If you touch configure.in then, aclocal.m4 + is regenerated, but without ACLOCAL_FLAGS. This change ensures + that ACLOCAL_FLAGS is propagated to the Makefile. + + * configure.in: AC_SUBST(ACLOCAL_FLAGS) + * Makefile.am: ACLOCAL_AMFLAGS = @ACLOCAL_FLAGS@ + +2004-07-20 Stepan Kasal + + * gsf/gsf-output-stdio.c: Check for overflow + +2004-07-09 Stepan Kasal + + * gsf/gsf-infile-zip.c (zip_find_trailer): Remove the + "overflow check"; it can never catch anything. + + * gsf/gsf-output-memory.c (MAX_STEP): Parenthesize. + (gsf_output_memory_expand): Fix the overflow checking. + (gsf_output_memory_seek): make use of G_GNUC_UNUSED, instead of void + reference. + +2004-07-12 Stepan Kasal + + * gsf/gsf-output-iochannel.c (GET_OUTPUT_CLASS): Remove unused macro. + * gsf/gsf-structured-blob.c (GET_CLASS): Likewise. + +2004-06-15 Jody Goldberg + + * gsf/gsf-utils.c (gsf_input_dump) : flush the stream when we're just + using stdio. + +2004-07-04 J.H.M. Dassen (Ray) + + * configure.in: recheck all PKG_CHECK_MODULES for libgsf for + libgsf-gnome as well, so as not to trip on unresolved symbols with a + -Wl,-z,defs build. + +2004-07-03 Jody Goldberg + + * configure.in : post release bump + +2004-07-03 Jody Goldberg + + * Release 1.10.0 + +2004-07-01 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_vprintf) : premature + optimization is the root of all evil. We can not directly write + small block data because it will be in the wrong place and will miss + the transition to large block. This is not a hugely common case and + does not need such special attention. + +2004-06-25 Jody Goldberg + + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek) : conditionalize the + use of fseeko. + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek) : ditto. + * gsf/gsf-outfile-msole.c : Extend Stuart's work to use the internal + block sizes rather than keeping them global. + +2004-06-25 Jody Goldberg + For : Stuart Cunningham + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek) : use fseeko + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek) : ditto. + * gsf/gsf-outfile-msole.c : rework to honor the requested block sizes + +2004-06-15 Morten Welinder + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new_uri): + Don't leak info components. Handle lack of get_file_info + supports. Rework make_local_copy case. Work around gnomevfs + get_file_info bogosity. + +2004-06-13 Jody Goldberg + + * configure.in : bump to 1.10.0 to handle all the signature changes in + return values. + * *.[ch] : return the interesting base type rather than the derived + type for *_new. + +2004-06-11 Morten Welinder + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new): Change + return type to plain GsfInput*. + (gsf_input_gnomevfs_new_uri): Change return type to plain + GsfInput*. If seek is not supported, snarf a local copy. + +2004-06-06 Dom Lachowicz + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new): Better + solution for Morten's problem. + +2004-05-26 Morten Welinder + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new): Handle + failure to parse URI. + +2004-05-20 Dom Lachowicz + + * gsf/gsf-outfile-stdio.c: mkdir() has a different prototype on win32 + +2004-05-17 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : work around odd files from + softmaker, seems like they consider dirs to be rootdirs ?? + +2004-05-17 Morten Welinder + + * gsf/gsf-utils.c (gsf_le_get_double, gsf_le_set_double): Attempt + ARM fix. Fix various #error messages. + +2004-05-15 Jody Goldberg + + * configure.in : post release bump + +2004-05-15 Jody Goldberg + + * Release 1.9.1 + +2004-05-11 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_out_set_doc_type) : new. + + * doc/gsf-sections.txt : more cleanup, still ugly but at least it's + somewhat better. + * doc/gsf-docs.sgml : drop the useless Gsf section + +2004-05-09 Jody Goldberg + + * s/ZipDirent/GsfZipDirent + * s/ZipVDir/GsfZipVDir + +2004-05-09 Dom Lachowicz + + * gsf/gsf-infile-zip.c: Don't pollute the global namespace + * gsf/gsf-outfile-zip.c: Ditto + * gsf/gsf-zip-impl.h: Ditto + * gsf/gsf-zip-utils.c: Ditto + +2004-05-09 Dom Lachowicz + + * gsf/gsf-infile-stdio.c: Fix non-static definition of 'parent_class' + * gsf/gsf-outfile-stdio.c: Ditto + +2004-05-07 James M. Cape + + * doc/gsf-sections.txt: Hide type macros. + * gsf/gsf-output.c: s///. + +2004-05-06 Jody Goldberg + + http://bugzilla.gnome.org/show_bug.cgi?id=141899 + * doc/Makefile.am : Apply patch from James Cape + +2004-05-05 J.H.M. Dassen (Ray) + + * doc/Makefile.am: Install docs in the $(DOC_MODULE) subdir of + $(HTML_DIR) rather than in $(HTML_DIR) itself. + +2004-05-05 Jody Goldberg + + * configure.in : post release bump + +2004-05-04 Jody Goldberg + + * Release 1.9.0 + +2004-05-04 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_start_element) : support merging of + content from a node and some of it's children + (gsf_xml_in_end_element) : ditto. + (gsf_xml_in_characters) : ditto. + (sf_xml_in_doc_new) : kludge to support the old interface but still + allow new semantics. + +2004-05-01 Dom Lachowicz + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new_uri) : Don't + require gnome-vfs-method.h + + * gsf-gnome/gsf-output-gnomevfs.c (gsf_output_gnomevfs_new_uri): we + require random access. + + * gsf-win32/gsf-input-win32.c: fix seek's return value in the win32 + IStream input. + +2004-04-28 Jody Goldberg + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new_uri) : we + require random access. + +2004-04-26 Jody Goldberg + + * doc/Makefile.am : steal a few things from gtk-doc.make to get things + building. A full jump to gtk-doc.make directly is failing, dunno + why + + * Makefile.am : Remove the AUTOMAKE_OPTIONS = 1.4 that disabled the + DISTCHECK_CONFIGURE_FLAGS + +2004-04-24 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : placate the bogus + -fstrict-aliasing gods. gcc is being stupid. + + * configure.in : call this 1.9.0 + +2004-04-27 Dom Lachowicz + + * gsf/gsf-output-bzip.c (gsf_output_bzip_write): If the output + buffer turns full on the last deflate, empty the buffer. + +2004-04-24 Morten Welinder + + * gsf/gsf-output-gzip.c (gsf_output_gzip_write): If the output + buffer turns full on the last deflate, empty the buffer. + +2004-04-05 Jody Goldberg + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_seek) : fix sense + of return. This code is clearly not being used. A year and a half + and no one noticed ??? + +2004-03-31 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Plug leak. + +2004-03-31 Michael Meeks + + * tests/test-msvba-zip.c (find_match): + size limit the matches to the available bits for + storing the match length (doh). & make debug nicer. + +2004-03-16 Morten Welinder + + * gsf/gsf-output.c (gsf_output_finalize): Chain up. + * gsf/gsf-shared-memory.c (gsf_shared_memory_finalize): Chain up. + * gsf-gnome/gsf-shared-bonobo-stream.c + (gsf_shared_bonobo_stream_finalize): Chain up. + +2004-03-12 Michael Meeks + + * gsf/gsf-infile-msvba.c (vba_dir_read), + * tests/test-msvba-zip.c (decode_dir): + simplify / treat op 9 as the quirk-meister. + +2004-03-11 Michael Meeks + + * tests/test-msvba-zip.c (decode_dir): better + quirk understanding. + (find_match): remove unnecessary hacks. + +2004-03-10 Michael Meeks + + * tests/test-msvba-zip.c (decode_dir): impl. + a good run at enterpreting 'dir'. + + * tests/test-msvba-zip.c (do_compress): bin nasty + 3 byte header store / restore and generate header + on the fly. + +2004-03-09 Michael Meeks + + * tests/test-msvba-zip.c (find_match): shrink dodgy + looking matches. + +2004-03-08 Michael Meeks + + * tests/test-msvba-zip.c (output_match): add a + small/stupid LZSS compressor. + +2004-03-08 Michael Meeks + + * tests/test-msvba-zip.c: add for compressing/decompressing + 'dir' (or other pure compressed) streams. + + * gsf/gsf-msole-utils.c (gsf_msole_inflate): move from + * gsf/gsf-infile-msvba.c (gsf_vba_inflate): here. + +2004-03-01 Jody Goldberg + + * configure.in : drop -Wmissing-format-attribute because it was + irritating me. + +2004-03-01 Jody Goldberg + + * gsf/gsf-outfile-stdio.c : + * gsf/gsf-infile-stdio.c : Some utility wrappers to pull or push from + a directory tree. + * tests/test-dump-msole.c : + * tests/test-restore-msole.c : tests for it. + +2004-02-24 Dom Lachowicz + + * configure.in: Add Win32 stuff + * libgsf-win32-1.pc.in: Ditto + * Makefile.am: Ditto + * gsf-win32/Makefile.am: Win32 build system + +2004-02-05 Jon K Hellan + + * configure.in: Fix typo. + +2004-02-05 Tomasz K³oczko + + * Makefile.am: Added "DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc" + for force correct pass build documentation during "make dist" + (like in many other GNOME projects). + Added gtk-doc.make to EXTRA_DIST for generate correct tar ball on + "make dist". + * configure.in: Removed old on place defined gtk-doc suport and added use + GTK_DOC_CHECK([1.0]). + +2004-01-30 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_fatal_error) : Looks like Daniel has + added another field + +2004-01-30 Jody Goldberg + + http://bugzilla.gnome.org/show_bug.cgi?id=130596 + * configure.in : apply the patch + +Wed Jan 28 00:43:36 2004 Matthias Clasen + + * doc/Makefile.am (EXTRA_HFILES): Add ../gsf-gnome/*.h to give + gtk-doc a chance to pick up declarations from there. (Partial fix + for bug #132661. + +2004-01-20 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_start_element) : minor portability fix. + +2004-01-18 Dom Lachowicz + + * gsf/gsf-msole-utils.c: Country code for Albania is sq_AL not al_AL + * gsf-win32/*.c: Some work on the IStream input and output + +2003-12-09 Dom Lachowicz + + * gsf/*.c: Documentation + +2003-12-06 Jody Goldberg + + * gsf/gsf-infile-msvba.c : Major work. + We can now extract the compressed source for all of our sample + files. There's still lots of unknowns, but at least the code + is visible now. The next step will be looking at the p-code + +2003-11-28 Jody Goldberg + + * gsf/gsf-utils.c (gsf_input_hex_dump) : new. + (gsf_mem_dump_full) : expand the interface a bit. + +2003-11-03 Jody Goldberg + + * gsf/Makefile.am (uninstall) : make the impl headers for the base + interfaces public. + +2003-10-29 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_prop_parse) : The anal check should + take the prevailing char width also as noted by Xavier Roche. + + * gsf/gsf-infile-msole.c (ole_init_info) : Doh! do not double convert + to native endianness. Fixes error reading files > 13.6 Meg on sparc + and alpha as noted by Xavier Roche. + +2003-10-21 Jody Goldberg + + * gsf/gsf-msole-utils.c : Make the codepage arguments int to allow + smooth handling of bogus files that encode the codepage as an int + and break the utf-8 page '65001' because it looks like -535 + +2003-10-09 Jody Goldberg + + * libgsf-gnome-1.spec.in : An old patch from Joseph Frazee + +2003-09-29 Jody Goldberg + + * gsf/gsf-infile-msole.c (gsf_infile_msole_new) : as noted by Nick + Lamb a failure should not change the file pos of @input. + +2003-09-23 Jody Goldberg + + * configure.in : downgrade. No need to force a version bump yet. + * gsf/gsf-libxml.c (gsf_xml_parser_context_full) : use a _full version + internally because that seems cleaner than manually tweaking pointers. + However, its a cosmetic change and not worth a version bump. + +2003-09-22 Jody Goldberg + + * configure.in : jump to 1.9.0 for api change. + + * gsf/gsf-libxml.c : Initialize sax handler correctly to make sure + they work with libxml2 2.6.0. + (gsf_xml_parser_context) : take a sax handler and user data so taht we + can initialize it on creation. + +2003-09-21 Tor Lillqvist + + * libgsf-zip.in: New file. + + * configure.in: Expand it. + + * Makefile.am (EXTRA_DIST): Distribute it. + +2003-09-13 Jody Goldberg + + * configure.in : post release bump to 1.8.3 for now. + If this becomes the basis for the interleaved write support it will + jump to 1.9 without a release. + +2003-09-12 Jody Goldberg + + * Release 1.8.2 + +2003-09-12 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : libole2 depends + on all entries having names. Hard code 'Root Entry' for the root. + +2003-08-24 Dom Lachowicz + + * win/libgsf.ds*: Add win32 project files, from Jeremy Davis + * gsf/*: Some casts and ifdefs to let this puppy build on win32 using + MSVC. Also from Jeremy Davis, with some touch-up work by myself. + * configure.in: check for + +2003-08-03 Jody Goldberg + + * gsf/gsf-outfile-msole.c : some initial work to define an interface + for using non-default block sizes. We're just managing these values + not using them yet. + +2003-08-02 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_make_bat) : weaken the post condition + from error -> warning in the event that a BAT is missing a valid + terminator. We've already loaded a BAT, and we're sure that it is + not too big. Hopefully this will allow some of the data to be + restored. + +2003-08-01 Jody Goldberg + + For Stuart Cunningham + * gsf/gsf-infile-msole.c (gsf_infile_msole_read) : another patch to + fix non-default sector size support. + +2003-07-17 Jody Goldberg + + * gsf/gsf-infile-zip.c (zip_dup) : take an error arg. + (zip_child_init) : ditto. + (gsf_infile_zip_dup) : use the error from zip_dup and zip_child_init. + + * gsf/gsf-infile-impl.h : Take GError args for child_by_* virtuals. + We can not expose them yet. + * gsf/gsf-structured-blob.c (blob_child_by_index) : fix here. + (blob_child_by_name) : and here. + * gsf/gsf-infile-ar.c : and here. + * gsf/gsf-infile-msvba.c : and here. + + * gsf/gsf-infile-msole.c (ole_dup) : catch gsf_input_dup failures + for the underlying source, and take a GError arg. + (gsf_infile_msole_dup) : pass the new err arg to ole_dup and use error + from ole_dup directly. No need to cruft another one up. + (gsf_infile_msole_new_child) : Take a GError arg to pass to ole_dup. + +2003-07-15 Jody Goldberg + + For Stuart Cunningham + * gsf/gsf-infile-msole.c (ole_get_block) : fix ole block seeking in + 4k-sector files + +2003-07-03 Jody Goldberg + + For : Stuart Cunningham + * gsf/gsf-infile-msole.c (ole_dirent_new) : store the directory's CLSID + (gsf_infile_msole_get_class_id) : new. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : store the CLSID + (gsf_outfile_msole_set_class_id) : new. + (gsf_outfile_msole_init) : be really anal and ensure the CLSID is 0. + +2003-07-02 Jody Goldberg + + * gsf/gsf-infile-msole.c (gsf_infile_msole_new_child) : Even if a + directory claims to have a size set it to 0. Thanks to the AAF + people for the test case. + +2003-06-28 Jody Goldberg + + * doc/Makefile.am : fix the case when gtk-doc is not available + +2003-06-20 Morten Welinder + + * gsf/gsf-input-gzip.c (gsf_input_gzip_read): Handle premature end + of stream. + +2003-06-21 Jody Goldberg + + As per ryang@bway.org : + * README : s/automake/autoconf/ and add automake details. + +2003-06-15 Jon K Hellan + + * configure.in: Remove test for obsolete orbit-python module. + +2003-06-09 J.H.M. Dassen (Ray) + + * debian/*: Updated debianisation. + +2003-06-07 Jody Goldberg + + * configure.in : post release version bump + +2003-06-07 Jody Goldberg + + * Release 1.8.1 + +2003-06-06 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_out_simple_int_element) : new util. + (gsf_xml_out_simple_float_element) : ditto. + +2003-05-14 J.H.M. Dassen (Ray) + + * gsf/Makefile.am: Added $(LIBGSF_LIBS) to libgsf_1_la_LIBADD to get + complete inter-library dependency information. + +2003-05-13 Dom Lachowicz + + * COPYING.LIB: update the the version of the LGPL license we're + actually licensed under + +2003-05-13 Dom Lachowicz + + * libgsf-1.spec.in: Updates from Rui + +2003-05-12 Morten Welinder + + * gsf/gsf-output-gzip.c (gsf_output_gzip_finalize): Plug + truck-sized leak. + +2003-05-12 Jody Goldberg + + * configure.in : post release version bump + +2003-05-11 Jody Goldberg + + * Release 1.8.0 + +2003-04-29 Dom Lachowicz + + * gsf-win32/gsf-input-istream.[ch]: IStream based input. Untested + * gsf-win32/gsf-output-istream.[ch]: IStream based output. Untested + +2003-04-29 Morten Welinder + + * gsf/gsf-msole-utils.c + (gsf_msole_iconv_open_codepage_for_import): Try MACROMAN as alias + for 10000. + +2003-04-28 Morten Welinder + + * gsf/gsf-msole-utils.c + (gsf_msole_iconv_open_codepage_for_import): Remove code + duplication. + +2003-04-21 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : terminate the name before + conversion. + +2003-04-15 Morten Welinder + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): FREEBSD have broken + mmap -- we must keep the file descriptor around. + +2003-04-09 Jody Goldberg + + From Xavier Roche + * gsf/gsf-msole-utils.c (msole_prop_parse) : gsize is not always + guinit32. Fixes sparc-64 problem. + * gsf/gsf-infile-msvba.c (vba3_dir_read) : ditto. + +2003-04-01 Jody Goldberg + + * gsf/gsf-impl-utils.h : Add utils for objects in plugins + +2003-03-20 Dom Lachowicz + + * configure.in: Better checks for bz2 + +2003-03-20 Morten Welinder + + * gsf/gsf-input-bzip.c (gsf_input_memory_new_from_bzip): Warning + killer. + + * gsf/gsf-libxml.c (gsf_xml_in_doc_new): Kill warning. + +2003-03-09 Jody Goldberg + + * Relicense from GPL -> LGPL + +2003-03-05 Dom Lachowicz + + * NEWS: update for correctness and mention AR infile + * README: typo police + +2003-03-05 Jody Goldberg + + * gsf/gsf-libxml.c : More morten warnings + +2003-03-05 Morten Welinder + + * gsf/gsf-input-memory.c (gsf_input_memory_seek): Fix return type. + + * gsf/gsf-input.c (gsf_input_seek): Fix failure return. + +2003-03-05 Morten Welinder + + * gsf/gsf-infile.c (gsf_infile_num_children): Fix failure return + value. + (gsf_infile_name_by_index): Ditto. + (gsf_infile_child_by_index): Ditto. + (gsf_infile_child_by_name): Ditto. + * gsf/gsf-outfile.c (gsf_outfile_new_child): Ditto. + +2003-03-04 Dom Lachowicz + + * gsf/gsf-zip-impl.h: s/off_t/gsf_off_t + * gsf/gsf-infile-ar.[ch]: AR infile. DOES NOT YET WORK + +2003-02-23 Dom Lachowicz + + * gsf/gsf-input.c (gsf_input_copy): remove == TRUE for Morten + +2003-02-22 Dom Lachowicz + + * gsf/gsf-input.c (gsf_input_uncompress): Support uncompressing BZ2 + streams as well, optionally + +2003-02-22 Dom Lachowicz + + * gsf/gsf-output-bzip.c: Restructure things so that it's possible to + build without bzip2 support + +2003-02-22 Dom Lachowicz + + * gsf/gsf-input-textline.c: Replace g_realloc with g_renew + * gsf/gsf-output-memory.c: Ditto + +2003-02-21 Dom Lachowicz + + * gsf/gsf-input-bzip.c: Implement this + * gsf/gsf-input-memory.[ch]: New function: gsf_input_memory_new_clone + * gsf/Makefile.am: Build bz2 importer, distribute header + * tests/test-bzip.c: New test + * tests/Makefile.am: Add new test + +2003-02-20 Dom Lachowicz + + * gsf/gsf-input-bzip.[ch]: Stubs for a BZ2 input I'm working on + +2003-02-18 Dom Lachowicz + + * gsf/gsf-input.c (gsf_input_class_init): Install GObject properties + (gsf_input_get_property): Ditto + (gsf_input_set_property): Ditto + + * gsf/gsf-output.c (gsf_output_class_init): Install GObject properties + (gsf_output_get_property): Ditto + (gsf_output_set_property): Ditto + +2003-02-14 Dom Lachowicz + + * configure.in: Emit a warning instead of breaking if VFS and Bonobo + aren't found, but --without-gnome wasn't specified. Makes the KDE folk + happy. + +2003-02-11 Jody Goldberg + + * configure.in : compartmentalize the bzip config tests, and trust + libtool for the dependent libraries enough to not mention them in + the pkg-config file + + * gsf/gsf-output-bzip.c : improve the conditionalization. + + * gsf/gsf-input-iochannel.c (gsf_input_memory_new_from_iochannel) : + warning suppression. + +2003-02-09 Dom Lachowicz + + * configure.in: Changes to (optionally) compile bz2 functionality + * Makefile.am: Ditto + * gsf/Makefile.am: Ditto + * tests/Makefile.am: Ditto + * gsf/gsf-output-bzip2.c: Changes to optionally compile parts of this + +2003-02-09 Dom Lachowicz + + * tests/test-out-bzip.c: Tester for new BZip2 output + * gsf/gsf-impl-utils.h: Correct typo + * gsf/gsf-output-gzip.c: Fix memory leak (leaked buffer) + * gsf/gsf-output-bzip.[ch]: New output class, not currently built + +2003-02-09 Dom Lachoiwcz + + * gsf/gsf-input-iochannel.[ch]: Rework as per Jody's suggestions. Now + it is a utility constructor. + +2003-02-09 Dom Lachowicz + + * gsf/gsf-input-iochannel.c: Fixed iochannel. Unfortunately uses memory + backend because there's no way to query the size of an IOChannel + +2003-02-07 Rodrigo Moya + + * gsf/gsf-input-iochannel.[ch]: new GIOChannel based input. + +2003-02-07 Dom Lachowicz + + * gsf/gsf-doc-meta-data.[ch]: Clean API a bit to include consts, gsize + +2003-02-05 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : clip long names, + and do not output a name for the root file. + +2003-02-04 Dom Lachowicz + + * Changed below commit to use g_new instead of g_malloc + typecast, at + Jody's and Morten's request + +2003-02-01 Dom Lachowicz + + * gsf/gsf-infile-msole.c + * gsf/gsf-infile-zip.c + * gsf/gsf-input-gzip.c + * gsf/gsf-input-stdio.c + * gsf/gsf-input-textline.c + * gsf/gsf-outfile-msole.c + * gsf/gsf-output-gzip.c + * gsf/gsf-output-memory.c + * gsf/gsf-utils.c + * gsf-gnome/gsf-input-bonobo.c + * gsf-gnome/gsf-input-gnomevfs.c: More castings needed + +2003-02-01 Dom Lachowicz + + * gsf/gsf-infile-msole.c: Some castings to help things build using + MSVC++ + * gsf/gsf-msole-utils.c: Ditto + +2003-01-31 Dom Lachowicz + + * test/*.c: Correctness fixes in the testcases. No need to unref a null + object + +2003-01-29 Dom Lachowicz + + * *: With Jody's permission, change all _new() calls to return the + derived/subclassed type, instead of the mix we had before + * tests/*: Updated to conform with above + +2003-01-28 Jody Goldberg + + * configure.in : post release version bump + +2003-01-28 Jody Goldberg + + * Release 1.7.2 + +2003-01-24 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xml_in_start_element) : be a touch more anal. + +2003-01-24 Jody Goldberg + + * configure.in : remove -Wunreachable-code it was damn irritating and + mostly wrong. + + * gsf/gsf-msole-utils.c : warning suppression. + + * gsf/gsf-libxml.c (gsf_xml_in_start_element) : support default + namespaces. + (gsf_xml_in_end_element) : ditto. + (gsf_xml_in_start_document) : ditto. + +2003-01-23 J.H.M. Dassen (Ray) + + * configure.in: Calculate MAJOR_VERSION_PLUS_MINOR_VERSION. + +2003-01-22 Jody Goldberg + + * gsf/gsf-libxml.c : Rename everything (again) and add namespace + support for the import wrappers. + + * configure.in : bump version to 1.7.1 to reflect the major changes in + the xml import/export api. + +2003-01-22 J.H.M. Dassen (Ray) + + * gsf/gsf-utils.h, gsf/gsf-utils.c (gsf_base64_encode_close, + gsf_base64_encode_step), gsf/gsf-input.c (gsf_input_copy, + gsf_input_uncompress), + gsf-input-textline.c (gsf_input_textline_utf8_gets): Fixed signedness. + +2003-01-21 J.H.M. Dassen (Ray) + + * gsf/gsf-msole-utils.c: Mark the 11644473600 constant as ULL. + +2003-01-21 J.H.M. Dassen (Ray) + + * gsf/gsf-input.c: The gzip signature consists of unsigned chars. + +2003-01-21 J.H.M. Dassen (Ray) + + * gsf/gsf-libxml.c, gsf/gsf-output-memory.c, gsf/gsf-output.c, + gsf/gsf-structured-blob.c, gsf/gsf-zip-utils.c: #include for + strcmp(), strlen() and memcpy(). + +2003-01-21 J.H.M. Dassen (Ray) + + * configure.in: Redirect grep output to /dev/null instead of using -q + which Morten pointed out doesn't work on Solaris. + +2003-01-20 J.H.M. Dassen (Ray) + + * configure.in: Check if -D_POSIX_SOURCE is needed for the fdopen() + prototype in a cleaner fashion; might fix problems on Mac OS X. + +2003-01-09 Morten Welinder + + * gsf/gsf-input-stdio.c (gsf_input_stdio_read): Handle eof. + +2003-01-08 Dom Lachowicz + + * gsf/gsf-output-iochannel.c (gsf_output_iochannel_write): ensure + large writes happen + + * gsf-gnome/gsf-output-gnomevfs.c (gsf_output_gnomevfs_write): + Ditto + + * gsf/gsf-input-stdio.c (gsf_input_stdio_read): Ensure that large + reads happen + + * gsf-gnome/gsf-output-gnomevfs.c (gsf_input_gnomevfs_read) : + Ditto + +2003-01-08 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : fix off by 1 in + calculation of how many meta bats are required. Store correct + position of initial xbat, the original code did not take small + blocks into account. + + * gsf/gsf-infile-msole.c (ole_make_bat) : add protection against + cycles. + +2003-01-07 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_output_xml_add_attr_cstr_safe) : clone over + logic for escaping strings from libxml and revamp it to be more + libgsf-ish. + + * gsf/gsf-utils.c : rename the base64 utilities and clean up the types + and const to match gsf conventions. + +2003-01-06 Dom Lachowicz + + * gsf/gsf-output-transaction.c : New capability - transacted + outputs. Not thoroughly tested. + + * tests/test-trans.c : Transaction testsuite for above + + * gsf/gsf-output-stdio.c (gsf_output_stdio_write) : Put write + inside of a loop to ensure that large writes are carried out + properly and feof is properly detected + + * TODO: remove the "try to support canceling a write" item since + such functionality is supported via transactions + +2003-01-05 Tor Lillqvist + + * configure.in: Check for lstat() and readlink(). Check for + native Win32 and for Win32 in general (including Cygwin). Set + automake conditionals OS_WIN32 and PLATFORM_WIN32 accordingly. + Add AC_LIBTOOL_WIN32_DLL. + + * gsf/Makefile.am: On Win32, use -no-undefined, and install (and + uninstall) import libraries. + + * gsf/gsf-output-stdio.c: Add workaround #defines for various Unix + stuff on Win32. Bypass follow_symlinks() unless HAVE_READLINK. + +2003-01-05 Jody Goldberg + + * gsf/gsf-utils.c : Pull in the bas64 utilites from evolution. Unused + for now. + +2003-01-05 Jody Goldberg + + * gsf/gsf-output.c (cb_output_unwrap) : renamed from + cb_output_wrap_screwup and weaken restrictions. The weak ref + handler is called before the wrappers finalize, so we can not always + unwrap in such a way as to avoid a warning. Just handle it silently + now. + (gsf_output_wrap) : ditto. Weaken the requirement of the wrapper to + be a GObject, no need for a full fledged GsfOutput. + (gsf_output_unwrap) : ditto. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : fix reversal of + arguments for the wrapping. + (gsf_outfile_msole_write) : ditto. + * gsf/gsf-outfile-zip.c (zip_init_write) : ditto. + (zip_close_stream) : ditto. + + * gsf/gsf-libxml.c : rename xml_sax -> GsfInputXML + (GsfOutputXML) : new + +2003-01-03 Jody Goldberg + + * gsf/gsf-impl-utils.h : add hooks for interfaces + +2002-12-24 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_metadata_read) : patch some warnings. + +2003-01-01 J.H.M. Dassen (Ray) + + * debian/changelog, debian/control, debian/libgsf-1-dev.dirs, + debian/libgsf-1-dev.files, debian/rules: Updated. + +2002-12-30 Jon K Hellan + + * gsf/gsf-msole-utils.c (msole_prop_parse): Check if res is a GValue. + (gsf_msole_metadata_read): Check if v is a GValue and holds an int + before reading codepage. Check if v is a GValue before unsetting. + +2002-12-23 Morten Welinder + + * gsf/gsf-libxml.c (gsf_xml_output_buffer_new): Fix comment and + ref output to match gsf_libxml_close. + +2002-12-20 Morten Welinder + + * gsf/gsf-libxml.c (gsf_libxml_close): Plug leak. + +2002-12-19 Dom Lachowicz + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new_uri) : Able to + open URI objects as well as strings + + * gsf-gnome/gsf-output-gnomevfs.c (gsf_output_gnomevfs_new_uri) : ditto + +2002-12-11 Jody Goldberg + + * configure.in : post release version bump. + +2002-12-11 Jody Goldberg + + * Release 1.6.0 + +2002-12-10 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_lid_for_language) : Suggestion from + Nicolas Peninguy + +2002-12-10 Jody Goldberg + + * gsf/gsf-infile-msole.c (gsf_infile_msole_finalize) : do not unref + the info for the magic internal small block file it was already + removed. + (ole_info_get_sb_file) : do not create a reference loop from the info + to the small block file and back. Remove the default reference from + the magic internal small block file to the info. + +2002-12-10 Morten Welinder + + * gsf/gsf-structured-blob.c (blob_finalize): Link to the right + parent type. + + * gsf/gsf-outfile-zip.c (zip_dirent_new_out): Don't allocate and + throw away memory. + +2002-12-09 Jon K Hellan + + * gsf/gsf-msole-utils.c (msole_prop_parse): Fix typo. + +2002-12-09 Morten Welinder + + * gsf/gsf-outfile-zip.c (disconnect_children): Factor out from + zip_close_root. + (gsf_outfile_zip_finalize): Use here too. (This closes a leak if + closing fails.) + + * gsf/gsf-msole-utils.c (msole_prop_parse): Free the property + values until we figure out what to do with them. + + * gsf/gsf-infile-msole.c (gsf_infile_msole_finalize): Plug leak. + + * gsf/gsf-timestamp.c (gsf_timestamp_as_string): 64-bit fix. + +2002-12-04 Dom Lachowicz + + * gsf/gsf-input.c (gsf_input_copy): Copies a GsfInput to a GsfOutput. + Will probably be useful for some abiword stuff I'll be doing + + * tests/test-cp.c: New test program exercising gsf_input_copy + +2002-12-04 Morten Welinder + + * gsf/gsf-output-stdio.c (follow_symlinks): Fix error return + conventions. + (gsf_output_stdio_new): Clean up error messages. + +2002-12-03 Morten Welinder + + * gsf/gsf-output-stdio.c (gsf_output_stdio_close): Try much harder + restoring owner and permissions. Still not good. + (gsf_output_stdio_new): Simplify using g_path_get_dirname. + Respect non-writable files! + (follow_symlinks): Simplify using g_path_is_absolute and + g_path_get_dirname. Eliminate some race conditions. + +2002-11-29 Jon K Hellan + + * gsf/gsf-output-gzip.c (init_gzip): Return set error if + deflateInit2 fails. + (gzip_output_header): Add missing argument to time(). + +2002-11-27 Jon K Hellan + + * gsf/gsf-libxml.c (gsf_libxml_close): Change to do nothing. We + expect higher layers to close. + (gsf_xmlDocFormatDump): Use encoding argument. Don't call + xmlOutputBufferClose - libxml calls it for us via the callback we + supply. + + * gsf/gsf-libxml.[ch] (gsf_xmlDocFormatDump: Add encoding parameter. + +2002-11-27 Jon K Hellan + + * tests/Makefile.am (check_PROGRAMS): Add test-out-gzip.c + + * gsf/gsf-output-gzip.[ch]: New files. Gzip output. + + * gsf/Makefile.am (libgsf_1_la_SOURCES): Add gsf-output-gzip.c. + (libgsf_1_include_HEADERS): Add gsf-output-gzip.h. + +2002-11-25 Jon K Hellan + + * tests/test-outmem-printf.c (test): Adjust to new + gsf_output_memory_get_bytes API. + + * gsf/gsf-outfile-zip.c (root_register_child): Don't ref children + which are directories. + + * tests/test-zip-out-subdirs.c (test): Make close/unref strategy + the same as in test-cp-zip/test-cp-ole (with change above, this + works!). Test closing subdirs at different times in the lifecycle. + +2002-11-25 Jon K Hellan + + * gsf/gsf-outfile-zip.c (zip_init_write): Fail if already writing + to another stream in archive. Set "writing" flag in zip root to + indicate that we're writing to a stream. + (zip_close_stream): Unset "writing" flag in zip root to indicate + that we're now free to write to a new stream. + (zip_close_root): s/g_message/g_warning/. + + * tests/test-zip-out-subdirs.c (test): Close each substream before + starting to write to the next. + +2002-11-24 Jon K Hellan + + * gsf/gsf-outfile-zip.c (stream_name_len, + stream_name_write_to_buf): Stop recursing at root of zip archive, + i.e. don't append name of archive file to stream names. Take zip + rather than outfile argument. + (stream_name_build): Take zip rather than outfile argument. + (zip_dirent_new_out): Call stream_name_build with new signature. + +2002-11-24 Dom Lachowicz + + * gsf/gsf-ouput-iochannel.c (): New output sink. No IOChannel + input sink possible due to API limitations + + * gsf/gsf-input-stdio.c (_new): Open files with "rb" status + +2002-11-24 Dom Lachowicz + + * gsf/gsf-output-memory.c (gsf_output_memory_get_bytes): WARNING: + changed prototype + (gsf_output_memory_seek): Re-implement seek() in a saner fashion + (gsf_output_memory_write): ditto + (gsf_output_memory_vprintf): ditto + (gsf_output_memory_init): ditto + +2002-11-24 Dom Lachowicz + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_seek): Code + cleanup + +2002-11-24 Dom Lachowicz + + * gsf/gsf-output-memory.c (gsf_output_memory_seek): Implement + seek() by implementing a cursor as well as the existing nwritten + and capacity fields + (gsf_output_memory_write): ditto + (gsf_output_memory_vprintf): ditto + (gsf_output_memory_init): ditto + +2002-11-23 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_vprintf) : rename from + gsf_output_msole_vprintf to conform to naming convention. + (gsf_outfile_msole_class_init) : hook up the vprintf method and fix + some old cut-n-paste errors. + + * gsf/gsf-output.c (gsf_output_finalize) : free the new printf buf. + (gsf_output_init) : init the new printf buf. + (gsf_output_vprintf) : use a stream local buffer and handle older + version of glibc that did not return the required number of + characters. + +2002-11-23 Jon K Hellan + + * tests/test-zip-out-subdirs.c: New test program. Add. + + * tests/Makefile.am (check_PROGRAMS): Add test-zip-out-subdirs. + +2002-11-23 Jon K Hellan + + * tests/test-zip-out.c: New test program. Add. + + * tests/Makefile.am (check_PROGRAMS): Add test-zip-out. + + * gsf/gsf-outfile-zip.c (gsf_outfile_zip_finalize): Only free + vdirs from the root down. + (zip_trailer_write): Take no. of entries as a parameter, so that + the root_order array doesn't have to be live when we call this + function. + (zip_close_root): Slight tweak of Dom's fix. + +2002-11-23 Dom Lachowicz + + * gsf/gsf-outfile-zip.c (zip_close_root): Free the root_array and + unref the child outputs when closing the root directory + +2002-11-22 Dom Lachowicz + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Disable creating + backup copies of files, open files with "wb" status instead of + just "w" + +2002-11-22 Dom Lachowicz + + * gsf/gsf-output.c (gsf_output_puts): Check for null input + (gsf_output_vprintf): Don't use static internal buffer, will lead + to nasty race conditions and a memory-leak on shutdown + +2002-11-22 Jon K Hellan + + * tests/test-outmem-printf.c: New test program. Add. + + * tests/Makefile.am (check_PROGRAMS): Add test-outmem-printf. + + * gsf/gsf-output-memory.c (gsf_output_memory_vprintf): + New. vprintf implementation which uses g_vsnprintf directly + into buffer if there is space. + (gsf_output_memory_class_init): Initialize vprintf virtual. + +2002-11-22 Jody Goldberg + + * doc/Makefile.am : pull in newer magic from gtk. + * configure.in : ditto. + +2002-11-22 Jon K Hellan + + * gsf/gsf-outfile-msole.c (gsf_output_msole_vprintf): New. vprintf + implementation which falls through to the sink's implementation if + possible. + (gsf_outfile_msole_class_init): Initialize vprintf virtual. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_vprintf): New. vprintf + implementation which just falls through to vfprintf. + (gsf_output_stdio_class_init): Initialize vprintf virtual. + +2002-11-22 Jon K Hellan + + * tests/test-msole-printf.c: New test program. Add. + + * tests/Makefile.am (check_PROGRAMS): Add test-msole-printf. + +2002-11-21 Jon K Hellan + + * gsf/gsf-output.c (gsf_output_puts): Remove unused variable. + +2002-11-21 Jon K Hellan + + * gsf/gsf-libxml.c (gsf_libxml_write): Fix inverted + success/failure test. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_new): Set name + +2002-11-21 Jon K Hellan + + * gsf/gsf-output.[ch] (gsf_output_printf): New function. printf + for GsfOutput. + (gsf_output_puts): New function. fputs for GsfOutput. + + * gsf/gsf-output-impl.h (struct GsfOutputClass): Add Vprintf virtual. + + * gsf/gsf-output.c (gsf_output_class_init): Initialize to default + vprintf method. + (gsf_output_vprintf): New function: Default vprintf method. + + * tests/test-out-printf.c: New test program. Add. + + * tests/Makefile.am (check_PROGRAMS): Add test-out-printf. + +2002-10-28 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : be more careful about + invalid stream names. + +2002-10-30 J.H.M. Dassen (Ray) + + * debian/changelog, debian/control, debian/rules: updated. + * debian/shlibs.local: dropped. + +2002-10-26 Jody Goldberg + + * configure.in : post release version bump + +2002-10-26 Jody Goldberg + + * Release 1.5.0 + +2002-10-26 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_lid_to_codepage) : remove warning. + +2002-10-14 Jody Goldberg + + * gsf/gsf-output-memory.c (gsf_output_memory_finalize) : close != exit. + Chain to the parent, and keep the content around until detruction. + +2002-10-22 Dom Lachowicz + + * gsf/gsf-msole-utils.c + (gsf_msole_iconv_open_codepage_for_export): Fix bug where we used + UTF-8 regardless of the 'from' codepage + +2002-10-21 Dom Lachowicz + + * gsf/gsf-msole-utils.c (*): Large rewrite of the codepage handling + code. More functions, more complete, more flexible, etc... + +2002-10-18 Morten Welinder + + * gsf/gsf-input-textline.c (gsf_input_textline_ascii_gets): Handle + end-of-buffer case without asserting. + +2002-10-08 Morten Welinder + + * gsf/gsf-utils.c (gsf_filename_to_utf8): New function. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new): Ensure sane + filenames before putting them into error messages. + * gsf/gsf-output-stdio.c (follow_symlinks): Ditto. + (gsf_output_stdio_new): Ditto. + (gsf_output_stdio_close): Ditto. + * gsf/gsf-input-memory.c (gsf_input_mmap_new): Ditto. + +2002-10-01 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xmlSAX_prep_dtd) : support recursive + structures. + +2002-09-30 Jody Goldberg + + * configure.in : post release bump + +2002-09-30 Jody Goldberg + + * Release 1.4.0 + +2002-09-27 Jody Goldberg + + * gsf/gsf-structured-blob.c (gsf_structured_blob_read) : fix. + (gsf_structured_blob_write) : fix. + +2002-09-26 Jon K Hellan + + * gsf/gsf-output-memory.c: Remove debug printouts. + +2002-09-26 Jon K Hellan + + * gsf/gsf-output-memory.[ch] (gsf_output_memory_get_bytes): Take + 1st argument GsfOutputMemory instead of GsfOutput. + + * gsf/gsf-output-memory.c (struct _GsfOutputMemory): Add + 'capacity' member. + (gsf_output_memory_new): Don't duplicate work done in + gsf_output_memory_init. + (gsf_output_memory_expand): Encapsulate expansion and make it more + intelligent. + (gsf_output_memory_write): Use gsf_output_memory_expand. + (gsf_output_memory_init): Initialize capacity. + +2002-09-25 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_prop_read) : remove some debug spew + that snuck in. + +2002-09-24 Jody Goldberg + + * gsf/gsf-msole-utils.c : support unicode property names and values, + including some ugly heuristics to add the documented padding only + when using unicode (? what where they smoking ?) + +2002-09-23 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xmlSAX_prep_dtd) : typo + and make the errors more verbose. + +2002-09-20 Jody Goldberg + + * gsf/gsf-structured-blob.c (gsf_structured_blob_read) : handle out of + memory. + +2002-09-20 Jody Goldberg + + * gsf/gsf-libxml.c (gsf_xmlSAX_parse) : some initial work on utility + structures and routines to make building a sax parser easy. + + * gsf/gsf-structured-blob.c : new utility to read/write trees of + unparsed data. + +2002-09-19 Jon K Hellan + + * gsf/gsf-outfile-zip.h (enum GsfZipCompressionMethod): Define. + + * gsf/gsf-outfile-zip.[ch] + (gsf_outfile_zip_set_compression_method): New function. Set + compression method. + + * gsf/gsf-outfile-zip.c (struct _GsfOutfileZip): Add + compression_mehod member. + (zip_dirent_new_out): Set compression method. + (zip_header_write): Write current compression method. + (zip_init_write, zip_close_stream, gsf_outfile_zip_write): Handle + noncompressed streams. + (zip_header_write_sizes): New function. Write crc and sizes to + local file header. + (gsf_outfile_zip_init): Initialize compression method to deflated. + (gsf_outfile_zip_set_compression_method): New function. Set + compression method. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek): Fix typo. + +2002-09-19 Jon K Hellan + + * gsf/gsf-infile-zip.c (zip_read_dirents): Don't expect a file + header at the start of the archive. It's not required by the + specification, and e.g. self-extracting zips do not have one. + With this change, we can read self-extracting zips. + +2002-09-16 Jody Goldberg + + * gsf/gsf-output.c (gsf_output_close) : always close even if the + implementation failed. + (gsf_output_finalize) : free the error. + (gsf_output_init) : init the error. + (gsf_output_seek) : inver the return flag to be consistent with write. + (gsf_output_error) : new. + (gsf_output_set_error) : new. + + * gsf/gsf-output-stdio.c : borrow the temp file handling from gedit so + that we can handle setgid directories correctly. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_seek) : + invert the return type. + * gsf/gsf-outfile-zip.c (gsf_outfile_zip_seek) : ditto. + * gsf/gsf-output-memory.c (gsf_output_memory_seek) : ditto. + + * gsf/gsf-msole-utils.c (gsf_msole_metadata_write) : add some error + checking. + +2002-09-15 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_iconv_win_codepage) : fix warning. + + * configure.in : reorder the _BSD_SOURCE and _POSIX_SOURCE tests + because POSIX changes things under linux. + Add an lstat test + +2002-09-15 Jon K Hellan + + * tests/test-zip2.c: Add. + +2002-09-14 Rodrigo Moya + + * gsf/gsf-command-context.[ch]: added support for warnings. + (gsf_command_context_has_warnings, gsf_command_context_push_warning, + gsf_command_context_pop_warning): new functions. + +2002-09-14 Rodrigo Moya + + * gsf/gsf-command-context.[ch]: new class for command contexts, + stealing some implementation from GsfIOContext. + + * gsf/gsf-io-context.[ch]: base this class on GsfCommandContext. + +2002-09-14 Jon K Hellan + + * gsf/gsf-infile-zip.c (gsf_infile_zip_read): Fix reading + non compressed streams. + +2002-09-13 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_prop_read) : tweak boundary case + to match reality + +2002-09-14 Jon K Hellan + + * gsf/gsf-outfile-zip.[ch]: Really add this time. + + * gsf/gsf-infile-zip.c: gsf-zip-utils.h doesn't exist - don't + include it! + + * gsf/gsf-zip-utils.c: Ditto. + +2002-09-14 Jon K Hellan + + * tests/Makefile.am: Add test-cp-zip.c + +2002-09-13 Jon K Hellan + + * tests/test-cp-zip.c: Add a test program for zip export. + +2002-09-13 Jon K Hellan + + * gsf/gsf-zip-util.c: Add. + + * gsf/gsf-infile-zip.c (enum ZipCompressionMethod, struct + ZipDirent, struct ZipDir): Move to gsf-zip-impl.h. + (vdir_new, vdir_free, vdir_compare, vdir_add_child, + zip_dirent_free): Move to gsf-zip-utils.c. + (zip_dirent_new): Rename to zip_dirent_new_in. + (vdir_free, zip_info_unref): Add free_dirent parameter to + vdir_free. + (zip_child_init): Move before first use. + (gsf_infile_zip_finalize): Free zlib stream. + + * gsf/Makefile.am: Add gsf-zip-utils.c, gsf-outfile-zip.[ch] + +2002-09-12 Dom Lachowicz + + * gsf/Makefile.am: add gsf-output-memory + + * gsf/gsf-output-memory.c (_seek): fix seek type, compiles + + * gsf-gnome/Makefile.am: add gsf-output-bonobo + + * gsf-gnome/gsf-output-bonobo.c (): make compile + +2002-09-06 Jon K Hellan + + * gsf/gsf-input-gzip.c (init_zip): Factored out of gsf_input_gzip_new. + (gsf_input_gzip_new): See init_zip. + (gsf_input_gzip_dup): Dup source instead of sharing it, and + initialize zip context. + + * gsf/gsf-infile-zip.c (gsf_infile_zip_dup): Call zip_child_init. + +2002-09-04 Jon K Hellan + + * gsf/gsf-infile-zip.c (struct ZipDirent, struct _GsfInfileZip, + zip_dirent_new, zip_dirent_free, zip_update_stream_in, + gsf_infile_zip_read, zip_child_init, gsf_infile_zip_seek, + gsf_infile_zip_init): Move zlib context to GsfInfile object. It is + per opened stream, not per subfile. + (gsf_infile_zip_init, gsf_infile_zip_new): Initialize all fields + in gsf_infile_zip_init. + +2002-09-03 Jon K Hellan + + * gsf/gsf-input-gzip.c (check_header): Fix typo. + +2002-09-03 Jon K Hellan + + * gsf/gsf-libxml.c (gsf_libxml_read): Don't signal error when + reading len = 0. + + * gsf/gsf-input-gzip.c (check_header): Check signature before + seeking to end. Seeking to end is *expensive* if seek is slow in + underlying stream. + Add check that there's room for payload. + +2002-09-02 Jon K Hellan + + * gsf/gsf-infile-zip.c (struct _GsfInfileZip): Add seek_skipped. + (gsf_infile_zip_seek): Implement. As slow as gzip. + (zip_child_init): Initialize dirent->restlen, + dirent->crestlen. Don't call zip_update_stream_in. + (gsf_infile_zip_new): Initialize seek_skipped. + +2002-09-01 Jody Goldberg + + * tests/test-cat-zip.c : replace the old test with test-msole2.c + with s/msole/zip/ so that we get the end of file right. + +2002-08-31 Jody Goldberg + + * gsf/gsf-infile-zip.c (gsf_infile_zip_num_children) : return -1 for + non directories. + +2002-08-31 Jody Goldberg + + * gsf/gsf-timestamp.c : dummy up a quick implementation. + * gsf/gsf-msole-utils.c (msole_prop_parse) : support FILETIME. + +2002-08-30 Jody Goldberg + + * configure.in : remove -Wconversion because it was pissing me off. + +2002-08-30 Jody Goldberg + + * gsf/gsf-msole-utils.c (msole_prop_parse) : add some basic + implementation. + (msole_prop_id_to_gsf) : new. + +2002-08-29 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_prop_read) : conditionalize the + debug spew. + +2002-08-29 Jody Goldberg + + * gsf/gsf-msole-utils.c (gsf_msole_prop_parse) : new. + (gsf_msole_prop_read) : new. + (gsf_msole_metadata_read) : prepare to parse the actual properties. + +2002-08-28 Jody Goldberg + + * gsf/gsf-input-gzip.c (gsf_input_gzip_new) : restore the current file + position when sniffing for gzip fails. + +2002-08-28 Jody Goldberg + + * gsf/gsf-msole-metadata.c (gsf_msole_iconv_open_for_export) : moved + from gnumeric. + (gsf_msole_iconv_open_for_import) : ditto. + (gsf_msole_iconv_win_codepage) : ditto. + * gsf/gsf-utils.c (gsf_iconv_close) : ditto. + (gsf_extension_pointer) : moved from gnumeric, originally from libgnome. + +2002-08-26 Jon K Hellan + + * gsf-gnome/gsf-input-bonobo.[ch], + gsf-gnome/gsf-output-bonobo.[ch], + gsf-gnome/gsf-input-gnomevfs.[ch], + gsf-gnome/gsf-output-gnomevfs.c, gsf/gsf-infile-msvba.c, + gsf/gsf-input-gzip.h, gsf/gsf-input-impl.h, + gsf/gsf-input-memory.h, gsf/gsf-msole-impl.h, + gsf/gsf-output-impl.h, gsf/gsf-output-memory.h, + gsf/gsf-output-stdio.h, gsf/gsf-output.c, gsf/gsf-shared-memory.h, + gsf/gsf-zip-impl.h, gsf/gsf.h: Fix file headers - file name was + wrong. + +2002-08-26 Jon K Hellan + + * gsf/gsf-infile-zip.c (struct ZipVDir): Define struct to + represent a directory entry in a tree of contained files. + (struct ZipInfo): Add vdir. Move dirent_list here from + _GsfInfileZip. + (struct _GsfInfileZip): Add vdir. Remove dirent_list and dirent. + (vdir_new, vdir_free, vdir_child_by_name, vdir_child_by_index, + vdir_compare, vdir_add_child, vdir_insert): New + functions. Operations on file tree directories. + (zip_info_unref): Free dirent_list and vdir. + (zip_read_dirents): Renamed from zip_init_info. dirent_list now in + ZipInfo. + (zip_build_vdirs): New function. Build directory tree of contained + files. + (zip_init_info): New function, old name. Wraps zip_read_dirents + and zip_build_vdirs. + (gsf_infile_zip_dup): Copy vdir, not dirent. + (zip_update_stream_in, + (gsf_infile_zip_read): dirent now in vdir. + (zip_child_init): New function. Contains the parts of + gsf_infile_zip_new_child which operated on the zip file. + (gsf_infile_zip_new_child): Simplify and call zip_child_init. + (gsf_infile_zip_child_by_index, gsf_infile_zip_name_by_index): Use + vdir_child_by_index. + (gsf_infile_zip_child_by_name): Use vdir_child_by_name + (gsf_infile_zip_num_children): Count children in vdir. + (gsf_infile_zip_finalize): dirent_list is no longer freed here. + (gsf_infile_zip_init, gsf_infile_zip_new): Initialize vdir. + + * gsf/gsf-zip-impl.h (ZIP_NAME_SEPARATOR): Define path name + component separator for zip archives. + +2002-08-26 Morten Welinder + + * gsf/gsf.h: Don't include here. + * gsf/gsf-input.h: Do it here. + * gsf/gsf-output.h: And here. + + * configure.in: Take out -Wcast-align until someone fixes the + hundreds of things that violates it. + +2002-08-25 Jody Goldberg + + * configure.in : post release version bump + +2002-08-25 Jody Goldberg + + * Release 1.3.0 + +2002-08-22 Jon K Hellan + + * gsf/gsf-infile-zip.c (zip_find_trailer): Fix case when no match + is found first time round. + +2002-08-21 Jon K Hellan + + * gsf/gsf-infile-zip.c (zip_find_trailer): Don't try to read + beyond EOF. + +2002-08-21 Jon K Hellan + + * gsf/gsf-infile-zip.c (struct _GsfInfileZip): Add buf and + buf_size for inflating. + (zip_init_info, gsf_infile_zip_dup): Use g_error_new rather than + g_set_error. + (gsf_infile_zip_read): Fix segfaulting bug. Make inflate buffer a + private member of the class rather than a static. + (gsf_infile_zip_finalize): Free inflate buffer. + (gsf_infile_zip_new): Initialize inflate buffer. + + * tests/test-cp-msole.c: Revert 2nd arg to + gsf_input_read/write from gsf_off_t to size_t. + +2002-08-21 Mikael Hallendal + + * tests/test-textline.c (test): output argv[0] when printing + Usage. + +2002-08-20 Jody Goldberg + + * gsf-gnome/Makefile.am : depend on libgsf + +2002-08-20 Jon K Hellan + + * gsf-gnome/.cvsignore: Add. + +2002-08-19 Jon K Hellan + + * tests/test-cp-msole.c (clone): Cast 2nd arg to + gsf_input_read/write to gsf_off_t. + +2002-08-19 Jon K Hellan + + * gsf/gsf.h: Remove GsfSeekType. + + * gsf/gsf-input.[ch]: s/GsfSeekType/GSeekType/ in gsf_input_seek + signature. + + * gsf/gsf-output.[ch]: s/GsfSeekType/GSeekType/ in gsf_output_seek + signature. + + * gsf/gsf-input-impl.h (GsfInputClass) s/GsfSeekType/GSeekType/ in + Seek method. + + * gsf/gsf-output-impl.h (GsfOutputClass) Ditto. + + * gsf/gsf-infile-msole.c (gsf_infile_msole_seek): + s/GsfSeekType/GSeekType/ in signature. + + * gsf/gsf-infile-msvba.c (gsf_infile_msvba_seek): Ditto. + + * gsf/gsf-infile-zip.c (gsf_infile_zip_seek): Ditto. + + * gsf/gsf-input-gzip.c (gsf_input_gzip_seek): Ditto. + + * gsf/gsf-input-memory.c (gsf_input_memory_seek): Ditto. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek): Ditto. + + * gsf/gsf-input-textline.c (gsf_input_textline_seek): Ditto. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_seek): Ditto. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek): Ditto. + + * gsf-gnome/gsf-input-bonobo.c (gsf_input_bonobo_seek): Ditto. + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_seek): Ditto. + + * gsf-gnome/gsf-output-bonobo.c (gsf_output_bonobo_seek): Ditto. + + * gsf-gnome/gsf-output-gnomevfs.c (gsf_output_gnomevfs_seek): Ditto. + + * gsf/gsf-input.c (gsf_input_seek): Replace GSF_SEEK_SET, CUR, END + with G_SEEK_SET, CUR, END. + + * gsf/gsf-input-gzip.c (gsf_input_gzip_seek): Ditto. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek): Ditto. + + * gsf/gsf-output.c (gsf_output_seek): Ditto. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_seek): Ditto. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek): Ditto. + + * gsf-gnome/gsf-input-bonobo.c (gsf_input_bonobo_seek): Ditto. + + * gsf-gnome/gsf-input-gnomevfs.c (gsf_input_gnomevfs_seek): Ditto. + + * gsf-gnome/gsf-output-bonobo.c (gsf_output_bonobo_seek): Ditto. + + * gsf-gnome/gsf-output-gnomevfs.c (gsf_output_gnomevfs_seek): Ditto. + + * gsf/gsf-infile-msole.c (ole_get_block, ole_init_info, + gsf_infile_msole_read, gsf_infile_msole_new_child): + s/GSF_SEEK_SET/G_SEEK_SET/. + + * gsf/gsf-infile-msvba.c (vba_inflate, vba56_dir_read, + gsf_infile_msvba_seek, gsf_infile_msvba_seek): Ditto. + + * gsf/gsf-infile-zip.c (zip_find_trailer, zip_dirent_new) + (zip_init_info, zip_init_info, zip_update_stream_in) + (gsf_infile_zip_new_child): Ditto. + + * gsf/gsf-input-gzip.c (check_header, check_header): Ditto. + + * gsf/gsf-input.c (gsf_input_dup, gsf_input_uncompress): Ditto. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_seek, + gsf_outfile_msole_close): Ditto. + +2002-08-18 Jon K Hellan + + * configure.in: Revert today's first change to the file, but keep + the second. + +2002-08-18 Jon K Hellan + + * configure.in: See below. Hope it's true this time. + +2002-08-18 Jon K Hellan + + * configure.in: Make --without-gnome work. + +2002-08-18 Jon K Hellan + + * acinclude.m4: Change it to just a comment referring to + python/README-python. + + * acinclude.m4.am15: Added. A copy of the previous version, but no + longer commented out. See python/README-python. + +2002-08-17 Jody Goldberg + + * gsf/Makefile.am : install the xml header + +2002-08-17 Jon K Hellan + + * libgsf-gnome-1.pc.in (Cflags): Fix Libs line. + +2002-08-17 Jon K Hellan + + * Makefile.am (pkgconfig_DATA): Add libgsf-gnome-1.pc when + --with-gnome is selected. + (EXTRA_DIST): Add libgsf-gnome-1.spec, libgsf-gnome-1.spec.in and + libgsf-gnome-1.pc.in + +2002-08-16 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : pad the last bat + and sbat block with unused rather than 0. + (ole_pad_bat_unused) : New. + +2002-08-16 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : clean up the + iteration to calculate the number of bat blocks required to hold the + bat and metabat. Fill in the bat flags for the metabat. + +2002-08-16 Jody Goldberg + + * configure.in : move bonobo and gnome-vfs into a standalone library. + + * gsf/gsf-infile-msole.c (ole_init_info) : add a warning about invalid + state. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_new) : Fill with 0xff + instead of 0 to be more compatible with MS. + (gsf_outfile_msole_close) : If there is no small block data don't + pretend there is an allocation chain for it. Write BAT entries for + the bat itself. TODO : BAT entries for the metabat. + +2002-08-16 Morten Welinder + + * gsf/gsf-io-context.c (gsf_io_context_update_progress): Don't + zero out memory only to overwrite it. + +2002-08-16 Jon K Hellan + + * configure.in: Require autoconf 2.52 + +2002-08-16 Morten Welinder + + * gsf/gsf-metadata-bag.c (gsf_metadata_bag_new): Fix prototype. + * gsf/gsf-output-memory.c (gsf_output_memory_new): Ditto. + (gsf_output_memory_write): Fix brown-bag. + +2002-08-15 Jon K Hellan + + * configure.in: Test for orbit-python. + +2002-08-15 Jon K Hellan + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): Stop warnings on + Solaris. + +2002-08-15 Jon K Hellan + + * gsf/gsf-shared-memory.c (gsf_shared_memory_finalize): Cast to + gsf_off_t when checing for overflow. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close, + gsf_outfile_msole_write): Ditto. + + * gsf/gsf-input-bonobo.c (gsf_input_bonobo_seek): Ditto. + + * gsf/gsf-infile-zip.c (zip_find_trailer): Ditto. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek): Use long, not + off_t for offset arg. to fseek. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek): Ditto. + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): Add forgotten + argument to g_error_new. + +2002-08-15 Jon K Hellan + + * configure.in: Bump minor verision to 1.3. Add AC_SYS_LARGEFILE. + + * gsf/gsf.h: Rename GsfOff_t enum to GsfSeekType. Define gsf_off_t + type to use instead of off_t. We have to do this because we do not + know what idea the application has of the size of off_t, this can + be defined with #define _FILE_OFFS_BITS xx. + + * gsf/gsf-shared-memory.h (struct _GsfSharedMemory): Change type + of size to gsf_off_t. + + * gsf/gsf-output-stdio.c (gsf_output_stdio_seek): Change type of + offset parameter to gsf_off_t, type of 'whence' parameter to + GsfSeekType. Check for overflow copying from gsf_off_t to off_t. + + * gsf/gsf-output-impl.h (struct _GsfOutput): Change type of + cur_size, cur_offset to gsf_off_t. + (GsfOutputClass): Change type of offset parameter of Seek method + to gsf_off_t, type of 'whence' parameter to GsfSeekType. + + * gsf/gsf-output-gnomevfs.c (gsf_output_gnomevfs_new): Various + fixes. + (gsf_output_gnomevfs_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. Cast + 'whence' argument to gnome_vfs_seek to GnomeVFSFileOffset to shut + up warning. + (gsf_output_gnomevfs_write): Cast 'bytes' argument to + gnome_vfs_write to GnomeVFSFileSize to shut up warning. + + * gsf/gsf-output-bonobo.c (gsf_output_bonobo_seek): Change type of + offset parameter to gsf_off_t, type of 'whence' parameter to + GsfSeekType. + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_seek): Change type of + offset parameter to gsf_off_t, type of 'whence' parameter to + GsfSeekType. Type of offset argument to gsf_input_seek has changed + to gsf_off_t. Use. + (gsf_outfile_msole_close): Return type of gsf_output_tell is + changed to gsf_off_t. Introduce gsf_off_t typed variable data_size + to detect overflow. Type of size argument to gsf_output_set_size + has changed to gsf_off_t. Use. Type of offset argument to + gsf_output_seek has changed to gsf_off_t. Use. + (gsf_outfile_msole_write): Return type of gsf_output_tell is + changed to gsf_off_t. Introduce gsf_off_t typed variables wsize + and start_offset to detect overflow. + + * gsf/gsf-libxml.c (gsf_libxml_read): Return type of + gsf_input_remaining has changed to gsf_off_t. Use. + + * gsf/gsf-io-context.c (GSF_CLASS): G_TYPE_GLIB is the parent + class, not the io-context class itself. + + * gsf/gsf-input.h: (gsf_input_size, gsf_input_remaining, + gsf_input_tell): Change return type to gsf_off_t. + (gsf_input_seek): Change type of offset parameter to gsf_off_t, + type of 'whence' parameter to GsfSeekType. + + * gsf/gsf-input.c (gsf_input_dup): Type of offset argument to + gsf_input_seek has changed to gsf_off_t. Use. + (gsf_input_size, gsf_input_remaining, gsf_input_tell): Change + return type to gsf_off_t. + (gsf_input_seek): Change type of offset parameter to gsf_off_t, + type of 'whence' parameter to GsfSeekType. + (gsf_input_set_size): Change type of size parameter to gsf_off_t. + (gsf_input_seek_emulate): Change type of pos parameter to + gsf_off_t. + (gsf_input_uncompress): Change type of cur_offset variable to + gsf_off_t. Type of offset argument to gsf_input_seek has changed + to gsf_off_t. Use. + + * gsf/gsf-input-textline.c (gsf_input_textline_new): Remove cast + of size argument to gsf_input_set_size. + (gsf_input_textline_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. + (gsf_input_textline_ascii_gets, gsf_input_textline_utf8_gets ): + Add 'remain' variable, and make sure that overflows don't occur. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new): Change type of size + variable to gsf_off_t. + (gsf_input_stdio_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. Check for + overflow copying from gsf_off_t to off_t. + + * gsf/gsf-input-memory.h: Change type of length parameter to + gsf_off_t. + + * gsf/gsf-input-memory.c (gsf_input_memory_new): Change type of + length parameter to gsf_off_t. + (gsf_input_memory_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. + (gsf_input_mmap_new): Check for overflow copying from st.st_size + to ssize_t. Type of size argument to gsf_shared_memory_mmapped_new + and gsf_input_set_size has changed to gsf_off_t. Use. + + * gsf/gsf-input-impl.h (struct _GsfInput): Change type of size, + cur_offset to gsf_off_t. + (GsfInputClass): Change type of offset parameter of Seek method to + gsf_off_t, type of 'whence' parameter to GsfSeekType. + (gsf_input_set_size): Change type of size parameter to gsf_off_t. + (gsf_input_seek_emulate): Change type of pos parameter to + gsf_off_t. + + * gsf/gsf-input-gzip.c (struct _GsfInputGZip): Change type of + seek_skipped to gsf_off_t. + (check_header): Type of offset argument to gsf_input_seek is + changed to gsf_off_t. Use. Type of size argument to + gsf_input_set_size has changed to gsf_off_t. Use. + (gsf_input_gzip_read): Return type of gsf_input_remaing has + changed to gsf_off_t. Use. + (gsf_input_gzip_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. + + * gsf/gsf-input-gnomevfs.c (gsf_input_gnomevfs_new): Change type + of size variable to gsf_off_t. Cast 'code' argument to g_set_error + to gint to shut up warning. + (gsf_input_gnomevfs_read): Cast 'bytes' argument to gnome_vfs_read + to GnomeVFSFileSize to shut up warning. + (gsf_input_gnomevfs_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. Cast + 'whence' argument to gnome_vfs_seek to GnomeVFSFileOffset to shut + up warning. + + * gsf/gsf-input-bonobo.c (struct _GsfInputBonobo): Change type of + 'pos' to gsf_off_t. + (gib_synch_shared_ptr): Cast to gsf_off_t when assigning pos. + (gsf_input_bonobo_new): Change type of size variable to + CORBA_long. Type of size argument to gsf_input_set_size is + changed to gsf_off_t. Use. + (gsf_input_bonobo_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. Check for + overflow copying from gsf_off_t to CORBA_long. + + * gsf/gsf-infile-zip.c (zip_find_trailer): Change return type to + gsf_off_t. Check for overflow copying from gsf_off_t to size_t. + (zip_dirent_new, gsf_infile_zip_new_child): Change type of offset + parameter to gsf_off_t. Type of size argument to + gsf_input_set_size has changed to gsf_off_t. Use. + (gsf_infile_zip_new): Type of size argument to gsf_input_set_size + has changed to gsf_off_t. Use. + + * gsf/gsf-infile-msvba.c (vba_inflate): Change type of offset + parameter to gsf_off_t. + (vba3_dir_read): Cast 2nd argument to vba_inflate to gsf_off_t. + (gsf_infile_msvba_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. + (gsf_infile_msvba_new): Type of size argument to + gsf_input_set_size has changed to gsf_off_t. Use. + + * gsf/gsf-infile-msole.c (ole_get_block, ole_init_info, + gsf_infile_msole_read, gsf_infile_msole_new_child): Type of offset + argument to gsf_input_seek has changed to gsf_off_t. Use. + (gsf_infile_msole_seek): Change type of offset parameter to + gsf_off_t, type of 'whence' parameter to GsfSeekType. + (gsf_infile_msole_new_child, gsf_infile_msole_new): Type of size + argument to gsf_input_set_size has changed to gsf_off_t. Use. + +2002-08-12 Jody Goldberg + + * Release 1.2.0 + +2002-08-06 Morten Welinder + + * gsf/gsf-utils.c (gsf_le_get_double, gsf_le_set_double): New + functions (from gnumeric). + * gsf/gsf-utils.h: Add macros for signed types. + +2002-08-05 Jody Goldberg + + * tests/test-msole1.c (test) : why did I add that limitation ? + +2002-08-05 Jody Goldberg + + * gsf/gsf-output.c (gsf_output_is_closed) : forgot to implement. + +2002-08-02 Jody Goldberg + + * configure.in : bump version + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_finalize) : add a safety + to close the file before finalizing. + + * gsf/gsf-output.c (gsf_output_finalize) : add a warning when + finalizing an unclosed stream. + (gsf_output_init) : init the new is_closed flag. + +2002-08-02 Rodrigo Moya + + * gsf/gsf-io-context.c: removed progress_min and progress_max, since + they don't seem too useful right now (ie, let's keep it simple). + (gsf_io_context_clear): free progress_ranges list and initialize + progress-related internal values. + (gsf_io_context_update_progress): implemented. + (gsf_io_context_class_init): added "progress" signal to class. + +2002-08-01 J.H.M. Dassen (Ray) + + * doc/Makefile.am (HTML_DIR) : conditionally define. + * doc/gsf-docs.sgml : tidy up. + +2002-07-27 Dom Lachowicz + + * MAINTAINERS : add myself + * gsf-metadata-bag.[ch] : add cardinatliy (size) method + +2002-07-26 Dom Lachowicz + + * gsf-output-bonobo.[ch]: implement output stream (untested) + +2002-07-26 Dom Lachowicz + + * gsf-meta-keys.h: list of default/builtin keys that we will want + to support + + * gsf-metadata-bag.[ch]: add key creation and manipulation + functions, update TODO list + +2002-07-26 Dom Lachowicz + + * gsf-metadata-bag.c: implement (untested) + +2002-07-25 Dom Lachowicz + + * gsf-input-gnomevfs.[ch]: implement (untested) + * gsf-output-gnomevfs.[ch]: implement (untested) + * gsf-output-memory.[ch]: implement (untested) + +2002-07-22 Zbigniew Chyla + + * gsf-input-gnomevfs.c (struct _GsfInputGnomeVFS): + Added missing semicolon at the end of struct. + +2002-07-21 Jody Goldberg + + * Release 1.1.0 + +2002-07-17 Jody Goldberg + + * gsf/gsf-utils.c (gsf_mem_dump) : tweak. + +2002-07-15 Morten Welinder + + * gsf/gsf-infile-msole.c (gsf_infile_msole_dup): Don't ignore err + -- that will crash the caller. + + * gsf/gsf-input-memory.c (gsf_input_mmap_new): Plug file + descriptor leaks. + +2002-07-09 Jody Goldberg + + * gsf/gsf-input.c (gsf_input_dup) : avoid leak if derived dup has + already assigned a name. + +2002-07-08 Jody Goldberg + + * tests/test-cp-msole.c (test) : simplify. + +2002-07-08 Jody Goldberg + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_new) : doh! + fix the header to include the correct small block shift. + +2002-07-08 Jody Goldberg + + * gsf/gsf-outfile-msole.c (ole_name_cmp) : new. + (gsf_outfile_msole_new_child) : order the names correctly. + (gsf_outfile_msole_close) : write meta bats. + + * gsf/gsf-msole-impl.h : add OLE_HEADER_METABAT_SIZE. + * gsf/gsf-infile-msole.c (ole_init_info) : use it here. + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_close) : and here. + +2002-07-07 Jody Goldberg + + * gsf/Makefile.am : Make gsf-impl-utils.h public + +2002-07-06 Jody Goldberg + + * gsf/gsf-msole-impl.h : pull in more information. We may not need it + but it makes for better documentation than 'unknown' + +2002-07-06 Jody Goldberg + + * gsf/gsf-outfile-msole.c : initial implementation. + * gsf/gsf-outfile.c : initial implementation. + * gsf/gsf-output.c : initial implementation. + +2002-07-05 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : be more anal in case the + input file has a cycle. + +2002-07-03 Jody Goldberg + + * tests/test-textline.c (test) : make the compiler shut up. + +2002-06-27 Morten Welinder + + * gsf/gsf-input-gzip.c (check_header): Set header_size here. + (gsf_input_gzip_read): When allocating a buffer, allocate at least + 256 bytes so we don't have to realloc all the time. + (gsf_input_gzip_read): Handle truncated streams. + + * gsf/gsf-input.c (gsf_input_seek): Handle seeks that go to same + position here. + (gsf_input_uncompress): Reorganise a bit. + + * gsf/gsf-infile-msole.c (ole_dirent_free): Actually free the + dirent. And the list of children. + +2002-06-27 Morten Welinder + + * gsf/gsf-input-gzip.c (gsf_input_gzip_read): Exit on error. + + * gsf/gsf-infile-msole.c (ole_init_info): Always set error info. + + * configure.in (LIBGSF_LIBS): Include the Bonobo libs. + + * tests/test-msole2.c (test): Plug leak. Uncompress source. + + * gsf/gsf-input.c (gsf_input_uncompress): New function. + + * gsf/gsf-input-gzip.c (gsf_input_gzip_finalize): Plug leak. + +2002-06-27 Jon K Hellan + + * gsf/gsf-input-bonobo.c: Actually check in the stuff mentioned + yesterday. + +2002-06-27 Morten Welinder + + * gsf/gsf-input-gzip.c (gsf_input_gzip_seek): Attempt + implementation. + + * gsf/gsf-input.c (gsf_input_seek): Make pos an off_t. + +2002-06-26 Jon K Hellan + + * gsf/gsf-input-bonobo.c (struct _GsfInputBonobo): Replace stream + attribute with GsfSharedBonoboStream * 'shared'. Add 'pos' + attribute. + (gib_synch_shared_ptr): New helper function. Seek the shared + stream if necessary. + (gsf_input_bonobo_new): Probably better to free the exceptions + *after* retrieving the exception texts. Initialize 'shared'. + (gsf_input_bonobo_finalize): unref 'shared'. + (gsf_input_bonobo_dup): Implement. + (gsf_input_bonobo_read): Use shared stream. Use + gib_synch_shared_ptr to seek first if necessary. + (gsf_input_bonobo_seek): Ditto. + (gsf_input_bonobo_init): Initialize 'shared'. + + * gsf/gsf-shared-bonobo-stream.[ch]: new helper class for bonobo + stream IO. Lets us dup the streams. + * gsf/Makefile.am: added new files. + +2002-06-26 Morten Welinder + + * configure.in: If needed, define __EXTENSIONS__. + +2002-06-26 Jon K Hellan + + * gsf/gsf-input-bonobo.c: Include bonobo-persist-stream.h + (gsf_input_bonobo_read): Silence warning. + +2002-06-25 Jon K Hellan + + * configure.in: New flag --with-bonobo + + * gsf/Makefile.am (INCLUDES): added new files. + + * gsf/gsf-input-bonobo.[ch]: new class for bonobo stream IO. + +2002-06-25 Rodrigo Moya + + * gsf/gsf-io-context.[ch]: new class for managing IO contexts. + + * gsf/Makefile.am: added new files. + +2002-06-24 Jody Goldberg + + * python/Makefile.am : pyexec is not available in automake-1.4. + nor is nodist_. + + * acinclude.m4 : something was still interpretting the AC_REQUIRE even + though ti was commented out. change case and comment for now to + avoid problems. + +2002-06-23 Jon K Hellan + + * acinclude.m4: Comment out everything. + +2002-06-21 Jody Goldberg + + * configure.in : uncomment the AM_CONDITIONAL for WITH_PYTHON + +2002-06-21 Jon K Hellan + + * acinclude.m4: Add it. It provides AM_CHECK_PYTHON_HEADERS. + +2002-06-20 Morten Welinder + + * gsf/gsf-outfile-msole.c (gsf_outfile_msole_new_child): Add + missing arg. + +2002-06-20 Jon K Hellan + + * configure.in: Add support for building Python bindings, but + comment it out because it requires automake1.5. + + * Makefile.am: Build python subdir if WITH_PYTHON is set. + +2002-06-18 Rui M. Seabra + + * libgsf-1.spec.in : set permission correctly + fix common mistake of Copyright flag into License flag. + +2002-06-18 Jody Goldberg + + * configure.in : lower the libxml version req + +2002-06-17 Jody Goldberg + + * gsf/gsf-outfile.c (gsf_outfile_new_child) : adjust signature to + include 'is_dir' + +2002-06-15 Jody Goldberg + + * gsf/gsf-input.c (gsf_input_eof) : fix docs. + + * gsf/gsf-utils.c (gsf_mem_dump) : use size_t. + +2002-06-13 Jody Goldberg + + * gsf/gsf-input-textline.c (gsf_input_textline_ascii_gets) : implement. + (gsf_input_textline_utf8_gets) : pretend to implement. + +2002-06-13 Jody Goldberg + + * Makefile.am : move the tests into a standalone dir because they are + getting irritating to build for every single library rebuild. + +2002-06-13 Morten Welinder + + * gsf/gsf-infile-msvba.c (vba_inflate): Make offset an off_t. + +2002-06-13 Jody Goldberg + + * gsf/gsf-outfile-msole.c : initial stub implementation. + * gsf/gsf-outfile.c : initial stub implementation. + * gsf/gsf-output-stdio.c : initial stub implementation. + * gsf/gsf-output.c : initial stub implementation. + +2002-06-13 Jody Goldberg + + * gsf/gsf-infile-msvba.c (vba_inflate) : cleanup. + +2002-06-13 Jody Goldberg + + * gsf/gsf-infile-msole.h (GSF_OLE_GET_GUINT{8,16,32}) : move to + gsf-utils and rename. + + * gsf/gsf-input-memory.c (gsf_input_memory_dup) : silence warning. + (gsf_input_mmap_new) : fix the no mmap case. + +2002-06-12 Jody Goldberg + + * gsf/gsf-infile-msvba.c (vba_inflate) : store the uncompressed + result. + (vba_dirent_read) : new. We can now lookup the correct offsets for + the compressed source. The question remaining is how to fin the + start of the dir table ... + +2002-06-12 Rodrigo Moya + + * gsf/*: s/IS_GSF/GSF_IS. + +2002-06-12 Jon K Hellan + + * libgsf-1.pc.in (Requires): Add libxml-2.0 + +2002-06-11 Jody Goldberg + + * gsf/gsf-infile-msole.c (gsf_infile_msole_read) : fix reading into an + assigned buffer for small block files. + +2002-06-10 Jody Goldberg + + * gsf/gsf-infile.c (gsf_infile_child_by_name) : typo. + +2002-06-09 J.H.M. Dassen (Ray) + + * gsf/test-msole1.c (read_types): Casts to suppress signedness + warnings. + * gsf/gsf-input-memory.c (gsf_input_memory_read): Changed src type to + guchar. + * gsf/gsf-input-textline.c (gsf_input_textline_ascii_gets): Cast + return value. + * gsf/gsf-infile-msole.c (ole_dirent_new): Signedness fixes. + * debian/*: updated; include pkgconfig file. + +2002-06-09 Jody Goldberg + + * gsf/gsf-infile-msvba.c : new. + * gsf/test-msvba.c : new. + + * gsf/gsf-infile.c (gsf_infile_child_by_vname) : new utility routine. + +2002-06-07 Jody Goldberg + + * gsf/gsf-input.c (gsf_input_dup) : Add an err parameter. + +2002-06-07 Morten Welinder + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new): Plug FILE* leak. + (gsf_input_stdio_dup): Go via filename. + +2002-06-07 Jody Goldberg + + * doc/Makefile.am : fix the type init function for gtk-doc. + * gsf/* : fix docs a bit. + +2002-06-07 Jody Goldberg + + * gsf/gsf-utils.c (gsf_input_dump) : new utility split out of. + * gsf/test-gzip1.c (test) : here. + + * gsf/test-msole2.c (test) : spruce this up a might so that it can be + used as a general utility to dump streams and storages. + + * gsf/gsf-input-stdio.c (gsf_input_stdio_dup) : dup the descriptor + before creating a new file handle. + +2002-06-06 Jody Goldberg + + * configure.in : remove -Wmissing-noreturn + + * gsf/test-msole1.c (test) : remove the --use-memory bit. Just use + mmap. We can test the other input types in another program. + + * gsf/*.c : change the convention for wrappers. They all add their + own references to the source rather than absorbing the ref that + was passed in. + +2002-06-06 Jody Goldberg + + * configure.in : add zlib. + * libgsf-1.pc.in (Cflags) : ditto. + + * gsf/gsf-input-gzip.c : wrapper to uncompress things. + + * gsf/gsf-libxml.c : some convenience routines for dealing with libxml. + + * gsf/test-gzip1.c : add some tests for gzip. + +2002-06-05 Morten Welinder + + * gsf/*.[ch]: switch to using system types. + +2002-06-05 Jon K Hellan + + * gsf/Makefile.am: Fix typo - libgsf_1_includedir didn't get defined. + +2002-06-05 Jody Goldberg + + * gsf/gsf-input-memory.c (gsf_input_mmap_new) : set the filename. + +2002-06-04 Jody Goldberg + + * gsf/gsf-input.c (gsf_input_eof) : do this internally. + * gsf/gsf-input* : remove the _eof methods. + +2002-06-04 Morten Welinder + + * gsf/gsf-input-impl.h (GsfInputClass): Change structure members + from "read" to "Read", etc. This avoids names reserved by the + system libraries. + +2002-06-04 Morten Welinder + + * gsf/test-msole1.c (test): Add --memory option. + + * gsf/gsf-shared-memory.c: New class. + + * gsf/gsf-input-memory.c (gsf_input_memory_new): Use new + GsfSharedMemory class. + (gsf_input_memory_read): Add missing parameter. + +2002-06-01 Jody Goldberg + + * gsf/Makefile.am : Add gsf-input-textline.[ch] + Add gsf-libxml.[ch] + +2002-05-30 Jody Goldberg + + * gsf/gsf-input-stdio.h : fix the name mismatch. + +2002-05-28 Jody Goldberg + + * gsf/gsf-input.c (gsf_input_seek) : doh! + +2002-05-28 Morten Welinder + + * gsf/gsf-infile-msole.c (ole_make_bat): Cast via gconstpointer to + please gcc. + + * gsf/gsf-infile-msole.h (GSF_OLE_GET_GUINT8, GSF_OLE_GET_GUINT16, + GSF_OLE_GET_GUINT32): fix alignment problems. + + * gsf/test-msole1.c (read_types): Fix isspace usage. + +2002-05-27 Jody Goldberg + + * gsf/gsf-infile-msole.c : add some prepoc constants to prep for + export support. + +2002-05-25 Jody Goldberg + + * README : add more details + +2002-05-25 Jody Goldberg + + * gsf/test-msole1.c (get_biff_opcode_name) : suppress warning. + + * gsf/gsf-input-memory.c (gsf_input_mmap_new) : ensure it is a regular + file. + + * configure.in : remove -Wundef to shut it up about glib. + remove -Wcast-qual because we sometimes need to explicitly cast away + const. C does not have const_cast<>(). + +2002-05-25 Jody Goldberg + + * gsf/gsf-impl-utils.h (GSF_CLASS_FULL) : suppress warning. + + * gsf/gsf-infile-msole.c (ole_dirent_new) : disable debug spew. + (ole_init_info) : suppress bogus compile warning. + Use gsf_ole_get_guint32s to convert the data to normal endianness. + (gsf_ole_get_guint32s) : new. + (ole_info_read_metabat) : assume the metabat is already uses native + byte ordering. + + * gsf/gsf-input.c (gsf_input_seek) : suppress warning. + (gsf_input_dup) : ditto. + (gsf_input_init) : ditto. + +2002-05-25 J.H.M. Dassen (Ray) + + * configure.in: + Actually use warning flags from GNOME_COMPILE_WARNINGS, so + "--enable-warnings=maximum" and "--with-iso-c" are honoured. + Test whether defining _BSD_SOURCE is needed for caddr_t. + (e.g. on Debian with -ansi for gcc3.0 and 3.1) + Test whether defining _POSIX_SOURCE is needed for fdopen(). + Enable a lot more warnings. + * debian/rules: minor tweaks. + +2002-05-25 Jody Goldberg + + * gsf/gsf-input.c (gsf_input_seek) : more error checking. + +2002-05-25 Jody Goldberg + + * gsf/test-msole1.c (test) : dump head of odd records. + + * gsf/gsf-input.c (gsf_input_seek) : do more of the work up here. + * gsf/gsf-infile-msole.c (gsf_infile_msole_seek) : adjust here. + * gsf/gsf-input-stdio.c (gsf_input_stdio_seek) : and here. + * gsf/gsf-input-memory.c (gsf_input_memory_seek) : and here. + +2002-05-25 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : fix off by 1 error in + handling broken ascii stream names. + +2002-05-25 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_init_info) : libole2 knew about a smidge + more of the ole header, use the sbat counter. + + * gsf/test-msole1.c (test) : even more sanity checking. + +2002-05-25 Jody Goldberg + + * gsf/test-msole1.c (test) : add more safety checks to automate + validation of imported biff records. + + * gsf/gsf-infile-msole.c (ole_dirent_new) : Based on char-width2.xls + it looks like directory sizes are periodically screwed. + +2002-05-25 Jody Goldberg + + * gsf/gsf-infile-msole.c : fix small block support. + Handle the bogus use of ascii stream names in some case. + +2002-05-24 Jody Goldberg + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new) : merge the size + checking in here and do more error reporting. + (gsf_input_stdio_class_init) : delete gsf_input_stdio_size + (gsf_input_stdio_size) : delete. + + * gsf/gsf-input.c (gsf_input_read) : put the bound check here. + +2002-05-24 Jody Goldberg + + * gsf/gsf-input-stdio.c (gsf_input_stdio_new) : make buf_size unsigned. + (gsf_input_stdio_finalize) : and here. + (gsf_input_stdio_read) : and here. + + * gsf/gsf-input.c (gsf_input_seek) : As morten suggested this is + better as > size rather than >= size. + +2002-05-24 Jody Goldberg + + * gsf/gsf-infile-msole.c (gsf_infile_msole_read) : only seek if we + need to. + +2002-05-24 Jody Goldberg + + * gsf/test-msole1.c (test) : more debug info, and less content spew. + +2002-05-23 Jody Goldberg + + * gsf/gsf-input-stdio.c (gsf_input_stdio_size) : be more careful about + people who open devices. + +2002-05-23 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_dirent_new) : more error handling. + (ole_info_get_sb_file) : make things more readable and split this out. + (gsf_infile_msole_new_child) : fix reading small blocks. + +2002-05-23 Jody Goldberg + + * gsf/gsf-infile-msole.h (GSF_OLE_GET_GUINT8) : move here. + (GSF_OLE_GET_GUINT16) : ditto. + (GSF_OLE_GET_GUINT32) : ditto. + +2002-05-23 Jody Goldberg + + * gsf/gsf-utils.h : Use the glib type macros instead of defining our + own. + +2002-05-23 J.H.M. Dassen (Ray) + + * doc/Makefile.am: Introduced DOC_DIR so the location can be easily + overridden when building packages. + * debian/*: Preliminary Debian packaging. + +2002-05-23 Jody Goldberg + + * gsf/gsf-infile-msole.c (ole_info_read_xbat) : DOH! + We need to check endianness when reading the bat elements. + (gsf_infile_msole_read) : slow but effective work around for + breaking at block boundaries. I'll work up something faster this + evening. + +2002-05-19 Jody Goldberg + + * Start making this into a real package. diff --git a/lib/libgsf-1.12.3/HACKING b/lib/libgsf-1.12.3/HACKING new file mode 100644 index 0000000000..da93ea04d1 --- /dev/null +++ b/lib/libgsf-1.12.3/HACKING @@ -0,0 +1,105 @@ +* Don't commit directly, instead send your diff to the authors (use + 'cvs diff -Nu'). + +Working in libgsf +------------------- + + When writing libgsf our priorities are + + 1) Correctness. + 2) Maintainable & Documented + 3) Modular and well designed + and a distant + 4) portable + 5) Fast + + When you submit code to inclusion in libgsf, or when you modify the sources +directly on the CVS repository, please keep those things in mind. While +performance is important please note that we do not want to hand tune code +to shave milliseconds at this point. Well designed algorithms and data +strucutures are fertile areas for development, obfuscated code to make a +loop 3% faster is not. Specifically, this means: + + - Clarity of design and function are paramount + - Make sure your code does not generate warnings at all. + - Please follow the formatting style + +Formatting style +---------------- + + The formatting style of libgsf is a mix of various styles, make +yourself familiar with the GNU coding standards (shipped with most +GNU/Linux systems as the standards.info file), then read the Linux +kernel coding standards and ignore Linus' jokes. Then look at the +Gtk+ header files to get aquainted on how to write nice header files +that are almost self documenting. + + Remember: Use 8 space tabs for indentation: that will keep your +code honest as you will be forced to split your routines in more +modular chunks (as detailed by Linus). + + Emacs users can get the default indentation style with this: + (set-c-style "K&R") + (setq c-basic-offset 8) + + On top of that, you will have to: + + - Follow the Gtk+ cleanliness conventions for function + prototypes. + + - Follow the Gtk+ namespace convention for function names. + module_submodule_operation + + - Make sure your code does not have a single warning (with the + default strong warnings that Gnumeric compiles with) before + your code is submited. (Although we do not advocate -Werror) + + - Every entry point to a public routine should use the + g_return_if_fail and g_return_val_if_fail macros to verify + that the parameters passed are valid. + + - Under no circunstances use magic variables. Use typedef + enum { ... } type; to create enumerations. Do not use + integers to hold references to enumerations, the compiler + can help catch various errors. + + - Use g_warning to mark spots that need to be reviewed or are + not finished to let me fix it eventually. + + - Do not submit code that is just a temporary workaround for a + full fledged feature. i.e. don't submit a quick hack at + "search text" which is not designed to be expanded upon. We + do not want to maintain limited features. It is better submit an + implementation that has been designed to be expanded and enhanced, + even if it is not completely finished. + + - It is more important to be correct than to be fast. + + - Do not optimize unnecesarly. Do profile, do look for the + weak spots before applying "optimization by feeling". This + is not a Ouija-based project. + + - It is more important to keep the code maintainable and + readable than to be fast. If you have a great idea about + optimizing the code, make sure it is implemented cleanly, + that there is a clean and maintainable way to do it: + + - Fast code that is difficult to maintain has no place in + Gnumeric and will be dropped. + + - Follow the libgsf commenting style, which is not the Gtk + style; + /* ie. use this for + * multi-line comments + */ + + All of this is to ensure the libgsf code will be kept within +reasonable margins of maintainability for the future: Remember, in two years +you will probably be far too busy to maintain your own contributions, and they +might become a burden to the program maintainers. + + libgsf is intented to be a foundation for a various document centric +projects. + + Cleaning code in libgsf is more important than trying not to break +existing code. By all means, code clean ups are always welcome. diff --git a/lib/libgsf-1.12.3/INSTALL b/lib/libgsf-1.12.3/INSTALL new file mode 100644 index 0000000000..54caf7c190 --- /dev/null +++ b/lib/libgsf-1.12.3/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/lib/libgsf-1.12.3/Makefile.am b/lib/libgsf-1.12.3/Makefile.am new file mode 100644 index 0000000000..4c219a7b9d --- /dev/null +++ b/lib/libgsf-1.12.3/Makefile.am @@ -0,0 +1,30 @@ +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libgsf-1.pc + +if WITH_LIBGSF_GNOME + pkgconfig_DATA += libgsf-gnome-1.pc +endif +if PLATFORM_WIN32 + pkgconfig_DATA += libgsf-win32-1.pc +endif + +SUBDIRS = gsf gsf-gnome gsf-win32 doc tests +# po + +if WITH_PYTHON + SUBDIRS += python +endif +#if WITH_GCONF +# SUBDIRS += thumbnailer +#endif + +EXTRA_DIST = BUGS HACKING \ + intltool-extract.in \ + intltool-merge.in \ + intltool-update.in \ + libgsf-1.spec \ + libgsf-gnome-1.spec + +DISTCLEANFILES = intltool-extract intltool-merge intltool-update + +DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc diff --git a/lib/libgsf-1.12.3/NEWS b/lib/libgsf-1.12.3/NEWS new file mode 100644 index 0000000000..5dc5c1993d --- /dev/null +++ b/lib/libgsf-1.12.3/NEWS @@ -0,0 +1,371 @@ +libgsf 1.12.3 + +Jody: + * Make gconf optional again. + +Rambokid: + * Fix excessive memory use problem for writing zip files. + +-------------------------------------------------------------------------- +libgsf 1.12.2 + +Jean Brefort: + * made GSF_CLASS_FULL and GSF_DYNAMIC_CLASS_FULL really full (add + base_init, base_finalize and class_finalize arguments). + +Jody: + * Handle 0x8000 and 0x8001 codepages. + * Fix leak in array properties. + +Jon Kåre: + * Fix VT_FILETIME OLE property export. + +Morten: + * Fix problem with 64-bit OLE properties. + * Fix standard-violation that hit i86_64. + +-------------------------------------------------------------------------- +libgsf 1.12.1 + +Dom: + * Better handling of error conditions when creating a zip. + +Jody: + * Patch a leak in vector properties from OLE2. + * Be more delicate handling truncated gzip files. + * Improve utility macros for dynamic type creation (incompatible). + * Make constructors for output_stdio outfile_stdio more flexible + +Morten: + * Fix gsf_xml_out_add_float to always use "." as separator. + * Fix problem with creating new files in g+s directories. + +-------------------------------------------------------------------------- +libgsf 1.12.0 + +Herzi: + * Allow multiple calls to gsf_xml_out_add_cstr. [#167166] + +Ivan: + * Fix codepage problem. [#162841] + +Jody: + * Support GObject properties in GsfOutfile::new_child + * Cleanup the OLE2 property import + * Re-org the GsfDocMetadata interface + * Cleanup the OLE2 property export + +Manuel Mausz: + * OLE2 property export. + +Morten: + * Attempt to get non-ASCII filenames right on Win32. [#171145] + * Add "raw" properties to GsfInputGzip and GsfOutputGzip to + allow header/trailer-less files. Also allow g_object_new + construction of these classes. + * Add "uncompressed_size" property to GsfInputGzip allowing to + decompress files larger than 4GB. + * Propagate errors from GsfOutputGzip's sink to itself. + * Fix GsfOutputStdio to avoid killing the target file when we + get an error. + * Add new GsfOutputCsv and GsfOutputIconv. + * Fix GsfOutfileZip's handling of compression levels. + * Allow getting the compression level when reading zip files. + * Improve zip file performance. (No longer reopens the underlying + file for each member you read.) + * Clean up zip output for zip files with non-ASCII members. + * Make it possible to use g_object_new to create zip io objects. + +------------------------------------------------------------------------------ +libgsf 1.11.1 + +Morten: + * Fix permissions for new files. [#159331] + * Fix save-to-existing-file on Win32. [#160108] + * Fix stdio when we're not closing the file. + +------------------------------------------------------------------------------ +libgsf 1.11.0 + +Christopher James Lahey: + * GObject property support for input/output (for C# bindings) + * GObject support for doc-meta-data + +Frank Chiulli: + * Have the OLE2 property set parser store the data + +Jody: + * More work on storing OLE2 properties + * Add some hooks to the libxml sax wrappers to facilitate extending + specs + * An extra wrapper to GsfOutputStdio to handle FILE* directly + +Jon Kåre: + * make xml string export more convenient by ignoring NULL + +Kasal: + * More consistent use of G_GNUC_UNUSED. + +Morten: + * Check size and seek in gsf_input_dup. + * Fix a pile of crashes having to do with failed dups. + * Fix crashes having to do with NULL input->name. + * Work around gnome-vfs bug #152844. + * Create input proxy object. + * Make msole reading use a proxy layer instead of dup-ing the source + like crazy. (Dup-ing is expensive for network connections and + slightly expensive for disk files.) + * Doc fixes. + * Escape characters 1..31 when used in xml attributes. [#157850] + +Veerapuram Varadhan: + * sync the ole2 property names with the existing beagle properties + +------------------------------------------------------------------------------ +libgsf 1.10.1 + +Jon Kåre: + * Fix base64 decoding. + +Kasal: + * Lots of code auditing and cleanup. + * Identified the long standing source of the problem with XL corrupting + large files + +------------------------------------------------------------------------------ + +libgsf 1.10.0 + +Jody: + * Patch to read slightly odd planmaker generated OLE2. + * Fix printf implementation in GsfOutfileMSOle + * Make the msole block sizes instance specific + +Morten: + * Attempt fix for ARM. + * Make gsf_input_gnomevfs_new_uri handle missing "seek" methods. + +Stuart Cunningham + * Enable OLE2 export for larger block sizes + +------------------------------------------------------------------------------ +libgsf 1.9.1 + +J.H.M. Dassen (Ray): + * Corrected the location where the documentation gets installed. + * +James Cape : + * Clean up the gtk-doc build + +Jody : + * Support DOCTYPE in the simplified xml generator + * More gtk-doc cleanup + +Morten, Dom: + * Avoid polluting global name space with symbols lacking gsf_ prefix. + This only effects implementation utilites shared by the zip in/out + code so hopefully the abi breakage will not hurt too many people. + +------------------------------------------------------------------------------ +libgsf 1.9.0 + +Dom: + * Fix bzip output to flush if last deflate fills buffer + +Jody Goldberg: + * If the file is not an OLE2 file do not change the filepos. + * Handle broken ole files that specify codepage as signed short + * Fix reading ole files > 13.6 Meg on sparc/alpha (from Xavier Roche) + * Tune validation test for LPSTR properties to handle char width > 1 + * Make the impl headers for the base interfaces public as requested + * Add some directory tree wrappers + * Work around a -fstrict-alias warning for SuSE + * Move to automake-1.7 + * Fix gnome-vfs backend to open files with random access + * Support merging content from nested nodes for sax parsing + * Fix gtk-doc + +Joseph Frazee: + * patch the spec file. + +Morten Welinder: + * Properly chain finalizer. + * Fix gzip output to flush if last deflate fills buffer + +Tor Lillqvist: + * packaging tools for win32. + +------------------------------------------------------------------------------ +libgsf 1.8.2 + +Jody: + * Catch invalid OLE2 files that claim there is data in a directory. + * Better error handling for Infile::child_by_* + * Work harder to restore invalid ole2 files with bad BATs. + * Begin an interface for ole2 export with non-default block sizes. + * Name the root directory 'Root Entry' to keep libole2 happy. + +Stuart Cunningham : + * Support CLSIDs for Storages for the AAF project + * Test and fix bugs reading ole files with non-default block sizes. + +------------------------------------------------------------------------------ +libgsf 1.8.1 + +Morten: + * Plug major gzip output leak. + +------------------------------------------------------------------------------ +libgsf 1.8 + + 2003 Mar 9 + With the approval off all contributors the library has been + relicensed from GPL -> LGPL + +Dom: + * Some extra casts to make Bloodshed DevC++ happy + * IOChannel input work + * BZ2 input & output + * Return the derived types from constructor functions + * Support GObject properties for the inputs and outputs + * Start an AR infile + * Start Win32 COM IStream input/output + +Jody: + * Fix ms ole export bug that would not clip overly long file names. + * Fix ms ole import bug with potentially invalid names + +Rodrigo: + * Added GsfInputIOChannel, a GIOChannel-based input. + +Xavier Roche: + * Patch some gsize == gunit32 assumptions. + +------------------------------------------------------------------------------ +libgsf 1.7 + +Dom: + * Extend gnome-vfs support to handle uris + * Transacted output capability + * Ensure large reads and writes happen + +Jody: + * Start work on some simplified xml export utilities. + * Extend xml import facilities to support namespaces. + * Catch invalid OLE files with cycles. + * Fix exporting OLE files larger than 6.8 Meg + +Jon Kåre: + * Only unset valid GValues when reading msole properties. + +Morten: + * Fix xml save problem. + +Tor Lillqvist: + * Tweaks for the win32 build. + +------------------------------------------------------------------------------ +libgsf 1.6.0 + +Jody: + * Be more anal about invalid stream names.. + * Fix documentation install. + * Fix a subtle leak that Morten found. + * Suppress some warnings in the test suite. + +Jon Kåre: + * Add printf mechanism. + * Fix misc bugs. + * Add gzip output. + +Morten: + * Don't overwrite files we're not supposed to write. + +------------------------------------------------------------------------------ +libgsf 1.5.0 + +Jody: + * Adjust sax routines to support recusive structures. + +Morten: + * Handle file names that are not valid utf8. + +Dom: + * Port over code page utilities from libwv. + +------------------------------------------------------------------------------ +libgsf 1.4.0 + +Jody: + * Move some iconv utility routines here from gnumeric. + * More work on reading ole property sets. + * Minor tweak directory handling for infile-zip. + * Replace test-cat-zip with test-msole2 + * Add error handling mechanism to GsfOutput + * Borrow the temp file handling from gedit + * Add some xml SAX parsing utilities (api is tentative) + * Add some structured blob utilites for easy in/out of blob trees + * Support unicode property values and names in ole files. + +Jon Kåre: + * sync the directory semantics of infile-zip with infile-msole. + * Support seeking within zip streams. + * Make dup work properly for gzip and zip children. + * Implement Zip export. + +------------------------------------------------------------------------------ +libgsf 1.3.0 + +Jody: + * Split gnome-vfs and bonobo into a distinct library + * Polish the OLE export so that libole2 is molified. + * Add a timestamp object for use with metadata + * Some initial work on MS OLE property streams (doc metadata) + * Some initial work on doc meta data (expect changes as ole settles) + +Jon Kåre: + * Work and plan to support big files. + +------------------------------------------------------------------------------ +libgsf 1.2.0 + +Dom: + * Read/Write gnome-vfs (untested) + * Write to mem buf (untested) + +Jody: + * Add some safety and utilty to ensure outputs are closed before + finalizing + * Add some printf style capabilities for outputs. + +Ray: + * improve doc generation + * Update debian support in preparation for packaging. + +Rodrigo: + * more work on io_context. + +Tambet: + * Read zip files + +------------------------------------------------------------------------------ +libgsf 1.1.0 + +Jody: + * Initial pass at an api + * Read & Write OLE + * Read gzip + * Read textlines + * Read & Write stdio wrapper + * Some libxml2 utility wrappers + * some test programs to dump or copy ole streams and file structures + * Uncompress vba streams + * Initial incomplete work on parsing vba3 & vba56 directories + +Morten: + * mmap/buffer wrapper + * testing & purification + +Jon Kåre: + * Some configure cleanup + * Bonobo Stream wrapper diff --git a/lib/libgsf-1.12.3/README b/lib/libgsf-1.12.3/README new file mode 100644 index 0000000000..83b7ec8db5 --- /dev/null +++ b/lib/libgsf-1.12.3/README @@ -0,0 +1,58 @@ +libgsf -- The G Structured File Library +Jody Goldberg + + The project aims to provide an efficient extensible i/o abstraction for +dealing with different structured file formats. + + libgsf is licensed under the terms of the GNU LGPL included in the +file COPYING.LIB. + +To report libgsf bugs, please visit bugzilla.gnome.org. +-- + +This library has taken insight from + +OLE: + - libole : Michael Meeks, Arturo Tena, and Frank Chiulli + - which was based on + Laola : by Martin Schwartz + WINE : Marcus Meissner, Francis Beaudet, Sylvain St-Germain and + Thuy Nguyen + Caolan McNamara's work + + - POIFS : Marc Johnson + +VBA: + - libole : Michael Meeks and Frank Chiulli figuring out quite a bit about + how a vba stream is stored. + - OpenOffice : For confirming many of Michael's hypothesis' and supplying + insight into the project file structure. + - Costin Raiu, Kaspersky Labs + : For commenting that the dir stream had offsets too. That way we can + avoid OpenOffice's trouble parsing pcode. + +gzip: + - zlib : for doing all the heavy lifting, and suppling gzio.c as an + example. + +Requirements +------------ + autoconf 2.5x + automake 1.7 + + glib >= 1.3.10 + zlib >= 1.1.3 + libxml2 >= 2.4.16 (not really, but it is the first to be tested) + +Mailing lists +------------- + + There is NO mailing list used to discuss libgsf specificly as yet. For now +please use the gnumeric list. To subscribe send a mail to: + + gnumeric-list-request@gnome.org +And in the body of the message write "subscribe" + +An archive of the mailing lists is available in: + http://www.gnome.org/mailing-lists/archives/gnumeric-list/ + diff --git a/lib/libgsf-1.12.3/TODO b/lib/libgsf-1.12.3/TODO new file mode 100644 index 0000000000..8781329d73 --- /dev/null +++ b/lib/libgsf-1.12.3/TODO @@ -0,0 +1,34 @@ +Near: + - Check the outputs for proper wrap use. eg GsfOutputGzip does not + - rework proposed meta data framework to support improved understanding of + MS Office + - Complete MS property set read and write + (complete codepage support for writing) + - work on GsfOutput error handling to propagate errors up the stack. + Maybe something signal based ? + - for the stdio output check that we can actually write to the target file + on open even though we do not want to write to it until later. + - Add 'cancel' flag to GsfOutputStdio to support not overwriting the target + file even if things succeed. + +Longer: + - More work on VBA directory parsing so that we can decompress + source streams. + - Add encrypt and decrypt wrappers + - precede with some randomness due to static nature of xml header + - be absolutely clear about how we handle seek (only encrypt data on + first pass) + - Can we do we put a mechanism for signing and authenticating ? + +Future: + - parse vba p-code directly to produce some other language. + - move biff utils here from gnumeric + +------------------------------------------------------------------------------------ +potential 2.0 api changes + +- Infile::get_child* To take a GError to handle failure +- Convert Input, Infile, Output, Outfile into interfaces +- Split Input/Output into base and seekable +- Remove/Alleviate requirement that we know the size of a stream on open +- input::seek and output::seek use the opposite conventions diff --git a/lib/libgsf-1.12.3/acinclude.m4 b/lib/libgsf-1.12.3/acinclude.m4 new file mode 100644 index 0000000000..d06436f9a2 --- /dev/null +++ b/lib/libgsf-1.12.3/acinclude.m4 @@ -0,0 +1,4 @@ +# +# This is a dummy file. Copy acinclude.m4.am15 over this if you want +# to build with python bindings. See python/README-python . +# diff --git a/lib/libgsf-1.12.3/aclocal.m4 b/lib/libgsf-1.12.3/aclocal.m4 new file mode 100644 index 0000000000..a1be72a787 --- /dev/null +++ b/lib/libgsf-1.12.3/aclocal.m4 @@ -0,0 +1,7727 @@ +# generated automatically by aclocal 1.7.9 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# +# This is a dummy file. Copy acinclude.m4.am15 over this if you want +# to build with python bindings. See python/README-python . +# + +# Do all the work for Automake. -*- Autoconf -*- + +# This macro actually does too much some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 10 + +AC_PREREQ([2.54]) + +# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow +# the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG(AMTAR, tar) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl + +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.7.9])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# +# Check to make sure that the build environment is sane. +# + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# -*- Autoconf -*- + + +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# AM_AUX_DIR_EXPAND + +# Copyright 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +# Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50]) + +AC_DEFUN([AM_AUX_DIR_EXPAND], [ +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. + +# Copyright 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# AM_PROG_INSTALL_STRIP + +# Copyright 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# -*- Autoconf -*- +# Copyright (C) 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# serial 5 -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +#serial 2 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 5 + +AC_PREREQ(2.52) + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]) +fi])]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + +# serial 47 AC_PROG_LIBTOOL +# Debian $Rev: 214 $ + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-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. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # 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"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # 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. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux*) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED +]) +AC_MSG_RESULT([$SED]) +]) + + +dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) +# serial 2 IT_PROG_INTLTOOL +AC_DEFUN([IT_PROG_INTLTOOL], +[ + +if test -n "$1"; then + AC_MSG_CHECKING(for intltool >= $1) + + INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ printf "%d", $[1] * 100 + $[2]; }'` + INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $[2]; }' < ${ac_aux_dir}/intltool-update.in` + changequote({{,}}) + INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split(${{2}}, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in` + changequote([,]) + + if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then + AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) + else + AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found. Your intltool is too old. You need intltool $1 or later.]) + exit 1 + fi +fi + + INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' + INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' + INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + +AC_SUBST(INTLTOOL_DESKTOP_RULE) +AC_SUBST(INTLTOOL_DIRECTORY_RULE) +AC_SUBST(INTLTOOL_KEYS_RULE) +AC_SUBST(INTLTOOL_PROP_RULE) +AC_SUBST(INTLTOOL_OAF_RULE) +AC_SUBST(INTLTOOL_PONG_RULE) +AC_SUBST(INTLTOOL_SERVER_RULE) +AC_SUBST(INTLTOOL_SHEET_RULE) +AC_SUBST(INTLTOOL_SOUNDLIST_RULE) +AC_SUBST(INTLTOOL_UI_RULE) +AC_SUBST(INTLTOOL_XAM_RULE) +AC_SUBST(INTLTOOL_KBD_RULE) +AC_SUBST(INTLTOOL_XML_RULE) +AC_SUBST(INTLTOOL_XML_NOMERGE_RULE) +AC_SUBST(INTLTOOL_CAVES_RULE) +AC_SUBST(INTLTOOL_SCHEMAS_RULE) +AC_SUBST(INTLTOOL_THEME_RULE) + +# Use the tools built into the package, not the ones that are installed. + +INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract' +INTLTOOL_MERGE='$(top_builddir)/intltool-merge' +INTLTOOL_UPDATE='$(top_builddir)/intltool-update' + +AC_SUBST(INTLTOOL_EXTRACT) +AC_SUBST(INTLTOOL_MERGE) +AC_SUBST(INTLTOOL_UPDATE) + +AC_PATH_PROG(INTLTOOL_PERL, perl) +if test -z "$INTLTOOL_PERL"; then + AC_MSG_ERROR([perl not found; required for intltool]) +fi +if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then + AC_MSG_ERROR([perl 5.x required for intltool]) +fi +if test "x$2" != "xno-xml"; then + AC_MSG_CHECKING([for XML::Parser]) + if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then + AC_MSG_RESULT([ok]) + else + AC_MSG_ERROR([XML::Parser perl module is required for intltool]) + fi +fi + +AC_PATH_PROG(INTLTOOL_ICONV, iconv, iconv) +AC_PATH_PROG(INTLTOOL_MSGFMT, msgfmt, msgfmt) +AC_PATH_PROG(INTLTOOL_MSGMERGE, msgmerge, msgmerge) +AC_PATH_PROG(INTLTOOL_XGETTEXT, xgettext, xgettext) + +# Remove file type tags (using []) from po/POTFILES. + +ifdef([AC_DIVERSION_ICMDS],[ + AC_DIVERT_PUSH(AC_DIVERSION_ICMDS) + [mv -f po/POTFILES po/POTFILES.tmp + sed -e '/[[]encoding.*]/d' -e 's/[[].*] *//' < po/POTFILES.tmp > po/POTFILES + rm -f po/POTFILES.tmp + ]dnl + AC_DIVERT_POP() +],[ + ifdef([AC_CONFIG_COMMANDS_PRE],[ + AC_CONFIG_COMMANDS_PRE([ + [mv -f po/POTFILES po/POTFILES.tmp + sed -e '/[[]encoding.*]/d' -e 's/[[].*] *//' < po/POTFILES.tmp > po/POTFILES + rm -f po/POTFILES.tmp + ]dnl + ]) + ]) +]) + +# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT. + +AC_CONFIG_COMMANDS([intltool], [ + +intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \ + -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \ + -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \ + -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \ + -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \ + -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'" + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \ + > intltool-extract.out +if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then + rm -f intltool-extract.out +else + mv -f intltool-extract.out intltool-extract +fi +chmod ugo+x intltool-extract +chmod u+w intltool-extract + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \ + > intltool-merge.out +if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then + rm -f intltool-merge.out +else + mv -f intltool-merge.out intltool-merge +fi +chmod ugo+x intltool-merge +chmod u+w intltool-merge + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \ + > intltool-update.out +if cmp -s intltool-update intltool-update.out 2>/dev/null; then + rm -f intltool-update.out +else + mv -f intltool-update.out intltool-update +fi +chmod ugo+x intltool-update +chmod u+w intltool-update + +], INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir} +INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}' +MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}' +XGETTEXT='${INTLTOOL_XGETTEXT}') + +]) + +# deprecated macros +AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) +# A hint is needed for aclocal from Automake <= 1.9.4: +# AC_DEFUN([AC_PROG_INTLTOOL], ...) + + +# Copyright (C) 1995-2002 Free Software Foundation, Inc. +# Copyright (C) 2001-2003,2004 Red Hat, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995, 1996 +# +# Modified to never use included libintl. +# Owen Taylor , 12/15/1998 +# +# Major rework to remove unused code +# Owen Taylor , 12/11/2002 +# +# Added better handling of ALL_LINGUAS from GNU gettext version +# written by Bruno Haible, Owen Taylor 5/30/3002 +# +# Modified to require ngettext +# Matthias Clasen 08/06/2004 +# +# We need this here as well, since someone might use autoconf-2.5x +# to configure GLib then an older version to configure a package +# using AM_GLIB_GNU_GETTEXT +AC_PREREQ(2.53) + +dnl +dnl We go to great lengths to make sure that aclocal won't +dnl try to pull in the installed version of these macros +dnl when running aclocal in the glib directory. +dnl +m4_copy([AC_DEFUN],[glib_DEFUN]) +m4_copy([AC_REQUIRE],[glib_REQUIRE]) +dnl +dnl At the end, if we're not within glib, we'll define the public +dnl definitions in terms of our private definitions. +dnl + +# GLIB_LC_MESSAGES +#-------------------- +glib_DEFUN([GLIB_LC_MESSAGES], + [AC_CHECK_HEADERS([locale.h]) + if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + +# GLIB_PATH_PROG_WITH_TEST +#---------------------------- +dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# GLIB_WITH_NLS +#----------------- +glib_DEFUN([GLIB_WITH_NLS], + dnl NLS is obligatory + [USE_NLS=yes + AC_SUBST(USE_NLS) + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + AC_CHECK_HEADER(libintl.h, + [gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, + [AC_TRY_LINK([ +#include +], + [return !ngettext ("","", 1)], + gt_cv_func_ngettext_libc=yes, + gt_cv_func_ngettext_libc=no) + ]) + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, + [AC_TRY_LINK([ +#include +], + [return !dgettext ("","")], + gt_cv_func_dgettext_libc=yes, + gt_cv_func_dgettext_libc=no) + ]) + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CHECK_FUNCS(bind_textdomain_codeset) + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dgettext, + gt_cv_func_dgettext_libintl=yes)])]) + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + AC_MSG_CHECKING([if -liconv is needed to use gettext]) + AC_MSG_RESULT([]) + AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dcgettext, + [gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv], + :,-liconv)], + :,-liconv) + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + AC_CHECK_FUNCS(bind_textdomain_codeset) + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + AC_DEFINE(HAVE_GETTEXT,1, + [Define if the GNU gettext() function is already present or preinstalled.]) + GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [case $host in + *-*-solaris*) + dnl On Solaris, if bind_textdomain_codeset is in libc, + dnl GNU format message catalog is always supported, + dnl since both are added to the libc all together. + dnl Hence, we'd like to go with DATADIRNAME=share and + dnl and CATOBJEXT=.gmo in this case. + AC_CHECK_FUNC(bind_textdomain_codeset, + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac]) + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + ]) + + if test "$gt_cv_have_gettext" = "yes" ; then + AC_DEFINE(ENABLE_NLS, 1, + [always defined to indicate that i18n is enabled]) + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is not GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLLIBS) + AC_SUBST(PO_IN_DATADIR_TRUE) + AC_SUBST(PO_IN_DATADIR_FALSE) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +# AM_GLIB_GNU_GETTEXT +# ------------------- +# Do checks necessary for use of gettext. If a suitable implementation +# of gettext is found in either in libintl or in the C library, +# it will set INTLLIBS to the libraries needed for use of gettext +# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable +# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() +# on various variables needed by the Makefile.in.in installed by +# glib-gettextize. +dnl +glib_DEFUN([GLIB_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + + GLIB_LC_MESSAGES + GLIB_WITH_NLS + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) +# ------------------------------- +# Define VARIABLE to the location where catalog files will +# be installed by po/Makefile. +glib_DEFUN([GLIB_DEFINE_LOCALEDIR], +[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl +glib_save_prefix="$prefix" +glib_save_exec_prefix="$exec_prefix" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +if test "x$CATOBJEXT" = "x.mo" ; then + localedir=`eval echo "${libdir}/locale"` +else + localedir=`eval echo "${datadir}/locale"` +fi +prefix="$glib_save_prefix" +exec_prefix="$glib_save_exec_prefix" +AC_DEFINE_UNQUOTED($1, "$localedir", + [Define the location where the catalogs will be installed]) +]) + +dnl +dnl Now the definitions that aclocal will find +dnl +ifdef(glib_configure_in,[],[ +AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) +AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) +])dnl + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_ifval([$1], [$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +if test $pkg_failed = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" 1>&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details.])], + [$4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES + +dnl GNOME_COMPILE_WARNINGS +dnl Turn on many useful compiler warnings +dnl For now, only works on GCC +AC_DEFUN([GNOME_COMPILE_WARNINGS],[ + dnl ****************************** + dnl More compiler warnings + dnl ****************************** + + AC_ARG_ENABLE(compile-warnings, + AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@], + [Turn on compiler warnings]),, + [enable_compile_warnings="m4_default([$1],[yes])"]) + + warnCFLAGS= + if test "x$GCC" != xyes; then + enable_compile_warnings=no + fi + + warning_flags= + realsave_CFLAGS="$CFLAGS" + + case "$enable_compile_warnings" in + no) + warning_flags= + ;; + minimum) + warning_flags="-Wall" + ;; + yes) + warning_flags="-Wall -Wmissing-prototypes" + ;; + maximum|error) + warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith" + CFLAGS="$warning_flags $CFLAGS" + for option in -Wno-sign-compare; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + AC_MSG_CHECKING([whether gcc understands $option]) + AC_TRY_COMPILE([], [], + has_option=yes, + has_option=no,) + CFLAGS="$SAVE_CFLAGS" + AC_MSG_RESULT($has_option) + if test $has_option = yes; then + warning_flags="$warning_flags $option" + fi + unset has_option + unset SAVE_CFLAGS + done + unset option + if test "$enable_compile_warnings" = "error" ; then + warning_flags="$warning_flags -Werror" + fi + ;; + *) + AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings) + ;; + esac + CFLAGS="$realsave_CFLAGS" + AC_MSG_CHECKING(what warning flags to pass to the C compiler) + AC_MSG_RESULT($warning_flags) + + AC_ARG_ENABLE(iso-c, + AC_HELP_STRING([--enable-iso-c], + [Try to warn if code is not ISO C ]),, + [enable_iso_c=no]) + + AC_MSG_CHECKING(what language compliance flags to pass to the C compiler) + complCFLAGS= + if test "x$enable_iso_c" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) complCFLAGS="$complCFLAGS -ansi" ;; + esac + case " $CFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) complCFLAGS="$complCFLAGS -pedantic" ;; + esac + fi + fi + AC_MSG_RESULT($complCFLAGS) + + WARN_CFLAGS="$warning_flags $complCFLAGS" + AC_SUBST(WARN_CFLAGS) +]) + +dnl For C++, do basically the same thing. + +AC_DEFUN([GNOME_CXX_WARNINGS],[ + AC_ARG_ENABLE(cxx-warnings, + AC_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@] + [Turn on compiler warnings.]),, + [enable_cxx_warnings="m4_default([$1],[minimum])"]) + + AC_MSG_CHECKING(what warning flags to pass to the C++ compiler) + warnCXXFLAGS= + if test "x$GCC" != xyes; then + enable_compile_warnings=no + fi + if test "x$enable_cxx_warnings" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CXXFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) warnCXXFLAGS="-Wall -Wno-unused" ;; + esac + + ## -W is not all that useful. And it cannot be controlled + ## with individual -Wno-xxx flags, unlike -Wall + if test "x$enable_cxx_warnings" = "xyes"; then + warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual" + fi + fi + fi + AC_MSG_RESULT($warnCXXFLAGS) + + AC_ARG_ENABLE(iso-cxx, + AC_HELP_STRING([--enable-iso-cxx], + [Try to warn if code is not ISO C++ ]),, + [enable_iso_cxx=no]) + + AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler) + complCXXFLAGS= + if test "x$enable_iso_cxx" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CXXFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) complCXXFLAGS="$complCXXFLAGS -ansi" ;; + esac + + case " $CXXFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) complCXXFLAGS="$complCXXFLAGS -pedantic" ;; + esac + fi + fi + AC_MSG_RESULT($complCXXFLAGS) + + WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS" + AC_SUBST(WARN_CXXFLAGS) +]) + +dnl -*- mode: autoconf -*- + +# serial 1 + +dnl Usage: +dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) +AC_DEFUN([GTK_DOC_CHECK], +[ + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + dnl for overriding the documentation installation directory + AC_ARG_WITH(html-dir, + AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, + [with_html_dir='${datadir}/gtk-doc/html']) + HTML_DIR="$with_html_dir" + AC_SUBST(HTML_DIR) + + dnl enable/disable documentation building + AC_ARG_ENABLE(gtk-doc, + AC_HELP_STRING([--enable-gtk-doc], + [use gtk-doc to build documentation [default=no]]),, + enable_gtk_doc=no) + + have_gtk_doc=no + if test x$enable_gtk_doc = xyes; then + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then + have_gtk_doc=yes + fi + + dnl do we want to do a version check? +ifelse([$1],[],, + [gtk_doc_min_version=$1 + if test "$have_gtk_doc" = yes; then + AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version]) + if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + have_gtk_doc=no + fi + fi +]) + if test "$have_gtk_doc" != yes; then + enable_gtk_doc=no + fi + fi + + AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes) + AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL") +]) + +dnl AM_GCONF_SOURCE_2 +dnl Defines GCONF_SCHEMA_CONFIG_SOURCE which is where you should install schemas +dnl (i.e. pass to gconftool-2 +dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where +dnl you should install foo.schemas files +dnl + +AC_DEFUN([AM_GCONF_SOURCE_2], +[ + if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then + GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source` + else + GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE + fi + + AC_ARG_WITH(gconf-source, + [ --with-gconf-source=sourceaddress Config database for installing schema files.],GCONF_SCHEMA_CONFIG_SOURCE="$withval",) + + AC_SUBST(GCONF_SCHEMA_CONFIG_SOURCE) + AC_MSG_RESULT([Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation]) + + if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then + GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas' + fi + + AC_ARG_WITH(gconf-schema-file-dir, + [ --with-gconf-schema-file-dir=dir Directory for installing schema files.],GCONF_SCHEMA_FILE_DIR="$withval",) + + AC_SUBST(GCONF_SCHEMA_FILE_DIR) + AC_MSG_RESULT([Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files]) + + AC_ARG_ENABLE(schemas-install, + [ --disable-schemas-install Disable the schemas installation], + [case "${enableval}" in + yes) schemas_install=true ;; + no) schemas_install=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-schemas-install) ;; + esac],[schemas_install=true]) + AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, test x$schemas_install = xtrue) +]) + diff --git a/lib/libgsf-1.12.3/compile b/lib/libgsf-1.12.3/compile new file mode 100755 index 0000000000..ac07cc5414 --- /dev/null +++ b/lib/libgsf-1.12.3/compile @@ -0,0 +1,107 @@ +#! /bin/sh + +# Wrapper for compilers which do not understand `-c -o'. + +# Copyright 1999, 2000 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# 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. + +# Usage: +# compile PROGRAM [ARGS]... +# `-o FOO.o' is removed from the args passed to the actual compile. + +# Usage statement added by Billy Biggs . +if [ -z $1 ]; then + echo "Wrapper for compilers which do not understand '-c -o'." + echo "usage: compile PROGRAM [ARGS]..." + echo "'-o FOO.o' is removed from the args passed to the actual compile." + exit 1 +fi + +prog=$1 +shift + +ofile= +cfile= +args= +while test $# -gt 0; do + case "$1" in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we do something ugly here. + ofile=$2 + shift + case "$ofile" in + *.o | *.obj) + ;; + *) + args="$args -o $ofile" + ofile= + ;; + esac + ;; + *.c) + cfile=$1 + args="$args $1" + ;; + *) + args="$args $1" + ;; + esac + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$prog" $args +fi + +# Name of file we expect compiler to create. +cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir $lockdir > /dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir $lockdir; exit 1" 1 2 15 + +# Run the compile. +"$prog" $args +status=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +fi + +rmdir $lockdir +exit $status diff --git a/lib/libgsf-1.12.3/config.guess b/lib/libgsf-1.12.3/config.guess new file mode 100755 index 0000000000..ad5281e66e --- /dev/null +++ b/lib/libgsf-1.12.3/config.guess @@ -0,0 +1,1466 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-08-03' + +# This file 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. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + *86) UNAME_PROCESSOR=i686 ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/lib/libgsf-1.12.3/config.sub b/lib/libgsf-1.12.3/config.sub new file mode 100755 index 0000000000..1c366dfde9 --- /dev/null +++ b/lib/libgsf-1.12.3/config.sub @@ -0,0 +1,1579 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-07-08' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ms1 \ + | msp430 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m32c) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | ms1-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + m32c-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/lib/libgsf-1.12.3/configure b/lib/libgsf-1.12.3/configure new file mode 100755 index 0000000000..82770fb53d --- /dev/null +++ b/lib/libgsf-1.12.3/configure @@ -0,0 +1,25867 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for libgsf 1.12.3. +# +# Report bugs to . +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-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. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='libgsf' +PACKAGE_TARNAME='libgsf' +PACKAGE_VERSION='1.12.3' +PACKAGE_STRING='libgsf 1.12.3' +PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf' + +ac_unique_file="gsf/gsf.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LIBGSF_MAJOR_VERSION LIBGSF_MINOR_VERSION LIBGSF_MICRO_VERSION VERSION_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT ACLOCAL_AMFLAGS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL AS ac_ct_AS OBJDUMP ac_ct_OBJDUMP CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL PKG_CONFIG INTLTOOL_DESKTOP_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_KEYS_RULE INTLTOOL_PROP_RULE INTLTOOL_OAF_RULE INTLTOOL_PONG_RULE INTLTOOL_SERVER_RULE INTLTOOL_SHEET_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_UI_RULE INTLTOOL_XAM_RULE INTLTOOL_KBD_RULE INTLTOOL_XML_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_CAVES_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_THEME_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE INTLTOOL_PERL INTLTOOL_ICONV INTLTOOL_MSGFMT INTLTOOL_MSGMERGE INTLTOOL_XGETTEXT USE_NLS MSGFMT GMSGFMT XGETTEXT CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLLIBS PO_IN_DATADIR_TRUE PO_IN_DATADIR_FALSE POFILES POSUB MKINSTALLDIRS GETTEXT_PACKAGE ac_pt_PKG_CONFIG LIBGSF_CFLAGS LIBGSF_LIBS WARN_CFLAGS OS_WIN32_TRUE OS_WIN32_FALSE PLATFORM_WIN32_TRUE PLATFORM_WIN32_FALSE HTML_DIR ENABLE_GTK_DOC_TRUE ENABLE_GTK_DOC_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_INSTALLED_TRUE GTK_DOC_INSTALLED_FALSE Z_CPPFLAGS Z_LIBS WITH_PYTHON_TRUE WITH_PYTHON_FALSE BZ2_LIBS LIBGSF_GNOME_CFLAGS LIBGSF_GNOME_LIBS WITH_LIBGSF_GNOME_TRUE WITH_LIBGSF_GNOME_FALSE GCONFTOOL GCONF_SCHEMA_CONFIG_SOURCE GCONF_SCHEMA_FILE_DIR GCONF_SCHEMAS_INSTALL_TRUE GCONF_SCHEMAS_INSTALL_FALSE WITH_GCONF_TRUE WITH_GCONF_FALSE LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +ac_env_CXX_set=${CXX+set} +ac_env_CXX_value=$CXX +ac_cv_env_CXX_set=${CXX+set} +ac_cv_env_CXX_value=$CXX +ac_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_env_CXXFLAGS_value=$CXXFLAGS +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_cv_env_CXXFLAGS_value=$CXXFLAGS +ac_env_CXXCPP_set=${CXXCPP+set} +ac_env_CXXCPP_value=$CXXCPP +ac_cv_env_CXXCPP_set=${CXXCPP+set} +ac_cv_env_CXXCPP_value=$CXXCPP +ac_env_F77_set=${F77+set} +ac_env_F77_value=$F77 +ac_cv_env_F77_set=${F77+set} +ac_cv_env_F77_value=$F77 +ac_env_FFLAGS_set=${FFLAGS+set} +ac_env_FFLAGS_value=$FFLAGS +ac_cv_env_FFLAGS_set=${FFLAGS+set} +ac_cv_env_FFLAGS_value=$FFLAGS +ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} +ac_env_PKG_CONFIG_value=$PKG_CONFIG +ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} +ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG +ac_env_LIBGSF_CFLAGS_set=${LIBGSF_CFLAGS+set} +ac_env_LIBGSF_CFLAGS_value=$LIBGSF_CFLAGS +ac_cv_env_LIBGSF_CFLAGS_set=${LIBGSF_CFLAGS+set} +ac_cv_env_LIBGSF_CFLAGS_value=$LIBGSF_CFLAGS +ac_env_LIBGSF_LIBS_set=${LIBGSF_LIBS+set} +ac_env_LIBGSF_LIBS_value=$LIBGSF_LIBS +ac_cv_env_LIBGSF_LIBS_set=${LIBGSF_LIBS+set} +ac_cv_env_LIBGSF_LIBS_value=$LIBGSF_LIBS +ac_env_LIBGSF_GNOME_CFLAGS_set=${LIBGSF_GNOME_CFLAGS+set} +ac_env_LIBGSF_GNOME_CFLAGS_value=$LIBGSF_GNOME_CFLAGS +ac_cv_env_LIBGSF_GNOME_CFLAGS_set=${LIBGSF_GNOME_CFLAGS+set} +ac_cv_env_LIBGSF_GNOME_CFLAGS_value=$LIBGSF_GNOME_CFLAGS +ac_env_LIBGSF_GNOME_LIBS_set=${LIBGSF_GNOME_LIBS+set} +ac_env_LIBGSF_GNOME_LIBS_value=$LIBGSF_GNOME_LIBS +ac_cv_env_LIBGSF_GNOME_LIBS_set=${LIBGSF_GNOME_LIBS+set} +ac_cv_env_LIBGSF_GNOME_LIBS_value=$LIBGSF_GNOME_LIBS + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libgsf 1.12.3 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libgsf 1.12.3:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors + --enable-shared[=PKGS] + build shared libraries [default=yes] + --enable-static[=PKGS] + build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + --enable-compile-warnings=[no/minimum/yes/maximum/error] + Turn on compiler warnings + --enable-iso-c Try to warn if code is not ISO C + --enable-gtk-doc use gtk-doc to build documentation default=no + --disable-schemas-install Disable the schemas installation + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] + include additional configurations [automatic] + --with-html-dir=PATH path to installed docs + --with-zlib=DIR use libz in DIR +--{with,without}-bz2 Build additional wrappers for BZ2 +--{with,without}-gnome Build additional wrappers for GNOME-VFS and BONOBO + --with-gconf-source=sourceaddress Config database for installing schema files. + --with-gconf-schema-file-dir=dir Directory for installing schema files. + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + PKG_CONFIG path to pkg-config utility + LIBGSF_CFLAGS + C compiler flags for LIBGSF, overriding pkg-config + LIBGSF_LIBS linker flags for LIBGSF, overriding pkg-config + LIBGSF_GNOME_CFLAGS + C compiler flags for LIBGSF_GNOME, overriding pkg-config + LIBGSF_GNOME_LIBS + linker flags for LIBGSF_GNOME, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +libgsf configure 1.12.3 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libgsf $as_me 1.12.3, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LIBGSF_MAJOR_VERSION=1 + +LIBGSF_MINOR_VERSION=12 + +LIBGSF_MICRO_VERSION=3 + + +VERSION_INFO=13:3:12 + + + +am__api_version="1.7" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + + # test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libgsf' + VERSION='1.12.3' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. + + + + + ac_config_headers="$ac_config_headers gsf-config.h" + +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi; + echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +ACLOCAL_AMFLAGS=$ACLOCAL_FLAGS + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi; + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi; + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi; + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED + +fi + +echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6 + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' + +echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6 +NM="$lt_cv_path_NM" + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + +echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 3720 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_cc_needs_belf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*-cygwin* | *-*-mingw* | *-*-pw32*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_DLLTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + echo "$as_me:$LINENO: result: $DLLTOOL" >&5 +echo "${ECHO_T}$DLLTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_DLLTOOL" && ac_cv_prog_ac_ct_DLLTOOL="false" +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 +echo "${ECHO_T}$ac_ct_DLLTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + DLLTOOL=$ac_ct_DLLTOOL +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + echo "$as_me:$LINENO: result: $AS" >&5 +echo "${ECHO_T}$AS" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AS" && ac_cv_prog_ac_ct_AS="false" +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 +echo "${ECHO_T}$ac_ct_AS" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AS=$ac_ct_AS +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +echo "${ECHO_T}$OBJDUMP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_OBJDUMP" && ac_cv_prog_ac_ct_OBJDUMP="false" +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +echo "${ECHO_T}$ac_ct_OBJDUMP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + OBJDUMP=$ac_ct_OBJDUMP +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; + +esac + +need_locks="$enable_libtool_lock" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## --------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf ## +## --------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CXX" && break +done +test -n "$ac_ct_CXX" || ac_ct_CXX="g++" + + CXX=$ac_ct_CXX +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +CXXFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cxx_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$CXX" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6 +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_F77" && break +done + + F77=$ac_ct_F77 +fi + + +# Provide some information about the compiler. +echo "$as_me:5519:" \ + "checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_f77_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # 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"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # 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. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 +else + echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6 +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris* | sysv5*) + symcode='[BDRT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6 +else + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 +fi + +echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6 +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6 +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=yes + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi; +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# +# Check for any special shared library compilation flags. +# +lt_prog_cc_shlib= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + lt_prog_cc_shlib='-belf' + ;; + esac +fi +if test -n "$lt_prog_cc_shlib"; then + { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : + else + { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + lt_cv_prog_cc_can_build_shared=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_prog_compiler_static" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:6551: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:6555: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic='-Kpic' + lt_prog_compiler_static='-dn' + ;; + + solaris*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:6784: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:6788: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:6844: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:6848: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds="$tmp_archive_cmds" + fi + link_all_deplibs=no + else + ld_shlibs=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec=' ' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi4*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6 +test "$ld_shlibs" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var " || \ + test "X$hardcode_automatic"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which librarie types wil actually be built +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags or --without-tags was given. +if test "${with_tags+set}" = set; then + withval="$with_tags" + tagnames="$withval" +fi; + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_CXX=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX=' ' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_CXX=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + archive_cmds_need_lc_CXX=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_CXX='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='-all_load $convenience' + link_all_deplibs_CXX=yes + else + ld_shlibs_CXX=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd12*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + hardcode_libdir_separator_CXX=: + ;; + ia64*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + *) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + archive_cmds_need_lc_CXX=no + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sco*) + archive_cmds_need_lc_CXX=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.0-5 | solaris2.0-5.*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + archive_cmds_need_lc_CXX=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11307: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:11311: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11367: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11371: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var CXX" || \ + test "X$hardcode_automatic_CXX"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6 + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + test "$enable_shared" = yes && enable_static=no + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +test "$ld_shlibs_F77" = no && can_build_shared=no + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_F77='-Kpic' + lt_prog_compiler_static_F77='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13661: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:13665: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13721: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:13725: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_F77="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_F77="$tmp_archive_cmds" + fi + link_all_deplibs_F77=no + else + ld_shlibs_F77=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_F77=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77=' ' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi4*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_F77=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_F77='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='-all_load $convenience' + link_all_deplibs_F77=yes + else + ld_shlibs_F77=no + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + ia64*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + *) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + sco3.2v5*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_F77='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv5*) + no_undefined_flag_F77=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_F77= + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6 +test "$ld_shlibs_F77" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var F77" || \ + test "X$hardcode_automatic_F77"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6 + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15766: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:15770: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_GCJ='-Kpic' + lt_prog_compiler_static_GCJ='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15999: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16003: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16059: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:16063: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_GCJ="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_GCJ="$tmp_archive_cmds" + fi + link_all_deplibs_GCJ=no + else + ld_shlibs_GCJ=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_GCJ=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ=' ' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi4*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_GCJ=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='-all_load $convenience' + link_all_deplibs_GCJ=yes + else + ld_shlibs_GCJ=no + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + ia64*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + *) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd* | netbsdelf*-gnu | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + sco3.2v5*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv5*) + no_undefined_flag_GCJ=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_GCJ= + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var GCJ" || \ + test "X$hardcode_automatic_GCJ"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6 + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # 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 + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + +echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_largefile_source+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_largefile_source=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +return !fseeko; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include +int +main () +{ +return !fseeko; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_largefile_source=1; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6 +if test "$ac_cv_sys_largefile_source" != no; then + +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF + +fi +rm -f conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +echo "$as_me:$LINENO: checking for fseeko" >&5 +echo $ECHO_N "checking for fseeko... $ECHO_C" >&6 +if test "${ac_cv_func_fseeko+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +return fseeko && fseeko (stdin, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_fseeko=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_fseeko=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_fseeko" >&5 +echo "${ECHO_T}$ac_cv_func_fseeko" >&6 +if test $ac_cv_func_fseeko = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FSEEKO 1 +_ACEOF + +fi + +# Check whether --enable-largefile or --disable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval="$enable_largefile" + +fi; +if test "$enable_largefile" != no; then + + echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 +echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_largefile_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext + CC="$CC -n32" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_largefile_CC=' -n32'; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_file_offset_bits=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_file_offset_bits=64; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 +echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 +if test "$ac_cv_sys_file_offset_bits" != no; then + +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF + +fi +rm -f conftest* + echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 +echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_large_files+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_large_files=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_large_files=1; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 +echo "${ECHO_T}$ac_cv_sys_large_files" >&6 +if test "$ac_cv_sys_large_files" != no; then + +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF + +fi +rm -f conftest* +fi + +# Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + + + +if test -n ""; then + echo "$as_me:$LINENO: checking for intltool >= " >&5 +echo $ECHO_N "checking for intltool >= ... $ECHO_C" >&6 + + INTLTOOL_REQUIRED_VERSION_AS_INT=`echo | awk -F. '{ printf "%d", $1 * 100 + $2; }'` + INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $2; }' < ${ac_aux_dir}/intltool-update.in` + + INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($2, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in` + + + if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then + echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found" >&5 +echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found" >&6 + else + echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found. Your intltool is too old. You need intltool or later." >&5 +echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found. Your intltool is too old. You need intltool or later." >&6 + exit 1 + fi +fi + + INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@' + INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@' + INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + + + + + + + + + + + + + + + + + + + +# Use the tools built into the package, not the ones that are installed. + +INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract' +INTLTOOL_MERGE='$(top_builddir)/intltool-merge' +INTLTOOL_UPDATE='$(top_builddir)/intltool-update' + + + + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL + +if test -n "$INTLTOOL_PERL"; then + echo "$as_me:$LINENO: result: $INTLTOOL_PERL" >&5 +echo "${ECHO_T}$INTLTOOL_PERL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$INTLTOOL_PERL"; then + { { echo "$as_me:$LINENO: error: perl not found; required for intltool" >&5 +echo "$as_me: error: perl not found; required for intltool" >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then + { { echo "$as_me:$LINENO: error: perl 5.x required for intltool" >&5 +echo "$as_me: error: perl 5.x required for intltool" >&2;} + { (exit 1); exit 1; }; } +fi +if test "x" != "xno-xml"; then + echo "$as_me:$LINENO: checking for XML::Parser" >&5 +echo $ECHO_N "checking for XML::Parser... $ECHO_C" >&6 + if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 + else + { { echo "$as_me:$LINENO: error: XML::Parser perl module is required for intltool" >&5 +echo "$as_me: error: XML::Parser perl module is required for intltool" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# Extract the first word of "iconv", so it can be a program name with args. +set dummy iconv; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_ICONV+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_ICONV in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_ICONV="$INTLTOOL_ICONV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_ICONV="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_ICONV" && ac_cv_path_INTLTOOL_ICONV="iconv" + ;; +esac +fi +INTLTOOL_ICONV=$ac_cv_path_INTLTOOL_ICONV + +if test -n "$INTLTOOL_ICONV"; then + echo "$as_me:$LINENO: result: $INTLTOOL_ICONV" >&5 +echo "${ECHO_T}$INTLTOOL_ICONV" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_MSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_MSGFMT="$INTLTOOL_MSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_MSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_MSGFMT" && ac_cv_path_INTLTOOL_MSGFMT="msgfmt" + ;; +esac +fi +INTLTOOL_MSGFMT=$ac_cv_path_INTLTOOL_MSGFMT + +if test -n "$INTLTOOL_MSGFMT"; then + echo "$as_me:$LINENO: result: $INTLTOOL_MSGFMT" >&5 +echo "${ECHO_T}$INTLTOOL_MSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_MSGMERGE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_MSGMERGE in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_MSGMERGE="$INTLTOOL_MSGMERGE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_MSGMERGE" && ac_cv_path_INTLTOOL_MSGMERGE="msgmerge" + ;; +esac +fi +INTLTOOL_MSGMERGE=$ac_cv_path_INTLTOOL_MSGMERGE + +if test -n "$INTLTOOL_MSGMERGE"; then + echo "$as_me:$LINENO: result: $INTLTOOL_MSGMERGE" >&5 +echo "${ECHO_T}$INTLTOOL_MSGMERGE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_INTLTOOL_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $INTLTOOL_XGETTEXT in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_XGETTEXT="$INTLTOOL_XGETTEXT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_INTLTOOL_XGETTEXT" && ac_cv_path_INTLTOOL_XGETTEXT="xgettext" + ;; +esac +fi +INTLTOOL_XGETTEXT=$ac_cv_path_INTLTOOL_XGETTEXT + +if test -n "$INTLTOOL_XGETTEXT"; then + echo "$as_me:$LINENO: result: $INTLTOOL_XGETTEXT" >&5 +echo "${ECHO_T}$INTLTOOL_XGETTEXT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + +# Remove file type tags (using []) from po/POTFILES. + + + + + + + +# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT. + + ac_config_commands="$ac_config_commands intltool" + + + + +ALL_LINGUAS="es" + + + +for ac_header in locale.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## --------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf ## +## --------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_locale_h = yes; then + echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 +if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_val_LC_MESSAGES=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_val_LC_MESSAGES=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 + if test $am_cv_val_LC_MESSAGES = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LC_MESSAGES 1 +_ACEOF + + fi + fi + USE_NLS=yes + + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + if test "${ac_cv_header_libintl_h+set}" = set; then + echo "$as_me:$LINENO: checking for libintl.h" >&5 +echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 +if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking libintl.h usability" >&5 +echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking libintl.h presence" >&5 +echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## --------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf ## +## --------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for libintl.h" >&5 +echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 +if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_libintl_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 + +fi +if test $ac_cv_header_libintl_h = yes; then + gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + echo "$as_me:$LINENO: checking for ngettext in libc" >&5 +echo $ECHO_N "checking for ngettext in libc... $ECHO_C" >&6 +if test "${gt_cv_func_ngettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include + +int +main () +{ +return !ngettext ("","", 1) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_ngettext_libc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_ngettext_libc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $gt_cv_func_ngettext_libc" >&5 +echo "${ECHO_T}$gt_cv_func_ngettext_libc" >&6 + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + echo "$as_me:$LINENO: checking for dgettext in libc" >&5 +echo $ECHO_N "checking for dgettext in libc... $ECHO_C" >&6 +if test "${gt_cv_func_dgettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include + +int +main () +{ +return !dgettext ("","") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_dgettext_libc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_dgettext_libc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $gt_cv_func_dgettext_libc" >&5 +echo "${ECHO_T}$gt_cv_func_dgettext_libc" >&6 + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + +for ac_func in bind_textdomain_codeset +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bindtextdomain (); +int +main () +{ +bindtextdomain (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_bindtextdomain=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_bindtextdomain=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 +if test $ac_cv_lib_intl_bindtextdomain = yes; then + echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5 +echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_ngettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ngettext (); +int +main () +{ +ngettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_ngettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_ngettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6 +if test $ac_cv_lib_intl_ngettext = yes; then + echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5 +echo $ECHO_N "checking for dgettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_dgettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dgettext (); +int +main () +{ +dgettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_dgettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_dgettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dgettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_dgettext" >&6 +if test $ac_cv_lib_intl_dgettext = yes; then + gt_cv_func_dgettext_libintl=yes +fi + +fi + +fi + + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + echo "$as_me:$LINENO: checking if -liconv is needed to use gettext" >&5 +echo $ECHO_N "checking if -liconv is needed to use gettext... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: " >&5 +echo "${ECHO_T}" >&6 + echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5 +echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_ngettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl -liconv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ngettext (); +int +main () +{ +ngettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_ngettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_ngettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6 +if test $ac_cv_lib_intl_ngettext = yes; then + echo "$as_me:$LINENO: checking for dcgettext in -lintl" >&5 +echo $ECHO_N "checking for dcgettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_dcgettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl -liconv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dcgettext (); +int +main () +{ +dcgettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_dcgettext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_dcgettext=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dcgettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_dcgettext" >&6 +if test $ac_cv_lib_intl_dcgettext = yes; then + gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv +else + : +fi + +else + : +fi + + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + +for ac_func in bind_textdomain_codeset +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETTEXT 1 +_ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != "no"; then + echo "$as_me:$LINENO: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + +for ac_func in dcgettext +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + CATOBJEXT=.gmo + DATADIRNAME=share +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +case $host in + *-*-solaris*) + echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5 +echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6 +if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define bind_textdomain_codeset to an innocuous variant, in case declares bind_textdomain_codeset. + For example, HP-UX 11i declares gettimeofday. */ +#define bind_textdomain_codeset innocuous_bind_textdomain_codeset + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char bind_textdomain_codeset (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef bind_textdomain_codeset + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bind_textdomain_codeset (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_bind_textdomain_codeset) || defined (__stub___bind_textdomain_codeset) +choke me +#else +char (*f) () = bind_textdomain_codeset; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != bind_textdomain_codeset; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_bind_textdomain_codeset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_bind_textdomain_codeset=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5 +echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6 +if test $ac_cv_func_bind_textdomain_codeset = yes; then + CATOBJEXT=.gmo + DATADIRNAME=share +else + CATOBJEXT=.mo + DATADIRNAME=lib +fi + + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + +fi + + + + if test "$gt_cv_have_gettext" = "yes" ; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_NLS 1 +_ACEOF + + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + ac_config_commands="$ac_config_commands default-1" + + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + + + + + + + + + + + + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + echo "$as_me:$LINENO: result: $LINGUAS" >&5 +echo "${ECHO_T}$LINGUAS" >&6 + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + + +GETTEXT_PACKAGE=libgsf + + +cat >>confdefs.h <<_ACEOF +#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" +_ACEOF + + + +libgsf_reqs=" + gobject-2.0 >= 2.4.0 + glib-2.0 >= 2.4.0 + libxml-2.0 >= 2.4.16 +" +libgsf_gnome_reqs=" + $libgsf_reqs + libbonobo-2.0 >= 2.0.0 + gnome-vfs-2.0 >= 2.2.0 + gnome-vfs-module-2.0 >= 2.2.0 +" + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG + +if test -n "$ac_pt_PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 +echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + PKG_CONFIG=$ac_pt_PKG_CONFIG +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 +echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +echo "$as_me:$LINENO: checking for LIBGSF" >&5 +echo $ECHO_N "checking for LIBGSF... $ECHO_C" >&6 + +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$libgsf_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$libgsf_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_LIBGSF_CFLAGS=`$PKG_CONFIG --cflags "$libgsf_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$libgsf_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$libgsf_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_LIBGSF_LIBS=`$PKG_CONFIG --libs "$libgsf_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + LIBGSF_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$libgsf_reqs"` + # Put the nasty error message in config.log where it belongs + echo "$LIBGSF_PKG_ERRORS" 1>&5 + + { { echo "$as_me:$LINENO: error: Package requirements ($libgsf_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the LIBGSF_CFLAGS and LIBGSF_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&5 +echo "$as_me: error: Package requirements ($libgsf_reqs) were not met. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively you may set the LIBGSF_CFLAGS and LIBGSF_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details." >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the LIBGSF_CFLAGS and LIBGSF_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively you may set the LIBGSF_CFLAGS and LIBGSF_LIBS environment variables +to avoid the need to call pkg-config. See the pkg-config man page for +more details. + +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + LIBGSF_CFLAGS=$pkg_cv_LIBGSF_CFLAGS + LIBGSF_LIBS=$pkg_cv_LIBGSF_LIBS + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + : +fi + +## this should come after `AC_PROG_CC' + + + # Check whether --enable-compile-warnings or --disable-compile-warnings was given. +if test "${enable_compile_warnings+set}" = set; then + enableval="$enable_compile_warnings" + +else + enable_compile_warnings="yes" +fi; + + warnCFLAGS= + if test "x$GCC" != xyes; then + enable_compile_warnings=no + fi + + warning_flags= + realsave_CFLAGS="$CFLAGS" + + case "$enable_compile_warnings" in + no) + warning_flags= + ;; + minimum) + warning_flags="-Wall" + ;; + yes) + warning_flags="-Wall -Wmissing-prototypes" + ;; + maximum|error) + warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith" + CFLAGS="$warning_flags $CFLAGS" + for option in -Wno-sign-compare; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + echo "$as_me:$LINENO: checking whether gcc understands $option" >&5 +echo $ECHO_N "checking whether gcc understands $option... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + has_option=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +has_option=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$SAVE_CFLAGS" + echo "$as_me:$LINENO: result: $has_option" >&5 +echo "${ECHO_T}$has_option" >&6 + if test $has_option = yes; then + warning_flags="$warning_flags $option" + fi + unset has_option + unset SAVE_CFLAGS + done + unset option + if test "$enable_compile_warnings" = "error" ; then + warning_flags="$warning_flags -Werror" + fi + ;; + *) + { { echo "$as_me:$LINENO: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&5 +echo "$as_me: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + CFLAGS="$realsave_CFLAGS" + echo "$as_me:$LINENO: checking what warning flags to pass to the C compiler" >&5 +echo $ECHO_N "checking what warning flags to pass to the C compiler... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $warning_flags" >&5 +echo "${ECHO_T}$warning_flags" >&6 + + # Check whether --enable-iso-c or --disable-iso-c was given. +if test "${enable_iso_c+set}" = set; then + enableval="$enable_iso_c" + +else + enable_iso_c=no +fi; + + echo "$as_me:$LINENO: checking what language compliance flags to pass to the C compiler" >&5 +echo $ECHO_N "checking what language compliance flags to pass to the C compiler... $ECHO_C" >&6 + complCFLAGS= + if test "x$enable_iso_c" != "xno"; then + if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *\ \ -ansi\ \ *) ;; + *) complCFLAGS="$complCFLAGS -ansi" ;; + esac + case " $CFLAGS " in + *\ \ -pedantic\ \ *) ;; + *) complCFLAGS="$complCFLAGS -pedantic" ;; + esac + fi + fi + echo "$as_me:$LINENO: result: $complCFLAGS" >&5 +echo "${ECHO_T}$complCFLAGS" >&6 + + WARN_CFLAGS="$warning_flags $complCFLAGS" + + +CFLAGS="$CFLAGS $WARN_CFLAGS -DG_DISABLE_DEPRECATED" +if test "$GCC" = "yes"; then + for option in -Wno-system-headers -Wfloat-equal -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wformat -Wnested-externs -Winline -Wdeclaration-after-statement -Wundef -W -Wmissing-noreturn -Wmissing-format-attribute; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + echo "$as_me:$LINENO: checking whether gcc understands $option" >&5 +echo $ECHO_N "checking whether gcc understands $option... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + has_option=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +has_option=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + if test $has_option = no; then + CFLAGS="$SAVE_CFLAGS" + fi + echo "$as_me:$LINENO: result: $has_option" >&5 +echo "${ECHO_T}$has_option" >&6 + unset has_option + unset SAVE_CFLAGS + done + unset option +fi + +echo "$as_me:$LINENO: checking whether fdopen is declared" >&5 +echo $ECHO_N "checking whether fdopen is declared... $ECHO_C" >&6 +if test "${ac_cv_have_decl_fdopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef fdopen + char *p = (char *) fdopen; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_have_decl_fdopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_have_decl_fdopen=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_have_decl_fdopen" >&5 +echo "${ECHO_T}$ac_cv_have_decl_fdopen" >&6 +if test $ac_cv_have_decl_fdopen = yes; then + fdopen_works=yes +else + fdopen_works=no +fi + +if test $fdopen_works = no ; then + unset ac_cv_have_decl_fdopen + CFLAGS="$CFLAGS -D_POSIX_SOURCE" + { echo "$as_me:$LINENO: adding -D_POSIX_SOURCE to CFLAGS" >&5 +echo "$as_me: adding -D_POSIX_SOURCE to CFLAGS" >&6;} + echo "$as_me:$LINENO: checking whether fdopen is declared" >&5 +echo $ECHO_N "checking whether fdopen is declared... $ECHO_C" >&6 +if test "${ac_cv_have_decl_fdopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef fdopen + char *p = (char *) fdopen; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_have_decl_fdopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_have_decl_fdopen=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_have_decl_fdopen" >&5 +echo "${ECHO_T}$ac_cv_have_decl_fdopen" >&6 +if test $ac_cv_have_decl_fdopen = yes; then + fdopen_works=yes +else + fdopen_works=no +fi + + if test $fdopen_works = no ; then + { { echo "$as_me:$LINENO: error: fdopen is not available" >&5 +echo "$as_me: error: fdopen is not available" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# Unfortunately, -D_POSIX_SOURCE turns off struct timeval on Solaris +echo "$as_me:$LINENO: checking whether struct timeval is available" >&5 +echo $ECHO_N "checking whether struct timeval is available... $ECHO_C" >&6 +for try in 1 2; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +struct timeval tv; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + struct_timeval_works=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +struct_timeval_works=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + test $struct_timeval_works = yes && break + # Try this for the second attempt: + test $try = 1 && CFLAGS="$CFLAGS -D__EXTENSIONS__" +done +echo "$as_me:$LINENO: result: $struct_timeval_works" >&5 +echo "${ECHO_T}$struct_timeval_works" >&6 +if test $struct_timeval_works = no ; then + { { echo "$as_me:$LINENO: error: struct timeval is not available" >&5 +echo "$as_me: error: struct timeval is not available" >&2;} + { (exit 1); exit 1; }; } +fi + +echo "$as_me:$LINENO: checking whether -D_BSD_SOURCE is needed for caddr_t" >&5 +echo $ECHO_N "checking whether -D_BSD_SOURCE is needed for caddr_t... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +caddr_t ca + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + need_bsd1=no +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +need_bsd1=yes +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $need_bsd1" >&5 +echo "${ECHO_T}$need_bsd1" >&6 + +echo "$as_me:$LINENO: checking whether -D_BSD_SOURCE is needed for lstat" >&5 +echo $ECHO_N "checking whether -D_BSD_SOURCE is needed for lstat... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +int +main () +{ +void *ptr = &lstat + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + need_bsd2=no +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +need_bsd2=yes +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +echo "$as_me:$LINENO: result: $need_bsd2" >&5 +echo "${ECHO_T}$need_bsd2" >&6 +if test $need_bsd1 = yes -o $need_bsd2 = yes; then + CFLAGS="$CFLAGS -D_BSD_SOURCE" +fi + +echo "$as_me:$LINENO: checking for mode_t" >&5 +echo $ECHO_N "checking for mode_t... $ECHO_C" >&6 +if test "${ac_cv_type_mode_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((mode_t *) 0) + return 0; +if (sizeof (mode_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_mode_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_mode_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 +echo "${ECHO_T}$ac_cv_type_mode_t" >&6 +if test $ac_cv_type_mode_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + + + + + +for ac_header in fcntl.h malloc.h unistd.h io.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## --------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf ## +## --------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in stdlib.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## --------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf ## +## --------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_func in getpagesize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +echo "$as_me:$LINENO: checking for working mmap" >&5 +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !STDC_HEADERS && !HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#if !HAVE_GETPAGESIZE +/* Assume that all systems that can run configure have sys/param.h. */ +# if !HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# if HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + exit (1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + exit (1); + if (write (fd, data, pagesize) != pagesize) + exit (1); + close (fd); + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + exit (1); + data2 = (char *) malloc (2 * pagesize); + if (!data2) + exit (1); + data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit (1); + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + exit (1); + if (read (fd, data3, pagesize) != pagesize) + exit (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit (1); + close (fd); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MMAP 1 +_ACEOF + +fi +rm -f conftest.mmap + + + +for ac_func in chown +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +SAVE_CFLAGS=$CFLAGS +SAVE_LIBS=$LIBS +CFLAGS="$CFLAGS $LIBGSF_CFLAGS" +LIBS="$LIBGSF_LIBS $LIBS" +echo "$as_me:$LINENO: checking for g_chmod" >&5 +echo $ECHO_N "checking for g_chmod... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +(void)g_chmod("/xxx",0777); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_G_CHMOD 1 +_ACEOF + + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +echo "$as_me:$LINENO: checking for g_access" >&5 +echo $ECHO_N "checking for g_access... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +(void)g_access("/xxx",0777); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_G_ACCESS 1 +_ACEOF + + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +CFLAGS=$SAVE_CFLAGS +LIBS=$SAVE_LIBS + +echo "$as_me:$LINENO: checking whether macro S_ISREG is available" >&5 +echo $ECHO_N "checking whether macro S_ISREG is available... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +S_ISREG(S_IFMT); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + macro_s_isreg=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + cat >>confdefs.h <<\_ACEOF +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +_ACEOF + + macro_s_isreg=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $macro_s_isreg" >&5 +echo "${ECHO_T}$macro_s_isreg" >&6 + +echo "$as_me:$LINENO: checking for native Win32" >&5 +echo $ECHO_N "checking for native Win32... $ECHO_C" >&6 +case $host in + *-*-mingw*) + native_win32=yes + ;; + *) + native_win32=no + ;; +esac +echo "$as_me:$LINENO: result: $native_win32" >&5 +echo "${ECHO_T}$native_win32" >&6 + + +if test "$native_win32" = yes; then + OS_WIN32_TRUE= + OS_WIN32_FALSE='#' +else + OS_WIN32_TRUE='#' + OS_WIN32_FALSE= +fi + + +echo "$as_me:$LINENO: checking for Win32 platform in general" >&5 +echo $ECHO_N "checking for Win32 platform in general... $ECHO_C" >&6 +case $host in + *-*-mingw*|*-*-cygwin*) + platform_win32=yes + ;; + *) + platform_win32=no + ;; +esac +echo "$as_me:$LINENO: result: $platform_win32" >&5 +echo "${ECHO_T}$platform_win32" >&6 + + +if test "$platform_win32" = yes; then + PLATFORM_WIN32_TRUE= + PLATFORM_WIN32_FALSE='#' +else + PLATFORM_WIN32_TRUE='#' + PLATFORM_WIN32_FALSE= +fi + + +################################################## +# Checks for gtk-doc and docbook-tools +################################################## +gtk_doc_installed=true +#ifdef([GTK_DOC_CHECK],[GTK_DOC_CHECK([1.0])],[gtk_doc_installed=false]) +# I would have liked to conditionalize this, but +# that appears to break other things http://bugzilla.gnome.org/show_bug.cgi?id=156399 + + +# Check whether --with-html-dir or --without-html-dir was given. +if test "${with_html_dir+set}" = set; then + withval="$with_html_dir" + +else + with_html_dir='${datadir}/gtk-doc/html' +fi; + HTML_DIR="$with_html_dir" + + + # Check whether --enable-gtk-doc or --disable-gtk-doc was given. +if test "${enable_gtk_doc+set}" = set; then + enableval="$enable_gtk_doc" + +else + enable_gtk_doc=no +fi; + + have_gtk_doc=no + if test x$enable_gtk_doc = xyes; then + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then + have_gtk_doc=yes + fi + + gtk_doc_min_version=1.0 + if test "$have_gtk_doc" = yes; then + echo "$as_me:$LINENO: checking gtk-doc version >= $gtk_doc_min_version" >&5 +echo $ECHO_N "checking gtk-doc version >= $gtk_doc_min_version... $ECHO_C" >&6 + if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + have_gtk_doc=no + fi + fi + + if test "$have_gtk_doc" != yes; then + enable_gtk_doc=no + fi + fi + + + +if test x$enable_gtk_doc = xyes; then + ENABLE_GTK_DOC_TRUE= + ENABLE_GTK_DOC_FALSE='#' +else + ENABLE_GTK_DOC_TRUE='#' + ENABLE_GTK_DOC_FALSE= +fi + + + +if test -n "$LIBTOOL"; then + GTK_DOC_USE_LIBTOOL_TRUE= + GTK_DOC_USE_LIBTOOL_FALSE='#' +else + GTK_DOC_USE_LIBTOOL_TRUE='#' + GTK_DOC_USE_LIBTOOL_FALSE= +fi + + + + +if $gtk_doc_installed; then + GTK_DOC_INSTALLED_TRUE= + GTK_DOC_INSTALLED_FALSE='#' +else + GTK_DOC_INSTALLED_TRUE='#' + GTK_DOC_INSTALLED_FALSE= +fi + + +# Check for zlib. +_cppflags=$CPPFLAGS +_ldflags=$LDFLAGS + +Z_DIR= Z_LIBS= Z_CPPFLAGS= + + +# Check whether --with-zlib or --without-zlib was given. +if test "${with_zlib+set}" = set; then + withval="$with_zlib" + case $withval in + yes|no) ;; + *) Z_DIR=$withval + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib" + ;; + esac +fi; + +if test "x$with_zlib" != xno; then + with_zlib=no + if test "${ac_cv_header_zlib_h+set}" = set; then + echo "$as_me:$LINENO: checking for zlib.h" >&5 +echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6 +if test "${ac_cv_header_zlib_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 +echo "${ECHO_T}$ac_cv_header_zlib_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking zlib.h usability" >&5 +echo $ECHO_N "checking zlib.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking zlib.h presence" >&5 +echo $ECHO_N "checking zlib.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## --------------------------------------------------------------------- ## +## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf ## +## --------------------------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for zlib.h" >&5 +echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6 +if test "${ac_cv_header_zlib_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_zlib_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 +echo "${ECHO_T}$ac_cv_header_zlib_h" >&6 + +fi +if test $ac_cv_header_zlib_h = yes; then + echo "$as_me:$LINENO: checking for gzread in -lz" >&5 +echo $ECHO_N "checking for gzread in -lz... $ECHO_C" >&6 +if test "${ac_cv_lib_z_gzread+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gzread (); +int +main () +{ +gzread (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_z_gzread=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_z_gzread=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzread" >&5 +echo "${ECHO_T}$ac_cv_lib_z_gzread" >&6 +if test $ac_cv_lib_z_gzread = yes; then + with_zlib=yes +fi + +fi + + +fi +if test "$with_zlib" = no; then + { { echo "$as_me:$LINENO: error: *** zlib is required" >&5 +echo "$as_me: error: *** zlib is required" >&2;} + { (exit 1); exit 1; }; } +fi +if test "x$Z_DIR" != "x"; then + Z_CPPFLAGS="-I$Z_DIR/include" + case $host in + *-*-solaris*) Z_LIBS="-L$Z_DIR/lib -R$Z_DIR/lib -lz" ;; + *) Z_LIBS="-L$Z_DIR/lib -lz" ;; + esac +else + Z_LIBS="-lz" +fi + + + +CPPFLAGS=${_cppflags} +LDFLAGS=${_ldflags} + +pygtk_msg=no + + + + +if test "$pygtk_msg" = yes; then + WITH_PYTHON_TRUE= + WITH_PYTHON_FALSE='#' +else + WITH_PYTHON_TRUE='#' + WITH_PYTHON_FALSE= +fi + + + +BZ2_LIBS= +test_bz2=true + +# Check whether --with-bz2 or --without-bz2 was given. +if test "${with_bz2+set}" = set; then + withval="$with_bz2" + if test "x$withval" = xno; then + test_bz2=false + fi + +fi; + +with_bz2=false +if test "x$test_bz2" = xtrue ; then + echo "$as_me:$LINENO: checking for BZ2_bzDecompressInit in -lbz2" >&5 +echo $ECHO_N "checking for BZ2_bzDecompressInit in -lbz2... $ECHO_C" >&6 +if test "${ac_cv_lib_bz2_BZ2_bzDecompressInit+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbz2 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char BZ2_bzDecompressInit (); +int +main () +{ +BZ2_bzDecompressInit (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_bz2_BZ2_bzDecompressInit=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_bz2_BZ2_bzDecompressInit=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_bz2_BZ2_bzDecompressInit" >&5 +echo "${ECHO_T}$ac_cv_lib_bz2_BZ2_bzDecompressInit" >&6 +if test $ac_cv_lib_bz2_BZ2_bzDecompressInit = yes; then + bz2_ok=yes +else + bz2_ok=no + { echo "$as_me:$LINENO: WARNING: *** BZ2 support disabled (BZ2 library not found) ***" >&5 +echo "$as_me: WARNING: *** BZ2 support disabled (BZ2 library not found) ***" >&2;} +fi + + + if test "$bz2_ok" = yes; then + echo "$as_me:$LINENO: checking for bzlib.h" >&5 +echo $ECHO_N "checking for bzlib.h... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #undef PACKAGE + #undef VERSION + #undef HAVE_STDLIB_H + #include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + bz2_ok=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + bz2_ok=no +fi +rm -f conftest.err conftest.$ac_ext + echo "$as_me:$LINENO: result: $bz2_ok" >&5 +echo "${ECHO_T}$bz2_ok" >&6 + fi + + if test "$bz2_ok" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BZ2 1 +_ACEOF + + BZ2_LIBS="-lbz2" + else + { echo "$as_me:$LINENO: WARNING: *** BZ2 support disabled (BZ2 header not found) ***" >&5 +echo "$as_me: WARNING: *** BZ2 support disabled (BZ2 header not found) ***" >&2;} + fi +else + { echo "$as_me:$LINENO: WARNING: BZ2 support disabled, as requested (Use --with-bz2 to enable)" >&5 +echo "$as_me: WARNING: BZ2 support disabled, as requested (Use --with-bz2 to enable)" >&2;} +fi + + + + +want_gnome=auto + +# Check whether --with-gnome or --without-gnome was given. +if test "${with_gnome+set}" = set; then + withval="$with_gnome" + case $withval in + yes) want_gnome=yes;; + no) want_gnome=no;; + esac +fi; +have_gnome=no +if test $want_gnome = no ; then + { echo "$as_me:$LINENO: WARNING: GNOME support disabled, as requested (Use --with-gnome to enable)" >&5 +echo "$as_me: WARNING: GNOME support disabled, as requested (Use --with-gnome to enable)" >&2;} +else + +pkg_failed=no +echo "$as_me:$LINENO: checking for LIBGSF_GNOME" >&5 +echo $ECHO_N "checking for LIBGSF_GNOME... $ECHO_C" >&6 + +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$libgsf_gnome_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$libgsf_gnome_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_LIBGSF_GNOME_CFLAGS=`$PKG_CONFIG --cflags "$libgsf_gnome_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$libgsf_gnome_reqs\"") >&5 + ($PKG_CONFIG --exists --print-errors "$libgsf_gnome_reqs") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_LIBGSF_GNOME_LIBS=`$PKG_CONFIG --libs "$libgsf_gnome_reqs" 2>/dev/null` +else + pkg_failed=yes +fi +else + pkg_failed=untried +fi + +if test $pkg_failed = yes; then + LIBGSF_GNOME_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$libgsf_gnome_reqs"` + # Put the nasty error message in config.log where it belongs + echo "$LIBGSF_GNOME_PKG_ERRORS" 1>&5 + + if test $want_gnome = yes; then + { { echo "$as_me:$LINENO: error: GNOME support requested, but not available." >&5 +echo "$as_me: error: GNOME support requested, but not available." >&2;} + { (exit 1); exit 1; }; } + else + { echo "$as_me:$LINENO: WARNING: GNOME support disabled, unable to find required version of VFS and/or Bonobo" >&5 +echo "$as_me: WARNING: GNOME support disabled, unable to find required version of VFS and/or Bonobo" >&2;} + fi +elif test $pkg_failed = untried; then + if test $want_gnome = yes; then + { { echo "$as_me:$LINENO: error: GNOME support requested, but not available." >&5 +echo "$as_me: error: GNOME support requested, but not available." >&2;} + { (exit 1); exit 1; }; } + else + { echo "$as_me:$LINENO: WARNING: GNOME support disabled, unable to find required version of VFS and/or Bonobo" >&5 +echo "$as_me: WARNING: GNOME support disabled, unable to find required version of VFS and/or Bonobo" >&2;} + fi +else + LIBGSF_GNOME_CFLAGS=$pkg_cv_LIBGSF_GNOME_CFLAGS + LIBGSF_GNOME_LIBS=$pkg_cv_LIBGSF_GNOME_LIBS + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + have_gnome=yes +fi +fi + + +if test $have_gnome = yes; then + WITH_LIBGSF_GNOME_TRUE= + WITH_LIBGSF_GNOME_FALSE='#' +else + WITH_LIBGSF_GNOME_TRUE='#' + WITH_LIBGSF_GNOME_FALSE= +fi + + +# GConf configuration +GCONFTOOL= +# Extract the first word of "gconftool-2", so it can be a program name with args. +set dummy gconftool-2; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_GCONFTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$GCONFTOOL"; then + ac_cv_prog_GCONFTOOL="$GCONFTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GCONFTOOL="gconftool-2" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_GCONFTOOL" && ac_cv_prog_GCONFTOOL="no" +fi +fi +GCONFTOOL=$ac_cv_prog_GCONFTOOL +if test -n "$GCONFTOOL"; then + echo "$as_me:$LINENO: result: $GCONFTOOL" >&5 +echo "${ECHO_T}$GCONFTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test "x$GCONFTOOL" = "xno"; then + { echo "$as_me:$LINENO: WARNING: thumbnailer will not be built, unable to find gconftool-2" >&5 +echo "$as_me: WARNING: thumbnailer will not be built, unable to find gconftool-2" >&2;} +else + + if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then + GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source` + else + GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE + fi + + +# Check whether --with-gconf-source or --without-gconf-source was given. +if test "${with_gconf_source+set}" = set; then + withval="$with_gconf_source" + GCONF_SCHEMA_CONFIG_SOURCE="$withval" +fi; + + + echo "$as_me:$LINENO: result: Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation" >&5 +echo "${ECHO_T}Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation" >&6 + + if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then + GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas' + fi + + +# Check whether --with-gconf-schema-file-dir or --without-gconf-schema-file-dir was given. +if test "${with_gconf_schema_file_dir+set}" = set; then + withval="$with_gconf_schema_file_dir" + GCONF_SCHEMA_FILE_DIR="$withval" +fi; + + + echo "$as_me:$LINENO: result: Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files" >&5 +echo "${ECHO_T}Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files" >&6 + + # Check whether --enable-schemas-install or --disable-schemas-install was given. +if test "${enable_schemas_install+set}" = set; then + enableval="$enable_schemas_install" + case "${enableval}" in + yes) schemas_install=true ;; + no) schemas_install=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-schemas-install" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-schemas-install" >&2;} + { (exit 1); exit 1; }; } ;; + esac +else + schemas_install=true +fi; + + +if test x$schemas_install = xtrue; then + GCONF_SCHEMAS_INSTALL_TRUE= + GCONF_SCHEMAS_INSTALL_FALSE='#' +else + GCONF_SCHEMAS_INSTALL_TRUE='#' + GCONF_SCHEMAS_INSTALL_FALSE= +fi + + +fi + + +if test "x$GCONFTOOL" != "xno"; then + WITH_GCONF_TRUE= + WITH_GCONF_FALSE='#' +else + WITH_GCONF_TRUE='#' + WITH_GCONF_FALSE= +fi + + +LDFLAGS="-no-undefined $LDFLAGS" + + ac_config_files="$ac_config_files Makefile doc/Makefile gsf/Makefile gsf-gnome/Makefile gsf-win32/Makefile tests/Makefile python/Makefile thumbnailer/Makefile po/Makefile.in gsf/version.c doc/version.xml libgsf-1.pc libgsf-1.spec libgsf-gnome-1.pc libgsf-gnome-1.spec libgsf-win32-1.pc libgsf-zip" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + + mv -f po/POTFILES po/POTFILES.tmp + sed -e '/[[]encoding.*]/d' -e 's/[[].*] *//' < po/POTFILES.tmp > po/POTFILES + rm -f po/POTFILES.tmp + +if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"OS_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"OS_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"PLATFORM_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"PLATFORM_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"ENABLE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${GTK_DOC_INSTALLED_TRUE}" && test -z "${GTK_DOC_INSTALLED_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"GTK_DOC_INSTALLED\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"GTK_DOC_INSTALLED\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_PYTHON_TRUE}" && test -z "${WITH_PYTHON_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_LIBGSF_GNOME_TRUE}" && test -z "${WITH_LIBGSF_GNOME_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_LIBGSF_GNOME\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_LIBGSF_GNOME\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"GCONF_SCHEMAS_INSTALL\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"GCONF_SCHEMAS_INSTALL\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WITH_GCONF_TRUE}" && test -z "${WITH_GCONF_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"WITH_GCONF\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"WITH_GCONF\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by libgsf $as_me 1.12.3, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +libgsf config.status 1.12.3 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir} +INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}' +MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}' +XGETTEXT='${INTLTOOL_XGETTEXT}' + + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "gsf/Makefile" ) CONFIG_FILES="$CONFIG_FILES gsf/Makefile" ;; + "gsf-gnome/Makefile" ) CONFIG_FILES="$CONFIG_FILES gsf-gnome/Makefile" ;; + "gsf-win32/Makefile" ) CONFIG_FILES="$CONFIG_FILES gsf-win32/Makefile" ;; + "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "python/Makefile" ) CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "thumbnailer/Makefile" ) CONFIG_FILES="$CONFIG_FILES thumbnailer/Makefile" ;; + "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "gsf/version.c" ) CONFIG_FILES="$CONFIG_FILES gsf/version.c" ;; + "doc/version.xml" ) CONFIG_FILES="$CONFIG_FILES doc/version.xml" ;; + "libgsf-1.pc" ) CONFIG_FILES="$CONFIG_FILES libgsf-1.pc" ;; + "libgsf-1.spec" ) CONFIG_FILES="$CONFIG_FILES libgsf-1.spec" ;; + "libgsf-gnome-1.pc" ) CONFIG_FILES="$CONFIG_FILES libgsf-gnome-1.pc" ;; + "libgsf-gnome-1.spec" ) CONFIG_FILES="$CONFIG_FILES libgsf-gnome-1.spec" ;; + "libgsf-win32-1.pc" ) CONFIG_FILES="$CONFIG_FILES libgsf-win32-1.pc" ;; + "libgsf-zip" ) CONFIG_FILES="$CONFIG_FILES libgsf-zip" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "intltool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS intltool" ;; + "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "gsf-config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS gsf-config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@LIBGSF_MAJOR_VERSION@,$LIBGSF_MAJOR_VERSION,;t t +s,@LIBGSF_MINOR_VERSION@,$LIBGSF_MINOR_VERSION,;t t +s,@LIBGSF_MICRO_VERSION@,$LIBGSF_MICRO_VERSION,;t t +s,@VERSION_INFO@,$VERSION_INFO,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@AMTAR@,$AMTAR,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +s,@MAINT@,$MAINT,;t t +s,@ACLOCAL_AMFLAGS@,$ACLOCAL_AMFLAGS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@EGREP@,$EGREP,;t t +s,@LN_S@,$LN_S,;t t +s,@ECHO@,$ECHO,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@DLLTOOL@,$DLLTOOL,;t t +s,@ac_ct_DLLTOOL@,$ac_ct_DLLTOOL,;t t +s,@AS@,$AS,;t t +s,@ac_ct_AS@,$ac_ct_AS,;t t +s,@OBJDUMP@,$OBJDUMP,;t t +s,@ac_ct_OBJDUMP@,$ac_ct_OBJDUMP,;t t +s,@CPP@,$CPP,;t t +s,@CXX@,$CXX,;t t +s,@CXXFLAGS@,$CXXFLAGS,;t t +s,@ac_ct_CXX@,$ac_ct_CXX,;t t +s,@CXXDEPMODE@,$CXXDEPMODE,;t t +s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t +s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t +s,@CXXCPP@,$CXXCPP,;t t +s,@F77@,$F77,;t t +s,@FFLAGS@,$FFLAGS,;t t +s,@ac_ct_F77@,$ac_ct_F77,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@PKG_CONFIG@,$PKG_CONFIG,;t t +s,@INTLTOOL_DESKTOP_RULE@,$INTLTOOL_DESKTOP_RULE,;t t +s,@INTLTOOL_DIRECTORY_RULE@,$INTLTOOL_DIRECTORY_RULE,;t t +s,@INTLTOOL_KEYS_RULE@,$INTLTOOL_KEYS_RULE,;t t +s,@INTLTOOL_PROP_RULE@,$INTLTOOL_PROP_RULE,;t t +s,@INTLTOOL_OAF_RULE@,$INTLTOOL_OAF_RULE,;t t +s,@INTLTOOL_PONG_RULE@,$INTLTOOL_PONG_RULE,;t t +s,@INTLTOOL_SERVER_RULE@,$INTLTOOL_SERVER_RULE,;t t +s,@INTLTOOL_SHEET_RULE@,$INTLTOOL_SHEET_RULE,;t t +s,@INTLTOOL_SOUNDLIST_RULE@,$INTLTOOL_SOUNDLIST_RULE,;t t +s,@INTLTOOL_UI_RULE@,$INTLTOOL_UI_RULE,;t t +s,@INTLTOOL_XAM_RULE@,$INTLTOOL_XAM_RULE,;t t +s,@INTLTOOL_KBD_RULE@,$INTLTOOL_KBD_RULE,;t t +s,@INTLTOOL_XML_RULE@,$INTLTOOL_XML_RULE,;t t +s,@INTLTOOL_XML_NOMERGE_RULE@,$INTLTOOL_XML_NOMERGE_RULE,;t t +s,@INTLTOOL_CAVES_RULE@,$INTLTOOL_CAVES_RULE,;t t +s,@INTLTOOL_SCHEMAS_RULE@,$INTLTOOL_SCHEMAS_RULE,;t t +s,@INTLTOOL_THEME_RULE@,$INTLTOOL_THEME_RULE,;t t +s,@INTLTOOL_EXTRACT@,$INTLTOOL_EXTRACT,;t t +s,@INTLTOOL_MERGE@,$INTLTOOL_MERGE,;t t +s,@INTLTOOL_UPDATE@,$INTLTOOL_UPDATE,;t t +s,@INTLTOOL_PERL@,$INTLTOOL_PERL,;t t +s,@INTLTOOL_ICONV@,$INTLTOOL_ICONV,;t t +s,@INTLTOOL_MSGFMT@,$INTLTOOL_MSGFMT,;t t +s,@INTLTOOL_MSGMERGE@,$INTLTOOL_MSGMERGE,;t t +s,@INTLTOOL_XGETTEXT@,$INTLTOOL_XGETTEXT,;t t +s,@USE_NLS@,$USE_NLS,;t t +s,@MSGFMT@,$MSGFMT,;t t +s,@GMSGFMT@,$GMSGFMT,;t t +s,@XGETTEXT@,$XGETTEXT,;t t +s,@CATALOGS@,$CATALOGS,;t t +s,@CATOBJEXT@,$CATOBJEXT,;t t +s,@DATADIRNAME@,$DATADIRNAME,;t t +s,@GMOFILES@,$GMOFILES,;t t +s,@INSTOBJEXT@,$INSTOBJEXT,;t t +s,@INTLLIBS@,$INTLLIBS,;t t +s,@PO_IN_DATADIR_TRUE@,$PO_IN_DATADIR_TRUE,;t t +s,@PO_IN_DATADIR_FALSE@,$PO_IN_DATADIR_FALSE,;t t +s,@POFILES@,$POFILES,;t t +s,@POSUB@,$POSUB,;t t +s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +s,@GETTEXT_PACKAGE@,$GETTEXT_PACKAGE,;t t +s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t +s,@LIBGSF_CFLAGS@,$LIBGSF_CFLAGS,;t t +s,@LIBGSF_LIBS@,$LIBGSF_LIBS,;t t +s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +s,@OS_WIN32_TRUE@,$OS_WIN32_TRUE,;t t +s,@OS_WIN32_FALSE@,$OS_WIN32_FALSE,;t t +s,@PLATFORM_WIN32_TRUE@,$PLATFORM_WIN32_TRUE,;t t +s,@PLATFORM_WIN32_FALSE@,$PLATFORM_WIN32_FALSE,;t t +s,@HTML_DIR@,$HTML_DIR,;t t +s,@ENABLE_GTK_DOC_TRUE@,$ENABLE_GTK_DOC_TRUE,;t t +s,@ENABLE_GTK_DOC_FALSE@,$ENABLE_GTK_DOC_FALSE,;t t +s,@GTK_DOC_USE_LIBTOOL_TRUE@,$GTK_DOC_USE_LIBTOOL_TRUE,;t t +s,@GTK_DOC_USE_LIBTOOL_FALSE@,$GTK_DOC_USE_LIBTOOL_FALSE,;t t +s,@GTK_DOC_INSTALLED_TRUE@,$GTK_DOC_INSTALLED_TRUE,;t t +s,@GTK_DOC_INSTALLED_FALSE@,$GTK_DOC_INSTALLED_FALSE,;t t +s,@Z_CPPFLAGS@,$Z_CPPFLAGS,;t t +s,@Z_LIBS@,$Z_LIBS,;t t +s,@WITH_PYTHON_TRUE@,$WITH_PYTHON_TRUE,;t t +s,@WITH_PYTHON_FALSE@,$WITH_PYTHON_FALSE,;t t +s,@BZ2_LIBS@,$BZ2_LIBS,;t t +s,@LIBGSF_GNOME_CFLAGS@,$LIBGSF_GNOME_CFLAGS,;t t +s,@LIBGSF_GNOME_LIBS@,$LIBGSF_GNOME_LIBS,;t t +s,@WITH_LIBGSF_GNOME_TRUE@,$WITH_LIBGSF_GNOME_TRUE,;t t +s,@WITH_LIBGSF_GNOME_FALSE@,$WITH_LIBGSF_GNOME_FALSE,;t t +s,@GCONFTOOL@,$GCONFTOOL,;t t +s,@GCONF_SCHEMA_CONFIG_SOURCE@,$GCONF_SCHEMA_CONFIG_SOURCE,;t t +s,@GCONF_SCHEMA_FILE_DIR@,$GCONF_SCHEMA_FILE_DIR,;t t +s,@GCONF_SCHEMAS_INSTALL_TRUE@,$GCONF_SCHEMAS_INSTALL_TRUE,;t t +s,@GCONF_SCHEMAS_INSTALL_FALSE@,$GCONF_SCHEMAS_INSTALL_FALSE,;t t +s,@WITH_GCONF_TRUE@,$WITH_GCONF_TRUE,;t t +s,@WITH_GCONF_FALSE@,$WITH_GCONF_FALSE,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + intltool ) + +intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \ + -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \ + -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \ + -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \ + -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \ + -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'" + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \ + > intltool-extract.out +if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then + rm -f intltool-extract.out +else + mv -f intltool-extract.out intltool-extract +fi +chmod ugo+x intltool-extract +chmod u+w intltool-extract + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \ + > intltool-merge.out +if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then + rm -f intltool-merge.out +else + mv -f intltool-merge.out intltool-merge +fi +chmod ugo+x intltool-merge +chmod u+w intltool-merge + +eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \ + > intltool-update.out +if cmp -s intltool-update intltool-update.out 2>/dev/null; then + rm -f intltool-update.out +else + mv -f intltool-update.out intltool-update +fi +chmod ugo+x intltool-update +chmod u+w intltool-update + + ;; + default-1 ) case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + + +echo "$as_me:$LINENO: result: Configured $PACKAGE $VERSION" >&5 +echo "${ECHO_T}Configured $PACKAGE $VERSION" >&6 diff --git a/lib/libgsf-1.12.3/configure.in b/lib/libgsf-1.12.3/configure.in new file mode 100644 index 0000000000..e1fd20a54b --- /dev/null +++ b/lib/libgsf-1.12.3/configure.in @@ -0,0 +1,392 @@ +-*- mode: m4 -*- +dnl We require Automake 1.7.1, which requires Autoconf 2.54. +AC_PREREQ(2.54) + +m4_define([libgsf_version_major], [1]) +m4_define([libgsf_version_minor], [12]) +m4_define([libgsf_version_micro], [3]) +m4_define([libgsf_version_extra], []) +m4_define([libgsf_full_version], + [libgsf_version_major.libgsf_version_minor.libgsf_version_micro[]libgsf_version_extra]) + +AC_INIT(libgsf, [libgsf_full_version], + [http://bugzilla.gnome.org/enter_bug.cgi?product=libgsf]) +AC_CONFIG_SRCDIR(gsf/gsf.h) + +AC_SUBST(LIBGSF_MAJOR_VERSION, libgsf_version_major) +AC_SUBST(LIBGSF_MINOR_VERSION, libgsf_version_minor) +AC_SUBST(LIBGSF_MICRO_VERSION, libgsf_version_micro) + +dnl Version info for libraries = CURRENT:REVISION:AGE +AC_SUBST(VERSION_INFO, +m4_eval(libgsf_version_major + libgsf_version_minor)[]dnl +:libgsf_version_micro:libgsf_version_minor) + +dnl FIXME: the above formula and the following explanation are wrong: --kasal +dnl +dnl Set release number +dnl This is derived from "Versioning" chapter of info libtool documentation. +dnl 4a) Increment when removing or changing interfaces. +dnl LIBGSF_MAJOR_VERSION=1 +dnl 4a) 5) Increment when adding interfaces. +dnl 6) Set to zero when removing or changing interfaces. +dnl LIBGSF_MINOR_VERSION=12 +dnl 3) Increment when interfaces not changed at all, +dnl only bug fixes or internal changes made. +dnl 4b) Set to zero when adding, removing or changing interfaces. +dnl LIBGSF_MICRO_VERSION=0 + +AM_INIT_AUTOMAKE(dist-bzip2) + +AC_CONFIG_HEADERS(gsf-config.h) +AM_MAINTAINER_MODE + +dnl Propagate Gnome-specific variable ACLOCAL_FLAGS to Makefile. +AC_SUBST(ACLOCAL_AMFLAGS, $ACLOCAL_FLAGS) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_MAKE_SET +AC_LIBTOOL_WIN32_DLL +AM_PROG_LIBTOOL + +AC_FUNC_FSEEKO +AC_SYS_LARGEFILE +AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + +dnl Gettext/i18n stuff + +AC_PROG_INTLTOOL + +ALL_LINGUAS="es" + +AM_GLIB_GNU_GETTEXT + +GETTEXT_PACKAGE=AC_PACKAGE_NAME +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package.]) + +dnl Checks for libraries. +ifelse([ + If we defined the module lists on the M4 level, we could have problems + with PKG_CHECK_MODULES from pkgconfig 0.16.0, which double quotes its + second argument (the module list). + As a handy workaround, we use shell variables. +]) +dnl Modules common to libgsf and libgsf-gnome +libgsf_reqs=" + gobject-2.0 >= 2.4.0 + glib-2.0 >= 2.4.0 + libxml-2.0 >= 2.4.16 +" +dnl Modules required for libgsf-gnome +libgsf_gnome_reqs=" + $libgsf_reqs + libbonobo-2.0 >= 2.0.0 + gnome-vfs-2.0 >= 2.2.0 + gnome-vfs-module-2.0 >= 2.2.0 +" +PKG_CHECK_MODULES(LIBGSF, $libgsf_reqs) + +## this should come after `AC_PROG_CC' +ifdef([GNOME_COMPILE_WARNINGS],[GNOME_COMPILE_WARNINGS],) +CFLAGS="$CFLAGS $WARN_CFLAGS -DG_DISABLE_DEPRECATED" +if test "$GCC" = "yes"; then + for option in -Wno-system-headers -Wfloat-equal -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wformat -Wnested-externs -Winline -Wdeclaration-after-statement -Wundef -W -Wmissing-noreturn -Wmissing-format-attribute; do + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $option" + AC_MSG_CHECKING([whether gcc understands $option]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + has_option=yes, + has_option=no) + if test $has_option = no; then + CFLAGS="$SAVE_CFLAGS" + fi + AC_MSG_RESULT($has_option) + unset has_option + unset SAVE_CFLAGS + done + unset option +fi + +AC_CHECK_DECL(fdopen, fdopen_works=yes, fdopen_works=no) +if test $fdopen_works = no ; then + unset ac_cv_have_decl_fdopen + CFLAGS="$CFLAGS -D_POSIX_SOURCE" + AC_MSG_NOTICE([adding -D_POSIX_SOURCE to CFLAGS]) + AC_CHECK_DECL(fdopen, fdopen_works=yes, fdopen_works=no) + if test $fdopen_works = no ; then + AC_MSG_ERROR([fdopen is not available]) + fi +fi + +# Unfortunately, -D_POSIX_SOURCE turns off struct timeval on Solaris +AC_MSG_CHECKING([whether struct timeval is available]) +for try in 1 2; do + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[struct timeval tv;]])], + struct_timeval_works=yes, + struct_timeval_works=no) + test $struct_timeval_works = yes && break + # Try this for the second attempt: + test $try = 1 && CFLAGS="$CFLAGS -D__EXTENSIONS__" +done +AC_MSG_RESULT($struct_timeval_works) +if test $struct_timeval_works = no ; then + AC_MSG_ERROR([struct timeval is not available]) +fi + +AC_MSG_CHECKING([whether -D_BSD_SOURCE is needed for caddr_t]) +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], [[caddr_t ca]])], + need_bsd1=no, + need_bsd1=yes) +AC_MSG_RESULT($need_bsd1) + +AC_MSG_CHECKING([whether -D_BSD_SOURCE is needed for lstat]) +AC_LINK_IFELSE([AC_LANG_PROGRAM( +[[#include +#include +#include ]], +[[void *ptr = &lstat]])], +need_bsd2=no, need_bsd2=yes) +AC_MSG_RESULT($need_bsd2) +if test $need_bsd1 = yes -o $need_bsd2 = yes; then + CFLAGS="$CFLAGS -D_BSD_SOURCE" +fi + +AC_TYPE_MODE_T +AC_CHECK_HEADERS(fcntl.h malloc.h unistd.h io.h) +AC_FUNC_MMAP + +AC_CHECK_FUNCS(chown) + +SAVE_CFLAGS=$CFLAGS +SAVE_LIBS=$LIBS +CFLAGS="$CFLAGS $LIBGSF_CFLAGS" +LIBS="$LIBGSF_LIBS $LIBS" +AC_MSG_CHECKING([for g_chmod]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[(void)g_chmod("/xxx",0777);]])], + [AC_DEFINE(HAVE_G_CHMOD, 1, [Define if g_chmod is available as macro or function]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +AC_MSG_CHECKING([for g_access]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[(void)g_access("/xxx",0777);]])], + [AC_DEFINE(HAVE_G_ACCESS, 1, [Define if g_access is available as macro or function]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +CFLAGS=$SAVE_CFLAGS +LIBS=$SAVE_LIBS + +AC_MSG_CHECKING([whether macro S_ISREG is available]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +[[#include +#include ]], +[[S_ISREG(S_IFMT);]])], + [macro_s_isreg=yes], + [AH_TEMPLATE([S_ISREG], [Define S_ISREG if stat.h doesn't]) + AC_DEFINE([S_ISREG(m)], [(((m) & S_IFMT) == S_IFREG)]) + macro_s_isreg=no]) +AC_MSG_RESULT($macro_s_isreg) + +AC_MSG_CHECKING([for native Win32]) +case $host in + *-*-mingw*) + native_win32=yes + ;; + *) + native_win32=no + ;; +esac +AC_MSG_RESULT([$native_win32]) +AM_CONDITIONAL(OS_WIN32, test "$native_win32" = yes) + +AC_MSG_CHECKING([for Win32 platform in general]) +case $host in + *-*-mingw*|*-*-cygwin*) + platform_win32=yes + ;; + *) + platform_win32=no + ;; +esac +AC_MSG_RESULT($platform_win32) +AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = yes) + +################################################## +# Checks for gtk-doc and docbook-tools +################################################## +gtk_doc_installed=true +#ifdef([GTK_DOC_CHECK],[GTK_DOC_CHECK([1.0])],[gtk_doc_installed=false]) +# I would have liked to conditionalize this, but +# that appears to break other things http://bugzilla.gnome.org/show_bug.cgi?id=156399 +GTK_DOC_CHECK([1.0]) +AM_CONDITIONAL(GTK_DOC_INSTALLED, $gtk_doc_installed) + +dnl *********************************************************************************** +# Check for zlib. +_cppflags=$CPPFLAGS +_ldflags=$LDFLAGS + +Z_DIR= Z_LIBS= Z_CPPFLAGS= + +AC_ARG_WITH(zlib, + [[ --with-zlib=DIR use libz in DIR]], + [case $withval in + yes|no) ;; + *) Z_DIR=$withval + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib" + ;; + esac]) + +if test "x$with_zlib" != xno; then + with_zlib=no + AC_CHECK_HEADER(zlib.h, [AC_CHECK_LIB(z, gzread, [with_zlib=yes])]) +fi +if test "$with_zlib" = no; then + AC_MSG_ERROR([*** zlib is required]) +fi +if test "x$Z_DIR" != "x"; then + Z_CPPFLAGS="-I$Z_DIR/include" + case $host in + *-*-solaris*) Z_LIBS="-L$Z_DIR/lib -R$Z_DIR/lib -lz" ;; + *) Z_LIBS="-L$Z_DIR/lib -lz" ;; + esac +else + Z_LIBS="-lz" +fi +AC_SUBST(Z_CPPFLAGS) +AC_SUBST(Z_LIBS) + +CPPFLAGS=${_cppflags} +LDFLAGS=${_ldflags} + +dnl *********************************************************************************** +pygtk_msg=no + +dnl Uncomment to enable Python bindings. +dnl +dnl AM_PATH_PYTHON +dnl AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) +dnl # check for pygtk +dnl PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= 1.99.10, +dnl [pygtk_msg="yes"], +dnl [pygtk_msg="NO. pygtk problem"]) +dnl AC_SUBST(PYGTK_CFLAGS) +dnl AC_PATH_PROG(PYGTK_CODEGEN, pygtk-codegen-2.0, no) +dnl if test "x$PYGTK_CODEGEN" = xno; then +dnl AC_MSG_ERROR(could not find pygtk-codegen-2.0 script) +dnl fi + +AM_CONDITIONAL(WITH_PYTHON, [test "$pygtk_msg" = yes]) + +dnl *********************************************************************************** + +dnl bz2 +dnl +BZ2_LIBS= +test_bz2=true +AC_ARG_WITH(bz2, + [--{with,without}-bz2 Build additional wrappers for BZ2], + if test "x$withval" = xno; then + test_bz2=false + fi +) + +with_bz2=false +if test "x$test_bz2" = xtrue ; then + AC_CHECK_LIB(bz2, BZ2_bzDecompressInit, + bz2_ok=yes, + bz2_ok=no + AC_MSG_WARN(*** BZ2 support disabled (BZ2 library not found) ***)) + + if test "$bz2_ok" = yes; then + AC_MSG_CHECKING([for bzlib.h]) + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE( + [[#include + #undef PACKAGE + #undef VERSION + #undef HAVE_STDLIB_H + #include ]])], + bz2_ok=yes, + bz2_ok=no) + AC_MSG_RESULT($bz2_ok) + fi + + if test "$bz2_ok" = yes; then + AC_DEFINE(HAVE_BZ2, 1, [Is bzip2 available and enabled]) + BZ2_LIBS="-lbz2" + else + AC_MSG_WARN(*** BZ2 support disabled (BZ2 header not found) ***) + fi +else + AC_MSG_WARN([BZ2 support disabled, as requested (Use --with-bz2 to enable)]) +fi + +AC_SUBST(BZ2_LIBS) + +dnl *********************************************************************************** + +dnl gnome +dnl +want_gnome=auto +AC_ARG_WITH(gnome, + [--{with,without}-gnome Build additional wrappers for GNOME-VFS and BONOBO], + [case $withval in + yes) want_gnome=yes;; + no) want_gnome=no;; + esac[]dnl +]) +have_gnome=no +if test $want_gnome = no ; then + AC_MSG_WARN([GNOME support disabled, as requested (Use --with-gnome to enable)]) +else + PKG_CHECK_MODULES(LIBGSF_GNOME, $libgsf_gnome_reqs, + [have_gnome=yes], + [if test $want_gnome = yes; then + AC_MSG_ERROR([GNOME support requested, but not available.]) + else + AC_MSG_WARN([GNOME support disabled, unable to find required version of VFS and/or Bonobo]) + fi]) +fi +AM_CONDITIONAL(WITH_LIBGSF_GNOME, test $have_gnome = yes) + +# GConf configuration +dnl Don't publish the GCONFTOOL variable, AM_GCONF_SOURCE_2 has ``gconftool-2'' hardwired. +GCONFTOOL= +AC_CHECK_PROG([GCONFTOOL], [gconftool-2], [gconftool-2], [no]) +if test "x$GCONFTOOL" = "xno"; then + AC_MSG_WARN([thumbnailer will not be built, unable to find gconftool-2]) +else + AM_GCONF_SOURCE_2 +fi +AM_CONDITIONAL(WITH_GCONF, test "x$GCONFTOOL" != "xno") + +LDFLAGS="-no-undefined $LDFLAGS" + +AC_CONFIG_FILES([ +Makefile +doc/Makefile +gsf/Makefile +gsf-gnome/Makefile +gsf-win32/Makefile +tests/Makefile +python/Makefile +thumbnailer/Makefile +po/Makefile.in +gsf/version.c +doc/version.xml +libgsf-1.pc +libgsf-1.spec +libgsf-gnome-1.pc +libgsf-gnome-1.spec +libgsf-win32-1.pc +libgsf-zip +]) +AC_OUTPUT + +AC_MSG_RESULT([Configured $PACKAGE $VERSION]) diff --git a/lib/libgsf-1.12.3/depcomp b/lib/libgsf-1.12.3/depcomp new file mode 100755 index 0000000000..edb5d38efd --- /dev/null +++ b/lib/libgsf-1.12.3/depcomp @@ -0,0 +1,479 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/lib/libgsf-1.12.3/doc/Makefile.am b/lib/libgsf-1.12.3/doc/Makefile.am new file mode 100644 index 0000000000..b64d78baf8 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/Makefile.am @@ -0,0 +1,67 @@ +## Process this file with automake to produce Makefile.in + +# The name of the module. +DOC_MODULE=gsf + +# The top-level SGML file. +DOC_MAIN_SGML_FILE=gsf-docs.sgml + +# The directory containing the source code. Relative to $(srcdir) +DOC_SOURCE_DIR=../gsf + +# Extra options to pass to gtkdoc-scangobj +SCANGOBJ_OPTIONS= --nogtkinit --type-init-func="g_type_init ()" + +# Extra options to supply to gtkdoc-scan +SCAN_OPTIONS= + +# Extra options to supply to gtkdoc-mkdb +MKDB_OPTIONS=--sgml-mode --output-format=xml + +# Extra options to supply to gtkdoc-fixref +FIXXREF_OPTIONS= + +# Used for dependencies +HFILE_GLOB=$(top_srcdir)/gsf/*.h +CFILE_GLOB=$(top_srcdir)/gsf/*.c + +# Header files to ignore when scanning +IGNORE_HFILES= \ + biff-types.h \ + gsf-command-context.h \ + gsf-infile-msvba.h \ + gsf-io-context.h \ + gsf-output-transaction.h \ + gsf-infile-ar.h \ + gsf-infile-tar.h \ + gsf-infile-tar.c \ + gsf-outfile-tar.h \ + gsf-outfile-tar.c + +EXTRA_HFILES = ../gsf-gnome/*.h + +# Images to copy into HTML directory +HTML_IMAGES = + +# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE) +content_files = + +# Other files to distribute +extra_files = + +# CFLAGS and LDFLAGS for compiling scan program. Only needed +# if $(DOC_MODULE).types is non-empty. +GTKDOC_CFLAGS = -I$(top_srcdir) $(LIBGSF_CFLAGS) +GTKDOC_LIBS = $(top_builddir)/gsf/libgsf-1.la $(LIBGSF_LIBS) + +manpagedir = $(datadir)/man/man1 +manpage_DATA = gsf-office-thumbnailer.1 + +if GTK_DOC_INSTALLED +include $(top_srcdir)/lib/libgsf-1.12.3/gtk-doc.make +CLEANFILES += gsf-scan.* +.PHONY : dist-hook-local +EXTRA_DIST += $(manpage_DATA) +else +EXTRA_DIST = $(manpage_DATA) +endif diff --git a/lib/libgsf-1.12.3/doc/gsf-docs.sgml b/lib/libgsf-1.12.3/doc/gsf-docs.sgml new file mode 100644 index 0000000000..3d2113359c --- /dev/null +++ b/lib/libgsf-1.12.3/doc/gsf-docs.sgml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + GSF Reference Manual + + + + GSF Overview + + +The GNOME Structured File Library (GSF) is an I/O abstraction for +reading/writing compound files. GSF is released under the GNU Lesser General +Public License (GNU LGPL), which allows for flexible licensing of client +applications. + + +GSF depends on the following libraries: + + + +GLib + +A general-purpose utility library, not specific to graphical user interfaces. +GLib provides many useful data types, macros, type conversions, +string utilities, file utilities, a main loop abstraction, and so on. + + + + + + + + + API Reference + + Basic Input/Output + &GsfInput; + &GsfOutput; + + + Stream Sources + &GsfInfile; + &GsfOutfile; + &GsfStdio; + &GsfMemory; + &GsfIOChannel; + &GsfGnomevfs; + &GsfBonobo; + + + Stream Parsers + &GsfText; + &GsfXml; + &GsfZip; + &GsfCompression; + &GsfMsole; + &GsfMetadata; + &GsfBlob; + &GsfClipData; + &GsfStructuredBlob; + + + Miscellaneous + &GsfUtils; + + + +&TreeIndex; + + diff --git a/lib/libgsf-1.12.3/doc/gsf-office-thumbnailer.1 b/lib/libgsf-1.12.3/doc/gsf-office-thumbnailer.1 new file mode 100644 index 0000000000..bb24f9a456 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/gsf-office-thumbnailer.1 @@ -0,0 +1,70 @@ +.TH GSF-OFFICE-THUMBNAILER 1 "August 17, 2005" gsf "GNOME" +.SH NAME +gsf-office-thumbnailer \- office files thumbnailer for the GNOME desktop + +.SH SYNOPSIS +\fBgsf-office-thumbnailer\fR [\fIOPTIONS\fR] \fIinfile\fR \fIoutfile\fR + +.SH DESCRIPTION +This manual page briefly documents the \fBgsf-office-thumbnailer\fR command. + +\fBgsf-office-thumbnailer\fR is used internally by GNOME applications such +as \fBnautilus\fR to generate thumbnails of several types of office +application files. While it is possible to invoke it manually, it is usually +invoked automatically by \fBnautilus\fR. + +.\".SH "RETURN VALUE" +.\".SH "EXIT STATUS" +.\".SH "ERROR HANDLING" +.\".SH ERRORS +.SH OPTIONS +This program follows the usual GNU command line syntax, with single +letter options starting with a single dash (`-') and longer options +starting with two dashes (`--'). + +.SS "Main options" +.TP +.B \-i, \-\-input=\fIfilename\fR +Name of file for which to create a thumbnail +.TP +.B \-o, \-\-output=\fIfilename\fR +Name of the file in which to store the thumbnail +.TP +.B \-s, \-\-size=\fIN\fR +Size of thumbnail in pixels; the thumbnail will be at most N*N pixels large. + +.SS "Help options" +.TP +.B \-?, \-\-help +Display a brief usage message + +.\".SH USAGE +.\".SH EXAMPLES +.\".SH FILES +.\".SH ENVIRONMENT +.\".SH DIAGNOSTICS +.\".SH SECURITY +.\".SH CONFORMING TO +.\".SH NOTES +.\".SH BUGS + +.SH LICENSE + +\fBgsf-office-thumbnailer\fR is licensed under the terms of version 2.1 of +the GNU Lesser General Public License (LGPL) as published by the Free +Software Foundation. For information on this license look at the source code +that came with the software or see the +.UR http://www.gnu.org +GNU project page +.UE +at http://www.gnu.org/. + +.SH AUTHOR + +\fBgsf-office-thumbnailer\fR's primary author is Federico Mena-Quintero +. + +The initial version of this manpage was written by J.H.M. Dassen (Ray) +. + +\".SH SEE ALSO diff --git a/lib/libgsf-1.12.3/doc/gsf-overrides.txt b/lib/libgsf-1.12.3/doc/gsf-overrides.txt new file mode 100644 index 0000000000..13f485f1ac --- /dev/null +++ b/lib/libgsf-1.12.3/doc/gsf-overrides.txt @@ -0,0 +1,2 @@ +# These are manually-edited to override or add declarations to those scanned +# from the header files. diff --git a/lib/libgsf-1.12.3/doc/gsf-sections.txt b/lib/libgsf-1.12.3/doc/gsf-sections.txt new file mode 100644 index 0000000000..a1f18d437d --- /dev/null +++ b/lib/libgsf-1.12.3/doc/gsf-sections.txt @@ -0,0 +1,783 @@ +
+Input from unstructured files +input +GsfInput +gsf_input_read +gsf_input_tell +gsf_input_seek +gsf_input_container +gsf_input_dup +gsf_input_size +gsf_input_eof +gsf_input_remaining +gsf_input_error_id +gsf_input_sibling +gsf_input_error +gsf_input_name +gsf_input_set_name_from_filename + +GsfInputProxy +gsf_input_proxy_new +gsf_input_proxy_new_section + +gsf_input_copy +gsf_input_uncompress + +gsf_input_set_name +gsf_input_set_container +gsf_input_set_size +gsf_input_seek_emulate + +GSF_INPUT_TYPE +GSF_INPUT +GSF_IS_INPUT +GSF_INPUT_CLASS +GSF_IS_INPUT_CLASS +GsfInputClass +gsf_input_get_type + +GSF_INPUT_PROXY +GSF_INPUT_PROXY_TYPE +GSF_IS_INPUT_PROXY +gsf_input_proxy_get_type +
+ +
+Output to unstructured files +output +GsfOutput +gsf_output_container +gsf_output_size +gsf_output_close +gsf_output_tell +gsf_output_seek +gsf_output_write +gsf_output_puts +gsf_output_printf +gsf_output_vprintf + +gsf_output_name +gsf_output_set_name_from_filename +gsf_output_error_id +gsf_output_set_error +gsf_output_error +gsf_output_is_closed + +gsf_output_wrap +gsf_output_unwrap + +gsf_output_set_name +gsf_output_set_container + + +GSF_OUTPUT_TYPE +GSF_OUTPUT +GSF_IS_OUTPUT +GSF_OUTPUT_CLASS +GSF_IS_OUTPUT_CLASS +GsfOutfileClass +gsf_output_get_type +
+ +
+Infile reading structed files +infile +GsfInfile +gsf_infile_num_children +gsf_infile_child_by_index +gsf_infile_child_by_name +gsf_infile_child_by_vname +gsf_infile_name_by_index + +GSF_INFILE_TYPE +GSF_INFILE +GSF_IS_INFILE +GSF_INFILE_CLASS +GSF_IS_INFILE_CLASS +GsfInfileClass +gsf_infile_get_type +
+ +
+Outfile writing structed files +outfile +GsfOutfile +gsf_outfile_new_child +gsf_outfile_new_child_full +gsf_outfile_new_child_varg + +GSF_OUTFILE_TYPE +GSF_OUTFILE +GSF_IS_OUTFILE +GSF_OUTFILE_CLASS +GSF_IS_OUTFILE_CLASS +GsfOutputClass +gsf_outfile_get_type +
+ +
+Reading and Writing from local files and directories +stdio +GsfInputStdio +gsf_input_stdio_new +GsfOutputStdio +gsf_output_stdio_new +gsf_output_stdio_new_full +gsf_output_stdio_new_valist +gsf_output_stdio_new_FILE +GsfOutfileStdio +gsf_outfile_stdio_new +gsf_outfile_stdio_new_full +gsf_outfile_stdio_new_valist +GsfInfileStdio +gsf_infile_stdio_new + + +GSF_INPUT_STDIO_TYPE +GSF_INPUT_STDIO +GSF_IS_INPUT_STDIO +gsf_input_stdio_get_type + +GSF_IS_OUTPUT_STDIO +GSF_OUTPUT_STDIO +GSF_OUTPUT_STDIO_TYPE +gsf_output_stdio_get_type + +GSF_IS_INFILE_STDIO +GSF_INFILE_STDIO +GSF_INFILE_STDIO_TYPE +gsf_infile_stdio_get_type + +GSF_IS_OUTFILE_STDIO +GSF_OUTFILE_STDIO +GSF_OUTFILE_STDIO_TYPE +gsf_outfile_stdio_get_type + +
+ +
+memory +GsfInputMemory +gsf_input_mmap_new +gsf_input_memory_new +gsf_input_memory_new_clone +gsf_input_memory_new_from_iochannel + +GsfOutputMemory +gsf_output_memory_get_bytes +gsf_output_memory_get_type +gsf_output_memory_new + +GsfSharedMemory +gsf_shared_memory_new +gsf_shared_memory_mmapped_new + +GSF_INPUT_MEMORY_TYPE +GSF_INPUT_MEMORY +GSF_IS_INPUT_MEMORY +gsf_input_memory_get_type + +GSF_OUTPUT_MEMORY_TYPE +GSF_OUTPUT_MEMORY +GSF_IS_OUTPUT_MEMORY +gsf_output_memory_get_type + +GSF_SHARED_MEMORY_TYPE +GSF_SHARED_MEMORY +GSF_IS_SHARED_MEMORY +gsf_shared_memory_get_type +
+ +
+GnomeVFS +gnome-vfs +GsfInputGnomeVFS +gsf_input_gnomevfs_new +gsf_input_gnomevfs_new_uri +gsf_input_gnomevfs_needs_local_copy + +GsfOutputGnomeVFS +gsf_output_gnomevfs_new +gsf_output_gnomevfs_new_uri + +GSF_INPUT_GNOMEVFS_TYPE +GSF_INPUT_GNOMEVFS +GSF_IS_INPUT_GNOMEVFS +gsf_input_gnomevfs_get_type + +GSF_OUTPUT_GNOMEVFS_TYPE +GSF_OUTPUT_GNOMEVFS +GSF_IS_OUTPUT_GNOMEVFS +gsf_output_gnomevfs_get_type +
+ +
+Compression +compression +GsfInputGZip +gsf_input_gzip_new +gsf_input_memory_new_from_bzip + +GsfOutputGZip +gsf_output_gzip_new + +GsfOutputBzip +gsf_output_bzip_new + +GSF_INPUT_GZIP_TYPE +GSF_INPUT_GZIP +GSF_IS_INPUT_GZIP +gsf_input_gzip_get_type + +GSF_OUTPUT_GZIP_TYPE +GSF_OUTPUT_GZIP +GSF_IS_OUTPUT_GZIP +gsf_output_gzip_get_type + +GSF_OUTPUT_BZIP_TYPE +GSF_OUTPUT_BZIP +GSF_IS_OUTPUT_BZIP +gsf_output_bzip_get_type +
+ +
+Text +text +GsfInputTextline +gsf_input_textline_new +gsf_input_textline_ascii_gets +gsf_input_textline_utf8_gets + +GsfOutputIconv +gsf_output_iconv_new + +GsfOutputCsv +gsf_output_csv_write_eol +gsf_output_csv_write_field + +GsfOutputCsvQuotingMode + +GSF_INPUT_TEXTLINE_TYPE +GSF_INPUT_TEXTLINE +GSF_IS_INPUT_TEXTLINE +gsf_input_textline_get_type + +GSF_OUTPUT_ICONV_TYPE +GSF_OUTPUT_ICONV +GSF_IS_OUTPUT_ICONV +GsfOutputIconvClass +gsf_output_iconv_get_type + +GSF_OUTPUT_CSV_TYPE +GSF_OUTPUT_CSV +GSF_IS_OUTPUT_CSV +GsfOutputCsvClass +gsf_output_csv_get_type + +GSF_OUTPUT_CSV_QUOTING_MODE_TYPE +gsf_output_csv_quoting_mode_get_type +
+ +
+MS OLE2 +msole +GsfInfileMSOle +gsf_infile_msole_new +gsf_infile_msole_get_class_id + +GsfOutfileMSOle +gsf_outfile_msole_new +gsf_outfile_msole_new_full +gsf_outfile_msole_set_class_id + +gsf_msole_metadata_read +gsf_msole_metadata_write +gsf_msole_iconv_open_codepages_for_export +gsf_msole_iconv_open_codepage_for_import +gsf_msole_iconv_open_for_export +gsf_msole_iconv_open_codepage_for_export +gsf_msole_iconv_open_for_import +gsf_msole_iconv_win_codepage +gsf_msole_codepage_to_lid +gsf_msole_lid_to_codepage +gsf_msole_lid_to_codepage_str +gsf_msole_lid_for_language +gsf_msole_language_for_lid +gsf_msole_inflate + +GSF_INFILE_MSOLE_TYPE +GSF_INFILE_MSOLE +GSF_IS_INFILE_MSOLE +gsf_infile_msole_get_type + +GSF_OUTFILE_MSOLE_TYPE +GSF_OUTFILE_MSOLE +GSF_IS_OUTFILE_MSOLE +gsf_outfile_msole_get_type + +OLE_HEADER_START_BAT +OLE_HEADER_MAJOR_VER +OLE_HEADER_METABAT_SIZE +OLE_HEADER_DIRENT_START +OLE_HEADER_NUM_SBAT +OLE_HEADER_BB_SHIFT +OLE_HEADER_CSECTDIR +OLE_HEADER_NUM_BAT +OLE_HEADER_THRESHOLD +OLE_HEADER_METABAT_BLOCK +OLE_HEADER_SBAT_START +OLE_HEADER_SIGNATURE +OLE_HEADER_BYTE_ORDER +OLE_HEADER_SB_SHIFT +OLE_HEADER_NUM_METABAT +OLE_HEADER_SIZE +OLE_HEADER_CLSID +OLE_HEADER_MINOR_VER +OLE_DEFAULT_BB_SHIFT +OLE_DEFAULT_SB_SHIFT + +DIRENT_DETAILS_SIZE +DIRENT_SIZE +DIRENT_NAME_LEN +DIRENT_TYPE_PROPERTY +DIRENT_TYPE_FILE +DIRENT_MAGIC_END +DIRENT_TYPE_DIR +DIRENT_MAX_NAME_SIZE +DIRENT_FILE_SIZE +DIRENT_FIRSTBLOCK +DIRENT_TYPE_INVALID +DIRENT_USERFLAGS +DIRENT_COLOUR +DIRENT_MODIFY_TIME +DIRENT_TYPE_LOCKBYTES +DIRENT_CREATE_TIME +DIRENT_PREV +DIRENT_NEXT +DIRENT_CHILD +DIRENT_TYPE +DIRENT_CLSID +DIRENT_TYPE_ROOTDIR + +BAT_MAGIC_METABAT +BAT_MAGIC_BAT +BAT_INDEX_SIZE +BAT_MAGIC_END_OF_CHAIN +BAT_MAGIC_UNUSED +
+ +
+gsf-blob +GsfBlob +GsfBlobClass +GsfBlob +gsf_blob_new +gsf_blob_get_size +gsf_blob_peek_data + +GSF_BLOB +GSF_IS_BLOB +GSF_TYPE_BLOB +GSF_BLOB_CLASS +GSF_IS_BLOB_CLASS +GSF_BLOB_GET_CLASS + +gsf_blob_get_type +GsfBlobPrivate +
+ +
+gsf-clip-data +GsfClipFormat +GsfClipFormatWindows +GsfClipData +GsfClipDataClass +GsfClipData +gsf_clip_data_new +gsf_clip_data_get_format +gsf_clip_data_get_data_blob +gsf_clip_data_get_windows_clipboard_format +gsf_clip_data_peek_real_data + +GSF_CLIP_DATA +GSF_IS_CLIP_DATA +GSF_TYPE_CLIP_DATA +GSF_CLIP_DATA_CLASS +GSF_IS_CLIP_DATA_CLASS +GSF_CLIP_DATA_GET_CLASS + +GsfClipDataPrivate +gsf_clip_data_get_type +
+ +
+Zip +zip +GsfInfileZip +gsf_infile_zip_new + +GsfOutfileZip +gsf_outfile_zip_new +gsf_outfile_zip_set_compression_method + + +GSF_INFILE_ZIP_TYPE +GSF_INFILE_ZIP +GSF_IS_INFILE_ZIP +gsf_infile_zip_get_type + +GSF_OUTFILE_ZIP_TYPE +GSF_OUTFILE_ZIP +GSF_IS_OUTFILE_ZIP +gsf_outfile_zip_get_type + + +GsfZipDirent +gsf_zip_dirent_new +gsf_zip_dirent_free + +GsfZipVDir +gsf_vdir_free +gsf_vdir_new +gsf_vdir_add_child + +ZIP_DIRENT_USIZE +ZIP_DIRENT_OFFSET +GsfZipCompressionMethod +ZIP_FILE_HEADER_NAME_SIZE +ZZIP_IS_STREAMED +ZIP_FILE_HEADER_EXTRACT +ZIP_TRAILER_SIZE +ZIP_HEADER_TIME +ZIP_FILE_HEADER_SIZE +ZZIP_IS_ENCRYPTED +ZIP_HEADER_VERSION +ZIP_BUF_SIZE +ZIP_DIRENT_CRC32 +ZIP_HEADER_COMP_SIZE +ZIP_DIRENT_COMPR_METHOD +ZIP_DIRENT_FILE_TYPE +ZIP_FILE_HEADER_EXTRAS_SIZE +ZIP_DIRENT_EXTRACT +ZIP_DIRENT_FILE_MODE +ZIP_DIRENT_FLAGS +ZIP_FILE_HEADER_CSIZE +ZIP_TRAILER_DIR_SIZE +ZIP_TRAILER_COMMENT_SIZE +ZIP_TRAILER_ENTRIES +ZIP_NAME_SEPARATOR +ZIP_HEADER_SIZE +ZIP_HEADER_CRC +ZIP_FILE_HEADER_FLAGS +ZIP_DIRENT_EXTRAS_SIZE +ZIP_HEADER_COMP_METHOD +ZZIP_IS_COMPRLEVEL +ZIP_DIRENT_DOSTIME +ZIP_DIRENT_ENCODER +ZIP_HEADER_OS +ZIP_DIRENT_COMMENT_SIZE +ZIP_FILE_HEADER_CRC32 +ZIP_HEADER_FLAGS +ZIP_TRAILER_DISK +ZIP_FILE_HEADER_USIZE +ZIP_TRAILER_TOTAL_ENTRIES +ZIP_HEADER_NAME_LEN +ZIP_HEADER_UNCOMP_SIZE +ZIP_TRAILER_DIR_DISK +ZIP_DIRENT_CSIZE +ZIP_TRAILER_DIR_POS +ZIP_BLOCK_SIZE +ZIP_DIRENT_NAME_SIZE +ZIP_DIRENT_SIZE +ZIP_DIRENT_DISKSTART +ZIP_HEADER_EXTRA_LEN +ZIP_FILE_HEADER_COMPR_METHOD +ZIP_FILE_HEADER_DOSTIME +
+ +
+GIOChannel +iochannel +GsfOutputIOChannel +gsf_output_iochannel_new + + +GSF_OUTPUT_IOCHANNEL_TYPE +GSF_OUTPUT_IOCHANNEL +GSF_IS_OUTPUT_IOCHANNEL +gsf_output_iochannel_get_type +
+ +
+Bononbo +bonobo +GsfInputBonobo +gsf_input_bonobo_new + +GsfOutputBonobo +gsf_output_bonobo_new + +GsfSharedBonoboStream +gsf_shared_bonobo_stream_new + +GSF_INPUT_BONOBO_TYPE +GSF_INPUT_BONOBO +GSF_IS_INPUT_BONOBO +gsf_input_bonobo_get_type + +GSF_OUTPUT_BONOBO_TYPE +GSF_OUTPUT_BONOBO +GSF_IS_OUTPUT_BONOBO +gsf_output_bonobo_get_type + +GSF_SHARED_BONOBO_STREAM_TYPE +GSF_SHARED_BONOBO_STREAM +GSF_IS_SHARED_BONOBO_STREAM +gsf_shared_bonobo_stream_get_type +
+ +
+XML and libxml +xml +GSF_XML_IN_NS +GsfXMLContent +GsfXMLIn +gsf_xmlDocFormatDump +gsf_xml_in_doc_free +GsfXMLBlob +GsfXMLOut +GsfXMLInDoc +GsfXMLInNS +GSF_XML_IN_NODE_FULL +GSF_XML_IN_NODE +GsfXMLInNode +GsfXMLInUnknownFunc +gsf_xml_parser_context +gsf_xml_in_doc_new +gsf_xml_in_namecmp +gsf_xml_in_parse +gsf_xml_in_check_ns +gsf_xml_in_doc_extend +gsf_xml_in_doc_set_unknown_handler + +gsf_xml_out_new +gsf_xml_out_set_doc_type + +gsf_xml_out_start_element +gsf_xml_out_end_element + +gsf_xml_out_add_cstr +gsf_xml_out_add_cstr_unchecked +gsf_xml_out_add_bool +gsf_xml_out_add_int +gsf_xml_out_add_uint +gsf_xml_out_add_float +gsf_xml_out_add_enum +gsf_xml_out_add_color +gsf_xml_out_add_base64 +gsf_xml_out_simple_element +gsf_xml_out_simple_float_element +gsf_xml_out_simple_int_element + +GSF_XML_OUT_TYPE +GSF_XML_OUT +GSF_IS_XML_OUT +gsf_xml_out_get_type +
+ +
+Structured Blobs +blob +GsfStructuredBlob +gsf_structured_blob_write +gsf_structured_blob_read + + +GSF_STRUCTURED_BLOB_TYPE +GSF_STRUCTURED_BLOB +GSF_IS_STRUCTURED_BLOB +gsf_structured_blob_get_type +
+ +
+utils + +gsf_init +gsf_shutdown +gsf_init_dynamic +gsf_shutdown_dynamic +libgsf_major_version +libgsf_minor_version +libgsf_micro_version + +GSF_CLASS +GSF_CLASS_FULL +GSF_CLASS_ABSTRACT +GSF_INTERFACE +GSF_INTERFACE_FULL +GSF_DYNAMIC_CLASS +GSF_DYNAMIC_CLASS_FULL +GSF_DYNAMIC_CLASS_ABSTRACT +GSF_DYNAMIC_INTERFACE +GSF_DYNAMIC_INTERFACE_FULL +GSF_PARAM_STATIC + +GSF_ERROR +GsfError +gsf_error_quark + +gsf_mem_dump +gsf_input_dump + +GSF_OFF_T_FORMAT +gsf_off_t + +gsf_filename_to_utf8 +gsf_iconv_close +gsf_extension_pointer + +gsf_base64_encode_simple +gsf_base64_encode_close +gsf_base64_encode_step +gsf_base64_decode_simple +gsf_base64_decode_step +GSF_LE_GET_GINT8 +GSF_LE_GET_GUINT64 +GSF_LE_GET_GINT16 +GSF_LE_GET_GUINT8 +GSF_LE_GET_GINT32 +GSF_LE_GET_GUINT16 +GSF_LE_GET_GUINT32 +GSF_LE_GET_GINT64 +gsf_le_get_guint64 +GSF_LE_GET_FLOAT +gsf_le_get_float +GSF_LE_GET_DOUBLE +gsf_le_get_double +GSF_LE_SET_GUINT8 +GSF_LE_SET_GUINT16 +GSF_LE_SET_GUINT32 +GSF_LE_SET_GINT8 +GSF_LE_SET_GINT16 +GSF_LE_SET_GINT32 +GSF_LE_SET_GINT64 +GSF_LE_SET_GUINT64 +GSF_LE_SET_FLOAT +GSF_LE_SET_DOUBLE +gsf_le_set_float +gsf_le_set_double + + +GsfTimestamp +gsf_timestamp_new +gsf_timestamp_new_now +gsf_timestamp_copy +gsf_timestamp_free +gsf_timestamp_as_string +gsf_timestamp_parse +gsf_timestamp_hash +gsf_timestamp_equal +gsf_value_set_timestamp +VAL_IS_GSF_TIMESTAMP + +GSF_TIMESTAMP_TYPE +gsf_timestamp_get_type + + +gsf_doc_prop_swap_val +gsf_property_settings_collect +gsf_property_settings_collect_valist +gsf_property_settings_free +
+ +
+metadata +GsfDocMetaData +gsf_doc_meta_data_new +gsf_doc_meta_data_lookup +gsf_doc_meta_data_insert +gsf_doc_meta_data_remove +gsf_doc_meta_data_steal +gsf_doc_meta_data_store +gsf_doc_meta_data_foreach +gsf_doc_meta_data_size + +GsfDocProp +gsf_doc_prop_new +gsf_doc_prop_free +gsf_doc_prop_get_name +gsf_doc_prop_get_val +gsf_doc_prop_set_val +gsf_doc_prop_get_link +gsf_doc_prop_set_link + +GsfDocPropVector +gsf_docprop_vector_new +gsf_docprop_vector_append +gsf_docprop_vector_as_string +gsf_value_get_docprop_varray +gsf_value_get_docprop_vector + + +GSF_META_NAME_TITLE +GSF_META_NAME_DESCRIPTION +GSF_META_NAME_SUBJECT +GSF_META_NAME_DATE_MODIFIED +GSF_META_NAME_DATE_CREATED +GSF_META_NAME_KEYWORDS +GSF_META_NAME_LANGUAGE +GSF_META_NAME_REVISION_COUNT +GSF_META_NAME_EDITING_DURATION +GSF_META_NAME_TABLE_COUNT +GSF_META_NAME_IMAGE_COUNT +GSF_META_NAME_OBJECT_COUNT +GSF_META_NAME_PAGE_COUNT +GSF_META_NAME_PARAGRAPH_COUNT +GSF_META_NAME_WORD_COUNT +GSF_META_NAME_CHARACTER_COUNT +GSF_META_NAME_CELL_COUNT +GSF_META_NAME_SPREADSHEET_COUNT +GSF_META_NAME_CREATOR +GSF_META_NAME_TEMPLATE +GSF_META_NAME_LAST_SAVED_BY +GSF_META_NAME_LAST_PRINTED +GSF_META_NAME_SECURITY +GSF_META_NAME_CATEGORY +GSF_META_NAME_PRESENTATION_FORMAT +GSF_META_NAME_THUMBNAIL +GSF_META_NAME_GENERATOR +GSF_META_NAME_LINE_COUNT +GSF_META_NAME_SLIDE_COUNT +GSF_META_NAME_NOTE_COUNT +GSF_META_NAME_HIDDEN_SLIDE_COUNT +GSF_META_NAME_MM_CLIP_COUNT +GSF_META_NAME_BYTE_COUNT +GSF_META_NAME_SCALE +GSF_META_NAME_HEADING_PAIRS +GSF_META_NAME_DOCUMENT_PARTS +GSF_META_NAME_MANAGER +GSF_META_NAME_COMPANY +GSF_META_NAME_LINKS_DIRTY +GSF_META_NAME_DICTIONARY +GSF_META_NAME_MSOLE_UNKNOWN_17 +GSF_META_NAME_MSOLE_UNKNOWN_18 +GSF_META_NAME_MSOLE_UNKNOWN_19 +GSF_META_NAME_MSOLE_UNKNOWN_20 +GSF_META_NAME_MSOLE_UNKNOWN_21 +GSF_META_NAME_MSOLE_UNKNOWN_22 +GSF_META_NAME_MSOLE_UNKNOWN_23 +GSF_META_NAME_LOCALE_SYSTEM_DEFAULT +GSF_META_NAME_CASE_SENSITIVE + +GSF_DOC_META_DATA_TYPE +GSF_DOC_META_DATA +IS_GSF_DOC_META_DATA +gsf_doc_meta_data_get_type + +GSF_DOCPROP_VECTOR +GSF_DOCPROP_VECTOR_TYPE +IS_GSF_DOCPROP_VECTOR +VAL_IS_GSF_DOCPROP_VECTOR +gsf_docprop_vector_get_type + +
diff --git a/lib/libgsf-1.12.3/doc/gsf.types b/lib/libgsf-1.12.3/doc/gsf.types new file mode 100644 index 0000000000..edeb2a2279 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/gsf.types @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +gsf_infile_msole_get_type +gsf_infile_stdio_get_type +gsf_infile_zip_get_type +gsf_input_gzip_get_type +gsf_input_get_type +gsf_input_memory_get_type +gsf_input_stdio_get_type +gsf_input_textline_get_type +gsf_xml_out_get_type +gsf_outfile_get_type +gsf_outfile_msole_get_type +gsf_outfile_stdio_get_type +gsf_outfile_zip_get_type +gsf_output_bzip_get_type +gsf_output_get_type +gsf_output_iochannel_get_type +gsf_output_memory_get_type +gsf_output_stdio_get_type +gsf_shared_memory_get_type +gsf_structured_blob_get_type +gsf_timestamp_get_type diff --git a/lib/libgsf-1.12.3/doc/html/api.html b/lib/libgsf-1.12.3/doc/html/api.html new file mode 100644 index 0000000000..11708aa3e8 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/api.html @@ -0,0 +1,34 @@ + + + +Part II. API Reference + + + + + + + + + + + + + + + + + + + + + + +

+API Reference

+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Bononbo.html b/lib/libgsf-1.12.3/doc/html/gsf-Bononbo.html new file mode 100644 index 0000000000..1e8a802ffb --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Bononbo.html @@ -0,0 +1,200 @@ + + + +Bononbo + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Bononbo

+

Bononbo —

+
+
+

Synopsis

+
+
+
+
+            GsfInputBonobo;
+GsfInput*   gsf_input_bonobo_new            (Bonobo_Stream const stream,
+                                             GError **err);
+            GsfOutputBonobo;
+GsfOutput*  gsf_output_bonobo_new           (Bonobo_Stream const stream,
+                                             GError **err);
+            GsfSharedBonoboStream;
+GsfSharedBonoboStream* gsf_shared_bonobo_stream_new
+                                            (Bonobo_Stream stream);
+
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInputBonobo

+
typedef struct _GsfInputBonobo GsfInputBonobo;
+

+ +

+
+
+
+

+gsf_input_bonobo_new ()

+
GsfInput*   gsf_input_bonobo_new            (Bonobo_Stream const stream,
+                                             GError **err);
+

+ +

+
++ + + + + + + + + + + + + + +
+stream : +
+err : +
+Returns : + + +
+
+
+
+

+GsfOutputBonobo

+
typedef struct _GsfOutputBonobo GsfOutputBonobo;
+

+ +

+
+
+
+

+gsf_output_bonobo_new ()

+
GsfOutput*  gsf_output_bonobo_new           (Bonobo_Stream const stream,
+                                             GError **err);
+

+ +

+
++ + + + + + + + + + + + + + +
+stream : +
+err : +
+Returns : + + +
+
+
+
+

+GsfSharedBonoboStream

+
typedef struct {
+	GObject g_object;
+	Bonobo_Stream stream;
+	CORBA_long pos;
+} GsfSharedBonoboStream;
+
+

+ +

+
+
+
+

+gsf_shared_bonobo_stream_new ()

+
GsfSharedBonoboStream* gsf_shared_bonobo_stream_new
+                                            (Bonobo_Stream stream);
+

+ +

+
++ + + + + + + + + + +
+stream : +
+Returns : + + +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Compression.html b/lib/libgsf-1.12.3/doc/html/gsf-Compression.html new file mode 100644 index 0000000000..d7298b1b3f --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Compression.html @@ -0,0 +1,288 @@ + + + +Compression + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Compression

+

Compression —

+
+
+

Synopsis

+
+
+
+
+            GsfInputGZip;
+GsfInput*   gsf_input_gzip_new              (GsfInput *source,
+                                             GError **err);
+GsfInput*   gsf_input_memory_new_from_bzip  (GsfInput *source,
+                                             GError **err);
+            GsfOutputGZip;
+GsfOutput*  gsf_output_gzip_new             (GsfOutput *sink,
+                                             GError **err);
+            GsfOutputBzip;
+GsfOutput*  gsf_output_bzip_new             (GsfOutput *sink,
+                                             GError **err);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInputGZip
+
+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutputBzip
+
+
+
+

Properties

+
+
+  "raw"                  gboolean              : Read / Write / Construct Only
+  "source"               GsfInput              : Read / Write / Construct Only
+  "uncompressed-size"    gint64                : Read / Write / Construct Only
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInputGZip

+
typedef struct _GsfInputGZip GsfInputGZip;
+

+ +

+
+
+
+

+gsf_input_gzip_new ()

+
GsfInput*   gsf_input_gzip_new              (GsfInput *source,
+                                             GError **err);
+

+Adds a reference to source.

+

+ +

+
++ + + + + + + + + + + + + + +
+source : The underlying data source. +
+err : optionally NULL. +
+Returns :a new file or NULL. +
+
+
+
+

+gsf_input_memory_new_from_bzip ()

+
GsfInput*   gsf_input_memory_new_from_bzip  (GsfInput *source,
+                                             GError **err);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+source : a GsfInput +
+err : a GError +
+Returns :a new GsfInputMemory or NULL. +
+
+
+
+

+GsfOutputGZip

+
typedef struct _GsfOutputGZip GsfOutputGZip;
+

+ +

+
+
+
+

+gsf_output_gzip_new ()

+
GsfOutput*  gsf_output_gzip_new             (GsfOutput *sink,
+                                             GError **err);
+

+Adds a reference to sink.

+

+ +

+
++ + + + + + + + + + + + + + +
+sink : The underlying data source. +
+err : optionally NULL. +
+Returns :a new file or NULL. +
+
+
+
+

+GsfOutputBzip

+
typedef struct _GsfOutputBzip GsfOutputBzip;
+

+ +

+
+
+
+

+gsf_output_bzip_new ()

+
GsfOutput*  gsf_output_bzip_new             (GsfOutput *sink,
+                                             GError **err);
+

+Adds a reference to sink.

+

+ +

+
++ + + + + + + + + + + + + + +
+sink : The underlying data source. +
+err : optionally NULL. +
+Returns :a new file or NULL. +
+
+
+
+

Properties

+
+

+The "raw" property

+
  "raw"                  gboolean              : Read / Write / Construct Only
+

Whether to read compressed data with no header and no trailer.

+

Default value: FALSE

+
+
+
+

+The "source" property

+
  "source"               GsfInput              : Read / Write / Construct Only
+

Where the compressed data comes from.

+
+
+
+

+The "uncompressed-size" property

+
  "uncompressed-size"    gint64                : Read / Write / Construct Only
+

The source's uncompressed size.

+

Allowed values: >= -1

+

Default value: -1

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-GIOChannel.html b/lib/libgsf-1.12.3/doc/html/gsf-GIOChannel.html new file mode 100644 index 0000000000..86bf4c6626 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-GIOChannel.html @@ -0,0 +1,108 @@ + + + +GIOChannel + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

GIOChannel

+

GIOChannel —

+
+
+

Synopsis

+
+
+
+
+            GsfOutputIOChannel;
+GsfOutput*  gsf_output_iochannel_new        (GIOChannel *channel);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutputIOChannel
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfOutputIOChannel

+
typedef struct _GsfOutputIOChannel GsfOutputIOChannel;
+

+ +

+
+
+
+

+gsf_output_iochannel_new ()

+
GsfOutput*  gsf_output_iochannel_new        (GIOChannel *channel);
+

+

+

+ +

+
++ + + + + + + + + + +
+channel : A GIOChannel +
+Returns :a new file or NULL. +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-GnomeVFS.html b/lib/libgsf-1.12.3/doc/html/gsf-GnomeVFS.html new file mode 100644 index 0000000000..b6bd7dc9f1 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-GnomeVFS.html @@ -0,0 +1,259 @@ + + + +GnomeVFS + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

GnomeVFS

+

GnomeVFS —

+
+
+

Synopsis

+
+
+
+
+            GsfInputGnomeVFS;
+GsfInput*   gsf_input_gnomevfs_new          (char const *uri,
+                                             GError **error);
+GsfInput*   gsf_input_gnomevfs_new_uri      (GnomeVFSURI *uri,
+                                             GError **error);
+gboolean    gsf_input_gnomevfs_needs_local_copy
+                                            (GsfInputGnomeVFS *vfs_input);
+            GsfOutputGnomeVFS;
+GsfOutput*  gsf_output_gnomevfs_new         (char const *filename,
+                                             GError **err);
+GsfOutput*  gsf_output_gnomevfs_new_uri     (GnomeVFSURI *uri,
+                                             GError **err);
+
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInputGnomeVFS

+
typedef struct _GsfInputGnomeVFS GsfInputGnomeVFS;
+

+ +

+
+
+
+

+gsf_input_gnomevfs_new ()

+
GsfInput*   gsf_input_gnomevfs_new          (char const *uri,
+                                             GError **error);
+

+ +

+
++ + + + + + + + + + + + + + +
+uri : +
+error : +
+Returns : + + +
+
+
+
+

+gsf_input_gnomevfs_new_uri ()

+
GsfInput*   gsf_input_gnomevfs_new_uri      (GnomeVFSURI *uri,
+                                             GError **error);
+

+ +

+
++ + + + + + + + + + + + + + +
+uri : +
+error : +
+Returns : + + +
+
+
+
+

+gsf_input_gnomevfs_needs_local_copy ()

+
gboolean    gsf_input_gnomevfs_needs_local_copy
+                                            (GsfInputGnomeVFS *vfs_input);
+

+ +

+
++ + + + + + + + + + +
+vfs_input : +
+Returns : + + +
+
+
+
+

+GsfOutputGnomeVFS

+
typedef struct _GsfOutputGnomeVFS GsfOutputGnomeVFS;
+

+ +

+
+
+
+

+gsf_output_gnomevfs_new ()

+
GsfOutput*  gsf_output_gnomevfs_new         (char const *filename,
+                                             GError **err);
+

+ +

+
++ + + + + + + + + + + + + + +
+filename : +
+err : +
+Returns : + + +
+
+
+
+

+gsf_output_gnomevfs_new_uri ()

+
GsfOutput*  gsf_output_gnomevfs_new_uri     (GnomeVFSURI *uri,
+                                             GError **err);
+

+ +

+
++ + + + + + + + + + + + + + +
+uri : +
+err : +
+Returns : + + +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-GsfBlob.html b/lib/libgsf-1.12.3/doc/html/gsf-GsfBlob.html new file mode 100644 index 0000000000..29a589db01 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-GsfBlob.html @@ -0,0 +1,212 @@ + + + +GsfBlob + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

GsfBlob

+

GsfBlob — A generic, unstructured block of binary data

+
+
+

Synopsis

+
+
+
+
+            GsfBlob;
+            GsfBlobClass;
+GsfBlob*    gsf_blob_new                    (gsize size,
+                                             gconstpointer data_to_copy,
+                                             GError **error);
+gsize       gsf_blob_get_size               (GsfBlob *blob);
+gconstpointer gsf_blob_peek_data            (GsfBlob *blob);
+
+
+
+
+
+

Description

+

+ Some libgsf functions, in particular the metadata functions, can generate + unstructured blocks of data, or blobs. + Libgsf represents these blobs using a + GsfBlob object. +

+
+
+

Details

+
+

+GsfBlob

+
typedef struct {
+	GObject object;
+	GsfBlobPrivate *priv;
+} GsfBlob;
+
+

+ Represents an unstructured block of binary data, that is, a + sequence of bytes and an integer specifying the size of the + sequence. +

+
+
+
+

+GsfBlobClass

+
typedef struct {
+	GObjectClass parent_class;
+} GsfBlobClass;
+
+

+ +

+
+
+
+

+gsf_blob_new ()

+
GsfBlob*    gsf_blob_new                    (gsize size,
+                                             gconstpointer data_to_copy,
+                                             GError **error);
+

+Creates a new GsfBlob object to hold the specified data. The blob can then +be used as a facility for reference-counting for the data. The data is +copied internally, so the blob does not hold references to external chunks +of memory.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+size : Size of the data in bytes. +
+data_to_copy : Data which will be copied into the blob, or NULL if size is zero. +
+error : location to store error, or NULL. +
+Returns : A newly-created GsfBlob, or NULL if the data could not be copied. + +Error domain: GSF_ERROR + +Possible errors: GSF_ERROR_OUT_OF_MEMORY if the data_to_copy could not be copied. +
+
+
+
+

+gsf_blob_get_size ()

+
gsize       gsf_blob_get_size               (GsfBlob *blob);
+

+Queries the size in bytes of the data stored in the blob.

+

+ +

+
++ + + + + + + + + + +
+blob : A GsfBlob. +
+Returns : Size in bytes, or 0 if the data is NULL. +
+
+
+
+

+gsf_blob_peek_data ()

+
gconstpointer gsf_blob_peek_data            (GsfBlob *blob);
+

+Queries a pointer to the data stored in the blob. This does not copy the data +for you; it returns a pointer to the actual buffer which the blob uses internally, +so you should not free this buffer on your own.

+

+ +

+
++ + + + + + + + + + +
+blob : A GsfBlob. +
+Returns : Pointer to the data stored in the blob, or NULL if the size +of the data is zero. +
+
+
+
+

See Also

+

+ GsfClipData, GsfMetadata +

+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-GsfClipData.html b/lib/libgsf-1.12.3/doc/html/gsf-GsfClipData.html new file mode 100644 index 0000000000..4f323b7d80 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-GsfClipData.html @@ -0,0 +1,453 @@ + + + +GsfClipData + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

GsfClipData

+

GsfClipData — Object to hold clipboard data from a VT_CF section

+
+
+

Synopsis

+
+
+
+
+enum        GsfClipFormat;
+enum        GsfClipFormatWindows;
+            GsfClipData;
+            GsfClipDataClass;
+GsfClipData* gsf_clip_data_new              (GsfClipFormat format,
+                                             GsfBlob *data_blob);
+GsfClipFormat gsf_clip_data_get_format      (GsfClipData *clip_data);
+GsfBlob*    gsf_clip_data_get_data_blob     (GsfClipData *clip_data);
+GsfClipFormatWindows gsf_clip_data_get_windows_clipboard_format
+                                            (GsfClipData *clip_data,
+                                             GError **error);
+gconstpointer gsf_clip_data_peek_real_data  (GsfClipData *clip_data,
+                                             gsize *ret_size,
+                                             GError **error);
+
+
+
+
+
+

Description

+

+ OLE2 files may contain clipboard data in the + VT_CF property of the metadata in a + SummaryInfo section. This data is used, among + other things, to represent a thumbnail or pre-rendered version of + the data in the file. GsfClipData is an + object that holds such clipboard data. +

+

+ You can get a GsfClipData object from the + GValue returned by gsf_doc_prop_get_val(), after you have done + gsf_doc_meta_data_lookup (meta_data, + GSF_META_NAME_THUMBNAIL). The resulting GsfClipData + object, if it exists, contains the thumbnail data. In turn, the + thumbnail data may be in different formats, as specified by the + GsfClipFormat enumeration. +

+

+ Internally, GsfClipData stores the thumbnail data plus any extra + information in a GsfBlob object. GsfClipData provides a + convenience function, gsf_clip_data_peek_real_data(), to extract + the thumbnail data directly. If you need to use the raw binary + data instead of the data specific to the thumbnail, you can use + gsf_clip_data_get_data_blob() to get the GsfBlob object and + handle it yourself. +

+
+
+

Details

+
+

+enum GsfClipFormat

+
typedef enum {
+	GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD = -1,
+	GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARD = -2,
+	GSF_CLIP_FORMAT_GUID = -3,
+	GSF_CLIP_FORMAT_NO_DATA = 0,
+	GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAME = 1, /* in the file it's actually any positive integer */
+	GSF_CLIP_FORMAT_UNKNOWN /* this is our own value for unknown types or invalid data */
+} GsfClipFormat;
+
+

+ A GsfClipData stores all its thumbnail data and associated + information in an internal GsfBlob object. The + GsfClipFormat enumeration represents the possible + formats for this data blob. +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + +
+GSF_CLIP_FORMAT_WINDOWS_CLIPBOARDThe thumbnail data is stored in + Windows clipboard format. The particular sub-format can be in any of + the values in the GsfClipFormatWindows enumeration. When a + GsfClipData is in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD, you can use + gsf_clip_data_get_windows_clipboard_format() to get the sub-format + in which the data is actually stored. +
+GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARDThe thumbnail data is stored in + Macintosh clipboard format, usually PICT. +
+GSF_CLIP_FORMAT_GUIDThe thumbnail data contains a GUID specifying + the OLE component which can be used to render it. Please refer to + the OLE2 format documentation for details. +
+GSF_CLIP_FORMAT_NO_DATAThere is no thumbnail data. +
+GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAMEThe thumbnail data contains a + null-terminated string with a Windows clipboard format name. Please refer to + the OLE2 format documentation for details. +
+GSF_CLIP_FORMAT_UNKNOWNThe thumbnail data is in an unknown format, + but is nevertheless stored in a GsfBlob. + +
+
+
+
+

+enum GsfClipFormatWindows

+
typedef enum {
+	GSF_CLIP_FORMAT_WINDOWS_ERROR = -1,		/* our own value */
+	GSF_CLIP_FORMAT_WINDOWS_UNKNOWN = -2,		/* our own value */
+	GSF_CLIP_FORMAT_WINDOWS_METAFILE = 3,		/* CF_METAFILEPICT */
+	GSF_CLIP_FORMAT_WINDOWS_DIB = 8,		/* CF_DIB */
+	GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE = 14	/* CF_ENHMETAFILE */
+} GsfClipFormatWindows;
+
+

+ When a GsfClipData is in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD + format, it can be in any of the subformats specified by the + GsfClipFormatWindows enumeration. Use + gsf_clip_data_get_windows_clipboard_format() to determine this + sub-format. +

+

+ For all of these values, the gsf_clip_data_peek_real_data() + function lets you access the data directly. +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+GSF_CLIP_FORMAT_WINDOWS_ERRORThe OLE file is probably corrupt. +
+GSF_CLIP_FORMAT_WINDOWS_UNKNOWNThe specific clipboard format is + unknown to libgsf. +
+GSF_CLIP_FORMAT_WINDOWS_METAFILEThe data is in Windows Metafile + format. While OLE files store extra header data in this case, the + gsf_clip_data_peek_real_data() function will let you access the WMF + data directly, and it will ignore the extra header bytes. +
+GSF_CLIP_FORMAT_WINDOWS_DIBThe data is in Windows + Device-Independent Bitmap format. +
+GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILEThe data is in Windows + Enhanced Metaflie format. + +
+
+
+
+

+GsfClipData

+
typedef struct {
+	GObject object;
+
+	GsfClipDataPrivate *priv;
+} GsfClipData;
+
+

+ Object used to represent a VT_CF property in the OLE stream. +

+
+
+
+

+GsfClipDataClass

+
typedef struct {
+	GObjectClass parent_class;
+} GsfClipDataClass;
+
+

+ +

+
+
+
+

+gsf_clip_data_new ()

+
GsfClipData* gsf_clip_data_new              (GsfClipFormat format,
+                                             GsfBlob *data_blob);
+

+Creates a new GsfClipData object. This function acquires a reference to the +data_blob, so you should unref the blob on your own if you no longer need it +directly.

+

+ +

+
++ + + + + + + + + + + + + + +
+format : Format for the data inside the data_blob +
+data_blob : Object which holds the binary contents for the GsfClipData +
+Returns : A newly-created GsfClipData. +
+
+
+
+

+gsf_clip_data_get_format ()

+
GsfClipFormat gsf_clip_data_get_format      (GsfClipData *clip_data);
+

+Queries the clipboard data format of a GsfClipData. The format refers to the data +blob inside the clip_data; use gsf_clip_data_get_data_blob() to get that data blob.

+

+ +

+
++ + + + + + + + + + +
+clip_data : A GsfClipData. +
+Returns : The format in which the GsfClipData's data blob is stored. +
+
+
+
+

+gsf_clip_data_get_data_blob ()

+
GsfBlob*    gsf_clip_data_get_data_blob     (GsfClipData *clip_data);
+

+Queries the data blob that actually stores a GsfClipData's binary data.

+

+ +

+
++ + + + + + + + + + +
+clip_data : A GsfClipData. +
+Returns : A new reference to the GsfBlob that stores this clip_data's +binary data. You must use g_object_unref() to dispose of that data blob when +you are done with it. +
+
+
+
+

+gsf_clip_data_get_windows_clipboard_format ()

+
GsfClipFormatWindows gsf_clip_data_get_windows_clipboard_format
+                                            (GsfClipData *clip_data,
+                                             GError **error);
+

+Queries the Windows clipboard data format for a GsfClipData. The clip_data must +have been created with GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD.

+

+ +

+
++ + + + + + + + + + + + + + +
+clip_data : A GsfClipData. +
+error : Location to store error, or NULL +
+Returns : A GsfClipFormatWindows value. + +Possible errors: GSF_ERROR_INVALID_DATA if the data blob in the clip_data is +smaller than it should be; in this case GSF_CLIP_FORMAT_WINDOWS_ERROR will be returned. +
+
+
+
+

+gsf_clip_data_peek_real_data ()

+
gconstpointer gsf_clip_data_peek_real_data  (GsfClipData *clip_data,
+                                             gsize *ret_size,
+                                             GError **error);
+

+Queries a pointer directly to the clipboard data of a GsfClipData. The +resulting pointer is not necessarily the same data pointer that was passed to +gsf_blob_new() prior to creating the clip_data. For example, if the data is +in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD format, then it will have extra header +bytes in front of the actual metafile data. This function will skip over +those header bytes if necessary and return a pointer to the "real" data.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+clip_data : A GsfClipData. +
+ret_size : Location to return the size of the returned data buffer. +
+error : Location to store error, or NULL. +
+Returns : Pointer to the real clipboard data. The size in bytes of this +buffer is returned in the ret_size argument. +
+
+
+
+

See Also

+

+ GsfBlob, GsfDocMetaData +

+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Infile-reading-structed-files.html b/lib/libgsf-1.12.3/doc/html/gsf-Infile-reading-structed-files.html new file mode 100644 index 0000000000..8bb6a9243b --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Infile-reading-structed-files.html @@ -0,0 +1,270 @@ + + + +Infile reading structed files + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Infile reading structed files

+

Infile reading structed files —

+
+
+

Synopsis

+
+
+
+
+            GsfInfile;
+int         gsf_infile_num_children         (GsfInfile *infile);
+GsfInput*   gsf_infile_child_by_index       (GsfInfile *infile,
+                                             int i);
+GsfInput*   gsf_infile_child_by_name        (GsfInfile *infile,
+                                             char const *name);
+GsfInput*   gsf_infile_child_by_vname       (GsfInfile *infile,
+                                             char const *name,
+                                             ...);
+charconst * gsf_infile_name_by_index        (GsfInfile *infile,
+                                             int i);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInfile
+               +----GsfInfileMSOle
+               +----GsfInfileStdio
+               +----GsfInfileZip
+               +----GsfStructuredBlob
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInfile

+
typedef struct _GsfInfile GsfInfile;
+

+ +

+
+
+
+

+gsf_infile_num_children ()

+
int         gsf_infile_num_children         (GsfInfile *infile);
+

+

+

+ +

+
++ + + + + + + + + + +
+infile : the structured storage +
+Returns :the number of children the storage has, or -1 if the storage can not + have children. +
+
+
+
+

+gsf_infile_child_by_index ()

+
GsfInput*   gsf_infile_child_by_index       (GsfInfile *infile,
+                                             int i);
+

+TODO : For 2.0 api will change to include a GError.

+

+ +

+
++ + + + + + + + + + + + + + +
+infile : +
+i : +
+Returns :a newly created child which must be unrefed. +
+
+
+
+

+gsf_infile_child_by_name ()

+
GsfInput*   gsf_infile_child_by_name        (GsfInfile *infile,
+                                             char const *name);
+

+TODO : For 2.0 api will change to include a GError.

+

+ +

+
++ + + + + + + + + + + + + + +
+infile : +
+name : +
+Returns :a newly created child which must be unrefed. +
+
+
+
+

+gsf_infile_child_by_vname ()

+
GsfInput*   gsf_infile_child_by_vname       (GsfInfile *infile,
+                                             char const *name,
+                                             ...);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+infile : +
+name : A null terminated list of names +
+... : the rest of the names +
+Returns :a newly created child which must be unrefed. +
+
+
+
+

+gsf_infile_name_by_index ()

+
charconst * gsf_infile_name_by_index        (GsfInfile *infile,
+                                             int i);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+infile : +
+i : +
+Returns :the utf8 encoded name of the i-th child +NOTE : DO NOT FREE THE STRING +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Input-from-unstructured-files.html b/lib/libgsf-1.12.3/doc/html/gsf-Input-from-unstructured-files.html new file mode 100644 index 0000000000..0223ba4947 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Input-from-unstructured-files.html @@ -0,0 +1,889 @@ + + + +Input from unstructured files + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Input from unstructured files

+

Input from unstructured files —

+
+
+

Synopsis

+
+
+
+
+            GsfInput;
+guint8const * gsf_input_read                (GsfInput *input,
+                                             size_t num_bytes,
+                                             guint8 *optional_buffer);
+gsf_off_t   gsf_input_tell                  (GsfInput *input);
+gboolean    gsf_input_seek                  (GsfInput *input,
+                                             gsf_off_t offset,
+                                             GSeekType whence);
+GsfInfile*  gsf_input_container             (GsfInput *input);
+GsfInput*   gsf_input_dup                   (GsfInput *input,
+                                             GError **err);
+gsf_off_t   gsf_input_size                  (GsfInput *input);
+gboolean    gsf_input_eof                   (GsfInput *input);
+gsf_off_t   gsf_input_remaining             (GsfInput *input);
+GQuark      gsf_input_error_id              (void);
+GsfInput*   gsf_input_sibling               (GsfInput const *input,
+                                             char const *name,
+                                             GError **err);
+GQuark      gsf_input_error                 (void);
+charconst   * gsf_input_name                (GsfInput *input);
+gboolean    gsf_input_set_name_from_filename
+                                            (GsfInput *input,
+                                             char const *filename);
+            GsfInputProxy;
+GsfInput*   gsf_input_proxy_new             (GsfInput *source);
+GsfInput*   gsf_input_proxy_new_section     (GsfInput *source,
+                                             gsf_off_t offset,
+                                             gsf_off_t size);
+
+gboolean    gsf_input_copy                  (GsfInput *input,
+                                             GsfOutput *output);
+GsfInput*   gsf_input_uncompress            (GsfInput *src);
+
+gboolean    gsf_input_set_name              (GsfInput *input,
+                                             char const *name);
+gboolean    gsf_input_set_container         (GsfInput *input,
+                                             GsfInfile *container);
+gboolean    gsf_input_set_size              (GsfInput *input,
+                                             gsf_off_t size);
+gboolean    gsf_input_seek_emulate          (GsfInput *input,
+                                             gsf_off_t pos);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInfile
+         +----GsfInputGZip
+         +----GsfInputMemory
+         +----GsfInputStdio
+         +----GsfInputTextline
+
+
+
+

Properties

+
+
+  "eof"                  gboolean              : Read
+  "name"                 gchararray            : Read
+  "position"             gint64                : Read
+  "remaining"            gint64                : Read
+  "size"                 gint64                : Read
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInput

+
typedef struct _GsfInput GsfInput;
+

+ +

+
+
+
+

+gsf_input_read ()

+
guint8const * gsf_input_read                (GsfInput *input,
+                                             size_t num_bytes,
+                                             guint8 *optional_buffer);
+

+Read at least num_bytes. Does not change the current position if there +is an error. Will only read if the entire amount can be read. Invalidates +the buffer associated with previous calls to gsf_input_read.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+input : the input stream +
+num_bytes : number of bytes to read +
+optional_buffer : NULL, or pointer to destination memory area +
+Returns :: pointer to the buffer or NULL if there is an error or 0 bytes are + requested. +
+
+
+
+

+gsf_input_tell ()

+
gsf_off_t   gsf_input_tell                  (GsfInput *input);
+

+

+

+ +

+
++ + + + + + + + + + +
+input : the input stream +
+Returns :the current offset in the file. +
+
+
+
+

+gsf_input_seek ()

+
gboolean    gsf_input_seek                  (GsfInput *input,
+                                             gsf_off_t offset,
+                                             GSeekType whence);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+input : the input stream +
+offset : target offset +
+whence : determines whether the offset is relative to the beginning or + the end of the stream, or to the current location. +
+Returns :TRUE on error. +
+
+
+
+

+gsf_input_container ()

+
GsfInfile*  gsf_input_container             (GsfInput *input);
+

+

+

+ +

+
++ + + + + + + + + + +
+input : the input stream +
+Returns :, but does not add a reference to input's container. +Potentially NULL +
+
+
+
+

+gsf_input_dup ()

+
GsfInput*   gsf_input_dup                   (GsfInput *input,
+                                             GError **err);
+

+Duplicates input src leaving the new one at the same offset.

+

+ +

+
++ + + + + + + + + + + + + + +
+input : The input to duplicate +
+err : optionally NULL +
+Returns :: the duplicate, or NULL on error +
+
+
+
+

+gsf_input_size ()

+
gsf_off_t   gsf_input_size                  (GsfInput *input);
+

+Looks up and caches the number of bytes in the input

+

+ +

+
++ + + + + + + + + + +
+input : The input +
+Returns :: the size or -1 on error +
+
+
+
+

+gsf_input_eof ()

+
gboolean    gsf_input_eof                   (GsfInput *input);
+

+Are we at the end of the file ?

+

+ +

+
++ + + + + + + + + + +
+input : the input +
+Returns :: TRUE if the input is at the eof. +
+
+
+
+

+gsf_input_remaining ()

+
gsf_off_t   gsf_input_remaining             (GsfInput *input);
+

+

+

+ +

+
++ + + + + + + + + + +
+input : the input stream +
+Returns :the number of bytes left in the file. +
+
+
+
+

+gsf_input_error_id ()

+
GQuark      gsf_input_error_id              (void);
+

+

+

+ +

+
++ + + + +
+Returns :: A utility quark to flag a GError as being an input problem. +
+
+
+
+

+gsf_input_sibling ()

+
GsfInput*   gsf_input_sibling               (GsfInput const *input,
+                                             char const *name,
+                                             GError **err);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+input : +
+name : +
+err : +
+Returns : + + +
+
+
+
+

+gsf_input_error ()

+
GQuark      gsf_input_error                 (void);
+

+Deprecated in 1.12.0

+

+ +

+
++ + + + +
+Returns :: A utility quark to flag a GError as being an input problem. +
+
+
+
+

+gsf_input_name ()

+
charconst   * gsf_input_name                (GsfInput *input);
+

+

+

+ +

+
++ + + + + + + + + + +
+input : the input stream +
+Returns : +input's name in utf8 form, or NULL if it has no name. +
+
+
+
+

+gsf_input_set_name_from_filename ()

+
gboolean    gsf_input_set_name_from_filename
+                                            (GsfInput *input,
+                                             char const *filename);
+

+protected.

+

+ +

+
++ + + + + + + + + + + + + + +
+input : the input stream +
+filename : the (fs-sys encoded) filename +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

+GsfInputProxy

+
typedef struct _GsfInputProxy GsfInputProxy;
+

+ +

+
+
+
+

+gsf_input_proxy_new ()

+
GsfInput*   gsf_input_proxy_new             (GsfInput *source);
+

+This creates a new proxy to the entire, given input source. See +gsf_input_proxy_new_section for details.

+

+ +

+
++ + + + + + + + + + +
+source : The underlying data source. +
+Returns :a new input object. +
+
+
+
+

+gsf_input_proxy_new_section ()

+
GsfInput*   gsf_input_proxy_new_section     (GsfInput *source,
+                                             gsf_off_t offset,
+                                             gsf_off_t size);
+

+This creates a new proxy to a section of the given source. The new +object will have its own current position, but any operation on it +can change the source's position. +

+

+If a proxy to a proxy is created, the intermediate proxy is short- +circuited. +

+

+This function will ref the source.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+source : The underlying data source. +
+offset : Offset into source for start of section. +
+size : Length of section. +
+Returns :a new input object. +
+
+
+
+

+gsf_input_copy ()

+
gboolean    gsf_input_copy                  (GsfInput *input,
+                                             GsfOutput *output);
+

+Copy the contents from input to output from their respective +current positions. So if you want to be sure to copy *everything*, +make sure to call gsf_input_seek (input, 0, G_SEEK_SET) and +gsf_output_seek (output, 0, G_SEEK_SET) first, if applicable.

+

+ +

+
++ + + + + + + + + + + + + + +
+input : a non-null GsfInput +
+output : a non-null GsfOutput +
+Returns :: TRUE on Success +
+
+
+
+

+gsf_input_uncompress ()

+
GsfInput*   gsf_input_uncompress            (GsfInput *src);
+

+

+

+ +

+
++ + + + + + + + + + +
+src : stream to be uncompressed. +
+Returns : A stream equivalent to the source stream, but uncompressed if +the source was compressed. + +This functions takes ownership of the incoming reference and yields a +new one as its output. +
+
+
+
+

+gsf_input_set_name ()

+
gboolean    gsf_input_set_name              (GsfInput *input,
+                                             char const *name);
+

+protected.

+

+ +

+
++ + + + + + + + + + + + + + +
+input : the input stream +
+name : the new name of the stream, or NULL. +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

+gsf_input_set_container ()

+
gboolean    gsf_input_set_container         (GsfInput *input,
+                                             GsfInfile *container);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+input : the input stream +
+container : +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

+gsf_input_set_size ()

+
gboolean    gsf_input_set_size              (GsfInput *input,
+                                             gsf_off_t size);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+input : the input stream +
+size : the size of the stream +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

+gsf_input_seek_emulate ()

+
gboolean    gsf_input_seek_emulate          (GsfInput *input,
+                                             gsf_off_t pos);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+input : stream to emulate seek for +
+pos : absolute position to seek to +
+Returns :: TRUE if the emulation failed. +
+
+
+
+

Properties

+
+

+The "eof" property

+
  "eof"                  gboolean              : Read
+

End Of File.

+

Default value: FALSE

+
+
+
+

+The "name" property

+
  "name"                 gchararray            : Read
+

The Input's Name.

+

Default value: NULL

+
+
+
+

+The "position" property

+
  "position"             gint64                : Read
+

The Output's Current Position.

+

Allowed values: >= 0

+

Default value: 0

+
+
+
+

+The "remaining" property

+
  "remaining"            gint64                : Read
+

Amount of Data Remaining.

+

Allowed values: >= 0

+

Default value: 0

+
+
+
+

+The "size" property

+
  "size"                 gint64                : Read
+

The Input's Size.

+

Allowed values: >= 0

+

Default value: 0

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-MS-OLE2.html b/lib/libgsf-1.12.3/doc/html/gsf-MS-OLE2.html new file mode 100644 index 0000000000..f199372b66 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-MS-OLE2.html @@ -0,0 +1,1265 @@ + + + +MS OLE2 + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

MS OLE2

+

MS OLE2 —

+
+
+

Synopsis

+
+
+
+
+            GsfInfileMSOle;
+GsfInfile*  gsf_infile_msole_new            (GsfInput *source,
+                                             GError **err);
+gboolean    gsf_infile_msole_get_class_id   (GsfInfileMSOle const *ole,
+                                             guint8 *res);
+            GsfOutfileMSOle;
+GsfOutfile* gsf_outfile_msole_new           (GsfOutput *sink);
+GsfOutfile* gsf_outfile_msole_new_full      (GsfOutput *sink,
+                                             guint bb_size,
+                                             guint sb_size);
+gboolean    gsf_outfile_msole_set_class_id  (GsfOutfileMSOle *ole,
+                                             guint8 const *clsid);
+GError*     gsf_msole_metadata_read         (GsfInput *in,
+                                             GsfDocMetaData *accum);
+gboolean    gsf_msole_metadata_write        (GsfOutput *out,
+                                             GsfDocMetaData const *meta_data,
+                                             gboolean doc_not_component);
+GIConv      gsf_msole_iconv_open_codepages_for_export
+                                            (int codepage_to,
+                                             char const *from);
+GIConv      gsf_msole_iconv_open_codepage_for_import
+                                            (char const *to,
+                                             int codepage);
+GIConv      gsf_msole_iconv_open_for_export (void);
+GIConv      gsf_msole_iconv_open_codepage_for_export
+                                            (int codepage_to);
+GIConv      gsf_msole_iconv_open_for_import (int codepage);
+int         gsf_msole_iconv_win_codepage    (void);
+guint       gsf_msole_codepage_to_lid       (int codepage);
+int         gsf_msole_lid_to_codepage       (guint lid);
+gchar*      gsf_msole_lid_to_codepage_str   (guint lid);
+guint       gsf_msole_lid_for_language      (char const *lang);
+charconst * gsf_msole_language_for_lid      (guint lid);
+GByteArray* gsf_msole_inflate               (GsfInput *input,
+                                             gsf_off_t offset);
+
+
+#define     OLE_HEADER_START_BAT
+#define     OLE_HEADER_MAJOR_VER
+#define     OLE_HEADER_METABAT_SIZE
+#define     OLE_HEADER_DIRENT_START
+#define     OLE_HEADER_NUM_SBAT
+#define     OLE_HEADER_BB_SHIFT
+#define     OLE_HEADER_CSECTDIR
+#define     OLE_HEADER_NUM_BAT
+#define     OLE_HEADER_THRESHOLD
+#define     OLE_HEADER_METABAT_BLOCK
+#define     OLE_HEADER_SBAT_START
+#define     OLE_HEADER_SIGNATURE
+#define     OLE_HEADER_BYTE_ORDER
+#define     OLE_HEADER_SB_SHIFT
+#define     OLE_HEADER_NUM_METABAT
+#define     OLE_HEADER_SIZE
+#define     OLE_HEADER_CLSID
+#define     OLE_HEADER_MINOR_VER
+#define     OLE_DEFAULT_BB_SHIFT
+#define     OLE_DEFAULT_SB_SHIFT
+#define     DIRENT_DETAILS_SIZE
+#define     DIRENT_SIZE
+#define     DIRENT_NAME_LEN
+#define     DIRENT_TYPE_PROPERTY
+#define     DIRENT_TYPE_FILE
+#define     DIRENT_MAGIC_END
+#define     DIRENT_TYPE_DIR
+#define     DIRENT_MAX_NAME_SIZE
+#define     DIRENT_FILE_SIZE
+#define     DIRENT_FIRSTBLOCK
+#define     DIRENT_TYPE_INVALID
+#define     DIRENT_USERFLAGS
+#define     DIRENT_COLOUR
+#define     DIRENT_MODIFY_TIME
+#define     DIRENT_TYPE_LOCKBYTES
+#define     DIRENT_CREATE_TIME
+#define     DIRENT_PREV
+#define     DIRENT_NEXT
+#define     DIRENT_CHILD
+#define     DIRENT_TYPE
+#define     DIRENT_CLSID
+#define     DIRENT_TYPE_ROOTDIR
+#define     BAT_MAGIC_METABAT
+#define     BAT_MAGIC_BAT
+#define     BAT_INDEX_SIZE
+#define     BAT_MAGIC_END_OF_CHAIN
+#define     BAT_MAGIC_UNUSED
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInfile
+               +----GsfInfileMSOle
+
+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutfile
+               +----GsfOutfileMSOle
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInfileMSOle

+
typedef struct _GsfInfileMSOle GsfInfileMSOle;
+

+ +

+
+
+
+

+gsf_infile_msole_new ()

+
GsfInfile*  gsf_infile_msole_new            (GsfInput *source,
+                                             GError **err);
+

+Opens the root directory of an MS OLE file. +NOTE : adds a reference to source

+

+ +

+
++ + + + + + + + + + + + + + +
+source : +
+err : +
+Returns :: the new ole file handler +
+
+
+
+

+gsf_infile_msole_get_class_id ()

+
gboolean    gsf_infile_msole_get_class_id   (GsfInfileMSOle const *ole,
+                                             guint8 *res);
+

+Retrieves the 16 byte indentifier (often a GUID in MS Windows apps) +stored within the directory associated with ole and stores it in res.

+

+ +

+
++ + + + + + + + + + + + + + +
+ole : a GsfInfileMSOle +
+res : 16 byte identifier (often a GUID in MS Windows apps) +
+Returns :TRUE on success +
+
+
+
+

+GsfOutfileMSOle

+
typedef struct _GsfOutfileMSOle GsfOutfileMSOle;
+

+ +

+
+
+
+

+gsf_outfile_msole_new ()

+
GsfOutfile* gsf_outfile_msole_new           (GsfOutput *sink);
+

+Creates the root directory of an MS OLE file and manages the addition of +children. +

+

+NOTE : adds a reference to sink

+

+ +

+
++ + + + + + + + + + +
+sink : a GsfOutput to hold the OLE2 file +
+Returns :the new ole file handler +
+
+
+
+

+gsf_outfile_msole_new_full ()

+
GsfOutfile* gsf_outfile_msole_new_full      (GsfOutput *sink,
+                                             guint bb_size,
+                                             guint sb_size);
+

+Creates the root directory of an MS OLE file and manages the addition of +children. +

+

+NOTE : adds a reference to sink

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+sink : a GsfOutput to hold the OLE2 file. +
+bb_size : size of large blocks. +
+sb_size : size of small blocks. +
+Returns :the new ole file handler +
+
+
+
+

+gsf_outfile_msole_set_class_id ()

+
gboolean    gsf_outfile_msole_set_class_id  (GsfOutfileMSOle *ole,
+                                             guint8 const *clsid);
+

+Write clsid to the directory associated with ole.

+

+ +

+
++ + + + + + + + + + + + + + +
+ole : a GsfOutfileMSOle +
+clsid : 16 byte identifier (often a GUID in MS Windows apps) +
+Returns :TRUE on success. +
+
+
+
+

+gsf_msole_metadata_read ()

+
GError*     gsf_msole_metadata_read         (GsfInput *in,
+                                             GsfDocMetaData *accum);
+

+Read a stream formated as a set of MS OLE properties from in and store the +results in accum.

+

+ +

+
++ + + + + + + + + + + + + + +
+in : GsfInput +
+accum : GsfDocMetaData +
+Returns :GError which the caller must free on error. +
+
+
+
+

+gsf_msole_metadata_write ()

+
gboolean    gsf_msole_metadata_write        (GsfOutput *out,
+                                             GsfDocMetaData const *meta_data,
+                                             gboolean doc_not_component);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+out : GsfOutput +
+meta_data : GsfDocMetaData +
+doc_not_component : a kludge to differentiate DocumentSummary from Summary +
+Returns :TRUE on success; +
+
+
+
+

+gsf_msole_iconv_open_codepages_for_export ()

+
GIConv      gsf_msole_iconv_open_codepages_for_export
+                                            (int codepage_to,
+                                             char const *from);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+codepage_to : +
+from : +
+Returns :an iconv converter to go from utf8 -> to our best guess at a useful + windows codepage. +
+
+
+
+

+gsf_msole_iconv_open_codepage_for_import ()

+
GIConv      gsf_msole_iconv_open_codepage_for_import
+                                            (char const *to,
+                                             int codepage);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+to : +
+codepage : +
+Returns :an iconv converter for codepage -> utf8. +
+
+
+
+

+gsf_msole_iconv_open_for_export ()

+
GIConv      gsf_msole_iconv_open_for_export (void);
+

+

+

+ +

+
++ + + + +
+Returns :an iconv convert to go from utf8 -> to our best guess at a useful + windows codepage. +
+
+
+
+

+gsf_msole_iconv_open_codepage_for_export ()

+
GIConv      gsf_msole_iconv_open_codepage_for_export
+                                            (int codepage_to);
+

+

+

+ +

+
++ + + + + + + + + + +
+codepage_to : +
+Returns :an iconv converter to go from utf8 -> to our best guess at a useful + windows codepage. +
+
+
+
+

+gsf_msole_iconv_open_for_import ()

+
GIConv      gsf_msole_iconv_open_for_import (int codepage);
+

+

+

+ +

+
++ + + + + + + + + + +
+codepage : +
+Returns :an iconv converter for single byte encodings codepage -> utf8. + Attempt to handle the semantics of a specification for multibyte encodings + since this is only supposed to be used for single bytes. +
+
+
+
+

+gsf_msole_iconv_win_codepage ()

+
int         gsf_msole_iconv_win_codepage    (void);
+

+

+

+ +

+
++ + + + +
+Returns :our best guess at the applicable windows code page based on an + environment variable or the current locale. +
+
+
+
+

+gsf_msole_codepage_to_lid ()

+
guint       gsf_msole_codepage_to_lid       (int codepage);
+

+ +

+
++ + + + + + + + + + +
+codepage : +
+Returns : + + +
+
+
+
+

+gsf_msole_lid_to_codepage ()

+
int         gsf_msole_lid_to_codepage       (guint lid);
+

+

+

+ +

+
++ + + + + + + + + + +
+lid : +
+Returns :our best guess at the codepage for the given language id +
+
+
+
+

+gsf_msole_lid_to_codepage_str ()

+
gchar*      gsf_msole_lid_to_codepage_str   (guint lid);
+

+

+

+ +

+
++ + + + + + + + + + +
+lid : +
+Returns :the Iconv codepage string for the given LID. +Return value must be g_free()'d +
+
+
+
+

+gsf_msole_lid_for_language ()

+
guint       gsf_msole_lid_for_language      (char const *lang);
+

+

+

+ +

+
++ + + + + + + + + + +
+lang : +
+Returns :the LID (Language Identifier) for the input language. +If lang is null, return 0x0400 ("-none-"), and not 0x0000 ("no proofing") +
+
+
+
+

+gsf_msole_language_for_lid ()

+
charconst * gsf_msole_language_for_lid      (guint lid);
+

+

+

+ +

+
++ + + + + + + + + + +
+lid : +
+Returns :the xx_YY style string (can be just xx or xxx) for the given LID. +Return value must not be freed. If the LID is not found, is set to 0x0400, +or is set to 0x0000, will return "-none-" +
+
+
+
+

+gsf_msole_inflate ()

+
GByteArray* gsf_msole_inflate               (GsfInput *input,
+                                             gsf_off_t offset);
+

+Decompresses an LZ compressed stream.

+

+ +

+
++ + + + + + + + + + + + + + +
+input : stream to read from +
+offset : offset into it for start byte of compresse stream +
+Returns : A GByteArray that the caller is responsible for freeing +
+
+
+
+

+OLE_HEADER_START_BAT

+
#define OLE_HEADER_START_BAT	 0x4c
+
+

+ +

+
+
+
+

+OLE_HEADER_MAJOR_VER

+
#define OLE_HEADER_MAJOR_VER	 0x1a	/* 0x3 been seen in wild */
+
+

+ +

+
+
+
+

+OLE_HEADER_METABAT_SIZE

+
#define OLE_HEADER_METABAT_SIZE	 ((OLE_HEADER_SIZE - OLE_HEADER_START_BAT) / BAT_INDEX_SIZE)
+
+

+ +

+
+
+
+

+OLE_HEADER_DIRENT_START

+
#define OLE_HEADER_DIRENT_START  0x30
+
+

+ +

+
+
+
+

+OLE_HEADER_NUM_SBAT

+
#define OLE_HEADER_NUM_SBAT      0x40
+
+

+ +

+
+
+
+

+OLE_HEADER_BB_SHIFT

+
#define OLE_HEADER_BB_SHIFT      0x1e
+
+

+ +

+
+
+
+

+OLE_HEADER_CSECTDIR

+
#define OLE_HEADER_CSECTDIR	 0x28
+
+

+ +

+
+
+
+

+OLE_HEADER_NUM_BAT

+
#define OLE_HEADER_NUM_BAT	 0x2c
+
+

+ +

+
+
+
+

+OLE_HEADER_THRESHOLD

+
#define OLE_HEADER_THRESHOLD	 0x38
+
+

+ +

+
+
+
+

+OLE_HEADER_METABAT_BLOCK

+
#define OLE_HEADER_METABAT_BLOCK 0x44
+
+

+ +

+
+
+
+

+OLE_HEADER_SBAT_START

+
#define OLE_HEADER_SBAT_START    0x3c
+
+

+ +

+
+
+
+

+OLE_HEADER_SIGNATURE

+
#define OLE_HEADER_SIGNATURE	 0x00
+
+

+ +

+
+
+
+

+OLE_HEADER_BYTE_ORDER

+
#define OLE_HEADER_BYTE_ORDER	 0x1c	/* 0xfe 0xff == Intel Little Endian */
+
+

+ +

+
+
+
+

+OLE_HEADER_SB_SHIFT

+
#define OLE_HEADER_SB_SHIFT      0x20
+
+

+ +

+
+
+
+

+OLE_HEADER_NUM_METABAT

+
#define OLE_HEADER_NUM_METABAT   0x48
+
+

+ +

+
+
+
+

+OLE_HEADER_SIZE

+
#define OLE_HEADER_SIZE		 0x200	/* independent of big block size size */
+
+

+ +

+
+
+
+

+OLE_HEADER_CLSID

+
#define OLE_HEADER_CLSID	 0x08	/* See ReadClassStg */
+
+

+ +

+
+
+
+

+OLE_HEADER_MINOR_VER

+
#define OLE_HEADER_MINOR_VER	 0x18	/* 0x33 and 0x3e have been seen */
+
+

+ +

+
+
+
+

+OLE_DEFAULT_BB_SHIFT

+
#define OLE_DEFAULT_BB_SHIFT	 9
+
+

+ +

+
+
+
+

+OLE_DEFAULT_SB_SHIFT

+
#define OLE_DEFAULT_SB_SHIFT	 6
+
+

+ +

+
+
+
+

+DIRENT_DETAILS_SIZE

+
#define DIRENT_DETAILS_SIZE	0x40
+
+

+ +

+
+
+
+

+DIRENT_SIZE

+
#define DIRENT_SIZE		(DIRENT_MAX_NAME_SIZE + DIRENT_DETAILS_SIZE)
+
+

+ +

+
+
+
+

+DIRENT_NAME_LEN

+
#define DIRENT_NAME_LEN		0x40	/* length in bytes incl 0 terminator */
+
+

+ +

+
+
+
+

+DIRENT_TYPE_PROPERTY

+
#define DIRENT_TYPE_PROPERTY	4	/* ? */
+
+

+ +

+
+
+
+

+DIRENT_TYPE_FILE

+
#define DIRENT_TYPE_FILE	2
+
+

+ +

+
+
+
+

+DIRENT_MAGIC_END

+
#define DIRENT_MAGIC_END	0xffffffff
+
+

+ +

+
+
+
+

+DIRENT_TYPE_DIR

+
#define DIRENT_TYPE_DIR		1
+
+

+ +

+
+
+
+

+DIRENT_MAX_NAME_SIZE

+
#define DIRENT_MAX_NAME_SIZE	0x40
+
+

+ +

+
+
+
+

+DIRENT_FILE_SIZE

+
#define DIRENT_FILE_SIZE	0x78
+
+

+ +

+
+
+
+

+DIRENT_FIRSTBLOCK

+
#define DIRENT_FIRSTBLOCK	0x74
+
+

+ +

+
+
+
+

+DIRENT_TYPE_INVALID

+
#define DIRENT_TYPE_INVALID	0
+
+

+ +

+
+
+
+

+DIRENT_USERFLAGS

+
#define DIRENT_USERFLAGS	0x60	/* only for dirs */
+
+

+ +

+
+
+
+

+DIRENT_COLOUR

+
#define DIRENT_COLOUR		0x43
+
+

+ +

+
+
+
+

+DIRENT_MODIFY_TIME

+
#define DIRENT_MODIFY_TIME	0x6c	/* for files */
+
+

+ +

+
+
+
+

+DIRENT_TYPE_LOCKBYTES

+
#define DIRENT_TYPE_LOCKBYTES	3	/* ? */
+
+

+ +

+
+
+
+

+DIRENT_CREATE_TIME

+
#define DIRENT_CREATE_TIME	0x64	/* for files */
+
+

+ +

+
+
+
+

+DIRENT_PREV

+
#define DIRENT_PREV		0x44
+
+

+ +

+
+
+
+

+DIRENT_NEXT

+
#define DIRENT_NEXT		0x48
+
+

+ +

+
+
+
+

+DIRENT_CHILD

+
#define DIRENT_CHILD		0x4c
+
+

+ +

+
+
+
+

+DIRENT_TYPE

+
#define DIRENT_TYPE		0x42
+
+

+ +

+
+
+
+

+DIRENT_CLSID

+
#define DIRENT_CLSID		0x50	/* only for dirs */
+
+

+ +

+
+
+
+

+DIRENT_TYPE_ROOTDIR

+
#define DIRENT_TYPE_ROOTDIR	5
+
+

+ +

+
+
+
+

+BAT_MAGIC_METABAT

+
#define BAT_MAGIC_METABAT	0xfffffffc	/* a metabat block -4 */
+
+

+ +

+
+
+
+

+BAT_MAGIC_BAT

+
#define BAT_MAGIC_BAT		0xfffffffd	/* a bat block,    -3 */
+
+

+ +

+
+
+
+

+BAT_INDEX_SIZE

+
#define BAT_INDEX_SIZE		 4
+
+

+ +

+
+
+
+

+BAT_MAGIC_END_OF_CHAIN

+
#define BAT_MAGIC_END_OF_CHAIN	0xfffffffe	/*		   -2 */
+
+

+ +

+
+
+
+

+BAT_MAGIC_UNUSED

+
#define BAT_MAGIC_UNUSED	0xffffffff	/*		   -1 */
+
+

+ +

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Outfile-writing-structed-files.html b/lib/libgsf-1.12.3/doc/html/gsf-Outfile-writing-structed-files.html new file mode 100644 index 0000000000..1c7c2b7af5 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Outfile-writing-structed-files.html @@ -0,0 +1,249 @@ + + + +Outfile writing structed files + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Outfile writing structed files

+

Outfile writing structed files —

+
+
+

Synopsis

+
+
+
+
+            GsfOutfile;
+GsfOutput*  gsf_outfile_new_child           (GsfOutfile *outfile,
+                                             char const *name,
+                                             gboolean is_dir);
+GsfOutput*  gsf_outfile_new_child_full      (GsfOutfile *outfile,
+                                             char const *name,
+                                             gboolean is_dir,
+                                             char const *first_property_name,
+                                             ...);
+GsfOutput*  gsf_outfile_new_child_varg      (GsfOutfile *outfile,
+                                             char const *name,
+                                             gboolean is_dir,
+                                             char const *first_property_name,
+                                             va_list args);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutfile
+               +----GsfOutfileMSOle
+               +----GsfOutfileStdio
+               +----GsfOutfileZip
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfOutfile

+
typedef struct _GsfOutfile GsfOutfile;
+

+ +

+
+
+
+

+gsf_outfile_new_child ()

+
GsfOutput*  gsf_outfile_new_child           (GsfOutfile *outfile,
+                                             char const *name,
+                                             gboolean is_dir);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+outfile : A GsfOutfile +
+name : The name of the new child to create +
+is_dir : TRUE to create a directory, FALSE to create a plain file +
+Returns :a newly created child +
+
+
+
+

+gsf_outfile_new_child_full ()

+
GsfOutput*  gsf_outfile_new_child_full      (GsfOutfile *outfile,
+                                             char const *name,
+                                             gboolean is_dir,
+                                             char const *first_property_name,
+                                             ...);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + +
+outfile : A GsfOutfile +
+name : The name of the new child to create +
+is_dir : TRUE to create a directory, FALSE to create a plain file +
+first_property_name : +
+... : +
+Returns :a newly created child +
+
+
+
+

+gsf_outfile_new_child_varg ()

+
GsfOutput*  gsf_outfile_new_child_varg      (GsfOutfile *outfile,
+                                             char const *name,
+                                             gboolean is_dir,
+                                             char const *first_property_name,
+                                             va_list args);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + +
+outfile : +
+name : +
+is_dir : +
+first_property_name : +
+args : +
+Returns : + + +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Output-to-unstructured-files.html b/lib/libgsf-1.12.3/doc/html/gsf-Output-to-unstructured-files.html new file mode 100644 index 0000000000..c2db87da10 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Output-to-unstructured-files.html @@ -0,0 +1,825 @@ + + + +Output to unstructured files + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Output to unstructured files

+

Output to unstructured files —

+
+
+

Synopsis

+
+
+
+
+            GsfOutput;
+GsfOutfile* gsf_output_container            (GsfOutput const *output);
+gsf_off_t   gsf_output_size                 (GsfOutput *output);
+gboolean    gsf_output_close                (GsfOutput *output);
+gsf_off_t   gsf_output_tell                 (GsfOutput *output);
+gboolean    gsf_output_seek                 (GsfOutput *output,
+                                             gsf_off_t offset,
+                                             GSeekType whence);
+gboolean    gsf_output_write                (GsfOutput *output,
+                                             size_t num_bytes,
+                                             guint8 const *data);
+gboolean    gsf_output_puts                 (GsfOutput *output,
+                                             char const *line);
+gboolean    gsf_output_printf               (GsfOutput *output,
+                                             char const *format,
+                                             ...);
+gsf_off_t   gsf_output_vprintf              (GsfOutput *output,
+                                             char const *format,
+                                             va_list args);
+charconst   * gsf_output_name               (GsfOutput const *output);
+gboolean    gsf_output_set_name_from_filename
+                                            (GsfOutput *output,
+                                             char const *filename);
+GQuark      gsf_output_error_id             (void);
+gboolean    gsf_output_set_error            (GsfOutput *output,
+                                             gint code,
+                                             char const *format,
+                                             ...);
+GErrorconst * gsf_output_error              (GsfOutput const *output);
+gboolean    gsf_output_is_closed            (GsfOutput const *output);
+gboolean    gsf_output_wrap                 (GObject *wrapper,
+                                             GsfOutput *wrapee);
+gboolean    gsf_output_unwrap               (GObject *wrapper,
+                                             GsfOutput *wrapee);
+
+gboolean    gsf_output_set_name             (GsfOutput *output,
+                                             char const *name);
+gboolean    gsf_output_set_container        (GsfOutput *output,
+                                             GsfOutfile *container);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutfile
+         +----GsfOutputBzip
+         +----GsfOutputIOChannel
+         +----GsfOutputMemory
+         +----GsfOutputStdio
+
+
+
+

Properties

+
+
+  "is-closed"            gboolean              : Read
+  "name"                 gchararray            : Read
+  "position"             gint64                : Read
+  "size"                 gint64                : Read
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfOutput

+
typedef struct _GsfOutput GsfOutput;
+

+ +

+
+
+
+

+gsf_output_container ()

+
GsfOutfile* gsf_output_container            (GsfOutput const *output);
+

+

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns :, but does not add a reference to output's container. +Potentially NULL +
+
+
+
+

+gsf_output_size ()

+
gsf_off_t   gsf_output_size                 (GsfOutput *output);
+

+

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns :the size of the output, or -1 if it does not have a size. +
+
+
+
+

+gsf_output_close ()

+
gboolean    gsf_output_close                (GsfOutput *output);
+

+Close a stream.

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns :FALSE on error +
+
+
+
+

+gsf_output_tell ()

+
gsf_off_t   gsf_output_tell                 (GsfOutput *output);
+

+

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns :the current position in the file +
+
+
+
+

+gsf_output_seek ()

+
gboolean    gsf_output_seek                 (GsfOutput *output,
+                                             gsf_off_t offset,
+                                             GSeekType whence);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+output : +
+offset : +
+whence : +
+Returns :FALSE on error. +
+
+
+
+

+gsf_output_write ()

+
gboolean    gsf_output_write                (GsfOutput *output,
+                                             size_t num_bytes,
+                                             guint8 const *data);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+output : +
+num_bytes : +
+data : +
+Returns :FALSE on error. +
+
+
+
+

+gsf_output_puts ()

+
gboolean    gsf_output_puts                 (GsfOutput *output,
+                                             char const *line);
+

+Like fputs, this assumes that the line already ends with a newline

+

+ +

+
++ + + + + + + + + + + + + + +
+output : A GsfOutput +
+line : null terminated string to write +
+Returns : TRUE if successful, FALSE if not +
+
+
+
+

+gsf_output_printf ()

+
gboolean    gsf_output_printf               (GsfOutput *output,
+                                             char const *format,
+                                             ...);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+output : A GsfOutput +
+format : The printf-style format string +
+... : the arguments for format +
+Returns : TRUE if successful, FALSE if not +
+
+
+
+

+gsf_output_vprintf ()

+
gsf_off_t   gsf_output_vprintf              (GsfOutput *output,
+                                             char const *format,
+                                             va_list args);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+output : A GsfOutput +
+format : The printf-style format string +
+args : the arguments for format +
+Returns : number of bytes printed, a negative value if not successful +
+
+
+
+

+gsf_output_name ()

+
charconst   * gsf_output_name               (GsfOutput const *output);
+

+

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns : +output's name in utf8 form, DO NOT FREE THIS STRING +
+
+
+
+

+gsf_output_set_name_from_filename ()

+
gboolean    gsf_output_set_name_from_filename
+                                            (GsfOutput *output,
+                                             char const *filename);
+

+

+
+

Note

This is a utility routine that should only be used by derived +outputs.
+

+ +

+
++ + + + + + + + + + + + + + +
+output : the output stream +
+filename : the (fs-sys encoded) filename +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

+gsf_output_error_id ()

+
GQuark      gsf_output_error_id             (void);
+

+ +

+
++ + + + +
+Returns : + + +
+
+
+
+

+gsf_output_set_error ()

+
gboolean    gsf_output_set_error            (GsfOutput *output,
+                                             gint code,
+                                             char const *format,
+                                             ...);
+

+

+
+

Note

This is a utility routine that should only be used by derived +outputs.
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+output : +
+code : +
+format : +
+... : +
+Returns :Always returns FALSE to facilitate its use. +
+
+
+
+

+gsf_output_error ()

+
GErrorconst * gsf_output_error              (GsfOutput const *output);
+

+

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns :the last error logged on the output, or NULL. +
+
+
+
+

+gsf_output_is_closed ()

+
gboolean    gsf_output_is_closed            (GsfOutput const *output);
+

+

+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns :TRUE if output has already been closed. +
+
+
+
+

+gsf_output_wrap ()

+
gboolean    gsf_output_wrap                 (GObject *wrapper,
+                                             GsfOutput *wrapee);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+wrapper : +
+wrapee : +
+Returns :TRUE if the wrapping succeeded. +
+
+
+
+

+gsf_output_unwrap ()

+
gboolean    gsf_output_unwrap               (GObject *wrapper,
+                                             GsfOutput *wrapee);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+wrapper : +
+wrapee : +
+Returns :TRUE if the unwrapping succeeded. +
+
+
+
+

+gsf_output_set_name ()

+
gboolean    gsf_output_set_name             (GsfOutput *output,
+                                             char const *name);
+

+

+
+

Note

This is a utility routine that should only be used by derived +outputs.
+

+ +

+
++ + + + + + + + + + + + + + +
+output : +
+name : +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

+gsf_output_set_container ()

+
gboolean    gsf_output_set_container        (GsfOutput *output,
+                                             GsfOutfile *container);
+

+

+
+

Note

This is a utility routine that should only be used by derived +outputs.
+

+ +

+
++ + + + + + + + + + + + + + +
+output : +
+container : +
+Returns :: TRUE if the assignment was ok. +
+
+
+
+

Properties

+
+

+The "is-closed" property

+
  "is-closed"            gboolean              : Read
+

Whether the Output is Closed.

+

Default value: FALSE

+
+
+
+

+The "name" property

+
  "name"                 gchararray            : Read
+

The Output's Name.

+

Default value: NULL

+
+
+
+

+The "position" property

+
  "position"             gint64                : Read
+

The Output's Current Position.

+

Allowed values: >= 0

+

Default value: 0

+
+
+
+

+The "size" property

+
  "size"                 gint64                : Read
+

The Output's Size.

+

Allowed values: >= 0

+

Default value: 0

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Reading-and-Writing-from-local-files-and-directories.html b/lib/libgsf-1.12.3/doc/html/gsf-Reading-and-Writing-from-local-files-and-directories.html new file mode 100644 index 0000000000..1642aeb368 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Reading-and-Writing-from-local-files-and-directories.html @@ -0,0 +1,539 @@ + + + +Reading and Writing from local files and directories + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Reading and Writing from local files and directories

+

Reading and Writing from local files and directories —

+
+
+

Synopsis

+
+
+
+
+            GsfInputStdio;
+GsfInput*   gsf_input_stdio_new             (char const *filename,
+                                             GError **err);
+            GsfOutputStdio;
+GsfOutput*  gsf_output_stdio_new            (char const *filename,
+                                             GError **err);
+GsfOutput*  gsf_output_stdio_new_full       (char const *filename,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             ...);
+GsfOutput*  gsf_output_stdio_new_valist     (char const *filename,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             va_list var_args);
+GsfOutput*  gsf_output_stdio_new_FILE       (char const *filename,
+                                             FILE *file,
+                                             gboolean keep_open);
+            GsfOutfileStdio;
+GsfOutfile* gsf_outfile_stdio_new           (char const *root,
+                                             GError **err);
+GsfOutfile* gsf_outfile_stdio_new_full      (char const *root,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             ...);
+GsfOutfile* gsf_outfile_stdio_new_valist    (char const *root,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             va_list var_args);
+            GsfInfileStdio;
+GsfInfile*  gsf_infile_stdio_new            (char const *root,
+                                             GError **err);
+
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInputStdio
+
+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutputStdio
+
+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutfile
+               +----GsfOutfileStdio
+
+
+
+  GObject
+   +----GsfInput
+         +----GsfInfile
+               +----GsfInfileStdio
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInputStdio

+
typedef struct _GsfInputStdio GsfInputStdio;
+

+ +

+
+
+
+

+gsf_input_stdio_new ()

+
GsfInput*   gsf_input_stdio_new             (char const *filename,
+                                             GError **err);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+filename : in utf8. +
+err : optionally NULL. +
+Returns :a new file or NULL. +
+
+
+
+

+GsfOutputStdio

+
typedef struct _GsfOutputStdio GsfOutputStdio;
+

+ +

+
+
+
+

+gsf_output_stdio_new ()

+
GsfOutput*  gsf_output_stdio_new            (char const *filename,
+                                             GError **err);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+filename : name of file to create or replace. +
+err : optionally NULL. +
+Returns :a new file or NULL. +
+
+
+
+

+gsf_output_stdio_new_full ()

+
GsfOutput*  gsf_output_stdio_new_full       (char const *filename,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             ...);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+filename : name of file to create or replace. +
+err : optionally NULL. +
+first_property_name : NULL terminated list of properties +
+... : +
+Returns :a new file or NULL. +
+
+
+
+

+gsf_output_stdio_new_valist ()

+
GsfOutput*  gsf_output_stdio_new_valist     (char const *filename,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             va_list var_args);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+filename : +
+err : +
+first_property_name : +
+var_args : +
+Returns : + + +
+
+
+
+

+gsf_output_stdio_new_FILE ()

+
GsfOutput*  gsf_output_stdio_new_FILE       (char const *filename,
+                                             FILE *file,
+                                             gboolean keep_open);
+

+Assumes ownership of file. If keep_open is true, ownership reverts +to caller when the GsfObject is closed.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+filename : The filename corresponding to file. +
+file : an existing stdio FILE * +
+keep_open : Should file be closed when the wrapper is closed +
+Returns :a new GsfOutput wrapper for file. Warning: the result will be +seekable only if file is seekable. If it is seekable, the resulting +GsfOutput object will seek relative to file's beginning, not its +current location at the time the GsfOutput object is created. +
+
+
+
+

+GsfOutfileStdio

+
typedef struct _GsfOutfileStdio GsfOutfileStdio;
+

+ +

+
+
+
+

+gsf_outfile_stdio_new ()

+
GsfOutfile* gsf_outfile_stdio_new           (char const *root,
+                                             GError **err);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+root : root directory in utf8. +
+err : optionally NULL. +
+Returns :a new outfile or NULL. +
+
+
+
+

+gsf_outfile_stdio_new_full ()

+
GsfOutfile* gsf_outfile_stdio_new_full      (char const *root,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             ...);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+root : +
+err : +
+first_property_name : +
+... : +
+Returns : + + +
+
+
+
+

+gsf_outfile_stdio_new_valist ()

+
GsfOutfile* gsf_outfile_stdio_new_valist    (char const *root,
+                                             GError **err,
+                                             char const *first_property_name,
+                                             va_list var_args);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+root : +
+err : +
+first_property_name : +
+var_args : +
+Returns : + + +
+
+
+
+

+GsfInfileStdio

+
typedef struct _GsfInfileStdio GsfInfileStdio;
+

+ +

+
+
+
+

+gsf_infile_stdio_new ()

+
GsfInfile*  gsf_infile_stdio_new            (char const *root,
+                                             GError **err);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+root : in locale dependent encoding +
+err : optionally NULL. +
+Returns :a new file or NULL. +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Structured-Blobs.html b/lib/libgsf-1.12.3/doc/html/gsf-Structured-Blobs.html new file mode 100644 index 0000000000..983020ae7e --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Structured-Blobs.html @@ -0,0 +1,147 @@ + + + +Structured Blobs + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Structured Blobs

+

Structured Blobs —

+
+ +
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInfile
+               +----GsfStructuredBlob
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfStructuredBlob

+
typedef struct _GsfStructuredBlob GsfStructuredBlob;
+

+ +

+
+
+
+

+gsf_structured_blob_write ()

+
gboolean    gsf_structured_blob_write       (GsfStructuredBlob *blob,
+                                             GsfOutfile *container);
+

+Dumps structured blob blob onto the container. Will fail if the output is +not an Outfile and blob has multiple streams.

+

+ +

+
++ + + + + + + + + + + + + + +
+blob : +
+container : +
+Returns :: TRUE on success. +
+
+
+
+

+gsf_structured_blob_read ()

+
GsfStructuredBlob* gsf_structured_blob_read (GsfInput *input);
+

+

+

+ +

+
++ + + + + + + + + + +
+input : An input (potentially a GsfInfile) holding the blob +
+Returns :a freshly created tree of blobs +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Text.html b/lib/libgsf-1.12.3/doc/html/gsf-Text.html new file mode 100644 index 0000000000..78164c4e32 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Text.html @@ -0,0 +1,344 @@ + + + +Text + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Text

+

Text —

+
+
+

Synopsis

+
+
+
+
+            GsfInputTextline;
+GsfInput*   gsf_input_textline_new          (GsfInput *source);
+unsigned char* gsf_input_textline_ascii_gets
+                                            (GsfInputTextline *input);
+guint8*     gsf_input_textline_utf8_gets    (GsfInputTextline *input);
+            GsfOutputIconv;
+GsfOutput*  gsf_output_iconv_new            (GsfOutput *sink,
+                                             char const *dst,
+                                             char const *src);
+            GsfOutputCsv;
+gboolean    gsf_output_csv_write_eol        (GsfOutputCsv *csv);
+gboolean    gsf_output_csv_write_field      (GsfOutputCsv *csv,
+                                             char const *field,
+                                             size_t len);
+enum        GsfOutputCsvQuotingMode;
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInputTextline
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInputTextline

+
typedef struct _GsfInputTextline GsfInputTextline;
+

+ +

+
+
+
+

+gsf_input_textline_new ()

+
GsfInput*   gsf_input_textline_new          (GsfInput *source);
+

+NOTE : adds a reference to source

+

+ +

+
++ + + + + + + + + + +
+source : in some combination of ascii and utf8 +
+Returns :a new file or NULL. +
+
+
+
+

+gsf_input_textline_ascii_gets ()

+
unsigned char* gsf_input_textline_ascii_gets
+                                            (GsfInputTextline *input);
+

+A utility routine to read things line by line from the underlying source. +Trailing newlines and carriage returns are stripped, and the resultant buffer +can be edited.

+

+ +

+
++ + + + + + + + + + +
+input : +
+Returns :the string read, or NULL on eof. +
+
+
+
+

+gsf_input_textline_utf8_gets ()

+
guint8*     gsf_input_textline_utf8_gets    (GsfInputTextline *input);
+

+A utility routine to read things line by line from the underlying source. +Trailing newlines and carriage returns are stripped, and the resultant buffer +can be edited.

+

+ +

+
++ + + + + + + + + + +
+input : +
+Returns :the string read, or NULL on eof. +
+
+
+
+

+GsfOutputIconv

+
typedef struct _GsfOutputIconv GsfOutputIconv;
+

+ +

+
+
+
+

+gsf_output_iconv_new ()

+
GsfOutput*  gsf_output_iconv_new            (GsfOutput *sink,
+                                             char const *dst,
+                                             char const *src);
+

+Adds a reference to sink.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+sink : The underlying data source. +
+dst : The target character set. +
+src : The source character set. +
+Returns :a new GsfOutput object or NULL. +
+
+
+
+

+GsfOutputCsv

+
typedef struct {
+	GsfOutput output;
+
+	GsfOutput *sink;
+
+	char *quote;
+	size_t quote_len;
+	GsfOutputCsvQuotingMode quoting_mode;
+	char *quoting_triggers;
+
+	char *eol;
+	size_t eol_len;
+	char *separator;
+	size_t separator_len;
+	gboolean fields_on_line;
+
+	GString *buf;
+} GsfOutputCsv;
+
+

+ +

+
+
+
+

+gsf_output_csv_write_eol ()

+
gboolean    gsf_output_csv_write_eol        (GsfOutputCsv *csv);
+

+ +

+
++ + + + + + + + + + +
+csv : +
+Returns : + + +
+
+
+
+

+gsf_output_csv_write_field ()

+
gboolean    gsf_output_csv_write_field      (GsfOutputCsv *csv,
+                                             char const *field,
+                                             size_t len);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+csv : +
+field : +
+len : +
+Returns : + + +
+
+
+
+

+enum GsfOutputCsvQuotingMode

+
typedef enum {
+	GSF_OUTPUT_CSV_QUOTING_MODE_NEVER,
+	GSF_OUTPUT_CSV_QUOTING_MODE_AUTO,
+	GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS
+} GsfOutputCsvQuotingMode;
+
+

+ +

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-XML-and-libxml.html b/lib/libgsf-1.12.3/doc/html/gsf-XML-and-libxml.html new file mode 100644 index 0000000000..60ba8a3520 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-XML-and-libxml.html @@ -0,0 +1,1657 @@ + + + +XML and libxml + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

XML and libxml

+

XML and libxml —

+
+
+

Synopsis

+
+
+
+
+#define     GSF_XML_IN_NS                   (id, uri)
+enum        GsfXMLContent;
+            GsfXMLIn;
+int         gsf_xmlDocFormatDump            (GsfOutput *output,
+                                             xmlDoc *cur,
+                                             char const *encoding,
+                                             gboolean format);
+void        gsf_xml_in_doc_free             (GsfXMLInDoc *doc);
+            GsfXMLBlob;
+            GsfXMLOut;
+            GsfXMLInDoc;
+            GsfXMLInNS;
+#define     GSF_XML_IN_NODE_FULL            (parent_id, id, ns, name, has_content, 	\
+			     deprecated_unused_allow_unknown, check_ns, start, end, user)
+#define     GSF_XML_IN_NODE                 (parent_id, id, ns, name, has_content, start, end)
+            GsfXMLInNode;
+gboolean    (*GsfXMLInUnknownFunc)          (GsfXMLIn *state,
+                                             xmlChar const *elem,
+                                             xmlChar const **attrs);
+xmlParserCtxt* gsf_xml_parser_context       (GsfInput *input);
+GsfXMLInDoc* gsf_xml_in_doc_new             (GsfXMLInNode *root,
+                                             GsfXMLInNS *ns);
+gboolean    gsf_xml_in_namecmp              (GsfXMLIn const *state,
+                                             char const *str,
+                                             unsigned int ns_id,
+                                             char const *name);
+gboolean    gsf_xml_in_parse                (GsfXMLIn *state,
+                                             GsfInput *input);
+charconst * gsf_xml_in_check_ns             (GsfXMLIn const *state,
+                                             char const *str,
+                                             unsigned int ns_id);
+void        gsf_xml_in_doc_extend           (GsfXMLInDoc *doc,
+                                             GsfXMLInNode *nodes);
+void        gsf_xml_in_doc_set_unknown_handler
+                                            (GsfXMLInDoc *doc,
+                                             GsfXMLInUnknownFunc handler);
+GsfXMLOut*  gsf_xml_out_new                 (GsfOutput *output);
+void        gsf_xml_out_set_doc_type        (GsfXMLOut *xml,
+                                             char const *type);
+void        gsf_xml_out_start_element       (GsfXMLOut *xml,
+                                             char const *id);
+charconst * gsf_xml_out_end_element         (GsfXMLOut *xml);
+void        gsf_xml_out_add_cstr            (GsfXMLOut *xml,
+                                             char const *id,
+                                             char const *val_utf8);
+void        gsf_xml_out_add_cstr_unchecked  (GsfXMLOut *xml,
+                                             char const *id,
+                                             char const *val_utf8);
+void        gsf_xml_out_add_bool            (GsfXMLOut *xml,
+                                             char const *id,
+                                             gboolean val);
+void        gsf_xml_out_add_int             (GsfXMLOut *xml,
+                                             char const *id,
+                                             int val);
+void        gsf_xml_out_add_uint            (GsfXMLOut *xml,
+                                             char const *id,
+                                             unsigned int val);
+void        gsf_xml_out_add_float           (GsfXMLOut *xml,
+                                             char const *id,
+                                             double val,
+                                             int precision);
+void        gsf_xml_out_add_enum            (GsfXMLOut *xml,
+                                             char const *id,
+                                             GType etype,
+                                             gint val);
+void        gsf_xml_out_add_color           (GsfXMLOut *xml,
+                                             char const *id,
+                                             unsigned int r,
+                                             unsigned int g,
+                                             unsigned int b);
+void        gsf_xml_out_add_base64          (GsfXMLOut *xml,
+                                             char const *id,
+                                             guint8 const *data,
+                                             unsigned int len);
+void        gsf_xml_out_simple_element      (GsfXMLOut *xml,
+                                             char const *id,
+                                             char const *content);
+void        gsf_xml_out_simple_float_element
+                                            (GsfXMLOut *xml,
+                                             char const *id,
+                                             double val,
+                                             int precision);
+void        gsf_xml_out_simple_int_element  (GsfXMLOut *xml,
+                                             char const *id,
+                                             int val);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfXMLOut
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GSF_XML_IN_NS()

+
#define     GSF_XML_IN_NS(id, uri)
+

+ +

+
++ + + + + + + + + + +
+id : +
+uri : + + +
+
+
+
+

+enum GsfXMLContent

+
typedef enum {
+	GSF_XML_NO_CONTENT,
+	GSF_XML_CONTENT,
+	GSF_XML_SHARED_CONTENT
+} GsfXMLContent;
+
+

+ +

+
+
+
+

+GsfXMLIn

+
typedef struct {
+	GsfXMLInDoc  const *doc;	/* init before parsing */
+
+    /* look but do not change */
+	GsfXMLInNode const *node;	/* current node */
+	GSList	 	   *state_stack;
+
+	GsfXMLInNS   const *default_ns;	/* optionally NULL */
+	GSList	 	   *ns_stack;
+
+	GString		*content;
+	gint		 unknown_depth;	/* handle recursive unknown tags */
+	GHashTable	*ns_prefixes;	/* current ns prefixes */
+	GPtrArray	*ns_by_id;		/* indexed by id */
+} GsfXMLIn;
+
+

+ +

+
+
+
+

+gsf_xmlDocFormatDump ()

+
int         gsf_xmlDocFormatDump            (GsfOutput *output,
+                                             xmlDoc *cur,
+                                             char const *encoding,
+                                             gboolean format);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+output : +
+cur : +
+encoding : +
+format : +
+Returns : + + +
+
+
+
+

+gsf_xml_in_doc_free ()

+
void        gsf_xml_in_doc_free             (GsfXMLInDoc *doc);
+

+Free up resources

+

+ +

+
++ + + + +
+doc : +
+
+
+
+

+GsfXMLBlob

+
typedef struct _GsfXMLBlob GsfXMLBlob;
+

+ +

+
+
+
+

+GsfXMLOut

+
typedef struct _GsfXMLOut GsfXMLOut;
+

+ +

+
+
+
+

+GsfXMLInDoc

+
typedef struct _GsfXMLInDoc GsfXMLInDoc;
+

+ +

+
+
+
+

+GsfXMLInNS

+
typedef struct {
+	char const *uri;
+	unsigned    ns_id;
+} GsfXMLInNS;
+
+

+ +

+
+
+
+

+GSF_XML_IN_NODE_FULL()

+
#define     GSF_XML_IN_NODE_FULL(parent_id, id, ns, name, has_content, 	\
+			     deprecated_unused_allow_unknown, check_ns, start, end, user)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+parent_id : +
+id : +
+ns : +
+name : +
+has_content : +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +
+check_ns : +
+start : +
+end : +
+user : + + +
+
+
+
+

+GSF_XML_IN_NODE()

+
#define     GSF_XML_IN_NODE(parent_id, id, ns, name, has_content, start, end)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+parent_id : +
+id : +
+ns : +
+name : +
+has_content : +
+start : +
+end : + + +
+
+
+
+

+GsfXMLInNode

+
typedef struct {
+	char const *id;
+	int	    ns_id;
+	char const *name;
+	char const *parent_id;
+	gboolean parent_initialized;
+	GSList *groups;
+
+	unsigned	has_content;
+	gboolean	deprecated_unused_allow_unknown; /* remains here for binary compat */
+	gboolean	check_children_for_ns;
+
+	void (*start) (GsfXMLIn *state, xmlChar const **attrs);
+	void (*end)   (GsfXMLIn *state, GsfXMLBlob *unknown);
+
+	union {
+		int	    v_int;
+		gboolean    v_bool;
+		gpointer    v_blob;
+		char const *v_str;
+	} user_data;
+} GsfXMLInNode;
+
+

+ +

+
+
+
+

+GsfXMLInUnknownFunc ()

+
gboolean    (*GsfXMLInUnknownFunc)          (GsfXMLIn *state,
+                                             xmlChar const *elem,
+                                             xmlChar const **attrs);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+state : +
+elem : +
+attrs : +
+Returns : + + +
+
+
+
+

+gsf_xml_parser_context ()

+
xmlParserCtxt* gsf_xml_parser_context       (GsfInput *input);
+

+Create a libxml2 pull style parser context wrapper around a gsf input. +This signature will probably change to supply a SAX structure. +

+

+NOTE : adds a reference to input +NOTE : a simple wrapper around a cleaner implementation that will fold in + when we add other api changes. Its not worth bumping just for this

+

+ +

+
++ + + + + + + + + + +
+input : +
+Returns :: A parser context or NULL +
+
+
+
+

+gsf_xml_in_doc_new ()

+
GsfXMLInDoc* gsf_xml_in_doc_new             (GsfXMLInNode *root,
+                                             GsfXMLInNS *ns);
+

+Put the nodes in the NULL terminated array starting at root and the name +spaces in the NULL terminated array starting at ns together. Link them up +and prepare the static data structures necessary to validate a doument based +on that description.

+

+ +

+
++ + + + + + + + + + + + + + +
+root : an array of node descriptors +
+ns : an array of namespace identifiers +
+Returns :NULL on error +
+
+
+
+

+gsf_xml_in_namecmp ()

+
gboolean    gsf_xml_in_namecmp              (GsfXMLIn const *state,
+                                             char const *str,
+                                             unsigned int ns_id,
+                                             char const *name);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+state : The GsfXMLIn we are reading from. +
+str : The potentially namespace qualified node name. +
+ns_id : The name space id to check +
+name : The target node name +
+Returns :TRUE if str == ns_id:name according to state. +
+
+
+
+

+gsf_xml_in_parse ()

+
gboolean    gsf_xml_in_parse                (GsfXMLIn *state,
+                                             GsfInput *input);
+

+Read an xml document from input and parse based on the the descriptor in +state::doc

+

+ +

+
++ + + + + + + + + + + + + + +
+state : +
+input : +
+Returns :FALSE on error +
+
+
+
+

+gsf_xml_in_check_ns ()

+
charconst * gsf_xml_in_check_ns             (GsfXMLIn const *state,
+                                             char const *str,
+                                             unsigned int ns_id);
+

+According to state is str in the namespace ns_id ?

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+state : +
+str : +
+ns_id : +
+Returns :a pointer to str after the namespace if successful, +otherwise NULL. +
+
+
+
+

+gsf_xml_in_doc_extend ()

+
void        gsf_xml_in_doc_extend           (GsfXMLInDoc *doc,
+                                             GsfXMLInNode *nodes);
+

+ +

+
++ + + + + + + + + + +
+doc : +
+nodes : + + +
+
+
+
+

+gsf_xml_in_doc_set_unknown_handler ()

+
void        gsf_xml_in_doc_set_unknown_handler
+                                            (GsfXMLInDoc *doc,
+                                             GsfXMLInUnknownFunc handler);
+

+Call the function handler when an unexpected child node is found

+

+ +

+
++ + + + + + + + + + +
+doc : GsfXMLInDoc +
+handler : The function to call +
+
+
+
+

+gsf_xml_out_new ()

+
GsfXMLOut*  gsf_xml_out_new                 (GsfOutput *output);
+

+ +

+
++ + + + + + + + + + +
+output : +
+Returns : + + +
+
+
+
+

+gsf_xml_out_set_doc_type ()

+
void        gsf_xml_out_set_doc_type        (GsfXMLOut *xml,
+                                             char const *type);
+

+Store some optional some <!DOCTYPE .. > content

+

+ +

+
++ + + + + + + + + + +
+xml : GsfXMLOut +
+type : +
+
+
+
+

+gsf_xml_out_start_element ()

+
void        gsf_xml_out_start_element       (GsfXMLOut *xml,
+                                             char const *id);
+

+ +

+
++ + + + + + + + + + +
+xml : +
+id : + + +
+
+
+
+

+gsf_xml_out_end_element ()

+
charconst * gsf_xml_out_end_element         (GsfXMLOut *xml);
+

+ +

+
++ + + + + + + + + + +
+xml : +
+Returns : + + +
+
+
+
+

+gsf_xml_out_add_cstr ()

+
void        gsf_xml_out_add_cstr            (GsfXMLOut *xml,
+                                             char const *id,
+                                             char const *val_utf8);
+

+dump val_utf8 to an attribute named id or as the nodes content escaping +characters as necessary. If val_utf8 is NULL do nothing (no warning, no +output)

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+val_utf8 : a utf8 encoded string +
+
+
+
+

+gsf_xml_out_add_cstr_unchecked ()

+
void        gsf_xml_out_add_cstr_unchecked  (GsfXMLOut *xml,
+                                             char const *id,
+                                             char const *val_utf8);
+

+dump val_utf8 to an attribute named id without checking to see if the +content needs escaping. A useful performance enhancement when the +application knows that structure of the content well. If val_utf8 is NULL +do nothing (no warning, no output)

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+val_utf8 : a utf8 encoded string to export +
+
+
+
+

+gsf_xml_out_add_bool ()

+
void        gsf_xml_out_add_bool            (GsfXMLOut *xml,
+                                             char const *id,
+                                             gboolean val);
+

+dump boolean value val to an attribute named id or as the nodes content +Use '1' or '0' to simplify import

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+val : a boolean +
+
+
+
+

+gsf_xml_out_add_int ()

+
void        gsf_xml_out_add_int             (GsfXMLOut *xml,
+                                             char const *id,
+                                             int val);
+

+dump integer value val to an attribute named id or as the nodes content

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+val : the value +
+
+
+
+

+gsf_xml_out_add_uint ()

+
void        gsf_xml_out_add_uint            (GsfXMLOut *xml,
+                                             char const *id,
+                                             unsigned int val);
+

+dump unsigned integer value val to an attribute named id or as the nodes +content

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+val : the value +
+
+
+
+

+gsf_xml_out_add_float ()

+
void        gsf_xml_out_add_float           (GsfXMLOut *xml,
+                                             char const *id,
+                                             double val,
+                                             int precision);
+

+dump float value val to an attribute named id or as the nodes +content with precision precision. The number will be formattted +according to the "C" locale.

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+val : the value +
+precision : the number of significant digits to use, -1 meaning "enough". +
+
+
+
+

+gsf_xml_out_add_enum ()

+
void        gsf_xml_out_add_enum            (GsfXMLOut *xml,
+                                             char const *id,
+                                             GType etype,
+                                             gint val);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+xml : +
+id : +
+etype : +
+val : + + +
+
+
+
+

+gsf_xml_out_add_color ()

+
void        gsf_xml_out_add_color           (GsfXMLOut *xml,
+                                             char const *id,
+                                             unsigned int r,
+                                             unsigned int g,
+                                             unsigned int b);
+

+dump Color r.g.b to an attribute named id or as the nodes content

+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+r : +
+g : +
+b : +
+
+
+
+

+gsf_xml_out_add_base64 ()

+
void        gsf_xml_out_add_base64          (GsfXMLOut *xml,
+                                             char const *id,
+                                             guint8 const *data,
+                                             unsigned int len);
+

+dump len bytes in data into the content of node id using base64

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+xml : +
+id : optionally NULL for content +
+data : +
+len : +
+
+
+
+

+gsf_xml_out_simple_element ()

+
void        gsf_xml_out_simple_element      (GsfXMLOut *xml,
+                                             char const *id,
+                                             char const *content);
+

+A convenience routine

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : +
+content : +
+
+
+
+

+gsf_xml_out_simple_float_element ()

+
void        gsf_xml_out_simple_float_element
+                                            (GsfXMLOut *xml,
+                                             char const *id,
+                                             double val,
+                                             int precision);
+

+A convenience routine

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+xml : +
+id : +
+val : +
+precision : +
+
+
+
+

+gsf_xml_out_simple_int_element ()

+
void        gsf_xml_out_simple_int_element  (GsfXMLOut *xml,
+                                             char const *id,
+                                             int val);
+

+A convenience routine

+

+ +

+
++ + + + + + + + + + + + + + +
+xml : +
+id : +
+val : +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-Zip.html b/lib/libgsf-1.12.3/doc/html/gsf-Zip.html new file mode 100644 index 0000000000..fda8667791 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-Zip.html @@ -0,0 +1,1079 @@ + + + +Zip + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

Zip

+

Zip —

+
+
+

Synopsis

+
+
+
+
+            GsfInfileZip;
+GsfInfile*  gsf_infile_zip_new              (GsfInput *source,
+                                             GError **err);
+            GsfOutfileZip;
+GsfOutfile* gsf_outfile_zip_new             (GsfOutput *sink,
+                                             GError **err);
+gboolean    gsf_outfile_zip_set_compression_method
+                                            (GsfOutfileZip *zip,
+                                             GsfZipCompressionMethod method);
+
+
+            GsfZipDirent;
+GsfZipDirent* gsf_zip_dirent_new            (void);
+void        gsf_zip_dirent_free             (GsfZipDirent *dirent);
+            GsfZipVDir;
+void        gsf_vdir_free                   (GsfZipVDir *vdir,
+                                             gboolean free_dirent);
+GsfZipVDir* gsf_vdir_new                    (char const *name,
+                                             gboolean is_directory,
+                                             GsfZipDirent *dirent);
+void        gsf_vdir_add_child              (GsfZipVDir *vdir,
+                                             GsfZipVDir *child);
+#define     ZIP_DIRENT_USIZE
+#define     ZIP_DIRENT_OFFSET
+enum        GsfZipCompressionMethod;
+#define     ZIP_FILE_HEADER_NAME_SIZE
+#define     ZZIP_IS_STREAMED                (p)
+#define     ZIP_FILE_HEADER_EXTRACT
+#define     ZIP_TRAILER_SIZE
+#define     ZIP_HEADER_TIME
+#define     ZIP_FILE_HEADER_SIZE
+#define     ZZIP_IS_ENCRYPTED               (p)
+#define     ZIP_HEADER_VERSION
+#define     ZIP_BUF_SIZE
+#define     ZIP_DIRENT_CRC32
+#define     ZIP_HEADER_COMP_SIZE
+#define     ZIP_DIRENT_COMPR_METHOD
+#define     ZIP_DIRENT_FILE_TYPE
+#define     ZIP_FILE_HEADER_EXTRAS_SIZE
+#define     ZIP_DIRENT_EXTRACT
+#define     ZIP_DIRENT_FILE_MODE
+#define     ZIP_DIRENT_FLAGS
+#define     ZIP_FILE_HEADER_CSIZE
+#define     ZIP_TRAILER_DIR_SIZE
+#define     ZIP_TRAILER_COMMENT_SIZE
+#define     ZIP_TRAILER_ENTRIES
+#define     ZIP_NAME_SEPARATOR
+#define     ZIP_HEADER_SIZE
+#define     ZIP_HEADER_CRC
+#define     ZIP_FILE_HEADER_FLAGS
+#define     ZIP_DIRENT_EXTRAS_SIZE
+#define     ZIP_HEADER_COMP_METHOD
+#define     ZZIP_IS_COMPRLEVEL              (p)
+#define     ZIP_DIRENT_DOSTIME
+#define     ZIP_DIRENT_ENCODER
+#define     ZIP_HEADER_OS
+#define     ZIP_DIRENT_COMMENT_SIZE
+#define     ZIP_FILE_HEADER_CRC32
+#define     ZIP_HEADER_FLAGS
+#define     ZIP_TRAILER_DISK
+#define     ZIP_FILE_HEADER_USIZE
+#define     ZIP_TRAILER_TOTAL_ENTRIES
+#define     ZIP_HEADER_NAME_LEN
+#define     ZIP_HEADER_UNCOMP_SIZE
+#define     ZIP_TRAILER_DIR_DISK
+#define     ZIP_DIRENT_CSIZE
+#define     ZIP_TRAILER_DIR_POS
+#define     ZIP_BLOCK_SIZE
+#define     ZIP_DIRENT_NAME_SIZE
+#define     ZIP_DIRENT_SIZE
+#define     ZIP_DIRENT_DISKSTART
+#define     ZIP_HEADER_EXTRA_LEN
+#define     ZIP_FILE_HEADER_COMPR_METHOD
+#define     ZIP_FILE_HEADER_DOSTIME
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInfile
+               +----GsfInfileZip
+
+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutfile
+               +----GsfOutfileZip
+
+
+
+

Properties

+
+
+  "compression-level"    gint                  : Read
+  "internal-parent"      GsfInfileZip          : Write / Construct Only
+  "source"               GsfInput              : Read / Write / Construct Only
+  "compression-level"    gint                  : Read / Write / Construct Only
+  "entry-name"           gchararray            : Read / Write / Construct Only
+  "sink"                 GsfOutput             : Read / Write / Construct Only
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInfileZip

+
typedef struct _GsfInfileZip GsfInfileZip;
+

+ +

+
+
+
+

+gsf_infile_zip_new ()

+
GsfInfile*  gsf_infile_zip_new              (GsfInput *source,
+                                             GError **err);
+

+Opens the root directory of a Zip file. +NOTE : adds a reference to source

+

+ +

+
++ + + + + + + + + + + + + + +
+source : A base GsfInput +
+err : A GError, optionally null +
+Returns :: the new zip file handler +
+
+
+
+

+GsfOutfileZip

+
typedef struct _GsfOutfileZip GsfOutfileZip;
+

+ +

+
+
+
+

+gsf_outfile_zip_new ()

+
GsfOutfile* gsf_outfile_zip_new             (GsfOutput *sink,
+                                             GError **err);
+

+Creates the root directory of a Zip file and manages the addition of +children. +

+

+NOTE : adds a reference to sink

+

+ +

+
++ + + + + + + + + + + + + + +
+sink : +
+err : +
+Returns :: the new zip file handler +
+
+
+
+

+gsf_outfile_zip_set_compression_method ()

+
gboolean    gsf_outfile_zip_set_compression_method
+                                            (GsfOutfileZip *zip,
+                                             GsfZipCompressionMethod method);
+

+ +

+
++ + + + + + + + + + + + + + +
+zip : +
+method : +
+Returns : + + +
+
+
+
+

+GsfZipDirent

+
typedef struct {
+	char                    *name;
+	GsfZipCompressionMethod  compr_method;
+	guint32                  crc32;
+	size_t                   csize;
+	size_t                   usize;
+	gsf_off_t                offset;
+	gsf_off_t                data_offset;
+	guint32                  dostime;
+} GsfZipDirent;
+
+

+ +

+
+
+
+

+gsf_zip_dirent_new ()

+
GsfZipDirent* gsf_zip_dirent_new            (void);
+

+ +

+
++ + + + +
+Returns : + + +
+
+
+
+

+gsf_zip_dirent_free ()

+
void        gsf_zip_dirent_free             (GsfZipDirent *dirent);
+

+ +

+
++ + + + +
+dirent : + + +
+
+
+
+

+GsfZipVDir

+
typedef struct {
+	char *name;
+	gboolean is_directory;
+	GsfZipDirent *dirent;
+	GSList *children, *last_child;
+} GsfZipVDir;
+
+

+ +

+
+
+
+

+gsf_vdir_free ()

+
void        gsf_vdir_free                   (GsfZipVDir *vdir,
+                                             gboolean free_dirent);
+

+ +

+
++ + + + + + + + + + +
+vdir : +
+free_dirent : + + +
+
+
+
+

+gsf_vdir_new ()

+
GsfZipVDir* gsf_vdir_new                    (char const *name,
+                                             gboolean is_directory,
+                                             GsfZipDirent *dirent);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+name : +
+is_directory : +
+dirent : +
+Returns : + + +
+
+
+
+

+gsf_vdir_add_child ()

+
void        gsf_vdir_add_child              (GsfZipVDir *vdir,
+                                             GsfZipVDir *child);
+

+ +

+
++ + + + + + + + + + +
+vdir : +
+child : + + +
+
+
+
+

+ZIP_DIRENT_USIZE

+
#define ZIP_DIRENT_USIZE                24
+
+

+ +

+
+
+
+

+ZIP_DIRENT_OFFSET

+
#define ZIP_DIRENT_OFFSET               42
+
+

+ +

+
+
+
+

+enum GsfZipCompressionMethod

+
typedef enum {
+	GSF_ZIP_STORED =          0,		/* supported for export */
+	GSF_ZIP_SHRUNK =          1,
+	GSF_ZIP_REDUCEDx1 =       2,
+	GSF_ZIP_REDUCEDx2 =       3,
+	GSF_ZIP_REDUCEDx3 =       4,
+	GSF_ZIP_REDUCEDx4 =       5,
+	GSF_ZIP_IMPLODED  =       6,
+	GSF_ZIP_TOKENIZED =       7,
+	GSF_ZIP_DEFLATED =        8,		/* supported for export */
+	GSF_ZIP_DEFLATED_BETTER = 9,
+	GSF_ZIP_IMPLODED_BETTER = 10
+} GsfZipCompressionMethod;
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_NAME_SIZE

+
#define ZIP_FILE_HEADER_NAME_SIZE       26
+
+

+ +

+
+
+
+

+ZZIP_IS_STREAMED()

+
#define ZZIP_IS_STREAMED(p)    (((*(unsigned char*)p)>>3)&1)
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+ZIP_FILE_HEADER_EXTRACT

+
#define ZIP_FILE_HEADER_EXTRACT          4
+
+

+ +

+
+
+
+

+ZIP_TRAILER_SIZE

+
#define ZIP_TRAILER_SIZE 		22
+
+

+ +

+
+
+
+

+ZIP_HEADER_TIME

+
#define ZIP_HEADER_TIME                 10
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_SIZE

+
#define ZIP_FILE_HEADER_SIZE            30
+
+

+ +

+
+
+
+

+ZZIP_IS_ENCRYPTED()

+
#define ZZIP_IS_ENCRYPTED(p)    ((*(unsigned char*)p)&1)
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+ZIP_HEADER_VERSION

+
#define ZIP_HEADER_VERSION 		 4
+
+

+ +

+
+
+
+

+ZIP_BUF_SIZE

+
#define ZIP_BUF_SIZE 512
+
+

+ +

+
+
+
+

+ZIP_DIRENT_CRC32

+
#define ZIP_DIRENT_CRC32                16
+
+

+ +

+
+
+
+

+ZIP_HEADER_COMP_SIZE

+
#define ZIP_HEADER_COMP_SIZE		18
+
+

+ +

+
+
+
+

+ZIP_DIRENT_COMPR_METHOD

+
#define ZIP_DIRENT_COMPR_METHOD         10
+
+

+ +

+
+
+
+

+ZIP_DIRENT_FILE_TYPE

+
#define ZIP_DIRENT_FILE_TYPE            36
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_EXTRAS_SIZE

+
#define ZIP_FILE_HEADER_EXTRAS_SIZE     28
+
+

+ +

+
+
+
+

+ZIP_DIRENT_EXTRACT

+
#define ZIP_DIRENT_EXTRACT              6
+
+

+ +

+
+
+
+

+ZIP_DIRENT_FILE_MODE

+
#define ZIP_DIRENT_FILE_MODE            38
+
+

+ +

+
+
+
+

+ZIP_DIRENT_FLAGS

+
#define ZIP_DIRENT_FLAGS                8
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_CSIZE

+
#define ZIP_FILE_HEADER_CSIZE           18
+
+

+ +

+
+
+
+

+ZIP_TRAILER_DIR_SIZE

+
#define ZIP_TRAILER_DIR_SIZE 		12
+
+

+ +

+
+
+
+

+ZIP_TRAILER_COMMENT_SIZE

+
#define ZIP_TRAILER_COMMENT_SIZE	20
+
+

+ +

+
+
+
+

+ZIP_TRAILER_ENTRIES

+
#define ZIP_TRAILER_ENTRIES 		8
+
+

+ +

+
+
+
+

+ZIP_NAME_SEPARATOR

+
#define ZIP_NAME_SEPARATOR    '/'
+
+

+ +

+
+
+
+

+ZIP_HEADER_SIZE

+
#define ZIP_HEADER_SIZE 		30
+
+

+ +

+
+
+
+

+ZIP_HEADER_CRC

+
#define ZIP_HEADER_CRC 			14
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_FLAGS

+
#define ZIP_FILE_HEADER_FLAGS            6
+
+

+ +

+
+
+
+

+ZIP_DIRENT_EXTRAS_SIZE

+
#define ZIP_DIRENT_EXTRAS_SIZE          30
+
+

+ +

+
+
+
+

+ZIP_HEADER_COMP_METHOD

+
#define ZIP_HEADER_COMP_METHOD           8
+
+

+ +

+
+
+
+

+ZZIP_IS_COMPRLEVEL()

+
#define ZZIP_IS_COMPRLEVEL(p)  (((*(unsigned char*)p)>>1)&3)
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+ZIP_DIRENT_DOSTIME

+
#define ZIP_DIRENT_DOSTIME              12
+
+

+ +

+
+
+
+

+ZIP_DIRENT_ENCODER

+
#define ZIP_DIRENT_ENCODER              4
+
+

+ +

+
+
+
+

+ZIP_HEADER_OS

+
#define ZIP_HEADER_OS	 		 5
+
+

+ +

+
+
+
+

+ZIP_DIRENT_COMMENT_SIZE

+
#define ZIP_DIRENT_COMMENT_SIZE         32
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_CRC32

+
#define ZIP_FILE_HEADER_CRC32           14
+
+

+ +

+
+
+
+

+ZIP_HEADER_FLAGS

+
#define ZIP_HEADER_FLAGS 	         6
+
+

+ +

+
+
+
+

+ZIP_TRAILER_DISK

+
#define ZIP_TRAILER_DISK 		4
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_USIZE

+
#define ZIP_FILE_HEADER_USIZE           22
+
+

+ +

+
+
+
+

+ZIP_TRAILER_TOTAL_ENTRIES

+
#define ZIP_TRAILER_TOTAL_ENTRIES 	10
+
+

+ +

+
+
+
+

+ZIP_HEADER_NAME_LEN

+
#define ZIP_HEADER_NAME_LEN		26
+
+

+ +

+
+
+
+

+ZIP_HEADER_UNCOMP_SIZE

+
#define ZIP_HEADER_UNCOMP_SIZE          22
+
+

+ +

+
+
+
+

+ZIP_TRAILER_DIR_DISK

+
#define ZIP_TRAILER_DIR_DISK 		6
+
+

+ +

+
+
+
+

+ZIP_DIRENT_CSIZE

+
#define ZIP_DIRENT_CSIZE                20
+
+

+ +

+
+
+
+

+ZIP_TRAILER_DIR_POS

+
#define ZIP_TRAILER_DIR_POS 		16
+
+

+ +

+
+
+
+

+ZIP_BLOCK_SIZE

+
#define ZIP_BLOCK_SIZE 32768
+
+

+ +

+
+
+
+

+ZIP_DIRENT_NAME_SIZE

+
#define ZIP_DIRENT_NAME_SIZE            28
+
+

+ +

+
+
+
+

+ZIP_DIRENT_SIZE

+
#define ZIP_DIRENT_SIZE                 46
+
+

+ +

+
+
+
+

+ZIP_DIRENT_DISKSTART

+
#define ZIP_DIRENT_DISKSTART            34
+
+

+ +

+
+
+
+

+ZIP_HEADER_EXTRA_LEN

+
#define ZIP_HEADER_EXTRA_LEN		28
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_COMPR_METHOD

+
#define ZIP_FILE_HEADER_COMPR_METHOD     8
+
+

+ +

+
+
+
+

+ZIP_FILE_HEADER_DOSTIME

+
#define ZIP_FILE_HEADER_DOSTIME         10
+
+

+ +

+
+
+
+

Properties

+
+

+The "compression-level" property

+
  "compression-level"    gint                  : Read
+

The level of compression used, zero meaning none.

+

Allowed values: [0,10]

+

Default value: 0

+
+
+
+

+The "internal-parent" property

+
  "internal-parent"      GsfInfileZip          : Write / Construct Only
+

Internal use only.

+
+
+
+

+The "source" property

+
  "source"               GsfInput              : Read / Write / Construct Only
+

The archive being interpreted.

+
+
+
+

+The "compression-level" property

+
  "compression-level"    gint                  : Read / Write / Construct Only
+

The level of compression used, zero meaning none.

+

Allowed values: [0,10]

+

Default value: 8

+
+
+
+

+The "entry-name" property

+
  "entry-name"           gchararray            : Read / Write / Construct Only
+

The filename of this member in the archive without path.

+

Default value: NULL

+
+
+
+

+The "sink" property

+
  "sink"                 GsfOutput             : Read / Write / Construct Only
+

Where the archive is written.

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-memory.html b/lib/libgsf-1.12.3/doc/html/gsf-memory.html new file mode 100644 index 0000000000..746e58013b --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-memory.html @@ -0,0 +1,423 @@ + + + +memory + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

memory

+

memory —

+
+
+

Synopsis

+
+
+
+
+            GsfInputMemory;
+GsfInput*   gsf_input_mmap_new              (char const *filename,
+                                             GError **err);
+GsfInput*   gsf_input_memory_new            (guint8 const *buf,
+                                             gsf_off_t length,
+                                             gboolean needs_free);
+GsfInput*   gsf_input_memory_new_clone      (guint8 const *buf,
+                                             gsf_off_t length);
+GsfInput*   gsf_input_memory_new_from_iochannel
+                                            (GIOChannel *channel,
+                                             GError **error);
+            GsfOutputMemory;
+const guint8* gsf_output_memory_get_bytes   (GsfOutputMemory *mem);
+GType       gsf_output_memory_get_type      (void);
+GsfOutput*  gsf_output_memory_new           (void);
+            GsfSharedMemory;
+GsfSharedMemory* gsf_shared_memory_new      (void *buf,
+                                             gsf_off_t size,
+                                             gboolean needs_free);
+GsfSharedMemory* gsf_shared_memory_mmapped_new
+                                            (void *buf,
+                                             gsf_off_t size);
+
+
+
+
+

Object Hierarchy

+
+
+  GObject
+   +----GsfInput
+         +----GsfInputMemory
+
+
+
+  GObject
+   +----GsfOutput
+         +----GsfOutputMemory
+
+
+
+  GObject
+   +----GsfSharedMemory
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfInputMemory

+
typedef struct _GsfInputMemory GsfInputMemory;
+

+ +

+
+
+
+

+gsf_input_mmap_new ()

+
GsfInput*   gsf_input_mmap_new              (char const *filename,
+                                             GError **err);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+filename : The file on disk that you want to mmap +
+err : A GError, or optionally null +
+Returns : A new GsfInputMemory +
+
+
+
+

+gsf_input_memory_new ()

+
GsfInput*   gsf_input_memory_new            (guint8 const *buf,
+                                             gsf_off_t length,
+                                             gboolean needs_free);
+

+

+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+buf : The input bytes +
+length : The length of buf +
+needs_free : Whether you want this memory to be free'd at object destruction +
+Returns : A new GsfInputMemory +
+
+
+
+

+gsf_input_memory_new_clone ()

+
GsfInput*   gsf_input_memory_new_clone      (guint8 const *buf,
+                                             gsf_off_t length);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+buf : The input bytes +
+length : The length of buf +
+Returns : A new GsfInputMemory +
+
+
+
+

+gsf_input_memory_new_from_iochannel ()

+
GsfInput*   gsf_input_memory_new_from_iochannel
+                                            (GIOChannel *channel,
+                                             GError **error);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+channel : a GIOChannel. +
+error : a GError +
+Returns :a new GsfInputMemory or NULL. +
+
+
+
+

+GsfOutputMemory

+
typedef struct _GsfOutputMemory GsfOutputMemory;
+

+ +

+
+
+
+

+gsf_output_memory_get_bytes ()

+
const guint8* gsf_output_memory_get_bytes   (GsfOutputMemory *mem);
+

+

+

+ +

+
++ + + + + + + + + + +
+mem : the output device. +
+Returns : The data that has been written to mem, or null +
+
+
+
+

+gsf_output_memory_get_type ()

+
GType       gsf_output_memory_get_type      (void);
+

+ +

+
++ + + + +
+Returns : + + +
+
+
+
+

+gsf_output_memory_new ()

+
GsfOutput*  gsf_output_memory_new           (void);
+

+

+

+ +

+
++ + + + +
+Returns :a new file or NULL. +
+
+
+
+

+GsfSharedMemory

+
typedef struct _GsfSharedMemory GsfSharedMemory;
+

+ +

+
+
+
+

+gsf_shared_memory_new ()

+
GsfSharedMemory* gsf_shared_memory_new      (void *buf,
+                                             gsf_off_t size,
+                                             gboolean needs_free);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+buf : +
+size : +
+needs_free : +
+Returns : + + +
+
+
+
+

+gsf_shared_memory_mmapped_new ()

+
GsfSharedMemory* gsf_shared_memory_mmapped_new
+                                            (void *buf,
+                                             gsf_off_t size);
+

+ +

+
++ + + + + + + + + + + + + + +
+buf : +
+size : +
+Returns : + + +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-metadata.html b/lib/libgsf-1.12.3/doc/html/gsf-metadata.html new file mode 100644 index 0000000000..87ce88ada0 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-metadata.html @@ -0,0 +1,1240 @@ + + + +metadata + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

metadata

+

metadata —

+
+
+

Synopsis

+
+
+
+
+            GsfDocMetaData;
+GsfDocMetaData* gsf_doc_meta_data_new       (void);
+GsfDocProp* gsf_doc_meta_data_lookup        (GsfDocMetaData const *meta,
+                                             char const *name);
+void        gsf_doc_meta_data_insert        (GsfDocMetaData *meta,
+                                             char *name,
+                                             GValue *value);
+void        gsf_doc_meta_data_remove        (GsfDocMetaData *meta,
+                                             char const *name);
+GsfDocProp* gsf_doc_meta_data_steal         (GsfDocMetaData *meta,
+                                             char const *name);
+void        gsf_doc_meta_data_store         (GsfDocMetaData *meta,
+                                             GsfDocProp *prop);
+void        gsf_doc_meta_data_foreach       (GsfDocMetaData const *meta,
+                                             GHFunc func,
+                                             gpointer user_data);
+gsize       gsf_doc_meta_data_size          (GsfDocMetaData const *meta);
+            GsfDocProp;
+GsfDocProp* gsf_doc_prop_new                (char *name);
+void        gsf_doc_prop_free               (GsfDocProp *prop);
+charconst   * gsf_doc_prop_get_name         (GsfDocProp const *prop);
+GValueconst * gsf_doc_prop_get_val          (GsfDocProp const *prop);
+void        gsf_doc_prop_set_val            (GsfDocProp *prop,
+                                             GValue *val);
+charconst   * gsf_doc_prop_get_link         (GsfDocProp const *prop);
+void        gsf_doc_prop_set_link           (GsfDocProp *prop,
+                                             char *link);
+            GsfDocPropVector;
+GsfDocPropVector* gsf_docprop_vector_new    (void);
+void        gsf_docprop_vector_append       (GsfDocPropVector *vector,
+                                             GValue *value);
+gchar*      gsf_docprop_vector_as_string    (GsfDocPropVector *vector);
+GValueArray* gsf_value_get_docprop_varray   (GValue const *value);
+GsfDocPropVector* gsf_value_get_docprop_vector
+                                            (GValue const *value);
+
+#define     GSF_META_NAME_TITLE
+#define     GSF_META_NAME_DESCRIPTION
+#define     GSF_META_NAME_SUBJECT
+#define     GSF_META_NAME_DATE_MODIFIED
+#define     GSF_META_NAME_DATE_CREATED
+#define     GSF_META_NAME_KEYWORDS
+#define     GSF_META_NAME_LANGUAGE
+#define     GSF_META_NAME_REVISION_COUNT
+#define     GSF_META_NAME_EDITING_DURATION
+#define     GSF_META_NAME_TABLE_COUNT
+#define     GSF_META_NAME_IMAGE_COUNT
+#define     GSF_META_NAME_OBJECT_COUNT
+#define     GSF_META_NAME_PAGE_COUNT
+#define     GSF_META_NAME_PARAGRAPH_COUNT
+#define     GSF_META_NAME_WORD_COUNT
+#define     GSF_META_NAME_CHARACTER_COUNT
+#define     GSF_META_NAME_CELL_COUNT
+#define     GSF_META_NAME_SPREADSHEET_COUNT
+#define     GSF_META_NAME_CREATOR
+#define     GSF_META_NAME_TEMPLATE
+#define     GSF_META_NAME_LAST_SAVED_BY
+#define     GSF_META_NAME_LAST_PRINTED
+#define     GSF_META_NAME_SECURITY
+#define     GSF_META_NAME_CATEGORY
+#define     GSF_META_NAME_PRESENTATION_FORMAT
+#define     GSF_META_NAME_THUMBNAIL
+#define     GSF_META_NAME_GENERATOR
+#define     GSF_META_NAME_LINE_COUNT
+#define     GSF_META_NAME_SLIDE_COUNT
+#define     GSF_META_NAME_NOTE_COUNT
+#define     GSF_META_NAME_HIDDEN_SLIDE_COUNT
+#define     GSF_META_NAME_MM_CLIP_COUNT
+#define     GSF_META_NAME_BYTE_COUNT
+#define     GSF_META_NAME_SCALE
+#define     GSF_META_NAME_HEADING_PAIRS
+#define     GSF_META_NAME_DOCUMENT_PARTS
+#define     GSF_META_NAME_MANAGER
+#define     GSF_META_NAME_COMPANY
+#define     GSF_META_NAME_LINKS_DIRTY
+#define     GSF_META_NAME_DICTIONARY
+#define     GSF_META_NAME_MSOLE_UNKNOWN_17
+#define     GSF_META_NAME_MSOLE_UNKNOWN_18
+#define     GSF_META_NAME_MSOLE_UNKNOWN_19
+#define     GSF_META_NAME_MSOLE_UNKNOWN_20
+#define     GSF_META_NAME_MSOLE_UNKNOWN_21
+#define     GSF_META_NAME_MSOLE_UNKNOWN_22
+#define     GSF_META_NAME_MSOLE_UNKNOWN_23
+#define     GSF_META_NAME_LOCALE_SYSTEM_DEFAULT
+#define     GSF_META_NAME_CASE_SENSITIVE
+
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+GsfDocMetaData

+
typedef struct _GsfDocMetaData GsfDocMetaData;
+

+ +

+
+
+
+

+gsf_doc_meta_data_new ()

+
GsfDocMetaData* gsf_doc_meta_data_new       (void);
+

+

+

+ +

+
++ + + + +
+Returns :a new metadata property collection +
+
+
+
+

+gsf_doc_meta_data_lookup ()

+
GsfDocProp* gsf_doc_meta_data_lookup        (GsfDocMetaData const *meta,
+                                             char const *name);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+meta : GsfDocMetaData +
+name : +
+Returns :the property with name id in meta. The caller can modify the +property value and link but not the name. +
+
+
+
+

+gsf_doc_meta_data_insert ()

+
void        gsf_doc_meta_data_insert        (GsfDocMetaData *meta,
+                                             char *name,
+                                             GValue *value);
+

+Take ownership of name and value and insert a property into meta. +If a property exists with name, it is replaced (The link is lost)

+

+ +

+
++ + + + + + + + + + + + + + +
+meta : GsfDocMetaData +
+name : +
+value : GValue +
+
+
+
+

+gsf_doc_meta_data_remove ()

+
void        gsf_doc_meta_data_remove        (GsfDocMetaData *meta,
+                                             char const *name);
+

+If name does not exist in the collection, do nothing. If name does exist, +remove it and its value from the collection

+

+ +

+
++ + + + + + + + + + +
+meta : the collection +
+name : the non-null string name of the property +
+
+
+
+

+gsf_doc_meta_data_steal ()

+
GsfDocProp* gsf_doc_meta_data_steal         (GsfDocMetaData *meta,
+                                             char const *name);
+

+ +

+
++ + + + + + + + + + + + + + +
+meta : +
+name : +
+Returns : + + +
+
+
+
+

+gsf_doc_meta_data_store ()

+
void        gsf_doc_meta_data_store         (GsfDocMetaData *meta,
+                                             GsfDocProp *prop);
+

+

+

+ +

+
++ + + + + + + + + + +
+meta : GsfDocMetaData +
+prop : GsfDocProp +
+
+
+
+

+gsf_doc_meta_data_foreach ()

+
void        gsf_doc_meta_data_foreach       (GsfDocMetaData const *meta,
+                                             GHFunc func,
+                                             gpointer user_data);
+

+Iterate through each (key, value) pair in this collection

+

+ +

+
++ + + + + + + + + + + + + + +
+meta : the collection +
+func : the function called once for each element in the collection +
+user_data : any supplied user data or NULL +
+
+
+
+

+gsf_doc_meta_data_size ()

+
gsize       gsf_doc_meta_data_size          (GsfDocMetaData const *meta);
+

+

+

+ +

+
++ + + + + + + + + + +
+meta : the collection +
+Returns :the number of items in this collection +
+
+
+
+

+GsfDocProp

+
typedef struct _GsfDocProp GsfDocProp;
+

+ +

+
+
+
+

+gsf_doc_prop_new ()

+
GsfDocProp* gsf_doc_prop_new                (char *name);
+

+

+

+ +

+
++ + + + + + + + + + +
+name : +
+Returns :a new GsfDocProp which the caller is responsible for freeing. +Takes ownership of name. +
+
+
+
+

+gsf_doc_prop_free ()

+
void        gsf_doc_prop_free               (GsfDocProp *prop);
+

+If prop is non NULL free the memory assosociated with it

+

+ +

+
++ + + + +
+prop : GsfDocProp +
+
+
+
+

+gsf_doc_prop_get_name ()

+
charconst   * gsf_doc_prop_get_name         (GsfDocProp const *prop);
+

+

+

+ +

+
++ + + + + + + + + + +
+prop : GsfDocProp +
+Returns :the name of the property, the caller should not modify the result. +
+
+
+
+

+gsf_doc_prop_get_val ()

+
GValueconst * gsf_doc_prop_get_val          (GsfDocProp const *prop);
+

+

+

+ +

+
++ + + + + + + + + + +
+prop : the property +
+Returns :the value of the property, the caller should not modify the result. +
+
+
+
+

+gsf_doc_prop_set_val ()

+
void        gsf_doc_prop_set_val            (GsfDocProp *prop,
+                                             GValue *val);
+

+Assigns val to prop, and unsets and frees the current value.

+

+ +

+
++ + + + + + + + + + +
+prop : GsfDocProp +
+val : GValue +
+
+
+
+

+gsf_doc_prop_get_link ()

+
charconst   * gsf_doc_prop_get_link         (GsfDocProp const *prop);
+

+

+

+ +

+
++ + + + + + + + + + +
+prop : GsfDocProp +
+Returns :the current link descriptor of prop. The result should not be + freed or modified. +
+
+
+
+

+gsf_doc_prop_set_link ()

+
void        gsf_doc_prop_set_link           (GsfDocProp *prop,
+                                             char *link);
+

+

+

+ +

+
++ + + + + + + + + + +
+prop : GsfDocProp +
+link : +
+
+
+
+

+GsfDocPropVector

+
typedef struct _GsfDocPropVector GsfDocPropVector;
+

+ +

+
+
+
+

+gsf_docprop_vector_new ()

+
GsfDocPropVector* gsf_docprop_vector_new    (void);
+

+This function creates a new gsf_docprop_vector object.

+

+ +

+
++ + + + +
+Returns : GsfDocPropVector* +
+
+
+
+

+gsf_docprop_vector_append ()

+
void        gsf_docprop_vector_append       (GsfDocPropVector *vector,
+                                             GValue *value);
+

+Insert a copy of value as the last element of vector.

+

+ +

+
++ + + + + + + + + + +
+vector : The vector to which the GValue will be added +
+value : The GValue to add to vector +
+
+
+
+

+gsf_docprop_vector_as_string ()

+
gchar*      gsf_docprop_vector_as_string    (GsfDocPropVector *vector);
+

+This function returns a string which represents all the GValues in vector. +The caller is responsible for freeing the result.

+

+ +

+
++ + + + + + + + + + +
+vector : The GsfDocPropVector from which GValues will be extracted. +
+Returns : a string of comma-separated values +
+
+
+
+

+gsf_value_get_docprop_varray ()

+
GValueArray* gsf_value_get_docprop_varray   (GValue const *value);
+

+ +

+
++ + + + + + + + + + +
+value : +
+Returns : + + +
+
+
+
+

+gsf_value_get_docprop_vector ()

+
GsfDocPropVector* gsf_value_get_docprop_vector
+                                            (GValue const *value);
+

+ +

+
++ + + + + + + + + + +
+value : +
+Returns : + + +
+
+
+
+

+GSF_META_NAME_TITLE

+
#define GSF_META_NAME_TITLE                 "dc:title"
+
+

+ +

+
+
+
+

+GSF_META_NAME_DESCRIPTION

+
#define GSF_META_NAME_DESCRIPTION           "dc:description"
+
+

+ +

+
+
+
+

+GSF_META_NAME_SUBJECT

+
#define GSF_META_NAME_SUBJECT               "dc:subject"
+
+

+ +

+
+
+
+

+GSF_META_NAME_DATE_MODIFIED

+
#define GSF_META_NAME_DATE_MODIFIED         "dc:date-modified"
+
+

+ +

+
+
+
+

+GSF_META_NAME_DATE_CREATED

+
#define GSF_META_NAME_DATE_CREATED          "gsf:date-created"
+
+

+ +

+
+
+
+

+GSF_META_NAME_KEYWORDS

+
#define GSF_META_NAME_KEYWORDS              "dc:keywords"
+
+

+ +

+
+
+
+

+GSF_META_NAME_LANGUAGE

+
#define GSF_META_NAME_LANGUAGE              "dc:language"
+
+

+ +

+
+
+
+

+GSF_META_NAME_REVISION_COUNT

+
#define GSF_META_NAME_REVISION_COUNT        "gsf:revision-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_EDITING_DURATION

+
#define GSF_META_NAME_EDITING_DURATION      "gsf:editing-duration"
+
+

+ +

+
+
+
+

+GSF_META_NAME_TABLE_COUNT

+
#define GSF_META_NAME_TABLE_COUNT           "gsf:table-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_IMAGE_COUNT

+
#define GSF_META_NAME_IMAGE_COUNT           "gsf:image-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_OBJECT_COUNT

+
#define GSF_META_NAME_OBJECT_COUNT          "gsf:object-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_PAGE_COUNT

+
#define GSF_META_NAME_PAGE_COUNT            "gsf:page-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_PARAGRAPH_COUNT

+
#define GSF_META_NAME_PARAGRAPH_COUNT       "gsf:paragraph-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_WORD_COUNT

+
#define GSF_META_NAME_WORD_COUNT            "gsf:word-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_CHARACTER_COUNT

+
#define GSF_META_NAME_CHARACTER_COUNT       "gsf:character-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_CELL_COUNT

+
#define GSF_META_NAME_CELL_COUNT            "gsf:cell-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_SPREADSHEET_COUNT

+
#define GSF_META_NAME_SPREADSHEET_COUNT     "gsf:spreadsheet-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_CREATOR

+
#define GSF_META_NAME_CREATOR               "gsf:creator"
+
+

+ +

+
+
+
+

+GSF_META_NAME_TEMPLATE

+
#define GSF_META_NAME_TEMPLATE              "gsf:template"
+
+

+ +

+
+
+
+

+GSF_META_NAME_LAST_SAVED_BY

+
#define GSF_META_NAME_LAST_SAVED_BY         "gsf:last-saved-by"
+
+

+ +

+
+
+
+

+GSF_META_NAME_LAST_PRINTED

+
#define GSF_META_NAME_LAST_PRINTED          "gsf:last-printed"
+
+

+ +

+
+
+
+

+GSF_META_NAME_SECURITY

+
#define GSF_META_NAME_SECURITY              "gsf:security"
+
+

+ +

+
+
+
+

+GSF_META_NAME_CATEGORY

+
#define GSF_META_NAME_CATEGORY              "gsf:category"
+
+

+ +

+
+
+
+

+GSF_META_NAME_PRESENTATION_FORMAT

+
#define GSF_META_NAME_PRESENTATION_FORMAT   "gsf:presentation-format"
+
+

+ +

+
+
+
+

+GSF_META_NAME_THUMBNAIL

+
#define GSF_META_NAME_THUMBNAIL             "gsf:thumbnail"
+
+

+ +

+
+
+
+

+GSF_META_NAME_GENERATOR

+
#define GSF_META_NAME_GENERATOR             "gsf:generator"
+
+

+ +

+
+
+
+

+GSF_META_NAME_LINE_COUNT

+
#define GSF_META_NAME_LINE_COUNT            "gsf:line-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_SLIDE_COUNT

+
#define GSF_META_NAME_SLIDE_COUNT           "gsf:slide-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_NOTE_COUNT

+
#define GSF_META_NAME_NOTE_COUNT            "gsf:note-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_HIDDEN_SLIDE_COUNT

+
#define GSF_META_NAME_HIDDEN_SLIDE_COUNT    "gsf:hidden-slide-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MM_CLIP_COUNT

+
#define GSF_META_NAME_MM_CLIP_COUNT         "gsf:MM-clip-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_BYTE_COUNT

+
#define GSF_META_NAME_BYTE_COUNT            "gsf:byte-count"
+
+

+ +

+
+
+
+

+GSF_META_NAME_SCALE

+
#define GSF_META_NAME_SCALE                 "gsf:scale"
+
+

+ +

+
+
+
+

+GSF_META_NAME_HEADING_PAIRS

+
#define GSF_META_NAME_HEADING_PAIRS         "gsf:heading-pairs"
+
+

+ +

+
+
+
+

+GSF_META_NAME_DOCUMENT_PARTS

+
#define GSF_META_NAME_DOCUMENT_PARTS        "gsf:document-parts"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MANAGER

+
#define GSF_META_NAME_MANAGER               "gsf:manager"
+
+

+ +

+
+
+
+

+GSF_META_NAME_COMPANY

+
#define GSF_META_NAME_COMPANY               "gsf:company"
+
+

+ +

+
+
+
+

+GSF_META_NAME_LINKS_DIRTY

+
#define GSF_META_NAME_LINKS_DIRTY           "gsf:links-dirty"
+
+

+ +

+
+
+
+

+GSF_META_NAME_DICTIONARY

+
#define GSF_META_NAME_DICTIONARY            "gsf:dictionary"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_17

+
#define GSF_META_NAME_MSOLE_UNKNOWN_17		"msole:unknown-doc-17"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_18

+
#define GSF_META_NAME_MSOLE_UNKNOWN_18		"msole:unknown-doc-18"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_19

+
#define GSF_META_NAME_MSOLE_UNKNOWN_19		"msole:unknown-doc-19"	/* bool */
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_20

+
#define GSF_META_NAME_MSOLE_UNKNOWN_20		"msole:unknown-doc-20"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_21

+
#define GSF_META_NAME_MSOLE_UNKNOWN_21		"msole:unknown-doc-21"
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_22

+
#define GSF_META_NAME_MSOLE_UNKNOWN_22		"msole:unknown-doc-22"	/* bool */
+
+

+ +

+
+
+
+

+GSF_META_NAME_MSOLE_UNKNOWN_23

+
#define GSF_META_NAME_MSOLE_UNKNOWN_23		"msole:unknown-doc-23"	/* i4 */
+
+

+ +

+
+
+
+

+GSF_META_NAME_LOCALE_SYSTEM_DEFAULT

+
#define GSF_META_NAME_LOCALE_SYSTEM_DEFAULT	"gsf:default-locale"
+
+

+ +

+
+
+
+

+GSF_META_NAME_CASE_SENSITIVE

+
#define GSF_META_NAME_CASE_SENSITIVE        "gsf:case-sensitivity"
+
+

+ +

+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf-utils.html b/lib/libgsf-1.12.3/doc/html/gsf-utils.html new file mode 100644 index 0000000000..020e862c45 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf-utils.html @@ -0,0 +1,2865 @@ + + + +utils + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+

utils

+

utils —

+
+
+

Synopsis

+
+
+
+
+
+void        gsf_init                        (void);
+void        gsf_shutdown                    (void);
+void        gsf_init_dynamic                (GTypeModule *module);
+void        gsf_shutdown_dynamic            (GTypeModule *module);
+extern      int libgsf_major_version;
+extern      int libgsf_minor_version;
+extern      int libgsf_micro_version;
+
+#define     GSF_CLASS                       (name, prefix, class_init, instance_init, parent)
+#define     GSF_CLASS_FULL                  (name, prefix, base_init, base_finalize, \
+			   class_init, class_finalize, instance_init, parent_type, \
+		       abstract, interface_decl)
+#define     GSF_CLASS_ABSTRACT              (name, prefix, class_init, instance_init, parent)
+#define     GSF_INTERFACE                   (init_func, iface_type)
+#define     GSF_INTERFACE_FULL              (type, init_func, iface_type)
+#define     GSF_DYNAMIC_CLASS               (name, prefix, class_init, instance_init, parent)
+#define     GSF_DYNAMIC_CLASS_FULL          (name, prefix, base_init, base_finalize, \
+				   class_init,  class_finalize, instance_init, parent_type, \
+			       abstract, interface_decl)
+#define     GSF_DYNAMIC_CLASS_ABSTRACT      (name, prefix, class_init, instance_init, parent)
+#define     GSF_DYNAMIC_INTERFACE           (init_func, iface_type, module)
+#define     GSF_DYNAMIC_INTERFACE_FULL      (type, init_func, iface_type, module)
+#define     GSF_PARAM_STATIC
+
+#define     GSF_ERROR
+enum        GsfError;
+GQuark      gsf_error_quark                 (void);
+
+void        gsf_mem_dump                    (guint8 const *ptr,
+                                             size_t len);
+void        gsf_input_dump                  (GsfInput *input,
+                                             gboolean dump_as_hex);
+
+#define     GSF_OFF_T_FORMAT
+typedef     gsf_off_t;
+char*       gsf_filename_to_utf8            (char const *filename,
+                                             gboolean quoted);
+void        gsf_iconv_close                 (GIConv handle);
+charconst * gsf_extension_pointer           (char const *path);
+
+guint8*     gsf_base64_encode_simple        (guint8 const *data,
+                                             size_t len);
+size_t      gsf_base64_encode_close         (guint8 const *in,
+                                             size_t inlen,
+                                             gboolean break_lines,
+                                             guint8 *out,
+                                             int *state,
+                                             guint *save);
+size_t      gsf_base64_encode_step          (guint8 const *in,
+                                             size_t len,
+                                             gboolean break_lines,
+                                             guint8 *out,
+                                             int *state,
+                                             guint *save);
+size_t      gsf_base64_decode_simple        (guint8 *data,
+                                             size_t len);
+size_t      gsf_base64_decode_step          (guint8 const *in,
+                                             size_t len,
+                                             guint8 *out,
+                                             int *state,
+                                             guint *save);
+#define     GSF_LE_GET_GINT8                (p)
+#define     GSF_LE_GET_GUINT64              (p)
+#define     GSF_LE_GET_GINT16               (p)
+#define     GSF_LE_GET_GUINT8               (p)
+#define     GSF_LE_GET_GINT32               (p)
+#define     GSF_LE_GET_GUINT16              (p)
+#define     GSF_LE_GET_GUINT32              (p)
+#define     GSF_LE_GET_GINT64               (p)
+guint64     gsf_le_get_guint64              (void const *p);
+#define     GSF_LE_GET_FLOAT                (p)
+float       gsf_le_get_float                (void const *p);
+#define     GSF_LE_GET_DOUBLE               (p)
+double      gsf_le_get_double               (void const *p);
+#define     GSF_LE_SET_GUINT8               (p, dat)
+#define     GSF_LE_SET_GUINT16              (p, dat)
+#define     GSF_LE_SET_GUINT32              (p, dat)
+#define     GSF_LE_SET_GINT8                (p,dat)
+#define     GSF_LE_SET_GINT16               (p,dat)
+#define     GSF_LE_SET_GINT32               (p,dat)
+#define     GSF_LE_SET_GINT64               (p,dat)
+#define     GSF_LE_SET_GUINT64              (p, dat)
+#define     GSF_LE_SET_FLOAT                (p,dat)
+#define     GSF_LE_SET_DOUBLE               (p,dat)
+void        gsf_le_set_float                (void *p,
+                                             float f);
+void        gsf_le_set_double               (void *p,
+                                             double d);
+
+            GsfTimestamp;
+GsfTimestamp* gsf_timestamp_new             (GDate const *date,
+                                             glong seconds,
+                                             char const *tz);
+GsfTimestamp* gsf_timestamp_new_now         (void);
+GsfTimestamp* gsf_timestamp_copy            (GsfTimestamp const *stamp);
+void        gsf_timestamp_free              (GsfTimestamp *stamp);
+char*       gsf_timestamp_as_string         (GsfTimestamp const *stamp);
+int         gsf_timestamp_parse             (char const *spec,
+                                             GsfTimestamp *stamp);
+guint       gsf_timestamp_hash              (GsfTimestamp const *stamp);
+gboolean    gsf_timestamp_equal             (GsfTimestamp const *a,
+                                             GsfTimestamp const *b);
+void        gsf_value_set_timestamp         (GValue *value,
+                                             GsfTimestamp const *stamp);
+#define     VAL_IS_GSF_TIMESTAMP            (v)
+
+
+GValue*     gsf_doc_prop_swap_val           (GsfDocProp *prop,
+                                             GValue *val);
+void        gsf_property_settings_collect   (GType object_type,
+                                             GParameter **p_params,
+                                             size_t *p_n_params,
+                                             const gchar *first_property_name,
+                                             ...);
+void        gsf_property_settings_collect_valist
+                                            (GType object_type,
+                                             GParameter **p_params,
+                                             size_t *p_n_params,
+                                             const gchar *first_property_name,
+                                             va_list var_args);
+void        gsf_property_settings_free      (GParameter *params,
+                                             size_t n_params);
+
+
+
+

Description

+

+ +

+
+
+

Details

+
+

+gsf_init ()

+
void        gsf_init                        (void);
+

+Initializes the GSF library

+

+ +

+
+
+
+

+gsf_shutdown ()

+
void        gsf_shutdown                    (void);
+

+De-intializes the GSF library

+

+ +

+
+
+
+

+gsf_init_dynamic ()

+
void        gsf_init_dynamic                (GTypeModule *module);
+

+ +

+
++ + + + +
+module : + + +
+
+
+
+

+gsf_shutdown_dynamic ()

+
void        gsf_shutdown_dynamic            (GTypeModule *module);
+

+ +

+
++ + + + +
+module : + + +
+
+
+
+

+libgsf_major_version

+
extern int libgsf_major_version;
+
+

+ +

+
+
+
+

+libgsf_minor_version

+
extern int libgsf_minor_version;
+
+

+ +

+
+
+
+

+libgsf_micro_version

+
extern int libgsf_micro_version;
+
+

+ +

+
+
+
+

+GSF_CLASS()

+
#define     GSF_CLASS(name, prefix, class_init, instance_init, parent)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+name : +
+prefix : +
+class_init : +
+instance_init : +
+parent : + + +
+
+
+
+

+GSF_CLASS_FULL()

+
#define     GSF_CLASS_FULL(name, prefix, base_init, base_finalize, \
+			   class_init, class_finalize, instance_init, parent_type, \
+		       abstract, interface_decl)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+name : +
+prefix : +
+base_init : +
+base_finalize : +@\ + class_init: +@\ + class_init: +
+class_finalize : +
+instance_init : +
+parent_type : +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +
+interface_decl : +
+
+
+
+

+GSF_CLASS_ABSTRACT()

+
#define     GSF_CLASS_ABSTRACT(name, prefix, class_init, instance_init, parent)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+name : +
+prefix : +
+class_init : +
+instance_init : +
+parent : + + +
+
+
+
+

+GSF_INTERFACE()

+
#define     GSF_INTERFACE(init_func, iface_type)
+

+ +

+
++ + + + + + + + + + +
+init_func : +
+iface_type : + + +
+
+
+
+

+GSF_INTERFACE_FULL()

+
#define     GSF_INTERFACE_FULL(type, init_func, iface_type)
+

+ +

+
++ + + + + + + + + + + + + + +
+type : +
+init_func : +
+iface_type : + + +
+
+
+
+

+GSF_DYNAMIC_CLASS()

+
#define     GSF_DYNAMIC_CLASS(name, prefix, class_init, instance_init, parent)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+name : +
+prefix : +
+class_init : +
+instance_init : +
+parent : +
+
+
+
+

+GSF_DYNAMIC_CLASS_FULL()

+
#define     GSF_DYNAMIC_CLASS_FULL(name, prefix, base_init, base_finalize, \
+				   class_init,  class_finalize, instance_init, parent_type, \
+			       abstract, interface_decl)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+name : +
+prefix : +
+base_init : +
+base_finalize : +@\ + class_init: +@\ + class_init: +
+class_finalize : +
+instance_init : +
+parent_type : +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +
+interface_decl : +
+
+
+
+

+GSF_DYNAMIC_CLASS_ABSTRACT()

+
#define     GSF_DYNAMIC_CLASS_ABSTRACT(name, prefix, class_init, instance_init, parent)
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+name : +
+prefix : +
+class_init : +
+instance_init : +
+parent : +
+
+
+
+

+GSF_DYNAMIC_INTERFACE()

+
#define     GSF_DYNAMIC_INTERFACE(init_func, iface_type, module)
+

+ +

+
++ + + + + + + + + + + + + + +
+init_func : +
+iface_type : +
+module : + + +
+
+
+
+

+GSF_DYNAMIC_INTERFACE_FULL()

+
#define     GSF_DYNAMIC_INTERFACE_FULL(type, init_func, iface_type, module)
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+type : +
+init_func : +
+iface_type : +
+module : + + +
+
+
+
+

+GSF_PARAM_STATIC

+
#define     GSF_PARAM_STATIC
+

+ +

+
+
+
+

+GSF_ERROR

+
#define GSF_ERROR (gsf_error_quark ())
+
+

+ This convenience macro simply calls gsf_error_quark(). You can use + it in calls to g_error_matches(), for example. The macro returns + the GQuark that is used to identify errors from libgsf functions. + Specific error codes come from the GsfError enumeration. +

+
+
+
+

+enum GsfError

+
typedef enum {
+	GSF_ERROR_OUT_OF_MEMORY,
+	GSF_ERROR_INVALID_DATA
+} GsfError;
+
+

+ Error codes that can be returned from libgsf functions in GError structures. +

+
++ + + + + + + + + + +
+GSF_ERROR_OUT_OF_MEMORYNot enough memory could be allocated to hold +a structure or object. +
+GSF_ERROR_INVALID_DATAA file being read contained invalid or +inconsistent data. + +
+
+
+
+

+gsf_error_quark ()

+
GQuark      gsf_error_quark                 (void);
+

+Returns the GQuark used to identify libgsf errors in GError structures. +Specific error codes come from the GsfError enumeration.

+

+ +

+
++ + + + +
+Returns : A GQuark. +
+
+
+
+

+gsf_mem_dump ()

+
void        gsf_mem_dump                    (guint8 const *ptr,
+                                             size_t len);
+

+Dump len bytes from the memory location given by ptr.

+

+ +

+
++ + + + + + + + + + +
+ptr : memory area to be dumped. +
+len : how many bytes will be dumped. +
+
+
+
+

+gsf_input_dump ()

+
void        gsf_input_dump                  (GsfInput *input,
+                                             gboolean dump_as_hex);
+

+Dumps input's contents to STDOUT, optionally in hex format.

+

+ +

+
++ + + + + + + + + + +
+input : a GsfInput +
+dump_as_hex : If TRUE, dump in hexidecmal format +
+
+
+
+

+GSF_OFF_T_FORMAT

+
#define GSF_OFF_T_FORMAT	G_GINT64_FORMAT
+
+

+ +

+
+
+
+

+gsf_off_t

+
typedef gint64 gsf_off_t;
+
+

+ +

+
+
+
+

+gsf_filename_to_utf8 ()

+
char*       gsf_filename_to_utf8            (char const *filename,
+                                             gboolean quoted);
+

+A utility wrapper to make sure filenames are valid utf8. +Caller must g_free the result.

+

+ +

+
++ + + + + + + + + + + + + + +
+filename : file name suitable for open(2). +
+quoted : if TRUE, the resulting utf8 file name will be quoted + (unless it is invalid). +
+Returns : +filename using utf-8 encoding for display +
+
+
+
+

+gsf_iconv_close ()

+
void        gsf_iconv_close                 (GIConv handle);
+

+

+

+ +

+
++ + + + +
+handle : +
+
+
+
+

+gsf_extension_pointer ()

+
charconst * gsf_extension_pointer           (char const *path);
+

+Extracts the extension from the end of a filename (the part after the final +'.' in the filename).

+

+ +

+
++ + + + + + + + + + +
+path : A filename or file path. +
+Returns : A pointer to the extension part of the filename, or a +pointer to the end of the string if the filename does not +have an extension. +
+
+
+
+

+gsf_base64_encode_simple ()

+
guint8*     gsf_base64_encode_simple        (guint8 const *data,
+                                             size_t len);
+

+ +

+
++ + + + + + + + + + + + + + +
+data : +
+len : +
+Returns : + + +
+
+
+
+

+gsf_base64_encode_close ()

+
size_t      gsf_base64_encode_close         (guint8 const *in,
+                                             size_t inlen,
+                                             gboolean break_lines,
+                                             guint8 *out,
+                                             int *state,
+                                             guint *save);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+in : +
+inlen : +
+break_lines : +
+out : +
+state : +
+save : +
+Returns : + + +
+
+
+
+

+gsf_base64_encode_step ()

+
size_t      gsf_base64_encode_step          (guint8 const *in,
+                                             size_t len,
+                                             gboolean break_lines,
+                                             guint8 *out,
+                                             int *state,
+                                             guint *save);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+in : +
+len : +
+break_lines : +
+out : +
+state : +
+save : +
+Returns : + + +
+
+
+
+

+gsf_base64_decode_simple ()

+
size_t      gsf_base64_decode_simple        (guint8 *data,
+                                             size_t len);
+

+ +

+
++ + + + + + + + + + + + + + +
+data : +
+len : +
+Returns : + + +
+
+
+
+

+gsf_base64_decode_step ()

+
size_t      gsf_base64_decode_step          (guint8 const *in,
+                                             size_t len,
+                                             guint8 *out,
+                                             int *state,
+                                             guint *save);
+

+Decodes a chunk of base64 encoded data

+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + + + + + +
+in : input stream +
+len : max length of data to decode +
+out : output stream +
+state : holds the number of bits that are stored in save +
+save : leftover bits that have not yet been decoded +
+Returns :the number of bytes converted +
+
+
+
+

+GSF_LE_GET_GINT8()

+
#define GSF_LE_GET_GINT8(p) ((gint8)GSF_LE_GET_GUINT8(p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GUINT64()

+
#define GSF_LE_GET_GUINT64(p) (gsf_le_get_guint64 (p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GINT16()

+
#define GSF_LE_GET_GINT16(p) ((gint16)GSF_LE_GET_GUINT16(p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GUINT8()

+
#define GSF_LE_GET_GUINT8(p) (*(guint8 const *)(p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GINT32()

+
#define GSF_LE_GET_GINT32(p) ((gint32)GSF_LE_GET_GUINT32(p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GUINT16()

+
#define     GSF_LE_GET_GUINT16(p)
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GUINT32()

+
#define     GSF_LE_GET_GUINT32(p)
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+GSF_LE_GET_GINT64()

+
#define GSF_LE_GET_GINT64(p) ((gint64)GSF_LE_GET_GUINT64(p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+gsf_le_get_guint64 ()

+
guint64     gsf_le_get_guint64              (void const *p);
+

+ +

+
++ + + + + + + + + + +
+p : +
+Returns : + + +
+
+
+
+

+GSF_LE_GET_FLOAT()

+
#define GSF_LE_GET_FLOAT(p) (gsf_le_get_float (p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+gsf_le_get_float ()

+
float       gsf_le_get_float                (void const *p);
+

+ +

+
++ + + + + + + + + + +
+p : +
+Returns : + + +
+
+
+
+

+GSF_LE_GET_DOUBLE()

+
#define GSF_LE_GET_DOUBLE(p) (gsf_le_get_double (p))
+
+

+ +

+
++ + + + +
+p : + + +
+
+
+
+

+gsf_le_get_double ()

+
double      gsf_le_get_double               (void const *p);
+

+ +

+
++ + + + + + + + + + +
+p : +
+Returns : + + +
+
+
+
+

+GSF_LE_SET_GUINT8()

+
#define     GSF_LE_SET_GUINT8(p, dat)
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GUINT16()

+
#define     GSF_LE_SET_GUINT16(p, dat)
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GUINT32()

+
#define     GSF_LE_SET_GUINT32(p, dat)
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GINT8()

+
#define GSF_LE_SET_GINT8(p,dat) GSF_LE_SET_GUINT8((p),(dat))
+
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GINT16()

+
#define GSF_LE_SET_GINT16(p,dat) GSF_LE_SET_GUINT16((p),(dat))
+
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GINT32()

+
#define GSF_LE_SET_GINT32(p,dat) GSF_LE_SET_GUINT32((p),(dat))
+
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GINT64()

+
#define GSF_LE_SET_GINT64(p,dat) GSF_LE_SET_GUINT64((p),(dat))
+
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_GUINT64()

+
#define     GSF_LE_SET_GUINT64(p, dat)
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_FLOAT()

+
#define GSF_LE_SET_FLOAT(p,dat) gsf_le_set_float((p),(dat))
+
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+GSF_LE_SET_DOUBLE()

+
#define GSF_LE_SET_DOUBLE(p,dat) gsf_le_set_double((p),(dat))
+
+

+ +

+
++ + + + + + + + + + +
+p : +
+dat : + + +
+
+
+
+

+gsf_le_set_float ()

+
void        gsf_le_set_float                (void *p,
+                                             float f);
+

+ +

+
++ + + + + + + + + + +
+p : +
+f : + + +
+
+
+
+

+gsf_le_set_double ()

+
void        gsf_le_set_double               (void *p,
+                                             double d);
+

+ +

+
++ + + + + + + + + + +
+p : +
+d : + + +
+
+
+
+

+GsfTimestamp

+
typedef struct {
+	GDate	  date;			/* In local timezone */
+	glong     seconds;		/* time of day */
+	GString	  time_zone;		/* possibly blank */
+
+	guint32	  timet;
+} GsfTimestamp;
+
+

+ +

+
+
+
+

+gsf_timestamp_new ()

+
GsfTimestamp* gsf_timestamp_new             (GDate const *date,
+                                             glong seconds,
+                                             char const *tz);
+

+ +

+
++ + + + + + + + + + + + + + + + + + +
+date : +
+seconds : +
+tz : +
+Returns : + + +
+
+
+
+

+gsf_timestamp_new_now ()

+
GsfTimestamp* gsf_timestamp_new_now         (void);
+

+ +

+
++ + + + +
+Returns : + + +
+
+
+
+

+gsf_timestamp_copy ()

+
GsfTimestamp* gsf_timestamp_copy            (GsfTimestamp const *stamp);
+

+ +

+
++ + + + + + + + + + +
+stamp : +
+Returns : + + +
+
+
+
+

+gsf_timestamp_free ()

+
void        gsf_timestamp_free              (GsfTimestamp *stamp);
+

+ +

+
++ + + + +
+stamp : + + +
+
+
+
+

+gsf_timestamp_as_string ()

+
char*       gsf_timestamp_as_string         (GsfTimestamp const *stamp);
+

+ +

+
++ + + + + + + + + + +
+stamp : +
+Returns : + + +
+
+
+
+

+gsf_timestamp_parse ()

+
int         gsf_timestamp_parse             (char const *spec,
+                                             GsfTimestamp *stamp);
+

+ +

+
++ + + + + + + + + + + + + + +
+spec : +
+stamp : +
+Returns : + + +
+
+
+
+

+gsf_timestamp_hash ()

+
guint       gsf_timestamp_hash              (GsfTimestamp const *stamp);
+

+ +

+
++ + + + + + + + + + +
+stamp : +
+Returns : + + +
+
+
+
+

+gsf_timestamp_equal ()

+
gboolean    gsf_timestamp_equal             (GsfTimestamp const *a,
+                                             GsfTimestamp const *b);
+

+ +

+
++ + + + + + + + + + + + + + +
+a : +
+b : +
+Returns : + + +
+
+
+
+

+gsf_value_set_timestamp ()

+
void        gsf_value_set_timestamp         (GValue *value,
+                                             GsfTimestamp const *stamp);
+

+ +

+
++ + + + + + + + + + +
+value : +
+stamp : + + +
+
+
+
+

+VAL_IS_GSF_TIMESTAMP()

+
#define VAL_IS_GSF_TIMESTAMP(v) (G_TYPE_CHECK_VALUE_TYPE((v), GSF_TIMESTAMP_TYPE))
+
+

+ +

+
++ + + + +
+v : + + +
+
+
+
+

+gsf_doc_prop_swap_val ()

+
GValue*     gsf_doc_prop_swap_val           (GsfDocProp *prop,
+                                             GValue *val);
+

+

+

+ +

+
++ + + + + + + + + + + + + + +
+prop : GsfDocProp +
+val : GValue +
+Returns :the current value of prop, and replaces it with val + Caller is responsible for unsetting and freeing the result. +
+
+
+
+

+gsf_property_settings_collect ()

+
void        gsf_property_settings_collect   (GType object_type,
+                                             GParameter **p_params,
+                                             size_t *p_n_params,
+                                             const gchar *first_property_name,
+                                             ...);
+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+object_type : +
+p_params : +
+p_n_params : +
+first_property_name : +
+... : + + +
+
+
+
+

+gsf_property_settings_collect_valist ()

+
void        gsf_property_settings_collect_valist
+                                            (GType object_type,
+                                             GParameter **p_params,
+                                             size_t *p_n_params,
+                                             const gchar *first_property_name,
+                                             va_list var_args);
+

+This function builds a GParameter array suitable for g_object_newv.

+

+ +

+
++ + + + + + + + + + + + + + + + + + + + + + +
+object_type : the GType for which the properties are being set. +
+p_params : a pointer to the GParameter array that holds the properties. + (Used for both input and output. This may point to a NULL pointer if + there are no properties collected yet.) +
+p_n_params : a pointer to the number of properties collected. (Used for + both input and output.) +
+first_property_name : the name of the first property being set, or NULL. +
+var_args : a va_list holding the remainder of the property names and + values, terminated by a NULL. +
+
+
+
+

+gsf_property_settings_free ()

+
void        gsf_property_settings_free      (GParameter *params,
+                                             size_t n_params);
+

+ +

+
++ + + + + + + + + + +
+params : +
+n_params : + + + + + + +
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/gsf.devhelp b/lib/libgsf-1.12.3/doc/html/gsf.devhelp new file mode 100644 index 0000000000..0cb43a8fc2 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/gsf.devhelp @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/home.png b/lib/libgsf-1.12.3/doc/html/home.png new file mode 100644 index 0000000000..17003611d9 Binary files /dev/null and b/lib/libgsf-1.12.3/doc/html/home.png differ diff --git a/lib/libgsf-1.12.3/doc/html/index.html b/lib/libgsf-1.12.3/doc/html/index.html new file mode 100644 index 0000000000..8017ac9bb4 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/index.html @@ -0,0 +1,107 @@ + + + +GSF Reference Manual + + + + + + + + + + + + + + +
+
+
+
+
+
+

Table of Contents

+
+
I. GSF Overview
+
II. API Reference
+
+
Basic Input/Output
+
+
+Input from unstructured files - +
+
+Output to unstructured files - +
+
+
Stream Sources
+
+
+Infile reading structed files - +
+
+Outfile writing structed files - +
+
+Reading and Writing from local files and directories - +
+
+memory - +
+
+GIOChannel - +
+
+GnomeVFS - +
+
+Bononbo - +
+
+
Stream Parsers
+
+
+Text - +
+
+XML and libxml - +
+
+Zip - +
+
+Compression - +
+
+MS OLE2 - +
+
+metadata - +
+
+GsfBlob - A generic, unstructured block of binary data +
+
+GsfClipData - Object to hold clipboard data from a VT_CF section +
+
+Structured Blobs - +
+
+
Miscellaneous
+
+utils - +
+
+
Index
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/index.sgml b/lib/libgsf-1.12.3/doc/html/index.sgml new file mode 100644 index 0000000000..aa0b3a944c --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/index.sgml @@ -0,0 +1,498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/into.html b/lib/libgsf-1.12.3/doc/html/into.html new file mode 100644 index 0000000000..223cde8ce0 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/into.html @@ -0,0 +1,62 @@ + + + +Part I. GSF Overview + + + + + + + + + + + + + + + + + + + + + + +
+

+GSF Overview

+
+
+

+The GNOME Structured File Library (GSF) is an I/O abstraction for +reading/writing compound files. GSF is released under the GNU Lesser General +Public License (GNU LGPL), which allows for flexible licensing of client +applications. +

+

+GSF depends on the following libraries: +

+
++ + + + +
+GLib

+A general-purpose utility library, not specific to graphical user interfaces. +GLib provides many useful data types, macros, type conversions, +string utilities, file utilities, a main loop abstraction, and so on. +

+

+

+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/io.html b/lib/libgsf-1.12.3/doc/html/io.html new file mode 100644 index 0000000000..fcc23a0149 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/io.html @@ -0,0 +1,45 @@ + + + +Basic Input/Output + + + + + + + + + + + + + + + + + + + + + + + +
+

+Basic Input/Output

+ +
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/ix01.html b/lib/libgsf-1.12.3/doc/html/ix01.html new file mode 100644 index 0000000000..7013a337cd --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/ix01.html @@ -0,0 +1,973 @@ + + + +Index + + + + + + + + + + + + + + + + + + + + +
+

+Index

+
+    GObject
+        GsfInput
+            GsfInfile
+                GsfInfileMSOle
+                GsfInfileStdio
+                GsfInfileZip
+                GsfStructuredBlob
+            GsfInputGZip
+            GsfInputMemory
+            GsfInputStdio
+            GsfInputTextline
+        GsfXMLOut
+        GsfOutput
+            GsfOutfile
+                GsfOutfileMSOle
+                GsfOutfileStdio
+                GsfOutfileZip
+            GsfOutputBzip
+            GsfOutputIOChannel
+            GsfOutputMemory
+            GsfOutputStdio
+        GsfSharedMemory
+
+
+
+

B

+
+
BAT_INDEX_SIZE, BAT_INDEX_SIZE +
+
BAT_MAGIC_BAT, BAT_MAGIC_BAT +
+
BAT_MAGIC_END_OF_CHAIN, BAT_MAGIC_END_OF_CHAIN +
+
BAT_MAGIC_METABAT, BAT_MAGIC_METABAT +
+
BAT_MAGIC_UNUSED, BAT_MAGIC_UNUSED +
+
+
+
+

D

+
+
DIRENT_CHILD, DIRENT_CHILD +
+
DIRENT_CLSID, DIRENT_CLSID +
+
DIRENT_COLOUR, DIRENT_COLOUR +
+
DIRENT_CREATE_TIME, DIRENT_CREATE_TIME +
+
DIRENT_DETAILS_SIZE, DIRENT_DETAILS_SIZE +
+
DIRENT_FILE_SIZE, DIRENT_FILE_SIZE +
+
DIRENT_FIRSTBLOCK, DIRENT_FIRSTBLOCK +
+
DIRENT_MAGIC_END, DIRENT_MAGIC_END +
+
DIRENT_MAX_NAME_SIZE, DIRENT_MAX_NAME_SIZE +
+
DIRENT_MODIFY_TIME, DIRENT_MODIFY_TIME +
+
DIRENT_NAME_LEN, DIRENT_NAME_LEN +
+
DIRENT_NEXT, DIRENT_NEXT +
+
DIRENT_PREV, DIRENT_PREV +
+
DIRENT_SIZE, DIRENT_SIZE +
+
DIRENT_TYPE, DIRENT_TYPE +
+
DIRENT_TYPE_DIR, DIRENT_TYPE_DIR +
+
DIRENT_TYPE_FILE, DIRENT_TYPE_FILE +
+
DIRENT_TYPE_INVALID, DIRENT_TYPE_INVALID +
+
DIRENT_TYPE_LOCKBYTES, DIRENT_TYPE_LOCKBYTES +
+
DIRENT_TYPE_PROPERTY, DIRENT_TYPE_PROPERTY +
+
DIRENT_TYPE_ROOTDIR, DIRENT_TYPE_ROOTDIR +
+
DIRENT_USERFLAGS, DIRENT_USERFLAGS +
+
+
+
+

G

+
+
GsfBlob, GsfBlob +
+
GsfBlobClass, GsfBlobClass +
+
GsfClipData, GsfClipData +
+
GsfClipDataClass, GsfClipDataClass +
+
GsfClipFormat, enum GsfClipFormat +
+
GsfClipFormatWindows, enum GsfClipFormatWindows +
+
GsfDocMetaData, GsfDocMetaData +
+
GsfDocProp, GsfDocProp +
+
GsfDocPropVector, GsfDocPropVector +
+
GsfError, enum GsfError +
+
GsfInfile, GsfInfile +
+
GsfInfileMSOle, GsfInfileMSOle +
+
GsfInfileStdio, GsfInfileStdio +
+
GsfInfileZip, GsfInfileZip +
+
GsfInput, GsfInput +
+
GsfInputBonobo, GsfInputBonobo +
+
GsfInputGnomeVFS, GsfInputGnomeVFS +
+
GsfInputGZip, GsfInputGZip +
+
GsfInputMemory, GsfInputMemory +
+
GsfInputProxy, GsfInputProxy +
+
GsfInputStdio, GsfInputStdio +
+
GsfInputTextline, GsfInputTextline +
+
GsfOutfile, GsfOutfile +
+
GsfOutfileMSOle, GsfOutfileMSOle +
+
GsfOutfileStdio, GsfOutfileStdio +
+
GsfOutfileZip, GsfOutfileZip +
+
GsfOutput, GsfOutput +
+
GsfOutputBonobo, GsfOutputBonobo +
+
GsfOutputBzip, GsfOutputBzip +
+
GsfOutputCsv, GsfOutputCsv +
+
GsfOutputCsvQuotingMode, enum GsfOutputCsvQuotingMode +
+
GsfOutputGnomeVFS, GsfOutputGnomeVFS +
+
GsfOutputGZip, GsfOutputGZip +
+
GsfOutputIconv, GsfOutputIconv +
+
GsfOutputIOChannel, GsfOutputIOChannel +
+
GsfOutputMemory, GsfOutputMemory +
+
GsfOutputStdio, GsfOutputStdio +
+
GsfSharedBonoboStream, GsfSharedBonoboStream +
+
GsfSharedMemory, GsfSharedMemory +
+
GsfStructuredBlob, GsfStructuredBlob +
+
GsfTimestamp, GsfTimestamp +
+
GsfXMLBlob, GsfXMLBlob +
+
GsfXMLContent, enum GsfXMLContent +
+
GsfXMLIn, GsfXMLIn +
+
GsfXMLInDoc, GsfXMLInDoc +
+
GsfXMLInNode, GsfXMLInNode +
+
GsfXMLInNS, GsfXMLInNS +
+
GsfXMLInUnknownFunc, GsfXMLInUnknownFunc () +
+
GsfXMLOut, GsfXMLOut +
+
GsfZipCompressionMethod, enum GsfZipCompressionMethod +
+
GsfZipDirent, GsfZipDirent +
+
GsfZipVDir, GsfZipVDir +
+
gsf_base64_decode_simple, gsf_base64_decode_simple () +
+
gsf_base64_decode_step, gsf_base64_decode_step () +
+
gsf_base64_encode_close, gsf_base64_encode_close () +
+
gsf_base64_encode_simple, gsf_base64_encode_simple () +
+
gsf_base64_encode_step, gsf_base64_encode_step () +
+
gsf_blob_get_size, gsf_blob_get_size () +
+
gsf_blob_new, gsf_blob_new () +
+
gsf_blob_peek_data, gsf_blob_peek_data () +
+
GSF_CLASS, GSF_CLASS() +
+
GSF_CLASS_ABSTRACT, GSF_CLASS_ABSTRACT() +
+
GSF_CLASS_FULL, GSF_CLASS_FULL() +
+
gsf_clip_data_get_data_blob, gsf_clip_data_get_data_blob () +
+
gsf_clip_data_get_format, gsf_clip_data_get_format () +
+
gsf_clip_data_get_windows_clipboard_format, gsf_clip_data_get_windows_clipboard_format () +
+
gsf_clip_data_new, gsf_clip_data_new () +
+
gsf_clip_data_peek_real_data, gsf_clip_data_peek_real_data () +
+
gsf_docprop_vector_append, gsf_docprop_vector_append () +
+
gsf_docprop_vector_as_string, gsf_docprop_vector_as_string () +
+
gsf_docprop_vector_new, gsf_docprop_vector_new () +
+
gsf_doc_meta_data_foreach, gsf_doc_meta_data_foreach () +
+
gsf_doc_meta_data_insert, gsf_doc_meta_data_insert () +
+
gsf_doc_meta_data_lookup, gsf_doc_meta_data_lookup () +
+
gsf_doc_meta_data_new, gsf_doc_meta_data_new () +
+
gsf_doc_meta_data_remove, gsf_doc_meta_data_remove () +
+
gsf_doc_meta_data_size, gsf_doc_meta_data_size () +
+
gsf_doc_meta_data_steal, gsf_doc_meta_data_steal () +
+
gsf_doc_meta_data_store, gsf_doc_meta_data_store () +
+
gsf_doc_prop_free, gsf_doc_prop_free () +
+
gsf_doc_prop_get_link, gsf_doc_prop_get_link () +
+
gsf_doc_prop_get_name, gsf_doc_prop_get_name () +
+
gsf_doc_prop_get_val, gsf_doc_prop_get_val () +
+
gsf_doc_prop_new, gsf_doc_prop_new () +
+
gsf_doc_prop_set_link, gsf_doc_prop_set_link () +
+
gsf_doc_prop_set_val, gsf_doc_prop_set_val () +
+
gsf_doc_prop_swap_val, gsf_doc_prop_swap_val () +
+
GSF_DYNAMIC_CLASS, GSF_DYNAMIC_CLASS() +
+
GSF_DYNAMIC_CLASS_ABSTRACT, GSF_DYNAMIC_CLASS_ABSTRACT() +
+
GSF_DYNAMIC_CLASS_FULL, GSF_DYNAMIC_CLASS_FULL() +
+
GSF_DYNAMIC_INTERFACE, GSF_DYNAMIC_INTERFACE() +
+
GSF_DYNAMIC_INTERFACE_FULL, GSF_DYNAMIC_INTERFACE_FULL() +
+
GSF_ERROR, GSF_ERROR +
+
gsf_error_quark, gsf_error_quark () +
+
gsf_extension_pointer, gsf_extension_pointer () +
+
gsf_filename_to_utf8, gsf_filename_to_utf8 () +
+
gsf_iconv_close, gsf_iconv_close () +
+
gsf_infile_child_by_index, gsf_infile_child_by_index () +
+
gsf_infile_child_by_name, gsf_infile_child_by_name () +
+
gsf_infile_child_by_vname, gsf_infile_child_by_vname () +
+
gsf_infile_msole_get_class_id, gsf_infile_msole_get_class_id () +
+
gsf_infile_msole_new, gsf_infile_msole_new () +
+
gsf_infile_name_by_index, gsf_infile_name_by_index () +
+
gsf_infile_num_children, gsf_infile_num_children () +
+
gsf_infile_stdio_new, gsf_infile_stdio_new () +
+
gsf_infile_zip_new, gsf_infile_zip_new () +
+
gsf_init, gsf_init () +
+
gsf_init_dynamic, gsf_init_dynamic () +
+
gsf_input_bonobo_new, gsf_input_bonobo_new () +
+
gsf_input_container, gsf_input_container () +
+
gsf_input_copy, gsf_input_copy () +
+
gsf_input_dump, gsf_input_dump () +
+
gsf_input_dup, gsf_input_dup () +
+
gsf_input_eof, gsf_input_eof () +
+
gsf_input_error, gsf_input_error () +
+
gsf_input_error_id, gsf_input_error_id () +
+
gsf_input_gnomevfs_needs_local_copy, gsf_input_gnomevfs_needs_local_copy () +
+
gsf_input_gnomevfs_new, gsf_input_gnomevfs_new () +
+
gsf_input_gnomevfs_new_uri, gsf_input_gnomevfs_new_uri () +
+
gsf_input_gzip_new, gsf_input_gzip_new () +
+
gsf_input_memory_new, gsf_input_memory_new () +
+
gsf_input_memory_new_clone, gsf_input_memory_new_clone () +
+
gsf_input_memory_new_from_bzip, gsf_input_memory_new_from_bzip () +
+
gsf_input_memory_new_from_iochannel, gsf_input_memory_new_from_iochannel () +
+
gsf_input_mmap_new, gsf_input_mmap_new () +
+
gsf_input_name, gsf_input_name () +
+
gsf_input_proxy_new, gsf_input_proxy_new () +
+
gsf_input_proxy_new_section, gsf_input_proxy_new_section () +
+
gsf_input_read, gsf_input_read () +
+
gsf_input_remaining, gsf_input_remaining () +
+
gsf_input_seek, gsf_input_seek () +
+
gsf_input_seek_emulate, gsf_input_seek_emulate () +
+
gsf_input_set_container, gsf_input_set_container () +
+
gsf_input_set_name, gsf_input_set_name () +
+
gsf_input_set_name_from_filename, gsf_input_set_name_from_filename () +
+
gsf_input_set_size, gsf_input_set_size () +
+
gsf_input_sibling, gsf_input_sibling () +
+
gsf_input_size, gsf_input_size () +
+
gsf_input_stdio_new, gsf_input_stdio_new () +
+
gsf_input_tell, gsf_input_tell () +
+
gsf_input_textline_ascii_gets, gsf_input_textline_ascii_gets () +
+
gsf_input_textline_new, gsf_input_textline_new () +
+
gsf_input_textline_utf8_gets, gsf_input_textline_utf8_gets () +
+
gsf_input_uncompress, gsf_input_uncompress () +
+
GSF_INTERFACE, GSF_INTERFACE() +
+
GSF_INTERFACE_FULL, GSF_INTERFACE_FULL() +
+
GSF_LE_GET_DOUBLE, GSF_LE_GET_DOUBLE() +
+
gsf_le_get_double, gsf_le_get_double () +
+
GSF_LE_GET_FLOAT, GSF_LE_GET_FLOAT() +
+
gsf_le_get_float, gsf_le_get_float () +
+
GSF_LE_GET_GINT16, GSF_LE_GET_GINT16() +
+
GSF_LE_GET_GINT32, GSF_LE_GET_GINT32() +
+
GSF_LE_GET_GINT64, GSF_LE_GET_GINT64() +
+
GSF_LE_GET_GINT8, GSF_LE_GET_GINT8() +
+
GSF_LE_GET_GUINT16, GSF_LE_GET_GUINT16() +
+
GSF_LE_GET_GUINT32, GSF_LE_GET_GUINT32() +
+
GSF_LE_GET_GUINT64, GSF_LE_GET_GUINT64() +
+
gsf_le_get_guint64, gsf_le_get_guint64 () +
+
GSF_LE_GET_GUINT8, GSF_LE_GET_GUINT8() +
+
GSF_LE_SET_DOUBLE, GSF_LE_SET_DOUBLE() +
+
gsf_le_set_double, gsf_le_set_double () +
+
GSF_LE_SET_FLOAT, GSF_LE_SET_FLOAT() +
+
gsf_le_set_float, gsf_le_set_float () +
+
GSF_LE_SET_GINT16, GSF_LE_SET_GINT16() +
+
GSF_LE_SET_GINT32, GSF_LE_SET_GINT32() +
+
GSF_LE_SET_GINT64, GSF_LE_SET_GINT64() +
+
GSF_LE_SET_GINT8, GSF_LE_SET_GINT8() +
+
GSF_LE_SET_GUINT16, GSF_LE_SET_GUINT16() +
+
GSF_LE_SET_GUINT32, GSF_LE_SET_GUINT32() +
+
GSF_LE_SET_GUINT64, GSF_LE_SET_GUINT64() +
+
GSF_LE_SET_GUINT8, GSF_LE_SET_GUINT8() +
+
gsf_mem_dump, gsf_mem_dump () +
+
GSF_META_NAME_BYTE_COUNT, GSF_META_NAME_BYTE_COUNT +
+
GSF_META_NAME_CASE_SENSITIVE, GSF_META_NAME_CASE_SENSITIVE +
+
GSF_META_NAME_CATEGORY, GSF_META_NAME_CATEGORY +
+
GSF_META_NAME_CELL_COUNT, GSF_META_NAME_CELL_COUNT +
+
GSF_META_NAME_CHARACTER_COUNT, GSF_META_NAME_CHARACTER_COUNT +
+
GSF_META_NAME_COMPANY, GSF_META_NAME_COMPANY +
+
GSF_META_NAME_CREATOR, GSF_META_NAME_CREATOR +
+
GSF_META_NAME_DATE_CREATED, GSF_META_NAME_DATE_CREATED +
+
GSF_META_NAME_DATE_MODIFIED, GSF_META_NAME_DATE_MODIFIED +
+
GSF_META_NAME_DESCRIPTION, GSF_META_NAME_DESCRIPTION +
+
GSF_META_NAME_DICTIONARY, GSF_META_NAME_DICTIONARY +
+
GSF_META_NAME_DOCUMENT_PARTS, GSF_META_NAME_DOCUMENT_PARTS +
+
GSF_META_NAME_EDITING_DURATION, GSF_META_NAME_EDITING_DURATION +
+
GSF_META_NAME_GENERATOR, GSF_META_NAME_GENERATOR +
+
GSF_META_NAME_HEADING_PAIRS, GSF_META_NAME_HEADING_PAIRS +
+
GSF_META_NAME_HIDDEN_SLIDE_COUNT, GSF_META_NAME_HIDDEN_SLIDE_COUNT +
+
GSF_META_NAME_IMAGE_COUNT, GSF_META_NAME_IMAGE_COUNT +
+
GSF_META_NAME_KEYWORDS, GSF_META_NAME_KEYWORDS +
+
GSF_META_NAME_LANGUAGE, GSF_META_NAME_LANGUAGE +
+
GSF_META_NAME_LAST_PRINTED, GSF_META_NAME_LAST_PRINTED +
+
GSF_META_NAME_LAST_SAVED_BY, GSF_META_NAME_LAST_SAVED_BY +
+
GSF_META_NAME_LINE_COUNT, GSF_META_NAME_LINE_COUNT +
+
GSF_META_NAME_LINKS_DIRTY, GSF_META_NAME_LINKS_DIRTY +
+
GSF_META_NAME_LOCALE_SYSTEM_DEFAULT, GSF_META_NAME_LOCALE_SYSTEM_DEFAULT +
+
GSF_META_NAME_MANAGER, GSF_META_NAME_MANAGER +
+
GSF_META_NAME_MM_CLIP_COUNT, GSF_META_NAME_MM_CLIP_COUNT +
+
GSF_META_NAME_MSOLE_UNKNOWN_17, GSF_META_NAME_MSOLE_UNKNOWN_17 +
+
GSF_META_NAME_MSOLE_UNKNOWN_18, GSF_META_NAME_MSOLE_UNKNOWN_18 +
+
GSF_META_NAME_MSOLE_UNKNOWN_19, GSF_META_NAME_MSOLE_UNKNOWN_19 +
+
GSF_META_NAME_MSOLE_UNKNOWN_20, GSF_META_NAME_MSOLE_UNKNOWN_20 +
+
GSF_META_NAME_MSOLE_UNKNOWN_21, GSF_META_NAME_MSOLE_UNKNOWN_21 +
+
GSF_META_NAME_MSOLE_UNKNOWN_22, GSF_META_NAME_MSOLE_UNKNOWN_22 +
+
GSF_META_NAME_MSOLE_UNKNOWN_23, GSF_META_NAME_MSOLE_UNKNOWN_23 +
+
GSF_META_NAME_NOTE_COUNT, GSF_META_NAME_NOTE_COUNT +
+
GSF_META_NAME_OBJECT_COUNT, GSF_META_NAME_OBJECT_COUNT +
+
GSF_META_NAME_PAGE_COUNT, GSF_META_NAME_PAGE_COUNT +
+
GSF_META_NAME_PARAGRAPH_COUNT, GSF_META_NAME_PARAGRAPH_COUNT +
+
GSF_META_NAME_PRESENTATION_FORMAT, GSF_META_NAME_PRESENTATION_FORMAT +
+
GSF_META_NAME_REVISION_COUNT, GSF_META_NAME_REVISION_COUNT +
+
GSF_META_NAME_SCALE, GSF_META_NAME_SCALE +
+
GSF_META_NAME_SECURITY, GSF_META_NAME_SECURITY +
+
GSF_META_NAME_SLIDE_COUNT, GSF_META_NAME_SLIDE_COUNT +
+
GSF_META_NAME_SPREADSHEET_COUNT, GSF_META_NAME_SPREADSHEET_COUNT +
+
GSF_META_NAME_SUBJECT, GSF_META_NAME_SUBJECT +
+
GSF_META_NAME_TABLE_COUNT, GSF_META_NAME_TABLE_COUNT +
+
GSF_META_NAME_TEMPLATE, GSF_META_NAME_TEMPLATE +
+
GSF_META_NAME_THUMBNAIL, GSF_META_NAME_THUMBNAIL +
+
GSF_META_NAME_TITLE, GSF_META_NAME_TITLE +
+
GSF_META_NAME_WORD_COUNT, GSF_META_NAME_WORD_COUNT +
+
gsf_msole_codepage_to_lid, gsf_msole_codepage_to_lid () +
+
gsf_msole_iconv_open_codepages_for_export, gsf_msole_iconv_open_codepages_for_export () +
+
gsf_msole_iconv_open_codepage_for_export, gsf_msole_iconv_open_codepage_for_export () +
+
gsf_msole_iconv_open_codepage_for_import, gsf_msole_iconv_open_codepage_for_import () +
+
gsf_msole_iconv_open_for_export, gsf_msole_iconv_open_for_export () +
+
gsf_msole_iconv_open_for_import, gsf_msole_iconv_open_for_import () +
+
gsf_msole_iconv_win_codepage, gsf_msole_iconv_win_codepage () +
+
gsf_msole_inflate, gsf_msole_inflate () +
+
gsf_msole_language_for_lid, gsf_msole_language_for_lid () +
+
gsf_msole_lid_for_language, gsf_msole_lid_for_language () +
+
gsf_msole_lid_to_codepage, gsf_msole_lid_to_codepage () +
+
gsf_msole_lid_to_codepage_str, gsf_msole_lid_to_codepage_str () +
+
gsf_msole_metadata_read, gsf_msole_metadata_read () +
+
gsf_msole_metadata_write, gsf_msole_metadata_write () +
+
gsf_off_t, gsf_off_t +
+
GSF_OFF_T_FORMAT, GSF_OFF_T_FORMAT +
+
gsf_outfile_msole_new, gsf_outfile_msole_new () +
+
gsf_outfile_msole_new_full, gsf_outfile_msole_new_full () +
+
gsf_outfile_msole_set_class_id, gsf_outfile_msole_set_class_id () +
+
gsf_outfile_new_child, gsf_outfile_new_child () +
+
gsf_outfile_new_child_full, gsf_outfile_new_child_full () +
+
gsf_outfile_new_child_varg, gsf_outfile_new_child_varg () +
+
gsf_outfile_stdio_new, gsf_outfile_stdio_new () +
+
gsf_outfile_stdio_new_full, gsf_outfile_stdio_new_full () +
+
gsf_outfile_stdio_new_valist, gsf_outfile_stdio_new_valist () +
+
gsf_outfile_zip_new, gsf_outfile_zip_new () +
+
gsf_outfile_zip_set_compression_method, gsf_outfile_zip_set_compression_method () +
+
gsf_output_bonobo_new, gsf_output_bonobo_new () +
+
gsf_output_bzip_new, gsf_output_bzip_new () +
+
gsf_output_close, gsf_output_close () +
+
gsf_output_container, gsf_output_container () +
+
gsf_output_csv_write_eol, gsf_output_csv_write_eol () +
+
gsf_output_csv_write_field, gsf_output_csv_write_field () +
+
gsf_output_error, gsf_output_error () +
+
gsf_output_error_id, gsf_output_error_id () +
+
gsf_output_gnomevfs_new, gsf_output_gnomevfs_new () +
+
gsf_output_gnomevfs_new_uri, gsf_output_gnomevfs_new_uri () +
+
gsf_output_gzip_new, gsf_output_gzip_new () +
+
gsf_output_iconv_new, gsf_output_iconv_new () +
+
gsf_output_iochannel_new, gsf_output_iochannel_new () +
+
gsf_output_is_closed, gsf_output_is_closed () +
+
gsf_output_memory_get_bytes, gsf_output_memory_get_bytes () +
+
gsf_output_memory_get_type, gsf_output_memory_get_type () +
+
gsf_output_memory_new, gsf_output_memory_new () +
+
gsf_output_name, gsf_output_name () +
+
gsf_output_printf, gsf_output_printf () +
+
gsf_output_puts, gsf_output_puts () +
+
gsf_output_seek, gsf_output_seek () +
+
gsf_output_set_container, gsf_output_set_container () +
+
gsf_output_set_error, gsf_output_set_error () +
+
gsf_output_set_name, gsf_output_set_name () +
+
gsf_output_set_name_from_filename, gsf_output_set_name_from_filename () +
+
gsf_output_size, gsf_output_size () +
+
gsf_output_stdio_new, gsf_output_stdio_new () +
+
gsf_output_stdio_new_FILE, gsf_output_stdio_new_FILE () +
+
gsf_output_stdio_new_full, gsf_output_stdio_new_full () +
+
gsf_output_stdio_new_valist, gsf_output_stdio_new_valist () +
+
gsf_output_tell, gsf_output_tell () +
+
gsf_output_unwrap, gsf_output_unwrap () +
+
gsf_output_vprintf, gsf_output_vprintf () +
+
gsf_output_wrap, gsf_output_wrap () +
+
gsf_output_write, gsf_output_write () +
+
GSF_PARAM_STATIC, GSF_PARAM_STATIC +
+
gsf_property_settings_collect, gsf_property_settings_collect () +
+
gsf_property_settings_collect_valist, gsf_property_settings_collect_valist () +
+
gsf_property_settings_free, gsf_property_settings_free () +
+
gsf_shared_bonobo_stream_new, gsf_shared_bonobo_stream_new () +
+
gsf_shared_memory_mmapped_new, gsf_shared_memory_mmapped_new () +
+
gsf_shared_memory_new, gsf_shared_memory_new () +
+
gsf_shutdown, gsf_shutdown () +
+
gsf_shutdown_dynamic, gsf_shutdown_dynamic () +
+
gsf_structured_blob_read, gsf_structured_blob_read () +
+
gsf_structured_blob_write, gsf_structured_blob_write () +
+
gsf_timestamp_as_string, gsf_timestamp_as_string () +
+
gsf_timestamp_copy, gsf_timestamp_copy () +
+
gsf_timestamp_equal, gsf_timestamp_equal () +
+
gsf_timestamp_free, gsf_timestamp_free () +
+
gsf_timestamp_hash, gsf_timestamp_hash () +
+
gsf_timestamp_new, gsf_timestamp_new () +
+
gsf_timestamp_new_now, gsf_timestamp_new_now () +
+
gsf_timestamp_parse, gsf_timestamp_parse () +
+
gsf_value_get_docprop_varray, gsf_value_get_docprop_varray () +
+
gsf_value_get_docprop_vector, gsf_value_get_docprop_vector () +
+
gsf_value_set_timestamp, gsf_value_set_timestamp () +
+
gsf_vdir_add_child, gsf_vdir_add_child () +
+
gsf_vdir_free, gsf_vdir_free () +
+
gsf_vdir_new, gsf_vdir_new () +
+
gsf_xmlDocFormatDump, gsf_xmlDocFormatDump () +
+
gsf_xml_in_check_ns, gsf_xml_in_check_ns () +
+
gsf_xml_in_doc_extend, gsf_xml_in_doc_extend () +
+
gsf_xml_in_doc_free, gsf_xml_in_doc_free () +
+
gsf_xml_in_doc_new, gsf_xml_in_doc_new () +
+
gsf_xml_in_doc_set_unknown_handler, gsf_xml_in_doc_set_unknown_handler () +
+
gsf_xml_in_namecmp, gsf_xml_in_namecmp () +
+
GSF_XML_IN_NODE, GSF_XML_IN_NODE() +
+
GSF_XML_IN_NODE_FULL, GSF_XML_IN_NODE_FULL() +
+
GSF_XML_IN_NS, GSF_XML_IN_NS() +
+
gsf_xml_in_parse, gsf_xml_in_parse () +
+
gsf_xml_out_add_base64, gsf_xml_out_add_base64 () +
+
gsf_xml_out_add_bool, gsf_xml_out_add_bool () +
+
gsf_xml_out_add_color, gsf_xml_out_add_color () +
+
gsf_xml_out_add_cstr, gsf_xml_out_add_cstr () +
+
gsf_xml_out_add_cstr_unchecked, gsf_xml_out_add_cstr_unchecked () +
+
gsf_xml_out_add_enum, gsf_xml_out_add_enum () +
+
gsf_xml_out_add_float, gsf_xml_out_add_float () +
+
gsf_xml_out_add_int, gsf_xml_out_add_int () +
+
gsf_xml_out_add_uint, gsf_xml_out_add_uint () +
+
gsf_xml_out_end_element, gsf_xml_out_end_element () +
+
gsf_xml_out_new, gsf_xml_out_new () +
+
gsf_xml_out_set_doc_type, gsf_xml_out_set_doc_type () +
+
gsf_xml_out_simple_element, gsf_xml_out_simple_element () +
+
gsf_xml_out_simple_float_element, gsf_xml_out_simple_float_element () +
+
gsf_xml_out_simple_int_element, gsf_xml_out_simple_int_element () +
+
gsf_xml_out_start_element, gsf_xml_out_start_element () +
+
gsf_xml_parser_context, gsf_xml_parser_context () +
+
gsf_zip_dirent_free, gsf_zip_dirent_free () +
+
gsf_zip_dirent_new, gsf_zip_dirent_new () +
+
+
+
+

L

+
+
libgsf_major_version, libgsf_major_version +
+
libgsf_micro_version, libgsf_micro_version +
+
libgsf_minor_version, libgsf_minor_version +
+
+
+
+

O

+
+
OLE_DEFAULT_BB_SHIFT, OLE_DEFAULT_BB_SHIFT +
+
OLE_DEFAULT_SB_SHIFT, OLE_DEFAULT_SB_SHIFT +
+
OLE_HEADER_BB_SHIFT, OLE_HEADER_BB_SHIFT +
+
OLE_HEADER_BYTE_ORDER, OLE_HEADER_BYTE_ORDER +
+
OLE_HEADER_CLSID, OLE_HEADER_CLSID +
+
OLE_HEADER_CSECTDIR, OLE_HEADER_CSECTDIR +
+
OLE_HEADER_DIRENT_START, OLE_HEADER_DIRENT_START +
+
OLE_HEADER_MAJOR_VER, OLE_HEADER_MAJOR_VER +
+
OLE_HEADER_METABAT_BLOCK, OLE_HEADER_METABAT_BLOCK +
+
OLE_HEADER_METABAT_SIZE, OLE_HEADER_METABAT_SIZE +
+
OLE_HEADER_MINOR_VER, OLE_HEADER_MINOR_VER +
+
OLE_HEADER_NUM_BAT, OLE_HEADER_NUM_BAT +
+
OLE_HEADER_NUM_METABAT, OLE_HEADER_NUM_METABAT +
+
OLE_HEADER_NUM_SBAT, OLE_HEADER_NUM_SBAT +
+
OLE_HEADER_SBAT_START, OLE_HEADER_SBAT_START +
+
OLE_HEADER_SB_SHIFT, OLE_HEADER_SB_SHIFT +
+
OLE_HEADER_SIGNATURE, OLE_HEADER_SIGNATURE +
+
OLE_HEADER_SIZE, OLE_HEADER_SIZE +
+
OLE_HEADER_START_BAT, OLE_HEADER_START_BAT +
+
OLE_HEADER_THRESHOLD, OLE_HEADER_THRESHOLD +
+
+
+
+

V

+
VAL_IS_GSF_TIMESTAMP, VAL_IS_GSF_TIMESTAMP() +
+
+
+

Z

+
+
ZIP_BLOCK_SIZE, ZIP_BLOCK_SIZE +
+
ZIP_BUF_SIZE, ZIP_BUF_SIZE +
+
ZIP_DIRENT_COMMENT_SIZE, ZIP_DIRENT_COMMENT_SIZE +
+
ZIP_DIRENT_COMPR_METHOD, ZIP_DIRENT_COMPR_METHOD +
+
ZIP_DIRENT_CRC32, ZIP_DIRENT_CRC32 +
+
ZIP_DIRENT_CSIZE, ZIP_DIRENT_CSIZE +
+
ZIP_DIRENT_DISKSTART, ZIP_DIRENT_DISKSTART +
+
ZIP_DIRENT_DOSTIME, ZIP_DIRENT_DOSTIME +
+
ZIP_DIRENT_ENCODER, ZIP_DIRENT_ENCODER +
+
ZIP_DIRENT_EXTRACT, ZIP_DIRENT_EXTRACT +
+
ZIP_DIRENT_EXTRAS_SIZE, ZIP_DIRENT_EXTRAS_SIZE +
+
ZIP_DIRENT_FILE_MODE, ZIP_DIRENT_FILE_MODE +
+
ZIP_DIRENT_FILE_TYPE, ZIP_DIRENT_FILE_TYPE +
+
ZIP_DIRENT_FLAGS, ZIP_DIRENT_FLAGS +
+
ZIP_DIRENT_NAME_SIZE, ZIP_DIRENT_NAME_SIZE +
+
ZIP_DIRENT_OFFSET, ZIP_DIRENT_OFFSET +
+
ZIP_DIRENT_SIZE, ZIP_DIRENT_SIZE +
+
ZIP_DIRENT_USIZE, ZIP_DIRENT_USIZE +
+
ZIP_FILE_HEADER_COMPR_METHOD, ZIP_FILE_HEADER_COMPR_METHOD +
+
ZIP_FILE_HEADER_CRC32, ZIP_FILE_HEADER_CRC32 +
+
ZIP_FILE_HEADER_CSIZE, ZIP_FILE_HEADER_CSIZE +
+
ZIP_FILE_HEADER_DOSTIME, ZIP_FILE_HEADER_DOSTIME +
+
ZIP_FILE_HEADER_EXTRACT, ZIP_FILE_HEADER_EXTRACT +
+
ZIP_FILE_HEADER_EXTRAS_SIZE, ZIP_FILE_HEADER_EXTRAS_SIZE +
+
ZIP_FILE_HEADER_FLAGS, ZIP_FILE_HEADER_FLAGS +
+
ZIP_FILE_HEADER_NAME_SIZE, ZIP_FILE_HEADER_NAME_SIZE +
+
ZIP_FILE_HEADER_SIZE, ZIP_FILE_HEADER_SIZE +
+
ZIP_FILE_HEADER_USIZE, ZIP_FILE_HEADER_USIZE +
+
ZIP_HEADER_COMP_METHOD, ZIP_HEADER_COMP_METHOD +
+
ZIP_HEADER_COMP_SIZE, ZIP_HEADER_COMP_SIZE +
+
ZIP_HEADER_CRC, ZIP_HEADER_CRC +
+
ZIP_HEADER_EXTRA_LEN, ZIP_HEADER_EXTRA_LEN +
+
ZIP_HEADER_FLAGS, ZIP_HEADER_FLAGS +
+
ZIP_HEADER_NAME_LEN, ZIP_HEADER_NAME_LEN +
+
ZIP_HEADER_OS, ZIP_HEADER_OS +
+
ZIP_HEADER_SIZE, ZIP_HEADER_SIZE +
+
ZIP_HEADER_TIME, ZIP_HEADER_TIME +
+
ZIP_HEADER_UNCOMP_SIZE, ZIP_HEADER_UNCOMP_SIZE +
+
ZIP_HEADER_VERSION, ZIP_HEADER_VERSION +
+
ZIP_NAME_SEPARATOR, ZIP_NAME_SEPARATOR +
+
ZIP_TRAILER_COMMENT_SIZE, ZIP_TRAILER_COMMENT_SIZE +
+
ZIP_TRAILER_DIR_DISK, ZIP_TRAILER_DIR_DISK +
+
ZIP_TRAILER_DIR_POS, ZIP_TRAILER_DIR_POS +
+
ZIP_TRAILER_DIR_SIZE, ZIP_TRAILER_DIR_SIZE +
+
ZIP_TRAILER_DISK, ZIP_TRAILER_DISK +
+
ZIP_TRAILER_ENTRIES, ZIP_TRAILER_ENTRIES +
+
ZIP_TRAILER_SIZE, ZIP_TRAILER_SIZE +
+
ZIP_TRAILER_TOTAL_ENTRIES, ZIP_TRAILER_TOTAL_ENTRIES +
+
ZZIP_IS_COMPRLEVEL, ZZIP_IS_COMPRLEVEL() +
+
ZZIP_IS_ENCRYPTED, ZZIP_IS_ENCRYPTED() +
+
ZZIP_IS_STREAMED, ZZIP_IS_STREAMED() +
+
+
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/left.png b/lib/libgsf-1.12.3/doc/html/left.png new file mode 100644 index 0000000000..2d05b3d5b4 Binary files /dev/null and b/lib/libgsf-1.12.3/doc/html/left.png differ diff --git a/lib/libgsf-1.12.3/doc/html/misc.html b/lib/libgsf-1.12.3/doc/html/misc.html new file mode 100644 index 0000000000..278cf4776e --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/misc.html @@ -0,0 +1,40 @@ + + + +Miscellaneous + + + + + + + + + + + + + + + + + + + + + + + +
+

+Miscellaneous

+
+utils - +
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/parsers.html b/lib/libgsf-1.12.3/doc/html/parsers.html new file mode 100644 index 0000000000..c648bd6853 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/parsers.html @@ -0,0 +1,66 @@ + + + +Stream Parsers + + + + + + + + + + + + + + + + + + + + + + + +
+

+Stream Parsers

+
+
+Text - +
+
+XML and libxml - +
+
+Zip - +
+
+Compression - +
+
+MS OLE2 - +
+
+metadata - +
+
+GsfBlob - A generic, unstructured block of binary data +
+
+GsfClipData - Object to hold clipboard data from a VT_CF section +
+
+Structured Blobs - +
+
+
+ + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/right.png b/lib/libgsf-1.12.3/doc/html/right.png new file mode 100644 index 0000000000..92832e3a45 Binary files /dev/null and b/lib/libgsf-1.12.3/doc/html/right.png differ diff --git a/lib/libgsf-1.12.3/doc/html/sources.html b/lib/libgsf-1.12.3/doc/html/sources.html new file mode 100644 index 0000000000..5cec7d0a2a --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/sources.html @@ -0,0 +1,60 @@ + + + +Stream Sources + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/html/style.css b/lib/libgsf-1.12.3/doc/html/style.css new file mode 100644 index 0000000000..c9cabe7830 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/html/style.css @@ -0,0 +1,66 @@ +.synopsis, .classsynopsis +{ + background: #eeeeee; + border: solid 1px #aaaaaa; + padding: 0.5em; +} +.programlisting +{ + background: #eeeeff; + border: solid 1px #aaaaff; + padding: 0.5em; +} +.variablelist +{ + padding: 4px; + margin-left: 3em; +} +.variablelist td:first-child +{ + vertical-align: top; +} +table.navigation +{ + background: #ffeeee; + border: solid 1px #ffaaaa; + margin-top: 0.5em; + margin-bottom: 0.5em; +} +.navigation a +{ + color: #770000; +} +.navigation a:visited +{ + color: #550000; +} +.navigation .title +{ + font-size: 200%; +} +div.refnamediv +{ + margin-top: 2em; +} +div.gallery-float +{ + float: left; + padding: 10px; +} +div.gallery-float img +{ + border-style: none; +} +div.gallery-spacer +{ + clear: both; +} +a +{ + text-decoration: none; +} +a:hover +{ + text-decoration: underline; + color: #FF0000; +} diff --git a/lib/libgsf-1.12.3/doc/html/up.png b/lib/libgsf-1.12.3/doc/html/up.png new file mode 100644 index 0000000000..85b3e2a275 Binary files /dev/null and b/lib/libgsf-1.12.3/doc/html/up.png differ diff --git a/lib/libgsf-1.12.3/doc/tmpl/blob.sgml b/lib/libgsf-1.12.3/doc/tmpl/blob.sgml new file mode 100644 index 0000000000..e82ade3151 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/blob.sgml @@ -0,0 +1,44 @@ + +Structured Blobs + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@blob: +@container: +@Returns: + + + + + + + +@input: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/bonobo.sgml b/lib/libgsf-1.12.3/doc/tmpl/bonobo.sgml new file mode 100644 index 0000000000..ce337532ef --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/bonobo.sgml @@ -0,0 +1,69 @@ + +Bononbo + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@stream: +@err: +@Returns: + + + + + + + + + + + + + +@stream: +@err: +@Returns: + + + + + + + +@g_object: +@stream: +@pos: + + + + + + +@stream: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/compression.sgml b/lib/libgsf-1.12.3/doc/tmpl/compression.sgml new file mode 100644 index 0000000000..74116768f2 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/compression.sgml @@ -0,0 +1,96 @@ + +Compression + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@source: +@err: +@Returns: + + + + + + + +@source: +@err: +@Returns: + + + + + + + + + + + + + +@sink: +@err: +@Returns: + +@source: + + + + + + + + + + + + + +@sink: +@err: +@Returns: + +@source: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gnome-vfs.sgml b/lib/libgsf-1.12.3/doc/tmpl/gnome-vfs.sgml new file mode 100644 index 0000000000..1600d54824 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gnome-vfs.sgml @@ -0,0 +1,80 @@ + +GnomeVFS + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@uri: +@error: +@Returns: + + + + + + + +@uri: +@error: +@Returns: + + + + + + + +@vfs_input: +@Returns: + + + + + + + + + + + + + +@filename: +@err: +@Returns: + + + + + + + +@uri: +@err: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gnomevfs.sgml b/lib/libgsf-1.12.3/doc/tmpl/gnomevfs.sgml new file mode 100644 index 0000000000..cb7b8280b8 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gnomevfs.sgml @@ -0,0 +1,79 @@ + +GnomeVFS + + + + + + + + + + + + + + + + + + + + + + + + + + + +@uri: +@error: +@Returns: + + + + + + + +@uri: +@error: +@Returns: + + + + + + + +@vfs_input: +@Returns: + + + + + + + + + + + + + +@filename: +@err: +@Returns: + + + + + + + +@uri: +@err: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gnomevfs.sgml.sgml b/lib/libgsf-1.12.3/doc/tmpl/gnomevfs.sgml.sgml new file mode 100644 index 0000000000..48856a41b8 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gnomevfs.sgml.sgml @@ -0,0 +1,76 @@ + +compression + + + + + + + + + + + + + + + + + + + + + + + + + + + +@source: +@err: +@Returns: + + + + + + + +@source: +@err: +@Returns: + + + + + + + + + + + + + +@source: +@err: +@Returns: + + + + + + + + + + + + + +@source: +@err: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gsf-blob.sgml b/lib/libgsf-1.12.3/doc/tmpl/gsf-blob.sgml new file mode 100644 index 0000000000..bf33990102 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gsf-blob.sgml @@ -0,0 +1,78 @@ + +GsfBlob + + +A generic, unstructured block of binary data + + + + Some libgsf functions, in particular the metadata functions, can generate + unstructured blocks of data, or blobs. + Libgsf represents these blobs using a + GsfBlob object. + + + + + #GsfClipData, #GsfMetadata + + + + + + + + Represents an unstructured block of binary data, that is, a + sequence of bytes and an integer specifying the size of the + sequence. + + +@object: +@priv: + + + + + + +@parent_class: + + + + + + +@size: +@data_to_copy: +@error: +@Returns: + + + + + + + +@blob: +@Returns: + + + + + + + +@blob: +@Returns: + + + + + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gsf-clip-data.sgml b/lib/libgsf-1.12.3/doc/tmpl/gsf-clip-data.sgml new file mode 100644 index 0000000000..cd406062e5 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gsf-clip-data.sgml @@ -0,0 +1,169 @@ + +GsfClipData + + +Object to hold clipboard data from a VT_CF section + + + + OLE2 files may contain clipboard data in the + VT_CF property of the metadata in a + SummaryInfo section. This data is used, among + other things, to represent a thumbnail or pre-rendered version of + the data in the file. GsfClipData is an + object that holds such clipboard data. + + + + You can get a GsfClipData object from the + #GValue returned by gsf_doc_prop_get_val(), after you have done + gsf_doc_meta_data_lookup (meta_data, + GSF_META_NAME_THUMBNAIL). The resulting #GsfClipData + object, if it exists, contains the thumbnail data. In turn, the + thumbnail data may be in different formats, as specified by the + #GsfClipFormat enumeration. + + + + Internally, #GsfClipData stores the thumbnail data plus any extra + information in a #GsfBlob object. #GsfClipData provides a + convenience function, gsf_clip_data_peek_real_data(), to extract + the thumbnail data directly. If you need to use the raw binary + data instead of the data specific to the thumbnail, you can use + gsf_clip_data_get_data_blob() to get the #GsfBlob object and + handle it yourself. + + + + + #GsfBlob, #GsfDocMetaData + + + + + + + + A #GsfClipData stores all its thumbnail data and associated + information in an internal #GsfBlob object. The + GsfClipFormat enumeration represents the possible + formats for this data blob. + + +@GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD: The thumbnail data is stored in + Windows clipboard format. The particular sub-format can be in any of + the values in the #GsfClipFormatWindows enumeration. When a + #GsfClipData is in @GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD, you can use + gsf_clip_data_get_windows_clipboard_format() to get the sub-format + in which the data is actually stored. +@GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARD: The thumbnail data is stored in + Macintosh clipboard format, usually PICT. +@GSF_CLIP_FORMAT_GUID: The thumbnail data contains a GUID specifying + the OLE component which can be used to render it. Please refer to + the OLE2 format documentation for details. +@GSF_CLIP_FORMAT_NO_DATA: There is no thumbnail data. +@GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAME: The thumbnail data contains a + null-terminated string with a Windows clipboard format name. Please refer to + the OLE2 format documentation for details. +@GSF_CLIP_FORMAT_UNKNOWN: The thumbnail data is in an unknown format, + but is nevertheless stored in a #GsfBlob. + + + + When a #GsfClipData is in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD + format, it can be in any of the subformats specified by the + GsfClipFormatWindows enumeration. Use + gsf_clip_data_get_windows_clipboard_format() to determine this + sub-format. + + + + For all of these values, the gsf_clip_data_peek_real_data() + function lets you access the data directly. + + +@GSF_CLIP_FORMAT_WINDOWS_ERROR: The OLE file is probably corrupt. +@GSF_CLIP_FORMAT_WINDOWS_UNKNOWN: The specific clipboard format is + unknown to libgsf. +@GSF_CLIP_FORMAT_WINDOWS_METAFILE: The data is in Windows Metafile + format. While OLE files store extra header data in this case, the + gsf_clip_data_peek_real_data() function will let you access the WMF + data directly, and it will ignore the extra header bytes. +@GSF_CLIP_FORMAT_WINDOWS_DIB: The data is in Windows + Device-Independent Bitmap format. +@GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE: The data is in Windows + Enhanced Metaflie format. + + + + Object used to represent a VT_CF property in the OLE stream. + + +@object: +@priv: + + + + + + +@parent_class: + + + + + + +@format: +@data_blob: +@Returns: + + + + + + + +@clip_data: +@Returns: + + + + + + + +@clip_data: +@Returns: + + + + + + + +@clip_data: +@error: +@Returns: + + + + + + + +@clip_data: +@ret_size: +@error: +@Returns: + + + + + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gsf-unused.sgml b/lib/libgsf-1.12.3/doc/tmpl/gsf-unused.sgml new file mode 100644 index 0000000000..6145eebc92 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gsf-unused.sgml @@ -0,0 +1,1225 @@ + + + + + + + + + + + + + + + + + +compression + + + + + + + + + + + + + + + + + + + +compression + + + + + + + + + + + + + + + + + + + +GnomeVFS + + + + + + + + + + + + + + + + + + + +gsf-impl-utils + + + + + + + + + + + + + + + + + + + +GsfInfile + + + + + + + + + + + + + + + + + + + +gsf-input-gnomevfs + + + + + + + + + + + + + + + + + + + +gsf-input-gzip + + + + + + + + + + + + + + + + + + + +GsfInput + + + + + + + + + + + + + + + + + + + +gsf-input-memory + + + + + + + + + + + + + + + + + + + +gsf-input-stdio + + + + + + + + + + + + + + + + + + + +gsf-input-textline + + + + + + + + + + + + + + + + + + + +gsf-input + + + + + + + + + + + + + + + + + + + +GsfOutput + + + + + + + + + + + + + + + + + + + + + + + +gsf-utils + + + + + + + + + + + + + + + + + + + +gsf + + + + + + + +@o: + + + + + + +@k: + + + + + + +@o: + + + + + + + + + + + + + + + + + + +@o: + + + + + + + + + + + + +@o: + + + + + + +@k: + + + + + + +@o: + + + + + + + + + + + + +@o: + + + + + + + + + + + + +@o: + + + + + + + + + + + + + + + + + + +@k: + + + + + + +@k: + + + + + + +@k: + + + + + + +@k: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@p: + + + + + + +@p: + + + + + + +@p: + + + + + + +@k: + + + + + + +@k: + + + + + + +@o: + + + + + + + + + + + + + + + + + + +@o: + + + + + + + + + + + + + + + + + + +@o: + + + + + + + + + + + + + + + + + + + + + + + + +@input_class: +@num_children: +@name_by_index: +@child_by_index: +@child_by_name: + + + + + + +@g_object_class: +@Dup: +@Read: +@Seek: +@OpenSibling: +@_gsf_reserved0: +@_gsf_reserved1: +@_gsf_reserved2: +@_gsf_reserved3: + + + + + + + + + + + + +@GSF_MSOLE_PROP_STRING_MASK: +@GSF_MSOLE_PROP_TIME_MASK: +@GSF_MSOLE_PROP_WORD_MASK: +@GSF_MSOLE_PROP_DWORD_MASK: +@GSF_MSOLE_PROP_CLIPBOARD_MASK: +@GSF_MSOLE_PROP_TYPE_MASK: +@GSF_MSOLE_PROP_INDEX_MASK: +@GSF_MSOLE_PROP_CODEPAGE: +@GSF_MSOLE_PROP_TITLE: +@GSF_MSOLE_PROP_SUBJECT: +@GSF_MSOLE_PROP_AUTHOR: +@GSF_MSOLE_PROP_KEYWORDS: +@GSF_MSOLE_PROP_COMMENTS: +@GSF_MSOLE_PROP_TEMPLATE: +@GSF_MSOLE_PROP_LASTAUTHOR: +@GSF_MSOLE_PROP_REVNUMBER: +@GSF_MSOLE_PROP_EDITTIME: +@GSF_MSOLE_PROP_LASTPRINTED: +@GSF_MSOLE_PROP_CREATED: +@GSF_MSOLE_PROP_LASTSAVED: +@GSF_MSOLE_PROP_PAGECOUNT: +@GSF_MSOLE_PROP_WORDCOUNT: +@GSF_MSOLE_PROP_CHARCOUNT: +@GSF_MSOLE_PROP_THUMBNAIL: +@GSF_MSOLE_PROP_APPNAME: +@GSF_MSOLE_PROP_SECURITY: + + + + + + +@GSF_SEEK_SET: +@GSF_SEEK_CUR: +@GSF_SEEK_END: + + + + + + +@output_class: +@new_child: + + + + + + +@g_object_class: +@Close: +@Seek: +@Write: +@Vprintf: + + + + + + +@output_class: + + + + + + +@output_class: + + + + + + +@o: + + + + + + +@k: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + +@k: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + +@k: + + + + + + +@o: + + + + + + +@o: + + + + + + +@o: + + + + + + + + + + + + +@ZIP_STORED: +@ZIP_SHRUNK: +@ZIP_REDUCEDx1: +@ZIP_REDUCEDx2: +@ZIP_REDUCEDx3: +@ZIP_REDUCEDx4: +@ZIP_IMPLODED: +@ZIP_TOKENIZED: +@ZIP_DEFLATED: +@ZIP_DEFLATED_BETTER: +@ZIP_IMPLODED_BETTER: + + + + + + +@name: +@compr_method: +@crc32: +@csize: +@usize: +@offset: +@data_offset: +@dostime: + + + + + + +@name: +@is_directory: +@dirent: +@children: + + + + + + +@value: +@stamp: + + + + + + +@Returns: + + + + + + +@meta: +@name: +@prop: + + + + + + +@meta: +@name: +@value: +@prop_name: +@prop: + + + + + + +@prop: +@Returns: + + + + + + +@prop: +@Returns: + + + + + + +@prop: +@Returns: + + + + + + +@prop: +@link: + + + + + + +@prop: +@val: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@outfile: +@name: +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@value: +@vector: + + + + + + +@Returns: + + + + + + +@vdir: +@child: + + + + + + +@vdir: +@free_dirent: + + + + + + +@name: +@is_directory: +@dirent: +@Returns: + + + + + + +@dirent: + + + + + + +@Returns: + diff --git a/lib/libgsf-1.12.3/doc/tmpl/gsf.sgml b/lib/libgsf-1.12.3/doc/tmpl/gsf.sgml new file mode 100644 index 0000000000..da68374e89 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/gsf.sgml @@ -0,0 +1,22 @@ + +gsf + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/infile.sgml b/lib/libgsf-1.12.3/doc/tmpl/infile.sgml new file mode 100644 index 0000000000..6a5b8c9675 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/infile.sgml @@ -0,0 +1,75 @@ + +Infile reading structed files + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@infile: +@Returns: + + + + + + + +@infile: +@i: +@Returns: + + + + + + + +@infile: +@name: +@Returns: + + + + + + + +@infile: +@name: +@Varargs: +@Returns: + + + + + + + +@infile: +@i: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/input.sgml b/lib/libgsf-1.12.3/doc/tmpl/input.sgml new file mode 100644 index 0000000000..90733ce5fe --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/input.sgml @@ -0,0 +1,258 @@ + +Input from unstructured files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@input: +@num_bytes: +@optional_buffer: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@input: +@offset: +@whence: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@input: +@err: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@Returns: + + + + + + + +@input: +@name: +@err: +@Returns: + + + + + + + +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@input: +@filename: +@Returns: + + + + + + + + + + + + + +@source: +@Returns: + + + + + + + +@source: +@offset: +@size: +@Returns: + + + + + + + +@input: +@output: +@Returns: + + + + + + + +@src: +@Returns: + + + + + + + +@input: +@name: +@Returns: + + + + + + + +@input: +@container: +@Returns: + + + + + + + +@input: +@size: +@Returns: + + + + + + + +@input: +@pos: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/iochannel.sgml b/lib/libgsf-1.12.3/doc/tmpl/iochannel.sgml new file mode 100644 index 0000000000..b648080d53 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/iochannel.sgml @@ -0,0 +1,34 @@ + +GIOChannel + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@channel: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/memory.sgml b/lib/libgsf-1.12.3/doc/tmpl/memory.sgml new file mode 100644 index 0000000000..87c1a38aed --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/memory.sgml @@ -0,0 +1,124 @@ + +memory + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@filename: +@err: +@Returns: + + + + + + + +@buf: +@length: +@needs_free: +@Returns: + + + + + + + +@buf: +@length: +@Returns: + + + + + + + +@channel: +@error: +@Returns: + + + + + + + + + + + + + +@mem: +@Returns: + + + + + + + +@Returns: + + + + + + + +@Returns: + + + + + + + + + + + + + +@buf: +@size: +@needs_free: +@Returns: + + + + + + + +@buf: +@size: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/metadata.sgml b/lib/libgsf-1.12.3/doc/tmpl/metadata.sgml new file mode 100644 index 0000000000..2fca722374 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/metadata.sgml @@ -0,0 +1,561 @@ + +metadata + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + +@meta: +@name: +@Returns: + + + + + + + +@meta: +@name: +@value: + + + + + + + +@meta: +@name: + + + + + + + +@meta: +@name: +@Returns: + + + + + + + +@meta: +@prop: + + + + + + + +@meta: +@func: +@user_data: + + + + + + + +@meta: +@Returns: + + + + + + + + + + + + + +@name: +@Returns: + + + + + + + +@prop: + + + + + + + +@prop: +@Returns: + + + + + + + +@prop: +@Returns: + + + + + + + +@prop: +@val: + + + + + + + +@prop: +@Returns: + + + + + + + +@prop: +@link: + + + + + + + + + + + + + +@Returns: + + + + + + + +@vector: +@value: + + + + + + + +@vector: +@Returns: + + + + + + + +@value: +@Returns: + + + + + + + +@value: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/msole.sgml b/lib/libgsf-1.12.3/doc/tmpl/msole.sgml new file mode 100644 index 0000000000..a951c7d57a --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/msole.sgml @@ -0,0 +1,547 @@ + +MS OLE2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@source: +@err: +@Returns: + + + + + + + +@ole: +@res: +@Returns: + + + + + + + + + + + + + +@sink: +@Returns: + + + + + + + +@sink: +@bb_size: +@sb_size: +@Returns: + +@Param2: +@Param3: + + + + + + + +@ole: +@clsid: +@Returns: + + + + + + + +@in: +@accum: +@Returns: + +@err: + + + + + + + +@out: +@meta_data: +@doc_not_component: +@Returns: + +@err: + + + + + + + +@codepage_to: +@from: +@Returns: + + + + + + + +@to: +@codepage: +@Returns: + + + + + + + +@Returns: + + + + + + + +@codepage_to: +@Returns: + + + + + + + +@codepage: +@Returns: + + + + + + + +@Returns: + + + + + + + +@codepage: +@Returns: + + + + + + + +@lid: +@Returns: + + + + + + + +@lid: +@Returns: + + + + + + + +@lang: +@Returns: + + + + + + + +@lid: +@Returns: + + + + + + + +@input: +@offset: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/outfile.sgml b/lib/libgsf-1.12.3/doc/tmpl/outfile.sgml new file mode 100644 index 0000000000..fbf3e4adad --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/outfile.sgml @@ -0,0 +1,62 @@ + +Outfile writing structed files + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@outfile: +@name: +@is_dir: +@Returns: + + + + + + + +@outfile: +@name: +@is_dir: +@first_property_name: +@Varargs: +@Returns: + + + + + + + +@outfile: +@name: +@is_dir: +@first_property_name: +@args: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/output.sgml b/lib/libgsf-1.12.3/doc/tmpl/output.sgml new file mode 100644 index 0000000000..ed3934aecc --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/output.sgml @@ -0,0 +1,232 @@ + +Output to unstructured files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@output: +@Returns: + + + + + + + +@output: +@Returns: + + + + + + + +@output: +@Returns: + + + + + + + +@output: +@Returns: + + + + + + + +@output: +@offset: +@whence: +@Returns: + + + + + + + +@output: +@num_bytes: +@data: +@Returns: + + + + + + + +@output: +@line: +@Returns: + + + + + + + +@output: +@format: +@Varargs: +@Returns: + + + + + + + +@output: +@format: +@args: +@Returns: + + + + + + + +@output: +@Returns: + + + + + + + +@output: +@filename: +@Returns: + + + + + + + +@Returns: + + + + + + + +@output: +@code: +@format: +@Varargs: +@Returns: + + + + + + + +@output: +@Returns: + + + + + + + +@output: +@Returns: + + + + + + + +@wrapper: +@wrapee: +@Returns: + + + + + + + +@wrapper: +@wrapee: +@Returns: + + + + + + + +@output: +@name: +@Returns: + + + + + + + +@output: +@container: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/stdio.sgml b/lib/libgsf-1.12.3/doc/tmpl/stdio.sgml new file mode 100644 index 0000000000..5d5f82dbe9 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/stdio.sgml @@ -0,0 +1,142 @@ + +Reading and Writing from local files and directories + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@filename: +@err: +@Returns: + + + + + + + + + + + + + +@filename: +@err: +@Returns: + + + + + + + +@filename: +@err: +@first_property_name: +@Varargs: +@Returns: + + + + + + + +@filename: +@err: +@first_property_name: +@var_args: +@Returns: + + + + + + + +@filename: +@file: +@keep_open: +@Returns: + + + + + + + + + + + + + +@root: +@err: +@Returns: + + + + + + + +@root: +@err: +@first_property_name: +@Varargs: +@Returns: + + + + + + + +@root: +@err: +@first_property_name: +@var_args: +@Returns: + + + + + + + + + + + + + +@root: +@err: +@Returns: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/text.sgml b/lib/libgsf-1.12.3/doc/tmpl/text.sgml new file mode 100644 index 0000000000..5b91a5b619 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/text.sgml @@ -0,0 +1,116 @@ + +Text + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@source: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + + + + + + + +@sink: +@dst: +@src: +@Returns: + + + + + + + +@output: +@sink: +@quote: +@quote_len: +@quoting_mode: +@quoting_triggers: +@eol: +@eol_len: +@separator: +@separator_len: +@fields_on_line: +@buf: + + + + + + +@csv: +@Returns: + + + + + + + +@csv: +@field: +@len: +@Returns: + + + + + + + +@GSF_OUTPUT_CSV_QUOTING_MODE_NEVER: +@GSF_OUTPUT_CSV_QUOTING_MODE_AUTO: +@GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS: + diff --git a/lib/libgsf-1.12.3/doc/tmpl/utils.sgml b/lib/libgsf-1.12.3/doc/tmpl/utils.sgml new file mode 100644 index 0000000000..6008a880dc --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/utils.sgml @@ -0,0 +1,1261 @@ + +utils + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@module: + + + + + + + +@module: + + + + + + + + + + + + + + + + + + + + + + + + + +@name: +@prefix: +@class_init: +@instance_init: +@parent: + + + + + + + +@name: +@prefix: +@base_init: +@base_finalize: +@\ + class_init: +@\ + class_init: +@class_finalize: +@instance_init: +@parent_type: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@interface_decl: + +@class_init: + + + + + + + +@name: +@prefix: +@class_init: +@instance_init: +@parent: + + + + + + + +@init_func: +@iface_type: + + + + + + + +@type: +@init_func: +@iface_type: + + + + + + + +@name: +@prefix: +@class_init: +@instance_init: +@parent: + +@plugin: +@type: + + + + + + + +@name: +@prefix: +@base_init: +@base_finalize: +@\ + class_init: +@\ + class_init: +@class_finalize: +@instance_init: +@parent_type: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@interface_decl: + +@class_init: +@module: +@plugin: +@type: + + + + + + + +@name: +@prefix: +@class_init: +@instance_init: +@parent: + +@module: +@plugin: +@type: + + + + + + + +@init_func: +@iface_type: +@module: + + + + + + + +@type: +@init_func: +@iface_type: +@module: + + + + + + + + + + + + This convenience macro simply calls gsf_error_quark(). You can use + it in calls to g_error_matches(), for example. The macro returns + the #GQuark that is used to identify errors from libgsf functions. + Specific error codes come from the #GsfError enumeration. + + + + + + + Error codes that can be returned from libgsf functions in #GError structures. + + +@GSF_ERROR_OUT_OF_MEMORY: Not enough memory could be allocated to hold +a structure or object. +@GSF_ERROR_INVALID_DATA: A file being read contained invalid or +inconsistent data. + + + + + + +@Returns: + + + + + + + +@ptr: +@len: + + + + + + + +@input: +@dump_as_hex: + + + + + + + + + + + + + + + + + + + + +@filename: +@quoted: +@Returns: + + + + + + + +@handle: + + + + + + + +@path: +@Returns: + + + + + + + +@data: +@len: +@Returns: + + + + + + + +@in: +@inlen: +@break_lines: +@out: +@state: +@save: +@Returns: + + + + + + + +@in: +@len: +@break_lines: +@out: +@state: +@save: +@Returns: + + + + + + + +@data: +@len: +@Returns: + + + + + + + +@in: +@len: +@out: +@state: +@save: +@Returns: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: + + + + + + + +@p: +@Returns: + + + + + + + +@p: + + + + + + + +@p: +@Returns: + + + + + + + +@p: + + + + + + + +@p: +@Returns: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@dat: + + + + + + + +@p: +@f: + + + + + + + +@p: +@d: + + + + + + + +@date: +@seconds: +@time_zone: +@timet: + + + + + + +@date: +@seconds: +@tz: +@Returns: + + + + + + + +@Returns: + + + + + + + +@stamp: +@Returns: + + + + + + + +@stamp: + + + + + + + +@stamp: +@Returns: + + + + + + + +@spec: +@stamp: +@Returns: + + + + + + + +@stamp: +@Returns: + + + + + + + +@a: +@b: +@Returns: + + + + + + + +@value: +@stamp: + + + + + + + +@v: + + + + + + + +@prop: +@val: +@Returns: + + + + + + + +@object_type: +@p_params: +@p_n_params: +@first_property_name: +@Varargs: + + + + + + + +@object_type: +@p_params: +@p_n_params: +@first_property_name: +@var_args: + + + + + + + +@params: +@n_params: + + + + + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/xml.sgml b/lib/libgsf-1.12.3/doc/tmpl/xml.sgml new file mode 100644 index 0000000000..b1c99327f3 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/xml.sgml @@ -0,0 +1,666 @@ + +XML and libxml + + + + + + + + + + + + + + + + + + + + + + +@id: +@uri: + + + + + + + +@GSF_XML_NO_CONTENT: +@GSF_XML_CONTENT: +@GSF_XML_SHARED_CONTENT: + + + + + + +@doc: +@node: +@state_stack: +@default_ns: +@ns_stack: +@content: +@unknown_depth: +@ns_prefixes: +@ns_by_id: + + + + + + +@output: +@cur: +@encoding: +@format: +@Returns: + + + + + + + +@doc: + + + + + + + + + + + + + + + + + + + + + + + + + +@uri: + + + + + + +@parent_id: +@id: +@ns: +@name: +@has_content: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@check_ns: +@start: +@end: +@user: + + + + + + + +@parent_id: +@id: +@ns: +@name: +@has_content: +@start: +@end: + + + + + + + +@id: +@ns_id: +@name: +@parent_id: +@parent_initialized: +@groups: +@deprecated_unused_allow_unknown: +@check_children_for_ns: +@start: +@end: + + + + + + +@state: +@elem: +@attrs: +@Returns: + + + + + + + +@input: +@Returns: + + + + + + + +@root: +@ns: +@Returns: + + + + + + + +@state: +@str: +@ns_id: +@name: +@Returns: + +@Param3: + + + + + + + +@state: +@input: +@Returns: + + + + + + + +@state: +@str: +@ns_id: +@Returns: + + + + + + + +@doc: +@nodes: + + + + + + + +@doc: +@handler: + + + + + + + +@output: +@Returns: + + + + + + + +@xml: +@type: + + + + + + + +@xml: +@id: + + + + + + + +@xml: +@Returns: + + + + + + + +@xml: +@id: +@val_utf8: + + + + + + + +@xml: +@id: +@val_utf8: + + + + + + + +@xml: +@id: +@val: + + + + + + + +@xml: +@id: +@val: + + + + + + + +@xml: +@id: +@val: + +@Param3: + + + + + + + +@xml: +@id: +@val: +@precision: + + + + + + + +@xml: +@id: +@etype: +@val: + + + + + + + +@xml: +@id: +@r: +@g: +@b: + +@Param3: +@Param4: +@Param5: + + + + + + + +@xml: +@id: +@data: +@len: + +@Param4: + + + + + + + +@xml: +@id: +@content: + + + + + + + +@xml: +@id: +@val: +@precision: + + + + + + + +@xml: +@id: +@val: + + diff --git a/lib/libgsf-1.12.3/doc/tmpl/zip.sgml b/lib/libgsf-1.12.3/doc/tmpl/zip.sgml new file mode 100644 index 0000000000..a6061cf8e4 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/tmpl/zip.sgml @@ -0,0 +1,538 @@ + +Zip + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@source: +@err: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@sink: +@err: +@Returns: + + + + + + + +@zip: +@method: +@Returns: + + + + + + + +@name: +@compr_method: +@crc32: +@csize: +@usize: +@offset: +@data_offset: +@dostime: + + + + + + +@Returns: + + + + + + + +@dirent: + + + + + + + +@name: +@is_directory: +@dirent: +@children: +@last_child: + + + + + + +@vdir: +@free_dirent: + + + + + + + +@name: +@is_directory: +@dirent: +@Returns: + + + + + + + +@vdir: +@child: + + + + + + + + + + + + + + + + + + + + + +@GSF_ZIP_STORED: +@GSF_ZIP_SHRUNK: +@GSF_ZIP_REDUCEDx1: +@GSF_ZIP_REDUCEDx2: +@GSF_ZIP_REDUCEDx3: +@GSF_ZIP_REDUCEDx4: +@GSF_ZIP_IMPLODED: +@GSF_ZIP_TOKENIZED: +@GSF_ZIP_DEFLATED: +@GSF_ZIP_DEFLATED_BETTER: +@GSF_ZIP_IMPLODED_BETTER: + + + + + + + + + + + + + +@p: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@p: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@p: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/version.xml.in b/lib/libgsf-1.12.3/doc/version.xml.in new file mode 100644 index 0000000000..af9b9c4675 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/version.xml.in @@ -0,0 +1 @@ +@GLIB_VERSION@ diff --git a/lib/libgsf-1.12.3/doc/xml/blob.xml b/lib/libgsf-1.12.3/doc/xml/blob.xml new file mode 100644 index 0000000000..2bb8fb7f50 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/blob.xml @@ -0,0 +1,99 @@ + + +Structured Blobs +3 +GSF Library + + + +Structured Blobs + + +Synopsis + + + + + + GsfStructuredBlob; +gboolean gsf_structured_blob_write (GsfStructuredBlob *blob, + GsfOutfile *container); +GsfStructuredBlob* gsf_structured_blob_read (GsfInput *input); + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInfile + +----GsfStructuredBlob + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfStructuredBlob-struct"/>GsfStructuredBlob +GsfStructuredBlobtypedef struct _GsfStructuredBlob GsfStructuredBlob; + + + + +<anchor id="gsf-structured-blob-write"/>gsf_structured_blob_write () +gsf_structured_blob_writegboolean gsf_structured_blob_write (GsfStructuredBlob *blob, + GsfOutfile *container); + +Dumps structured blob blob onto the container. Will fail if the output is +not an Outfile and blob has multiple streams. + + + +blob : + + +container : + + +Returns :: TRUE on success. + + + +<anchor id="gsf-structured-blob-read"/>gsf_structured_blob_read () +gsf_structured_blob_readGsfStructuredBlob* gsf_structured_blob_read (GsfInput *input); + + + + + +input : + An input (potentially a GsfInfile) holding the blob + +Returns :a freshly created tree of blobs + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/bonobo.xml b/lib/libgsf-1.12.3/doc/xml/bonobo.xml new file mode 100644 index 0000000000..d585cddcc3 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/bonobo.xml @@ -0,0 +1,128 @@ + + +Bononbo +3 +GSF Library + + + +Bononbo + + +Synopsis + + + + + + GsfInputBonobo; +GsfInput* gsf_input_bonobo_new (Bonobo_Stream const stream, + GError **err); + GsfOutputBonobo; +GsfOutput* gsf_output_bonobo_new (Bonobo_Stream const stream, + GError **err); + GsfSharedBonoboStream; +GsfSharedBonoboStream* gsf_shared_bonobo_stream_new + (Bonobo_Stream stream); + + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInputBonobo"/>GsfInputBonobo +GsfInputBonobotypedef struct _GsfInputBonobo GsfInputBonobo; + + + + +<anchor id="gsf-input-bonobo-new"/>gsf_input_bonobo_new () +gsf_input_bonobo_newGsfInput* gsf_input_bonobo_new (Bonobo_Stream const stream, + GError **err); + + + +stream : + + +err : + + +Returns : + + + + + +<anchor id="GsfOutputBonobo"/>GsfOutputBonobo +GsfOutputBonobotypedef struct _GsfOutputBonobo GsfOutputBonobo; + + + + +<anchor id="gsf-output-bonobo-new"/>gsf_output_bonobo_new () +gsf_output_bonobo_newGsfOutput* gsf_output_bonobo_new (Bonobo_Stream const stream, + GError **err); + + + +stream : + + +err : + + +Returns : + + + + + +<anchor id="GsfSharedBonoboStream"/>GsfSharedBonoboStream +GsfSharedBonoboStreamtypedef struct { + GObject g_object; + Bonobo_Stream stream; + CORBA_long pos; +} GsfSharedBonoboStream; + + + + + +<anchor id="gsf-shared-bonobo-stream-new"/>gsf_shared_bonobo_stream_new () +gsf_shared_bonobo_stream_newGsfSharedBonoboStream* gsf_shared_bonobo_stream_new + (Bonobo_Stream stream); + + + +stream : + + +Returns : + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/compression.xml b/lib/libgsf-1.12.3/doc/xml/compression.xml new file mode 100644 index 0000000000..9a2739b799 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/compression.xml @@ -0,0 +1,187 @@ + + +Compression +3 +GSF Library + + + +Compression + + +Synopsis + + + + + + GsfInputGZip; +GsfInput* gsf_input_gzip_new (GsfInput *source, + GError **err); +GsfInput* gsf_input_memory_new_from_bzip (GsfInput *source, + GError **err); + GsfOutputGZip; +GsfOutput* gsf_output_gzip_new (GsfOutput *sink, + GError **err); + GsfOutputBzip; +GsfOutput* gsf_output_bzip_new (GsfOutput *sink, + GError **err); + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInputGZip + + + + GObject + +----GsfOutput + +----GsfOutputBzip + + + + + + + + + +Properties + + + "raw" gboolean : Read / Write / Construct Only + "source" GsfInput : Read / Write / Construct Only + "uncompressed-size" gint64 : Read / Write / Construct Only + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInputGZip-struct"/>GsfInputGZip +GsfInputGZiptypedef struct _GsfInputGZip GsfInputGZip; + + + + +<anchor id="gsf-input-gzip-new"/>gsf_input_gzip_new () +gsf_input_gzip_newGsfInput* gsf_input_gzip_new (GsfInput *source, + GError **err); + +Adds a reference to source. + + + +source : + The underlying data source. + +err : + optionally NULL. + +Returns :a new file or NULL. + + + +<anchor id="gsf-input-memory-new-from-bzip"/>gsf_input_memory_new_from_bzip () +gsf_input_memory_new_from_bzipGsfInput* gsf_input_memory_new_from_bzip (GsfInput *source, + GError **err); + + + + + +source : + a GsfInput + +err : + a GError + +Returns :a new GsfInputMemory or NULL. + + + +<anchor id="GsfOutputGZip"/>GsfOutputGZip +GsfOutputGZiptypedef struct _GsfOutputGZip GsfOutputGZip; + + + + +<anchor id="gsf-output-gzip-new"/>gsf_output_gzip_new () +gsf_output_gzip_newGsfOutput* gsf_output_gzip_new (GsfOutput *sink, + GError **err); + +Adds a reference to sink. + + + +sink : + The underlying data source. + +err : + optionally NULL. + +Returns :a new file or NULL. + + + +<anchor id="GsfOutputBzip-struct"/>GsfOutputBzip +GsfOutputBziptypedef struct _GsfOutputBzip GsfOutputBzip; + + + + +<anchor id="gsf-output-bzip-new"/>gsf_output_bzip_new () +gsf_output_bzip_newGsfOutput* gsf_output_bzip_new (GsfOutput *sink, + GError **err); + +Adds a reference to sink. + + + +sink : + The underlying data source. + +err : + optionally NULL. + +Returns :a new file or NULL. + + + + + +Properties +<anchor id="GsfInputGZip--raw"/>The "<literal>raw</literal>" property + "raw" gboolean : Read / Write / Construct Only +Whether to read compressed data with no header and no trailer.Default value: FALSE + +<anchor id="GsfInputGZip--source"/>The "<literal>source</literal>" property + "source" GsfInput : Read / Write / Construct Only +Where the compressed data comes from. +<anchor id="GsfInputGZip--uncompressed-size"/>The "<literal>uncompressed-size</literal>" property + "uncompressed-size" gint64 : Read / Write / Construct Only +The source's uncompressed size.Allowed values: >= -1 +Default value: -1 + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/gnome-vfs.xml b/lib/libgsf-1.12.3/doc/xml/gnome-vfs.xml new file mode 100644 index 0000000000..29c1d3d3a1 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/gnome-vfs.xml @@ -0,0 +1,156 @@ + + +GnomeVFS +3 +GSF Library + + + +GnomeVFS + + +Synopsis + + + + + + GsfInputGnomeVFS; +GsfInput* gsf_input_gnomevfs_new (char const *uri, + GError **error); +GsfInput* gsf_input_gnomevfs_new_uri (GnomeVFSURI *uri, + GError **error); +gboolean gsf_input_gnomevfs_needs_local_copy + (GsfInputGnomeVFS *vfs_input); + GsfOutputGnomeVFS; +GsfOutput* gsf_output_gnomevfs_new (char const *filename, + GError **err); +GsfOutput* gsf_output_gnomevfs_new_uri (GnomeVFSURI *uri, + GError **err); + + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInputGnomeVFS"/>GsfInputGnomeVFS +GsfInputGnomeVFStypedef struct _GsfInputGnomeVFS GsfInputGnomeVFS; + + + + +<anchor id="gsf-input-gnomevfs-new"/>gsf_input_gnomevfs_new () +gsf_input_gnomevfs_newGsfInput* gsf_input_gnomevfs_new (char const *uri, + GError **error); + + + +uri : + + +error : + + +Returns : + + + + + +<anchor id="gsf-input-gnomevfs-new-uri"/>gsf_input_gnomevfs_new_uri () +gsf_input_gnomevfs_new_uriGsfInput* gsf_input_gnomevfs_new_uri (GnomeVFSURI *uri, + GError **error); + + + +uri : + + +error : + + +Returns : + + + + + +<anchor id="gsf-input-gnomevfs-needs-local-copy"/>gsf_input_gnomevfs_needs_local_copy () +gsf_input_gnomevfs_needs_local_copygboolean gsf_input_gnomevfs_needs_local_copy + (GsfInputGnomeVFS *vfs_input); + + + +vfs_input : + + +Returns : + + + + + +<anchor id="GsfOutputGnomeVFS"/>GsfOutputGnomeVFS +GsfOutputGnomeVFStypedef struct _GsfOutputGnomeVFS GsfOutputGnomeVFS; + + + + +<anchor id="gsf-output-gnomevfs-new"/>gsf_output_gnomevfs_new () +gsf_output_gnomevfs_newGsfOutput* gsf_output_gnomevfs_new (char const *filename, + GError **err); + + + +filename : + + +err : + + +Returns : + + + + + +<anchor id="gsf-output-gnomevfs-new-uri"/>gsf_output_gnomevfs_new_uri () +gsf_output_gnomevfs_new_uriGsfOutput* gsf_output_gnomevfs_new_uri (GnomeVFSURI *uri, + GError **err); + + + +uri : + + +err : + + +Returns : + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/gsf-blob.xml b/lib/libgsf-1.12.3/doc/xml/gsf-blob.xml new file mode 100644 index 0000000000..a969e0b0ef --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/gsf-blob.xml @@ -0,0 +1,144 @@ + + +GsfBlob +3 +GSF Library + + + +GsfBlobA generic, unstructured block of binary data + + +Synopsis + + + + + + GsfBlob; + GsfBlobClass; +GsfBlob* gsf_blob_new (gsize size, + gconstpointer data_to_copy, + GError **error); +gsize gsf_blob_get_size (GsfBlob *blob); +gconstpointer gsf_blob_peek_data (GsfBlob *blob); + + + + + + + + + + + + + + +Description + + Some libgsf functions, in particular the metadata functions, can generate + unstructured blocks of data, or blobs. + Libgsf represents these blobs using a + GsfBlob object. + + + + +Details + +<anchor id="GsfBlob"/>GsfBlob +GsfBlobtypedef struct { + GObject object; + GsfBlobPrivate *priv; +} GsfBlob; + + + Represents an unstructured block of binary data, that is, a + sequence of bytes and an integer specifying the size of the + sequence. + + +<anchor id="GsfBlobClass"/>GsfBlobClass +GsfBlobClasstypedef struct { + GObjectClass parent_class; +} GsfBlobClass; + + + + + +<anchor id="gsf-blob-new"/>gsf_blob_new () +gsf_blob_newGsfBlob* gsf_blob_new (gsize size, + gconstpointer data_to_copy, + GError **error); + +Creates a new GsfBlob object to hold the specified data. The blob can then +be used as a facility for reference-counting for the data. The data is +copied internally, so the blob does not hold references to external chunks +of memory. + + + +size : + Size of the data in bytes. + +data_to_copy : + Data which will be copied into the blob, or NULL if size is zero. + +error : + location to store error, or NULL. + +Returns : A newly-created GsfBlob, or NULL if the data could not be copied. + +Error domain: GSF_ERROR + +Possible errors: GSF_ERROR_OUT_OF_MEMORY if the data_to_copy could not be copied. + + + +<anchor id="gsf-blob-get-size"/>gsf_blob_get_size () +gsf_blob_get_sizegsize gsf_blob_get_size (GsfBlob *blob); + +Queries the size in bytes of the data stored in the blob. + + + +blob : + A GsfBlob. + +Returns : Size in bytes, or 0 if the data is NULL. + + + +<anchor id="gsf-blob-peek-data"/>gsf_blob_peek_data () +gsf_blob_peek_datagconstpointer gsf_blob_peek_data (GsfBlob *blob); + +Queries a pointer to the data stored in the blob. This does not copy the data +for you; it returns a pointer to the actual buffer which the blob uses internally, +so you should not free this buffer on your own. + + + +blob : + A GsfBlob. + +Returns : Pointer to the data stored in the blob, or NULL if the size +of the data is zero. + + + + + + + + +See Also + + GsfClipData, GsfMetadata + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/gsf-clip-data.xml b/lib/libgsf-1.12.3/doc/xml/gsf-clip-data.xml new file mode 100644 index 0000000000..eba776f935 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/gsf-clip-data.xml @@ -0,0 +1,328 @@ + + +GsfClipData +3 +GSF Library + + + +GsfClipDataObject to hold clipboard data from a VT_CF section + + +Synopsis + + + + + +enum GsfClipFormat; +enum GsfClipFormatWindows; + GsfClipData; + GsfClipDataClass; +GsfClipData* gsf_clip_data_new (GsfClipFormat format, + GsfBlob *data_blob); +GsfClipFormat gsf_clip_data_get_format (GsfClipData *clip_data); +GsfBlob* gsf_clip_data_get_data_blob (GsfClipData *clip_data); +GsfClipFormatWindows gsf_clip_data_get_windows_clipboard_format + (GsfClipData *clip_data, + GError **error); +gconstpointer gsf_clip_data_peek_real_data (GsfClipData *clip_data, + gsize *ret_size, + GError **error); + + + + + + + + + + + + + + +Description + + OLE2 files may contain clipboard data in the + VT_CF property of the metadata in a + SummaryInfo section. This data is used, among + other things, to represent a thumbnail or pre-rendered version of + the data in the file. GsfClipData is an + object that holds such clipboard data. + + + + You can get a GsfClipData object from the + GValue returned by gsf_doc_prop_get_val(), after you have done + gsf_doc_meta_data_lookup (meta_data, + GSF_META_NAME_THUMBNAIL). The resulting GsfClipData + object, if it exists, contains the thumbnail data. In turn, the + thumbnail data may be in different formats, as specified by the + GsfClipFormat enumeration. + + + + Internally, GsfClipData stores the thumbnail data plus any extra + information in a GsfBlob object. GsfClipData provides a + convenience function, gsf_clip_data_peek_real_data(), to extract + the thumbnail data directly. If you need to use the raw binary + data instead of the data specific to the thumbnail, you can use + gsf_clip_data_get_data_blob() to get the GsfBlob object and + handle it yourself. + + + + +Details + +<anchor id="GsfClipFormat"/>enum GsfClipFormat +GsfClipFormattypedef enum { + GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD = -1, + GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARD = -2, + GSF_CLIP_FORMAT_GUID = -3, + GSF_CLIP_FORMAT_NO_DATA = 0, + GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAME = 1, /* in the file it's actually any positive integer */ + GSF_CLIP_FORMAT_UNKNOWN /* this is our own value for unknown types or invalid data */ +} GsfClipFormat; + + + A GsfClipData stores all its thumbnail data and associated + information in an internal GsfBlob object. The + GsfClipFormat enumeration represents the possible + formats for this data blob. + + +GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD +The thumbnail data is stored in + Windows clipboard format. The particular sub-format can be in any of + the values in the GsfClipFormatWindows enumeration. When a + GsfClipData is in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD, you can use + gsf_clip_data_get_windows_clipboard_format() to get the sub-format + in which the data is actually stored. + + + +GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARD +The thumbnail data is stored in + Macintosh clipboard format, usually PICT. + + + +GSF_CLIP_FORMAT_GUID +The thumbnail data contains a GUID specifying + the OLE component which can be used to render it. Please refer to + the OLE2 format documentation for details. + + + +GSF_CLIP_FORMAT_NO_DATA +There is no thumbnail data. + + + +GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAME +The thumbnail data contains a + null-terminated string with a Windows clipboard format name. Please refer to + the OLE2 format documentation for details. + + + +GSF_CLIP_FORMAT_UNKNOWN +The thumbnail data is in an unknown format, + but is nevertheless stored in a GsfBlob. + + + + + +<anchor id="GsfClipFormatWindows"/>enum GsfClipFormatWindows +GsfClipFormatWindowstypedef enum { + GSF_CLIP_FORMAT_WINDOWS_ERROR = -1, /* our own value */ + GSF_CLIP_FORMAT_WINDOWS_UNKNOWN = -2, /* our own value */ + GSF_CLIP_FORMAT_WINDOWS_METAFILE = 3, /* CF_METAFILEPICT */ + GSF_CLIP_FORMAT_WINDOWS_DIB = 8, /* CF_DIB */ + GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE = 14 /* CF_ENHMETAFILE */ +} GsfClipFormatWindows; + + + When a GsfClipData is in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD + format, it can be in any of the subformats specified by the + GsfClipFormatWindows enumeration. Use + gsf_clip_data_get_windows_clipboard_format() to determine this + sub-format. + + + + For all of these values, the gsf_clip_data_peek_real_data() + function lets you access the data directly. + + +GSF_CLIP_FORMAT_WINDOWS_ERROR +The OLE file is probably corrupt. + + + +GSF_CLIP_FORMAT_WINDOWS_UNKNOWN +The specific clipboard format is + unknown to libgsf. + + + +GSF_CLIP_FORMAT_WINDOWS_METAFILE +The data is in Windows Metafile + format. While OLE files store extra header data in this case, the + gsf_clip_data_peek_real_data() function will let you access the WMF + data directly, and it will ignore the extra header bytes. + + + +GSF_CLIP_FORMAT_WINDOWS_DIB +The data is in Windows + Device-Independent Bitmap format. + + + +GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE +The data is in Windows + Enhanced Metaflie format. + + + + + +<anchor id="GsfClipData"/>GsfClipData +GsfClipDatatypedef struct { + GObject object; + + GsfClipDataPrivate *priv; +} GsfClipData; + + + Object used to represent a VT_CF property in the OLE stream. + + +<anchor id="GsfClipDataClass"/>GsfClipDataClass +GsfClipDataClasstypedef struct { + GObjectClass parent_class; +} GsfClipDataClass; + + + + + +<anchor id="gsf-clip-data-new"/>gsf_clip_data_new () +gsf_clip_data_newGsfClipData* gsf_clip_data_new (GsfClipFormat format, + GsfBlob *data_blob); + +Creates a new GsfClipData object. This function acquires a reference to the +data_blob, so you should unref the blob on your own if you no longer need it +directly. + + + +format : + Format for the data inside the data_blob + +data_blob : + Object which holds the binary contents for the GsfClipData + +Returns : A newly-created GsfClipData. + + + +<anchor id="gsf-clip-data-get-format"/>gsf_clip_data_get_format () +gsf_clip_data_get_formatGsfClipFormat gsf_clip_data_get_format (GsfClipData *clip_data); + +Queries the clipboard data format of a GsfClipData. The format refers to the data +blob inside the clip_data; use gsf_clip_data_get_data_blob() to get that data blob. + + + +clip_data : + A GsfClipData. + +Returns : The format in which the GsfClipData's data blob is stored. + + + +<anchor id="gsf-clip-data-get-data-blob"/>gsf_clip_data_get_data_blob () +gsf_clip_data_get_data_blobGsfBlob* gsf_clip_data_get_data_blob (GsfClipData *clip_data); + +Queries the data blob that actually stores a GsfClipData's binary data. + + + +clip_data : + A GsfClipData. + +Returns : A new reference to the GsfBlob that stores this clip_data's +binary data. You must use g_object_unref() to dispose of that data blob when +you are done with it. + + + +<anchor id="gsf-clip-data-get-windows-clipboard-format"/>gsf_clip_data_get_windows_clipboard_format () +gsf_clip_data_get_windows_clipboard_formatGsfClipFormatWindows gsf_clip_data_get_windows_clipboard_format + (GsfClipData *clip_data, + GError **error); + +Queries the Windows clipboard data format for a GsfClipData. The clip_data must +have been created with GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD. + + + +clip_data : + A GsfClipData. + +error : + Location to store error, or NULL + +Returns : A GsfClipFormatWindows value. + +Possible errors: GSF_ERROR_INVALID_DATA if the data blob in the clip_data is +smaller than it should be; in this case GSF_CLIP_FORMAT_WINDOWS_ERROR will be returned. + + + +<anchor id="gsf-clip-data-peek-real-data"/>gsf_clip_data_peek_real_data () +gsf_clip_data_peek_real_datagconstpointer gsf_clip_data_peek_real_data (GsfClipData *clip_data, + gsize *ret_size, + GError **error); + +Queries a pointer directly to the clipboard data of a GsfClipData. The +resulting pointer is not necessarily the same data pointer that was passed to +gsf_blob_new() prior to creating the clip_data. For example, if the data is +in GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD format, then it will have extra header +bytes in front of the actual metafile data. This function will skip over +those header bytes if necessary and return a pointer to the "real" data. + + + +clip_data : + A GsfClipData. + +ret_size : + Location to return the size of the returned data buffer. + +error : + Location to store error, or NULL. + +Returns : Pointer to the real clipboard data. The size in bytes of this +buffer is returned in the ret_size argument. + + + + + + + + +See Also + + GsfBlob, GsfDocMetaData + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/gsf.xml b/lib/libgsf-1.12.3/doc/xml/gsf.xml new file mode 100644 index 0000000000..94b2d1a8d2 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/gsf.xml @@ -0,0 +1,52 @@ + + +gsf +3 +GSF Library + + + +gsf + + +Synopsis + + + + + +typedef gsf_off_t; + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="gsf-off-t"/>gsf_off_t +gsf_off_ttypedef gint64 gsf_off_t; + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/infile.xml b/lib/libgsf-1.12.3/doc/xml/infile.xml new file mode 100644 index 0000000000..ee3a2f13c8 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/infile.xml @@ -0,0 +1,168 @@ + + +Infile reading structed files +3 +GSF Library + + + +Infile reading structed files + + +Synopsis + + + + + + GsfInfile; +int gsf_infile_num_children (GsfInfile *infile); +GsfInput* gsf_infile_child_by_index (GsfInfile *infile, + int i); +GsfInput* gsf_infile_child_by_name (GsfInfile *infile, + char const *name); +GsfInput* gsf_infile_child_by_vname (GsfInfile *infile, + char const *name, + ...); +charconst * gsf_infile_name_by_index (GsfInfile *infile, + int i); + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInfile + +----GsfInfileMSOle + +----GsfInfileStdio + +----GsfInfileZip + +----GsfStructuredBlob + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInfile-struct"/>GsfInfile +GsfInfiletypedef struct _GsfInfile GsfInfile; + + + + +<anchor id="gsf-infile-num-children"/>gsf_infile_num_children () +gsf_infile_num_childrenint gsf_infile_num_children (GsfInfile *infile); + + + + + +infile : + the structured storage + +Returns :the number of children the storage has, or -1 if the storage can not + have children. + + + +<anchor id="gsf-infile-child-by-index"/>gsf_infile_child_by_index () +gsf_infile_child_by_indexGsfInput* gsf_infile_child_by_index (GsfInfile *infile, + int i); + +TODO : For 2.0 api will change to include a GError. + + + +infile : + + +i : + + +Returns :a newly created child which must be unrefed. + + + +<anchor id="gsf-infile-child-by-name"/>gsf_infile_child_by_name () +gsf_infile_child_by_nameGsfInput* gsf_infile_child_by_name (GsfInfile *infile, + char const *name); + +TODO : For 2.0 api will change to include a GError. + + + +infile : + + +name : + + +Returns :a newly created child which must be unrefed. + + + +<anchor id="gsf-infile-child-by-vname"/>gsf_infile_child_by_vname () +gsf_infile_child_by_vnameGsfInput* gsf_infile_child_by_vname (GsfInfile *infile, + char const *name, + ...); + + + + + +infile : + + +name : + A null terminated list of names + +... : + the rest of the names + +Returns :a newly created child which must be unrefed. + + + +<anchor id="gsf-infile-name-by-index"/>gsf_infile_name_by_index () +gsf_infile_name_by_indexcharconst * gsf_infile_name_by_index (GsfInfile *infile, + int i); + + + + + +infile : + + +i : + + +Returns :the utf8 encoded name of the i-th child +NOTE : DO NOT FREE THE STRING + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/input.xml b/lib/libgsf-1.12.3/doc/xml/input.xml new file mode 100644 index 0000000000..78ee86ccc0 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/input.xml @@ -0,0 +1,521 @@ + + +Input from unstructured files +3 +GSF Library + + + +Input from unstructured files + + +Synopsis + + + + + + GsfInput; +guint8const * gsf_input_read (GsfInput *input, + size_t num_bytes, + guint8 *optional_buffer); +gsf_off_t gsf_input_tell (GsfInput *input); +gboolean gsf_input_seek (GsfInput *input, + gsf_off_t offset, + GSeekType whence); +GsfInfile* gsf_input_container (GsfInput *input); +GsfInput* gsf_input_dup (GsfInput *input, + GError **err); +gsf_off_t gsf_input_size (GsfInput *input); +gboolean gsf_input_eof (GsfInput *input); +gsf_off_t gsf_input_remaining (GsfInput *input); +GQuark gsf_input_error_id (void); +GsfInput* gsf_input_sibling (GsfInput const *input, + char const *name, + GError **err); +GQuark gsf_input_error (void); +charconst * gsf_input_name (GsfInput *input); +gboolean gsf_input_set_name_from_filename + (GsfInput *input, + char const *filename); + GsfInputProxy; +GsfInput* gsf_input_proxy_new (GsfInput *source); +GsfInput* gsf_input_proxy_new_section (GsfInput *source, + gsf_off_t offset, + gsf_off_t size); + +gboolean gsf_input_copy (GsfInput *input, + GsfOutput *output); +GsfInput* gsf_input_uncompress (GsfInput *src); + +gboolean gsf_input_set_name (GsfInput *input, + char const *name); +gboolean gsf_input_set_container (GsfInput *input, + GsfInfile *container); +gboolean gsf_input_set_size (GsfInput *input, + gsf_off_t size); +gboolean gsf_input_seek_emulate (GsfInput *input, + gsf_off_t pos); + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInfile + +----GsfInputGZip + +----GsfInputMemory + +----GsfInputStdio + +----GsfInputTextline + + + + + + + + + +Properties + + + "eof" gboolean : Read + "name" gchararray : Read + "position" gint64 : Read + "remaining" gint64 : Read + "size" gint64 : Read + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInput-struct"/>GsfInput +GsfInputtypedef struct _GsfInput GsfInput; + + + + +<anchor id="gsf-input-read"/>gsf_input_read () +gsf_input_readguint8const * gsf_input_read (GsfInput *input, + size_t num_bytes, + guint8 *optional_buffer); + +Read at least num_bytes. Does not change the current position if there +is an error. Will only read if the entire amount can be read. Invalidates +the buffer associated with previous calls to gsf_input_read. + + + +input : + the input stream + +num_bytes : + number of bytes to read + +optional_buffer : + NULL, or pointer to destination memory area + +Returns :: pointer to the buffer or NULL if there is an error or 0 bytes are + requested. + + + +<anchor id="gsf-input-tell"/>gsf_input_tell () +gsf_input_tellgsf_off_t gsf_input_tell (GsfInput *input); + + + + + +input : + the input stream + +Returns :the current offset in the file. + + + +<anchor id="gsf-input-seek"/>gsf_input_seek () +gsf_input_seekgboolean gsf_input_seek (GsfInput *input, + gsf_off_t offset, + GSeekType whence); + + + + + +input : + the input stream + +offset : + target offset + +whence : + determines whether the offset is relative to the beginning or + the end of the stream, or to the current location. + +Returns :TRUE on error. + + + +<anchor id="gsf-input-container"/>gsf_input_container () +gsf_input_containerGsfInfile* gsf_input_container (GsfInput *input); + + + + + +input : + the input stream + +Returns :, but does not add a reference to input's container. +Potentially NULL + + + +<anchor id="gsf-input-dup"/>gsf_input_dup () +gsf_input_dupGsfInput* gsf_input_dup (GsfInput *input, + GError **err); + +Duplicates input src leaving the new one at the same offset. + + + +input : + The input to duplicate + +err : + optionally NULL + +Returns :: the duplicate, or NULL on error + + + +<anchor id="gsf-input-size"/>gsf_input_size () +gsf_input_sizegsf_off_t gsf_input_size (GsfInput *input); + +Looks up and caches the number of bytes in the input + + + +input : + The input + +Returns :: the size or -1 on error + + + +<anchor id="gsf-input-eof"/>gsf_input_eof () +gsf_input_eofgboolean gsf_input_eof (GsfInput *input); + +Are we at the end of the file ? + + + +input : + the input + +Returns :: TRUE if the input is at the eof. + + + +<anchor id="gsf-input-remaining"/>gsf_input_remaining () +gsf_input_remaininggsf_off_t gsf_input_remaining (GsfInput *input); + + + + + +input : + the input stream + +Returns :the number of bytes left in the file. + + + +<anchor id="gsf-input-error-id"/>gsf_input_error_id () +gsf_input_error_idGQuark gsf_input_error_id (void); + + + + + +Returns :: A utility quark to flag a GError as being an input problem. + + + +<anchor id="gsf-input-sibling"/>gsf_input_sibling () +gsf_input_siblingGsfInput* gsf_input_sibling (GsfInput const *input, + char const *name, + GError **err); + + + +input : + + +name : + + +err : + + +Returns : + + + + + +<anchor id="gsf-input-error"/>gsf_input_error () +gsf_input_errorGQuark gsf_input_error (void); + +Deprecated in 1.12.0 + + + +Returns :: A utility quark to flag a GError as being an input problem. + + + +<anchor id="gsf-input-name"/>gsf_input_name () +gsf_input_namecharconst * gsf_input_name (GsfInput *input); + + + + + +input : + the input stream + +Returns :input's name in utf8 form, or NULL if it has no name. + + + +<anchor id="gsf-input-set-name-from-filename"/>gsf_input_set_name_from_filename () +gsf_input_set_name_from_filenamegboolean gsf_input_set_name_from_filename + (GsfInput *input, + char const *filename); + +protected. + + + +input : + the input stream + +filename : + the (fs-sys encoded) filename + +Returns :: TRUE if the assignment was ok. + + + +<anchor id="GsfInputProxy"/>GsfInputProxy +GsfInputProxytypedef struct _GsfInputProxy GsfInputProxy; + + + + +<anchor id="gsf-input-proxy-new"/>gsf_input_proxy_new () +gsf_input_proxy_newGsfInput* gsf_input_proxy_new (GsfInput *source); + +This creates a new proxy to the entire, given input source. See +gsf_input_proxy_new_section for details. + + + +source : + The underlying data source. + +Returns :a new input object. + + + +<anchor id="gsf-input-proxy-new-section"/>gsf_input_proxy_new_section () +gsf_input_proxy_new_sectionGsfInput* gsf_input_proxy_new_section (GsfInput *source, + gsf_off_t offset, + gsf_off_t size); + +This creates a new proxy to a section of the given source. The new +object will have its own current position, but any operation on it +can change the source's position. + + +If a proxy to a proxy is created, the intermediate proxy is short- +circuited. + + +This function will ref the source. + + + +source : + The underlying data source. + +offset : + Offset into source for start of section. + +size : + Length of section. + +Returns :a new input object. + + + +<anchor id="gsf-input-copy"/>gsf_input_copy () +gsf_input_copygboolean gsf_input_copy (GsfInput *input, + GsfOutput *output); + +Copy the contents from input to output from their respective +current positions. So if you want to be sure to copy *everything*, +make sure to call gsf_input_seek (input, 0, G_SEEK_SET) and +gsf_output_seek (output, 0, G_SEEK_SET) first, if applicable. + + + +input : + a non-null GsfInput + +output : + a non-null GsfOutput + +Returns :: TRUE on Success + + + +<anchor id="gsf-input-uncompress"/>gsf_input_uncompress () +gsf_input_uncompressGsfInput* gsf_input_uncompress (GsfInput *src); + + + + + +src : + stream to be uncompressed. + +Returns : A stream equivalent to the source stream, but uncompressed if +the source was compressed. + +This functions takes ownership of the incoming reference and yields a +new one as its output. + + + +<anchor id="gsf-input-set-name"/>gsf_input_set_name () +gsf_input_set_namegboolean gsf_input_set_name (GsfInput *input, + char const *name); + +protected. + + + +input : + the input stream + +name : + the new name of the stream, or NULL. + +Returns :: TRUE if the assignment was ok. + + + +<anchor id="gsf-input-set-container"/>gsf_input_set_container () +gsf_input_set_containergboolean gsf_input_set_container (GsfInput *input, + GsfInfile *container); + + + + + +input : + the input stream + +container : + + +Returns :: TRUE if the assignment was ok. + + + +<anchor id="gsf-input-set-size"/>gsf_input_set_size () +gsf_input_set_sizegboolean gsf_input_set_size (GsfInput *input, + gsf_off_t size); + + + + + +input : + the input stream + +size : + the size of the stream + +Returns :: TRUE if the assignment was ok. + + + +<anchor id="gsf-input-seek-emulate"/>gsf_input_seek_emulate () +gsf_input_seek_emulategboolean gsf_input_seek_emulate (GsfInput *input, + gsf_off_t pos); + + + + + +input : + stream to emulate seek for + +pos : + absolute position to seek to + +Returns :: TRUE if the emulation failed. + + + + + +Properties +<anchor id="GsfInput--eof"/>The "<literal>eof</literal>" property + "eof" gboolean : Read +End Of File.Default value: FALSE + +<anchor id="GsfInput--name"/>The "<literal>name</literal>" property + "name" gchararray : Read +The Input's Name.Default value: NULL + +<anchor id="GsfInput--position"/>The "<literal>position</literal>" property + "position" gint64 : Read +The Output's Current Position.Allowed values: >= 0 +Default value: 0 + +<anchor id="GsfInput--remaining"/>The "<literal>remaining</literal>" property + "remaining" gint64 : Read +Amount of Data Remaining.Allowed values: >= 0 +Default value: 0 + +<anchor id="GsfInput--size"/>The "<literal>size</literal>" property + "size" gint64 : Read +The Input's Size.Allowed values: >= 0 +Default value: 0 + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/iochannel.xml b/lib/libgsf-1.12.3/doc/xml/iochannel.xml new file mode 100644 index 0000000000..31b8b1a100 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/iochannel.xml @@ -0,0 +1,77 @@ + + +GIOChannel +3 +GSF Library + + + +GIOChannel + + +Synopsis + + + + + + GsfOutputIOChannel; +GsfOutput* gsf_output_iochannel_new (GIOChannel *channel); + + + + + +Object Hierarchy + + + GObject + +----GsfOutput + +----GsfOutputIOChannel + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfOutputIOChannel-struct"/>GsfOutputIOChannel +GsfOutputIOChanneltypedef struct _GsfOutputIOChannel GsfOutputIOChannel; + + + + +<anchor id="gsf-output-iochannel-new"/>gsf_output_iochannel_new () +gsf_output_iochannel_newGsfOutput* gsf_output_iochannel_new (GIOChannel *channel); + + + + + +channel : + A GIOChannel + +Returns :a new file or NULL. + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/memory.xml b/lib/libgsf-1.12.3/doc/xml/memory.xml new file mode 100644 index 0000000000..fa6704f917 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/memory.xml @@ -0,0 +1,260 @@ + + +memory +3 +GSF Library + + + +memory + + +Synopsis + + + + + + GsfInputMemory; +GsfInput* gsf_input_mmap_new (char const *filename, + GError **err); +GsfInput* gsf_input_memory_new (guint8 const *buf, + gsf_off_t length, + gboolean needs_free); +GsfInput* gsf_input_memory_new_clone (guint8 const *buf, + gsf_off_t length); +GsfInput* gsf_input_memory_new_from_iochannel + (GIOChannel *channel, + GError **error); + GsfOutputMemory; +const guint8* gsf_output_memory_get_bytes (GsfOutputMemory *mem); +GType gsf_output_memory_get_type (void); +GsfOutput* gsf_output_memory_new (void); + GsfSharedMemory; +GsfSharedMemory* gsf_shared_memory_new (void *buf, + gsf_off_t size, + gboolean needs_free); +GsfSharedMemory* gsf_shared_memory_mmapped_new + (void *buf, + gsf_off_t size); + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInputMemory + + + + GObject + +----GsfOutput + +----GsfOutputMemory + + + + GObject + +----GsfSharedMemory + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInputMemory-struct"/>GsfInputMemory +GsfInputMemorytypedef struct _GsfInputMemory GsfInputMemory; + + + + +<anchor id="gsf-input-mmap-new"/>gsf_input_mmap_new () +gsf_input_mmap_newGsfInput* gsf_input_mmap_new (char const *filename, + GError **err); + + + + + +filename : + The file on disk that you want to mmap + +err : + A GError, or optionally null + +Returns : A new GsfInputMemory + + + +<anchor id="gsf-input-memory-new"/>gsf_input_memory_new () +gsf_input_memory_newGsfInput* gsf_input_memory_new (guint8 const *buf, + gsf_off_t length, + gboolean needs_free); + + + + + +buf : + The input bytes + +length : + The length of buf + +needs_free : + Whether you want this memory to be free'd at object destruction + +Returns : A new GsfInputMemory + + + +<anchor id="gsf-input-memory-new-clone"/>gsf_input_memory_new_clone () +gsf_input_memory_new_cloneGsfInput* gsf_input_memory_new_clone (guint8 const *buf, + gsf_off_t length); + + + + + +buf : + The input bytes + +length : + The length of buf + +Returns : A new GsfInputMemory + + + +<anchor id="gsf-input-memory-new-from-iochannel"/>gsf_input_memory_new_from_iochannel () +gsf_input_memory_new_from_iochannelGsfInput* gsf_input_memory_new_from_iochannel + (GIOChannel *channel, + GError **error); + + + + + +channel : + a GIOChannel. + +error : + a GError + +Returns :a new GsfInputMemory or NULL. + + + +<anchor id="GsfOutputMemory-struct"/>GsfOutputMemory +GsfOutputMemorytypedef struct _GsfOutputMemory GsfOutputMemory; + + + + +<anchor id="gsf-output-memory-get-bytes"/>gsf_output_memory_get_bytes () +gsf_output_memory_get_bytesconst guint8* gsf_output_memory_get_bytes (GsfOutputMemory *mem); + + + + + +mem : + the output device. + +Returns : The data that has been written to mem, or null + + + +<anchor id="gsf-output-memory-get-type"/>gsf_output_memory_get_type () +gsf_output_memory_get_typeGType gsf_output_memory_get_type (void); + + + +Returns : + + + + + +<anchor id="gsf-output-memory-new"/>gsf_output_memory_new () +gsf_output_memory_newGsfOutput* gsf_output_memory_new (void); + + + + + +Returns :a new file or NULL. + + + +<anchor id="GsfSharedMemory-struct"/>GsfSharedMemory +GsfSharedMemorytypedef struct _GsfSharedMemory GsfSharedMemory; + + + + +<anchor id="gsf-shared-memory-new"/>gsf_shared_memory_new () +gsf_shared_memory_newGsfSharedMemory* gsf_shared_memory_new (void *buf, + gsf_off_t size, + gboolean needs_free); + + + +buf : + + +size : + + +needs_free : + + +Returns : + + + + + +<anchor id="gsf-shared-memory-mmapped-new"/>gsf_shared_memory_mmapped_new () +gsf_shared_memory_mmapped_newGsfSharedMemory* gsf_shared_memory_mmapped_new + (void *buf, + gsf_off_t size); + + + +buf : + + +size : + + +Returns : + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/metadata.xml b/lib/libgsf-1.12.3/doc/xml/metadata.xml new file mode 100644 index 0000000000..277c7f0a60 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/metadata.xml @@ -0,0 +1,800 @@ + + +metadata +3 +GSF Library + + + +metadata + + +Synopsis + + + + + + GsfDocMetaData; +GsfDocMetaData* gsf_doc_meta_data_new (void); +GsfDocProp* gsf_doc_meta_data_lookup (GsfDocMetaData const *meta, + char const *name); +void gsf_doc_meta_data_insert (GsfDocMetaData *meta, + char *name, + GValue *value); +void gsf_doc_meta_data_remove (GsfDocMetaData *meta, + char const *name); +GsfDocProp* gsf_doc_meta_data_steal (GsfDocMetaData *meta, + char const *name); +void gsf_doc_meta_data_store (GsfDocMetaData *meta, + GsfDocProp *prop); +void gsf_doc_meta_data_foreach (GsfDocMetaData const *meta, + GHFunc func, + gpointer user_data); +gsize gsf_doc_meta_data_size (GsfDocMetaData const *meta); + GsfDocProp; +GsfDocProp* gsf_doc_prop_new (char *name); +void gsf_doc_prop_free (GsfDocProp *prop); +charconst * gsf_doc_prop_get_name (GsfDocProp const *prop); +GValueconst * gsf_doc_prop_get_val (GsfDocProp const *prop); +void gsf_doc_prop_set_val (GsfDocProp *prop, + GValue *val); +charconst * gsf_doc_prop_get_link (GsfDocProp const *prop); +void gsf_doc_prop_set_link (GsfDocProp *prop, + char *link); + GsfDocPropVector; +GsfDocPropVector* gsf_docprop_vector_new (void); +void gsf_docprop_vector_append (GsfDocPropVector *vector, + GValue *value); +gchar* gsf_docprop_vector_as_string (GsfDocPropVector *vector); +GValueArray* gsf_value_get_docprop_varray (GValue const *value); +GsfDocPropVector* gsf_value_get_docprop_vector + (GValue const *value); + +#define GSF_META_NAME_TITLE +#define GSF_META_NAME_DESCRIPTION +#define GSF_META_NAME_SUBJECT +#define GSF_META_NAME_DATE_MODIFIED +#define GSF_META_NAME_DATE_CREATED +#define GSF_META_NAME_KEYWORDS +#define GSF_META_NAME_LANGUAGE +#define GSF_META_NAME_REVISION_COUNT +#define GSF_META_NAME_EDITING_DURATION +#define GSF_META_NAME_TABLE_COUNT +#define GSF_META_NAME_IMAGE_COUNT +#define GSF_META_NAME_OBJECT_COUNT +#define GSF_META_NAME_PAGE_COUNT +#define GSF_META_NAME_PARAGRAPH_COUNT +#define GSF_META_NAME_WORD_COUNT +#define GSF_META_NAME_CHARACTER_COUNT +#define GSF_META_NAME_CELL_COUNT +#define GSF_META_NAME_SPREADSHEET_COUNT +#define GSF_META_NAME_CREATOR +#define GSF_META_NAME_TEMPLATE +#define GSF_META_NAME_LAST_SAVED_BY +#define GSF_META_NAME_LAST_PRINTED +#define GSF_META_NAME_SECURITY +#define GSF_META_NAME_CATEGORY +#define GSF_META_NAME_PRESENTATION_FORMAT +#define GSF_META_NAME_THUMBNAIL +#define GSF_META_NAME_GENERATOR +#define GSF_META_NAME_LINE_COUNT +#define GSF_META_NAME_SLIDE_COUNT +#define GSF_META_NAME_NOTE_COUNT +#define GSF_META_NAME_HIDDEN_SLIDE_COUNT +#define GSF_META_NAME_MM_CLIP_COUNT +#define GSF_META_NAME_BYTE_COUNT +#define GSF_META_NAME_SCALE +#define GSF_META_NAME_HEADING_PAIRS +#define GSF_META_NAME_DOCUMENT_PARTS +#define GSF_META_NAME_MANAGER +#define GSF_META_NAME_COMPANY +#define GSF_META_NAME_LINKS_DIRTY +#define GSF_META_NAME_DICTIONARY +#define GSF_META_NAME_MSOLE_UNKNOWN_17 +#define GSF_META_NAME_MSOLE_UNKNOWN_18 +#define GSF_META_NAME_MSOLE_UNKNOWN_19 +#define GSF_META_NAME_MSOLE_UNKNOWN_20 +#define GSF_META_NAME_MSOLE_UNKNOWN_21 +#define GSF_META_NAME_MSOLE_UNKNOWN_22 +#define GSF_META_NAME_MSOLE_UNKNOWN_23 +#define GSF_META_NAME_LOCALE_SYSTEM_DEFAULT +#define GSF_META_NAME_CASE_SENSITIVE + + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfDocMetaData"/>GsfDocMetaData +GsfDocMetaDatatypedef struct _GsfDocMetaData GsfDocMetaData; + + + + +<anchor id="gsf-doc-meta-data-new"/>gsf_doc_meta_data_new () +gsf_doc_meta_data_newGsfDocMetaData* gsf_doc_meta_data_new (void); + + + + + +Returns :a new metadata property collection + + + +<anchor id="gsf-doc-meta-data-lookup"/>gsf_doc_meta_data_lookup () +gsf_doc_meta_data_lookupGsfDocProp* gsf_doc_meta_data_lookup (GsfDocMetaData const *meta, + char const *name); + + + + + +meta : + GsfDocMetaData + +name : + + +Returns :the property with name id in meta. The caller can modify the +property value and link but not the name. + + + +<anchor id="gsf-doc-meta-data-insert"/>gsf_doc_meta_data_insert () +gsf_doc_meta_data_insertvoid gsf_doc_meta_data_insert (GsfDocMetaData *meta, + char *name, + GValue *value); + +Take ownership of name and value and insert a property into meta. +If a property exists with name, it is replaced (The link is lost) + + + +meta : + GsfDocMetaData + +name : + + +value : + GValue + + + +<anchor id="gsf-doc-meta-data-remove"/>gsf_doc_meta_data_remove () +gsf_doc_meta_data_removevoid gsf_doc_meta_data_remove (GsfDocMetaData *meta, + char const *name); + +If name does not exist in the collection, do nothing. If name does exist, +remove it and its value from the collection + + + +meta : + the collection + +name : + the non-null string name of the property + + + +<anchor id="gsf-doc-meta-data-steal"/>gsf_doc_meta_data_steal () +gsf_doc_meta_data_stealGsfDocProp* gsf_doc_meta_data_steal (GsfDocMetaData *meta, + char const *name); + + + +meta : + + +name : + + +Returns : + + + + + +<anchor id="gsf-doc-meta-data-store"/>gsf_doc_meta_data_store () +gsf_doc_meta_data_storevoid gsf_doc_meta_data_store (GsfDocMetaData *meta, + GsfDocProp *prop); + + + + + +meta : + GsfDocMetaData + +prop : + GsfDocProp + + + +<anchor id="gsf-doc-meta-data-foreach"/>gsf_doc_meta_data_foreach () +gsf_doc_meta_data_foreachvoid gsf_doc_meta_data_foreach (GsfDocMetaData const *meta, + GHFunc func, + gpointer user_data); + +Iterate through each (key, value) pair in this collection + + + +meta : + the collection + +func : + the function called once for each element in the collection + +user_data : + any supplied user data or NULL + + + +<anchor id="gsf-doc-meta-data-size"/>gsf_doc_meta_data_size () +gsf_doc_meta_data_sizegsize gsf_doc_meta_data_size (GsfDocMetaData const *meta); + + + + + +meta : + the collection + +Returns :the number of items in this collection + + + +<anchor id="GsfDocProp"/>GsfDocProp +GsfDocProptypedef struct _GsfDocProp GsfDocProp; + + + + +<anchor id="gsf-doc-prop-new"/>gsf_doc_prop_new () +gsf_doc_prop_newGsfDocProp* gsf_doc_prop_new (char *name); + + + + + +name : + + +Returns :a new GsfDocProp which the caller is responsible for freeing. +Takes ownership of name. + + + +<anchor id="gsf-doc-prop-free"/>gsf_doc_prop_free () +gsf_doc_prop_freevoid gsf_doc_prop_free (GsfDocProp *prop); + +If prop is non NULL free the memory assosociated with it + + + +prop : + GsfDocProp + + + +<anchor id="gsf-doc-prop-get-name"/>gsf_doc_prop_get_name () +gsf_doc_prop_get_namecharconst * gsf_doc_prop_get_name (GsfDocProp const *prop); + + + + + +prop : + GsfDocProp + +Returns :the name of the property, the caller should not modify the result. + + + +<anchor id="gsf-doc-prop-get-val"/>gsf_doc_prop_get_val () +gsf_doc_prop_get_valGValueconst * gsf_doc_prop_get_val (GsfDocProp const *prop); + + + + + +prop : + the property + +Returns :the value of the property, the caller should not modify the result. + + + +<anchor id="gsf-doc-prop-set-val"/>gsf_doc_prop_set_val () +gsf_doc_prop_set_valvoid gsf_doc_prop_set_val (GsfDocProp *prop, + GValue *val); + +Assigns val to prop, and unsets and frees the current value. + + + +prop : + GsfDocProp + +val : + GValue + + + +<anchor id="gsf-doc-prop-get-link"/>gsf_doc_prop_get_link () +gsf_doc_prop_get_linkcharconst * gsf_doc_prop_get_link (GsfDocProp const *prop); + + + + + +prop : + GsfDocProp + +Returns :the current link descriptor of prop. The result should not be + freed or modified. + + + +<anchor id="gsf-doc-prop-set-link"/>gsf_doc_prop_set_link () +gsf_doc_prop_set_linkvoid gsf_doc_prop_set_link (GsfDocProp *prop, + char *link); + + + + + +prop : + GsfDocProp + +link : + + + + +<anchor id="GsfDocPropVector"/>GsfDocPropVector +GsfDocPropVectortypedef struct _GsfDocPropVector GsfDocPropVector; + + + + +<anchor id="gsf-docprop-vector-new"/>gsf_docprop_vector_new () +gsf_docprop_vector_newGsfDocPropVector* gsf_docprop_vector_new (void); + +This function creates a new gsf_docprop_vector object. + + + +Returns : GsfDocPropVector* + + + +<anchor id="gsf-docprop-vector-append"/>gsf_docprop_vector_append () +gsf_docprop_vector_appendvoid gsf_docprop_vector_append (GsfDocPropVector *vector, + GValue *value); + +Insert a copy of value as the last element of vector. + + + +vector : + The vector to which the GValue will be added + +value : + The GValue to add to vector + + + +<anchor id="gsf-docprop-vector-as-string"/>gsf_docprop_vector_as_string () +gsf_docprop_vector_as_stringgchar* gsf_docprop_vector_as_string (GsfDocPropVector *vector); + +This function returns a string which represents all the GValues in vector. +The caller is responsible for freeing the result. + + + +vector : + The GsfDocPropVector from which GValues will be extracted. + +Returns : a string of comma-separated values + + + +<anchor id="gsf-value-get-docprop-varray"/>gsf_value_get_docprop_varray () +gsf_value_get_docprop_varrayGValueArray* gsf_value_get_docprop_varray (GValue const *value); + + + +value : + + +Returns : + + + + + +<anchor id="gsf-value-get-docprop-vector"/>gsf_value_get_docprop_vector () +gsf_value_get_docprop_vectorGsfDocPropVector* gsf_value_get_docprop_vector + (GValue const *value); + + + +value : + + +Returns : + + + + + +<anchor id="GSF-META-NAME-TITLE:CAPS"/>GSF_META_NAME_TITLE +GSF_META_NAME_TITLE#define GSF_META_NAME_TITLE "dc:title" + + + + + +<anchor id="GSF-META-NAME-DESCRIPTION:CAPS"/>GSF_META_NAME_DESCRIPTION +GSF_META_NAME_DESCRIPTION#define GSF_META_NAME_DESCRIPTION "dc:description" + + + + + +<anchor id="GSF-META-NAME-SUBJECT:CAPS"/>GSF_META_NAME_SUBJECT +GSF_META_NAME_SUBJECT#define GSF_META_NAME_SUBJECT "dc:subject" + + + + + +<anchor id="GSF-META-NAME-DATE-MODIFIED:CAPS"/>GSF_META_NAME_DATE_MODIFIED +GSF_META_NAME_DATE_MODIFIED#define GSF_META_NAME_DATE_MODIFIED "dc:date-modified" + + + + + +<anchor id="GSF-META-NAME-DATE-CREATED:CAPS"/>GSF_META_NAME_DATE_CREATED +GSF_META_NAME_DATE_CREATED#define GSF_META_NAME_DATE_CREATED "gsf:date-created" + + + + + +<anchor id="GSF-META-NAME-KEYWORDS:CAPS"/>GSF_META_NAME_KEYWORDS +GSF_META_NAME_KEYWORDS#define GSF_META_NAME_KEYWORDS "dc:keywords" + + + + + +<anchor id="GSF-META-NAME-LANGUAGE:CAPS"/>GSF_META_NAME_LANGUAGE +GSF_META_NAME_LANGUAGE#define GSF_META_NAME_LANGUAGE "dc:language" + + + + + +<anchor id="GSF-META-NAME-REVISION-COUNT:CAPS"/>GSF_META_NAME_REVISION_COUNT +GSF_META_NAME_REVISION_COUNT#define GSF_META_NAME_REVISION_COUNT "gsf:revision-count" + + + + + +<anchor id="GSF-META-NAME-EDITING-DURATION:CAPS"/>GSF_META_NAME_EDITING_DURATION +GSF_META_NAME_EDITING_DURATION#define GSF_META_NAME_EDITING_DURATION "gsf:editing-duration" + + + + + +<anchor id="GSF-META-NAME-TABLE-COUNT:CAPS"/>GSF_META_NAME_TABLE_COUNT +GSF_META_NAME_TABLE_COUNT#define GSF_META_NAME_TABLE_COUNT "gsf:table-count" + + + + + +<anchor id="GSF-META-NAME-IMAGE-COUNT:CAPS"/>GSF_META_NAME_IMAGE_COUNT +GSF_META_NAME_IMAGE_COUNT#define GSF_META_NAME_IMAGE_COUNT "gsf:image-count" + + + + + +<anchor id="GSF-META-NAME-OBJECT-COUNT:CAPS"/>GSF_META_NAME_OBJECT_COUNT +GSF_META_NAME_OBJECT_COUNT#define GSF_META_NAME_OBJECT_COUNT "gsf:object-count" + + + + + +<anchor id="GSF-META-NAME-PAGE-COUNT:CAPS"/>GSF_META_NAME_PAGE_COUNT +GSF_META_NAME_PAGE_COUNT#define GSF_META_NAME_PAGE_COUNT "gsf:page-count" + + + + + +<anchor id="GSF-META-NAME-PARAGRAPH-COUNT:CAPS"/>GSF_META_NAME_PARAGRAPH_COUNT +GSF_META_NAME_PARAGRAPH_COUNT#define GSF_META_NAME_PARAGRAPH_COUNT "gsf:paragraph-count" + + + + + +<anchor id="GSF-META-NAME-WORD-COUNT:CAPS"/>GSF_META_NAME_WORD_COUNT +GSF_META_NAME_WORD_COUNT#define GSF_META_NAME_WORD_COUNT "gsf:word-count" + + + + + +<anchor id="GSF-META-NAME-CHARACTER-COUNT:CAPS"/>GSF_META_NAME_CHARACTER_COUNT +GSF_META_NAME_CHARACTER_COUNT#define GSF_META_NAME_CHARACTER_COUNT "gsf:character-count" + + + + + +<anchor id="GSF-META-NAME-CELL-COUNT:CAPS"/>GSF_META_NAME_CELL_COUNT +GSF_META_NAME_CELL_COUNT#define GSF_META_NAME_CELL_COUNT "gsf:cell-count" + + + + + +<anchor id="GSF-META-NAME-SPREADSHEET-COUNT:CAPS"/>GSF_META_NAME_SPREADSHEET_COUNT +GSF_META_NAME_SPREADSHEET_COUNT#define GSF_META_NAME_SPREADSHEET_COUNT "gsf:spreadsheet-count" + + + + + +<anchor id="GSF-META-NAME-CREATOR:CAPS"/>GSF_META_NAME_CREATOR +GSF_META_NAME_CREATOR#define GSF_META_NAME_CREATOR "gsf:creator" + + + + + +<anchor id="GSF-META-NAME-TEMPLATE:CAPS"/>GSF_META_NAME_TEMPLATE +GSF_META_NAME_TEMPLATE#define GSF_META_NAME_TEMPLATE "gsf:template" + + + + + +<anchor id="GSF-META-NAME-LAST-SAVED-BY:CAPS"/>GSF_META_NAME_LAST_SAVED_BY +GSF_META_NAME_LAST_SAVED_BY#define GSF_META_NAME_LAST_SAVED_BY "gsf:last-saved-by" + + + + + +<anchor id="GSF-META-NAME-LAST-PRINTED:CAPS"/>GSF_META_NAME_LAST_PRINTED +GSF_META_NAME_LAST_PRINTED#define GSF_META_NAME_LAST_PRINTED "gsf:last-printed" + + + + + +<anchor id="GSF-META-NAME-SECURITY:CAPS"/>GSF_META_NAME_SECURITY +GSF_META_NAME_SECURITY#define GSF_META_NAME_SECURITY "gsf:security" + + + + + +<anchor id="GSF-META-NAME-CATEGORY:CAPS"/>GSF_META_NAME_CATEGORY +GSF_META_NAME_CATEGORY#define GSF_META_NAME_CATEGORY "gsf:category" + + + + + +<anchor id="GSF-META-NAME-PRESENTATION-FORMAT:CAPS"/>GSF_META_NAME_PRESENTATION_FORMAT +GSF_META_NAME_PRESENTATION_FORMAT#define GSF_META_NAME_PRESENTATION_FORMAT "gsf:presentation-format" + + + + + +<anchor id="GSF-META-NAME-THUMBNAIL:CAPS"/>GSF_META_NAME_THUMBNAIL +GSF_META_NAME_THUMBNAIL#define GSF_META_NAME_THUMBNAIL "gsf:thumbnail" + + + + + +<anchor id="GSF-META-NAME-GENERATOR:CAPS"/>GSF_META_NAME_GENERATOR +GSF_META_NAME_GENERATOR#define GSF_META_NAME_GENERATOR "gsf:generator" + + + + + +<anchor id="GSF-META-NAME-LINE-COUNT:CAPS"/>GSF_META_NAME_LINE_COUNT +GSF_META_NAME_LINE_COUNT#define GSF_META_NAME_LINE_COUNT "gsf:line-count" + + + + + +<anchor id="GSF-META-NAME-SLIDE-COUNT:CAPS"/>GSF_META_NAME_SLIDE_COUNT +GSF_META_NAME_SLIDE_COUNT#define GSF_META_NAME_SLIDE_COUNT "gsf:slide-count" + + + + + +<anchor id="GSF-META-NAME-NOTE-COUNT:CAPS"/>GSF_META_NAME_NOTE_COUNT +GSF_META_NAME_NOTE_COUNT#define GSF_META_NAME_NOTE_COUNT "gsf:note-count" + + + + + +<anchor id="GSF-META-NAME-HIDDEN-SLIDE-COUNT:CAPS"/>GSF_META_NAME_HIDDEN_SLIDE_COUNT +GSF_META_NAME_HIDDEN_SLIDE_COUNT#define GSF_META_NAME_HIDDEN_SLIDE_COUNT "gsf:hidden-slide-count" + + + + + +<anchor id="GSF-META-NAME-MM-CLIP-COUNT:CAPS"/>GSF_META_NAME_MM_CLIP_COUNT +GSF_META_NAME_MM_CLIP_COUNT#define GSF_META_NAME_MM_CLIP_COUNT "gsf:MM-clip-count" + + + + + +<anchor id="GSF-META-NAME-BYTE-COUNT:CAPS"/>GSF_META_NAME_BYTE_COUNT +GSF_META_NAME_BYTE_COUNT#define GSF_META_NAME_BYTE_COUNT "gsf:byte-count" + + + + + +<anchor id="GSF-META-NAME-SCALE:CAPS"/>GSF_META_NAME_SCALE +GSF_META_NAME_SCALE#define GSF_META_NAME_SCALE "gsf:scale" + + + + + +<anchor id="GSF-META-NAME-HEADING-PAIRS:CAPS"/>GSF_META_NAME_HEADING_PAIRS +GSF_META_NAME_HEADING_PAIRS#define GSF_META_NAME_HEADING_PAIRS "gsf:heading-pairs" + + + + + +<anchor id="GSF-META-NAME-DOCUMENT-PARTS:CAPS"/>GSF_META_NAME_DOCUMENT_PARTS +GSF_META_NAME_DOCUMENT_PARTS#define GSF_META_NAME_DOCUMENT_PARTS "gsf:document-parts" + + + + + +<anchor id="GSF-META-NAME-MANAGER:CAPS"/>GSF_META_NAME_MANAGER +GSF_META_NAME_MANAGER#define GSF_META_NAME_MANAGER "gsf:manager" + + + + + +<anchor id="GSF-META-NAME-COMPANY:CAPS"/>GSF_META_NAME_COMPANY +GSF_META_NAME_COMPANY#define GSF_META_NAME_COMPANY "gsf:company" + + + + + +<anchor id="GSF-META-NAME-LINKS-DIRTY:CAPS"/>GSF_META_NAME_LINKS_DIRTY +GSF_META_NAME_LINKS_DIRTY#define GSF_META_NAME_LINKS_DIRTY "gsf:links-dirty" + + + + + +<anchor id="GSF-META-NAME-DICTIONARY:CAPS"/>GSF_META_NAME_DICTIONARY +GSF_META_NAME_DICTIONARY#define GSF_META_NAME_DICTIONARY "gsf:dictionary" + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-17:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_17 +GSF_META_NAME_MSOLE_UNKNOWN_17#define GSF_META_NAME_MSOLE_UNKNOWN_17 "msole:unknown-doc-17" + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-18:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_18 +GSF_META_NAME_MSOLE_UNKNOWN_18#define GSF_META_NAME_MSOLE_UNKNOWN_18 "msole:unknown-doc-18" + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-19:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_19 +GSF_META_NAME_MSOLE_UNKNOWN_19#define GSF_META_NAME_MSOLE_UNKNOWN_19 "msole:unknown-doc-19" /* bool */ + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-20:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_20 +GSF_META_NAME_MSOLE_UNKNOWN_20#define GSF_META_NAME_MSOLE_UNKNOWN_20 "msole:unknown-doc-20" + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-21:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_21 +GSF_META_NAME_MSOLE_UNKNOWN_21#define GSF_META_NAME_MSOLE_UNKNOWN_21 "msole:unknown-doc-21" + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-22:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_22 +GSF_META_NAME_MSOLE_UNKNOWN_22#define GSF_META_NAME_MSOLE_UNKNOWN_22 "msole:unknown-doc-22" /* bool */ + + + + + +<anchor id="GSF-META-NAME-MSOLE-UNKNOWN-23:CAPS"/>GSF_META_NAME_MSOLE_UNKNOWN_23 +GSF_META_NAME_MSOLE_UNKNOWN_23#define GSF_META_NAME_MSOLE_UNKNOWN_23 "msole:unknown-doc-23" /* i4 */ + + + + + +<anchor id="GSF-META-NAME-LOCALE-SYSTEM-DEFAULT:CAPS"/>GSF_META_NAME_LOCALE_SYSTEM_DEFAULT +GSF_META_NAME_LOCALE_SYSTEM_DEFAULT#define GSF_META_NAME_LOCALE_SYSTEM_DEFAULT "gsf:default-locale" + + + + + +<anchor id="GSF-META-NAME-CASE-SENSITIVE:CAPS"/>GSF_META_NAME_CASE_SENSITIVE +GSF_META_NAME_CASE_SENSITIVE#define GSF_META_NAME_CASE_SENSITIVE "gsf:case-sensitivity" + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/msole.xml b/lib/libgsf-1.12.3/doc/xml/msole.xml new file mode 100644 index 0000000000..91999e217a --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/msole.xml @@ -0,0 +1,815 @@ + + +MS OLE2 +3 +GSF Library + + + +MS OLE2 + + +Synopsis + + + + + + GsfInfileMSOle; +GsfInfile* gsf_infile_msole_new (GsfInput *source, + GError **err); +gboolean gsf_infile_msole_get_class_id (GsfInfileMSOle const *ole, + guint8 *res); + GsfOutfileMSOle; +GsfOutfile* gsf_outfile_msole_new (GsfOutput *sink); +GsfOutfile* gsf_outfile_msole_new_full (GsfOutput *sink, + guint bb_size, + guint sb_size); +gboolean gsf_outfile_msole_set_class_id (GsfOutfileMSOle *ole, + guint8 const *clsid); +GError* gsf_msole_metadata_read (GsfInput *in, + GsfDocMetaData *accum); +gboolean gsf_msole_metadata_write (GsfOutput *out, + GsfDocMetaData const *meta_data, + gboolean doc_not_component); +GIConv gsf_msole_iconv_open_codepages_for_export + (int codepage_to, + char const *from); +GIConv gsf_msole_iconv_open_codepage_for_import + (char const *to, + int codepage); +GIConv gsf_msole_iconv_open_for_export (void); +GIConv gsf_msole_iconv_open_codepage_for_export + (int codepage_to); +GIConv gsf_msole_iconv_open_for_import (int codepage); +int gsf_msole_iconv_win_codepage (void); +guint gsf_msole_codepage_to_lid (int codepage); +int gsf_msole_lid_to_codepage (guint lid); +gchar* gsf_msole_lid_to_codepage_str (guint lid); +guint gsf_msole_lid_for_language (char const *lang); +charconst * gsf_msole_language_for_lid (guint lid); +GByteArray* gsf_msole_inflate (GsfInput *input, + gsf_off_t offset); + + +#define OLE_HEADER_START_BAT +#define OLE_HEADER_MAJOR_VER +#define OLE_HEADER_METABAT_SIZE +#define OLE_HEADER_DIRENT_START +#define OLE_HEADER_NUM_SBAT +#define OLE_HEADER_BB_SHIFT +#define OLE_HEADER_CSECTDIR +#define OLE_HEADER_NUM_BAT +#define OLE_HEADER_THRESHOLD +#define OLE_HEADER_METABAT_BLOCK +#define OLE_HEADER_SBAT_START +#define OLE_HEADER_SIGNATURE +#define OLE_HEADER_BYTE_ORDER +#define OLE_HEADER_SB_SHIFT +#define OLE_HEADER_NUM_METABAT +#define OLE_HEADER_SIZE +#define OLE_HEADER_CLSID +#define OLE_HEADER_MINOR_VER +#define OLE_DEFAULT_BB_SHIFT +#define OLE_DEFAULT_SB_SHIFT +#define DIRENT_DETAILS_SIZE +#define DIRENT_SIZE +#define DIRENT_NAME_LEN +#define DIRENT_TYPE_PROPERTY +#define DIRENT_TYPE_FILE +#define DIRENT_MAGIC_END +#define DIRENT_TYPE_DIR +#define DIRENT_MAX_NAME_SIZE +#define DIRENT_FILE_SIZE +#define DIRENT_FIRSTBLOCK +#define DIRENT_TYPE_INVALID +#define DIRENT_USERFLAGS +#define DIRENT_COLOUR +#define DIRENT_MODIFY_TIME +#define DIRENT_TYPE_LOCKBYTES +#define DIRENT_CREATE_TIME +#define DIRENT_PREV +#define DIRENT_NEXT +#define DIRENT_CHILD +#define DIRENT_TYPE +#define DIRENT_CLSID +#define DIRENT_TYPE_ROOTDIR +#define BAT_MAGIC_METABAT +#define BAT_MAGIC_BAT +#define BAT_INDEX_SIZE +#define BAT_MAGIC_END_OF_CHAIN +#define BAT_MAGIC_UNUSED + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInfile + +----GsfInfileMSOle + + + + GObject + +----GsfOutput + +----GsfOutfile + +----GsfOutfileMSOle + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInfileMSOle-struct"/>GsfInfileMSOle +GsfInfileMSOletypedef struct _GsfInfileMSOle GsfInfileMSOle; + + + + +<anchor id="gsf-infile-msole-new"/>gsf_infile_msole_new () +gsf_infile_msole_newGsfInfile* gsf_infile_msole_new (GsfInput *source, + GError **err); + +Opens the root directory of an MS OLE file. +NOTE : adds a reference to source + + + +source : + + +err : + + +Returns :: the new ole file handler + + + +<anchor id="gsf-infile-msole-get-class-id"/>gsf_infile_msole_get_class_id () +gsf_infile_msole_get_class_idgboolean gsf_infile_msole_get_class_id (GsfInfileMSOle const *ole, + guint8 *res); + +Retrieves the 16 byte indentifier (often a GUID in MS Windows apps) +stored within the directory associated with ole and stores it in res. + + + +ole : + a GsfInfileMSOle + +res : + 16 byte identifier (often a GUID in MS Windows apps) + +Returns :TRUE on success + + + +<anchor id="GsfOutfileMSOle-struct"/>GsfOutfileMSOle +GsfOutfileMSOletypedef struct _GsfOutfileMSOle GsfOutfileMSOle; + + + + +<anchor id="gsf-outfile-msole-new"/>gsf_outfile_msole_new () +gsf_outfile_msole_newGsfOutfile* gsf_outfile_msole_new (GsfOutput *sink); + +Creates the root directory of an MS OLE file and manages the addition of +children. + + +NOTE : adds a reference to sink + + + +sink : + a GsfOutput to hold the OLE2 file + +Returns :the new ole file handler + + + +<anchor id="gsf-outfile-msole-new-full"/>gsf_outfile_msole_new_full () +gsf_outfile_msole_new_fullGsfOutfile* gsf_outfile_msole_new_full (GsfOutput *sink, + guint bb_size, + guint sb_size); + +Creates the root directory of an MS OLE file and manages the addition of +children. + + +NOTE : adds a reference to sink + + + +sink : + a GsfOutput to hold the OLE2 file. + +bb_size : + size of large blocks. + +sb_size : + size of small blocks. + +Returns :the new ole file handler + + + +<anchor id="gsf-outfile-msole-set-class-id"/>gsf_outfile_msole_set_class_id () +gsf_outfile_msole_set_class_idgboolean gsf_outfile_msole_set_class_id (GsfOutfileMSOle *ole, + guint8 const *clsid); + +Write clsid to the directory associated with ole. + + + +ole : + a GsfOutfileMSOle + +clsid : + 16 byte identifier (often a GUID in MS Windows apps) + +Returns :TRUE on success. + + + +<anchor id="gsf-msole-metadata-read"/>gsf_msole_metadata_read () +gsf_msole_metadata_readGError* gsf_msole_metadata_read (GsfInput *in, + GsfDocMetaData *accum); + +Read a stream formated as a set of MS OLE properties from in and store the +results in accum. + + + +in : + GsfInput + +accum : + GsfDocMetaData + +Returns :GError which the caller must free on error. + + + +<anchor id="gsf-msole-metadata-write"/>gsf_msole_metadata_write () +gsf_msole_metadata_writegboolean gsf_msole_metadata_write (GsfOutput *out, + GsfDocMetaData const *meta_data, + gboolean doc_not_component); + + + + + +out : + GsfOutput + +meta_data : + GsfDocMetaData + +doc_not_component : + a kludge to differentiate DocumentSummary from Summary + +Returns :TRUE on success; + + + +<anchor id="gsf-msole-iconv-open-codepages-for-export"/>gsf_msole_iconv_open_codepages_for_export () +gsf_msole_iconv_open_codepages_for_exportGIConv gsf_msole_iconv_open_codepages_for_export + (int codepage_to, + char const *from); + + + + + +codepage_to : + + +from : + + +Returns :an iconv converter to go from utf8 -> to our best guess at a useful + windows codepage. + + + +<anchor id="gsf-msole-iconv-open-codepage-for-import"/>gsf_msole_iconv_open_codepage_for_import () +gsf_msole_iconv_open_codepage_for_importGIConv gsf_msole_iconv_open_codepage_for_import + (char const *to, + int codepage); + + + + + +to : + + +codepage : + + +Returns :an iconv converter for codepage -> utf8. + + + +<anchor id="gsf-msole-iconv-open-for-export"/>gsf_msole_iconv_open_for_export () +gsf_msole_iconv_open_for_exportGIConv gsf_msole_iconv_open_for_export (void); + + + + + +Returns :an iconv convert to go from utf8 -> to our best guess at a useful + windows codepage. + + + +<anchor id="gsf-msole-iconv-open-codepage-for-export"/>gsf_msole_iconv_open_codepage_for_export () +gsf_msole_iconv_open_codepage_for_exportGIConv gsf_msole_iconv_open_codepage_for_export + (int codepage_to); + + + + + +codepage_to : + + +Returns :an iconv converter to go from utf8 -> to our best guess at a useful + windows codepage. + + + +<anchor id="gsf-msole-iconv-open-for-import"/>gsf_msole_iconv_open_for_import () +gsf_msole_iconv_open_for_importGIConv gsf_msole_iconv_open_for_import (int codepage); + + + + + +codepage : + + +Returns :an iconv converter for single byte encodings codepage -> utf8. + Attempt to handle the semantics of a specification for multibyte encodings + since this is only supposed to be used for single bytes. + + + +<anchor id="gsf-msole-iconv-win-codepage"/>gsf_msole_iconv_win_codepage () +gsf_msole_iconv_win_codepageint gsf_msole_iconv_win_codepage (void); + + + + + +Returns :our best guess at the applicable windows code page based on an + environment variable or the current locale. + + + +<anchor id="gsf-msole-codepage-to-lid"/>gsf_msole_codepage_to_lid () +gsf_msole_codepage_to_lidguint gsf_msole_codepage_to_lid (int codepage); + + + +codepage : + + +Returns : + + + + + +<anchor id="gsf-msole-lid-to-codepage"/>gsf_msole_lid_to_codepage () +gsf_msole_lid_to_codepageint gsf_msole_lid_to_codepage (guint lid); + + + + + +lid : + + +Returns :our best guess at the codepage for the given language id + + + +<anchor id="gsf-msole-lid-to-codepage-str"/>gsf_msole_lid_to_codepage_str () +gsf_msole_lid_to_codepage_strgchar* gsf_msole_lid_to_codepage_str (guint lid); + + + + + +lid : + + +Returns :the Iconv codepage string for the given LID. +Return value must be g_free()'d + + + +<anchor id="gsf-msole-lid-for-language"/>gsf_msole_lid_for_language () +gsf_msole_lid_for_languageguint gsf_msole_lid_for_language (char const *lang); + + + + + +lang : + + +Returns :the LID (Language Identifier) for the input language. +If lang is null, return 0x0400 ("-none-"), and not 0x0000 ("no proofing") + + + +<anchor id="gsf-msole-language-for-lid"/>gsf_msole_language_for_lid () +gsf_msole_language_for_lidcharconst * gsf_msole_language_for_lid (guint lid); + + + + + +lid : + + +Returns :the xx_YY style string (can be just xx or xxx) for the given LID. +Return value must not be freed. If the LID is not found, is set to 0x0400, +or is set to 0x0000, will return "-none-" + + + +<anchor id="gsf-msole-inflate"/>gsf_msole_inflate () +gsf_msole_inflateGByteArray* gsf_msole_inflate (GsfInput *input, + gsf_off_t offset); + +Decompresses an LZ compressed stream. + + + +input : + stream to read from + +offset : + offset into it for start byte of compresse stream + +Returns : A GByteArray that the caller is responsible for freeing + + + +<anchor id="OLE-HEADER-START-BAT:CAPS"/>OLE_HEADER_START_BAT +OLE_HEADER_START_BAT#define OLE_HEADER_START_BAT 0x4c + + + + + +<anchor id="OLE-HEADER-MAJOR-VER:CAPS"/>OLE_HEADER_MAJOR_VER +OLE_HEADER_MAJOR_VER#define OLE_HEADER_MAJOR_VER 0x1a /* 0x3 been seen in wild */ + + + + + +<anchor id="OLE-HEADER-METABAT-SIZE:CAPS"/>OLE_HEADER_METABAT_SIZE +OLE_HEADER_METABAT_SIZE#define OLE_HEADER_METABAT_SIZE ((OLE_HEADER_SIZE - OLE_HEADER_START_BAT) / BAT_INDEX_SIZE) + + + + + +<anchor id="OLE-HEADER-DIRENT-START:CAPS"/>OLE_HEADER_DIRENT_START +OLE_HEADER_DIRENT_START#define OLE_HEADER_DIRENT_START 0x30 + + + + + +<anchor id="OLE-HEADER-NUM-SBAT:CAPS"/>OLE_HEADER_NUM_SBAT +OLE_HEADER_NUM_SBAT#define OLE_HEADER_NUM_SBAT 0x40 + + + + + +<anchor id="OLE-HEADER-BB-SHIFT:CAPS"/>OLE_HEADER_BB_SHIFT +OLE_HEADER_BB_SHIFT#define OLE_HEADER_BB_SHIFT 0x1e + + + + + +<anchor id="OLE-HEADER-CSECTDIR:CAPS"/>OLE_HEADER_CSECTDIR +OLE_HEADER_CSECTDIR#define OLE_HEADER_CSECTDIR 0x28 + + + + + +<anchor id="OLE-HEADER-NUM-BAT:CAPS"/>OLE_HEADER_NUM_BAT +OLE_HEADER_NUM_BAT#define OLE_HEADER_NUM_BAT 0x2c + + + + + +<anchor id="OLE-HEADER-THRESHOLD:CAPS"/>OLE_HEADER_THRESHOLD +OLE_HEADER_THRESHOLD#define OLE_HEADER_THRESHOLD 0x38 + + + + + +<anchor id="OLE-HEADER-METABAT-BLOCK:CAPS"/>OLE_HEADER_METABAT_BLOCK +OLE_HEADER_METABAT_BLOCK#define OLE_HEADER_METABAT_BLOCK 0x44 + + + + + +<anchor id="OLE-HEADER-SBAT-START:CAPS"/>OLE_HEADER_SBAT_START +OLE_HEADER_SBAT_START#define OLE_HEADER_SBAT_START 0x3c + + + + + +<anchor id="OLE-HEADER-SIGNATURE:CAPS"/>OLE_HEADER_SIGNATURE +OLE_HEADER_SIGNATURE#define OLE_HEADER_SIGNATURE 0x00 + + + + + +<anchor id="OLE-HEADER-BYTE-ORDER:CAPS"/>OLE_HEADER_BYTE_ORDER +OLE_HEADER_BYTE_ORDER#define OLE_HEADER_BYTE_ORDER 0x1c /* 0xfe 0xff == Intel Little Endian */ + + + + + +<anchor id="OLE-HEADER-SB-SHIFT:CAPS"/>OLE_HEADER_SB_SHIFT +OLE_HEADER_SB_SHIFT#define OLE_HEADER_SB_SHIFT 0x20 + + + + + +<anchor id="OLE-HEADER-NUM-METABAT:CAPS"/>OLE_HEADER_NUM_METABAT +OLE_HEADER_NUM_METABAT#define OLE_HEADER_NUM_METABAT 0x48 + + + + + +<anchor id="OLE-HEADER-SIZE:CAPS"/>OLE_HEADER_SIZE +OLE_HEADER_SIZE#define OLE_HEADER_SIZE 0x200 /* independent of big block size size */ + + + + + +<anchor id="OLE-HEADER-CLSID:CAPS"/>OLE_HEADER_CLSID +OLE_HEADER_CLSID#define OLE_HEADER_CLSID 0x08 /* See ReadClassStg */ + + + + + +<anchor id="OLE-HEADER-MINOR-VER:CAPS"/>OLE_HEADER_MINOR_VER +OLE_HEADER_MINOR_VER#define OLE_HEADER_MINOR_VER 0x18 /* 0x33 and 0x3e have been seen */ + + + + + +<anchor id="OLE-DEFAULT-BB-SHIFT:CAPS"/>OLE_DEFAULT_BB_SHIFT +OLE_DEFAULT_BB_SHIFT#define OLE_DEFAULT_BB_SHIFT 9 + + + + + +<anchor id="OLE-DEFAULT-SB-SHIFT:CAPS"/>OLE_DEFAULT_SB_SHIFT +OLE_DEFAULT_SB_SHIFT#define OLE_DEFAULT_SB_SHIFT 6 + + + + + +<anchor id="DIRENT-DETAILS-SIZE:CAPS"/>DIRENT_DETAILS_SIZE +DIRENT_DETAILS_SIZE#define DIRENT_DETAILS_SIZE 0x40 + + + + + +<anchor id="DIRENT-SIZE:CAPS"/>DIRENT_SIZE +DIRENT_SIZE#define DIRENT_SIZE (DIRENT_MAX_NAME_SIZE + DIRENT_DETAILS_SIZE) + + + + + +<anchor id="DIRENT-NAME-LEN:CAPS"/>DIRENT_NAME_LEN +DIRENT_NAME_LEN#define DIRENT_NAME_LEN 0x40 /* length in bytes incl 0 terminator */ + + + + + +<anchor id="DIRENT-TYPE-PROPERTY:CAPS"/>DIRENT_TYPE_PROPERTY +DIRENT_TYPE_PROPERTY#define DIRENT_TYPE_PROPERTY 4 /* ? */ + + + + + +<anchor id="DIRENT-TYPE-FILE:CAPS"/>DIRENT_TYPE_FILE +DIRENT_TYPE_FILE#define DIRENT_TYPE_FILE 2 + + + + + +<anchor id="DIRENT-MAGIC-END:CAPS"/>DIRENT_MAGIC_END +DIRENT_MAGIC_END#define DIRENT_MAGIC_END 0xffffffff + + + + + +<anchor id="DIRENT-TYPE-DIR:CAPS"/>DIRENT_TYPE_DIR +DIRENT_TYPE_DIR#define DIRENT_TYPE_DIR 1 + + + + + +<anchor id="DIRENT-MAX-NAME-SIZE:CAPS"/>DIRENT_MAX_NAME_SIZE +DIRENT_MAX_NAME_SIZE#define DIRENT_MAX_NAME_SIZE 0x40 + + + + + +<anchor id="DIRENT-FILE-SIZE:CAPS"/>DIRENT_FILE_SIZE +DIRENT_FILE_SIZE#define DIRENT_FILE_SIZE 0x78 + + + + + +<anchor id="DIRENT-FIRSTBLOCK:CAPS"/>DIRENT_FIRSTBLOCK +DIRENT_FIRSTBLOCK#define DIRENT_FIRSTBLOCK 0x74 + + + + + +<anchor id="DIRENT-TYPE-INVALID:CAPS"/>DIRENT_TYPE_INVALID +DIRENT_TYPE_INVALID#define DIRENT_TYPE_INVALID 0 + + + + + +<anchor id="DIRENT-USERFLAGS:CAPS"/>DIRENT_USERFLAGS +DIRENT_USERFLAGS#define DIRENT_USERFLAGS 0x60 /* only for dirs */ + + + + + +<anchor id="DIRENT-COLOUR:CAPS"/>DIRENT_COLOUR +DIRENT_COLOUR#define DIRENT_COLOUR 0x43 + + + + + +<anchor id="DIRENT-MODIFY-TIME:CAPS"/>DIRENT_MODIFY_TIME +DIRENT_MODIFY_TIME#define DIRENT_MODIFY_TIME 0x6c /* for files */ + + + + + +<anchor id="DIRENT-TYPE-LOCKBYTES:CAPS"/>DIRENT_TYPE_LOCKBYTES +DIRENT_TYPE_LOCKBYTES#define DIRENT_TYPE_LOCKBYTES 3 /* ? */ + + + + + +<anchor id="DIRENT-CREATE-TIME:CAPS"/>DIRENT_CREATE_TIME +DIRENT_CREATE_TIME#define DIRENT_CREATE_TIME 0x64 /* for files */ + + + + + +<anchor id="DIRENT-PREV:CAPS"/>DIRENT_PREV +DIRENT_PREV#define DIRENT_PREV 0x44 + + + + + +<anchor id="DIRENT-NEXT:CAPS"/>DIRENT_NEXT +DIRENT_NEXT#define DIRENT_NEXT 0x48 + + + + + +<anchor id="DIRENT-CHILD:CAPS"/>DIRENT_CHILD +DIRENT_CHILD#define DIRENT_CHILD 0x4c + + + + + +<anchor id="DIRENT-TYPE:CAPS"/>DIRENT_TYPE +DIRENT_TYPE#define DIRENT_TYPE 0x42 + + + + + +<anchor id="DIRENT-CLSID:CAPS"/>DIRENT_CLSID +DIRENT_CLSID#define DIRENT_CLSID 0x50 /* only for dirs */ + + + + + +<anchor id="DIRENT-TYPE-ROOTDIR:CAPS"/>DIRENT_TYPE_ROOTDIR +DIRENT_TYPE_ROOTDIR#define DIRENT_TYPE_ROOTDIR 5 + + + + + +<anchor id="BAT-MAGIC-METABAT:CAPS"/>BAT_MAGIC_METABAT +BAT_MAGIC_METABAT#define BAT_MAGIC_METABAT 0xfffffffc /* a metabat block -4 */ + + + + + +<anchor id="BAT-MAGIC-BAT:CAPS"/>BAT_MAGIC_BAT +BAT_MAGIC_BAT#define BAT_MAGIC_BAT 0xfffffffd /* a bat block, -3 */ + + + + + +<anchor id="BAT-INDEX-SIZE:CAPS"/>BAT_INDEX_SIZE +BAT_INDEX_SIZE#define BAT_INDEX_SIZE 4 + + + + + +<anchor id="BAT-MAGIC-END-OF-CHAIN:CAPS"/>BAT_MAGIC_END_OF_CHAIN +BAT_MAGIC_END_OF_CHAIN#define BAT_MAGIC_END_OF_CHAIN 0xfffffffe /* -2 */ + + + + + +<anchor id="BAT-MAGIC-UNUSED:CAPS"/>BAT_MAGIC_UNUSED +BAT_MAGIC_UNUSED#define BAT_MAGIC_UNUSED 0xffffffff /* -1 */ + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/outfile.xml b/lib/libgsf-1.12.3/doc/xml/outfile.xml new file mode 100644 index 0000000000..062c904a8d --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/outfile.xml @@ -0,0 +1,160 @@ + + +Outfile writing structed files +3 +GSF Library + + + +Outfile writing structed files + + +Synopsis + + + + + + GsfOutfile; +GsfOutput* gsf_outfile_new_child (GsfOutfile *outfile, + char const *name, + gboolean is_dir); +GsfOutput* gsf_outfile_new_child_full (GsfOutfile *outfile, + char const *name, + gboolean is_dir, + char const *first_property_name, + ...); +GsfOutput* gsf_outfile_new_child_varg (GsfOutfile *outfile, + char const *name, + gboolean is_dir, + char const *first_property_name, + va_list args); + + + + + +Object Hierarchy + + + GObject + +----GsfOutput + +----GsfOutfile + +----GsfOutfileMSOle + +----GsfOutfileStdio + +----GsfOutfileZip + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfOutfile-struct"/>GsfOutfile +GsfOutfiletypedef struct _GsfOutfile GsfOutfile; + + + + +<anchor id="gsf-outfile-new-child"/>gsf_outfile_new_child () +gsf_outfile_new_childGsfOutput* gsf_outfile_new_child (GsfOutfile *outfile, + char const *name, + gboolean is_dir); + + + + + +outfile : + A GsfOutfile + +name : + The name of the new child to create + +is_dir : + TRUE to create a directory, FALSE to create a plain file + +Returns :a newly created child + + + +<anchor id="gsf-outfile-new-child-full"/>gsf_outfile_new_child_full () +gsf_outfile_new_child_fullGsfOutput* gsf_outfile_new_child_full (GsfOutfile *outfile, + char const *name, + gboolean is_dir, + char const *first_property_name, + ...); + + + + + +outfile : + A GsfOutfile + +name : + The name of the new child to create + +is_dir : + TRUE to create a directory, FALSE to create a plain file + +first_property_name : + + +... : + + +Returns :a newly created child + + + +<anchor id="gsf-outfile-new-child-varg"/>gsf_outfile_new_child_varg () +gsf_outfile_new_child_vargGsfOutput* gsf_outfile_new_child_varg (GsfOutfile *outfile, + char const *name, + gboolean is_dir, + char const *first_property_name, + va_list args); + + + +outfile : + + +name : + + +is_dir : + + +first_property_name : + + +args : + + +Returns : + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/output.xml b/lib/libgsf-1.12.3/doc/xml/output.xml new file mode 100644 index 0000000000..575a60d5f1 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/output.xml @@ -0,0 +1,473 @@ + + +Output to unstructured files +3 +GSF Library + + + +Output to unstructured files + + +Synopsis + + + + + + GsfOutput; +GsfOutfile* gsf_output_container (GsfOutput const *output); +gsf_off_t gsf_output_size (GsfOutput *output); +gboolean gsf_output_close (GsfOutput *output); +gsf_off_t gsf_output_tell (GsfOutput *output); +gboolean gsf_output_seek (GsfOutput *output, + gsf_off_t offset, + GSeekType whence); +gboolean gsf_output_write (GsfOutput *output, + size_t num_bytes, + guint8 const *data); +gboolean gsf_output_puts (GsfOutput *output, + char const *line); +gboolean gsf_output_printf (GsfOutput *output, + char const *format, + ...); +gsf_off_t gsf_output_vprintf (GsfOutput *output, + char const *format, + va_list args); +charconst * gsf_output_name (GsfOutput const *output); +gboolean gsf_output_set_name_from_filename + (GsfOutput *output, + char const *filename); +GQuark gsf_output_error_id (void); +gboolean gsf_output_set_error (GsfOutput *output, + gint code, + char const *format, + ...); +GErrorconst * gsf_output_error (GsfOutput const *output); +gboolean gsf_output_is_closed (GsfOutput const *output); +gboolean gsf_output_wrap (GObject *wrapper, + GsfOutput *wrapee); +gboolean gsf_output_unwrap (GObject *wrapper, + GsfOutput *wrapee); + +gboolean gsf_output_set_name (GsfOutput *output, + char const *name); +gboolean gsf_output_set_container (GsfOutput *output, + GsfOutfile *container); + + + + + +Object Hierarchy + + + GObject + +----GsfOutput + +----GsfOutfile + +----GsfOutputBzip + +----GsfOutputIOChannel + +----GsfOutputMemory + +----GsfOutputStdio + + + + + + + + + +Properties + + + "is-closed" gboolean : Read + "name" gchararray : Read + "position" gint64 : Read + "size" gint64 : Read + + + + + + +Description + + + + + + +Details + +<anchor id="GsfOutput-struct"/>GsfOutput +GsfOutputtypedef struct _GsfOutput GsfOutput; + + + + +<anchor id="gsf-output-container"/>gsf_output_container () +gsf_output_containerGsfOutfile* gsf_output_container (GsfOutput const *output); + + + + + +output : + + +Returns :, but does not add a reference to output's container. +Potentially NULL + + + +<anchor id="gsf-output-size"/>gsf_output_size () +gsf_output_sizegsf_off_t gsf_output_size (GsfOutput *output); + + + + + +output : + + +Returns :the size of the output, or -1 if it does not have a size. + + + +<anchor id="gsf-output-close"/>gsf_output_close () +gsf_output_closegboolean gsf_output_close (GsfOutput *output); + +Close a stream. + + + +output : + + +Returns :FALSE on error + + + +<anchor id="gsf-output-tell"/>gsf_output_tell () +gsf_output_tellgsf_off_t gsf_output_tell (GsfOutput *output); + + + + + +output : + + +Returns :the current position in the file + + + +<anchor id="gsf-output-seek"/>gsf_output_seek () +gsf_output_seekgboolean gsf_output_seek (GsfOutput *output, + gsf_off_t offset, + GSeekType whence); + + + + + +output : + + +offset : + + +whence : + + +Returns :FALSE on error. + + + +<anchor id="gsf-output-write"/>gsf_output_write () +gsf_output_writegboolean gsf_output_write (GsfOutput *output, + size_t num_bytes, + guint8 const *data); + + + + + +output : + + +num_bytes : + + +data : + + +Returns :FALSE on error. + + + +<anchor id="gsf-output-puts"/>gsf_output_puts () +gsf_output_putsgboolean gsf_output_puts (GsfOutput *output, + char const *line); + +Like fputs, this assumes that the line already ends with a newline + + + +output : + A GsfOutput + +line : + null terminated string to write + +Returns : TRUE if successful, FALSE if not + + + +<anchor id="gsf-output-printf"/>gsf_output_printf () +gsf_output_printfgboolean gsf_output_printf (GsfOutput *output, + char const *format, + ...); + + + + + +output : + A GsfOutput + +format : + The printf-style format string + +... : + the arguments for format + +Returns : TRUE if successful, FALSE if not + + + +<anchor id="gsf-output-vprintf"/>gsf_output_vprintf () +gsf_output_vprintfgsf_off_t gsf_output_vprintf (GsfOutput *output, + char const *format, + va_list args); + + + + + +output : + A GsfOutput + +format : + The printf-style format string + +args : + the arguments for format + +Returns : number of bytes printed, a negative value if not successful + + + +<anchor id="gsf-output-name"/>gsf_output_name () +gsf_output_namecharconst * gsf_output_name (GsfOutput const *output); + + + + + +output : + + +Returns :output's name in utf8 form, DO NOT FREE THIS STRING + + + +<anchor id="gsf-output-set-name-from-filename"/>gsf_output_set_name_from_filename () +gsf_output_set_name_from_filenamegboolean gsf_output_set_name_from_filename + (GsfOutput *output, + char const *filename); + +This is a utility routine that should only be used by derived +outputs. + + + +output : + the output stream + +filename : + the (fs-sys encoded) filename + +Returns :: TRUE if the assignment was ok. + + + +<anchor id="gsf-output-error-id"/>gsf_output_error_id () +gsf_output_error_idGQuark gsf_output_error_id (void); + + + +Returns : + + + + + +<anchor id="gsf-output-set-error"/>gsf_output_set_error () +gsf_output_set_errorgboolean gsf_output_set_error (GsfOutput *output, + gint code, + char const *format, + ...); + +This is a utility routine that should only be used by derived +outputs. + + + +output : + + +code : + + +format : + + +... : + + +Returns :Always returns FALSE to facilitate its use. + + + +<anchor id="gsf-output-error"/>gsf_output_error () +gsf_output_errorGErrorconst * gsf_output_error (GsfOutput const *output); + + + + + +output : + + +Returns :the last error logged on the output, or NULL. + + + +<anchor id="gsf-output-is-closed"/>gsf_output_is_closed () +gsf_output_is_closedgboolean gsf_output_is_closed (GsfOutput const *output); + + + + + +output : + + +Returns :TRUE if output has already been closed. + + + +<anchor id="gsf-output-wrap"/>gsf_output_wrap () +gsf_output_wrapgboolean gsf_output_wrap (GObject *wrapper, + GsfOutput *wrapee); + + + + + +wrapper : + + +wrapee : + + +Returns :TRUE if the wrapping succeeded. + + + +<anchor id="gsf-output-unwrap"/>gsf_output_unwrap () +gsf_output_unwrapgboolean gsf_output_unwrap (GObject *wrapper, + GsfOutput *wrapee); + + + + + +wrapper : + + +wrapee : + + +Returns :TRUE if the unwrapping succeeded. + + + +<anchor id="gsf-output-set-name"/>gsf_output_set_name () +gsf_output_set_namegboolean gsf_output_set_name (GsfOutput *output, + char const *name); + +This is a utility routine that should only be used by derived +outputs. + + + +output : + + +name : + + +Returns :: TRUE if the assignment was ok. + + + +<anchor id="gsf-output-set-container"/>gsf_output_set_container () +gsf_output_set_containergboolean gsf_output_set_container (GsfOutput *output, + GsfOutfile *container); + +This is a utility routine that should only be used by derived +outputs. + + + +output : + + +container : + + +Returns :: TRUE if the assignment was ok. + + + + + +Properties +<anchor id="GsfOutput--is-closed"/>The "<literal>is-closed</literal>" property + "is-closed" gboolean : Read +Whether the Output is Closed.Default value: FALSE + +<anchor id="GsfOutput--name"/>The "<literal>name</literal>" property + "name" gchararray : Read +The Output's Name.Default value: NULL + +<anchor id="GsfOutput--position"/>The "<literal>position</literal>" property + "position" gint64 : Read +The Output's Current Position.Allowed values: >= 0 +Default value: 0 + +<anchor id="GsfOutput--size"/>The "<literal>size</literal>" property + "size" gint64 : Read +The Output's Size.Allowed values: >= 0 +Default value: 0 + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/stdio.xml b/lib/libgsf-1.12.3/doc/xml/stdio.xml new file mode 100644 index 0000000000..6517aac710 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/stdio.xml @@ -0,0 +1,333 @@ + + +Reading and Writing from local files and directories +3 +GSF Library + + + +Reading and Writing from local files and directories + + +Synopsis + + + + + + GsfInputStdio; +GsfInput* gsf_input_stdio_new (char const *filename, + GError **err); + GsfOutputStdio; +GsfOutput* gsf_output_stdio_new (char const *filename, + GError **err); +GsfOutput* gsf_output_stdio_new_full (char const *filename, + GError **err, + char const *first_property_name, + ...); +GsfOutput* gsf_output_stdio_new_valist (char const *filename, + GError **err, + char const *first_property_name, + va_list var_args); +GsfOutput* gsf_output_stdio_new_FILE (char const *filename, + FILE *file, + gboolean keep_open); + GsfOutfileStdio; +GsfOutfile* gsf_outfile_stdio_new (char const *root, + GError **err); +GsfOutfile* gsf_outfile_stdio_new_full (char const *root, + GError **err, + char const *first_property_name, + ...); +GsfOutfile* gsf_outfile_stdio_new_valist (char const *root, + GError **err, + char const *first_property_name, + va_list var_args); + GsfInfileStdio; +GsfInfile* gsf_infile_stdio_new (char const *root, + GError **err); + + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInputStdio + + + + GObject + +----GsfOutput + +----GsfOutputStdio + + + + GObject + +----GsfOutput + +----GsfOutfile + +----GsfOutfileStdio + + + + GObject + +----GsfInput + +----GsfInfile + +----GsfInfileStdio + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInputStdio-struct"/>GsfInputStdio +GsfInputStdiotypedef struct _GsfInputStdio GsfInputStdio; + + + + +<anchor id="gsf-input-stdio-new"/>gsf_input_stdio_new () +gsf_input_stdio_newGsfInput* gsf_input_stdio_new (char const *filename, + GError **err); + + + + + +filename : + in utf8. + +err : + optionally NULL. + +Returns :a new file or NULL. + + + +<anchor id="GsfOutputStdio-struct"/>GsfOutputStdio +GsfOutputStdiotypedef struct _GsfOutputStdio GsfOutputStdio; + + + + +<anchor id="gsf-output-stdio-new"/>gsf_output_stdio_new () +gsf_output_stdio_newGsfOutput* gsf_output_stdio_new (char const *filename, + GError **err); + + + + + +filename : + name of file to create or replace. + +err : + optionally NULL. + +Returns :a new file or NULL. + + + +<anchor id="gsf-output-stdio-new-full"/>gsf_output_stdio_new_full () +gsf_output_stdio_new_fullGsfOutput* gsf_output_stdio_new_full (char const *filename, + GError **err, + char const *first_property_name, + ...); + + + + + +filename : + name of file to create or replace. + +err : + optionally NULL. + +first_property_name : + NULL terminated list of properties + +... : + + +Returns :a new file or NULL. + + + +<anchor id="gsf-output-stdio-new-valist"/>gsf_output_stdio_new_valist () +gsf_output_stdio_new_valistGsfOutput* gsf_output_stdio_new_valist (char const *filename, + GError **err, + char const *first_property_name, + va_list var_args); + + + +filename : + + +err : + + +first_property_name : + + +var_args : + + +Returns : + + + + + +<anchor id="gsf-output-stdio-new-FILE"/>gsf_output_stdio_new_FILE () +gsf_output_stdio_new_FILEGsfOutput* gsf_output_stdio_new_FILE (char const *filename, + FILE *file, + gboolean keep_open); + +Assumes ownership of file. If keep_open is true, ownership reverts +to caller when the GsfObject is closed. + + + +filename : + The filename corresponding to file. + +file : + an existing stdio FILE * + +keep_open : + Should file be closed when the wrapper is closed + +Returns :a new GsfOutput wrapper for file. Warning: the result will be +seekable only if file is seekable. If it is seekable, the resulting +GsfOutput object will seek relative to file's beginning, not its +current location at the time the GsfOutput object is created. + + + +<anchor id="GsfOutfileStdio-struct"/>GsfOutfileStdio +GsfOutfileStdiotypedef struct _GsfOutfileStdio GsfOutfileStdio; + + + + +<anchor id="gsf-outfile-stdio-new"/>gsf_outfile_stdio_new () +gsf_outfile_stdio_newGsfOutfile* gsf_outfile_stdio_new (char const *root, + GError **err); + + + + + +root : + root directory in utf8. + +err : + optionally NULL. + +Returns :a new outfile or NULL. + + + +<anchor id="gsf-outfile-stdio-new-full"/>gsf_outfile_stdio_new_full () +gsf_outfile_stdio_new_fullGsfOutfile* gsf_outfile_stdio_new_full (char const *root, + GError **err, + char const *first_property_name, + ...); + + + +root : + + +err : + + +first_property_name : + + +... : + + +Returns : + + + + + +<anchor id="gsf-outfile-stdio-new-valist"/>gsf_outfile_stdio_new_valist () +gsf_outfile_stdio_new_valistGsfOutfile* gsf_outfile_stdio_new_valist (char const *root, + GError **err, + char const *first_property_name, + va_list var_args); + + + +root : + + +err : + + +first_property_name : + + +var_args : + + +Returns : + + + + + +<anchor id="GsfInfileStdio-struct"/>GsfInfileStdio +GsfInfileStdiotypedef struct _GsfInfileStdio GsfInfileStdio; + + + + +<anchor id="gsf-infile-stdio-new"/>gsf_infile_stdio_new () +gsf_infile_stdio_newGsfInfile* gsf_infile_stdio_new (char const *root, + GError **err); + + + + + +root : + in locale dependent encoding + +err : + optionally NULL. + +Returns :a new file or NULL. + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/text.xml b/lib/libgsf-1.12.3/doc/xml/text.xml new file mode 100644 index 0000000000..3bb01db2ff --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/text.xml @@ -0,0 +1,222 @@ + + +Text +3 +GSF Library + + + +Text + + +Synopsis + + + + + + GsfInputTextline; +GsfInput* gsf_input_textline_new (GsfInput *source); +unsigned char* gsf_input_textline_ascii_gets + (GsfInputTextline *input); +guint8* gsf_input_textline_utf8_gets (GsfInputTextline *input); + GsfOutputIconv; +GsfOutput* gsf_output_iconv_new (GsfOutput *sink, + char const *dst, + char const *src); + GsfOutputCsv; +gboolean gsf_output_csv_write_eol (GsfOutputCsv *csv); +gboolean gsf_output_csv_write_field (GsfOutputCsv *csv, + char const *field, + size_t len); +enum GsfOutputCsvQuotingMode; + + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInputTextline + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInputTextline-struct"/>GsfInputTextline +GsfInputTextlinetypedef struct _GsfInputTextline GsfInputTextline; + + + + +<anchor id="gsf-input-textline-new"/>gsf_input_textline_new () +gsf_input_textline_newGsfInput* gsf_input_textline_new (GsfInput *source); + +NOTE : adds a reference to source + + + +source : + in some combination of ascii and utf8 + +Returns :a new file or NULL. + + + +<anchor id="gsf-input-textline-ascii-gets"/>gsf_input_textline_ascii_gets () +gsf_input_textline_ascii_getsunsigned char* gsf_input_textline_ascii_gets + (GsfInputTextline *input); + +A utility routine to read things line by line from the underlying source. +Trailing newlines and carriage returns are stripped, and the resultant buffer +can be edited. + + + +input : + + +Returns :the string read, or NULL on eof. + + + +<anchor id="gsf-input-textline-utf8-gets"/>gsf_input_textline_utf8_gets () +gsf_input_textline_utf8_getsguint8* gsf_input_textline_utf8_gets (GsfInputTextline *input); + +A utility routine to read things line by line from the underlying source. +Trailing newlines and carriage returns are stripped, and the resultant buffer +can be edited. + + + +input : + + +Returns :the string read, or NULL on eof. + + + +<anchor id="GsfOutputIconv"/>GsfOutputIconv +GsfOutputIconvtypedef struct _GsfOutputIconv GsfOutputIconv; + + + + +<anchor id="gsf-output-iconv-new"/>gsf_output_iconv_new () +gsf_output_iconv_newGsfOutput* gsf_output_iconv_new (GsfOutput *sink, + char const *dst, + char const *src); + +Adds a reference to sink. + + + +sink : + The underlying data source. + +dst : + The target character set. + +src : + The source character set. + +Returns :a new GsfOutput object or NULL. + + + +<anchor id="GsfOutputCsv"/>GsfOutputCsv +GsfOutputCsvtypedef struct { + GsfOutput output; + + GsfOutput *sink; + + char *quote; + size_t quote_len; + GsfOutputCsvQuotingMode quoting_mode; + char *quoting_triggers; + + char *eol; + size_t eol_len; + char *separator; + size_t separator_len; + gboolean fields_on_line; + + GString *buf; +} GsfOutputCsv; + + + + + +<anchor id="gsf-output-csv-write-eol"/>gsf_output_csv_write_eol () +gsf_output_csv_write_eolgboolean gsf_output_csv_write_eol (GsfOutputCsv *csv); + + + +csv : + + +Returns : + + + + + +<anchor id="gsf-output-csv-write-field"/>gsf_output_csv_write_field () +gsf_output_csv_write_fieldgboolean gsf_output_csv_write_field (GsfOutputCsv *csv, + char const *field, + size_t len); + + + +csv : + + +field : + + +len : + + +Returns : + + + + + +<anchor id="GsfOutputCsvQuotingMode"/>enum GsfOutputCsvQuotingMode +GsfOutputCsvQuotingModetypedef enum { + GSF_OUTPUT_CSV_QUOTING_MODE_NEVER, + GSF_OUTPUT_CSV_QUOTING_MODE_AUTO, + GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS +} GsfOutputCsvQuotingMode; + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/utils.xml b/lib/libgsf-1.12.3/doc/xml/utils.xml new file mode 100644 index 0000000000..dabffc5be2 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/utils.xml @@ -0,0 +1,1907 @@ + + +utils +3 +GSF Library + + + +utils + + +Synopsis + + + + + + +void gsf_init (void); +void gsf_shutdown (void); +void gsf_init_dynamic (GTypeModule *module); +void gsf_shutdown_dynamic (GTypeModule *module); +extern int libgsf_major_version; +extern int libgsf_minor_version; +extern int libgsf_micro_version; + +#define GSF_CLASS (name, prefix, class_init, instance_init, parent) +#define GSF_CLASS_FULL (name, prefix, base_init, base_finalize, \ + class_init, class_finalize, instance_init, parent_type, \ + abstract, interface_decl) +#define GSF_CLASS_ABSTRACT (name, prefix, class_init, instance_init, parent) +#define GSF_INTERFACE (init_func, iface_type) +#define GSF_INTERFACE_FULL (type, init_func, iface_type) +#define GSF_DYNAMIC_CLASS (name, prefix, class_init, instance_init, parent) +#define GSF_DYNAMIC_CLASS_FULL (name, prefix, base_init, base_finalize, \ + class_init, class_finalize, instance_init, parent_type, \ + abstract, interface_decl) +#define GSF_DYNAMIC_CLASS_ABSTRACT (name, prefix, class_init, instance_init, parent) +#define GSF_DYNAMIC_INTERFACE (init_func, iface_type, module) +#define GSF_DYNAMIC_INTERFACE_FULL (type, init_func, iface_type, module) +#define GSF_PARAM_STATIC + +#define GSF_ERROR +enum GsfError; +GQuark gsf_error_quark (void); + +void gsf_mem_dump (guint8 const *ptr, + size_t len); +void gsf_input_dump (GsfInput *input, + gboolean dump_as_hex); + +#define GSF_OFF_T_FORMAT +typedef gsf_off_t; +char* gsf_filename_to_utf8 (char const *filename, + gboolean quoted); +void gsf_iconv_close (GIConv handle); +charconst * gsf_extension_pointer (char const *path); + +guint8* gsf_base64_encode_simple (guint8 const *data, + size_t len); +size_t gsf_base64_encode_close (guint8 const *in, + size_t inlen, + gboolean break_lines, + guint8 *out, + int *state, + guint *save); +size_t gsf_base64_encode_step (guint8 const *in, + size_t len, + gboolean break_lines, + guint8 *out, + int *state, + guint *save); +size_t gsf_base64_decode_simple (guint8 *data, + size_t len); +size_t gsf_base64_decode_step (guint8 const *in, + size_t len, + guint8 *out, + int *state, + guint *save); +#define GSF_LE_GET_GINT8 (p) +#define GSF_LE_GET_GUINT64 (p) +#define GSF_LE_GET_GINT16 (p) +#define GSF_LE_GET_GUINT8 (p) +#define GSF_LE_GET_GINT32 (p) +#define GSF_LE_GET_GUINT16 (p) +#define GSF_LE_GET_GUINT32 (p) +#define GSF_LE_GET_GINT64 (p) +guint64 gsf_le_get_guint64 (void const *p); +#define GSF_LE_GET_FLOAT (p) +float gsf_le_get_float (void const *p); +#define GSF_LE_GET_DOUBLE (p) +double gsf_le_get_double (void const *p); +#define GSF_LE_SET_GUINT8 (p, dat) +#define GSF_LE_SET_GUINT16 (p, dat) +#define GSF_LE_SET_GUINT32 (p, dat) +#define GSF_LE_SET_GINT8 (p,dat) +#define GSF_LE_SET_GINT16 (p,dat) +#define GSF_LE_SET_GINT32 (p,dat) +#define GSF_LE_SET_GINT64 (p,dat) +#define GSF_LE_SET_GUINT64 (p, dat) +#define GSF_LE_SET_FLOAT (p,dat) +#define GSF_LE_SET_DOUBLE (p,dat) +void gsf_le_set_float (void *p, + float f); +void gsf_le_set_double (void *p, + double d); + + GsfTimestamp; +GsfTimestamp* gsf_timestamp_new (GDate const *date, + glong seconds, + char const *tz); +GsfTimestamp* gsf_timestamp_new_now (void); +GsfTimestamp* gsf_timestamp_copy (GsfTimestamp const *stamp); +void gsf_timestamp_free (GsfTimestamp *stamp); +char* gsf_timestamp_as_string (GsfTimestamp const *stamp); +int gsf_timestamp_parse (char const *spec, + GsfTimestamp *stamp); +guint gsf_timestamp_hash (GsfTimestamp const *stamp); +gboolean gsf_timestamp_equal (GsfTimestamp const *a, + GsfTimestamp const *b); +void gsf_value_set_timestamp (GValue *value, + GsfTimestamp const *stamp); +#define VAL_IS_GSF_TIMESTAMP (v) + + +GValue* gsf_doc_prop_swap_val (GsfDocProp *prop, + GValue *val); +void gsf_property_settings_collect (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + ...); +void gsf_property_settings_collect_valist + (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + va_list var_args); +void gsf_property_settings_free (GParameter *params, + size_t n_params); + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="gsf-init"/>gsf_init () +gsf_initvoid gsf_init (void); + +Initializes the GSF library + + + + +<anchor id="gsf-shutdown"/>gsf_shutdown () +gsf_shutdownvoid gsf_shutdown (void); + +De-intializes the GSF library + + + + +<anchor id="gsf-init-dynamic"/>gsf_init_dynamic () +gsf_init_dynamicvoid gsf_init_dynamic (GTypeModule *module); + + + +module : + + + + + + +<anchor id="gsf-shutdown-dynamic"/>gsf_shutdown_dynamic () +gsf_shutdown_dynamicvoid gsf_shutdown_dynamic (GTypeModule *module); + + + +module : + + + + + + +<anchor id="libgsf-major-version"/>libgsf_major_version +libgsf_major_versionextern int libgsf_major_version; + + + + + +<anchor id="libgsf-minor-version"/>libgsf_minor_version +libgsf_minor_versionextern int libgsf_minor_version; + + + + + +<anchor id="libgsf-micro-version"/>libgsf_micro_version +libgsf_micro_versionextern int libgsf_micro_version; + + + + + +<anchor id="GSF-CLASS:CAPS"/>GSF_CLASS() +GSF_CLASS#define GSF_CLASS(name, prefix, class_init, instance_init, parent) + + + +name : + + +prefix : + + +class_init : + + +instance_init : + + +parent : + + + + + + +<anchor id="GSF-CLASS-FULL:CAPS"/>GSF_CLASS_FULL() +GSF_CLASS_FULL#define GSF_CLASS_FULL(name, prefix, base_init, base_finalize, \ + class_init, class_finalize, instance_init, parent_type, \ + abstract, interface_decl) + + + +name : + + +prefix : + + +base_init : + + +base_finalize : + +@\ + class_init: +@\ + class_init: + +class_finalize : + + +instance_init : + + +parent_type : + +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: + +interface_decl : + + + + +<anchor id="GSF-CLASS-ABSTRACT:CAPS"/>GSF_CLASS_ABSTRACT() +GSF_CLASS_ABSTRACT#define GSF_CLASS_ABSTRACT(name, prefix, class_init, instance_init, parent) + + + +name : + + +prefix : + + +class_init : + + +instance_init : + + +parent : + + + + + + +<anchor id="GSF-INTERFACE:CAPS"/>GSF_INTERFACE() +GSF_INTERFACE#define GSF_INTERFACE(init_func, iface_type) + + + +init_func : + + +iface_type : + + + + + + +<anchor id="GSF-INTERFACE-FULL:CAPS"/>GSF_INTERFACE_FULL() +GSF_INTERFACE_FULL#define GSF_INTERFACE_FULL(type, init_func, iface_type) + + + +type : + + +init_func : + + +iface_type : + + + + + + +<anchor id="GSF-DYNAMIC-CLASS:CAPS"/>GSF_DYNAMIC_CLASS() +GSF_DYNAMIC_CLASS#define GSF_DYNAMIC_CLASS(name, prefix, class_init, instance_init, parent) + + + +name : + + +prefix : + + +class_init : + + +instance_init : + + +parent : + + + + +<anchor id="GSF-DYNAMIC-CLASS-FULL:CAPS"/>GSF_DYNAMIC_CLASS_FULL() +GSF_DYNAMIC_CLASS_FULL#define GSF_DYNAMIC_CLASS_FULL(name, prefix, base_init, base_finalize, \ + class_init, class_finalize, instance_init, parent_type, \ + abstract, interface_decl) + + + +name : + + +prefix : + + +base_init : + + +base_finalize : + +@\ + class_init: +@\ + class_init: + +class_finalize : + + +instance_init : + + +parent_type : + +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: +@\ + abstract: + +interface_decl : + + + + +<anchor id="GSF-DYNAMIC-CLASS-ABSTRACT:CAPS"/>GSF_DYNAMIC_CLASS_ABSTRACT() +GSF_DYNAMIC_CLASS_ABSTRACT#define GSF_DYNAMIC_CLASS_ABSTRACT(name, prefix, class_init, instance_init, parent) + + + +name : + + +prefix : + + +class_init : + + +instance_init : + + +parent : + + + + +<anchor id="GSF-DYNAMIC-INTERFACE:CAPS"/>GSF_DYNAMIC_INTERFACE() +GSF_DYNAMIC_INTERFACE#define GSF_DYNAMIC_INTERFACE(init_func, iface_type, module) + + + +init_func : + + +iface_type : + + +module : + + + + + + +<anchor id="GSF-DYNAMIC-INTERFACE-FULL:CAPS"/>GSF_DYNAMIC_INTERFACE_FULL() +GSF_DYNAMIC_INTERFACE_FULL#define GSF_DYNAMIC_INTERFACE_FULL(type, init_func, iface_type, module) + + + +type : + + +init_func : + + +iface_type : + + +module : + + + + + + +<anchor id="GSF-PARAM-STATIC:CAPS"/>GSF_PARAM_STATIC +GSF_PARAM_STATIC#define GSF_PARAM_STATIC + + + + +<anchor id="GSF-ERROR:CAPS"/>GSF_ERROR +GSF_ERROR#define GSF_ERROR (gsf_error_quark ()) + + + This convenience macro simply calls gsf_error_quark(). You can use + it in calls to g_error_matches(), for example. The macro returns + the GQuark that is used to identify errors from libgsf functions. + Specific error codes come from the GsfError enumeration. + + +<anchor id="GsfError"/>enum GsfError +GsfErrortypedef enum { + GSF_ERROR_OUT_OF_MEMORY, + GSF_ERROR_INVALID_DATA +} GsfError; + + + Error codes that can be returned from libgsf functions in GError structures. + + +GSF_ERROR_OUT_OF_MEMORY +Not enough memory could be allocated to hold +a structure or object. + + + +GSF_ERROR_INVALID_DATA +A file being read contained invalid or +inconsistent data. + + + + + +<anchor id="gsf-error-quark"/>gsf_error_quark () +gsf_error_quarkGQuark gsf_error_quark (void); + +Returns the GQuark used to identify libgsf errors in GError structures. +Specific error codes come from the GsfError enumeration. + + + +Returns : A GQuark. + + + +<anchor id="gsf-mem-dump"/>gsf_mem_dump () +gsf_mem_dumpvoid gsf_mem_dump (guint8 const *ptr, + size_t len); + +Dump len bytes from the memory location given by ptr. + + + +ptr : + memory area to be dumped. + +len : + how many bytes will be dumped. + + + +<anchor id="gsf-input-dump"/>gsf_input_dump () +gsf_input_dumpvoid gsf_input_dump (GsfInput *input, + gboolean dump_as_hex); + +Dumps input's contents to STDOUT, optionally in hex format. + + + +input : + a GsfInput + +dump_as_hex : + If TRUE, dump in hexidecmal format + + + +<anchor id="GSF-OFF-T-FORMAT:CAPS"/>GSF_OFF_T_FORMAT +GSF_OFF_T_FORMAT#define GSF_OFF_T_FORMAT G_GINT64_FORMAT + + + + + +<anchor id="gsf-off-t"/>gsf_off_t +gsf_off_ttypedef gint64 gsf_off_t; + + + + + +<anchor id="gsf-filename-to-utf8"/>gsf_filename_to_utf8 () +gsf_filename_to_utf8char* gsf_filename_to_utf8 (char const *filename, + gboolean quoted); + +A utility wrapper to make sure filenames are valid utf8. +Caller must g_free the result. + + + +filename : + file name suitable for open(2). + +quoted : + if TRUE, the resulting utf8 file name will be quoted + (unless it is invalid). + +Returns :filename using utf-8 encoding for display + + + +<anchor id="gsf-iconv-close"/>gsf_iconv_close () +gsf_iconv_closevoid gsf_iconv_close (GIConv handle); + + + + + +handle : + + + + +<anchor id="gsf-extension-pointer"/>gsf_extension_pointer () +gsf_extension_pointercharconst * gsf_extension_pointer (char const *path); + +Extracts the extension from the end of a filename (the part after the final +'.' in the filename). + + + +path : + A filename or file path. + +Returns : A pointer to the extension part of the filename, or a +pointer to the end of the string if the filename does not +have an extension. + + + +<anchor id="gsf-base64-encode-simple"/>gsf_base64_encode_simple () +gsf_base64_encode_simpleguint8* gsf_base64_encode_simple (guint8 const *data, + size_t len); + + + +data : + + +len : + + +Returns : + + + + + +<anchor id="gsf-base64-encode-close"/>gsf_base64_encode_close () +gsf_base64_encode_closesize_t gsf_base64_encode_close (guint8 const *in, + size_t inlen, + gboolean break_lines, + guint8 *out, + int *state, + guint *save); + + + +in : + + +inlen : + + +break_lines : + + +out : + + +state : + + +save : + + +Returns : + + + + + +<anchor id="gsf-base64-encode-step"/>gsf_base64_encode_step () +gsf_base64_encode_stepsize_t gsf_base64_encode_step (guint8 const *in, + size_t len, + gboolean break_lines, + guint8 *out, + int *state, + guint *save); + + + +in : + + +len : + + +break_lines : + + +out : + + +state : + + +save : + + +Returns : + + + + + +<anchor id="gsf-base64-decode-simple"/>gsf_base64_decode_simple () +gsf_base64_decode_simplesize_t gsf_base64_decode_simple (guint8 *data, + size_t len); + + + +data : + + +len : + + +Returns : + + + + + +<anchor id="gsf-base64-decode-step"/>gsf_base64_decode_step () +gsf_base64_decode_stepsize_t gsf_base64_decode_step (guint8 const *in, + size_t len, + guint8 *out, + int *state, + guint *save); + +Decodes a chunk of base64 encoded data + + + +in : + input stream + +len : + max length of data to decode + +out : + output stream + +state : + holds the number of bits that are stored in save + +save : + leftover bits that have not yet been decoded + +Returns :the number of bytes converted + + + +<anchor id="GSF-LE-GET-GINT8:CAPS"/>GSF_LE_GET_GINT8() +GSF_LE_GET_GINT8#define GSF_LE_GET_GINT8(p) ((gint8)GSF_LE_GET_GUINT8(p)) + + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GUINT64:CAPS"/>GSF_LE_GET_GUINT64() +GSF_LE_GET_GUINT64#define GSF_LE_GET_GUINT64(p) (gsf_le_get_guint64 (p)) + + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GINT16:CAPS"/>GSF_LE_GET_GINT16() +GSF_LE_GET_GINT16#define GSF_LE_GET_GINT16(p) ((gint16)GSF_LE_GET_GUINT16(p)) + + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GUINT8:CAPS"/>GSF_LE_GET_GUINT8() +GSF_LE_GET_GUINT8#define GSF_LE_GET_GUINT8(p) (*(guint8 const *)(p)) + + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GINT32:CAPS"/>GSF_LE_GET_GINT32() +GSF_LE_GET_GINT32#define GSF_LE_GET_GINT32(p) ((gint32)GSF_LE_GET_GUINT32(p)) + + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GUINT16:CAPS"/>GSF_LE_GET_GUINT16() +GSF_LE_GET_GUINT16#define GSF_LE_GET_GUINT16(p) + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GUINT32:CAPS"/>GSF_LE_GET_GUINT32() +GSF_LE_GET_GUINT32#define GSF_LE_GET_GUINT32(p) + + + +p : + + + + + + +<anchor id="GSF-LE-GET-GINT64:CAPS"/>GSF_LE_GET_GINT64() +GSF_LE_GET_GINT64#define GSF_LE_GET_GINT64(p) ((gint64)GSF_LE_GET_GUINT64(p)) + + + + +p : + + + + + + +<anchor id="gsf-le-get-guint64"/>gsf_le_get_guint64 () +gsf_le_get_guint64guint64 gsf_le_get_guint64 (void const *p); + + + +p : + + +Returns : + + + + + +<anchor id="GSF-LE-GET-FLOAT:CAPS"/>GSF_LE_GET_FLOAT() +GSF_LE_GET_FLOAT#define GSF_LE_GET_FLOAT(p) (gsf_le_get_float (p)) + + + + +p : + + + + + + +<anchor id="gsf-le-get-float"/>gsf_le_get_float () +gsf_le_get_floatfloat gsf_le_get_float (void const *p); + + + +p : + + +Returns : + + + + + +<anchor id="GSF-LE-GET-DOUBLE:CAPS"/>GSF_LE_GET_DOUBLE() +GSF_LE_GET_DOUBLE#define GSF_LE_GET_DOUBLE(p) (gsf_le_get_double (p)) + + + + +p : + + + + + + +<anchor id="gsf-le-get-double"/>gsf_le_get_double () +gsf_le_get_doubledouble gsf_le_get_double (void const *p); + + + +p : + + +Returns : + + + + + +<anchor id="GSF-LE-SET-GUINT8:CAPS"/>GSF_LE_SET_GUINT8() +GSF_LE_SET_GUINT8#define GSF_LE_SET_GUINT8(p, dat) + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GUINT16:CAPS"/>GSF_LE_SET_GUINT16() +GSF_LE_SET_GUINT16#define GSF_LE_SET_GUINT16(p, dat) + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GUINT32:CAPS"/>GSF_LE_SET_GUINT32() +GSF_LE_SET_GUINT32#define GSF_LE_SET_GUINT32(p, dat) + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GINT8:CAPS"/>GSF_LE_SET_GINT8() +GSF_LE_SET_GINT8#define GSF_LE_SET_GINT8(p,dat) GSF_LE_SET_GUINT8((p),(dat)) + + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GINT16:CAPS"/>GSF_LE_SET_GINT16() +GSF_LE_SET_GINT16#define GSF_LE_SET_GINT16(p,dat) GSF_LE_SET_GUINT16((p),(dat)) + + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GINT32:CAPS"/>GSF_LE_SET_GINT32() +GSF_LE_SET_GINT32#define GSF_LE_SET_GINT32(p,dat) GSF_LE_SET_GUINT32((p),(dat)) + + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GINT64:CAPS"/>GSF_LE_SET_GINT64() +GSF_LE_SET_GINT64#define GSF_LE_SET_GINT64(p,dat) GSF_LE_SET_GUINT64((p),(dat)) + + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-GUINT64:CAPS"/>GSF_LE_SET_GUINT64() +GSF_LE_SET_GUINT64#define GSF_LE_SET_GUINT64(p, dat) + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-FLOAT:CAPS"/>GSF_LE_SET_FLOAT() +GSF_LE_SET_FLOAT#define GSF_LE_SET_FLOAT(p,dat) gsf_le_set_float((p),(dat)) + + + + +p : + + +dat : + + + + + + +<anchor id="GSF-LE-SET-DOUBLE:CAPS"/>GSF_LE_SET_DOUBLE() +GSF_LE_SET_DOUBLE#define GSF_LE_SET_DOUBLE(p,dat) gsf_le_set_double((p),(dat)) + + + + +p : + + +dat : + + + + + + +<anchor id="gsf-le-set-float"/>gsf_le_set_float () +gsf_le_set_floatvoid gsf_le_set_float (void *p, + float f); + + + +p : + + +f : + + + + + + +<anchor id="gsf-le-set-double"/>gsf_le_set_double () +gsf_le_set_doublevoid gsf_le_set_double (void *p, + double d); + + + +p : + + +d : + + + + + + +<anchor id="GsfTimestamp"/>GsfTimestamp +GsfTimestamptypedef struct { + GDate date; /* In local timezone */ + glong seconds; /* time of day */ + GString time_zone; /* possibly blank */ + + guint32 timet; +} GsfTimestamp; + + + + + +<anchor id="gsf-timestamp-new"/>gsf_timestamp_new () +gsf_timestamp_newGsfTimestamp* gsf_timestamp_new (GDate const *date, + glong seconds, + char const *tz); + + + +date : + + +seconds : + + +tz : + + +Returns : + + + + + +<anchor id="gsf-timestamp-new-now"/>gsf_timestamp_new_now () +gsf_timestamp_new_nowGsfTimestamp* gsf_timestamp_new_now (void); + + + +Returns : + + + + + +<anchor id="gsf-timestamp-copy"/>gsf_timestamp_copy () +gsf_timestamp_copyGsfTimestamp* gsf_timestamp_copy (GsfTimestamp const *stamp); + + + +stamp : + + +Returns : + + + + + +<anchor id="gsf-timestamp-free"/>gsf_timestamp_free () +gsf_timestamp_freevoid gsf_timestamp_free (GsfTimestamp *stamp); + + + +stamp : + + + + + + +<anchor id="gsf-timestamp-as-string"/>gsf_timestamp_as_string () +gsf_timestamp_as_stringchar* gsf_timestamp_as_string (GsfTimestamp const *stamp); + + + +stamp : + + +Returns : + + + + + +<anchor id="gsf-timestamp-parse"/>gsf_timestamp_parse () +gsf_timestamp_parseint gsf_timestamp_parse (char const *spec, + GsfTimestamp *stamp); + + + +spec : + + +stamp : + + +Returns : + + + + + +<anchor id="gsf-timestamp-hash"/>gsf_timestamp_hash () +gsf_timestamp_hashguint gsf_timestamp_hash (GsfTimestamp const *stamp); + + + +stamp : + + +Returns : + + + + + +<anchor id="gsf-timestamp-equal"/>gsf_timestamp_equal () +gsf_timestamp_equalgboolean gsf_timestamp_equal (GsfTimestamp const *a, + GsfTimestamp const *b); + + + +a : + + +b : + + +Returns : + + + + + +<anchor id="gsf-value-set-timestamp"/>gsf_value_set_timestamp () +gsf_value_set_timestampvoid gsf_value_set_timestamp (GValue *value, + GsfTimestamp const *stamp); + + + +value : + + +stamp : + + + + + + +<anchor id="VAL-IS-GSF-TIMESTAMP:CAPS"/>VAL_IS_GSF_TIMESTAMP() +VAL_IS_GSF_TIMESTAMP#define VAL_IS_GSF_TIMESTAMP(v) (G_TYPE_CHECK_VALUE_TYPE((v), GSF_TIMESTAMP_TYPE)) + + + + +v : + + + + + + +<anchor id="gsf-doc-prop-swap-val"/>gsf_doc_prop_swap_val () +gsf_doc_prop_swap_valGValue* gsf_doc_prop_swap_val (GsfDocProp *prop, + GValue *val); + + + + + +prop : + GsfDocProp + +val : + GValue + +Returns :the current value of prop, and replaces it with val + Caller is responsible for unsetting and freeing the result. + + + +<anchor id="gsf-property-settings-collect"/>gsf_property_settings_collect () +gsf_property_settings_collectvoid gsf_property_settings_collect (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + ...); + + + +object_type : + + +p_params : + + +p_n_params : + + +first_property_name : + + +... : + + + + + + +<anchor id="gsf-property-settings-collect-valist"/>gsf_property_settings_collect_valist () +gsf_property_settings_collect_valistvoid gsf_property_settings_collect_valist + (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + va_list var_args); + +This function builds a GParameter array suitable for g_object_newv. + + + +object_type : + the GType for which the properties are being set. + +p_params : + a pointer to the GParameter array that holds the properties. + (Used for both input and output. This may point to a NULL pointer if + there are no properties collected yet.) + +p_n_params : + a pointer to the number of properties collected. (Used for + both input and output.) + +first_property_name : + the name of the first property being set, or NULL. + +var_args : + a va_list holding the remainder of the property names and + values, terminated by a NULL. + + + +<anchor id="gsf-property-settings-free"/>gsf_property_settings_free () +gsf_property_settings_freevoid gsf_property_settings_free (GParameter *params, + size_t n_params); + + + +params : + + +n_params : + + + + + + + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/xml.xml b/lib/libgsf-1.12.3/doc/xml/xml.xml new file mode 100644 index 0000000000..9245da59ee --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/xml.xml @@ -0,0 +1,1115 @@ + + +XML and libxml +3 +GSF Library + + + +XML and libxml + + +Synopsis + + + + + +#define GSF_XML_IN_NS (id, uri) +enum GsfXMLContent; + GsfXMLIn; +int gsf_xmlDocFormatDump (GsfOutput *output, + xmlDoc *cur, + char const *encoding, + gboolean format); +void gsf_xml_in_doc_free (GsfXMLInDoc *doc); + GsfXMLBlob; + GsfXMLOut; + GsfXMLInDoc; + GsfXMLInNS; +#define GSF_XML_IN_NODE_FULL (parent_id, id, ns, name, has_content, \ + deprecated_unused_allow_unknown, check_ns, start, end, user) +#define GSF_XML_IN_NODE (parent_id, id, ns, name, has_content, start, end) + GsfXMLInNode; +gboolean (*GsfXMLInUnknownFunc) (GsfXMLIn *state, + xmlChar const *elem, + xmlChar const **attrs); +xmlParserCtxt* gsf_xml_parser_context (GsfInput *input); +GsfXMLInDoc* gsf_xml_in_doc_new (GsfXMLInNode *root, + GsfXMLInNS *ns); +gboolean gsf_xml_in_namecmp (GsfXMLIn const *state, + char const *str, + unsigned int ns_id, + char const *name); +gboolean gsf_xml_in_parse (GsfXMLIn *state, + GsfInput *input); +charconst * gsf_xml_in_check_ns (GsfXMLIn const *state, + char const *str, + unsigned int ns_id); +void gsf_xml_in_doc_extend (GsfXMLInDoc *doc, + GsfXMLInNode *nodes); +void gsf_xml_in_doc_set_unknown_handler + (GsfXMLInDoc *doc, + GsfXMLInUnknownFunc handler); +GsfXMLOut* gsf_xml_out_new (GsfOutput *output); +void gsf_xml_out_set_doc_type (GsfXMLOut *xml, + char const *type); +void gsf_xml_out_start_element (GsfXMLOut *xml, + char const *id); +charconst * gsf_xml_out_end_element (GsfXMLOut *xml); +void gsf_xml_out_add_cstr (GsfXMLOut *xml, + char const *id, + char const *val_utf8); +void gsf_xml_out_add_cstr_unchecked (GsfXMLOut *xml, + char const *id, + char const *val_utf8); +void gsf_xml_out_add_bool (GsfXMLOut *xml, + char const *id, + gboolean val); +void gsf_xml_out_add_int (GsfXMLOut *xml, + char const *id, + int val); +void gsf_xml_out_add_uint (GsfXMLOut *xml, + char const *id, + unsigned int val); +void gsf_xml_out_add_float (GsfXMLOut *xml, + char const *id, + double val, + int precision); +void gsf_xml_out_add_enum (GsfXMLOut *xml, + char const *id, + GType etype, + gint val); +void gsf_xml_out_add_color (GsfXMLOut *xml, + char const *id, + unsigned int r, + unsigned int g, + unsigned int b); +void gsf_xml_out_add_base64 (GsfXMLOut *xml, + char const *id, + guint8 const *data, + unsigned int len); +void gsf_xml_out_simple_element (GsfXMLOut *xml, + char const *id, + char const *content); +void gsf_xml_out_simple_float_element + (GsfXMLOut *xml, + char const *id, + double val, + int precision); +void gsf_xml_out_simple_int_element (GsfXMLOut *xml, + char const *id, + int val); + + + + + +Object Hierarchy + + + GObject + +----GsfXMLOut + + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="GSF-XML-IN-NS:CAPS"/>GSF_XML_IN_NS() +GSF_XML_IN_NS#define GSF_XML_IN_NS(id, uri) + + + +id : + + +uri : + + + + + + +<anchor id="GsfXMLContent"/>enum GsfXMLContent +GsfXMLContenttypedef enum { + GSF_XML_NO_CONTENT, + GSF_XML_CONTENT, + GSF_XML_SHARED_CONTENT +} GsfXMLContent; + + + + + +<anchor id="GsfXMLIn"/>GsfXMLIn +GsfXMLIntypedef struct { + GsfXMLInDoc const *doc; /* init before parsing */ + + /* look but do not change */ + GsfXMLInNode const *node; /* current node */ + GSList *state_stack; + + GsfXMLInNS const *default_ns; /* optionally NULL */ + GSList *ns_stack; + + GString *content; + gint unknown_depth; /* handle recursive unknown tags */ + GHashTable *ns_prefixes; /* current ns prefixes */ + GPtrArray *ns_by_id; /* indexed by id */ +} GsfXMLIn; + + + + + +<anchor id="gsf-xmlDocFormatDump"/>gsf_xmlDocFormatDump () +gsf_xmlDocFormatDumpint gsf_xmlDocFormatDump (GsfOutput *output, + xmlDoc *cur, + char const *encoding, + gboolean format); + + + +output : + + +cur : + + +encoding : + + +format : + + +Returns : + + + + + +<anchor id="gsf-xml-in-doc-free"/>gsf_xml_in_doc_free () +gsf_xml_in_doc_freevoid gsf_xml_in_doc_free (GsfXMLInDoc *doc); + +Free up resources + + + +doc : + + + + +<anchor id="GsfXMLBlob"/>GsfXMLBlob +GsfXMLBlobtypedef struct _GsfXMLBlob GsfXMLBlob; + + + + +<anchor id="GsfXMLOut-struct"/>GsfXMLOut +GsfXMLOuttypedef struct _GsfXMLOut GsfXMLOut; + + + + +<anchor id="GsfXMLInDoc"/>GsfXMLInDoc +GsfXMLInDoctypedef struct _GsfXMLInDoc GsfXMLInDoc; + + + + +<anchor id="GsfXMLInNS"/>GsfXMLInNS +GsfXMLInNStypedef struct { + char const *uri; + unsigned ns_id; +} GsfXMLInNS; + + + + + +<anchor id="GSF-XML-IN-NODE-FULL:CAPS"/>GSF_XML_IN_NODE_FULL() +GSF_XML_IN_NODE_FULL#define GSF_XML_IN_NODE_FULL(parent_id, id, ns, name, has_content, \ + deprecated_unused_allow_unknown, check_ns, start, end, user) + + + +parent_id : + + +id : + + +ns : + + +name : + + +has_content : + +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: +@\ + deprecated_unused_allow_unknown: + +check_ns : + + +start : + + +end : + + +user : + + + + + + +<anchor id="GSF-XML-IN-NODE:CAPS"/>GSF_XML_IN_NODE() +GSF_XML_IN_NODE#define GSF_XML_IN_NODE(parent_id, id, ns, name, has_content, start, end) + + + +parent_id : + + +id : + + +ns : + + +name : + + +has_content : + + +start : + + +end : + + + + + + +<anchor id="GsfXMLInNode"/>GsfXMLInNode +GsfXMLInNodetypedef struct { + char const *id; + int ns_id; + char const *name; + char const *parent_id; + gboolean parent_initialized; + GSList *groups; + + unsigned has_content; + gboolean deprecated_unused_allow_unknown; /* remains here for binary compat */ + gboolean check_children_for_ns; + + void (*start) (GsfXMLIn *state, xmlChar const **attrs); + void (*end) (GsfXMLIn *state, GsfXMLBlob *unknown); + + union { + int v_int; + gboolean v_bool; + gpointer v_blob; + char const *v_str; + } user_data; +} GsfXMLInNode; + + + + + +<anchor id="GsfXMLInUnknownFunc"/>GsfXMLInUnknownFunc () +GsfXMLInUnknownFuncgboolean (*GsfXMLInUnknownFunc) (GsfXMLIn *state, + xmlChar const *elem, + xmlChar const **attrs); + + + +state : + + +elem : + + +attrs : + + +Returns : + + + + + +<anchor id="gsf-xml-parser-context"/>gsf_xml_parser_context () +gsf_xml_parser_contextxmlParserCtxt* gsf_xml_parser_context (GsfInput *input); + +Create a libxml2 pull style parser context wrapper around a gsf input. +This signature will probably change to supply a SAX structure. + + +NOTE : adds a reference to input +NOTE : a simple wrapper around a cleaner implementation that will fold in + when we add other api changes. Its not worth bumping just for this + + + +input : + + +Returns :: A parser context or NULL + + + +<anchor id="gsf-xml-in-doc-new"/>gsf_xml_in_doc_new () +gsf_xml_in_doc_newGsfXMLInDoc* gsf_xml_in_doc_new (GsfXMLInNode *root, + GsfXMLInNS *ns); + +Put the nodes in the NULL terminated array starting at root and the name +spaces in the NULL terminated array starting at ns together. Link them up +and prepare the static data structures necessary to validate a doument based +on that description. + + + +root : + an array of node descriptors + +ns : + an array of namespace identifiers + +Returns :NULL on error + + + +<anchor id="gsf-xml-in-namecmp"/>gsf_xml_in_namecmp () +gsf_xml_in_namecmpgboolean gsf_xml_in_namecmp (GsfXMLIn const *state, + char const *str, + unsigned int ns_id, + char const *name); + + + + + +state : + The GsfXMLIn we are reading from. + +str : + The potentially namespace qualified node name. + +ns_id : + The name space id to check + +name : + The target node name + +Returns :TRUE if str == ns_id:name according to state. + + + +<anchor id="gsf-xml-in-parse"/>gsf_xml_in_parse () +gsf_xml_in_parsegboolean gsf_xml_in_parse (GsfXMLIn *state, + GsfInput *input); + +Read an xml document from input and parse based on the the descriptor in +state::doc + + + +state : + + +input : + + +Returns :FALSE on error + + + +<anchor id="gsf-xml-in-check-ns"/>gsf_xml_in_check_ns () +gsf_xml_in_check_nscharconst * gsf_xml_in_check_ns (GsfXMLIn const *state, + char const *str, + unsigned int ns_id); + +According to state is str in the namespace ns_id ? + + + +state : + + +str : + + +ns_id : + + +Returns :a pointer to str after the namespace if successful, +otherwise NULL. + + + +<anchor id="gsf-xml-in-doc-extend"/>gsf_xml_in_doc_extend () +gsf_xml_in_doc_extendvoid gsf_xml_in_doc_extend (GsfXMLInDoc *doc, + GsfXMLInNode *nodes); + + + +doc : + + +nodes : + + + + + + +<anchor id="gsf-xml-in-doc-set-unknown-handler"/>gsf_xml_in_doc_set_unknown_handler () +gsf_xml_in_doc_set_unknown_handlervoid gsf_xml_in_doc_set_unknown_handler + (GsfXMLInDoc *doc, + GsfXMLInUnknownFunc handler); + +Call the function handler when an unexpected child node is found + + + +doc : + GsfXMLInDoc + +handler : + The function to call + + + +<anchor id="gsf-xml-out-new"/>gsf_xml_out_new () +gsf_xml_out_newGsfXMLOut* gsf_xml_out_new (GsfOutput *output); + + + +output : + + +Returns : + + + + + +<anchor id="gsf-xml-out-set-doc-type"/>gsf_xml_out_set_doc_type () +gsf_xml_out_set_doc_typevoid gsf_xml_out_set_doc_type (GsfXMLOut *xml, + char const *type); + +Store some optional some <!DOCTYPE .. > content + + + +xml : + GsfXMLOut + +type : + + + + +<anchor id="gsf-xml-out-start-element"/>gsf_xml_out_start_element () +gsf_xml_out_start_elementvoid gsf_xml_out_start_element (GsfXMLOut *xml, + char const *id); + + + +xml : + + +id : + + + + + + +<anchor id="gsf-xml-out-end-element"/>gsf_xml_out_end_element () +gsf_xml_out_end_elementcharconst * gsf_xml_out_end_element (GsfXMLOut *xml); + + + +xml : + + +Returns : + + + + + +<anchor id="gsf-xml-out-add-cstr"/>gsf_xml_out_add_cstr () +gsf_xml_out_add_cstrvoid gsf_xml_out_add_cstr (GsfXMLOut *xml, + char const *id, + char const *val_utf8); + +dump val_utf8 to an attribute named id or as the nodes content escaping +characters as necessary. If val_utf8 is NULL do nothing (no warning, no +output) + + + +xml : + + +id : + optionally NULL for content + +val_utf8 : + a utf8 encoded string + + + +<anchor id="gsf-xml-out-add-cstr-unchecked"/>gsf_xml_out_add_cstr_unchecked () +gsf_xml_out_add_cstr_uncheckedvoid gsf_xml_out_add_cstr_unchecked (GsfXMLOut *xml, + char const *id, + char const *val_utf8); + +dump val_utf8 to an attribute named id without checking to see if the +content needs escaping. A useful performance enhancement when the +application knows that structure of the content well. If val_utf8 is NULL +do nothing (no warning, no output) + + + +xml : + + +id : + optionally NULL for content + +val_utf8 : + a utf8 encoded string to export + + + +<anchor id="gsf-xml-out-add-bool"/>gsf_xml_out_add_bool () +gsf_xml_out_add_boolvoid gsf_xml_out_add_bool (GsfXMLOut *xml, + char const *id, + gboolean val); + +dump boolean value val to an attribute named id or as the nodes content +Use '1' or '0' to simplify import + + + +xml : + + +id : + optionally NULL for content + +val : + a boolean + + + +<anchor id="gsf-xml-out-add-int"/>gsf_xml_out_add_int () +gsf_xml_out_add_intvoid gsf_xml_out_add_int (GsfXMLOut *xml, + char const *id, + int val); + +dump integer value val to an attribute named id or as the nodes content + + + +xml : + + +id : + optionally NULL for content + +val : + the value + + + +<anchor id="gsf-xml-out-add-uint"/>gsf_xml_out_add_uint () +gsf_xml_out_add_uintvoid gsf_xml_out_add_uint (GsfXMLOut *xml, + char const *id, + unsigned int val); + +dump unsigned integer value val to an attribute named id or as the nodes +content + + + +xml : + + +id : + optionally NULL for content + +val : + the value + + + +<anchor id="gsf-xml-out-add-float"/>gsf_xml_out_add_float () +gsf_xml_out_add_floatvoid gsf_xml_out_add_float (GsfXMLOut *xml, + char const *id, + double val, + int precision); + +dump float value val to an attribute named id or as the nodes +content with precision precision. The number will be formattted +according to the "C" locale. + + + +xml : + + +id : + optionally NULL for content + +val : + the value + +precision : + the number of significant digits to use, -1 meaning "enough". + + + +<anchor id="gsf-xml-out-add-enum"/>gsf_xml_out_add_enum () +gsf_xml_out_add_enumvoid gsf_xml_out_add_enum (GsfXMLOut *xml, + char const *id, + GType etype, + gint val); + + + +xml : + + +id : + + +etype : + + +val : + + + + + + +<anchor id="gsf-xml-out-add-color"/>gsf_xml_out_add_color () +gsf_xml_out_add_colorvoid gsf_xml_out_add_color (GsfXMLOut *xml, + char const *id, + unsigned int r, + unsigned int g, + unsigned int b); + +dump Color r.g.b to an attribute named id or as the nodes content + + + +xml : + + +id : + optionally NULL for content + +r : + + +g : + + +b : + + + + +<anchor id="gsf-xml-out-add-base64"/>gsf_xml_out_add_base64 () +gsf_xml_out_add_base64void gsf_xml_out_add_base64 (GsfXMLOut *xml, + char const *id, + guint8 const *data, + unsigned int len); + +dump len bytes in data into the content of node id using base64 + + + +xml : + + +id : + optionally NULL for content + +data : + + +len : + + + + +<anchor id="gsf-xml-out-simple-element"/>gsf_xml_out_simple_element () +gsf_xml_out_simple_elementvoid gsf_xml_out_simple_element (GsfXMLOut *xml, + char const *id, + char const *content); + +A convenience routine + + + +xml : + + +id : + + +content : + + + + +<anchor id="gsf-xml-out-simple-float-element"/>gsf_xml_out_simple_float_element () +gsf_xml_out_simple_float_elementvoid gsf_xml_out_simple_float_element + (GsfXMLOut *xml, + char const *id, + double val, + int precision); + +A convenience routine + + + +xml : + + +id : + + +val : + + +precision : + + + + +<anchor id="gsf-xml-out-simple-int-element"/>gsf_xml_out_simple_int_element () +gsf_xml_out_simple_int_elementvoid gsf_xml_out_simple_int_element (GsfXMLOut *xml, + char const *id, + int val); + +A convenience routine + + + +xml : + + +id : + + +val : + + + + + + + + + + diff --git a/lib/libgsf-1.12.3/doc/xml/zip.xml b/lib/libgsf-1.12.3/doc/xml/zip.xml new file mode 100644 index 0000000000..211f06c615 --- /dev/null +++ b/lib/libgsf-1.12.3/doc/xml/zip.xml @@ -0,0 +1,746 @@ + + +Zip +3 +GSF Library + + + +Zip + + +Synopsis + + + + + + GsfInfileZip; +GsfInfile* gsf_infile_zip_new (GsfInput *source, + GError **err); + GsfOutfileZip; +GsfOutfile* gsf_outfile_zip_new (GsfOutput *sink, + GError **err); +gboolean gsf_outfile_zip_set_compression_method + (GsfOutfileZip *zip, + GsfZipCompressionMethod method); + + + GsfZipDirent; +GsfZipDirent* gsf_zip_dirent_new (void); +void gsf_zip_dirent_free (GsfZipDirent *dirent); + GsfZipVDir; +void gsf_vdir_free (GsfZipVDir *vdir, + gboolean free_dirent); +GsfZipVDir* gsf_vdir_new (char const *name, + gboolean is_directory, + GsfZipDirent *dirent); +void gsf_vdir_add_child (GsfZipVDir *vdir, + GsfZipVDir *child); +#define ZIP_DIRENT_USIZE +#define ZIP_DIRENT_OFFSET +enum GsfZipCompressionMethod; +#define ZIP_FILE_HEADER_NAME_SIZE +#define ZZIP_IS_STREAMED (p) +#define ZIP_FILE_HEADER_EXTRACT +#define ZIP_TRAILER_SIZE +#define ZIP_HEADER_TIME +#define ZIP_FILE_HEADER_SIZE +#define ZZIP_IS_ENCRYPTED (p) +#define ZIP_HEADER_VERSION +#define ZIP_BUF_SIZE +#define ZIP_DIRENT_CRC32 +#define ZIP_HEADER_COMP_SIZE +#define ZIP_DIRENT_COMPR_METHOD +#define ZIP_DIRENT_FILE_TYPE +#define ZIP_FILE_HEADER_EXTRAS_SIZE +#define ZIP_DIRENT_EXTRACT +#define ZIP_DIRENT_FILE_MODE +#define ZIP_DIRENT_FLAGS +#define ZIP_FILE_HEADER_CSIZE +#define ZIP_TRAILER_DIR_SIZE +#define ZIP_TRAILER_COMMENT_SIZE +#define ZIP_TRAILER_ENTRIES +#define ZIP_NAME_SEPARATOR +#define ZIP_HEADER_SIZE +#define ZIP_HEADER_CRC +#define ZIP_FILE_HEADER_FLAGS +#define ZIP_DIRENT_EXTRAS_SIZE +#define ZIP_HEADER_COMP_METHOD +#define ZZIP_IS_COMPRLEVEL (p) +#define ZIP_DIRENT_DOSTIME +#define ZIP_DIRENT_ENCODER +#define ZIP_HEADER_OS +#define ZIP_DIRENT_COMMENT_SIZE +#define ZIP_FILE_HEADER_CRC32 +#define ZIP_HEADER_FLAGS +#define ZIP_TRAILER_DISK +#define ZIP_FILE_HEADER_USIZE +#define ZIP_TRAILER_TOTAL_ENTRIES +#define ZIP_HEADER_NAME_LEN +#define ZIP_HEADER_UNCOMP_SIZE +#define ZIP_TRAILER_DIR_DISK +#define ZIP_DIRENT_CSIZE +#define ZIP_TRAILER_DIR_POS +#define ZIP_BLOCK_SIZE +#define ZIP_DIRENT_NAME_SIZE +#define ZIP_DIRENT_SIZE +#define ZIP_DIRENT_DISKSTART +#define ZIP_HEADER_EXTRA_LEN +#define ZIP_FILE_HEADER_COMPR_METHOD +#define ZIP_FILE_HEADER_DOSTIME + + + + +Object Hierarchy + + + GObject + +----GsfInput + +----GsfInfile + +----GsfInfileZip + + + + GObject + +----GsfOutput + +----GsfOutfile + +----GsfOutfileZip + + + + + + + + + +Properties + + + "compression-level" gint : Read + "internal-parent" GsfInfileZip : Write / Construct Only + "source" GsfInput : Read / Write / Construct Only + "compression-level" gint : Read / Write / Construct Only + "entry-name" gchararray : Read / Write / Construct Only + "sink" GsfOutput : Read / Write / Construct Only + + + + + + +Description + + + + + + +Details + +<anchor id="GsfInfileZip-struct"/>GsfInfileZip +GsfInfileZiptypedef struct _GsfInfileZip GsfInfileZip; + + + + +<anchor id="gsf-infile-zip-new"/>gsf_infile_zip_new () +gsf_infile_zip_newGsfInfile* gsf_infile_zip_new (GsfInput *source, + GError **err); + +Opens the root directory of a Zip file. +NOTE : adds a reference to source + + + +source : + A base GsfInput + +err : + A GError, optionally null + +Returns :: the new zip file handler + + + +<anchor id="GsfOutfileZip-struct"/>GsfOutfileZip +GsfOutfileZiptypedef struct _GsfOutfileZip GsfOutfileZip; + + + + +<anchor id="gsf-outfile-zip-new"/>gsf_outfile_zip_new () +gsf_outfile_zip_newGsfOutfile* gsf_outfile_zip_new (GsfOutput *sink, + GError **err); + +Creates the root directory of a Zip file and manages the addition of +children. + + +NOTE : adds a reference to sink + + + +sink : + + +err : + + +Returns :: the new zip file handler + + + +<anchor id="gsf-outfile-zip-set-compression-method"/>gsf_outfile_zip_set_compression_method () +gsf_outfile_zip_set_compression_methodgboolean gsf_outfile_zip_set_compression_method + (GsfOutfileZip *zip, + GsfZipCompressionMethod method); + + + +zip : + + +method : + + +Returns : + + + + + +<anchor id="GsfZipDirent"/>GsfZipDirent +GsfZipDirenttypedef struct { + char *name; + GsfZipCompressionMethod compr_method; + guint32 crc32; + size_t csize; + size_t usize; + gsf_off_t offset; + gsf_off_t data_offset; + guint32 dostime; +} GsfZipDirent; + + + + + +<anchor id="gsf-zip-dirent-new"/>gsf_zip_dirent_new () +gsf_zip_dirent_newGsfZipDirent* gsf_zip_dirent_new (void); + + + +Returns : + + + + + +<anchor id="gsf-zip-dirent-free"/>gsf_zip_dirent_free () +gsf_zip_dirent_freevoid gsf_zip_dirent_free (GsfZipDirent *dirent); + + + +dirent : + + + + + + +<anchor id="GsfZipVDir"/>GsfZipVDir +GsfZipVDirtypedef struct { + char *name; + gboolean is_directory; + GsfZipDirent *dirent; + GSList *children, *last_child; +} GsfZipVDir; + + + + + +<anchor id="gsf-vdir-free"/>gsf_vdir_free () +gsf_vdir_freevoid gsf_vdir_free (GsfZipVDir *vdir, + gboolean free_dirent); + + + +vdir : + + +free_dirent : + + + + + + +<anchor id="gsf-vdir-new"/>gsf_vdir_new () +gsf_vdir_newGsfZipVDir* gsf_vdir_new (char const *name, + gboolean is_directory, + GsfZipDirent *dirent); + + + +name : + + +is_directory : + + +dirent : + + +Returns : + + + + + +<anchor id="gsf-vdir-add-child"/>gsf_vdir_add_child () +gsf_vdir_add_childvoid gsf_vdir_add_child (GsfZipVDir *vdir, + GsfZipVDir *child); + + + +vdir : + + +child : + + + + + + +<anchor id="ZIP-DIRENT-USIZE:CAPS"/>ZIP_DIRENT_USIZE +ZIP_DIRENT_USIZE#define ZIP_DIRENT_USIZE 24 + + + + + +<anchor id="ZIP-DIRENT-OFFSET:CAPS"/>ZIP_DIRENT_OFFSET +ZIP_DIRENT_OFFSET#define ZIP_DIRENT_OFFSET 42 + + + + + +<anchor id="GsfZipCompressionMethod"/>enum GsfZipCompressionMethod +GsfZipCompressionMethodtypedef enum { + GSF_ZIP_STORED = 0, /* supported for export */ + GSF_ZIP_SHRUNK = 1, + GSF_ZIP_REDUCEDx1 = 2, + GSF_ZIP_REDUCEDx2 = 3, + GSF_ZIP_REDUCEDx3 = 4, + GSF_ZIP_REDUCEDx4 = 5, + GSF_ZIP_IMPLODED = 6, + GSF_ZIP_TOKENIZED = 7, + GSF_ZIP_DEFLATED = 8, /* supported for export */ + GSF_ZIP_DEFLATED_BETTER = 9, + GSF_ZIP_IMPLODED_BETTER = 10 +} GsfZipCompressionMethod; + + + + + +<anchor id="ZIP-FILE-HEADER-NAME-SIZE:CAPS"/>ZIP_FILE_HEADER_NAME_SIZE +ZIP_FILE_HEADER_NAME_SIZE#define ZIP_FILE_HEADER_NAME_SIZE 26 + + + + + +<anchor id="ZZIP-IS-STREAMED:CAPS"/>ZZIP_IS_STREAMED() +ZZIP_IS_STREAMED#define ZZIP_IS_STREAMED(p) (((*(unsigned char*)p)>>3)&1) + + + + +p : + + + + + + +<anchor id="ZIP-FILE-HEADER-EXTRACT:CAPS"/>ZIP_FILE_HEADER_EXTRACT +ZIP_FILE_HEADER_EXTRACT#define ZIP_FILE_HEADER_EXTRACT 4 + + + + + +<anchor id="ZIP-TRAILER-SIZE:CAPS"/>ZIP_TRAILER_SIZE +ZIP_TRAILER_SIZE#define ZIP_TRAILER_SIZE 22 + + + + + +<anchor id="ZIP-HEADER-TIME:CAPS"/>ZIP_HEADER_TIME +ZIP_HEADER_TIME#define ZIP_HEADER_TIME 10 + + + + + +<anchor id="ZIP-FILE-HEADER-SIZE:CAPS"/>ZIP_FILE_HEADER_SIZE +ZIP_FILE_HEADER_SIZE#define ZIP_FILE_HEADER_SIZE 30 + + + + + +<anchor id="ZZIP-IS-ENCRYPTED:CAPS"/>ZZIP_IS_ENCRYPTED() +ZZIP_IS_ENCRYPTED#define ZZIP_IS_ENCRYPTED(p) ((*(unsigned char*)p)&1) + + + + +p : + + + + + + +<anchor id="ZIP-HEADER-VERSION:CAPS"/>ZIP_HEADER_VERSION +ZIP_HEADER_VERSION#define ZIP_HEADER_VERSION 4 + + + + + +<anchor id="ZIP-BUF-SIZE:CAPS"/>ZIP_BUF_SIZE +ZIP_BUF_SIZE#define ZIP_BUF_SIZE 512 + + + + + +<anchor id="ZIP-DIRENT-CRC32:CAPS"/>ZIP_DIRENT_CRC32 +ZIP_DIRENT_CRC32#define ZIP_DIRENT_CRC32 16 + + + + + +<anchor id="ZIP-HEADER-COMP-SIZE:CAPS"/>ZIP_HEADER_COMP_SIZE +ZIP_HEADER_COMP_SIZE#define ZIP_HEADER_COMP_SIZE 18 + + + + + +<anchor id="ZIP-DIRENT-COMPR-METHOD:CAPS"/>ZIP_DIRENT_COMPR_METHOD +ZIP_DIRENT_COMPR_METHOD#define ZIP_DIRENT_COMPR_METHOD 10 + + + + + +<anchor id="ZIP-DIRENT-FILE-TYPE:CAPS"/>ZIP_DIRENT_FILE_TYPE +ZIP_DIRENT_FILE_TYPE#define ZIP_DIRENT_FILE_TYPE 36 + + + + + +<anchor id="ZIP-FILE-HEADER-EXTRAS-SIZE:CAPS"/>ZIP_FILE_HEADER_EXTRAS_SIZE +ZIP_FILE_HEADER_EXTRAS_SIZE#define ZIP_FILE_HEADER_EXTRAS_SIZE 28 + + + + + +<anchor id="ZIP-DIRENT-EXTRACT:CAPS"/>ZIP_DIRENT_EXTRACT +ZIP_DIRENT_EXTRACT#define ZIP_DIRENT_EXTRACT 6 + + + + + +<anchor id="ZIP-DIRENT-FILE-MODE:CAPS"/>ZIP_DIRENT_FILE_MODE +ZIP_DIRENT_FILE_MODE#define ZIP_DIRENT_FILE_MODE 38 + + + + + +<anchor id="ZIP-DIRENT-FLAGS:CAPS"/>ZIP_DIRENT_FLAGS +ZIP_DIRENT_FLAGS#define ZIP_DIRENT_FLAGS 8 + + + + + +<anchor id="ZIP-FILE-HEADER-CSIZE:CAPS"/>ZIP_FILE_HEADER_CSIZE +ZIP_FILE_HEADER_CSIZE#define ZIP_FILE_HEADER_CSIZE 18 + + + + + +<anchor id="ZIP-TRAILER-DIR-SIZE:CAPS"/>ZIP_TRAILER_DIR_SIZE +ZIP_TRAILER_DIR_SIZE#define ZIP_TRAILER_DIR_SIZE 12 + + + + + +<anchor id="ZIP-TRAILER-COMMENT-SIZE:CAPS"/>ZIP_TRAILER_COMMENT_SIZE +ZIP_TRAILER_COMMENT_SIZE#define ZIP_TRAILER_COMMENT_SIZE 20 + + + + + +<anchor id="ZIP-TRAILER-ENTRIES:CAPS"/>ZIP_TRAILER_ENTRIES +ZIP_TRAILER_ENTRIES#define ZIP_TRAILER_ENTRIES 8 + + + + + +<anchor id="ZIP-NAME-SEPARATOR:CAPS"/>ZIP_NAME_SEPARATOR +ZIP_NAME_SEPARATOR#define ZIP_NAME_SEPARATOR '/' + + + + + +<anchor id="ZIP-HEADER-SIZE:CAPS"/>ZIP_HEADER_SIZE +ZIP_HEADER_SIZE#define ZIP_HEADER_SIZE 30 + + + + + +<anchor id="ZIP-HEADER-CRC:CAPS"/>ZIP_HEADER_CRC +ZIP_HEADER_CRC#define ZIP_HEADER_CRC 14 + + + + + +<anchor id="ZIP-FILE-HEADER-FLAGS:CAPS"/>ZIP_FILE_HEADER_FLAGS +ZIP_FILE_HEADER_FLAGS#define ZIP_FILE_HEADER_FLAGS 6 + + + + + +<anchor id="ZIP-DIRENT-EXTRAS-SIZE:CAPS"/>ZIP_DIRENT_EXTRAS_SIZE +ZIP_DIRENT_EXTRAS_SIZE#define ZIP_DIRENT_EXTRAS_SIZE 30 + + + + + +<anchor id="ZIP-HEADER-COMP-METHOD:CAPS"/>ZIP_HEADER_COMP_METHOD +ZIP_HEADER_COMP_METHOD#define ZIP_HEADER_COMP_METHOD 8 + + + + + +<anchor id="ZZIP-IS-COMPRLEVEL:CAPS"/>ZZIP_IS_COMPRLEVEL() +ZZIP_IS_COMPRLEVEL#define ZZIP_IS_COMPRLEVEL(p) (((*(unsigned char*)p)>>1)&3) + + + + +p : + + + + + + +<anchor id="ZIP-DIRENT-DOSTIME:CAPS"/>ZIP_DIRENT_DOSTIME +ZIP_DIRENT_DOSTIME#define ZIP_DIRENT_DOSTIME 12 + + + + + +<anchor id="ZIP-DIRENT-ENCODER:CAPS"/>ZIP_DIRENT_ENCODER +ZIP_DIRENT_ENCODER#define ZIP_DIRENT_ENCODER 4 + + + + + +<anchor id="ZIP-HEADER-OS:CAPS"/>ZIP_HEADER_OS +ZIP_HEADER_OS#define ZIP_HEADER_OS 5 + + + + + +<anchor id="ZIP-DIRENT-COMMENT-SIZE:CAPS"/>ZIP_DIRENT_COMMENT_SIZE +ZIP_DIRENT_COMMENT_SIZE#define ZIP_DIRENT_COMMENT_SIZE 32 + + + + + +<anchor id="ZIP-FILE-HEADER-CRC32:CAPS"/>ZIP_FILE_HEADER_CRC32 +ZIP_FILE_HEADER_CRC32#define ZIP_FILE_HEADER_CRC32 14 + + + + + +<anchor id="ZIP-HEADER-FLAGS:CAPS"/>ZIP_HEADER_FLAGS +ZIP_HEADER_FLAGS#define ZIP_HEADER_FLAGS 6 + + + + + +<anchor id="ZIP-TRAILER-DISK:CAPS"/>ZIP_TRAILER_DISK +ZIP_TRAILER_DISK#define ZIP_TRAILER_DISK 4 + + + + + +<anchor id="ZIP-FILE-HEADER-USIZE:CAPS"/>ZIP_FILE_HEADER_USIZE +ZIP_FILE_HEADER_USIZE#define ZIP_FILE_HEADER_USIZE 22 + + + + + +<anchor id="ZIP-TRAILER-TOTAL-ENTRIES:CAPS"/>ZIP_TRAILER_TOTAL_ENTRIES +ZIP_TRAILER_TOTAL_ENTRIES#define ZIP_TRAILER_TOTAL_ENTRIES 10 + + + + + +<anchor id="ZIP-HEADER-NAME-LEN:CAPS"/>ZIP_HEADER_NAME_LEN +ZIP_HEADER_NAME_LEN#define ZIP_HEADER_NAME_LEN 26 + + + + + +<anchor id="ZIP-HEADER-UNCOMP-SIZE:CAPS"/>ZIP_HEADER_UNCOMP_SIZE +ZIP_HEADER_UNCOMP_SIZE#define ZIP_HEADER_UNCOMP_SIZE 22 + + + + + +<anchor id="ZIP-TRAILER-DIR-DISK:CAPS"/>ZIP_TRAILER_DIR_DISK +ZIP_TRAILER_DIR_DISK#define ZIP_TRAILER_DIR_DISK 6 + + + + + +<anchor id="ZIP-DIRENT-CSIZE:CAPS"/>ZIP_DIRENT_CSIZE +ZIP_DIRENT_CSIZE#define ZIP_DIRENT_CSIZE 20 + + + + + +<anchor id="ZIP-TRAILER-DIR-POS:CAPS"/>ZIP_TRAILER_DIR_POS +ZIP_TRAILER_DIR_POS#define ZIP_TRAILER_DIR_POS 16 + + + + + +<anchor id="ZIP-BLOCK-SIZE:CAPS"/>ZIP_BLOCK_SIZE +ZIP_BLOCK_SIZE#define ZIP_BLOCK_SIZE 32768 + + + + + +<anchor id="ZIP-DIRENT-NAME-SIZE:CAPS"/>ZIP_DIRENT_NAME_SIZE +ZIP_DIRENT_NAME_SIZE#define ZIP_DIRENT_NAME_SIZE 28 + + + + + +<anchor id="ZIP-DIRENT-SIZE:CAPS"/>ZIP_DIRENT_SIZE +ZIP_DIRENT_SIZE#define ZIP_DIRENT_SIZE 46 + + + + + +<anchor id="ZIP-DIRENT-DISKSTART:CAPS"/>ZIP_DIRENT_DISKSTART +ZIP_DIRENT_DISKSTART#define ZIP_DIRENT_DISKSTART 34 + + + + + +<anchor id="ZIP-HEADER-EXTRA-LEN:CAPS"/>ZIP_HEADER_EXTRA_LEN +ZIP_HEADER_EXTRA_LEN#define ZIP_HEADER_EXTRA_LEN 28 + + + + + +<anchor id="ZIP-FILE-HEADER-COMPR-METHOD:CAPS"/>ZIP_FILE_HEADER_COMPR_METHOD +ZIP_FILE_HEADER_COMPR_METHOD#define ZIP_FILE_HEADER_COMPR_METHOD 8 + + + + + +<anchor id="ZIP-FILE-HEADER-DOSTIME:CAPS"/>ZIP_FILE_HEADER_DOSTIME +ZIP_FILE_HEADER_DOSTIME#define ZIP_FILE_HEADER_DOSTIME 10 + + + + + + + +Properties +<anchor id="GsfInfileZip--compression-level"/>The "<literal>compression-level</literal>" property + "compression-level" gint : Read +The level of compression used, zero meaning none.Allowed values: [0,10] +Default value: 0 + +<anchor id="GsfInfileZip--internal-parent"/>The "<literal>internal-parent</literal>" property + "internal-parent" GsfInfileZip : Write / Construct Only +Internal use only. +<anchor id="GsfInfileZip--source"/>The "<literal>source</literal>" property + "source" GsfInput : Read / Write / Construct Only +The archive being interpreted. +<anchor id="GsfOutfileZip--compression-level"/>The "<literal>compression-level</literal>" property + "compression-level" gint : Read / Write / Construct Only +The level of compression used, zero meaning none.Allowed values: [0,10] +Default value: 8 + +<anchor id="GsfOutfileZip--entry-name"/>The "<literal>entry-name</literal>" property + "entry-name" gchararray : Read / Write / Construct Only +The filename of this member in the archive without path.Default value: NULL + +<anchor id="GsfOutfileZip--sink"/>The "<literal>sink</literal>" property + "sink" GsfOutput : Read / Write / Construct Only +Where the archive is written. + + + + + + + diff --git a/lib/libgsf-1.12.3/gsf-gnome/Makefile.am b/lib/libgsf-1.12.3/gsf-gnome/Makefile.am new file mode 100644 index 0000000000..df8fe6a642 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/Makefile.am @@ -0,0 +1,27 @@ +AM_CPPFLAGS = -I$(top_srcdir)/lib/libgsf-1.12.3 $(LIBGSF_GNOME_CFLAGS) + +if WITH_LIBGSF_GNOME +lib_LTLIBRARIES = libgsf-gnome-1.la + +libgsf_gnome_1_la_LIBADD = $(top_builddir)/lib/libgsf-1.12.3/gsf/libgsf-1.la $(LIBGSF_GNOME_LIBS) +libgsf_gnome_1_la_LDFLAGS = -version-info $(VERSION_INFO) +if PLATFORM_WIN32 + libgsf_gnome_1_la_LDFLAGS += -no-undefined +endif +libgsf_gnome_1_la_SOURCES = \ + gsf-input-gnomevfs.c \ + gsf-output-gnomevfs.c \ + gsf-input-bonobo.c \ + gsf-output-bonobo.c \ + gsf-shared-bonobo-stream.c + +endif + +## But headers are installed always: +libgsf_gnome_1_includedir = $(includedir)/libgsf-1/gsf-gnome +libgsf_gnome_1_include_HEADERS = \ + gsf-input-gnomevfs.h \ + gsf-output-gnomevfs.h \ + gsf-input-bonobo.h \ + gsf-output-bonobo.h \ + gsf-shared-bonobo-stream.h diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.c b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.c new file mode 100644 index 0000000000..ba74a860af --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.c @@ -0,0 +1,288 @@ + /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-bonobo.c: bonobo based input + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* FIXME: Should make CORBA environment available to caller somehow. */ +struct _GsfInputBonobo { + GsfInput input; + GsfSharedBonoboStream *shared; + guint8 *buf; + size_t buf_size; + gsf_off_t pos; +}; + +typedef struct { + GsfInputClass input_class; +} GsfInputBonoboClass; + +static int +gib_synch_shared_ptr (GsfInputBonobo *binput) +{ + CORBA_Environment ev; + CORBA_long new_pos; + + if (binput->shared == NULL) + return 0; + if (binput->pos == (gsf_off_t) binput->shared->pos) + return 0; + + CORBA_exception_init (&ev); + new_pos = (CORBA_long) binput->pos; + Bonobo_Stream_seek (binput->shared->stream, new_pos, + Bonobo_Stream_SeekSet, &ev); + if (BONOBO_EX (&ev)) { + g_warning (bonobo_exception_get_text (&ev)); + CORBA_exception_free (&ev); + return -1; + } else { + binput->shared->pos = new_pos; + return 0; + } +} + +/** + * gsf_input_bonobo_new : + * @stream : Bonobo stream + * @err : optionally NULL. + * + * Returns a new input object or NULL. + **/ +GsfInput * +gsf_input_bonobo_new (Bonobo_Stream const stream, GError **err) +{ + GsfInputBonobo *input; + Bonobo_StorageInfo *info; + CORBA_Environment ev; + CORBA_long size; + + if (stream == NULL) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "stream is NULL"); + return NULL; + } + + CORBA_exception_init (&ev); + /* info->size doesn't work */ + size = Bonobo_Stream_seek (stream, 0, Bonobo_Stream_SeekEnd, &ev); + if (BONOBO_EX (&ev)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "%s: %s", + "Error seeking to get stream size", + bonobo_exception_get_text (&ev)); + CORBA_exception_free (&ev); + return NULL; + } + Bonobo_Stream_seek (stream, 0, Bonobo_Stream_SeekSet, &ev); + if (BONOBO_EX (&ev)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "%s: %s", + "Error seeking to get stream size", + bonobo_exception_get_text (&ev)); + CORBA_exception_free (&ev); + return NULL; + } + /* */ + + info = Bonobo_Stream_getInfo (stream, 0, &ev); + if (BONOBO_EX (&ev)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "%s: %s", + "Error getting stream info", + bonobo_exception_get_text (&ev)); + CORBA_exception_free (&ev); + return NULL; + } + + input = g_object_new (GSF_INPUT_BONOBO_TYPE, NULL); + input->shared = gsf_shared_bonobo_stream_new (stream); + input->buf = NULL; + input->buf_size = 0; + gsf_input_set_size (GSF_INPUT (input), (gsf_off_t) size); + gsf_input_set_name (GSF_INPUT (input), info->name); + + CORBA_free (info); + + return GSF_INPUT (input); +} + +static void +gsf_input_bonobo_finalize (GObject *obj) +{ + GObjectClass *parent_class; + GsfInputBonobo *input = (GsfInputBonobo *)obj; + + if (input->shared) + g_object_unref (G_OBJECT (input->shared)); + input->shared = NULL; + + g_free (input->buf); + input->buf = NULL; + input->buf_size = 0; + + parent_class = g_type_class_peek (GSF_INPUT_TYPE); + if (parent_class && parent_class->finalize) + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_bonobo_dup (GsfInput *src_input, GError **err) +{ + GsfInputBonobo const *src = (GsfInputBonobo *)src_input; + GsfInputBonobo *dst = g_object_new (GSF_INPUT_BONOBO_TYPE, NULL); + + (void) err; + + dst->shared = src->shared; + g_object_ref (G_OBJECT (dst->shared)); + + return GSF_INPUT (dst); +} + +static guint8 const * +gsf_input_bonobo_read (GsfInput *input, size_t num_bytes, + guint8 *buffer) +{ + GsfInputBonobo *binput = GSF_INPUT_BONOBO (input); + CORBA_unsigned_long num_read; + Bonobo_Stream_iobuf *bsibuf; + CORBA_Environment ev; + + g_return_val_if_fail (binput != NULL, NULL); + g_return_val_if_fail (binput->shared != NULL, NULL); + g_return_val_if_fail (binput->shared->stream != NULL, NULL); + + if (buffer == NULL) { + if (binput->buf_size < num_bytes) { + binput->buf_size = num_bytes; + g_free (binput->buf); + binput->buf = g_new (guint8, binput->buf_size); + } + buffer = binput->buf; + } + + if (gib_synch_shared_ptr (binput) != 0) + return NULL; + + CORBA_exception_init (&ev); + Bonobo_Stream_read (binput->shared->stream, (CORBA_long) num_bytes, + &bsibuf, &ev); + if (BONOBO_EX (&ev)) { + g_warning (bonobo_exception_get_text (&ev)); + return NULL; + } else { + memcpy (buffer, bsibuf->_buffer, bsibuf->_length); + num_read = bsibuf->_length; + CORBA_free (bsibuf); + } + if ((size_t) num_read == num_bytes) { + return buffer; + } else { + g_warning ("Only read %d bytes, asked for %zd", + num_read, num_bytes); + return NULL; + } +} + +static gboolean +gsf_input_bonobo_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInputBonobo *binput = GSF_INPUT_BONOBO (input); + Bonobo_Stream_SeekType bwhence; + CORBA_long pos, coffset; + CORBA_Environment ev; + + g_return_val_if_fail (binput != NULL, TRUE); + g_return_val_if_fail (binput->shared != NULL, TRUE); + g_return_val_if_fail (binput->shared->stream != NULL, TRUE); + + if (whence == G_SEEK_CUR) { + if (gib_synch_shared_ptr (binput) != 0) + return TRUE; + } + + switch (whence) { + case G_SEEK_SET : + bwhence = Bonobo_Stream_SeekSet; + break; + case G_SEEK_CUR : + bwhence = Bonobo_Stream_SeekCur; + break; + case G_SEEK_END : + bwhence = Bonobo_Stream_SeekEnd; + break; + default: + return TRUE; + } + + + coffset = offset; + if ((gsf_off_t) coffset != offset) { /* Check for overflow */ + g_warning ("offset too large for Bonobo_Stream_seek"); + return TRUE; + } + CORBA_exception_init (&ev); + pos = Bonobo_Stream_seek + (binput->shared->stream, coffset, bwhence, &ev); + if (BONOBO_EX (&ev)) { + g_warning (bonobo_exception_get_text (&ev)); + return TRUE; + } else { + binput->shared->pos = pos; + binput->pos = (gsf_off_t) pos; + return FALSE; + } +} + +static void +gsf_input_bonobo_init (GObject *obj) +{ + GsfInputBonobo *binput = GSF_INPUT_BONOBO (obj); + + binput->shared = NULL; + binput->buf = NULL; + binput->buf_size = 0; +} + +static void +gsf_input_bonobo_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_bonobo_finalize; + input_class->Dup = gsf_input_bonobo_dup; + input_class->Read = gsf_input_bonobo_read; + input_class->Seek = gsf_input_bonobo_seek; +} + +GSF_CLASS (GsfInputBonobo, gsf_input_bonobo, + gsf_input_bonobo_class_init, gsf_input_bonobo_init, GSF_INPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.h b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.h new file mode 100644 index 0000000000..20aa98d929 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-bonobo.h @@ -0,0 +1,41 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-bonobo.h: bonobo based input + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_BONOBO_H +#define GSF_INPUT_BONOBO_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_INPUT_BONOBO_TYPE (gsf_input_bonobo_get_type ()) +#define GSF_INPUT_BONOBO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_BONOBO_TYPE, GsfInputBonobo)) +#define GSF_IS_INPUT_BONOBO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_BONOBO_TYPE)) + +typedef struct _GsfInputBonobo GsfInputBonobo; + +GType gsf_input_bonobo_get_type (void); +GsfInput *gsf_input_bonobo_new (Bonobo_Stream const stream, GError **err); + +G_END_DECLS + +#endif /* GSF_INPUT_BONOBO_H */ diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-input-gnomevfs.c b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-gnomevfs.c new file mode 100644 index 0000000000..08cb423e2e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-gnomevfs.c @@ -0,0 +1,304 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-gnomevfs.c: + * + * Copyright (C) 2002-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include + +#include +#include +#include +#include +#include + +struct _GsfInputGnomeVFS { + GsfInput input; + + GnomeVFSHandle *handle; + GnomeVFSURI *uri; + + guint8 *buf; + size_t buf_size; +}; + +typedef GsfInputClass GsfInputGnomeVFSClass; + +/** + * gsf_input_gnomevfs_new_uri: + * @uri : uri you wish to open. + * @err : optionally NULL. + * + * Returns a new input or NULL. + **/ +GsfInput * +gsf_input_gnomevfs_new_uri (GnomeVFSURI *uri, GError **error) +{ + GnomeVFSHandle *handle; + GnomeVFSFileInfo *info; + GnomeVFSResult res; + GnomeVFSFileType type; + gsf_off_t size; + gboolean is_local; + + if (uri == NULL) { + g_set_error (error, gsf_input_error_id (), 0, + "Filename/URI cannot be NULL"); + return NULL; + } + + if (!VFS_METHOD_HAS_FUNC (uri->method, seek)) + goto make_local_copy; + + info = gnome_vfs_file_info_new (); + res = gnome_vfs_get_file_info_uri (uri, info, GNOME_VFS_FILE_INFO_DEFAULT | GNOME_VFS_FILE_INFO_FOLLOW_LINKS); + + size = (gsf_off_t)info->size; + type = info->type; + is_local = GNOME_VFS_FILE_INFO_LOCAL (info); + gnome_vfs_file_info_unref (info); + + switch (res) { + case GNOME_VFS_ERROR_NOT_SUPPORTED: + goto make_local_copy; + default: + g_set_error (error, gsf_input_error_id (), (gint) res, + gnome_vfs_result_to_string (res)); + return NULL; + case GNOME_VFS_OK: /* Nothing */ ; + } + + if (type != GNOME_VFS_FILE_TYPE_REGULAR) { +#if 0 + g_print ("uri=%s\n", gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE)); + g_print ("uri.text=%s\n", uri->text); + g_print ("parent=%s\n", uri->parent ? gnome_vfs_uri_to_string (uri->parent, GNOME_VFS_URI_HIDE_NONE) : "(null)"); + g_print ("method=%s\n", uri->method_string); + g_print ("fragment=%s\n", uri->fragment_id ? uri->fragment_id : "(null)"); +#endif + if (type == GNOME_VFS_FILE_TYPE_DIRECTORY && uri->parent) { + /* Reported for "file:///.../foo.zip#zip:beta.gnumeric" */ + goto make_local_copy; + } + + g_set_error (error, gsf_input_error_id (), 0, + "Not a regular file"); + return NULL; + } + + /* Make copies of small files. */ + if (!is_local && size < (256 << 10)) + goto make_local_copy; + + res = gnome_vfs_open_uri (&handle, uri, + GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_RANDOM); + if (res != GNOME_VFS_OK) { + g_set_error (error, gsf_input_error_id (), (gint) res, + gnome_vfs_result_to_string (res)); + return NULL; + } + + { + char *name; + GsfInputGnomeVFS *input = g_object_new (GSF_INPUT_GNOMEVFS_TYPE, NULL); + + input->handle = handle; + input->uri = gnome_vfs_uri_ref (uri); + input->buf = NULL; + input->buf_size = 0; + gsf_input_set_size (GSF_INPUT (input), size); + name = gnome_vfs_uri_to_string (uri, 0); + gsf_input_set_name (GSF_INPUT (input), name); + g_free (name); + return GSF_INPUT (input); + } + + make_local_copy: + { + char *buffer; + int file_size; + char *uri_text, *name; + GsfInput *mem; + + uri_text = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); + res = gnome_vfs_read_entire_file (uri_text, &file_size, &buffer); + g_free (uri_text); + if (res != GNOME_VFS_OK) { + g_set_error (error, gsf_input_error_id (), (gint)res, + "Read error while creating local copy."); + return NULL; + } + + mem = gsf_input_memory_new (buffer, file_size, TRUE); + if (!mem) { + g_set_error (error, gsf_input_error_id (), 0, + "Failed to create local memory stream"); + g_free (buffer); + return NULL; + } + + name = gnome_vfs_uri_to_string (uri, 0); + gsf_input_set_name (mem, name); + g_free (name); + + return mem; + } +} + +/** + * gsf_input_gnomevfs_new : + * @uri : uri you wish to open. + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfInput * +gsf_input_gnomevfs_new (char const *text_uri, GError **error) +{ + GnomeVFSURI *uri = gnome_vfs_uri_new (text_uri); + if (!uri) { + g_set_error (error, gsf_input_error_id (), 0, + "Invalid URI"); + return NULL; + } else { + GsfInput *res = gsf_input_gnomevfs_new_uri (uri, error); + gnome_vfs_uri_unref (uri); + return res; + } +} + +static void +gsf_input_gnomevfs_finalize (GObject *obj) +{ + GObjectClass *parent_class; + GsfInputGnomeVFS *input = (GsfInputGnomeVFS *)obj; + + if (input->handle != NULL) { + gnome_vfs_close (input->handle); + input->handle = NULL; + } + if (input->uri != NULL) { + gnome_vfs_uri_unref (input->uri); + input->uri = NULL; + } + + g_free (input->buf); + input->buf = NULL; + input->buf_size = 0; + + parent_class = g_type_class_peek (GSF_INPUT_TYPE); + if (parent_class && parent_class->finalize) + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_gnomevfs_dup (GsfInput *src_input, GError **err) +{ + GsfInputGnomeVFS const *src = (GsfInputGnomeVFS *)src_input; + return gsf_input_gnomevfs_new (src->input.name, err); +} + +static guint8 const * +gsf_input_gnomevfs_read (GsfInput *input, size_t num_bytes, + guint8 *buffer) +{ + GsfInputGnomeVFS *vfs = GSF_INPUT_GNOMEVFS (input); + GnomeVFSResult res = GNOME_VFS_OK; + GnomeVFSFileSize nread = 0, total_read = 0; + + g_return_val_if_fail (vfs != NULL, NULL); + g_return_val_if_fail (vfs->handle != NULL, NULL); + + if (buffer == NULL) { + if (vfs->buf_size < num_bytes) { + vfs->buf_size = num_bytes; + g_free (vfs->buf); + vfs->buf = g_new (guint8, vfs->buf_size); + } + buffer = vfs->buf; + } + + while ((res == GNOME_VFS_OK) && (total_read < num_bytes)) { + res = gnome_vfs_read (vfs->handle, + (gpointer)(buffer + total_read), + (GnomeVFSFileSize) (num_bytes - total_read), &nread); + total_read += nread; + } + + if (res != GNOME_VFS_OK || total_read != num_bytes) + return NULL; + + return buffer; +} + +static gboolean +gsf_input_gnomevfs_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInputGnomeVFS const *vfs = GSF_INPUT_GNOMEVFS (input); + GnomeVFSSeekPosition vfs_whence; + + if (vfs->handle == NULL) + return TRUE; + + switch (whence) { + default: + case G_SEEK_SET : vfs_whence = GNOME_VFS_SEEK_START; break; + case G_SEEK_CUR : vfs_whence = GNOME_VFS_SEEK_CURRENT; break; + case G_SEEK_END : vfs_whence = GNOME_VFS_SEEK_END; break; + } + + /* Work around http://bugzilla.gnome.org/show_bug.cgi?id=152844 */ + if (whence == G_SEEK_SET && offset > 0 && offset == gsf_input_size (input)) { + if (gsf_input_gnomevfs_seek (input, offset - 1, whence)) + return TRUE; + if (gsf_input_gnomevfs_read (input, 1, NULL) == NULL) + return TRUE; + return FALSE; + } + + if (GNOME_VFS_OK == gnome_vfs_seek (vfs->handle,vfs_whence, + (GnomeVFSFileOffset) offset)) + return FALSE; + return TRUE; +} + +static void +gsf_input_gnomevfs_init (GObject *obj) +{ + GsfInputGnomeVFS *vfs = GSF_INPUT_GNOMEVFS (obj); + + vfs->handle = NULL; + vfs->buf = NULL; + vfs->buf_size = 0; +} + +static void +gsf_input_gnomevfs_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_gnomevfs_finalize; + input_class->Dup = gsf_input_gnomevfs_dup; + input_class->Read = gsf_input_gnomevfs_read; + input_class->Seek = gsf_input_gnomevfs_seek; +} + +GSF_CLASS (GsfInputGnomeVFS, gsf_input_gnomevfs, + gsf_input_gnomevfs_class_init, gsf_input_gnomevfs_init, + GSF_INPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-input-gnomevfs.h b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-gnomevfs.h new file mode 100644 index 0000000000..fc2b188c45 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-input-gnomevfs.h @@ -0,0 +1,44 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-gnomevfs.h + * + * Copyright (C) 2002-2003 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_GNOMEVFS_H +#define GSF_INPUT_GNOMEVFS_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_INPUT_GNOMEVFS_TYPE (gsf_input_gnomevfs_get_type ()) +#define GSF_INPUT_GNOMEVFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_GNOMEVFS_TYPE, GsfInputGnomeVFS)) +#define GSF_IS_INPUT_GNOMEVFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_GNOMEVFS_TYPE)) + +typedef struct _GsfInputGnomeVFS GsfInputGnomeVFS; + +GType gsf_input_gnomevfs_get_type (void); +GsfInput *gsf_input_gnomevfs_new (char const *uri, GError **error); +GsfInput *gsf_input_gnomevfs_new_uri (GnomeVFSURI *uri, GError **error); + +gboolean gsf_input_gnomevfs_needs_local_copy (GsfInputGnomeVFS *vfs_input); + +G_END_DECLS + +#endif /* GSF_INPUT_GNOMEVFS_H */ diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-output-bonobo.c b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-bonobo.c new file mode 100644 index 0000000000..35ce55a382 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-bonobo.c @@ -0,0 +1,162 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-bonobo.c: bonobo based output + * + * Copyright (C) 2002-2003 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include + +struct _GsfOutputBonobo { + GsfOutput output; + Bonobo_Stream stream ; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputBonoboClass; + +/** + * gsf_output_bonobo_new : + * @stream : non-NULL bonobo stream + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_bonobo_new (Bonobo_Stream const stream, G_GNUC_UNUSED GError **err) +{ + GsfOutputBonobo *res; + + res = g_object_new (GSF_OUTPUT_BONOBO_TYPE, NULL); + res->stream = stream; + + return GSF_OUTPUT (res); +} + +static gboolean +gsf_output_bonobo_close (GsfOutput *output) +{ + GsfOutputBonobo *bonobo = GSF_OUTPUT_BONOBO (output); + gboolean res = FALSE; + + if (bonobo->stream != NULL) { + bonobo->stream = NULL; + res = TRUE; + } + + return res; +} + +static gboolean +gsf_output_bonobo_seek (GsfOutput *output, gsf_off_t offset, + GSeekType whence) +{ + GsfOutputBonobo const *bonobo = GSF_OUTPUT_BONOBO (output); + Bonobo_Stream_SeekType bwhence = 0; /* make compiler shut up */ + CORBA_long pos; + CORBA_Environment ev; + + g_return_val_if_fail (bonobo->stream != CORBA_OBJECT_NIL, + gsf_output_set_error (output, 0, "missing stream")); + + switch (whence) { + case G_SEEK_SET : bwhence = Bonobo_Stream_SeekSet; break; + case G_SEEK_CUR : bwhence = Bonobo_Stream_SeekCur; break; + case G_SEEK_END : bwhence = Bonobo_Stream_SeekEnd; break; + default: + break; /*checked in GsfOutput wrapper */ + } + + CORBA_exception_init (&ev); + pos = Bonobo_Stream_seek + (bonobo->stream, offset, bwhence, &ev); + if (BONOBO_EX (&ev)) { + gsf_output_set_error (output, 0, + bonobo_exception_get_text (&ev)); + CORBA_exception_free (&ev); + return FALSE; + } + return TRUE; +} + +static gboolean +gsf_output_bonobo_write (GsfOutput *output, + size_t num_bytes, + guint8 const *buffer) +{ + GsfOutputBonobo *bonobo = GSF_OUTPUT_BONOBO (output); + Bonobo_Stream_iobuf *bsobuf; + CORBA_Environment ev; + + g_return_val_if_fail (bonobo != NULL, FALSE); + g_return_val_if_fail (bonobo->stream != NULL, FALSE); + + bsobuf = Bonobo_Stream_iobuf__alloc (); + bsobuf->_buffer = (CORBA_octet*)buffer; + bsobuf->_length = num_bytes; + + CORBA_exception_init (&ev); + Bonobo_Stream_write (bonobo->stream, bsobuf, &ev); + if (BONOBO_EX (&ev)) { + g_warning (bonobo_exception_get_text (&ev)); + CORBA_exception_free (&ev); + return FALSE; + } + + return TRUE; +} + +static void +gsf_output_bonobo_finalize (GObject *obj) +{ + GObjectClass *parent_class; + GsfOutput *output = (GsfOutput *)obj; + + gsf_output_bonobo_close (output); + + parent_class = g_type_class_peek (GSF_OUTPUT_TYPE); + if (parent_class && parent_class->finalize) + parent_class->finalize (obj); +} + +static void +gsf_output_bonobo_init (GObject *obj) +{ + GsfOutputBonobo *stream = GSF_OUTPUT_BONOBO (obj); + + stream->stream = NULL; +} + +static void +gsf_output_bonobo_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_bonobo_finalize; + output_class->Close = gsf_output_bonobo_close; + output_class->Seek = gsf_output_bonobo_seek; + output_class->Write = gsf_output_bonobo_write; +} + +GSF_CLASS (GsfOutputBonobo, gsf_output_bonobo, + gsf_output_bonobo_class_init, gsf_output_bonobo_init, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-output-bonobo.h b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-bonobo.h new file mode 100644 index 0000000000..fe825bcf77 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-bonobo.h @@ -0,0 +1,41 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-bonobo.h: bonobo based output + * + * Copyright (C) 2002-2003 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_BONOBO_H +#define GSF_OUTPUT_BONOBO_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_OUTPUT_BONOBO_TYPE (gsf_output_bonobo_get_type ()) +#define GSF_OUTPUT_BONOBO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_BONOBO_TYPE, GsfOutputBonobo)) +#define GSF_IS_OUTPUT_BONOBO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_BONOBO_TYPE)) + +typedef struct _GsfOutputBonobo GsfOutputBonobo; + +GType gsf_output_bonobo_get_type (void); +GsfOutput *gsf_output_bonobo_new (Bonobo_Stream const stream, GError **err); + +G_END_DECLS + +#endif /* GSF_OUTPUT_BONOBO_H */ diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-output-gnomevfs.c b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-gnomevfs.c new file mode 100644 index 0000000000..ee025f0935 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-gnomevfs.c @@ -0,0 +1,219 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-gnomevfs.c: gnomevfs based output + * + * Copyright (C) 2002-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +struct _GsfOutputGnomeVFS { + GsfOutput output; + + GnomeVFSHandle *handle; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputGnomeVFSClass; + +/** +* gsf_output_gnomevfs_new : + * @text_uri : in utf8. + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_gnomevfs_new (char const *text_uri, GError **err) +{ + GnomeVFSURI *uri = gnome_vfs_uri_new (text_uri); + GsfOutput *res = gsf_output_gnomevfs_new_uri (uri, err); + gnome_vfs_uri_unref (uri); + return res; +} + +/** + * gsf_output_gnomevfs_new_uri : + * @uri : resource indicator + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_gnomevfs_new_uri (GnomeVFSURI * uri, GError **err) +{ + GsfOutputGnomeVFS *output; + GnomeVFSHandle *handle; + GnomeVFSResult res; + int perms = -1; + + if (uri == NULL) { + g_set_error (err, gsf_output_error_id (), 0, + "Filename/URI cannot be NULL"); + return NULL; + } + + if (gnome_vfs_uri_exists (uri)) { + /* see bug 159442 - if the file exists, we want to do our best to preserve existing + * pemissions AND truncate the file. that is, we want to emulate truncate() in case + * a gnomevfs backend doesn't support it */ + GnomeVFSFileInfo *info; + + info = gnome_vfs_file_info_new (); + res = gnome_vfs_get_file_info_uri (uri, + info, + GNOME_VFS_FILE_INFO_FOLLOW_LINKS|GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS); + + if ((res == GNOME_VFS_OK) && (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS)) { + perms = info->permissions; + } + + gnome_vfs_file_info_unref (info); + } + + if (perms == -1) { + /* we didn't get the permissions, but calling open_uri() with OPEN_WRITE set will create the file for us. + * if the uri_exists(), let's hope that truncate() works. */ + res = gnome_vfs_open_uri (&handle, uri, GNOME_VFS_OPEN_WRITE|GNOME_VFS_OPEN_RANDOM); + } else { + /* we got the permissions, so let's call create() with the existing permissions instead of open() since + * create() will truncate the file for us. */ + res = gnome_vfs_create_uri (&handle, uri, GNOME_VFS_OPEN_WRITE|GNOME_VFS_OPEN_RANDOM, FALSE, perms); + + if (res != GNOME_VFS_OK) { + /* create() failed. let's see if we can open_uri() instead and hope that truncate works. */ + res = gnome_vfs_open_uri (&handle, uri, GNOME_VFS_OPEN_WRITE|GNOME_VFS_OPEN_RANDOM); + } + } + + if (res != GNOME_VFS_OK) { + g_set_error (err, gsf_output_error_id (), (gint) res, + gnome_vfs_result_to_string (res)); + return NULL; + } + + /* truncate the file to length 0 so if we overwrite a file smaller than + * it was before, it doesn't show the rest of the old file (Bug: 159442). + * for many gnomevfs backends, this might actually be a noop */ + gnome_vfs_truncate_handle(handle, 0); + + output = g_object_new (GSF_OUTPUT_GNOMEVFS_TYPE, NULL); + output->handle = handle; + + return GSF_OUTPUT (output); +} + +static gboolean +gsf_output_gnomevfs_close (GsfOutput *output) +{ + GsfOutputGnomeVFS *vfs = GSF_OUTPUT_GNOMEVFS (output); + gboolean res = FALSE; + + if (vfs->handle != NULL) { + res = (GNOME_VFS_OK == gnome_vfs_close (vfs->handle)); + vfs->handle = NULL; + } + + return res; +} + +static void +gsf_output_gnomevfs_finalize (GObject *obj) +{ + GObjectClass *parent_class; + GsfOutput *output = (GsfOutput *)obj; + + gsf_output_gnomevfs_close (output); + + parent_class = g_type_class_peek (GSF_OUTPUT_TYPE); + if (parent_class && parent_class->finalize) + parent_class->finalize (obj); +} + +static gboolean +gsf_output_gnomevfs_seek (GsfOutput *output, gsf_off_t offset, + GSeekType whence) +{ + GsfOutputGnomeVFS const *vfs = GSF_OUTPUT_GNOMEVFS (output); + GnomeVFSSeekPosition vfs_whence = 0; /* make compiler shut up */ + GnomeVFSResult res; + + g_return_val_if_fail (vfs->handle != NULL, + gsf_output_set_error (output, 0, "missing handle")); + + switch (whence) { + case G_SEEK_SET : vfs_whence = GNOME_VFS_SEEK_START; break; + case G_SEEK_CUR : vfs_whence = GNOME_VFS_SEEK_CURRENT; break; + case G_SEEK_END : vfs_whence = GNOME_VFS_SEEK_END; break; + default : + break; /*checked in GsfOutput wrapper */ + } + + res = gnome_vfs_seek (vfs->handle, vfs_whence, + (GnomeVFSFileOffset) offset); + if (GNOME_VFS_OK == res) + return TRUE; + return gsf_output_set_error (output, 0, + gnome_vfs_result_to_string (res)); +} + +static gboolean +gsf_output_gnomevfs_write (GsfOutput *output, + size_t num_bytes, + guint8 const *buffer) +{ + GsfOutputGnomeVFS *vfs = GSF_OUTPUT_GNOMEVFS (output); + GnomeVFSFileSize nwritten = 0, total_written = 0; + GnomeVFSResult res = GNOME_VFS_OK; + + g_return_val_if_fail (vfs != NULL, FALSE); + g_return_val_if_fail (vfs->handle != NULL, FALSE); + + while ((res == GNOME_VFS_OK) && (total_written < num_bytes)) + { + res = gnome_vfs_write (vfs->handle, (gconstpointer)(buffer + total_written), + (GnomeVFSFileSize)(num_bytes - total_written), &nwritten); + total_written += nwritten; + } + return (res == GNOME_VFS_OK && total_written == num_bytes); +} + +static void +gsf_output_gnomevfs_init (GObject *obj) +{ + GsfOutputGnomeVFS *vfs = GSF_OUTPUT_GNOMEVFS (obj); + + vfs->handle = NULL; +} + +static void +gsf_output_gnomevfs_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_gnomevfs_finalize; + output_class->Close = gsf_output_gnomevfs_close; + output_class->Seek = gsf_output_gnomevfs_seek; + output_class->Write = gsf_output_gnomevfs_write; +} + +GSF_CLASS (GsfOutputGnomeVFS, gsf_output_gnomevfs, + gsf_output_gnomevfs_class_init, gsf_output_gnomevfs_init, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-output-gnomevfs.h b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-gnomevfs.h new file mode 100644 index 0000000000..96731db3a8 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-output-gnomevfs.h @@ -0,0 +1,42 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-gnomevfs.h: gnomevfs based output + * + * Copyright (C) 2002-2003 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_GNOMEVFS_H +#define GSF_OUTPUT_GNOMEVFS_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_OUTPUT_GNOMEVFS_TYPE (gsf_output_gnomevfs_get_type ()) +#define GSF_OUTPUT_GNOMEVFS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_GNOMEVFS_TYPE, GsfOutputGnomeVFS)) +#define GSF_IS_OUTPUT_GNOMEVFS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_GNOMEVFS_TYPE)) + +typedef struct _GsfOutputGnomeVFS GsfOutputGnomeVFS; + +GType gsf_output_gnomevfs_get_type (void); +GsfOutput *gsf_output_gnomevfs_new (char const *filename, GError **err); +GsfOutput *gsf_output_gnomevfs_new_uri (GnomeVFSURI * uri, GError **err); + +G_END_DECLS + +#endif /* GSF_OUTPUT_GNOMEVFS_H */ diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-shared-bonobo-stream.c b/lib/libgsf-1.12.3/gsf-gnome/gsf-shared-bonobo-stream.c new file mode 100644 index 0000000000..291a5bc876 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-shared-bonobo-stream.c @@ -0,0 +1,71 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-shared-bonobo-stream.h: helper class for gsf-input-bonobo + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +typedef struct { + GObjectClass g_object_class; +} GsfSharedBonoboStreamClass; + +static GObjectClass *parent_class; + +GsfSharedBonoboStream * +gsf_shared_bonobo_stream_new (Bonobo_Stream stream) +{ + GsfSharedBonoboStream *bst = + g_object_new (GSF_SHARED_BONOBO_STREAM_TYPE, NULL); + bst->stream = stream; + return bst; +} + +static void +gsf_shared_bonobo_stream_finalize (GObject *obj) +{ + GsfSharedBonoboStream *bst = (GsfSharedBonoboStream *) (obj); + + if (bst->stream != NULL) { + } + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static void +gsf_shared_bonobo_stream_init (GObject *obj) +{ + GsfSharedBonoboStream *bst = (GsfSharedBonoboStream *) (obj); + bst->stream = NULL; + bst->pos = 0; +} + +static void +gsf_shared_bonobo_stream_class_init (GObjectClass *gobject_class) +{ + parent_class = g_type_class_peek_parent (gobject_class); + + gobject_class->finalize = gsf_shared_bonobo_stream_finalize; +} + +GSF_CLASS (GsfSharedBonoboStream, gsf_shared_bonobo_stream, + gsf_shared_bonobo_stream_class_init, + gsf_shared_bonobo_stream_init, + G_TYPE_OBJECT) diff --git a/lib/libgsf-1.12.3/gsf-gnome/gsf-shared-bonobo-stream.h b/lib/libgsf-1.12.3/gsf-gnome/gsf-shared-bonobo-stream.h new file mode 100644 index 0000000000..865dee3463 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-gnome/gsf-shared-bonobo-stream.h @@ -0,0 +1,47 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-shared-bonobo-stream.h: helper class for gsf-input-bonobo + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_SHARED_BONOBO_STREAM_H +#define GSF_SHARED_BONOBO_STREAM_H + +#include +#include +#include + +G_BEGIN_DECLS + +#define GSF_SHARED_BONOBO_STREAM_TYPE (gsf_shared_bonobo_stream_get_type ()) +#define GSF_SHARED_BONOBO_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_SHARED_BONOBO_STREAM_TYPE, GsfSharedBonoboStream)) +#define GSF_IS_SHARED_BONOBO_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_SHARED_BONOBO_STREAM_TYPE)) + +typedef struct _GsfSharedBonoboStream GsfSharedBonoboStream; +struct _GsfSharedBonoboStream { + GObject g_object; + Bonobo_Stream stream; + CORBA_long pos; +}; + +GType gsf_shared_bonobo_stream_get_type (void); +GsfSharedBonoboStream *gsf_shared_bonobo_stream_new (Bonobo_Stream stream); + +G_END_DECLS + +#endif /* GSF_SHARED_BONOBO_STREAM_H */ diff --git a/lib/libgsf-1.12.3/gsf-win32/Makefile.am b/lib/libgsf-1.12.3/gsf-win32/Makefile.am new file mode 100644 index 0000000000..f6c6a18f14 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-win32/Makefile.am @@ -0,0 +1,19 @@ +AM_CPPFLAGS = -I$(top_srcdir) $(LIBGSF_CFLAGS) + +if PLATFORM_WIN32 + +lib_LTLIBRARIES = libgsf-win32-1.la + +libgsf_win32_1_la_LIBADD = $(LIBGSF_LIBS) $(top_builddir)/gsf/libgsf-1.la +libgsf_win32_1_la_LDFLAGS = -version-info $(VERSION_INFO) -no-undefined +libgsf_win32_1_la_SOURCES = \ + gsf-input-win32.c \ + gsf-output-win32.c + +endif + +## But headers are installed on all systems: +libgsf_win32_1_includedir = $(includedir)/libgsf-1/gsf-win32 +libgsf_win32_1_include_HEADERS = \ + gsf-input-win32.h \ + gsf-output-win32.h diff --git a/lib/libgsf-1.12.3/gsf-win32/gsf-input-win32.c b/lib/libgsf-1.12.3/gsf-win32/gsf-input-win32.c new file mode 100644 index 0000000000..1bba9951cb --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-win32/gsf-input-win32.c @@ -0,0 +1,276 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-win32.c: + * + * Copyright (C) 2003-2004 Dom Lachowicz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +struct _GsfInputIStream { + GsfInput input; + IStream * stream; + guint8 *buf; + size_t buf_size; +}; + +typedef struct { + GsfInputClass input_class; +} GsfInputIStreamClass; + +#define NEED_ISTREAM_MACROS + +#ifdef NEED_ISTREAM_MACROS +#define IStream_AddRef(This) (This)->lpVtbl->AddRef(This) +#define IStream_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm) +#define IStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead) +#define IStream_Release(This) (This)->lpVtbl->Release(This) +#define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition) +#define IStream_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag) +#endif + +gchar * gsf_win32_hresult_to_utf8 (HRESULT hr); + +gchar * +gsf_win32_hresult_to_utf8 (HRESULT hr) +{ + void * pMsgBuf; + gchar * utf8_msg; + + if (SUCCEEDED (hr)) + return NULL; + + FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&pMsgBuf, 0, NULL); + + utf8_msg = g_locale_to_utf8 ((char const *)pMsgBuf, -1, NULL, NULL, NULL); + if (utf8_msg == NULL) + utf8_msg = g_strdup ("!SUCCEEDED (hr)"); + + LocalFree(pMsgBuf); + + return utf8_msg; +} + +static void +hresult_to_gerror (HRESULT hr, GError ** err) +{ + if (err) { + gchar * msg; + + msg = gsf_win32_hresult_to_utf8 (hr); + + if (msg) { + *err = g_error_new (gsf_input_error_id (), 0, msg); + g_free (msg); + } + } +} + +static char * +lpwstr_to_utf8 (LPWSTR str) +{ + if (str) + return g_utf16_to_utf8 (str, -1, NULL, NULL, NULL); + return NULL; +} + +/** + * gsf_input_istream_new : + * @stream : IStream stream + * @err : optionally NULL. + * + * Returns a new input object or NULL. + **/ +GsfInput * +gsf_input_istream_new (IStream * stream, GError **err) +{ + GsfInputIStream *input; + STATSTG statbuf; + HRESULT hr; + char * name; + + if (stream == NULL) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "stream is NULL"); + return NULL; + } + + if (FAILED (hr = IStream_Stat (stream, &statbuf, STATFLAG_DEFAULT))) { + hresult_to_gerror (hr, err); + return NULL; + } + + input = g_object_new (GSF_INPUT_ISTREAM_TYPE, NULL); + input->stream = stream; + input->buf = NULL; + input->buf_size = 0; + + IStream_AddRef (input->stream); + + /* LowPart and HiPart are the low and high 32 bit UINT parts. The MSDN documentation + says to use QuadPart if your compiler supports 64 bit ints. gsf_off_t is a gint64 value. + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/large_integer_str.asp + */ + gsf_input_set_size (GSF_INPUT (input), (gsf_off_t) statbuf.cbSize.QuadPart); + + name = lpwstr_to_utf8 (statbuf.pwcsName); + if (name) { + gsf_input_set_name (GSF_INPUT (input), name); + g_free (name); + } + + return GSF_INPUT(input); +} + +static void +gsf_input_istream_finalize (GObject *obj) +{ + GObjectClass *parent_class; + GsfInputIStream *input = (GsfInputIStream *)obj; + + IStream_Release (input->stream); + input->stream = NULL; + + if (input->buf != NULL) { + g_free (input->buf); + input->buf = NULL; + input->buf_size = 0; + } + + parent_class = g_type_class_peek (GSF_INPUT_TYPE); + if (parent_class && parent_class->finalize) + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_istream_dup (GsfInput *src_input, GError **err) +{ + GsfInputIStream const *src = (GsfInputIStream *)src_input; + GsfInput *dst; + HRESULT hr; + IStream * clone; + + g_return_val_if_fail (src_input != NULL, NULL); + g_return_val_if_fail (src->stream != NULL, NULL); + + if (SUCCEEDED (hr = IStream_Clone (src->stream, &clone))) { + dst = gsf_input_istream_new (clone, NULL); + IStream_Release (clone); /* gsf_input_istream_new() adds a ref */ + return dst; + } + + hresult_to_gerror (hr, err); + return NULL; +} + +static guint8 const * +gsf_input_istream_read (GsfInput *input, size_t num_bytes, + guint8 *buffer) +{ + GsfInputIStream *istm = GSF_INPUT_ISTREAM (input); + HRESULT hr; + ULONG nread, total_read = 0; + + g_return_val_if_fail (istm != NULL, NULL); + g_return_val_if_fail (istm->stream != NULL, NULL); + + if (buffer == NULL) { + if (istm->buf_size < num_bytes) { + istm->buf_size = num_bytes; + g_free (istm->buf); + istm->buf = g_new (guint8, istm->buf_size); + } + buffer = istm->buf; + } + + while (1) + { + hr = IStream_Read (istm->stream, (buffer + total_read), (ULONG)(num_bytes - total_read), &nread); + + if (SUCCEEDED (hr)) { + total_read += nread; + if ((size_t) total_read == num_bytes) { + return buffer; + } + } else + break; + } + + g_warning ("IStream read failed\n"); + return NULL; +} + +static gboolean +gsf_input_istream_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInputIStream *istm = GSF_INPUT_ISTREAM (input); + DWORD dwhence; + + g_return_val_if_fail (istm != NULL, TRUE); + g_return_val_if_fail (istm->stream != NULL, TRUE); + + switch (whence) { + case G_SEEK_SET : + dwhence = STREAM_SEEK_SET; + break; + case G_SEEK_CUR : + dwhence = STREAM_SEEK_CUR; + break; + case G_SEEK_END : + dwhence = STREAM_SEEK_END; + break; + default: + return TRUE; + } + + if(SUCCEEDED (IStream_Seek (istm->stream, *(LARGE_INTEGER *) &offset, dwhence, NULL))) + return FALSE; + return TRUE; +} + +static void +gsf_input_istream_init (GObject *obj) +{ + GsfInputIStream *istm = GSF_INPUT_ISTREAM (obj); + + istm->stream = NULL; + istm->buf = NULL; + istm->buf_size = 0; +} + +static void +gsf_input_istream_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_istream_finalize; + input_class->Dup = gsf_input_istream_dup; + input_class->Read = gsf_input_istream_read; + input_class->Seek = gsf_input_istream_seek; +} + +GSF_CLASS (GsfInputIStream, gsf_input_istream, + gsf_input_istream_class_init, gsf_input_istream_init, GSF_INPUT_TYPE) + +/***************************************************************************/ +/***************************************************************************/ diff --git a/lib/libgsf-1.12.3/gsf-win32/gsf-input-win32.h b/lib/libgsf-1.12.3/gsf-win32/gsf-input-win32.h new file mode 100644 index 0000000000..6052c15876 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-win32/gsf-input-win32.h @@ -0,0 +1,41 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-win32.h: + * + * Copyright (C) 2003 Dom Lachowicz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_WIN32_H +#define GSF_INPUT_WIN32_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_INPUT_ISTREAM_TYPE (gsf_input_istream_get_type ()) +#define GSF_INPUT_ISTREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_ISTREAM_TYPE, GsfInputIStream)) +#define GSF_IS_INPUT_ISTREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_ISTREAM_TYPE)) + +typedef struct _GsfInputIStream GsfInputIStream; + +GType gsf_input_istream_get_type (void); +GsfInput *gsf_input_istream_new (IStream * stream, GError **err); + +G_END_DECLS + +#endif /* GSF_INPUT_ISTREAM_H */ diff --git a/lib/libgsf-1.12.3/gsf-win32/gsf-output-win32.c b/lib/libgsf-1.12.3/gsf-win32/gsf-output-win32.c new file mode 100644 index 0000000000..5a1bd34ed5 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-win32/gsf-output-win32.c @@ -0,0 +1,198 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-win32.c: + * + * Copyright (C) 2003-2004 Dom Lachowicz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include + +struct _GsfOutputIStream { + GsfOutput output; + IStream * stream; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputIStreamClass; + +#define NEED_ISTREAM_MACROS + +#ifdef NEED_ISTREAM_MACROS +#define IStream_AddRef(This) (This)->lpVtbl->AddRef(This) +#define IStream_Write(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead) +#define IStream_Release(This) (This)->lpVtbl->Release(This) +#define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition) +#endif + +/* declared in gsf-input-win32.c */ +extern gchar * gsf_win32_hresult_to_utf8 (HRESULT hr); + +static gboolean +gsf_output_istream_set_error (GsfOutput * output, HRESULT hr) +{ + if (!SUCCEEDED (hr)) { + gchar * msg; + + msg = gsf_win32_hresult_to_utf8 (hr); + if (msg) { + gsf_output_set_error (output, 0, msg); + g_free (msg); + } /* "else" case should never happen */ + + return FALSE; + } + + return TRUE; +} + +/** + * gsf_output_istream_new : + * @stream : IStream stream + * + * Returns a new output object or NULL. + **/ +GsfOutput * +gsf_output_istream_new (IStream * stream) +{ + GsfOutputIStream *output; + + g_return_val_if_fail (stream != NULL, NULL); + + output = g_object_new (GSF_OUTPUT_ISTREAM_TYPE, NULL); + output->stream = stream; + IStream_AddRef (output->stream); + + return GSF_OUTPUT(output); +} + +static gboolean +gsf_output_istream_close (GsfOutput *output) +{ + GsfOutputIStream *istream = GSF_OUTPUT_ISTREAM (output); + gboolean res = FALSE; + + if (istream->stream != NULL) { + IStream_Release (istream->stream); + istream->stream = NULL; + res = TRUE; + } + + return res; +} + +static void +gsf_output_istream_finalize (GObject *obj) +{ + GObjectClass *parent_class; + GsfOutputIStream *output = (GsfOutputIStream *)obj; + + gsf_output_istream_close (GSF_OUTPUT(output)); + + parent_class = g_type_class_peek (GSF_OUTPUT_TYPE); + if (parent_class && parent_class->finalize) + parent_class->finalize (obj); +} + +static gboolean +gsf_output_istream_write (GsfOutput *output, + size_t num_bytes, + guint8 const *buffer) +{ + GsfOutputIStream *istm = GSF_OUTPUT_ISTREAM (output); + HRESULT hr; + ULONG nwritten, total_written = 0; + + g_return_val_if_fail (istm != NULL, FALSE); + g_return_val_if_fail (istm->stream != NULL, FALSE); + + while (1) { + hr = IStream_Write (istm->stream, (guint8 *)(buffer + total_written), (ULONG)(num_bytes - total_written), &nwritten); + + if (SUCCEEDED (hr)) { + total_written += nwritten; + if ((size_t)total_written == num_bytes) + return TRUE; + } else { + return gsf_output_istream_set_error (output, hr); + } + } + + return TRUE; +} + +static gboolean +gsf_output_istream_seek (GsfOutput *output, gsf_off_t offset, GSeekType whence) +{ + GsfOutputIStream *istm = GSF_OUTPUT_ISTREAM (output); + DWORD dwhence = STREAM_SEEK_SET; + HRESULT hr; + + g_return_val_if_fail (istm != NULL, gsf_output_set_error (output, 0, "missing handle")); + g_return_val_if_fail (istm->stream != NULL, gsf_output_set_error (output, 0, "missing handle")); + + switch (whence) { + case G_SEEK_SET : + dwhence = STREAM_SEEK_SET; + break; + case G_SEEK_CUR : + dwhence = STREAM_SEEK_CUR; + break; + case G_SEEK_END : + dwhence = STREAM_SEEK_END; + break; + default: + break; /* checked in parent wrapper */ + } + + hr = IStream_Seek (istm->stream, *(LARGE_INTEGER *) &offset, dwhence, NULL); + + if (SUCCEEDED (hr)) + return TRUE; + + return gsf_output_istream_set_error (output, hr); +} + +static void +gsf_output_istream_init (GObject *obj) +{ + GsfOutputIStream *istm = GSF_OUTPUT_ISTREAM (obj); + + istm->stream = NULL; +} + +static void +gsf_output_istream_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_istream_finalize; + output_class->Close = gsf_output_istream_close; + output_class->Write = gsf_output_istream_write; + output_class->Seek = gsf_output_istream_seek; +} + +GSF_CLASS (GsfOutputIStream, gsf_output_istream, + gsf_output_istream_class_init, gsf_output_istream_init, GSF_OUTPUT_TYPE) + +/***************************************************************************/ +/***************************************************************************/ diff --git a/lib/libgsf-1.12.3/gsf-win32/gsf-output-win32.h b/lib/libgsf-1.12.3/gsf-win32/gsf-output-win32.h new file mode 100644 index 0000000000..038a0151f9 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf-win32/gsf-output-win32.h @@ -0,0 +1,41 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outut-win32.h: + * + * Copyright (C) 2003 Dom Lachowicz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_WIN32_H +#define GSF_OUTPUT_WIN32_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_OUTPUT_ISTREAM_TYPE (gsf_output_istream_get_type ()) +#define GSF_OUTPUT_ISTREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_ISTREAM_TYPE, GsfOutputIStream)) +#define GSF_IS_OUTPUT_ISTREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_ISTREAM_TYPE)) + +typedef struct _GsfOutputIStream GsfOutputIStream; + +GType gsf_output_istream_get_type (void); +GsfOutput *gsf_output_istream_new (IStream * stream); + +G_END_DECLS + +#endif /* GSF_OUTPUT_ISTREAM_H */ diff --git a/lib/libgsf-1.12.3/gsf/Makefile.am b/lib/libgsf-1.12.3/gsf/Makefile.am new file mode 100644 index 0000000000..ab8dd0e2d6 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/Makefile.am @@ -0,0 +1,134 @@ +if OS_WIN32 + +install-libtool-import-lib: + $(INSTALL) .libs/libgsf-1.dll.a $(DESTDIR)$(libdir) + +uninstall-libtool-import-lib: + -rm $(DESTDIR)$(libdir)/libgsf-1.dll.a +else +install-libtool-import-lib: +uninstall-libtool-import-lib: +endif + +AM_CPPFLAGS = -I$(top_srcdir)/lib/libgsf-1.12.3 $(LIBGSF_CFLAGS) $(Z_CPPFLAGS) \ + -DGNOMELOCALEDIR=\"$(datadir)/locale\" + +lib_LTLIBRARIES = libgsf-1.la + +libgsf_1_la_LIBADD = $(LIBGSF_LIBS) $(Z_LIBS) $(BZ2_LIBS) +libgsf_1_la_LDFLAGS = -version-info $(VERSION_INFO) +if PLATFORM_WIN32 + libgsf_1_la_LDFLAGS += -no-undefined +endif + +libgsf_1_la_SOURCES = \ + gsf-utils.c \ + gsf-libxml.c \ + gsf-doc-meta-data.c \ + gsf-docprop-vector.c \ + gsf-msole-impl.h \ + gsf-msole-utils.c \ + gsf-timestamp.c \ + gsf-zip-impl.h \ + gsf-zip-utils.c \ + \ + gsf-input.c \ + gsf-input-bzip.c \ + gsf-input-gzip.c \ + gsf-input-iochannel.c \ + gsf-input-memory.c \ + gsf-input-proxy.c \ + gsf-input-stdio.c \ + gsf-input-textline.c \ + \ + gsf-infile.c \ + gsf-infile-msole.c \ + gsf-infile-msvba.c \ + gsf-infile-stdio.c \ + gsf-infile-zip.c \ + \ + gsf-output.c \ + gsf-output-bzip.c \ + gsf-output-csv.c \ + gsf-output-gzip.c \ + gsf-output-iconv.c \ + gsf-output-iochannel.c \ + gsf-output-memory.c \ + gsf-output-stdio.c \ + \ + gsf-outfile.c \ + gsf-outfile-msole.c \ + gsf-outfile-stdio.c \ + gsf-outfile-zip.c \ + \ + gsf-shared-memory.c \ + gsf-shared-memory.h \ + gsf-structured-blob.c \ + gsf-blob.c \ + gsf-clip-data.c +# gsf-output-transaction.c \ +# gsf-command-context.c \ +# gsf-io-context.c + +if !HAVE_GLIB26 + libgsf_1_la_SOURCES += glib24_26-compat.c +endif + +libgsf_1_includedir = $(includedir)/libgsf-1/gsf +libgsf_1_include_HEADERS = \ + gsf.h \ + gsf-utils.h \ + gsf-libxml.h \ + gsf-impl-utils.h \ + gsf-doc-meta-data.h \ + gsf-docprop-vector.h \ + gsf-msole-utils.h \ + gsf-timestamp.h \ + \ + gsf-input.h \ + gsf-input-impl.h \ + gsf-input-bzip.h \ + gsf-input-gzip.h \ + gsf-input-iochannel.h \ + gsf-input-memory.h \ + gsf-input-proxy.h \ + gsf-input-stdio.h \ + gsf-input-textline.h \ + \ + gsf-infile.h \ + gsf-infile-impl.h \ + gsf-infile-msole.h \ + gsf-infile-msvba.h \ + gsf-infile-stdio.h \ + gsf-infile-zip.h \ + \ + gsf-output.h \ + gsf-output-impl.h \ + gsf-output-bzip.h \ + gsf-output-csv.h \ + gsf-output-gzip.h \ + gsf-output-iconv.h \ + gsf-output-iochannel.h \ + gsf-output-memory.h \ + gsf-output-stdio.h \ + \ + gsf-outfile.h \ + gsf-outfile-impl.h \ + gsf-outfile-msole.h \ + gsf-outfile-stdio.h \ + gsf-outfile-zip.h \ + \ + gsf-structured-blob.h \ + gsf-meta-names.h \ + gsf-blob.h \ + gsf-clip-data.h +# gsf-command-context.h \ +# gsf-io-context.h + +if !HAVE_GLIB26 + libgsf_1_include_HEADERS += glib24_26-compat.h +endif + +install-data-local: install-libtool-import-lib + +uninstall-local: uninstall-libtool-import-lib diff --git a/lib/libgsf-1.12.3/gsf/glib24_26-compat.c b/lib/libgsf-1.12.3/gsf/glib24_26-compat.c new file mode 100644 index 0000000000..e907ef060b --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/glib24_26-compat.c @@ -0,0 +1,204 @@ +/** jsled, 2005-11-08: copied from glib-2.6.6 to support libgsf compilation + against glib-2.4.14. **/ + +#include + +/* gstdio.c - wrappers for C library functions + * + * Copyright 2004 Tor Lillqvist + * + * GLib is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * GLib 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GLib; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +//#include +#include +//#include + +/** ------------------------------------------------------------ **/ +/* START gconvert.c */ + +#include +#include +#include + +typedef struct _GFilenameCharsetCache GFilenameCharsetCache; + +struct _GFilenameCharsetCache { + gboolean is_utf8; + gchar *charset; + gchar **filename_charsets; +}; + +/** + * g_get_filename_charsets: + * @charsets: return location for the %NULL-terminated list of encoding names + * + * Determines the preferred character sets used for filenames. + * The first character set from the @charsets is the filename encoding, the + * subsequent character sets are used when trying to generate a displayable + * representation of a filename, see g_filename_display_name(). + * + * On Unix, the character sets are determined by consulting the + * environment variables G_FILENAME_ENCODING and + * G_BROKEN_FILENAMES. On Windows, the character set + * used in the GLib API is always UTF-8 and said environment variables + * have no effect. + * + * G_FILENAME_ENCODING may be set to a comma-separated list + * of character set names. The special token "@locale" is taken to mean the + * character set for the current locale. If G_FILENAME_ENCODING + * is not set, but G_BROKEN_FILENAMES is, the character set of + * the current locale is taken as the filename encoding. If neither environment + * variable is set, UTF-8 is taken as the filename encoding, but the character + * set of the current locale is also put in the list of encodings. + * + * The returned @charsets belong to GLib and must not be freed. + * + * Note that on Unix, regardless of the locale character set or + * G_FILENAME_ENCODING value, the actual file names present on a + * system might be in any random encoding or just gibberish. + * + * Return value: %TRUE if the filename encoding is UTF-8. + * + * Since: 2.6 + */ +gboolean +g_get_filename_charsets (G_CONST_RETURN gchar ***filename_charsets) +{ + static const gchar *charsets[] = { + "UTF-8", + NULL + }; + +#ifdef G_OS_WIN32 + /* On Windows GLib pretends that the filename charset is UTF-8 */ + if (filename_charsets) + *filename_charsets = charsets; + + return TRUE; +#else + gboolean result; + + /* Cygwin works like before */ + result = g_get_charset (&(charsets[0])); + + if (filename_charsets) + *filename_charsets = charsets; + + return result; +#endif +} + +static gchar * +make_valid_utf8 (const gchar *name) +{ + GString *string; + const gchar *remainder, *invalid; + gint remaining_bytes, valid_bytes; + + string = NULL; + remainder = name; + remaining_bytes = strlen (name); + + while (remaining_bytes != 0) + { + if (g_utf8_validate (remainder, remaining_bytes, &invalid)) + break; + valid_bytes = invalid - remainder; + + if (string == NULL) + string = g_string_sized_new (remaining_bytes); + + g_string_append_len (string, remainder, valid_bytes); + g_string_append_c (string, '?'); + + remaining_bytes -= valid_bytes + 1; + remainder = invalid + 1; + } + + if (string == NULL) + return g_strdup (name); + + g_string_append (string, remainder); + g_string_append (string, " (invalid encoding)"); + + g_assert (g_utf8_validate (string->str, -1, NULL)); + + return g_string_free (string, FALSE); +} + +/** + * g_filename_display_name: + * @filename: a pathname hopefully in the GLib file name encoding + * + * Converts a filename into a valid UTF-8 string. The + * conversion is not necessarily reversible, so you + * should keep the original around and use the return + * value of this function only for display purposes. + * Unlike g_filename_to_utf8(), the result is guaranteed + * to be non-NULL even if the filename actually isn't in the GLib + * file name encoding. + * + * If you know the whole pathname of the file you should use + * g_filename_display_basename(), since that allows location-based + * translation of filenames. + * + * Return value: a newly allocated string containing + * a rendition of the filename in valid UTF-8 + * + * Since: 2.6 + **/ +gchar * +g_filename_display_name (const gchar *filename) +{ + gint i; + const gchar **charsets; + gchar *display_name = NULL; + gboolean is_utf8; + + is_utf8 = g_get_filename_charsets (&charsets); + + if (is_utf8) + { + if (g_utf8_validate (filename, -1, NULL)) + display_name = g_strdup (filename); + } + + if (!display_name) + { + /* Try to convert from the filename charsets to UTF-8. + * Skip the first charset if it is UTF-8. + */ + for (i = is_utf8 ? 1 : 0; charsets[i]; i++) + { + display_name = g_convert (filename, -1, "UTF-8", charsets[i], + NULL, NULL, NULL); + + if (display_name) + break; + } + } + + /* if all conversions failed, we replace invalid UTF-8 + * by a question mark + */ + if (!display_name) + display_name = make_valid_utf8 (filename); + + return display_name; +} diff --git a/lib/libgsf-1.12.3/gsf/glib24_26-compat.h b/lib/libgsf-1.12.3/gsf/glib24_26-compat.h new file mode 100644 index 0000000000..ea609c1e3f --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/glib24_26-compat.h @@ -0,0 +1,79 @@ +/* This file has been copied from glib-2.6.6 into libgsf-1.12.3 to support + * compilation against glib-2.4.14. -- jsled, 2005-11-08 + */ + +#ifndef __GLIB_24_26_COMPAT_H__ +#define __GLIB_24_26_COMPAT_H__ + +#include + +// START from gstdio.h +/* gstdio.h - GFilename wrappers for C library functions + * + * Copyright 2004 Tor Lillqvist + * + * GLib is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * GLib 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GLib; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +/* Just pass on to the system functions, so there's no potential for data + * format mismatches, especially with large file interfaces. + */ + +#define g_open open +#define g_rename rename +#define g_mkdir mkdir +#define g_stat stat +#define g_lstat lstat +#define g_unlink unlink +#define g_remove remove +#define g_rmdir rmdir +#define g_fopen fopen +#define g_freopen freopen + +// END from gstdio.h + +// START from gconvert.h +gchar *g_filename_display_name (const gchar *filename); // G_GNUC_MALLOC; +// END from gconvert.h + +/* from glib-2.6[.6] gutils.h */ +#ifdef G_OS_WIN32 + +/* On Win32, the canonical directory separator is the backslash, and + * the search path separator is the semicolon. Note that also the + * (forward) slash works as directory separator. + */ +#define G_DIR_SEPARATOR '\\' +#define G_DIR_SEPARATOR_S "\\" +#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/') +#define G_SEARCHPATH_SEPARATOR ';' +#define G_SEARCHPATH_SEPARATOR_S ";" + +#else /* !G_OS_WIN32 */ + +/* Unix */ + +#define G_DIR_SEPARATOR '/' +#define G_DIR_SEPARATOR_S "/" +#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR) +#define G_SEARCHPATH_SEPARATOR ':' +#define G_SEARCHPATH_SEPARATOR_S ":" + +#endif /* !G_OS_WIN32 */ + +#endif /* __GLIB_24_26_COMPAT_H__ */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-blob.c b/lib/libgsf-1.12.3/gsf/gsf-blob.c new file mode 100644 index 0000000000..a0161854c8 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-blob.c @@ -0,0 +1,142 @@ +#include "gsf-config.h" +#include +#include +#include "gsf-utils.h" +#include "gsf-blob.h" + +/* Private part of the GsfBlob structure */ +struct _GsfBlobPrivate { + gsize size; + gpointer data; +}; + +G_DEFINE_TYPE (GsfBlob, gsf_blob, G_TYPE_OBJECT); + +static void gsf_blob_finalize (GObject *object); + +static void +gsf_blob_class_init (GsfBlobClass *class) +{ + GObjectClass *object_class; + + object_class = (GObjectClass *) class; + + object_class->finalize = gsf_blob_finalize; +} + +static void +gsf_blob_init (GsfBlob *blob) +{ + GsfBlobPrivate *priv; + + priv = g_new0 (GsfBlobPrivate, 1); + blob->priv = priv; +} + +static void +gsf_blob_finalize (GObject *object) +{ + GsfBlob *blob; + GsfBlobPrivate *priv; + + blob = GSF_BLOB (object); + priv = blob->priv; + + g_free (priv->data); + g_free (priv); + + G_OBJECT_CLASS (gsf_blob_parent_class)->finalize (object); +} + +/** + * gsf_blob_new: + * @size: Size of the data in bytes. + * @data_to_copy: Data which will be copied into the blob, or %NULL if @size is zero. + * @error: location to store error, or %NULL. + * + * Creates a new #GsfBlob object to hold the specified data. The blob can then + * be used as a facility for reference-counting for the data. The data is + * copied internally, so the blob does not hold references to external chunks + * of memory. + * + * Return value: A newly-created #GsfBlob, or %NULL if the data could not be copied. + * + * Error domain: #GSF_ERROR + * + * Possible errors: #GSF_ERROR_OUT_OF_MEMORY if the @data_to_copy could not be copied. + **/ +GsfBlob * +gsf_blob_new (gsize size, gconstpointer data_to_copy, GError **error) +{ + GsfBlob *blob; + GsfBlobPrivate *priv; + gpointer data; + + g_return_val_if_fail ((size > 0 && data_to_copy != NULL) || (size == 0 && data_to_copy == NULL), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (data_to_copy) { + data = g_try_malloc (size); + if (!data) { + g_set_error (error, + GSF_ERROR, + GSF_ERROR_OUT_OF_MEMORY, + _("Not enough memory to copy %" G_GSIZE_FORMAT " bytes of data"), + size); + return NULL; + } + + memcpy (data, data_to_copy, size); + } else + data = NULL; + + blob = g_object_new (GSF_TYPE_BLOB, + NULL); + priv = blob->priv; + + priv->size = size; + priv->data = data; + + return blob; +} + +/** + * gsf_blob_get_size: + * @blob: A #GsfBlob. + * + * Queries the size in bytes of the data stored in the blob. + * + * Return value: Size in bytes, or 0 if the data is %NULL. + **/ +gsize +gsf_blob_get_size (GsfBlob *blob) +{ + GsfBlobPrivate *priv; + + g_return_val_if_fail (GSF_IS_BLOB (blob), 0); + + priv = blob->priv; + return priv->size; +} + +/** + * gsf_blob_peek_data: + * @blob: A #GsfBlob. + * + * Queries a pointer to the data stored in the blob. This does not copy the data + * for you; it returns a pointer to the actual buffer which the blob uses internally, + * so you should not free this buffer on your own. + * + * Return value: Pointer to the data stored in the blob, or %NULL if the size + * of the data is zero. + **/ +gconstpointer +gsf_blob_peek_data (GsfBlob *blob) +{ + GsfBlobPrivate *priv; + + g_return_val_if_fail (GSF_IS_BLOB (blob), NULL); + + priv = blob->priv; + return priv->data; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-blob.h b/lib/libgsf-1.12.3/gsf/gsf-blob.h new file mode 100644 index 0000000000..99416b87cc --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-blob.h @@ -0,0 +1,40 @@ +#include + +#ifndef GSF_BLOB_H +#define GSF_BLOB_H + +G_BEGIN_DECLS + +#define GSF_TYPE_BLOB (gsf_blob_get_type ()) +#define GSF_BLOB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSF_TYPE_BLOB, GsfBlob)) +#define GSF_BLOB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSF_TYPE_BLOB, GsfBlobClass)) +#define GSF_IS_BLOB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSF_TYPE_BLOB)) +#define GSF_IS_BLOB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSF_TYPE_BLOB)) +#define GSF_BLOB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSF_TYPE_BLOB, GsfBlobClass)) + +typedef struct _GsfBlob GsfBlob; +typedef struct _GsfBlobClass GsfBlobClass; +typedef struct _GsfBlobPrivate GsfBlobPrivate; + +struct _GsfBlob { + GObject object; + GsfBlobPrivate *priv; +}; + +struct _GsfBlobClass { + GObjectClass parent_class; +}; + +GType gsf_blob_get_type (void) G_GNUC_CONST; + +GsfBlob *gsf_blob_new (gsize size, + gconstpointer data_to_copy, + GError **error); + +gsize gsf_blob_get_size (GsfBlob *blob); + +gconstpointer gsf_blob_peek_data (GsfBlob *blob); + +G_END_DECLS + +#endif diff --git a/lib/libgsf-1.12.3/gsf/gsf-clip-data.c b/lib/libgsf-1.12.3/gsf/gsf-clip-data.c new file mode 100644 index 0000000000..4ba6df772e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-clip-data.c @@ -0,0 +1,293 @@ +#include "gsf-config.h" +#include +#include "gsf-clip-data.h" +#include "gsf-utils.h" + +/* Private part of the GsfClipData structure */ +struct _GsfClipDataPrivate { + GsfClipFormat format; + GsfBlob *data_blob; +}; + +G_DEFINE_TYPE (GsfClipData, gsf_clip_data, G_TYPE_OBJECT); + +static void gsf_clip_data_finalize (GObject *object); + +static void +gsf_clip_data_class_init (GsfClipDataClass *class) +{ + GObjectClass *object_class; + + object_class = (GObjectClass *) class; + + object_class->finalize = gsf_clip_data_finalize; +} + +static void +gsf_clip_data_init (GsfClipData *clip_data) +{ + GsfClipDataPrivate *priv; + + priv = g_new0 (GsfClipDataPrivate, 1); + clip_data->priv = priv; +} + +static void +gsf_clip_data_finalize (GObject *object) +{ + GsfClipData *clip_data; + GsfClipDataPrivate *priv; + + clip_data = GSF_CLIP_DATA (object); + priv = clip_data->priv; + + if (priv->data_blob) + g_object_unref (priv->data_blob); + + G_OBJECT_CLASS (gsf_clip_data_parent_class)->finalize (object); +} + +/** + * gsf_clip_data_new: + * @format: Format for the data inside the @data_blob + * @data_blob: Object which holds the binary contents for the #GsfClipData + * + * Creates a new #GsfClipData object. This function acquires a reference to the + * @data_blob, so you should unref the blob on your own if you no longer need it + * directly. + * + * Return value: A newly-created #GsfClipData. + **/ +GsfClipData * +gsf_clip_data_new (GsfClipFormat format, GsfBlob *data_blob) +{ + GsfClipData *clip_data; + GsfClipDataPrivate *priv; + + g_return_val_if_fail (GSF_IS_BLOB (data_blob), NULL); + + clip_data = g_object_new (GSF_TYPE_CLIP_DATA, + NULL); + priv = clip_data->priv; + + priv->format = format; + priv->data_blob = g_object_ref (data_blob); + + return clip_data; +} + +/** + * gsf_clip_data_get_format: + * @clip_data: A #GsfClipData. + * + * Queries the clipboard data format of a #GsfClipData. The format refers to the data + * blob inside the @clip_data; use gsf_clip_data_get_data_blob() to get that data blob. + * + * Return value: The format in which the #GsfClipData's data blob is stored. + **/ +GsfClipFormat +gsf_clip_data_get_format (GsfClipData *clip_data) +{ + GsfClipDataPrivate *priv; + + g_return_val_if_fail (GSF_IS_CLIP_DATA (clip_data), GSF_CLIP_FORMAT_UNKNOWN); + + priv = clip_data->priv; + return priv->format; +} + +/** + * gsf_clip_data_get_data_blob: + * @clip_data: A #GsfClipData. + * + * Queries the data blob that actually stores a #GsfClipData's binary data. + * + * Return value: A new reference to the #GsfBlob that stores this @clip_data's + * binary data. You must use g_object_unref() to dispose of that data blob when + * you are done with it. + **/ +GsfBlob * +gsf_clip_data_get_data_blob (GsfClipData *clip_data) +{ + GsfClipDataPrivate *priv; + + g_return_val_if_fail (GSF_IS_CLIP_DATA (clip_data), NULL); + + priv = clip_data->priv; + return g_object_ref (priv->data_blob); +} + +static void +set_error_missing_clipboard_data (GError **error, const char *format_name, gsize at_least_size) +{ + g_set_error (error, + GSF_ERROR, + GSF_ERROR_INVALID_DATA, + _("The clip_data is in %s, but it is smaller than " + "at least %" G_GSIZE_FORMAT " bytes"), + format_name, + at_least_size); +} + +static gsize +get_windows_clipboard_data_offset (GsfClipFormatWindows format) +{ + struct format_offset_pair { + GsfClipFormatWindows format; + gsize offset; + }; + + static const struct format_offset_pair pairs[] = { + { GSF_CLIP_FORMAT_WINDOWS_UNKNOWN, 4 }, + { GSF_CLIP_FORMAT_WINDOWS_METAFILE, 12 }, + { GSF_CLIP_FORMAT_WINDOWS_DIB, 4 }, + { GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE, 4 } /* FIXME: does this have a PACKEDMETA in front + * as well, similar to GSF_CLIP_FORMAT_WINDOWS_METAFILE? */ + }; + static const int num_pairs = G_N_ELEMENTS (pairs); + + int i; + + for (i = 0; i < num_pairs; i++) + if (pairs[i].format == format) + return pairs[i].offset; + + g_assert_not_reached (); + return 0; +} + +/* Checks that the specified blob size matches the expected size for the format. + * Returns the same format if the size is correct, or + * GSF_CLIP_FORMAT_WINDOWS_ERROR if the size is too small. + */ +static GsfClipFormatWindows +check_format_windows (GsfClipFormatWindows format, const char *format_name, gsize blob_size, GError **error) +{ + gsize offset; + + offset = get_windows_clipboard_data_offset (format); + if (blob_size <= offset) { + set_error_missing_clipboard_data (error, format_name, offset + 1); + format = GSF_CLIP_FORMAT_WINDOWS_ERROR; + } + + return format; +} + +/** + * gsf_clip_data_get_windows_clipboard_format: + * @clip_data: A #GsfClipData. + * @error: Location to store error, or %NULL + * + * Queries the Windows clipboard data format for a #GsfClipData. The @clip_data must + * have been created with #GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD. + * + * Return value: A #GsfClipFormatWindows value. + * + * Possible errors: #GSF_ERROR_INVALID_DATA if the data blob in the @clip_data is + * smaller than it should be; in this case GSF_CLIP_FORMAT_WINDOWS_ERROR will be returned. + **/ +GsfClipFormatWindows +gsf_clip_data_get_windows_clipboard_format (GsfClipData *clip_data, GError **error) +{ + GsfClipDataPrivate *priv; + gsize size; + guint32 value; + gconstpointer data; + GsfClipFormatWindows format; + + g_return_val_if_fail (GSF_IS_CLIP_DATA (clip_data), GSF_CLIP_FORMAT_WINDOWS_ERROR); + g_return_val_if_fail (error == NULL || *error == NULL, GSF_CLIP_FORMAT_WINDOWS_ERROR); + + priv = clip_data->priv; + g_return_val_if_fail (priv->format == GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD, GSF_CLIP_FORMAT_WINDOWS_ERROR); + + size = gsf_blob_get_size (priv->data_blob); + + if (size < 4) { + g_set_error (error, + GSF_ERROR, + GSF_ERROR_INVALID_DATA, + _("The clip_data is in Windows clipboard format, but it is smaller than " + "the required 4 bytes.")); + return GSF_CLIP_FORMAT_WINDOWS_ERROR; + } + + data = gsf_blob_peek_data (priv->data_blob); + + value = GSF_LE_GET_GUINT32 (data); + + switch (value) { + case GSF_CLIP_FORMAT_WINDOWS_METAFILE: + format = check_format_windows (GSF_CLIP_FORMAT_WINDOWS_METAFILE, _("Windows Metafile format"), + size, error); + break; + + case GSF_CLIP_FORMAT_WINDOWS_DIB: + case 2: /* CF_BITMAP */ + format = check_format_windows (GSF_CLIP_FORMAT_WINDOWS_DIB, _("Windows DIB or BITMAP format"), + size, error); + break; + + case GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE: + format = check_format_windows (GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE, _("Windows Enhanced Metafile format"), + size, error); + break; + + default: + format = GSF_CLIP_FORMAT_WINDOWS_UNKNOWN; + break; + } + + return format; +} + +/** + * gsf_clip_data_peek_real_data: + * @clip_data: A #GsfClipData. + * @ret_size: Location to return the size of the returned data buffer. + * @error: Location to store error, or %NULL. + * + * Queries a pointer directly to the clipboard data of a #GsfClipData. The + * resulting pointer is not necessarily the same data pointer that was passed to + * gsf_blob_new() prior to creating the @clip_data. For example, if the data is + * in #GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD format, then it will have extra header + * bytes in front of the actual metafile data. This function will skip over + * those header bytes if necessary and return a pointer to the "real" data. + * + * Return value: Pointer to the real clipboard data. The size in bytes of this + * buffer is returned in the @ret_size argument. + **/ +gconstpointer +gsf_clip_data_peek_real_data (GsfClipData *clip_data, gsize *ret_size, GError **error) +{ + GsfClipDataPrivate *priv; + gconstpointer data; + gsize offset; + + g_return_val_if_fail (GSF_IS_CLIP_DATA (clip_data), NULL); + g_return_val_if_fail (ret_size != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + priv = clip_data->priv; + + data = gsf_blob_peek_data (priv->data_blob); + + if (priv->format == GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD) { + GsfClipFormatWindows win_format; + + win_format = gsf_clip_data_get_windows_clipboard_format (clip_data, error); + if (win_format == GSF_CLIP_FORMAT_WINDOWS_ERROR) + return NULL; + + /* gsf_clip_data_get_windows_clipboard_format() already did the size checks for us, + * so we can jump to the offset right away without doing extra checks. + */ + + offset = get_windows_clipboard_data_offset (win_format); + } else + offset = 0; + + *ret_size = gsf_blob_get_size (priv->data_blob) - offset; + return (char *) data + offset; /* cast to avoid warning about void pointer arithmetic */ +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-clip-data.h b/lib/libgsf-1.12.3/gsf/gsf-clip-data.h new file mode 100644 index 0000000000..c38d61a6a7 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-clip-data.h @@ -0,0 +1,65 @@ +#include + +#ifndef GSF_CLIP_DATA_H +#define GSF_CLIP_DATA_H + +G_BEGIN_DECLS + +typedef enum { + GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD = -1, + GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARD = -2, + GSF_CLIP_FORMAT_GUID = -3, + GSF_CLIP_FORMAT_NO_DATA = 0, + GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAME = 1, /* in the file it's actually any positive integer */ + GSF_CLIP_FORMAT_UNKNOWN /* this is our own value for unknown types or invalid data */ +} GsfClipFormat; + +typedef enum { + GSF_CLIP_FORMAT_WINDOWS_ERROR = -1, /* our own value */ + GSF_CLIP_FORMAT_WINDOWS_UNKNOWN = -2, /* our own value */ + GSF_CLIP_FORMAT_WINDOWS_METAFILE = 3, /* CF_METAFILEPICT */ + GSF_CLIP_FORMAT_WINDOWS_DIB = 8, /* CF_DIB */ + GSF_CLIP_FORMAT_WINDOWS_ENHANCED_METAFILE = 14 /* CF_ENHMETAFILE */ +} GsfClipFormatWindows; + +#define GSF_TYPE_CLIP_DATA (gsf_clip_data_get_type ()) +#define GSF_CLIP_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSF_TYPE_CLIP_DATA, GsfClipData)) +#define GSF_CLIP_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSF_TYPE_CLIP_DATA, GsfClipDataClass)) +#define GSF_IS_CLIP_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSF_TYPE_CLIP_DATA)) +#define GSF_IS_CLIP_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSF_TYPE_CLIP_DATA)) +#define GSF_CLIP_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSF_TYPE_CLIP_DATA, GsfClipDataClass)) + +typedef struct _GsfClipData GsfClipData; +typedef struct _GsfClipDataClass GsfClipDataClass; +typedef struct _GsfClipDataPrivate GsfClipDataPrivate; + +struct _GsfClipData { + GObject object; + + GsfClipDataPrivate *priv; +}; + +struct _GsfClipDataClass { + GObjectClass parent_class; +}; + +GType gsf_clip_data_get_type (void) G_GNUC_CONST; + +GsfClipData *gsf_clip_data_new (GsfClipFormat format, + GsfBlob *data_blob); + +GsfClipFormat gsf_clip_data_get_format (GsfClipData *clip_data); + +GsfBlob *gsf_clip_data_get_data_blob (GsfClipData *clip_data); + +GsfClipFormatWindows gsf_clip_data_get_windows_clipboard_format (GsfClipData *clip_data, + GError **error); + +gconstpointer gsf_clip_data_peek_real_data (GsfClipData *clip_data, + gsize *ret_size, + GError **error); + + +G_END_DECLS + +#endif diff --git a/lib/libgsf-1.12.3/gsf/gsf-doc-meta-data.c b/lib/libgsf-1.12.3/gsf/gsf-doc-meta-data.c new file mode 100644 index 0000000000..0dc9223129 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-doc-meta-data.c @@ -0,0 +1,332 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-doc-meta-data.c: + * + * Copyright (C) 2002-2005 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +struct _GsfDocMetaData { + GObject base; + + GHashTable *table; +}; +typedef GObjectClass GsfDocMetaDataClass; + +struct _GsfDocProp { + char *name; + GValue *val; + char *linked_to; /* optionally NULL */ +}; + +static GObjectClass *parent_class; + +static void +gsf_doc_meta_data_finalize (GObject *obj) +{ + g_hash_table_destroy (GSF_DOC_META_DATA (obj)->table); + parent_class->finalize (obj); +} + +static void +gsf_doc_meta_data_init (GObject *obj) +{ + GsfDocMetaData *meta = GSF_DOC_META_DATA (obj); + meta->table = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, (GDestroyNotify) gsf_doc_prop_free); +} + +static void +gsf_doc_meta_data_class_init (GObjectClass *gobject_class) +{ + gobject_class->finalize = gsf_doc_meta_data_finalize; + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfDocMetaData, gsf_doc_meta_data, + gsf_doc_meta_data_class_init, gsf_doc_meta_data_init, + G_TYPE_OBJECT) + +/**********************************************************************/ + +/** + * gsf_doc_meta_data_new : + * + * Returns a new metadata property collection + **/ +GsfDocMetaData * +gsf_doc_meta_data_new (void) +{ + return g_object_new (GSF_DOC_META_DATA_TYPE, NULL); +} + +/** + * gsf_doc_meta_data_lookup : + * @meta : #GsfDocMetaData + * @name : + * + * Returns the property with name @id in @meta. The caller can modify the + * property value and link but not the name. + **/ +GsfDocProp * +gsf_doc_meta_data_lookup (GsfDocMetaData const *meta, char const *name) +{ + g_return_val_if_fail (IS_GSF_DOC_META_DATA (meta), NULL); + g_return_val_if_fail (name != NULL, NULL); + return g_hash_table_lookup (meta->table, name); +} + +/** + * gsf_doc_meta_data_insert : + * @meta : #GsfDocMetaData + * @name : + * @value : #GValue + * + * Take ownership of @name and @value and insert a property into @meta. + * If a property exists with @name, it is replaced (The link is lost) + **/ +void +gsf_doc_meta_data_insert (GsfDocMetaData *meta, char *name, GValue *value) +{ + GsfDocProp *prop; + + g_return_if_fail (IS_GSF_DOC_META_DATA (meta)); + g_return_if_fail (name != NULL); + prop = g_new (GsfDocProp, 1); + prop->name = name; + prop->val = value; + prop->linked_to = NULL; + g_hash_table_replace (meta->table, prop->name, prop); +} + +/** + * gsf_doc_meta_data_remove : + * @meta : the collection + * @name : the non-null string name of the property + * + * If @name does not exist in the collection, do nothing. If @name does exist, + * remove it and its value from the collection + **/ +void +gsf_doc_meta_data_remove (GsfDocMetaData *meta, char const *name) +{ + g_return_if_fail (IS_GSF_DOC_META_DATA (meta)); + g_return_if_fail (name != NULL); + g_hash_table_remove (meta->table, name); +} + +/** + * gsf_doc_meta_data_store : + * @meta : #GsfDocMetaData + * @name : + * + **/ +GsfDocProp * +gsf_doc_meta_data_steal (GsfDocMetaData *meta, char const *name) +{ + GsfDocProp *prop; + g_return_val_if_fail (IS_GSF_DOC_META_DATA (meta), NULL); + g_return_val_if_fail (name != NULL, NULL); + prop = g_hash_table_lookup (meta->table, name); + if (NULL != prop) + g_hash_table_steal (meta->table, name); + return prop; +} + +/** + * gsf_doc_meta_data_store : + * @meta : #GsfDocMetaData + * @prop : #GsfDocProp + * + **/ +void +gsf_doc_meta_data_store (GsfDocMetaData *meta, GsfDocProp *prop) +{ + g_return_if_fail (IS_GSF_DOC_META_DATA (meta)); + g_return_if_fail (prop != NULL); + g_return_if_fail (prop != g_hash_table_lookup (meta->table, prop->name)); + g_hash_table_replace (meta->table, prop->name, prop); +} + +/** + * gsf_doc_meta_data_foreach : + * @meta : the collection + * @func : the function called once for each element in the collection + * @user_data : any supplied user data or NULL + * + * Iterate through each (key, value) pair in this collection + **/ +void +gsf_doc_meta_data_foreach (GsfDocMetaData const *meta, GHFunc func, gpointer user_data) +{ + g_return_if_fail (IS_GSF_DOC_META_DATA (meta)); + g_hash_table_foreach (meta->table, func, user_data); +} + +/** + * gsf_doc_meta_data_size : + * @meta : the collection + * + * Returns the number of items in this collection + **/ +gsize +gsf_doc_meta_data_size (GsfDocMetaData const *meta) +{ + g_return_val_if_fail (meta != NULL, 0); + return (gsize) g_hash_table_size (meta->table); +} + +/**********************************************************************/ + +/** + * gsf_doc_prop_new : + * @name : + * + * Returns a new #GsfDocProp which the caller is responsible for freeing. + * Takes ownership of @name. + **/ +GsfDocProp * +gsf_doc_prop_new (char *name) +{ + GsfDocProp *prop; + + g_return_val_if_fail (name != NULL, NULL); + + prop = g_new (GsfDocProp, 1); + prop->name = name; + prop->val = NULL; + prop->linked_to = NULL; + + return prop; +} + +/** + * gsf_doc_prop_free : + * @prop : #GsfDocProp + * + * If @prop is non NULL free the memory assosociated with it + **/ +void +gsf_doc_prop_free (GsfDocProp *prop) +{ + if (NULL != prop) { + g_free (prop->linked_to); + if (prop->val) { + g_value_unset (prop->val); + g_free (prop->val); + } + g_free (prop->name); + g_free (prop); + } +} + +/** + * gsf_doc_prop_get_name : + * @prop : #GsfDocProp + * + * Returns the name of the property, the caller should not modify the result. + **/ +char const * +gsf_doc_prop_get_name (GsfDocProp const *prop) +{ + g_return_val_if_fail (prop != NULL, NULL); + return prop->name; +} + +/** + * gsf_doc_prop_get_val : + * @prop : the property + * + * Returns the value of the property, the caller should not modify the result. + **/ +GValue const * +gsf_doc_prop_get_val (GsfDocProp const *prop) +{ + g_return_val_if_fail (prop != NULL, NULL); + return prop->val; +} + +/** + * gsf_doc_prop_set_val : + * @prop : #GsfDocProp + * @val : #GValue + * + * Assigns @val to @prop, and unsets and frees the current value. + **/ +void +gsf_doc_prop_set_val (GsfDocProp *prop, GValue *val) +{ + g_return_if_fail (prop != NULL); + + if (val != prop->val) { + g_value_unset (prop->val); + g_free (prop->val); + prop->val = val; + } +} + +/** + * gsf_doc_prop_swap_val : + * @prop : #GsfDocProp + * @val : #GValue + * + * Returns the current value of @prop, and replaces it with @val + * Caller is responsible for unsetting and freeing the result. + **/ +GValue * +gsf_doc_prop_swap_val (GsfDocProp *prop, GValue *val) +{ + GValue *old_val; + g_return_val_if_fail (prop != NULL, NULL); + + old_val = prop->val; + prop->val = val; + return old_val; +} + +/** + * gsf_doc_prop_get_link : + * @prop : #GsfDocProp + * + * Returns the current link descriptor of @prop. The result should not be + * freed or modified. + **/ +char const * +gsf_doc_prop_get_link (GsfDocProp const *prop) +{ + g_return_val_if_fail (prop != NULL, NULL); + return prop->linked_to; +} + +/** + * gsf_doc_prop_set_link : + * @prop : #GsfDocProp + * @link : + **/ +void +gsf_doc_prop_set_link (GsfDocProp *prop, char *link) +{ + g_return_if_fail (prop != NULL); + if (link != prop->linked_to) { + g_free (prop->linked_to); + prop->linked_to = link; + } +} + diff --git a/lib/libgsf-1.12.3/gsf/gsf-doc-meta-data.h b/lib/libgsf-1.12.3/gsf/gsf-doc-meta-data.h new file mode 100644 index 0000000000..bb04c4f6fe --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-doc-meta-data.h @@ -0,0 +1,62 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-doc-meta-data.h: get, set, remove custom meta properties associated with documents + * + * Copyright (C) 2002-2005 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_DOC_META_DATA_H +#define GSF_DOC_META_DATA_H + +#include +#include +#include + +G_BEGIN_DECLS + +#define GSF_DOC_META_DATA_TYPE (gsf_doc_meta_data_get_type ()) +#define GSF_DOC_META_DATA(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_DOC_META_DATA_TYPE, GsfDocMetaData)) +#define IS_GSF_DOC_META_DATA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_DOC_META_DATA_TYPE)) + +GType gsf_doc_meta_data_get_type (void); +GsfDocMetaData *gsf_doc_meta_data_new (void); +GsfDocProp *gsf_doc_meta_data_lookup (GsfDocMetaData const *meta, + char const *name); +void gsf_doc_meta_data_insert (GsfDocMetaData *meta, + char *name, GValue *value); +void gsf_doc_meta_data_remove (GsfDocMetaData *meta, + char const *name); +GsfDocProp *gsf_doc_meta_data_steal (GsfDocMetaData *meta, + char const *name); +void gsf_doc_meta_data_store (GsfDocMetaData *meta, + GsfDocProp *prop); +void gsf_doc_meta_data_foreach (GsfDocMetaData const *meta, + GHFunc func, gpointer user_data); +gsize gsf_doc_meta_data_size (GsfDocMetaData const *meta); + +GsfDocProp *gsf_doc_prop_new (char *name); +void gsf_doc_prop_free (GsfDocProp *prop); +char const *gsf_doc_prop_get_name (GsfDocProp const *prop); +GValue const *gsf_doc_prop_get_val (GsfDocProp const *prop); +void gsf_doc_prop_set_val (GsfDocProp *prop, GValue *val); +GValue *gsf_doc_prop_swap_val (GsfDocProp *prop, GValue *val); +char const *gsf_doc_prop_get_link (GsfDocProp const *prop); +void gsf_doc_prop_set_link (GsfDocProp *prop, char *link); + +G_END_DECLS + +#endif /* GSF_DOC_META_DATA_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-docprop-vector.c b/lib/libgsf-1.12.3/gsf/gsf-docprop-vector.c new file mode 100644 index 0000000000..8c3849d4e7 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-docprop-vector.c @@ -0,0 +1,158 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-docprop-vector.c: A type implementing OLE Document Property vectors using a GValueArray + * + * Copyright (C) 2004-2005 Frank Chiulli (fc-linux@cox.net) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +struct _GsfDocPropVector { + GObject parent; + + GValueArray *gva; +}; +typedef GObjectClass GsfDocPropVectorClass; + +#define GSF_DOCPROP_VECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GSF_DOCPROP_VECTOR_TYPE, GsfDocPropVectorClass)) +#define GSF_DOCPROP_VECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GSF_DOCPROP_VECTOR_TYPE, GsfDocPropVectorClass)) +#define IS_GSF_DOCPROP_VECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GSF_DOCPROP_VECTOR_TYPE)) + +static GObjectClass *parent_class; + +GValueArray * +gsf_value_get_docprop_varray (GValue const *value) +{ + GsfDocPropVector *v = gsf_value_get_docprop_vector (value); + return v ? v->gva : NULL; +} + +/** + * gsf_docprop_value_get_vector + * @value: A GValue of type #GsfDocPropVector. + * + * This function returns a pointer to the GsfDocPropVector structure in @value. + * No additional references are created. + * + * Returns: A pointer to the #GsfDocPropVector structure in @value + **/ +GsfDocPropVector * +gsf_value_get_docprop_vector (GValue const *value) +{ + g_return_val_if_fail (VAL_IS_GSF_DOCPROP_VECTOR (value), NULL); + + return (GsfDocPropVector *) g_value_get_object (value); +} + +/** + * gsf_docprop_vector_append + * @vector: The vector to which the GValue will be added + * @value: The GValue to add to @vector + * + * Insert a copy of @value as the last element of @vector. + **/ +void +gsf_docprop_vector_append (GsfDocPropVector *vector, GValue *value) +{ + g_return_if_fail (vector != NULL); + g_return_if_fail (value != NULL); + + if (G_IS_VALUE (value)) + vector->gva = g_value_array_append (vector->gva, value); +} + +/** + * gsf_docprop_vector_as_string + * @vector: The #GsfDocPropVector from which GValues will be extracted. + * + * This function returns a string which represents all the GValues in @vector. + * The caller is responsible for freeing the result. + * + * Returns: a string of comma-separated values + **/ +gchar* +gsf_docprop_vector_as_string (GsfDocPropVector *vector) +{ + gchar *rstring; + + guint i; + guint num_values; + + g_return_val_if_fail (vector != NULL, NULL); + g_return_val_if_fail (vector->gva != NULL, NULL); + + rstring = g_new0 (gchar, 1); + num_values = vector->gva->n_values; + + for (i = 0; i < num_values; i++) { + char *str; + GValue *v; + + v = g_value_array_get_nth (vector->gva, i); + str = g_strdup_value_contents (v); + rstring = g_strconcat (rstring, str, ",", NULL); + g_free (str); + g_value_unset (v); + } + + return rstring; +} + +static void +gsf_docprop_vector_finalize (GObject *obj) +{ + GsfDocPropVector *vector = (GsfDocPropVector *) obj; + if (vector->gva != NULL) { + g_value_array_free (vector->gva); + vector->gva = NULL; + } + parent_class->finalize (obj); +} + +static void +gsf_docprop_vector_class_init (GObjectClass *gobject_class) +{ + parent_class = g_type_class_peek (G_TYPE_OBJECT); + gobject_class->finalize = gsf_docprop_vector_finalize; +} + +static void +gsf_docprop_vector_init (GsfDocPropVector *vector) +{ + vector->gva = g_value_array_new (0); +} + +GSF_CLASS (GsfDocPropVector, gsf_docprop_vector, + gsf_docprop_vector_class_init, gsf_docprop_vector_init, + G_TYPE_OBJECT) + +/** + * gsf_docprop_vector_new + * + * This function creates a new gsf_docprop_vector object. + * + * Returns: GsfDocPropVector* + **/ +GsfDocPropVector* +gsf_docprop_vector_new (void) +{ + return g_object_new (GSF_DOCPROP_VECTOR_TYPE, NULL); +} + diff --git a/lib/libgsf-1.12.3/gsf/gsf-docprop-vector.h b/lib/libgsf-1.12.3/gsf/gsf-docprop-vector.h new file mode 100644 index 0000000000..e85dfa4b53 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-docprop-vector.h @@ -0,0 +1,46 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-docprop-vectors.h: A type implementing OLE Document Property vectors + * + * Copyright (C) 2004-2005 Frank Chiulli (fc-linux@cox.net) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_DOCPROP_VECTOR_H +#define GSF_DOCPROP_VECTOR_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_DOCPROP_VECTOR_TYPE (gsf_docprop_vector_get_type ()) +#define GSF_DOCPROP_VECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GSF_DOCPROP_VECTOR, GsfDocPropVector)) +#define IS_GSF_DOCPROP_VECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GSF_DOCPROP_VECTOR_TYPE)) + +typedef struct _GsfDocPropVector GsfDocPropVector; +GType gsf_docprop_vector_get_type (void); +GsfDocPropVector *gsf_docprop_vector_new (void); +void gsf_docprop_vector_append (GsfDocPropVector *vector, GValue *value); +gchar *gsf_docprop_vector_as_string (GsfDocPropVector *vector); + +#define VAL_IS_GSF_DOCPROP_VECTOR(v) (G_TYPE_CHECK_VALUE_TYPE((v), GSF_DOCPROP_VECTOR_TYPE)) +GsfDocPropVector *gsf_value_get_docprop_vector (GValue const *value); +GValueArray *gsf_value_get_docprop_varray (GValue const *value); + +G_END_DECLS + +#endif /* GSF_DOCPROP_VECTOR_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-impl-utils.h b/lib/libgsf-1.12.3/gsf/gsf-impl-utils.h new file mode 100644 index 0000000000..46d3190ed0 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-impl-utils.h @@ -0,0 +1,140 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-impl-utils.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_IMPL_UTILS_H +#define GSF_IMPL_UTILS_H + +#include +#include + +G_BEGIN_DECLS + +/* We need to do this with a version check as this header gets installed. */ +#if GLIB_CHECK_VERSION(2,7,0) +#define GSF_PARAM_STATIC (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) +#else +#define GSF_PARAM_STATIC 0 +#endif + +/*************************************************************************/ + +#define GSF_CLASS_FULL(name, prefix, base_init, base_finalize, \ + class_init, class_finalize, instance_init, parent_type, \ + abstract, interface_decl) \ +GType \ +prefix ## _get_type (void) \ +{ \ + static GType type = 0; \ + if (type == 0) { \ + static GTypeInfo const object_info = { \ + sizeof (name ## Class), \ + (GBaseInitFunc) base_init, \ + (GBaseFinalizeFunc) base_finalize, \ + (GClassInitFunc) class_init, \ + (GClassFinalizeFunc) class_finalize, \ + NULL, /* class_data */ \ + sizeof (name), \ + 0, /* n_preallocs */ \ + (GInstanceInitFunc) instance_init, \ + NULL \ + }; \ + type = g_type_register_static (parent_type, #name, \ + &object_info, (GTypeFlags) abstract); \ + interface_decl \ + } \ + return type; \ +} + +#define GSF_CLASS(name, prefix, class_init, instance_init, parent) \ + GSF_CLASS_FULL(name, prefix, NULL, NULL, class_init, NULL, \ + instance_init, parent, 0, {}) +#define GSF_CLASS_ABSTRACT(name, prefix, class_init, instance_init, parent) \ + GSF_CLASS_FULL(name, prefix, NULL, NULL, class_init, NULL, \ + instance_init, parent, G_TYPE_FLAG_ABSTRACT, {}) + +#define GSF_INTERFACE_FULL(type, init_func, iface_type) { \ + static GInterfaceInfo const iface = { \ + (GInterfaceInitFunc) init_func, NULL, NULL }; \ + g_type_add_interface_static (type, iface_type, &iface); \ +} + +#define GSF_INTERFACE(init_func, iface_type) \ + GSF_INTERFACE_FULL(type, init_func, iface_type) + +/*************************************************************************/ + +#define GSF_DYNAMIC_CLASS_FULL(name, prefix, base_init, base_finalize, \ + class_init, class_finalize, instance_init, parent_type, \ + abstract, interface_decl) \ +static GType prefix ## _type; \ + \ +GType prefix ## _get_type (void); \ +void prefix ## _register_type (GTypeModule *module); \ + \ +GType \ +prefix ## _get_type () \ +{ \ + g_return_val_if_fail (prefix ## _type != 0, 0); \ + return prefix ## _type; \ +} \ +void \ +prefix ## _register_type (GTypeModule *module) \ +{ \ + static GTypeInfo const type_info = { \ + sizeof (name ## Class), \ + (GBaseInitFunc) base_init, \ + (GBaseFinalizeFunc) base_finalize, \ + (GClassInitFunc) class_init, \ + (GClassFinalizeFunc) class_finalize, \ + NULL, /* class_data */ \ + sizeof (name), \ + 0, /* n_preallocs */ \ + (GInstanceInitFunc) instance_init, \ + NULL \ + }; \ + GType type; \ + \ + g_return_if_fail (prefix ## _type == 0); \ + \ + type = prefix ## _type = g_type_module_register_type (module, \ + parent_type, #name, &type_info, (GTypeFlags) abstract); \ + interface_decl \ +} + +#define GSF_DYNAMIC_CLASS(name, prefix, class_init, instance_init, parent) \ + GSF_DYNAMIC_CLASS_FULL(name, prefix, NULL, NULL, class_init, NULL, \ + instance_init, parent, 0, {}) +#define GSF_DYNAMIC_CLASS_ABSTRACT(name, prefix, class_init, instance_init, parent) \ + GSF_DYNAMIC_CLASS_FULL(name, prefix, NULL, NULL, class_init, NULL, \ + instance_init, parent, G_TYPE_FLAG_ABSTRACT, {}) + +#define GSF_DYNAMIC_INTERFACE_FULL(type, init_func, iface_type, module) { \ + static GInterfaceInfo const iface = { \ + (GInterfaceInitFunc) init_func, NULL, NULL }; \ + g_type_module_add_interface (module, type, iface_type, &iface); \ +} + +#define GSF_DYNAMIC_INTERFACE(init_func, iface_type, module) \ + GSF_DYNAMIC_INTERFACE_FULL(type, init_func, iface_type, module) + +G_END_DECLS + +#endif /* GSF_IMPL_UTILS_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-impl.h b/lib/libgsf-1.12.3/gsf/gsf-infile-impl.h new file mode 100644 index 0000000000..e56dc4f5f2 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-impl.h @@ -0,0 +1,50 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-impl.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INFILE_IMPL_H +#define GSF_INFILE_IMPL_H + +#include +#include +#include + +G_BEGIN_DECLS + +struct _GsfInfile { + GsfInput parent; +}; + +typedef struct { + GsfInputClass input_class; + int (*num_children) (GsfInfile *infile); + char const *(*name_by_index) (GsfInfile *infile, int i); + GsfInput *(*child_by_index) (GsfInfile *infile, + int i, GError **err); + GsfInput *(*child_by_name) (GsfInfile *infile, + char const *name, GError **err); +} GsfInfileClass; + +#define GSF_INFILE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_INFILE_TYPE, GsfInfileClass)) +#define GSF_IS_INFILE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_INFILE_TYPE)) + +G_END_DECLS + +#endif /* GSF_INFILE_IMPL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-msole.c b/lib/libgsf-1.12.3/gsf/gsf-infile-msole.c new file mode 100644 index 0000000000..3805e5402a --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-msole.c @@ -0,0 +1,949 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-msole.c : + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +/* Lots of useful information in + * http://www.aafassociation.org/html/specs/aafcontainerspec-v1.0.1.pdf + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "libgsf:msole" + +static GObjectClass *parent_class; + +typedef struct { + guint32 *block; + guint32 num_blocks; +} MSOleBAT; + +typedef struct { + char *name; + char *collation_name; + int index; + size_t size; + gboolean use_sb; + guint32 first_block; + gboolean is_directory; + GList *children; + unsigned char clsid[16]; /* 16 byte GUID used by some apps */ +} MSOleDirent; + +typedef struct { + struct { + MSOleBAT bat; + unsigned shift; + unsigned filter; + size_t size; + } bb, sb; + gsf_off_t max_block; + guint32 threshold; /* transition between small and big blocks */ + guint32 sbat_start, num_sbat; + + MSOleDirent *root_dir; + GsfInput *sb_file; + + int ref_count; +} MSOleInfo; + +struct _GsfInfileMSOle { + GsfInfile parent; + + GsfInput *input; + MSOleInfo *info; + MSOleDirent *dirent; + MSOleBAT bat; + gsf_off_t cur_block; + + struct { + guint8 *buf; + size_t buf_size; + } stream; +}; + +typedef struct { + GsfInfileClass parent_class; +} GsfInfileMSOleClass; + +#define GSF_INFILE_MSOLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_INFILE_MSOLE_TYPE, GsfInfileMSOleClass)) +#define GSF_IS_INFILE_MSOLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_INFILE_MSOLE_TYPE)) + +/* utility macros */ +#define OLE_BIG_BLOCK(index, ole) ((index) >> ole->info->bb.shift) + +static GsfInput *gsf_infile_msole_new_child (GsfInfileMSOle *parent, + MSOleDirent *dirent, GError **err); +static void ole_info_unref (MSOleInfo *info); + +/** + * ole_get_block : + * @ole : the infile + * @block : + * @buffer : optionally NULL + * + * Read a block of data from the underlying input. + * Be really anal. + **/ +static guint8 const * +ole_get_block (GsfInfileMSOle const *ole, guint32 block, guint8 *buffer) +{ + g_return_val_if_fail (block < ole->info->max_block, NULL); + + /* OLE_HEADER_SIZE is fixed at 512, but the sector containing the + * header is padded out to bb.size (sector size) when bb.size > 512. */ + if (gsf_input_seek (ole->input, + (gsf_off_t)(MAX (OLE_HEADER_SIZE, ole->info->bb.size) + (block << ole->info->bb.shift)), + G_SEEK_SET) < 0) + return NULL; + + return gsf_input_read (ole->input, ole->info->bb.size, buffer); +} + +/** + * ole_make_bat : + * @metabat : a meta bat to connect to the raw blocks (small or large) + * @size_guess : An optional guess as to how many blocks are in the file + * @block : The first block in the list. + * @res : where to store the result. + * + * Walk the linked list of the supplied block allocation table and build up a + * table for the list starting in @block. + * + * Retrurns TRUE on error. + */ +static gboolean +ole_make_bat (MSOleBAT const *metabat, size_t size_guess, guint32 block, + MSOleBAT *res) +{ + /* NOTE : Only use size as a suggestion, sometimes it is wrong */ + GArray *bat = g_array_sized_new (FALSE, FALSE, + sizeof (guint32), size_guess); + + guint8 *used = (guint8*)g_alloca (1 + metabat->num_blocks / 8); + memset (used, 0, 1 + metabat->num_blocks / 8); + + if (block < metabat->num_blocks) + do { + /* Catch cycles in the bat list */ + g_return_val_if_fail (0 == (used[block/8] & (1 << (block & 0x7))), TRUE); + used[block/8] |= 1 << (block & 0x7); + + g_array_append_val (bat, block); + block = metabat->block [block]; + } while (block < metabat->num_blocks); + + res->block = NULL; + + res->num_blocks = bat->len; + res->block = (guint32 *) (gpointer) g_array_free (bat, FALSE); + + if (block != BAT_MAGIC_END_OF_CHAIN) { + g_warning ("This OLE2 file is invalid.\n" + "The Block Allocation Table for one of the streams had %x instead of a terminator (%x).\n" + "We might still be able to extract some data, but you'll want to check the file.", + block, BAT_MAGIC_END_OF_CHAIN); + } + + return FALSE; +} + +static void +ols_bat_release (MSOleBAT *bat) +{ + if (bat->block != NULL) { + g_free (bat->block); + bat->block = NULL; + bat->num_blocks = 0; + } +} + +/** + * ole_info_read_metabat : + * @ole : + * @bats : + * + * A small utility routine to read a set of references to bat blocks + * either from the OLE header, or a meta-bat block. + * + * Returns a pointer to the element after the last position filled. + **/ +static guint32 * +ole_info_read_metabat (GsfInfileMSOle *ole, guint32 *bats, guint32 max, + guint32 const *metabat, guint32 const *metabat_end) +{ + guint8 const *bat, *end; + + for (; metabat < metabat_end; metabat++) { + bat = ole_get_block (ole, *metabat, NULL); + if (bat == NULL) + return NULL; + end = bat + ole->info->bb.size; + for ( ; bat < end ; bat += BAT_INDEX_SIZE, bats++) { + *bats = GSF_LE_GET_GUINT32 (bat); + g_return_val_if_fail (*bats < max || + *bats >= BAT_MAGIC_METABAT, NULL); + } + } + return bats; +} + +/** + * gsf_ole_get_guint32s : + * @dst : + * @src : + * @num_bytes : + * + * Copy some some raw data into an array of guint32. + **/ +static void +gsf_ole_get_guint32s (guint32 *dst, guint8 const *src, int num_bytes) +{ + for (; (num_bytes -= BAT_INDEX_SIZE) >= 0 ; src += BAT_INDEX_SIZE) + *dst++ = GSF_LE_GET_GUINT32 (src); +} + +static GsfInput * +ole_info_get_sb_file (GsfInfileMSOle *parent) +{ + MSOleBAT meta_sbat; + + if (parent->info->sb_file != NULL) + return parent->info->sb_file; + + parent->info->sb_file = gsf_infile_msole_new_child (parent, + parent->info->root_dir, NULL); + if (!parent->info->sb_file) + return NULL; + + /* avoid creating a circular reference */ + ole_info_unref (((GsfInfileMSOle *)parent->info->sb_file)->info); + + g_return_val_if_fail (parent->info->sb.bat.block == NULL, NULL); + + if (ole_make_bat (&parent->info->bb.bat, + parent->info->num_sbat, parent->info->sbat_start, &meta_sbat)) + return NULL; + + parent->info->sb.bat.num_blocks = meta_sbat.num_blocks * (parent->info->bb.size / BAT_INDEX_SIZE); + parent->info->sb.bat.block = g_new0 (guint32, parent->info->sb.bat.num_blocks); + ole_info_read_metabat (parent, parent->info->sb.bat.block, + parent->info->sb.bat.num_blocks, + meta_sbat.block, meta_sbat.block + meta_sbat.num_blocks); + ols_bat_release (&meta_sbat); + + return parent->info->sb_file; +} + +static gint +ole_dirent_cmp (MSOleDirent const *a, MSOleDirent const *b) +{ + g_return_val_if_fail (a, 0); + g_return_val_if_fail (b, 0); + + g_return_val_if_fail (a->collation_name, 0); + g_return_val_if_fail (b->collation_name, 0); + + return strcmp (b->collation_name, a->collation_name); +} + +/** + * ole_dirent_new : + * @ole : + * @entry : + * @parent : optional + * + * Parse dirent number @entry and recursively handle its siblings and children. + **/ +static MSOleDirent * +ole_dirent_new (GsfInfileMSOle *ole, guint32 entry, MSOleDirent *parent) +{ + MSOleDirent *dirent; + guint32 block, next, prev, child, size; + guint8 const *data; + guint8 type; + guint16 name_len; + + if (entry >= DIRENT_MAGIC_END) + return NULL; + + block = OLE_BIG_BLOCK (entry * DIRENT_SIZE, ole); + + g_return_val_if_fail (block < ole->bat.num_blocks, NULL); + data = ole_get_block (ole, ole->bat.block [block], NULL); + if (data == NULL) + return NULL; + data += (DIRENT_SIZE * entry) % ole->info->bb.size; + + type = GSF_LE_GET_GUINT8 (data + DIRENT_TYPE); + if (type != DIRENT_TYPE_DIR && + type != DIRENT_TYPE_FILE && + type != DIRENT_TYPE_ROOTDIR) { + g_warning ("Unknown stream type 0x%x", type); + return NULL; + } + + /* It looks like directory (and root directory) sizes are sometimes bogus */ + size = GSF_LE_GET_GUINT32 (data + DIRENT_FILE_SIZE); + g_return_val_if_fail (type == DIRENT_TYPE_DIR || type == DIRENT_TYPE_ROOTDIR || + size <= (guint32)ole->input->size, NULL); + + dirent = g_new0 (MSOleDirent, 1); + dirent->index = entry; + dirent->size = size; + /* Store the class id which is 16 byte identifier used by some apps */ + memcpy(dirent->clsid, data + DIRENT_CLSID, sizeof(dirent->clsid)); + + /* root dir is always big block */ + dirent->use_sb = parent && (size < ole->info->threshold); + dirent->first_block = (GSF_LE_GET_GUINT32 (data + DIRENT_FIRSTBLOCK)); + dirent->is_directory = (type != DIRENT_TYPE_FILE); + dirent->children = NULL; + prev = GSF_LE_GET_GUINT32 (data + DIRENT_PREV); + next = GSF_LE_GET_GUINT32 (data + DIRENT_NEXT); + child = GSF_LE_GET_GUINT32 (data + DIRENT_CHILD); + name_len = GSF_LE_GET_GUINT16 (data + DIRENT_NAME_LEN); + dirent->name = NULL; + if (0 < name_len && name_len <= DIRENT_MAX_NAME_SIZE) { + gunichar2 uni_name [DIRENT_MAX_NAME_SIZE+1]; + gchar const *end; + int i; + + /* !#%!@$#^ + * Sometimes, rarely, people store the stream name as ascii + * rather than utf16. Do a validation first just in case. + */ + if (!g_utf8_validate (data, -1, &end) || + ((guint8 const *)end - data + 1) != name_len) { + /* be wary about endianness */ + for (i = 0 ; i < name_len ; i += 2) + uni_name [i/2] = GSF_LE_GET_GUINT16 (data + i); + uni_name [i/2] = 0; + + dirent->name = g_utf16_to_utf8 (uni_name, -1, NULL, NULL, NULL); + } else + dirent->name = g_strndup ((gchar *)data, (gsize)((guint8 const *)end - data + 1)); + } + /* be really anal in the face of screwups */ + if (dirent->name == NULL) + dirent->name = g_strdup (""); + dirent->collation_name = g_utf8_collate_key (dirent->name, -1); + +#if 0 + printf ("%c '%s' :\tsize = %d\tfirst_block = 0x%x\n", + dirent->is_directory ? 'd' : ' ', + dirent->name, dirent->size, dirent->first_block); +#endif + + if (parent != NULL) + parent->children = g_list_insert_sorted (parent->children, + dirent, (GCompareFunc)ole_dirent_cmp); + + /* NOTE : These links are a tree, not a linked list */ + if (prev == entry) { + g_warning ("Invalid OLE file with a cycle in its directory tree"); + } else + ole_dirent_new (ole, prev, parent); + if (next == entry) { + g_warning ("Invalid OLE file with a cycle in its directory tree"); + } else + ole_dirent_new (ole, next, parent); + + if (dirent->is_directory) + ole_dirent_new (ole, child, dirent); + else if (child != DIRENT_MAGIC_END) + g_warning ("A non directory stream with children ?"); + + return dirent; +} + +static void +ole_dirent_free (MSOleDirent *dirent) +{ + GList *tmp; + g_return_if_fail (dirent != NULL); + + g_free (dirent->name); + g_free (dirent->collation_name); + + for (tmp = dirent->children; tmp; tmp = tmp->next) + ole_dirent_free ((MSOleDirent *)tmp->data); + g_list_free (dirent->children); + g_free (dirent); +} + +/*****************************************************************************/ + +static void +ole_info_unref (MSOleInfo *info) +{ + if (info->ref_count-- != 1) + return; + + ols_bat_release (&info->bb.bat); + ols_bat_release (&info->sb.bat); + if (info->root_dir != NULL) { + ole_dirent_free (info->root_dir); + info->root_dir = NULL; + } + if (info->sb_file != NULL) { + g_object_unref (G_OBJECT (info->sb_file)); + info->sb_file = NULL; + } + g_free (info); +} + +static MSOleInfo * +ole_info_ref (MSOleInfo *info) +{ + info->ref_count++; + return info; +} + +/** + * ole_dup : + * @src : + * + * Utility routine to _partially_ replicate a file. It does NOT copy the bat + * blocks, or init the dirent. + * + * Return value: the partial duplicate. + **/ +static GsfInfileMSOle * +ole_dup (GsfInfileMSOle const *src, GError **err) +{ + GsfInfileMSOle *dst; + GsfInput *input; + + g_return_val_if_fail (src != NULL, NULL); + + input = gsf_input_dup (src->input, err); + if (input == NULL) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Failed to duplicate input stream"); + return NULL; + } + + dst = (GsfInfileMSOle *)g_object_new (GSF_INFILE_MSOLE_TYPE, NULL); + dst->input = input; + dst->info = ole_info_ref (src->info); + + /* buf and buf_size are initialized to NULL */ + + return dst; +} + +/** + * ole_init_info : + * @ole : + * @err : optionally NULL + * + * Read an OLE header and do some sanity checking + * along the way. + * + * Return value: TRUE on error setting @err if it is supplied. + **/ +static gboolean +ole_init_info (GsfInfileMSOle *ole, GError **err) +{ + static guint8 const signature[] = + { 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1 }; + guint8 const *header, *tmp; + guint32 *metabat = NULL; + MSOleInfo *info; + guint32 bb_shift, sb_shift, num_bat, num_metabat, last, dirent_start; + guint32 metabat_block, *ptr; + + /* check the header */ + if (gsf_input_seek (ole->input, 0, G_SEEK_SET) || + NULL == (header = gsf_input_read (ole->input, OLE_HEADER_SIZE, NULL)) || + 0 != memcmp (header, signature, sizeof (signature))) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "No OLE2 signature"); + return TRUE; + } + + bb_shift = GSF_LE_GET_GUINT16 (header + OLE_HEADER_BB_SHIFT); + sb_shift = GSF_LE_GET_GUINT16 (header + OLE_HEADER_SB_SHIFT); + num_bat = GSF_LE_GET_GUINT32 (header + OLE_HEADER_NUM_BAT); + dirent_start = GSF_LE_GET_GUINT32 (header + OLE_HEADER_DIRENT_START); + metabat_block = GSF_LE_GET_GUINT32 (header + OLE_HEADER_METABAT_BLOCK); + num_metabat = GSF_LE_GET_GUINT32 (header + OLE_HEADER_NUM_METABAT); + + /* Some sanity checks + * 1) There should always be at least 1 BAT block + * 2) It makes no sense to have a block larger than 2^31 for now. + * Maybe relax this later, but not much. + */ + if (6 > bb_shift || bb_shift >= 31 || sb_shift > bb_shift) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Unreasonable block sizes"); + return TRUE; + } + + info = g_new0 (MSOleInfo, 1); + ole->info = info; + + info->ref_count = 1; + info->bb.shift = bb_shift; + info->bb.size = 1 << info->bb.shift; + info->bb.filter = info->bb.size - 1; + info->sb.shift = sb_shift; + info->sb.size = 1 << info->sb.shift; + info->sb.filter = info->sb.size - 1; + info->threshold = GSF_LE_GET_GUINT32 (header + OLE_HEADER_THRESHOLD); + info->sbat_start = GSF_LE_GET_GUINT32 (header + OLE_HEADER_SBAT_START); + info->num_sbat = GSF_LE_GET_GUINT32 (header + OLE_HEADER_NUM_SBAT); + info->max_block = (gsf_input_size (ole->input) - OLE_HEADER_SIZE) / info->bb.size; + info->sb_file = NULL; + + if (info->num_sbat == 0 && info->sbat_start != BAT_MAGIC_END_OF_CHAIN) { + g_warning ("There is are not supposed to be any blocks in the small block allocation table, yet there is a link to some. Ignoring it."); + } + + /* very rough heuristic, just in case */ + if (num_bat < info->max_block) { + info->bb.bat.num_blocks = num_bat * (info->bb.size / BAT_INDEX_SIZE); + info->bb.bat.block = g_new0 (guint32, info->bb.bat.num_blocks); + + metabat = (guint32 *)g_alloca (MAX (info->bb.size, OLE_HEADER_SIZE)); + + /* Reading the elements invalidates this memory, make copy */ + gsf_ole_get_guint32s (metabat, header + OLE_HEADER_START_BAT, + OLE_HEADER_SIZE - OLE_HEADER_START_BAT); + last = num_bat; + if (last > OLE_HEADER_METABAT_SIZE) + last = OLE_HEADER_METABAT_SIZE; + + ptr = ole_info_read_metabat (ole, info->bb.bat.block, + info->bb.bat.num_blocks, metabat, metabat + last); + num_bat -= last; + } else + ptr = NULL; + + last = (info->bb.size - BAT_INDEX_SIZE) / BAT_INDEX_SIZE; + while (ptr != NULL && num_metabat-- > 0) { + tmp = ole_get_block (ole, metabat_block, NULL); + if (tmp == NULL) { + ptr = NULL; + break; + } + + /* Reading the elements invalidates this memory, make copy */ + gsf_ole_get_guint32s (metabat, tmp, (int)info->bb.size); + + if (num_metabat == 0) { + if (last < num_bat) { + /* there should be less that a full metabat block + * remaining */ + ptr = NULL; + break; + } + last = num_bat; + } else if (num_metabat > 0) { + metabat_block = metabat[last]; + num_bat -= last; + } + + ptr = ole_info_read_metabat (ole, ptr, + info->bb.bat.num_blocks, metabat, metabat + last); + } + + if (ptr == NULL) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Inconsistent block allocation table"); + return TRUE; + } + + /* Read the directory's bat, we do not know the size */ + if (ole_make_bat (&info->bb.bat, 0, dirent_start, &ole->bat)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Problems making block allocation table"); + return TRUE; + } + + /* Read the directory */ + ole->dirent = info->root_dir = ole_dirent_new (ole, 0, NULL); + if (ole->dirent == NULL) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Problems reading directory"); + return TRUE; + } + + return FALSE; +} + +static void +gsf_infile_msole_finalize (GObject *obj) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (obj); + + if (ole->input != NULL) { + g_object_unref (G_OBJECT (ole->input)); + ole->input = NULL; + } + if (ole->info != NULL && + ole->info->sb_file != (GsfInput *)ole) { + ole_info_unref (ole->info); + ole->info = NULL; + } + ols_bat_release (&ole->bat); + + g_free (ole->stream.buf); + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_infile_msole_dup (GsfInput *src_input, GError **err) +{ + GsfInfileMSOle const *src = GSF_INFILE_MSOLE (src_input); + GsfInfileMSOle *dst = ole_dup (src, err); + + if (dst == NULL) + return NULL; + + if (src->bat.block != NULL) { + dst->bat.block = g_new (guint32, src->bat.num_blocks), + memcpy (dst->bat.block, src->bat.block, + sizeof (guint32) * src->bat.num_blocks); + } + dst->bat.num_blocks = src->bat.num_blocks; + dst->dirent = src->dirent; + + return GSF_INPUT (dst); +} + +static guint8 const * +gsf_infile_msole_read (GsfInput *input, size_t num_bytes, guint8 *buffer) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (input); + gsf_off_t first_block, last_block, raw_block, offset, i; + guint8 const *data; + guint8 *ptr; + size_t count; + + /* small block files are preload */ + if (ole->dirent != NULL && ole->dirent->use_sb) { + if (buffer != NULL) { + memcpy (buffer, ole->stream.buf + input->cur_offset, num_bytes); + return buffer; + } + return ole->stream.buf + input->cur_offset; + } + + /* GsfInput guarantees that num_bytes > 0 */ + first_block = OLE_BIG_BLOCK (input->cur_offset, ole); + last_block = OLE_BIG_BLOCK (input->cur_offset + num_bytes - 1, ole); + offset = input->cur_offset & ole->info->bb.filter; + + /* optimization : are all the raw blocks contiguous */ + i = first_block; + raw_block = ole->bat.block [i]; + while (++i <= last_block && ++raw_block == ole->bat.block [i]) + ; + if (i > last_block) { + /* optimization don't seek if we don't need to */ + if (ole->cur_block != first_block) { + if (gsf_input_seek (ole->input, + (gsf_off_t)(MAX (OLE_HEADER_SIZE, ole->info->bb.size) + (ole->bat.block [first_block] << ole->info->bb.shift) + offset), + G_SEEK_SET) < 0) + return NULL; + } + ole->cur_block = last_block; + return gsf_input_read (ole->input, num_bytes, buffer); + } + + /* damn, we need to copy it block by block */ + if (buffer == NULL) { + if (ole->stream.buf_size < num_bytes) { + if (ole->stream.buf != NULL) + g_free (ole->stream.buf); + ole->stream.buf_size = num_bytes; + ole->stream.buf = g_new (guint8, num_bytes); + } + buffer = ole->stream.buf; + } + + ptr = buffer; + for (i = first_block ; i <= last_block ; i++ , ptr += count, num_bytes -= count) { + count = ole->info->bb.size - offset; + if (count > num_bytes) + count = num_bytes; + data = ole_get_block (ole, ole->bat.block [i], NULL); + if (data == NULL) + return NULL; + + /* TODO : this could be optimized to avoid the copy */ + memcpy (ptr, data + offset, count); + offset = 0; + } + ole->cur_block = BAT_MAGIC_UNUSED; + + return buffer; +} + +static gboolean +gsf_infile_msole_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (input); + + (void) offset; + (void) whence; + + ole->cur_block = BAT_MAGIC_UNUSED; + return FALSE; +} + +static GsfInput * +gsf_infile_msole_new_child (GsfInfileMSOle *parent, + MSOleDirent *dirent, GError **err) +{ + GsfInfileMSOle *child; + MSOleInfo *info; + MSOleBAT const *metabat; + GsfInput *sb_file = NULL; + size_t size_guess; + + child = ole_dup (parent, err); + if (!child) + return NULL; + + child->dirent = dirent; + gsf_input_set_size (GSF_INPUT (child), (gsf_off_t) dirent->size); + + /* The root dirent defines the small block file */ + if (dirent->index != 0) { + gsf_input_set_name (GSF_INPUT (child), dirent->name); + gsf_input_set_container (GSF_INPUT (child), GSF_INFILE (parent)); + + if (dirent->is_directory) { + /* be wary. It seems as if some implementations pretend that the + * directories contain data */ + gsf_input_set_size (GSF_INPUT (child), 0); + return GSF_INPUT (child); + } + } + + info = parent->info; + + /* build the bat */ + if (dirent->use_sb) { + metabat = &info->sb.bat; + size_guess = dirent->size >> info->sb.shift; + sb_file = ole_info_get_sb_file (parent); + if (!sb_file) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Failed to access child"); + g_object_unref (G_OBJECT (child)); + return NULL; + } + } else { + metabat = &info->bb.bat; + size_guess = dirent->size >> info->bb.shift; + } + if (ole_make_bat (metabat, size_guess + 1, dirent->first_block, &child->bat)) { + g_object_unref (G_OBJECT (child)); + return NULL; + } + + if (dirent->use_sb) { + unsigned i; + guint8 const *data; + + g_return_val_if_fail (sb_file != NULL, NULL); + + child->stream.buf_size = info->threshold; + child->stream.buf = g_new (guint8, info->threshold); + + for (i = 0 ; i < child->bat.num_blocks; i++) + if (gsf_input_seek (GSF_INPUT (sb_file), + (gsf_off_t)(child->bat.block [i] << info->sb.shift), G_SEEK_SET) < 0 || + (data = gsf_input_read (GSF_INPUT (sb_file), + info->sb.size, + child->stream.buf + (i << info->sb.shift))) == NULL) { + + g_warning ("failure reading block %d", i); + + g_object_unref (G_OBJECT (child)); + return NULL; + } + } + + return GSF_INPUT (child); +} + +static GsfInput * +gsf_infile_msole_child_by_index (GsfInfile *infile, int target, GError **err) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (infile); + GList *p; + + for (p = ole->dirent->children; p != NULL ; p = p->next) + if (target-- <= 0) + return gsf_infile_msole_new_child (ole, + (MSOleDirent *)p->data, err); + return NULL; +} + +static char const * +gsf_infile_msole_name_by_index (GsfInfile *infile, int target) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (infile); + GList *p; + + for (p = ole->dirent->children; p != NULL ; p = p->next) + if (target-- <= 0) + return ((MSOleDirent *)p->data)->name; + return NULL; +} + +static GsfInput * +gsf_infile_msole_child_by_name (GsfInfile *infile, char const *name, GError **err) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (infile); + GList *p; + + for (p = ole->dirent->children; p != NULL ; p = p->next) { + MSOleDirent *dirent = p->data; + if (dirent->name != NULL && !strcmp (name, dirent->name)) + return gsf_infile_msole_new_child (ole, dirent, err); + } + return NULL; +} + +static int +gsf_infile_msole_num_children (GsfInfile *infile) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (infile); + + g_return_val_if_fail (ole->dirent != NULL, -1); + + if (!ole->dirent->is_directory) + return -1; + return g_list_length (ole->dirent->children); +} + +static void +gsf_infile_msole_init (GObject *obj) +{ + GsfInfileMSOle *ole = GSF_INFILE_MSOLE (obj); + + ole->input = NULL; + ole->info = NULL; + ole->bat.block = NULL; + ole->bat.num_blocks = 0; + ole->cur_block = BAT_MAGIC_UNUSED; + ole->stream.buf = NULL; + ole->stream.buf_size = 0; +} + +static void +gsf_infile_msole_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + GsfInfileClass *infile_class = GSF_INFILE_CLASS (gobject_class); + + gobject_class->finalize = gsf_infile_msole_finalize; + input_class->Dup = gsf_infile_msole_dup; + input_class->Read = gsf_infile_msole_read; + input_class->Seek = gsf_infile_msole_seek; + infile_class->num_children = gsf_infile_msole_num_children; + infile_class->name_by_index = gsf_infile_msole_name_by_index; + infile_class->child_by_index = gsf_infile_msole_child_by_index; + infile_class->child_by_name = gsf_infile_msole_child_by_name; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInfileMSOle, gsf_infile_msole, + gsf_infile_msole_class_init, gsf_infile_msole_init, + GSF_INFILE_TYPE) + +/** + * gsf_infile_msole_new : + * @source : + * @err : + * + * Opens the root directory of an MS OLE file. + * NOTE : adds a reference to @source + * + * Returns : the new ole file handler + **/ +GsfInfile * +gsf_infile_msole_new (GsfInput *source, GError **err) +{ + GsfInfileMSOle *ole; + gsf_off_t calling_pos; + + g_return_val_if_fail (GSF_IS_INPUT (source), NULL); + + ole = (GsfInfileMSOle *)g_object_new (GSF_INFILE_MSOLE_TYPE, NULL); + ole->input = gsf_input_proxy_new (source); + gsf_input_set_size (GSF_INPUT (ole), 0); + + calling_pos = gsf_input_tell (source); + if (ole_init_info (ole, err)) { + /* It's not clear to me why we do this. And if this + fails, there's really nothing we can do. */ + (void)gsf_input_seek (source, calling_pos, G_SEEK_SET); + + g_object_unref (G_OBJECT (ole)); + return NULL; + } + + return GSF_INFILE (ole); +} + +/** + * gsf_infile_msole_get_class_id : + * @ole: a #GsfInfileMSOle + * @res: 16 byte identifier (often a GUID in MS Windows apps) + * + * Retrieves the 16 byte indentifier (often a GUID in MS Windows apps) + * stored within the directory associated with @ole and stores it in @res. + * + * Returns TRUE on success + **/ +gboolean +gsf_infile_msole_get_class_id (GsfInfileMSOle const *ole, guint8 *res) +{ + g_return_val_if_fail (ole != NULL && ole->dirent != NULL, FALSE); + + memcpy (res, ole->dirent->clsid, + sizeof(ole->dirent->clsid)); + return TRUE; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-msole.h b/lib/libgsf-1.12.3/gsf/gsf-infile-msole.h new file mode 100644 index 0000000000..529c07ead3 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-msole.h @@ -0,0 +1,42 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-msole.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INFILE_MSOLE_H +#define GSF_INFILE_MSOLE_H + +#include + +G_BEGIN_DECLS + +typedef struct _GsfInfileMSOle GsfInfileMSOle; + +#define GSF_INFILE_MSOLE_TYPE (gsf_infile_msole_get_type ()) +#define GSF_INFILE_MSOLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INFILE_MSOLE_TYPE, GsfInfileMSOle)) +#define GSF_IS_INFILE_MSOLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INFILE_MSOLE_TYPE)) + +GType gsf_infile_msole_get_type (void); +GsfInfile *gsf_infile_msole_new (GsfInput *source, GError **err); +gboolean gsf_infile_msole_get_class_id (GsfInfileMSOle const *ole, + guint8 *res); + +G_END_DECLS + +#endif /* GSF_INFILE_MSOLE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-msvba.c b/lib/libgsf-1.12.3/gsf/gsf-infile-msvba.c new file mode 100644 index 0000000000..c5c4a7edde --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-msvba.c @@ -0,0 +1,441 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-msvba.c : + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +/* Info extracted from + * svx/source/msfilter/msvbasic.cxx + * Costin Raiu, Kaspersky Labs, 'Apple of Discord' + * Virus bulletin's bontchev.pdf, svajcer.pdf + * + * and lots and lots of reading. There are lots of pieces missing still + * but the structure seems to hold together. + */ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static GObjectClass *parent_class; + +struct _GsfInfileMSVBA { + GObject parent; + + GsfInfile *source; + GList *children; +}; +typedef GObjectClass GsfInfileMSVBAClass; + +#define GSF_INFILE_MSVBA_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_INFILE_MSVBA_TYPE, GsfInfileMSVBAClass)) +#define GSF_IS_INFILE_MSVBA_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_INFILE_MSVBA_TYPE)) + + +static guint8 * +gsf_vba_inflate (GsfInput *input, gsf_off_t offset, int *size, gboolean add_null_terminator) +{ + GByteArray *res = gsf_msole_inflate (input, offset + 3); + if (res == NULL) + return NULL; + *size = res->len; + if (add_null_terminator) + g_byte_array_append (res, "", 1); + return g_byte_array_free (res, FALSE); +} + +static void +vba_extract_module_source (GsfInfileMSVBA *vba, char const *name, guint32 src_offset) +{ + GsfInput *module; + guint8 *src_code; + int inflated_size; + + g_return_if_fail (name != NULL); + + module = gsf_infile_child_by_name (vba->source, name); + if (module == NULL) + return; + + src_code = gsf_vba_inflate (module, (gsf_off_t) src_offset, &inflated_size, TRUE); + if (src_code != NULL) { + printf ("======================\n%s\n>>>>>>\n%s<<<<<<\n", name, src_code); + g_free (src_code); + } else + g_warning ("Problems extracting the source for %s @ %u", name, src_offset); + + g_object_unref (module); + module = NULL; +} + +/** + * vba_dir_read : + * @vba : + * @err : optionally NULL + * + * Read an VBA dirctory and its project file. + * along the way. + * + * Return value: FALSE on error setting @err if it is supplied. + **/ +static gboolean +vba_dir_read (GsfInfileMSVBA *vba, GError **err) +{ + int inflated_size, element_count = -1; + char const *msg = NULL; + char *name, *elem_stream = NULL; + guint32 len; + guint16 tag; + guint8 *inflated_data, *end, *ptr; + GsfInput *dir; + gboolean failed = TRUE; + + /* 0. get the stream */ + dir = gsf_infile_child_by_name (vba->source, "dir"); + if (dir == NULL) { + msg = "Can't find the VBA directory stream."; + goto fail_stream; + } + + /* 1. decompress it */ + ptr = inflated_data = gsf_vba_inflate (dir, 0, &inflated_size, FALSE); + if (inflated_data == NULL) + goto fail_compression; + end = inflated_data + inflated_size; + + /* 2. GUESS : based on several xls with macros and XL8GARY this looks like a + * series of sized records. Be _extra_ careful */ + do { + /* I have seen + * type len data + * 1 4 1 0 0 0 + * 2 4 9 4 0 0 + * 3 2 4 e4 + * 4 project name + * 5 0 + * 6 0 + * 7 4 + * 8 4 + * 0x3d 0 + * 0x40 0 + * 0x14 4 9 4 0 0 + * + * 0x0f == number of elements + * 0x1c == (Size 0) + * 0x1e == (Size 4) + * 0x48 == (Size 0) + * 0x31 == stream offset of the compressed source ! + * + * 0x16 == an ascii dependency name + * 0x3e == a unicode dependency name + * 0x33 == a classid for a dependency with no trialing data + * + * 0x2f == a dummy classid + * 0x30 == a classid + * 0x0d == the classid + * 0x2f, and 0x0d appear contain + * uint32 classid_size; + * + * 00 00 00 00 00 00 + * and sometimes some trailing junk + **/ + if ((ptr + 6) > end) { + msg = "vba project header problem"; + goto fail_content; + } + tag = GSF_LE_GET_GUINT16 (ptr); + len = GSF_LE_GET_GUINT32 (ptr + 2); + + ptr += 6; + if ((ptr + len) > end) { + msg = "vba project header problem"; + goto fail_content; + } + + switch (tag) { + case 4: + name = g_strndup (ptr, len); + g_print ("Project Name : '%s'\n", name); + g_free (name); + break; + case 9: + g_print ("Quirk - duff tag length"); + len += 2; + break; + case 0xf : + if (len != 2) { + g_warning ("element count is not what we expected"); + break; + } + if (element_count >= 0) { + g_warning ("More than one element count ??"); + break; + } + element_count = GSF_LE_GET_GUINT16 (ptr); + break; + + /* dependencies */ + case 0x0d : break; + case 0x2f : break; + case 0x30 : break; + case 0x33 : break; + case 0x3e : break; + case 0x16: +#if 0 + name = g_strndup (ptr, len); + g_print ("Depend Name : '%s'\n", name); + g_free (name); +#endif + break; + + /* elements */ + case 0x47 : break; + case 0x32 : break; + case 0x1a: +#if 0 + name = g_strndup (ptr, len); + g_print ("Element Name : '%s'\n", name); + g_free (name); +#endif + break; + case 0x19: elem_stream = g_strndup (ptr, len); break; + + case 0x31: + if (len != 4) { + g_warning ("source offset property is not what we expected"); + break; + } + vba_extract_module_source (vba, elem_stream, + GSF_LE_GET_GUINT32 (ptr)); + g_free (elem_stream); elem_stream = NULL; + element_count--; + break; + + default : +#if 0 + g_print ("tag %hx : len %u\n", tag, len); + gsf_mem_dump (ptr, len); +#endif + break; + } + + ptr += len; + } while (tag != 0x10); + g_free (elem_stream); + + if (element_count != 0) + g_warning ("Number of elements differs from expectations"); + + failed = FALSE; + +fail_content : + g_free (inflated_data); +fail_compression : + g_object_unref (G_OBJECT (dir)); +fail_stream : + + if (failed) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, msg); + return FALSE; + } + return TRUE; +} + +#define VBA56_DIRENT_RECORD_COUNT (2 + /* magic */ \ + 4 + /* version */ \ + 2 + /* 0x00 0xff */ \ + 22) /* unknown */ +#define VBA56_DIRENT_HEADER_SIZE (VBA56_DIRENT_RECORD_COUNT + \ + 2 + /* type1 record count */ \ + 2) /* unknown */ + +#if 0 +/** + * vba_project_read : + * @vba : + * @err : optionally NULL + * + * Read an VBA dirctory and its project file. + * along the way. + * + * Return value: FALSE on error setting @err if it is supplied. + **/ +static gboolean +vba_project_read (GsfInfileMSVBA *vba, GError **err) +{ + /* NOTE : This seems constant, find some confirmation */ + static guint8 const signature[] = { 0xcc, 0x61 }; + static struct { + guint8 const signature[4]; + char const * const name; + int const vba_version; + gboolean const is_mac; + } const versions [] = { + { { 0x5e, 0x00, 0x00, 0x01 }, "Office 97", 5, FALSE}, + { { 0x5f, 0x00, 0x00, 0x01 }, "Office 97 SR1", 5, FALSE }, + { { 0x65, 0x00, 0x00, 0x01 }, "Office 2000 alpha?", 6, FALSE }, + { { 0x6b, 0x00, 0x00, 0x01 }, "Office 2000 beta?", 6, FALSE }, + { { 0x6d, 0x00, 0x00, 0x01 }, "Office 2000", 6, FALSE }, + { { 0x6f, 0x00, 0x00, 0x01 }, "Office 2000", 6, FALSE }, + { { 0x70, 0x00, 0x00, 0x01 }, "Office XP beta 1/2", 6, FALSE }, + { { 0x73, 0x00, 0x00, 0x01 }, "Office XP", 6, FALSE }, + { { 0x76, 0x00, 0x00, 0x01 }, "Office 2003", 6, FALSE }, + { { 0x79, 0x00, 0x00, 0x01 }, "Office 2003", 6, FALSE }, + { { 0x60, 0x00, 0x00, 0x0e }, "MacOffice 98", 5, TRUE }, + { { 0x62, 0x00, 0x00, 0x0e }, "MacOffice 2001", 5, TRUE }, + { { 0x63, 0x00, 0x00, 0x0e }, "MacOffice X", 6, TRUE }, + { { 0x64, 0x00, 0x00, 0x0e }, "MacOffice 2004", 6, TRUE }, + }; + + guint8 const *data; + unsigned i, count, len; + gunichar2 *uni_name; + char *name; + GsfInput *dir; + + dir = gsf_infile_child_by_name (vba->source, "dir"); + if (dir == NULL) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Can't find the VBA directory stream."); + return FALSE; + } + + if (gsf_input_seek (dir, 0, G_SEEK_SET) || + NULL == (data = gsf_input_read (dir, VBA56_DIRENT_HEADER_SIZE, NULL)) || + 0 != memcmp (data, signature, sizeof (signature))) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "No VBA signature"); + return FALSE; + } + + for (i = 0 ; i < G_N_ELEMENTS (versions); i++) + if (!memcmp (data+2, versions[i].signature, 4)) + break; + + if (i >= G_N_ELEMENTS (versions)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Unknown VBA version signature 0x%x%x%x%x", + data[2], data[3], data[4], data[5]); + return FALSE; + } + + puts (versions[i].name); + + /* these depend strings seem to come in 2 blocks */ + count = GSF_LE_GET_GUINT16 (data + VBA56_DIRENT_RECORD_COUNT); + for (; count > 0 ; count--) { + if (NULL == ((data = gsf_input_read (dir, 2, NULL)))) + break; + len = GSF_LE_GET_GUINT16 (data); + if (NULL == ((data = gsf_input_read (dir, len, NULL)))) { + printf ("len == 0x%x ??\n", len); + break; + } + + uni_name = g_new0 (gunichar2, len/2 + 1); + + /* be wary about endianness */ + for (i = 0 ; i < len ; i += 2) + uni_name [i/2] = GSF_LE_GET_GUINT16 (data + i); + name = g_utf16_to_utf8 (uni_name, -1, NULL, NULL, NULL); + g_free (uni_name); + + printf ("%d %s\n", count, name); + + /* ignore this blob ???? */ + if (!strncmp ("*\\G", name, 3)) { + if (NULL == ((data = gsf_input_read (dir, 12, NULL)))) { + printf ("len == 0x%x ??\n", len); + break; + } + } + + g_free (name); + } + + g_return_val_if_fail (count == 0, FALSE); + + return TRUE; +} +#endif + +static void +gsf_infile_msvba_finalize (GObject *obj) +{ + GsfInfileMSVBA *vba = GSF_INFILE_MSVBA (obj); + + if (vba->source != NULL) { + g_object_unref (G_OBJECT (vba->source)); + vba->source = NULL; + } + parent_class->finalize (obj); +} + +static void +gsf_infile_msvba_init (GObject *obj) +{ + GsfInfileMSVBA *vba = GSF_INFILE_MSVBA (obj); + + vba->source = NULL; + vba->children = NULL; +} + +static void +gsf_infile_msvba_class_init (GObjectClass *gobject_class) +{ + gobject_class->finalize = gsf_infile_msvba_finalize; + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInfileMSVBA, gsf_infile_msvba, + gsf_infile_msvba_class_init, gsf_infile_msvba_init, + G_TYPE_OBJECT) + +GsfInfile * +gsf_infile_msvba_new (GsfInfile *source, GError **err) +{ + GsfInfileMSVBA *vba; + + g_return_val_if_fail (GSF_IS_INFILE (source), NULL); + + vba = g_object_new (GSF_INFILE_MSVBA_TYPE, NULL); + g_object_ref (G_OBJECT (source)); + vba->source = source; + + /* vba_project_read (vba, err); */ + + /* find the name offset pairs */ + if (vba_dir_read (vba, err)) + return GSF_INFILE (vba); + + if (err != NULL && *err == NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Unable to parse VBA header"); + + g_object_unref (G_OBJECT (vba)); + return NULL; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-msvba.h b/lib/libgsf-1.12.3/gsf/gsf-infile-msvba.h new file mode 100644 index 0000000000..87558f742c --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-msvba.h @@ -0,0 +1,42 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-msvba.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INFILE_MSVBA_H +#define GSF_INFILE_MSVBA_H + +#include +#include + +G_BEGIN_DECLS + +typedef struct _GsfInfileMSVBA GsfInfileMSVBA; + +#define GSF_INFILE_MSVBA_TYPE (gsf_infile_msvba_get_type ()) +#define GSF_INFILE_MSVBA(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INFILE_MSVBA_TYPE, GsfInfileMSVBA)) +#define GSF_IS_INFILE_MSVBA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INFILE_MSVBA_TYPE)) + +GType gsf_infile_msvba_get_type (void); + +GsfInfile *gsf_infile_msvba_new (GsfInfile *source, GError **err); + +G_END_DECLS + +#endif /* GSF_INFILE_MSVBA_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-stdio.c b/lib/libgsf-1.12.3/gsf/gsf-infile-stdio.c new file mode 100644 index 0000000000..5473cca17e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-stdio.c @@ -0,0 +1,201 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-stdio.c: read a directory tree + * + * Copyright (C) 2004 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#include +#include + +static GObjectClass *parent_class; + +struct _GsfInfileStdio { + GsfInfile parent; + char *root; + GList *children; +}; + +typedef GsfInfileClass GsfInfileStdioClass; + +static void +gsf_infile_stdio_finalize (GObject *obj) +{ + GsfInfileStdio *ifs = GSF_INFILE_STDIO (obj); + + g_free (ifs->root); + g_list_foreach (ifs->children, (GFunc) g_free, NULL); + g_list_free (ifs->children); + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_infile_stdio_dup (GsfInput *src_input, G_GNUC_UNUSED GError **err) +{ + GsfInfileStdio *src = GSF_INFILE_STDIO (src_input); + GsfInfileStdio *dst = g_object_new (gsf_infile_stdio_get_type(), NULL); + GList *ptr; + + dst->root = g_strdup (src->root); + + for (ptr = src->children; ptr != NULL ; ptr = ptr->next) + dst->children = g_list_prepend (dst->children, + g_strdup (ptr->data)); + dst->children = g_list_reverse (dst->children); + return GSF_INPUT (dst); +} + +static guint8 const * +gsf_infile_stdio_read (G_GNUC_UNUSED GsfInput *input, G_GNUC_UNUSED size_t num_bytes, + G_GNUC_UNUSED guint8 *buffer) +{ + return NULL; +} + +static GsfInput * +open_child (GsfInfileStdio *ifs, char const *name, GError **err) +{ + GsfInput *child; + char *path = g_build_filename (ifs->root, name, NULL); + + if (g_file_test (path, G_FILE_TEST_IS_DIR)) + child = (GsfInput *) gsf_infile_stdio_new (path, err); + else + child = gsf_input_stdio_new (path, err); + g_free (path); + + return child; +} + +static GsfInput * +gsf_infile_stdio_child_by_index (GsfInfile *infile, int target, GError **err) +{ + GsfInfileStdio *ifs = GSF_INFILE_STDIO (infile); + char const *name = g_list_nth_data (ifs->children, target); + + if (!name) + return NULL; + + return open_child (ifs, name, err); +} + +static char const * +gsf_infile_stdio_name_by_index (GsfInfile *infile, int target) +{ + GsfInfileStdio *ifs = GSF_INFILE_STDIO (infile); + + return g_list_nth_data (ifs->children, target); +} + +static GsfInput * +gsf_infile_stdio_child_by_name (GsfInfile *infile, char const *name, GError **err) +{ + GsfInfileStdio *ifs = GSF_INFILE_STDIO (infile); + GList *ptr; + + for (ptr = ifs->children; ptr != NULL; ptr = ptr->next) + if (!strcmp (ptr->data, name)) + return open_child (ifs, name, err); + + return NULL; +} + +static int +gsf_infile_stdio_num_children (GsfInfile *infile) +{ + GsfInfileStdio *ifs = GSF_INFILE_STDIO (infile); + + return g_list_length (ifs->children); +} + +static void +gsf_infile_stdio_init (GsfInfileStdio *ifs) +{ + ifs->root = NULL; + ifs->children = NULL; +} + +static void +gsf_infile_stdio_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + GsfInfileClass *infile_class = GSF_INFILE_CLASS (gobject_class); + + parent_class = g_type_class_peek (GSF_INFILE_TYPE); + + gobject_class->finalize = gsf_infile_stdio_finalize; + input_class->Dup = gsf_infile_stdio_dup; + input_class->Read = gsf_infile_stdio_read; + input_class->Seek = NULL; + infile_class->num_children = gsf_infile_stdio_num_children; + infile_class->name_by_index = gsf_infile_stdio_name_by_index; + infile_class->child_by_index = gsf_infile_stdio_child_by_index; + infile_class->child_by_name = gsf_infile_stdio_child_by_name; +} + +GSF_CLASS (GsfInfileStdio, gsf_infile_stdio, + gsf_infile_stdio_class_init, gsf_infile_stdio_init, + GSF_INFILE_TYPE) + +/** + * gsf_infile_stdio_new : + * @root : in locale dependent encoding + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfInfile * +gsf_infile_stdio_new (char const *root, GError **err) +{ + GsfInfileStdio *ifs; + GDir *dir; + char const *child; + + dir = g_dir_open (root, 0, err); + if (dir == NULL) + return NULL; + + ifs = g_object_new (gsf_infile_stdio_get_type(), NULL); + ifs->root = g_strdup (root); + + while ((child = g_dir_read_name (dir))) + ifs->children = g_list_prepend (ifs->children, + g_strdup (child)); + g_dir_close (dir); + + gsf_input_set_name_from_filename (GSF_INPUT (ifs), root); + + return GSF_INFILE (ifs); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-stdio.h b/lib/libgsf-1.12.3/gsf/gsf-infile-stdio.h new file mode 100644 index 0000000000..2432424cb3 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-stdio.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-stdio.h: + * + * Copyright (C) 2004 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INFILE_STDIO_H +#define GSF_INFILE_STDIO_H + +#include + +G_BEGIN_DECLS + +typedef struct _GsfInfileStdio GsfInfileStdio; + +#define GSF_INFILE_STDIO_TYPE (gsf_infile_stdio_get_type ()) +#define GSF_INFILE_STDIO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INFILE_STDIO_TYPE, GsfInfileStdio)) +#define GSF_IS_INFILE_STDIO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INFILE_STDIO_TYPE)) + +GType gsf_infile_stdio_get_type (void); +GsfInfile *gsf_infile_stdio_new (char const *root, GError **err); + +G_END_DECLS + +#endif /* GSF_INFILE_STDIO_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-zip.c b/lib/libgsf-1.12.3/gsf/gsf-infile-zip.c new file mode 100644 index 0000000000..76c137983a --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-zip.c @@ -0,0 +1,866 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-zip.c : + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * Tambet Ingo (tambet@ximian.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "libgsf:zip" + +enum { + PROP_0, + PROP_SOURCE, + PROP_COMPRESSION_LEVEL, + PROP_INTERNAL_PARENT, +}; + +static GObjectClass *parent_class; + +typedef struct { + guint16 entries; + guint32 dir_pos; + GList *dirent_list; + GsfZipVDir *vdir; + + int ref_count; +} ZipInfo; + +struct _GsfInfileZip { + GsfInfile parent; + + GsfInput *source; + ZipInfo *info; + + GsfZipVDir *vdir; + + z_stream *stream; + guint32 restlen; + guint32 crestlen; + + guint8 *buf; + size_t buf_size; + gsf_off_t seek_skipped; + + GError *err; + GsfInfileZip *dup_parent; +}; + +typedef struct { + GsfInfileClass parent_class; +} GsfInfileZipClass; + +#define GSF_INFILE_ZIP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_INFILE_ZIP_TYPE, GsfInfileZipClass)) +#define GSF_IS_INFILE_ZIP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_INFILE_ZIP_TYPE)) + +static GsfZipVDir * +vdir_child_by_name (GsfZipVDir *vdir, char const *name) +{ + GSList *l; + + for (l = vdir->children; l; l = l->next) { + GsfZipVDir *child = (GsfZipVDir *) l->data; + if (strcmp (child->name, name) == 0) + return child; + } + return NULL; +} + +static GsfZipVDir * +vdir_child_by_index (GsfZipVDir *vdir, int target) +{ + return g_slist_nth_data (vdir->children, target); +} + +static void +vdir_insert (GsfZipVDir *vdir, char const * name, GsfZipDirent *dirent) +{ + char const *p; + char *dirname; + GsfZipVDir *child; + + p = strchr (name, ZIP_NAME_SEPARATOR); + if (p) { /* A directory */ + dirname = g_strndup (name, (gsize) (p - name)); + child = vdir_child_by_name (vdir, dirname); + if (!child) { + child = gsf_vdir_new (dirname, TRUE, NULL); + gsf_vdir_add_child (vdir, child); + } + g_free (dirname); + if (*(p+1) != '\0') { + name = p+1; + vdir_insert (child, name, dirent); + } + } else { /* A simple file name */ + child = gsf_vdir_new (name, FALSE, dirent); + gsf_vdir_add_child (vdir, child); + } +} + +static gsf_off_t +zip_find_trailer (GsfInfileZip *zip) +{ + static guint8 const trailer_signature[] = + { 'P', 'K', 0x05, 0x06 }; + gsf_off_t offset, trailer_offset, filesize; + gsf_off_t maplen; + guint8 const *data; + + filesize = gsf_input_size (zip->source); + if (filesize < ZIP_TRAILER_SIZE) + return -1; + + trailer_offset = filesize; + maplen = filesize & (ZIP_BUF_SIZE - 1); + if (maplen == 0) + maplen = ZIP_BUF_SIZE; + offset = filesize - maplen; /* offset is now BUFSIZ aligned */ + + while (TRUE) { + guchar *p, *s; + + if (gsf_input_seek (zip->source, offset, G_SEEK_SET)) + return -1; + + if ((data = gsf_input_read (zip->source, maplen, NULL)) == NULL) + return -1; + + p = (guchar *) data; + + for (s = p + maplen - 1; (s >= p); s--, trailer_offset--) { + if ((*s == 'P') && + (p + maplen - 1 - s > ZIP_TRAILER_SIZE - 2) && + !memcmp (s, trailer_signature, sizeof (trailer_signature))) { + return --trailer_offset; + } + } + + /* not found in currently mapped block, so update it if + * there is some room in before. The requirements are.. + * (a) mappings should overlap so that trailer can cross BUFSIZ-boundary + * (b) trailer cannot be farther away than 64K from fileend + */ + + /* outer loop cond */ + if (offset <= 0) + return -1; + + /* outer loop step */ + offset -= ZIP_BUF_SIZE / 2; + maplen = MIN (filesize - offset, ZIP_BUF_SIZE); + trailer_offset = offset + maplen; + + if (filesize - offset > 64 * 1024) + return -1; + } /*outer loop*/ + + return -1; +} + +static GsfZipDirent * +zip_dirent_new_in (GsfInfileZip *zip, gsf_off_t *offset) +{ + static guint8 const dirent_signature[] = + { 'P', 'K', 0x01, 0x02 }; + GsfZipDirent *dirent; + guint8 const *data; + guint16 name_len, extras_len, comment_len, compr_method; + guint32 crc32, csize, usize, off; + gchar *name; + + /* Read data and check the header */ + if (gsf_input_seek (zip->source, *offset, G_SEEK_SET) || + NULL == (data = gsf_input_read (zip->source, ZIP_DIRENT_SIZE, NULL)) || + 0 != memcmp (data, dirent_signature, sizeof (dirent_signature))) { + return NULL; + } + + name_len = GSF_LE_GET_GUINT16 (data + ZIP_DIRENT_NAME_SIZE); + extras_len = GSF_LE_GET_GUINT16 (data + ZIP_DIRENT_EXTRAS_SIZE); + comment_len = GSF_LE_GET_GUINT16 (data + ZIP_DIRENT_COMMENT_SIZE); + + compr_method = GSF_LE_GET_GUINT16 (data + ZIP_DIRENT_COMPR_METHOD); + crc32 = GSF_LE_GET_GUINT32 (data + ZIP_DIRENT_CRC32); + csize = GSF_LE_GET_GUINT32 (data + ZIP_DIRENT_CSIZE); + usize = GSF_LE_GET_GUINT32 (data + ZIP_DIRENT_USIZE); + off = GSF_LE_GET_GUINT32 (data + ZIP_DIRENT_OFFSET); + + if ((data = gsf_input_read (zip->source, name_len, NULL)) == NULL) + return NULL; + + name = g_new (gchar, (gulong) (name_len + 1)); + memcpy (name, data, name_len); + name[name_len] = '\0'; + + dirent = gsf_zip_dirent_new (); + dirent->name = name; + + dirent->compr_method = compr_method; + dirent->crc32 = crc32; + dirent->csize = csize; + dirent->usize = usize; + dirent->offset = off; + + *offset += ZIP_DIRENT_SIZE + name_len + extras_len + comment_len; + + return dirent; +} + +/*****************************************************************************/ +static ZipInfo * +zip_info_ref (ZipInfo *info) +{ + info->ref_count++; + return info; +} + +static void +zip_info_unref (ZipInfo *info) +{ + GList *p; + + if (info->ref_count-- != 1) + return; + + gsf_vdir_free (info->vdir, FALSE); + for (p = info->dirent_list; p != NULL; p = p->next) + gsf_zip_dirent_free ((GsfZipDirent *) p->data); + + g_list_free (info->dirent_list); + + g_free (info); +} + +/** + * zip_dup : + * @src : + * + * Return value: the partial duplicate. + **/ +static GsfInfileZip * +zip_dup (GsfInfileZip const *src, GError **err) +{ + GsfInfileZip *dst; + + g_return_val_if_fail (src != NULL, NULL); + + dst = g_object_new (GSF_INFILE_ZIP_TYPE, + "internal-parent", src, + NULL); + + if (dst->err) { + if (err) + *err = g_error_copy (dst->err); + g_object_unref (dst); + return NULL; + } + + return dst; +} + +/** + * zip_read_dirents: + * @zip : + * + * Read zip headers and do some sanity checking + * along the way. + * + * Return value: TRUE on error setting zip->err. + **/ +static gboolean +zip_read_dirents (GsfInfileZip *zip) +{ + guint8 const *trailer; + guint16 entries, i; + guint32 dir_pos; + ZipInfo *info; + gsf_off_t offset; + + /* Find and check the trailing header */ + offset = zip_find_trailer (zip); + if (offset < 0) { + zip->err = g_error_new (gsf_input_error_id (), 0, + "No Zip trailer"); + return TRUE; + } + + if (gsf_input_seek (zip->source, offset, G_SEEK_SET) || + NULL == (trailer = gsf_input_read (zip->source, ZIP_TRAILER_SIZE, NULL))) { + zip->err = g_error_new (gsf_input_error_id (), 0, + "Error reading Zip signature"); + return TRUE; + } + + entries = GSF_LE_GET_GUINT32 (trailer + ZIP_TRAILER_ENTRIES); + dir_pos = GSF_LE_GET_GUINT32 (trailer + ZIP_TRAILER_DIR_POS); + + info = g_new0 (ZipInfo, 1); + zip->info = info; + + info->ref_count = 1; + info->entries = entries; + info->dir_pos = dir_pos; + + /* Read the directory */ + for (i = 0, offset = dir_pos; i < entries; i++) { + GsfZipDirent *d; + + d = zip_dirent_new_in (zip, &offset); + if (d == NULL) { + zip->err = g_error_new (gsf_input_error_id (), 0, + "Error reading zip dirent"); + return TRUE; + } + + info->dirent_list = g_list_append (info->dirent_list, d); + } + + return FALSE; +} + +static void +zip_build_vdirs (GsfInfileZip *zip) +{ + GList *l; + GsfZipDirent *dirent; + ZipInfo *info = zip->info; + + info->vdir = gsf_vdir_new ("", TRUE, NULL); + for (l = info->dirent_list; l; l = l->next) { + dirent = (GsfZipDirent *) l->data; + vdir_insert (info->vdir, dirent->name, dirent); + } +} + +/** + * zip_init_info : + * @zip : + * + * Read zip headers and do some sanity checking + * along the way. + * + * Return value: TRUE on error setting zip->err. + **/ +static gboolean +zip_init_info (GsfInfileZip *zip) +{ + gboolean ret; + + ret = zip_read_dirents (zip); + if (ret != FALSE) + return ret; + zip_build_vdirs (zip); + + return FALSE; +} + +/* returns TRUE on error */ +static gboolean +zip_child_init (GsfInfileZip *child, GError **errmsg) +{ + static guint8 const header_signature[] = + { 'P', 'K', 0x03, 0x04 }; + guint8 const *data; + guint16 name_len, extras_len; + GsfZipDirent *dirent = child->vdir->dirent; + + /* skip local header + * should test tons of other info, but trust that those are correct + **/ + + if (gsf_input_seek (child->source, (gsf_off_t) dirent->offset, G_SEEK_SET) || + NULL == (data = gsf_input_read (child->source, ZIP_FILE_HEADER_SIZE, NULL)) || + 0 != memcmp (data, header_signature, sizeof (header_signature))) { + if (errmsg != NULL) + *errmsg = g_error_new (gsf_input_error_id (), 0, + "Unable to read zip header."); + return TRUE; + } + + name_len = GSF_LE_GET_GUINT16 (data + ZIP_FILE_HEADER_NAME_SIZE); + extras_len = GSF_LE_GET_GUINT16 (data + ZIP_FILE_HEADER_EXTRAS_SIZE); + + dirent->data_offset = dirent->offset + ZIP_FILE_HEADER_SIZE + name_len + extras_len; + child->restlen = dirent->usize; + child->crestlen = dirent->csize; + + if (dirent->compr_method != GSF_ZIP_STORED) { + int err; + + if (!child->stream) + child->stream = g_new0 (z_stream, 1); + + err = inflateInit2 (child->stream, -MAX_WBITS); + if (err != Z_OK) { + if (errmsg != NULL) + *errmsg = g_error_new (gsf_input_error_id (), 0, + "problem uncompressing stream"); + return TRUE; + } + } + + return FALSE; +} + +/* GsfInput class functions */ + +static GsfInput * +gsf_infile_zip_dup (GsfInput *src_input, GError **err) +{ + GsfInfileZip const *src = GSF_INFILE_ZIP (src_input); + GsfInfileZip *dst = zip_dup (src, err); + + if (dst == NULL) + return NULL; + + dst->vdir = src->vdir; + + if (dst->vdir->dirent && zip_child_init (dst, err)) { + g_object_unref (dst); + return NULL; + } + + return GSF_INPUT (dst); +} + +static gboolean +zip_update_stream_in (GsfInfileZip *zip) +{ + guint32 read_now; + guint8 const *data; + gsf_off_t pos; + + if (zip->crestlen == 0) + return FALSE; + + read_now = MIN (zip->crestlen, ZIP_BLOCK_SIZE); + + pos = zip->vdir->dirent->data_offset + zip->stream->total_in; + if (gsf_input_seek (zip->source, pos, G_SEEK_SET)) + return FALSE; + if ((data = gsf_input_read (zip->source, read_now, NULL)) == NULL) + return FALSE; + + zip->crestlen -= read_now; + zip->stream->next_in = (unsigned char *) data; /* next input byte */ + zip->stream->avail_in = read_now; /* number of bytes available at next_in */ + + return TRUE; +} + +static guint8 const * +gsf_infile_zip_read (GsfInput *input, size_t num_bytes, guint8 *buffer) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (input); + GsfZipVDir *vdir = zip->vdir; + gsf_off_t pos; + + if (zip->restlen < num_bytes) + return NULL; + + switch (vdir->dirent->compr_method) { + case GSF_ZIP_STORED: + zip->restlen -= num_bytes; + pos = zip->vdir->dirent->data_offset + input->cur_offset; + if (gsf_input_seek (zip->source, pos, G_SEEK_SET)) + return NULL; + return gsf_input_read (zip->source, num_bytes, buffer); + + case GSF_ZIP_DEFLATED: + if (buffer == NULL) { + if (zip->buf_size < num_bytes) { + zip->buf_size = MAX (num_bytes, 256); + g_free (zip->buf); + zip->buf = g_new (guint8, zip->buf_size); + } + buffer = zip->buf; + } + + zip->stream->avail_out = num_bytes; + zip->stream->next_out = (unsigned char *)buffer; + + do { + int err; + int startlen; + + if (zip->crestlen > 0 && zip->stream->avail_in == 0) + if (!zip_update_stream_in (zip)) + break; + + startlen = zip->stream->total_out; + err = inflate(zip->stream, Z_NO_FLUSH); + + if (err == Z_STREAM_END) + zip->restlen = 0; + else if (err == Z_OK) + zip->restlen -= (zip->stream->total_out - startlen); + else + break; + + } while (zip->restlen && zip->stream->avail_out); + + return buffer; + + default: + break; + } + + return NULL; +} + +static gboolean +gsf_infile_zip_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (input); + /* Global flag -- we don't want one per stream. */ + static gboolean warned = FALSE; + gsf_off_t pos = offset; + + /* Note, that pos has already been sanity checked. */ + switch (whence) { + case G_SEEK_SET : break; + case G_SEEK_CUR : pos += input->cur_offset; break; + case G_SEEK_END : pos += input->size; break; + default : return TRUE; + } + + if (zip->stream) { + zip->stream->next_in = NULL; + zip->stream->avail_in = 0; + zip->stream->total_in = 0; + } + + if (zip_child_init (zip, NULL)) { + g_warning ("failure initializing zip child"); + return TRUE; + } + + input->cur_offset = 0; + if (gsf_input_seek_emulate (input, pos)) + return TRUE; + + zip->seek_skipped += pos; + if (!warned && + zip->seek_skipped != pos && /* Don't warn for single seek. */ + zip->seek_skipped >= 1000000) { + warned = TRUE; + g_warning ("Seeking in zip child streams is awfully slow."); + } + + return FALSE; +} + +/* GsfInfile class functions */ + +/*****************************************************************************/ + + +static GsfInput * +gsf_infile_zip_new_child (GsfInfileZip *parent, GsfZipVDir *vdir, GError **err) +{ + GsfInfileZip *child; + GsfZipDirent *dirent = vdir->dirent; + child = zip_dup (parent, err); + + if (child == NULL) + return NULL; + + gsf_input_set_name (GSF_INPUT (child), vdir->name); + gsf_input_set_container (GSF_INPUT (child), GSF_INFILE (parent)); + + child->vdir = vdir; + + if (dirent) { + gsf_input_set_size (GSF_INPUT (child), + (gsf_off_t) dirent->usize); + if (zip_child_init (child, err) != FALSE) { + g_object_unref (child); + return NULL; + } + } else + gsf_input_set_size (GSF_INPUT (child), 0); + + return GSF_INPUT (child); +} + +static GsfInput * +gsf_infile_zip_child_by_index (GsfInfile *infile, int target, GError **err) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (infile); + GsfZipVDir *child_vdir = vdir_child_by_index (zip->vdir, target); + + if (child_vdir) + return gsf_infile_zip_new_child (zip, child_vdir, err); + + return NULL; +} + +static char const * +gsf_infile_zip_name_by_index (GsfInfile *infile, int target) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (infile); + GsfZipVDir *child_vdir = vdir_child_by_index (zip->vdir, target); + + if (child_vdir) + return child_vdir->name; + + return NULL; +} + +static GsfInput * +gsf_infile_zip_child_by_name (GsfInfile *infile, char const *name, GError **err) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (infile); + GsfZipVDir *child_vdir = vdir_child_by_name (zip->vdir, name); + + if (child_vdir) + return gsf_infile_zip_new_child (zip, child_vdir, err); + + return NULL; +} + +static int +gsf_infile_zip_num_children (GsfInfile *infile) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (infile); + + g_return_val_if_fail (zip->vdir != NULL, -1); + + if (!zip->vdir->is_directory) + return -1; + return g_slist_length (zip->vdir->children); +} + +static void +gsf_infile_zip_finalize (GObject *obj) +{ + GsfInfileZip *zip = GSF_INFILE_ZIP (obj); + + if (zip->source != NULL) { + g_object_unref (G_OBJECT (zip->source)); + zip->source = NULL; + } + if (zip->info != NULL) { + zip_info_unref (zip->info); + zip->info = NULL; + } + + if (zip->stream) + (void) inflateEnd (zip->stream); + g_free (zip->stream); + g_free (zip->buf); + + g_clear_error (&zip->err); + + parent_class->finalize (obj); +} + +static GObject* +gsf_infile_zip_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GsfInfileZip *zip; + + zip = (GsfInfileZip *)(parent_class->constructor (type, + n_construct_properties, + construct_params)); + if (zip->dup_parent) { + /* Special call from zip_dup. */ + zip->source = gsf_input_dup (zip->dup_parent->source, &zip->err); + zip->info = zip_info_ref (zip->dup_parent->info); + zip->dup_parent = NULL; + } else { + if (!zip_init_info (zip)) + zip->vdir = zip->info->vdir; + } + + return (GObject *)zip; +} + + +static void +gsf_infile_zip_init (GObject *obj) +{ + GsfInfileZip *zip = (GsfInfileZip *)obj; + zip->source = NULL; + zip->info = NULL; + zip->vdir = NULL; + zip->stream = NULL; + zip->restlen = 0; + zip->crestlen = 0; + zip->buf = NULL; + zip->buf_size = 0; + zip->seek_skipped = 0; + zip->err = NULL; +} + +static void +gsf_infile_zip_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GsfInfileZip *zip = (GsfInfileZip *)object; + + switch (property_id) { + case PROP_SOURCE: + g_value_set_object (value, zip->source); + break; + case PROP_COMPRESSION_LEVEL: + g_value_set_int (value, + zip->vdir->dirent + ? zip->vdir->dirent->compr_method + : 0); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_infile_zip_set_source (GsfInfileZip *zip, GsfInput *src) +{ + if (src) + src = gsf_input_proxy_new (src); + if (zip->source) + g_object_unref (zip->source); + zip->source = src; +} + +static void +gsf_infile_zip_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GsfInfileZip *zip = (GsfInfileZip *)object; + + switch (property_id) { + case PROP_SOURCE: + gsf_infile_zip_set_source (zip, g_value_get_object (value)); + break; + case PROP_INTERNAL_PARENT: + zip->dup_parent = g_value_get_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +static void +gsf_infile_zip_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + GsfInfileClass *infile_class = GSF_INFILE_CLASS (gobject_class); + + gobject_class->constructor = gsf_infile_zip_constructor; + gobject_class->finalize = gsf_infile_zip_finalize; + gobject_class->get_property = gsf_infile_zip_get_property; + gobject_class->set_property = gsf_infile_zip_set_property; + + input_class->Dup = gsf_infile_zip_dup; + input_class->Read = gsf_infile_zip_read; + input_class->Seek = gsf_infile_zip_seek; + infile_class->num_children = gsf_infile_zip_num_children; + infile_class->name_by_index = gsf_infile_zip_name_by_index; + infile_class->child_by_index = gsf_infile_zip_child_by_index; + infile_class->child_by_name = gsf_infile_zip_child_by_name; + + parent_class = g_type_class_peek_parent (gobject_class); + + g_object_class_install_property + (gobject_class, + PROP_SOURCE, + g_param_spec_object ("source", + "Source", + "The archive being interpreted.", + GSF_INPUT_TYPE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_COMPRESSION_LEVEL, + g_param_spec_int ("compression-level", + "Compression Level", + "The level of compression used, zero meaning none.", + 0, 10, + 0, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property + (gobject_class, + PROP_INTERNAL_PARENT, + g_param_spec_object ("internal-parent", + "", + "Internal use only", + GSF_INFILE_ZIP_TYPE, + GSF_PARAM_STATIC | + G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); +} + +GSF_CLASS (GsfInfileZip, gsf_infile_zip, + gsf_infile_zip_class_init, gsf_infile_zip_init, + GSF_INFILE_TYPE) + +/** + * gsf_infile_zip_new : + * @source : A base #GsfInput + * @err : A #GError, optionally %null + * + * Opens the root directory of a Zip file. + * NOTE : adds a reference to @source + * + * Returns : the new zip file handler + **/ +GsfInfile * +gsf_infile_zip_new (GsfInput *source, GError **err) +{ + GsfInfileZip *zip; + + g_return_val_if_fail (GSF_IS_INPUT (source), NULL); + + zip = g_object_new (GSF_INFILE_ZIP_TYPE, + "source", source, + NULL); + if (zip->err) { + if (err) + *err = g_error_copy (zip->err); + g_object_unref (zip); + return NULL; + } + + return GSF_INFILE (zip); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile-zip.h b/lib/libgsf-1.12.3/gsf/gsf-infile-zip.h new file mode 100644 index 0000000000..63e1f01756 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile-zip.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile-zip.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INFILE_ZIP_H +#define GSF_INFILE_ZIP_H + +#include + +G_BEGIN_DECLS + +typedef struct _GsfInfileZip GsfInfileZip; + +#define GSF_INFILE_ZIP_TYPE (gsf_infile_zip_get_type ()) +#define GSF_INFILE_ZIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INFILE_ZIP_TYPE, GsfInfileZip)) +#define GSF_IS_INFILE_ZIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INFILE_ZIP_TYPE)) + +GType gsf_infile_zip_get_type (void); +GsfInfile *gsf_infile_zip_new (GsfInput *source, GError **err); + +G_END_DECLS + +#endif /* GSF_INFILE_ZIP_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile.c b/lib/libgsf-1.12.3/gsf/gsf-infile.c new file mode 100644 index 0000000000..662e77d91b --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile.c @@ -0,0 +1,159 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile.c : + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +#define GET_CLASS(instance) G_TYPE_INSTANCE_GET_CLASS (instance, GSF_INFILE_TYPE, GsfInfileClass) + +/** + * gsf_infile_num_children : + * @infile : the structured storage + * + * Returns the number of children the storage has, or -1 if the storage can not + * have children. + **/ +int +gsf_infile_num_children (GsfInfile *infile) +{ + g_return_val_if_fail (infile != NULL, -1); + + return GET_CLASS (infile)->num_children (infile); +} + +/** + * gsf_infile_name_by_index : + * @infile : + * @i : + * + * Returns the utf8 encoded name of the @i-th child + * NOTE : DO NOT FREE THE STRING + **/ +char const * +gsf_infile_name_by_index (GsfInfile *infile, int i) +{ + g_return_val_if_fail (infile != NULL, NULL); + + return GET_CLASS (infile)->name_by_index (infile, i); +} + +/** + * gsf_infile_child_by_index : + * @infile : + * @i : + * + * TODO : For 2.0 api will change to include a GError. + * Returns a newly created child which must be unrefed. + **/ +GsfInput * +gsf_infile_child_by_index (GsfInfile *infile, int i) +{ + GError *err = NULL; + GsfInput *res; + + g_return_val_if_fail (GSF_INFILE (infile) != NULL, NULL); + + res = GET_CLASS (infile)->child_by_index (infile, i, &err); + + if (err != NULL) { + char const *iname = gsf_input_name (GSF_INPUT (infile)); + g_warning ("Unable to get child[%d] for infile '%s' because : %s", + i, iname ? iname : "?", err->message); + g_error_free (err); + g_return_val_if_fail (res == NULL, NULL); /* be anal */ + } + + return res; +} + +/** + * gsf_infile_child_by_name : + * @infile : + * @name : + * + * TODO : For 2.0 api will change to include a GError. + * Returns a newly created child which must be unrefed. + **/ +GsfInput * +gsf_infile_child_by_name (GsfInfile *infile, char const *name) +{ + GError *err = NULL; + GsfInput *res; + + g_return_val_if_fail (GSF_INFILE (infile) != NULL, NULL); + g_return_val_if_fail (name != NULL, NULL); + + res = GET_CLASS (infile)->child_by_name (infile, name, &err); + + if (err != NULL) { + char const *iname = gsf_input_name (GSF_INPUT (infile)); + g_warning ("Unable to get child['%s'] for infile '%s' because : %s", + name, iname ? iname : "?", err->message); + g_error_free (err); + g_return_val_if_fail (res == NULL, NULL); /* be anal */ + } + + return res; +} + +/** + * gsf_infile_child_by_vname : + * @infile : + * @name : A %null terminated list of names + * @Varargs : the rest of the names + * + * Returns a newly created child which must be unrefed. + **/ +GsfInput * +gsf_infile_child_by_vname (GsfInfile *infile, char const *name, ...) +{ + va_list ap; + GsfInput *child = GSF_INPUT (infile); + GsfInfile *tmp = NULL; + + g_return_val_if_fail (GSF_IS_INFILE (infile), NULL); + g_return_val_if_fail (name != NULL, NULL); + + va_start (ap, name); + while (1) { + child = gsf_infile_child_by_name (infile, name); + + name = va_arg (ap, char *); + if (tmp != NULL) + g_object_unref (G_OBJECT (tmp)); + if (name == NULL) + break; + if (child == NULL) + break; + + g_return_val_if_fail (GSF_IS_INFILE (child), NULL); + + infile = tmp = GSF_INFILE (child); + } + va_end (ap); + + return child; +} + +GSF_CLASS_ABSTRACT (GsfInfile, gsf_infile, NULL, NULL, GSF_INPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-infile.h b/lib/libgsf-1.12.3/gsf/gsf-infile.h new file mode 100644 index 0000000000..d7419c091a --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-infile.h @@ -0,0 +1,44 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-infile.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INFILE_H +#define GSF_INFILE_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_INFILE_TYPE (gsf_infile_get_type ()) +#define GSF_INFILE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INFILE_TYPE, GsfInfile)) +#define GSF_IS_INFILE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INFILE_TYPE)) + +GType gsf_infile_get_type (void); + +int gsf_infile_num_children (GsfInfile *infile); +char const *gsf_infile_name_by_index (GsfInfile *infile, int i); +GsfInput *gsf_infile_child_by_index (GsfInfile *infile, int i); +GsfInput *gsf_infile_child_by_name (GsfInfile *infile, char const *name); +GsfInput *gsf_infile_child_by_vname (GsfInfile *infile, char const *name, ...); + +G_END_DECLS + +#endif /* GSF_INFILE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-bzip.c b/lib/libgsf-1.12.3/gsf/gsf-input-bzip.c new file mode 100644 index 0000000000..26b172099d --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-bzip.c @@ -0,0 +1,109 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-iochannel.c: BZ2 based input + * + * Copyright (C) 2003-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#ifdef HAVE_BZ2 +/* For getting FILE. Don't ask. */ +#include +#include +#define BZ_BUFSIZ 1024 +#endif + +/** + * gsf_input_memory_new_from_bzip : + * @source : a #GsfInput + * @err : a #GError + * + * Returns a new #GsfInputMemory or NULL. + */ +GsfInput * +gsf_input_memory_new_from_bzip (GsfInput *source, GError **err) +{ +#ifndef HAVE_BZ2 + if (err) + *err = g_error_new (gsf_input_error_id (), 0, + "BZ2 support not enabled"); + return NULL; +#else + bz_stream bzstm; + GsfInput *mem = NULL; + GsfOutput *sink = NULL; + guint8 out_buf [BZ_BUFSIZ]; + int bzerr = BZ_OK; + + g_return_val_if_fail (source != NULL, NULL); + + memset (&bzstm, 0, sizeof (bzstm)); + if (BZ_OK != BZ2_bzDecompressInit (&bzstm, 0, 0)) { + if (err) + *err = g_error_new (gsf_input_error_id (), 0, + "BZ2 decompress init failed"); + return NULL; + } + + sink = gsf_output_memory_new (); + + for (;;) { + bzstm.next_out = (char *)out_buf; + bzstm.avail_out = (unsigned int)sizeof (out_buf); + + if (bzstm.avail_in == 0) { + bzstm.avail_in = (unsigned int)MIN (gsf_input_remaining (source), BZ_BUFSIZ); + bzstm.next_in = (char *)gsf_input_read (source, bzstm.avail_in, NULL); + } + + bzerr = BZ2_bzDecompress (&bzstm); + if (bzerr != BZ_OK && bzerr != BZ_STREAM_END) { + if (err) + *err = g_error_new (gsf_input_error_id (), 0, + "BZ2 decompress failed"); + BZ2_bzDecompressEnd (&bzstm); + gsf_output_close (sink); + g_object_unref (G_OBJECT (sink)); + return NULL; + } + + gsf_output_write (sink, BZ_BUFSIZ - bzstm.avail_out, out_buf); + if (bzerr == BZ_STREAM_END) + break; + } + + gsf_output_close (sink); + + if (BZ_OK != BZ2_bzDecompressEnd (&bzstm)) { + if (err) + *err = g_error_new (gsf_input_error_id (), 0, + "BZ2 decompress end failed"); + g_object_unref (G_OBJECT (sink)); + return NULL; + } + + mem = gsf_input_memory_new_clone ( + gsf_output_memory_get_bytes (GSF_OUTPUT_MEMORY (sink)), + gsf_output_size (sink)); + g_object_unref (G_OBJECT (sink)); + return mem; +#endif +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-bzip.h b/lib/libgsf-1.12.3/gsf/gsf-input-bzip.h new file mode 100644 index 0000000000..b2fb97a93e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-bzip.h @@ -0,0 +1,33 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-bzip.h: wrapper to compress to bzipped output + * + * Copyright (C) 2003-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_BZIP_H +#define GSF_INPUT_BZIP_H + +#include + +G_BEGIN_DECLS + +GsfInput *gsf_input_memory_new_from_bzip (GsfInput *source, GError **err); + +G_END_DECLS + +#endif /* GSF_INPUT_BZIP_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-gzip.c b/lib/libgsf-1.12.3/gsf/gsf-input-gzip.c new file mode 100644 index 0000000000..74d861e032 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-gzip.c @@ -0,0 +1,533 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-gzip.c: wrapper to uncompress gzipped input + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#define Z_BUFSIZE 0x100 + +static GObjectClass *parent_class; + +struct _GsfInputGZip { + GsfInput input; + + GsfInput *source; /* compressed data */ + gboolean raw; /* No header and no trailer. */ + GError *err; + gsf_off_t uncompressed_size; + gboolean stop_byte_added; + + z_stream stream; + guint8 const *gzipped_data; + uLong crc; /* crc32 of uncompressed data */ + + guint8 *buf; + size_t buf_size; + + size_t header_size, trailer_size; + gsf_off_t seek_skipped; +}; + +typedef struct { + GsfInputClass input_class; +} GsfInputGZipClass; + +enum { + PROP_0, + PROP_RAW, + PROP_SOURCE, + PROP_UNCOMPRESSED_SIZE +}; + +/* gzip flag byte */ +#define GZIP_IS_ASCII 0x01 /* file contains text ? */ +#define GZIP_HEADER_CRC 0x02 /* there is a CRC in the header */ +#define GZIP_EXTRA_FIELD 0x04 /* there is an 'extra' field */ +#define GZIP_ORIGINAL_NAME 0x08 /* the original is stored */ +#define GZIP_HAS_COMMENT 0x10 /* There is a comment in the header */ +#define GZIP_HEADER_FLAGS (unsigned)(GZIP_IS_ASCII |GZIP_HEADER_CRC |GZIP_EXTRA_FIELD |GZIP_ORIGINAL_NAME |GZIP_HAS_COMMENT) + +static gboolean +check_header (GsfInputGZip *input) +{ + if (input->raw) { + input->header_size = 0; + input->trailer_size = 0; + } else { + static guint8 const signature[2] = {0x1f, 0x8b}; + guint8 const *data; + unsigned flags, len; + + /* Check signature */ + if (NULL == (data = gsf_input_read (input->source, 2 + 1 + 1 + 6, NULL)) || + 0 != memcmp (data, signature, sizeof (signature))) + return TRUE; + + /* verify flags and compression type */ + flags = data[3]; + if (data[2] != Z_DEFLATED || (flags & ~GZIP_HEADER_FLAGS) != 0) + return TRUE; + + /* If we have the size, don't bother seeking to the end. */ + if (input->uncompressed_size < 0) { + /* Get the uncompressed size */ + if (gsf_input_seek (input->source, (gsf_off_t) -4, G_SEEK_END) || + NULL == (data = gsf_input_read (input->source, 4, NULL))) + return TRUE; + /* FIXME, but how? The size read here is modulo 2^32. */ + input->uncompressed_size = GSF_LE_GET_GUINT32 (data); + + if (input->uncompressed_size / 1000 > gsf_input_size (input->source)) { + g_warning ("Suspiciously well compressed file with better than 1000:1 ratio.\n" + "It is probably truncated or corrupt"); + } + } + + if (gsf_input_seek (input->source, 2 + 1 + 1 + 6, G_SEEK_SET)) + return TRUE; + + if (flags & GZIP_EXTRA_FIELD) { + if (NULL == (data = gsf_input_read (input->source, 2, NULL))) + return TRUE; + len = GSF_LE_GET_GUINT16 (data); + if (NULL == gsf_input_read (input->source, len, NULL)) + return TRUE; + } + if (flags & GZIP_ORIGINAL_NAME) { + /* Skip over the filename (which is in ISO 8859-1 encoding). */ + do { + if (NULL == (data = gsf_input_read (input->source, 1, NULL))) + return TRUE; + } while (*data != 0); + } + + if (flags & GZIP_HAS_COMMENT) { + /* Skip over the comment (which is in ISO 8859-1 encoding). */ + do { + if (NULL == (data = gsf_input_read (input->source, 1, NULL))) + return TRUE; + } while (*data != 0); + } + + if (flags & GZIP_HEADER_CRC && + NULL == (data = gsf_input_read (input->source, 2, NULL))) + return TRUE; + + input->header_size = input->source->cur_offset; + /* the last 8 bytes are the crc and size. */ + input->trailer_size = 8; + } + + gsf_input_set_size (GSF_INPUT (input), input->uncompressed_size); + + if (gsf_input_remaining (input->source) < input->trailer_size) + return TRUE; /* No room for payload */ + + return FALSE; +} + +static gboolean +init_zip (GsfInputGZip *gzip, GError **err) +{ + gsf_off_t cur_pos; + + if (Z_OK != inflateInit2 (&(gzip->stream), -MAX_WBITS)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Unable to initialize zlib"); + return TRUE; + } + + cur_pos = gsf_input_tell (gzip->source); + if (gsf_input_seek (gzip->source, 0, G_SEEK_SET)) { + if (err) + *err = g_error_new (gsf_input_error_id (), 0, + "Failed to rewind source"); + return TRUE; + } + + if (check_header (gzip) != FALSE) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Invalid gzip header"); + if (gsf_input_seek (gzip->source, cur_pos, G_SEEK_SET)) { + g_warning ("attempt to restore position failed ??"); + } + return TRUE; + } + + return FALSE; +} + +/** + * gsf_input_gzip_new : + * @source : The underlying data source. + * @err : optionally NULL. + * + * Adds a reference to @source. + * + * Returns a new file or NULL. + **/ +GsfInput * +gsf_input_gzip_new (GsfInput *source, GError **err) +{ + GsfInputGZip *gzip; + + g_return_val_if_fail (GSF_IS_INPUT (source), NULL); + + gzip = g_object_new (GSF_INPUT_GZIP_TYPE, + "source", source, + NULL); + if (gzip->err) { + if (err) + *err = g_error_copy (gzip->err); + g_object_unref (gzip); + return NULL; + } + + return GSF_INPUT (gzip); +} + +static void +gsf_input_gzip_finalize (GObject *obj) +{ + GsfInputGZip *gzip = (GsfInputGZip *)obj; + + if (gzip->source != NULL) { + g_object_unref (G_OBJECT (gzip->source)); + gzip->source = NULL; + } + + g_free (gzip->buf); + + if (gzip->stream.state != NULL) + inflateEnd (&(gzip->stream)); + + g_clear_error (&gzip->err); + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_gzip_dup (GsfInput *src_input, GError **err) +{ + GsfInputGZip const *src = (GsfInputGZip *)src_input; + GsfInputGZip *dst; + GsfInput *src_source_copy; + + if (src->source) { + src_source_copy = gsf_input_dup (src->source, err); + if (err) + return NULL; + } else + src_source_copy = NULL; + + dst = g_object_new (GSF_INPUT_GZIP_TYPE, + "source", src_source_copy, + "raw", src->raw, + NULL); + if (src_source_copy) + g_object_unref (src_source_copy); + + if (src->err) { + g_clear_error (&dst->err); + dst->err = g_error_copy (src->err); + } else if (dst->err) { + if (err) + *err = g_error_copy (dst->err); + g_object_unref (dst); + return NULL; + } + + return GSF_INPUT (dst); +} + +static guint8 const * +gsf_input_gzip_read (GsfInput *input, size_t num_bytes, guint8 *buffer) +{ + GsfInputGZip *gzip = GSF_INPUT_GZIP (input); + + if (buffer == NULL) { + if (gzip->buf_size < num_bytes) { + gzip->buf_size = MAX (num_bytes, 256); + g_free (gzip->buf); + gzip->buf = g_new (guint8, gzip->buf_size); + } + buffer = gzip->buf; + } + + gzip->stream.next_out = buffer; + gzip->stream.avail_out = num_bytes; + while (gzip->stream.avail_out != 0) { + int zerr; + if (gzip->stream.avail_in == 0) { + gsf_off_t remain = gsf_input_remaining (gzip->source); + if (remain <= gzip->trailer_size) { + if (remain < gzip->trailer_size || gzip->stop_byte_added) { + g_clear_error (&gzip->err); + gzip->err = g_error_new + (gsf_input_error_id (), 0, + "truncated source"); + return NULL; + } + /* zlib requires an extra byte. */ + gzip->stream.avail_in = 1; + gzip->gzipped_data = ""; + gzip->stop_byte_added = TRUE; + } else { + size_t n = MIN (remain - gzip->trailer_size, + Z_BUFSIZE); + + gzip->gzipped_data = + gsf_input_read (gzip->source, n, NULL); + if (!gzip->gzipped_data) { + g_clear_error (&gzip->err); + gzip->err = g_error_new + (gsf_input_error_id (), 0, + "Failed to read from source"); + return NULL; + } + gzip->stream.avail_in = n; + } + gzip->stream.next_in = (Byte *)gzip->gzipped_data; + } + zerr = inflate (&(gzip->stream), Z_NO_FLUSH); + if (zerr != Z_OK) { + if (zerr != Z_STREAM_END) + return NULL; + /* Premature end of stream. */ + if (gzip->stream.avail_out != 0) + return NULL; + } + } + + gzip->crc = crc32 (gzip->crc, buffer, (uInt)(gzip->stream.next_out - buffer)); + return buffer; +} + +static gboolean +gsf_input_gzip_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInputGZip *gzip = GSF_INPUT_GZIP (input); + /* Global flag -- we don't want one per stream. */ + static gboolean warned = FALSE; + gsf_off_t pos = offset; + + /* Note, that pos has already been sanity checked. */ + switch (whence) { + case G_SEEK_SET : break; + case G_SEEK_CUR : pos += input->cur_offset; break; + case G_SEEK_END : pos += input->size; break; + default : return TRUE; + } + + if (pos < input->cur_offset) { + if (gsf_input_seek (gzip->source, + (gsf_off_t)gzip->header_size, + G_SEEK_SET)) + return TRUE; + gzip->crc = crc32 (0L, Z_NULL, 0); + gzip->stream.avail_in = 0; + if (inflateReset (&(gzip->stream)) != Z_OK) + return TRUE; + input->cur_offset = 0; + } + + if (gsf_input_seek_emulate (input, pos)) + return TRUE; + + gzip->seek_skipped += pos; + if (!warned && + gzip->seek_skipped != pos && /* Don't warn for single seek. */ + gzip->seek_skipped >= 1000000) { + warned = TRUE; + g_warning ("Seeking in gzipped streams is awfully slow."); + } + + return FALSE; +} + +static void +gsf_input_gzip_init (GObject *obj) +{ + GsfInputGZip *gzip = GSF_INPUT_GZIP (obj); + + gzip->source = NULL; + gzip->raw = FALSE; + gzip->uncompressed_size = -1; + gzip->err = NULL; + gzip->stream.zalloc = (alloc_func)0; + gzip->stream.zfree = (free_func)0; + gzip->stream.opaque = (voidpf)0; + gzip->stream.next_in = Z_NULL; + gzip->stream.next_out = Z_NULL; + gzip->stream.avail_in = gzip->stream.avail_out = 0; + gzip->crc = crc32 (0L, Z_NULL, 0); + gzip->buf = NULL; + gzip->buf_size = 0; + gzip->seek_skipped = 0; +} + +static void +gsf_input_gzip_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GsfInputGZip *gzip = (GsfInputGZip *)object; + + switch (property_id) { + case PROP_RAW: + g_value_set_boolean (value, gzip->raw); + break; + case PROP_SOURCE: + g_value_set_object (value, gzip->source); + break; + case PROP_UNCOMPRESSED_SIZE: + g_value_set_int64 (value, gzip->uncompressed_size); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_input_gzip_set_source (GsfInputGZip *gzip, GsfInput *source) +{ + if (source) + g_object_ref (GSF_INPUT (source)); + if (gzip->source) + g_object_unref (gzip->source); + gzip->source = source; +} + +static void +gsf_input_gzip_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GsfInputGZip *gzip = (GsfInputGZip *)object; + + switch (property_id) { + case PROP_RAW: + gzip->raw = g_value_get_boolean (value); + break; + case PROP_SOURCE: + gsf_input_gzip_set_source (gzip, g_value_get_object (value)); + break; + case PROP_UNCOMPRESSED_SIZE: + gzip->uncompressed_size = g_value_get_int64 (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static GObject* +gsf_input_gzip_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GsfInputGZip *gzip; + + gzip = (GsfInputGZip *)(parent_class->constructor (type, + n_construct_properties, + construct_params)); + + if (!gzip->source) { + g_clear_error (&gzip->err); + gzip->err = g_error_new (gsf_input_error_id (), 0, + "NULL source"); + } else if (gzip->raw && gzip->uncompressed_size < 0) { + g_clear_error (&gzip->err); + gzip->err = g_error_new (gsf_input_error_id (), 0, + "Uncompressed size not set"); + } else if (init_zip (gzip, &gzip->err) != FALSE) { + /* Nothing more. */ + } + + return (GObject *)gzip; +} + +static void +gsf_input_gzip_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->constructor = gsf_input_gzip_constructor; + gobject_class->finalize = gsf_input_gzip_finalize; + gobject_class->set_property = gsf_input_gzip_set_property; + gobject_class->get_property = gsf_input_gzip_get_property; + input_class->Dup = gsf_input_gzip_dup; + input_class->Read = gsf_input_gzip_read; + input_class->Seek = gsf_input_gzip_seek; + + g_object_class_install_property + (gobject_class, + PROP_RAW, + g_param_spec_boolean ("raw", "Raw", + "Whether to read compressed data with no header and no trailer.", + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_SOURCE, + g_param_spec_object ("source", "Source", + "Where the compressed data comes from.", + GSF_INPUT_TYPE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + /** + * GsfInputGzip:uncompressed_size: + * + * The size that the data will have after uncompression. + * The is mandatory for raw streams and if the uncompressed size is + * larger than 4GB. + */ + g_object_class_install_property + (gobject_class, + PROP_UNCOMPRESSED_SIZE, + g_param_spec_int64 ("uncompressed-size", "Size after decompression", + "The source's uncompressed size", + -1, G_MAXINT64, -1, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInputGZip, gsf_input_gzip, + gsf_input_gzip_class_init, gsf_input_gzip_init, GSF_INPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-gzip.h b/lib/libgsf-1.12.3/gsf/gsf-input-gzip.h new file mode 100644 index 0000000000..71c4edfe51 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-gzip.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-gzip.h: wrapper to uncompress gzipped input + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_GZIP_H +#define GSF_INPUT_GZIP_H + +#include "gsf-input.h" + +G_BEGIN_DECLS + +#define GSF_INPUT_GZIP_TYPE (gsf_input_gzip_get_type ()) +#define GSF_INPUT_GZIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_GZIP_TYPE, GsfInputGZip)) +#define GSF_IS_INPUT_GZIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_GZIP_TYPE)) + +typedef struct _GsfInputGZip GsfInputGZip; + +GType gsf_input_gzip_get_type (void); +GsfInput *gsf_input_gzip_new (GsfInput *source, GError **err); + +G_END_DECLS + +#endif /* GSF_INPUT_GZIP_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-impl.h b/lib/libgsf-1.12.3/gsf/gsf-input-impl.h new file mode 100644 index 0000000000..14fdb6e207 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-impl.h @@ -0,0 +1,69 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input.h-impl.h: interface for used by the ole layer to read raw data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_IMPL_H +#define GSF_INPUT_IMPL_H + +#include +#include +#include + +G_BEGIN_DECLS + +struct _GsfInput { + GObject g_object; + + gsf_off_t size, cur_offset; + char *name; + GsfInfile *container; +}; + +typedef struct { + GObjectClass g_object_class; + + GsfInput *(*Dup) (GsfInput *input, GError **err); + const guint8 *(*Read) (GsfInput *input, size_t num_bytes, + guint8 *optional_buffer); + gboolean (*Seek) (GsfInput *input, gsf_off_t offset, + GSeekType whence); + GsfInput *(*OpenSibling) (GsfInput const *input, + char const *path, GError **err); + + /* Padding for future expansion */ + void (*_gsf_reserved0) (void); + void (*_gsf_reserved1) (void); + void (*_gsf_reserved2) (void); + void (*_gsf_reserved3) (void); +} GsfInputClass; + +#define GSF_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_INPUT_TYPE, GsfInputClass)) +#define GSF_IS_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_INPUT_TYPE)) + +/* protected */ +gboolean gsf_input_set_name (GsfInput *input, char const *name); +gboolean gsf_input_set_name_from_filename (GsfInput *input, char const *filename); +gboolean gsf_input_set_container (GsfInput *input, GsfInfile *container); +gboolean gsf_input_set_size (GsfInput *input, gsf_off_t size); +gboolean gsf_input_seek_emulate (GsfInput *input, gsf_off_t pos); + +G_END_DECLS + +#endif /* GSF_INPUT_IMPL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-iochannel.c b/lib/libgsf-1.12.3/gsf/gsf-input-iochannel.c new file mode 100644 index 0000000000..bbb98e20c2 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-iochannel.c @@ -0,0 +1,46 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-iochannel.c: GIOChannel based input + * + * Copyright (C) 2003-2004 Rodrigo Moya (rodrigo@gnome-db.org) + * Copyright (C) 2003-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include + +/** + * gsf_input_memory_new_from_iochannel : + * @channel : a #GIOChannel. + * @error : a #GError + * + * Returns a new #GsfInputMemory or NULL. + */ +GsfInput * +gsf_input_memory_new_from_iochannel (GIOChannel *channel, + GError **err) +{ + gchar *buf; + gsize len; + + g_return_val_if_fail (channel != NULL, NULL); + + if (G_IO_STATUS_NORMAL != g_io_channel_read_to_end (channel, &buf, &len, err)) + return NULL; + + return gsf_input_memory_new (buf, len, TRUE); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-iochannel.h b/lib/libgsf-1.12.3/gsf/gsf-input-iochannel.h new file mode 100644 index 0000000000..0372c7a50b --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-iochannel.h @@ -0,0 +1,34 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-iochannel.h: interface for use by the structured file layer to read data from IO channels + * + * Copyright (C) 2002-2004 Rodrigo Moya (rodrigo@gnome-db.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_IOCHANNEL_H +#define GSF_INPUT_IOCHANNEL_H + +#include + +G_BEGIN_DECLS + +GsfInput *gsf_input_memory_new_from_iochannel (GIOChannel *channel, + GError **error); + +G_END_DECLS + +#endif /* GSF_INPUT_IOCHANNEL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-memory.c b/lib/libgsf-1.12.3/gsf/gsf-input-memory.c new file mode 100644 index 0000000000..aa808c5b50 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-memory.c @@ -0,0 +1,313 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-memory.c: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_GLIB26 +#include +#else +#include "glib24_26-compat.h" +#endif // HAVE_GLIB26 + +#ifdef HAVE_MMAP + +#if defined(FREEBSD) || defined(__FreeBSD__) +/* We must keep the file open while pages are mapped. */ +/* http://www.freebsd.org/cgi/query-pr.cgi?pr=48291 */ +#define HAVE_BROKEN_MMAP +#endif /* defined(FREEBSD) || defined(__FreeBSD__) */ + +#elif defined(G_OS_WIN32) + +#include +#include +#include +#include +#include +#include + +#define MAP_FAILED NULL +#endif /* HAVE_MMAP */ + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +static GObjectClass *parent_class; + +struct _GsfInputMemory { + GsfInput parent; + GsfSharedMemory *shared; +#ifdef HAVE_BROKEN_MMAP + int fd; +#endif +}; +typedef GsfInputClass GsfInputMemoryClass; + +/** + * gsf_input_memory_new: + * @buf: The input bytes + * @length: The length of @buf + * @needs_free: Whether you want this memory to be free'd at object destruction + * + * Returns: A new #GsfInputMemory + */ +GsfInput * +gsf_input_memory_new (guint8 const *buf, gsf_off_t length, gboolean needs_free) +{ + GsfInputMemory *mem = g_object_new (GSF_INPUT_MEMORY_TYPE, NULL); + mem->shared = gsf_shared_memory_new ((void *)buf, length, needs_free); + gsf_input_set_size (GSF_INPUT (mem), length); + return GSF_INPUT (mem); +} + +/** + * gsf_input_memory_new_clone: + * @buf: The input bytes + * @length: The length of @buf + * + * Returns: A new #GsfInputMemory + */ +GsfInput * +gsf_input_memory_new_clone (guint8 const *buf, gsf_off_t length) +{ + GsfInputMemory *mem = NULL; + guint8 * cpy = g_try_malloc (length * sizeof (guint8)); + if (cpy == NULL) + return NULL; + + memcpy (cpy, buf, length); + mem = g_object_new (GSF_INPUT_MEMORY_TYPE, NULL); + mem->shared = gsf_shared_memory_new ((void *)cpy, length, TRUE); + gsf_input_set_size (GSF_INPUT (mem), length); + return GSF_INPUT (mem); +} + +static void +gsf_input_memory_finalize (GObject *obj) +{ + GsfInputMemory *mem = (GsfInputMemory *) (obj); + + if (mem->shared) + g_object_unref (G_OBJECT (mem->shared)); + +#ifdef HAVE_BROKEN_MMAP + if (mem->fd != -1) + close (mem->fd); +#endif + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_memory_dup (GsfInput *src_input, G_GNUC_UNUSED GError **err) +{ + GsfInputMemory const *src = (GsfInputMemory *) (src_input); + GsfInputMemory *dst = g_object_new (GSF_INPUT_MEMORY_TYPE, NULL); + + dst->shared = src->shared; + g_object_ref (G_OBJECT (dst->shared)); + gsf_input_set_size (GSF_INPUT (dst), src->shared->size); + +#ifdef HAVE_BROKEN_MMAP + if (src->fd != -1) + dst->fd = dup (src->fd); +#endif + + return GSF_INPUT (dst); +} + +static guint8 const * +gsf_input_memory_read (GsfInput *input, size_t num_bytes, guint8 *optional_buffer) +{ + GsfInputMemory *mem = (GsfInputMemory *) (input); + guchar const *src = mem->shared->buf; + + if (src == NULL) + return NULL; + if (optional_buffer) { + memcpy (optional_buffer, src + input->cur_offset, num_bytes); + return optional_buffer; + } else + return src + input->cur_offset; +} + +static gboolean +gsf_input_memory_seek (G_GNUC_UNUSED GsfInput *input, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static void +gsf_input_memory_init (GObject *obj) +{ + GsfInputMemory *mem = (GsfInputMemory *) (obj); + mem->shared = NULL; +#ifdef HAVE_BROKEN_MMAP + mem->fd = -1; +#endif +} + +static void +gsf_input_memory_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_memory_finalize; + input_class->Dup = gsf_input_memory_dup; + input_class->Read = gsf_input_memory_read; + input_class->Seek = gsf_input_memory_seek; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInputMemory, gsf_input_memory, + gsf_input_memory_class_init, gsf_input_memory_init, + GSF_INPUT_TYPE) + +/***************************************************************************/ + +#ifdef HAVE_MMAP + +#include +#include +#include +#include +#include +#include + +#ifndef PROT_READ +#define PROT_READ 0x1 +#endif /* PROT_READ */ + +#if !defined(MAP_FAILED) || defined(__osf__) +/* Someone needs their head examined - BSD ? */ +# define MAP_FAILED ((void *)-1) +#endif /* !defined(MAP_FAILED) || defined(__osf__) */ + +#endif /* HAVE_MMAP */ + +/** + * gsf_input_mmap_new: + * @filename: The file on disk that you want to mmap + * @err: A #GError, or optionally %null + * + * Returns: A new #GsfInputMemory + */ +GsfInput * +gsf_input_mmap_new (char const *filename, GError **err) +{ +#if defined(HAVE_MMAP) || defined(G_OS_WIN32) + GsfInputMemory *mem; + guint8 *buf = NULL; + struct stat st; + int fd; + size_t size; + + fd = g_open (filename, O_RDONLY | O_BINARY, 0); + if (fd < 0 || fstat (fd, &st) < 0) { + if (err != NULL) { + int save_errno = errno; + char *utf8name = g_filename_display_name (filename); + *err = g_error_new (gsf_input_error_id (), 0, + "%s: %s", + utf8name, g_strerror (save_errno)); + g_free (utf8name); + } + if (fd >= 0) close (fd); + return NULL; + } + + if (!S_ISREG (st.st_mode)) { + if (err != NULL) { + char *utf8name = g_filename_display_name (filename); + *err = g_error_new (gsf_input_error_id (), 0, + "%s: Is not a regular file", + utf8name); + g_free (utf8name); + } + close (fd); + return NULL; + } + + size = (size_t) st.st_size; + if ((off_t) size != st.st_size) { /* Check for overflow */ + if (err != NULL) { + char *utf8name = g_filename_display_name (filename); + *err = g_error_new (gsf_input_error_id (), 0, + "%s: File too large to be memory mapped", + utf8name); + g_free (utf8name); + } + close (fd); + return NULL; + } + +#ifdef G_OS_WIN32 + { + HANDLE handle = CreateFileMapping ((HANDLE)_get_osfhandle (fd), NULL, PAGE_READONLY, 0, 0, NULL); + buf = MapViewOfFile (handle, FILE_MAP_READ, 0, 0, 0); + CloseHandle (handle); + } +#else + buf = mmap (NULL, size, PROT_READ, MAP_SHARED, fd, (off_t) 0); +#endif + + if (buf == MAP_FAILED) { + if (err != NULL) { + int save_errno = errno; + char *utf8name = g_filename_display_name (filename); + *err = g_error_new (gsf_input_error_id (), 0, + "%s: %s", + utf8name, g_strerror (save_errno)); + g_free (utf8name); + } + close (fd); + return NULL; + } + + mem = g_object_new (GSF_INPUT_MEMORY_TYPE, NULL); + mem->shared = gsf_shared_memory_mmapped_new (buf, (gsf_off_t) size); + gsf_input_set_size (GSF_INPUT (mem), (gsf_off_t) size); + gsf_input_set_name (GSF_INPUT (mem), filename); + +#ifdef HAVE_BROKEN_MMAP + mem->fd = fd; +#else + close (fd); +#endif + + return GSF_INPUT (mem); +#else + (void)filename; + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "mmap not supported"); + return NULL; +#endif +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-memory.h b/lib/libgsf-1.12.3/gsf/gsf-input-memory.h new file mode 100644 index 0000000000..1bd76bdc07 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-memory.h @@ -0,0 +1,43 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-memory.h: interface for used by the ole layer to read raw data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_MEMORY_H +#define GSF_INPUT_MEMORY_H + +#include "gsf-input.h" + +G_BEGIN_DECLS + +#define GSF_INPUT_MEMORY_TYPE (gsf_input_memory_get_type ()) +#define GSF_INPUT_MEMORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_MEMORY_TYPE, GsfInputMemory)) +#define GSF_IS_INPUT_MEMORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_MEMORY_TYPE)) + +typedef struct _GsfInputMemory GsfInputMemory; + +GType gsf_input_memory_get_type (void); +GsfInput *gsf_input_memory_new (guint8 const *buf, gsf_off_t length, + gboolean needs_free); +GsfInput *gsf_input_memory_new_clone (guint8 const *buf, gsf_off_t length); +GsfInput *gsf_input_mmap_new (char const *filename, GError **err); + +G_END_DECLS + +#endif /* GSF_INPUT_MEMORY_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-proxy.c b/lib/libgsf-1.12.3/gsf/gsf-input-proxy.c new file mode 100644 index 0000000000..a2a4b07d8d --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-proxy.c @@ -0,0 +1,169 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-proxy.c: proxy object (with its own current position) + * + * Copyright (C) 2004 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +static GObjectClass *parent_class; + +struct _GsfInputProxy { + GsfInput input; + + GsfInput *source; + gsf_off_t offset; +}; + +typedef struct { + GsfInputClass input_class; +} GsfInputProxyClass; + + +/** + * gsf_input_proxy_new_section : + * @source : The underlying data source. + * @offset : Offset into source for start of section. + * @size : Length of section. + * + * This creates a new proxy to a section of the given source. The new + * object will have its own current position, but any operation on it + * can change the source's position. + * + * If a proxy to a proxy is created, the intermediate proxy is short- + * circuited. + * + * This function will ref the source. + * + * Returns a new input object. + **/ +GsfInput * +gsf_input_proxy_new_section (GsfInput *source, + gsf_off_t offset, + gsf_off_t size) +{ + GsfInputProxy *proxy; + gsf_off_t source_size; + + g_return_val_if_fail (GSF_IS_INPUT (source), NULL); + g_return_val_if_fail (offset >= 0, NULL); + + source_size = gsf_input_size (source); + g_return_val_if_fail (offset <= source_size, NULL); + g_return_val_if_fail (size <= source_size - offset, NULL); + + proxy = g_object_new (GSF_INPUT_PROXY_TYPE, NULL); + proxy->offset = offset; + gsf_input_set_size (GSF_INPUT (proxy), size); + + /* Short-circuit multiple proxies. */ + if (GSF_IS_INPUT_PROXY (source)) { + GsfInputProxy *proxy_source = GSF_INPUT_PROXY (source); + proxy->offset += proxy_source->offset; + source = proxy_source->source; + } + + proxy->source = g_object_ref (source); + return GSF_INPUT (proxy); +} + +/** + * gsf_input_proxy_new : + * @source : The underlying data source. + * + * This creates a new proxy to the entire, given input source. See + * gsf_input_proxy_new_section for details. + * + * Returns a new input object. + **/ +GsfInput * +gsf_input_proxy_new (GsfInput *source) +{ + return gsf_input_proxy_new_section (source, 0, gsf_input_size (source)); +} + +static void +gsf_input_proxy_finalize (GObject *obj) +{ + GsfInputProxy *proxy = (GsfInputProxy *)obj; + + if (proxy->source != NULL) { + g_object_unref (G_OBJECT (proxy->source)); + proxy->source = NULL; + } + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_proxy_dup (GsfInput *src_input, G_GNUC_UNUSED GError **err) +{ + return gsf_input_proxy_new (src_input); +} + +static guint8 const * +gsf_input_proxy_read (GsfInput *input, size_t num_bytes, guint8 *buffer) +{ + GsfInputProxy *proxy = GSF_INPUT_PROXY (input); + + /* Seek to our position in the source. */ + if (gsf_input_seek (proxy->source, + proxy->offset + gsf_input_tell (input), + G_SEEK_SET)) + return NULL; + + /* Read the data. */ + return gsf_input_read (proxy->source, num_bytes, buffer); +} + +static gboolean +gsf_input_proxy_seek (G_GNUC_UNUSED GsfInput *input, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static void +gsf_input_proxy_init (GObject *obj) +{ + GsfInputProxy *proxy = GSF_INPUT_PROXY (obj); + + proxy->source = NULL; + proxy->offset = 0; +} + +static void +gsf_input_proxy_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_proxy_finalize; + input_class->Dup = gsf_input_proxy_dup; + input_class->Read = gsf_input_proxy_read; + input_class->Seek = gsf_input_proxy_seek; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInputProxy, gsf_input_proxy, + gsf_input_proxy_class_init, gsf_input_proxy_init, GSF_INPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-proxy.h b/lib/libgsf-1.12.3/gsf/gsf-input-proxy.h new file mode 100644 index 0000000000..e9d42d7a62 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-proxy.h @@ -0,0 +1,43 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-proxy.h: proxy object (with its own current position) + * + * Copyright (C) 2004 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_PROXY_H +#define GSF_INPUT_PROXY_H + +#include "gsf-input.h" + +G_BEGIN_DECLS + +#define GSF_INPUT_PROXY_TYPE (gsf_input_proxy_get_type ()) +#define GSF_INPUT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_PROXY_TYPE, GsfInputProxy)) +#define GSF_IS_INPUT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_PROXY_TYPE)) + +typedef struct _GsfInputProxy GsfInputProxy; + +GType gsf_input_proxy_get_type (void); +GsfInput *gsf_input_proxy_new (GsfInput *source); +GsfInput *gsf_input_proxy_new_section (GsfInput *source, + gsf_off_t offset, + gsf_off_t size); + +G_END_DECLS + +#endif /* GSF_INPUT_PROXY_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-stdio.c b/lib/libgsf-1.12.3/gsf/gsf-input-stdio.c new file mode 100644 index 0000000000..09fa9876c8 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-stdio.c @@ -0,0 +1,281 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-stdio.c: stdio based input + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#ifdef HAVE_GLIB26 +#include +#else +#include "glib24_26-compat.h" +#endif // HAVE_GLIB26 + +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include + +static GObjectClass *parent_class; + +struct _GsfInputStdio { + GsfInput input; + + FILE *file; + char *filename; + guint8 *buf; + size_t buf_size; + gboolean keep_open; +}; + +typedef struct { + GsfInputClass input_class; +} GsfInputStdioClass; + +/** + * gsf_input_stdio_new : + * @filename : in utf8. + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfInput * +gsf_input_stdio_new (char const *filename, GError **err) +{ + GsfInputStdio *input; + struct stat st; + FILE *file; + gsf_off_t size; + + g_return_val_if_fail (filename != NULL, NULL); + + file = g_fopen (filename, "rb"); + if (file == NULL || fstat (fileno (file), &st) < 0) { + if (err) { + int save_errno = errno; + char *utf8name = g_filename_display_name (filename); + g_set_error (err, + G_FILE_ERROR, + g_file_error_from_errno (save_errno), + "%s: %s", + utf8name, g_strerror (save_errno)); + g_free (utf8name); + } + if (file) fclose (file); /* Just in case. */ + return NULL; + } + + if (!S_ISREG (st.st_mode)) { + if (err) { + char *utf8name = g_filename_display_name (filename); + g_set_error (err, gsf_input_error_id (), 0, + "%s: not a regular file", + utf8name); + g_free (utf8name); + } + fclose (file); + return NULL; + } + + size = st.st_size; + input = (GsfInputStdio *)g_object_new (GSF_INPUT_STDIO_TYPE, NULL); + input->file = file; + input->filename = g_strdup (filename); + input->buf = NULL; + input->buf_size = 0; + input->keep_open = FALSE; + gsf_input_set_size (GSF_INPUT (input), size); + gsf_input_set_name_from_filename (GSF_INPUT (input), filename); + + return GSF_INPUT (input); +} + +/** + * gsf_input_stdio_new_FILE : + * @filename : The filename corresponding to @file. + * @file : an existing stdio FILE * + * @keep_open : Should @file be closed when the wrapper is closed + * + * Assumes ownership of @file. If @keep_open is true, ownership reverts + * to caller when the GsfObject is closed. + * + * Returns a new GsfInput wrapper for @file. Note: the file must be + * seekable, so this will not work for stdin when that is a tty or pipe. + **/ +GsfInput * +gsf_input_stdio_new_FILE (char const *filename, FILE *file, gboolean keep_open) +{ + GsfInputStdio *stdio; + struct stat st; + gsf_off_t size; + + g_return_val_if_fail (filename != NULL, NULL); + g_return_val_if_fail (file != NULL, NULL); + + if (fstat (fileno (file), &st) < 0) + return NULL; + if (!S_ISREG (st.st_mode)) + /* It's not that we really care, but we need st.st_size to be sane. */ + return NULL; + size = st.st_size; + + stdio = g_object_new (GSF_INPUT_STDIO_TYPE, NULL); + stdio->file = file; + stdio->keep_open = keep_open; + stdio->filename = g_strdup (filename); + gsf_input_set_size (GSF_INPUT (stdio), size); + gsf_input_set_name_from_filename (GSF_INPUT (stdio), filename); + return GSF_INPUT (stdio); +} + +static void +gsf_input_stdio_finalize (GObject *obj) +{ + GsfInputStdio *input = (GsfInputStdio *)obj; + + if (input->file != NULL) { + if (!input->keep_open) + fclose (input->file); + input->file = NULL; + } + + g_free (input->buf); + input->buf = NULL; + input->buf_size = 0; + + g_free (input->filename); + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_stdio_dup (GsfInput *src_input, GError **err) +{ + GsfInputStdio const *src = (GsfInputStdio *)src_input; + return gsf_input_stdio_new (src->filename, err); +} + +static guint8 const * +gsf_input_stdio_read (GsfInput *input, size_t num_bytes, + guint8 *buffer) +{ + GsfInputStdio *stdio = GSF_INPUT_STDIO (input); + size_t nread = 0, total_read = 0; + + g_return_val_if_fail (stdio != NULL, NULL); + g_return_val_if_fail (stdio->file != NULL, NULL); + + if (buffer == NULL) { + if (stdio->buf_size < num_bytes) { + stdio->buf_size = num_bytes; + g_free (stdio->buf); + stdio->buf = g_new (guint8, stdio->buf_size); + } + buffer = stdio->buf; + } + + while (total_read < num_bytes) { + nread = fread (buffer + total_read, 1, + num_bytes - total_read, stdio->file); + total_read += nread; + if (total_read < num_bytes && + (ferror (stdio->file) || feof (stdio->file))) + return NULL; + } + + return buffer; +} + +static gboolean +gsf_input_stdio_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInputStdio const *stdio = GSF_INPUT_STDIO (input); + int stdio_whence = SEEK_SET; + +#ifndef HAVE_FSEEKO + long loffset; +#else + off_t loffset; +#endif + + if (stdio->file == NULL) + return TRUE; + + loffset = offset; + if ((gsf_off_t) loffset != offset) { /* Check for overflow */ +#ifdef HAVE_FSEEKO + g_warning ("offset too large for fseeko"); +#else + g_warning ("offset too large for fseek"); +#endif + return TRUE; + } + switch (whence) { + case G_SEEK_CUR : stdio_whence = SEEK_CUR; break; + case G_SEEK_END : stdio_whence = SEEK_END; break; + case G_SEEK_SET: + default: + break; + } + + errno = 0; +#ifdef HAVE_FSEEKO + if (0 == fseeko (stdio->file, loffset, stdio_whence)) + return FALSE; +#else + if (0 == fseek (stdio->file, loffset, stdio_whence)) + return FALSE; +#endif + + return TRUE; +} + +static void +gsf_input_stdio_init (GObject *obj) +{ + GsfInputStdio *stdio = GSF_INPUT_STDIO (obj); + + stdio->file = NULL; + stdio->filename = NULL; + stdio->buf = NULL; + stdio->buf_size = 0; + stdio->keep_open = FALSE; +} + +static void +gsf_input_stdio_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_stdio_finalize; + input_class->Dup = gsf_input_stdio_dup; + input_class->Read = gsf_input_stdio_read; + input_class->Seek = gsf_input_stdio_seek; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInputStdio, gsf_input_stdio, + gsf_input_stdio_class_init, gsf_input_stdio_init, GSF_INPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-stdio.h b/lib/libgsf-1.12.3/gsf/gsf-input-stdio.h new file mode 100644 index 0000000000..6f1df58b87 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-stdio.h @@ -0,0 +1,44 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-stdio.h: interface for use by the structured file layer to read raw data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_STDIO_H +#define GSF_INPUT_STDIO_H + +#include "gsf-input.h" +#include + +G_BEGIN_DECLS + +#define GSF_INPUT_STDIO_TYPE (gsf_input_stdio_get_type ()) +#define GSF_INPUT_STDIO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_STDIO_TYPE, GsfInputStdio)) +#define GSF_IS_INPUT_STDIO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_STDIO_TYPE)) + +typedef struct _GsfInputStdio GsfInputStdio; + +GType gsf_input_stdio_get_type (void); +GsfInput *gsf_input_stdio_new (char const *filename, GError **err); + +GsfInput *gsf_input_stdio_new_FILE (char const *filename, FILE *file, + gboolean keep_open); + +G_END_DECLS + +#endif /* GSF_INPUT_STDIO_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-textline.c b/lib/libgsf-1.12.3/gsf/gsf-input-textline.c new file mode 100644 index 0000000000..41e5ba74a3 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-textline.c @@ -0,0 +1,322 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-textline.c: textline based input + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include + +static GObjectClass *parent_class; + +struct _GsfInputTextline { + GsfInput input; + + GsfInput *source; + guint8 const *remainder; + unsigned remainder_size; + unsigned max_line_size; + + unsigned char *buf; + unsigned buf_size; + + /* int current_line; */ +}; + +typedef struct { + GsfInputClass input_class; +} GsfInputTextlineClass; + +/** + * gsf_input_textline_new : + * @source : in some combination of ascii and utf8 + * + * NOTE : adds a reference to @source + * + * Returns a new file or NULL. + **/ +GsfInput * +gsf_input_textline_new (GsfInput *source) +{ + GsfInputTextline *input; + + g_return_val_if_fail (source != NULL, NULL); + + input = g_object_new (GSF_INPUT_TEXTLINE_TYPE, NULL); + g_object_ref (G_OBJECT (source)); + input->source = source; + input->buf = NULL; + input->buf_size = 0; + gsf_input_set_size (GSF_INPUT (source), gsf_input_size (source)); + + return GSF_INPUT (input); +} + +static void +gsf_input_textline_finalize (GObject *obj) +{ + GsfInputTextline *input = (GsfInputTextline *)obj; + + if (input->source != NULL) { + g_object_unref (G_OBJECT (input->source)); + input->source = NULL; + } + if (input->buf != NULL) { + g_free (input->buf); + input->buf = NULL; + } + input->buf_size = 0; + + parent_class->finalize (obj); +} + +static GsfInput * +gsf_input_textline_dup (GsfInput *src_input, G_GNUC_UNUSED GError **err) +{ + GsfInputTextline const *src = (GsfInputTextline *)src_input; + GsfInputTextline *dst = g_object_new (GSF_INPUT_TEXTLINE_TYPE, NULL); + + dst->source = src->source; + g_object_ref (G_OBJECT (dst->source)); + gsf_input_set_size (GSF_INPUT (dst), gsf_input_size (src_input)); + + return GSF_INPUT (dst); +} + +static guint8 const * +gsf_input_textline_read (GsfInput *input, size_t num_bytes, guint8 *buffer) +{ + GsfInputTextline *textline = GSF_INPUT_TEXTLINE (input); + textline->remainder = NULL; + return gsf_input_read (textline->source, num_bytes, buffer); +} + +static gboolean +gsf_input_textline_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + GsfInputTextline *textline = GSF_INPUT_TEXTLINE (input); + textline->remainder = NULL; + return gsf_input_seek (textline->source, offset, whence); +} + +static void +gsf_input_textline_init (GObject *obj) +{ + GsfInputTextline *textline = GSF_INPUT_TEXTLINE (obj); + + textline->source = NULL; + textline->remainder = NULL; + textline->remainder_size = 0; + textline->max_line_size = 512; /* an initial guess */ + textline->buf = NULL; + textline->buf_size = 0; +} + +static void +gsf_input_textline_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_input_textline_finalize; + input_class->Dup = gsf_input_textline_dup; + input_class->Read = gsf_input_textline_read; + input_class->Seek = gsf_input_textline_seek; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfInputTextline, gsf_input_textline, + gsf_input_textline_class_init, gsf_input_textline_init, GSF_INPUT_TYPE) + +/** + * gsf_input_textline_ascii_gets : + * @input : + * + * A utility routine to read things line by line from the underlying source. + * Trailing newlines and carriage returns are stripped, and the resultant buffer + * can be edited. + * + * returns the string read, or NULL on eof. + **/ +unsigned char * +gsf_input_textline_ascii_gets (GsfInputTextline *textline) +{ + guint8 const *ptr ,*end; + gsf_off_t remain; + unsigned len, count = 0; + + g_return_val_if_fail (textline != NULL, NULL); + + while (1) { + if (textline->remainder == NULL || + textline->remainder_size == 0) { + remain = gsf_input_remaining (textline->source); + len = MIN (remain, textline->max_line_size); + + textline->remainder = gsf_input_read (textline->source, len, NULL); + if (textline->remainder == NULL) + return NULL; + textline->remainder_size = len; + } + + ptr = textline->remainder; + end = ptr + textline->remainder_size; + for (; ptr < end ; ptr++) + if (*ptr == '\n' || *ptr == '\r') + break; + + /* copy the remains into the buffer, grow it if necessary */ + len = ptr - textline->remainder; + if (count + len >= textline->buf_size) { + textline->buf_size += len; + textline->buf = g_renew (guint8, textline->buf, + textline->buf_size + 1); + } + + g_return_val_if_fail (textline->buf != NULL, NULL); + + memcpy (textline->buf + count, textline->remainder, len); + count += len; + + if (ptr < end) { + unsigned char last = ptr [0]; + + /* eat the trailing new line */ + ptr++; + if (ptr >= end) { + /* be extra careful, the newline is at the bound */ + if (gsf_input_remaining (textline->source) > 0) { + ptr = gsf_input_read (textline->source, 1, NULL); + if (ptr == NULL) + return NULL; + textline->remainder = ptr; + textline->remainder_size = 1; + end = ptr + 1; + } else + ptr = end = NULL; + } + if (ptr != NULL && + ((last == '\n' && *ptr == '\r') || + (last == '\r' && *ptr == '\n'))) + ptr++; + break; + } else if (gsf_input_remaining (textline->source) <= 0) { + ptr = end = NULL; + break; + } else + textline->remainder = NULL; + + } + + textline->remainder = ptr; + textline->remainder_size = end - ptr; + + textline->buf [count] = '\0'; + return textline->buf; +} + +/** + * gsf_input_textline_utf8_gets : + * @input : + * + * A utility routine to read things line by line from the underlying source. + * Trailing newlines and carriage returns are stripped, and the resultant buffer + * can be edited. + * + * returns the string read, or NULL on eof. + **/ +guint8 * +gsf_input_textline_utf8_gets (GsfInputTextline *textline) +{ + guint8 const *ptr ,*end; + gsf_off_t remain; + unsigned len, count = 0; + + g_return_val_if_fail (textline != NULL, NULL); + + while (1) { + if (textline->remainder == NULL || + textline->remainder_size == 0) { + remain = gsf_input_remaining (textline->source); + len = MIN (remain, textline->max_line_size); + + textline->remainder = gsf_input_read (textline->source, len, NULL); + if (textline->remainder == NULL) + return NULL; + textline->remainder_size = len; + } + + ptr = textline->remainder; + end = ptr + textline->remainder_size; + for (; ptr < end ; ptr = (guint8 *) g_utf8_next_char (ptr)) + if (*ptr == '\n' || *ptr == '\r') + break; + + /* copy the remains into the buffer, grow it if necessary */ + len = ptr - textline->remainder; + if (count + len >= textline->buf_size) { + textline->buf_size += len; + textline->buf = g_renew (guint8, textline->buf, + textline->buf_size + 1); + } + + g_return_val_if_fail (textline->buf != NULL, NULL); + + memcpy (textline->buf + count, textline->remainder, len); + count += len; + + if (ptr < end) { + unsigned char last = ptr [0]; + + /* eat the trailing new line */ + ptr++; + if (ptr >= end) { + /* be extra careful, the newline is at the bound */ + if (gsf_input_remaining (textline->source) > 0) { + ptr = gsf_input_read (textline->source, 1, NULL); + if (ptr == NULL) + return NULL; + textline->remainder = ptr; + textline->remainder_size = 1; + end = ptr + 1; + } else + ptr = end = NULL; + } + if (ptr != NULL && + ((last == '\n' && *ptr == '\r') || + (last == '\r' && *ptr == '\n'))) + ptr++; + break; + } else if (gsf_input_remaining (textline->source) <= 0) { + ptr = end = NULL; + break; + } else + textline->remainder = NULL; + + } + + textline->remainder = ptr; + textline->remainder_size = end - ptr; + + textline->buf [count] = '\0'; + return textline->buf; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-input-textline.h b/lib/libgsf-1.12.3/gsf/gsf-input-textline.h new file mode 100644 index 0000000000..d44e45310a --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input-textline.h @@ -0,0 +1,43 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input-textline.h: a utility wrapper to pull in text, line by line. + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_TEXTLINE_H +#define GSF_INPUT_TEXTLINE_H + +#include "gsf-input.h" + +G_BEGIN_DECLS + +#define GSF_INPUT_TEXTLINE_TYPE (gsf_input_textline_get_type ()) +#define GSF_INPUT_TEXTLINE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_TEXTLINE_TYPE, GsfInputTextline)) +#define GSF_IS_INPUT_TEXTLINE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_TEXTLINE_TYPE)) + +typedef struct _GsfInputTextline GsfInputTextline; + +GType gsf_input_textline_get_type (void); + +GsfInput *gsf_input_textline_new (GsfInput *source); +unsigned char *gsf_input_textline_ascii_gets (GsfInputTextline *input); +guint8 *gsf_input_textline_utf8_gets (GsfInputTextline *input); + +G_END_DECLS + +#endif /* GSF_INPUT_TEXTLINE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-input.c b/lib/libgsf-1.12.3/gsf/gsf-input.c new file mode 100644 index 0000000000..fb5caa3923 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input.c @@ -0,0 +1,651 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input.c: interface for used by the ole layer to read raw data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +#ifdef HAVE_BZIP +#include +#endif + +#define GET_CLASS(instance) G_TYPE_INSTANCE_GET_CLASS (instance, GSF_INPUT_TYPE, GsfInputClass) + +static GObjectClass *parent_class; + +enum { + PROP_0, + PROP_NAME, + PROP_SIZE, + PROP_EOF, + PROP_REMAINING, + PROP_POS +}; + +#if 0 +static void +gsf_input_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} +#endif + +static void +gsf_input_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + /* gsf_off_t is typedef'd to gint64 */ + switch (property_id) { + case PROP_NAME: + g_value_set_string (value, gsf_input_name (GSF_INPUT (object))); + break; + case PROP_SIZE: + g_value_set_int64 (value, gsf_input_size (GSF_INPUT (object))); + break; + case PROP_EOF: + g_value_set_boolean (value, gsf_input_eof (GSF_INPUT (object))); + break; + case PROP_REMAINING: + g_value_set_int64 (value, gsf_input_remaining (GSF_INPUT (object))); + break; + case PROP_POS: + g_value_set_int64 (value, gsf_input_tell (GSF_INPUT (object))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_input_finalize (GObject *obj) +{ + GsfInput *input = GSF_INPUT (obj); + + if (input->name != NULL) { + g_free (input->name); + input->name = NULL; + } + if (input->container != NULL) { + g_object_unref (G_OBJECT (input->container)); + input->container = NULL; + } + parent_class->finalize (obj); +} + +static void +gsf_input_init (GObject *obj) +{ + GsfInput *input = GSF_INPUT (obj); + + input->size = 0; + input->cur_offset = 0; + input->name = NULL; + input->container = NULL; +} + +static void +gsf_input_class_init (GObjectClass *gobject_class) +{ + parent_class = g_type_class_peek_parent (gobject_class); + + gobject_class->finalize = gsf_input_finalize; + /* gobject_class->set_property = gsf_input_set_property; */ + gobject_class->get_property = gsf_input_get_property; + + g_object_class_install_property (gobject_class, + PROP_NAME, + g_param_spec_string ("name", "Name", + "The Input's Name", + NULL, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_SIZE, + g_param_spec_int64 ("size", "Size", + "The Input's Size", + 0, G_MAXINT64, 0, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_EOF, + g_param_spec_boolean ("eof", "OEF", + "End Of File", + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_REMAINING, + g_param_spec_int64 ("remaining", "Remaining", + "Amount of Data Remaining", + 0, G_MAXINT64, 0, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_POS, + g_param_spec_int64 ("position", "Position", + "The Output's Current Position", + 0, G_MAXINT64, 0, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); +} + +GSF_CLASS_ABSTRACT (GsfInput, gsf_input, + gsf_input_class_init, gsf_input_init, + G_TYPE_OBJECT) + +/** + * gsf_input_name : + * @input : the input stream + * + * Returns @input's name in utf8 form, or NULL if it has no name. + **/ +char const * +gsf_input_name (GsfInput *input) +{ + g_return_val_if_fail (GSF_IS_INPUT (input), NULL); + return input->name; +} + +/** + * gsf_input_container : + * @input : the input stream + * + * Returns, but does not add a reference to @input's container. + * Potentially NULL + **/ +GsfInfile * +gsf_input_container (GsfInput *input) +{ + g_return_val_if_fail (GSF_IS_INPUT (input), NULL); + return input->container; +} + +/** + * gsf_input_dup : + * @input : The input to duplicate + * @err : optionally NULL + * + * Duplicates input @src leaving the new one at the same offset. + * + * Returns : the duplicate, or NULL on error + **/ +GsfInput * +gsf_input_dup (GsfInput *input, GError **err) +{ + GsfInput *dst; + + g_return_val_if_fail (input != NULL, NULL); + + dst = GET_CLASS (input)->Dup (input, err); + if (dst != NULL) { + if (dst->size != input->size) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Duplicate size mismatch"); + g_object_unref (dst); + return NULL; + } + if (gsf_input_seek (dst, input->cur_offset, G_SEEK_SET)) { + if (err != NULL) + *err = g_error_new (gsf_input_error_id (), 0, + "Seek failed"); + g_object_unref (dst); + return NULL; + } + + if (input->name != NULL) + gsf_input_set_name (dst, input->name); + dst->container = input->container; + if (dst->container != NULL) + g_object_ref (G_OBJECT (dst->container)); + } + return dst; +} + +/** + * gsf_input_open_sibling : + * @input : The input + * + * NOT CURRENTLY IMPLEMENTED + * + * Attempts to open a 'sibling' of @input. The caller is responsible for + * managing the resulting object. + * + * NOT CURRENTLY IMPLEMENTED + * + * Returns : the size or -1 on error + **/ +GsfInput * +gsf_input_sibling (GsfInput const *input, char const *name, GError **err) +{ + g_return_val_if_fail (GET_CLASS (input)->OpenSibling, NULL); + + return GET_CLASS (input)->OpenSibling (input, name, err); +} + +/** + * gsf_input_size : + * @input : The input + * + * Looks up and caches the number of bytes in the input + * + * Returns : the size or -1 on error + **/ +gsf_off_t +gsf_input_size (GsfInput *input) +{ + g_return_val_if_fail (input != NULL, -1); + return input->size; +} + +/** + * gsf_input_eof : + * @input : the input + * + * Are we at the end of the file ? + * + * Returns : TRUE if the input is at the eof. + **/ +gboolean +gsf_input_eof (GsfInput *input) +{ + g_return_val_if_fail (input != NULL, FALSE); + + return input->cur_offset >= input->size; +} + +/** + * gsf_input_read : + * @input : the input stream + * @num_bytes : number of bytes to read + * @optional_buffer : NULL, or pointer to destination memory area + * + * Read at least @num_bytes. Does not change the current position if there + * is an error. Will only read if the entire amount can be read. Invalidates + * the buffer associated with previous calls to gsf_input_read. + * + * Returns : pointer to the buffer or NULL if there is an error or 0 bytes are + * requested. + **/ +guint8 const * +gsf_input_read (GsfInput *input, size_t num_bytes, guint8 *optional_buffer) +{ + guint8 const *res; + + g_return_val_if_fail (input != NULL, NULL); + + if (num_bytes == 0 || (input->cur_offset + num_bytes) > input->size) + return NULL; + res = GET_CLASS (input)->Read (input, num_bytes, optional_buffer); + if (res == NULL) + return NULL; + + input->cur_offset += num_bytes; + return res; +} + +/** + * gsf_input_remaining : + * @input : the input stream + * + * Returns the number of bytes left in the file. + **/ +gsf_off_t +gsf_input_remaining (GsfInput *input) +{ + g_return_val_if_fail (input != NULL, 0); + + return input->size - input->cur_offset; +} + +/** + * gsf_input_tell : + * @input : the input stream + * + * Returns the current offset in the file. + **/ +gsf_off_t +gsf_input_tell (GsfInput *input) +{ + g_return_val_if_fail (input != NULL, 0); + + return input->cur_offset; +} + +/** + * gsf_input_seek : + * @input : the input stream + * @offset : target offset + * @whence : determines whether the offset is relative to the beginning or + * the end of the stream, or to the current location. + * + * Returns TRUE on error. + **/ +gboolean +gsf_input_seek (GsfInput *input, gsf_off_t offset, GSeekType whence) +{ + gsf_off_t pos = offset; + + g_return_val_if_fail (input != NULL, TRUE); + + switch (whence) { + case G_SEEK_SET : break; + case G_SEEK_CUR : pos += input->cur_offset; break; + case G_SEEK_END : pos += input->size; break; + default : return TRUE; + } + + if (pos < 0 || pos > input->size) + return TRUE; + + /* + * If we go nowhere, just return. This in particular handles null + * seeks for streams with no seek method. + */ + if (pos == input->cur_offset) + return FALSE; + + if (GET_CLASS (input)->Seek (input, offset, whence)) + return TRUE; + + input->cur_offset = pos; + return FALSE; +} + +/** + * gsf_input_set_name : + * @input : the input stream + * @name : the new name of the stream, or NULL. + * + * protected. + * + * Returns : TRUE if the assignment was ok. + **/ +gboolean +gsf_input_set_name (GsfInput *input, char const *name) +{ + char *buf; + + g_return_val_if_fail (input != NULL, FALSE); + + buf = g_strdup (name); + g_free (input->name); + input->name = buf; + return TRUE; +} + +/** + * gsf_input_set_name_from_filename : + * @input : the input stream + * @filename : the (fs-sys encoded) filename + * + * protected. + * + * Returns : TRUE if the assignment was ok. + **/ +gboolean +gsf_input_set_name_from_filename (GsfInput *input, char const *filename) +{ + g_return_val_if_fail (input != NULL, FALSE); + + g_free (input->name); + input->name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); + return TRUE; +} + + +/** + * gsf_input_set_container : + * @input : the input stream + * @container : + * + * Returns : TRUE if the assignment was ok. + */ +gboolean +gsf_input_set_container (GsfInput *input, GsfInfile *container) +{ + g_return_val_if_fail (input != NULL, FALSE); + + if (container != NULL) + g_object_ref (G_OBJECT (container)); + if (input->container != NULL) + g_object_unref (G_OBJECT (input->container)); + input->container = container; + return TRUE; +} + +/** + * gsf_input_set_size : + * @input : the input stream + * @size : the size of the stream + * + * Returns : TRUE if the assignment was ok. + */ +gboolean +gsf_input_set_size (GsfInput *input, gsf_off_t size) +{ + g_return_val_if_fail (input != NULL, FALSE); + g_return_val_if_fail (size >= 0, FALSE); + + input->size = size; + return TRUE; +} + +/** + * gsf_input_seek_emulate: Emulate forward seeks by reading. + * @input : stream to emulate seek for + * @pos : absolute position to seek to + * + * Returns : TRUE if the emulation failed. + */ +gboolean +gsf_input_seek_emulate (GsfInput *input, gsf_off_t pos) +{ + if (pos < input->cur_offset) + return TRUE; + + while (pos > input->cur_offset) { + gsf_off_t readcount = MIN (pos - input->cur_offset, 8192); + if (!gsf_input_read (input, readcount, NULL)) + return TRUE; + } + return FALSE; +} + +/****************************************************************************/ + +/** + * gsf_input_error_id : + * + * Returns : A utility quark to flag a GError as being an input problem. + */ +GQuark +gsf_input_error_id (void) +{ + static GQuark quark; + if (!quark) + quark = g_quark_from_static_string ("gsf_input_error_id"); + return quark; +} + +/** + * gsf_input_error : + * + * Deprecated in 1.12.0 + * Returns : A utility quark to flag a GError as being an input problem. + */ +GQuark +gsf_input_error (void) +{ + return gsf_input_error_id (); +} + +/****************************************************************************/ + +#define GSF_READ_BUFSIZE (1024 * 4) + +/** + * gsf_input_copy : + * @input : a non-null #GsfInput + * @output : a non-null #GsfOutput + * + * Copy the contents from @input to @output from their respective + * current positions. So if you want to be sure to copy *everything*, + * make sure to call gsf_input_seek (input, 0, G_SEEK_SET) and + * gsf_output_seek (output, 0, G_SEEK_SET) first, if applicable. + * + * Returns : TRUE on Success + **/ +gboolean +gsf_input_copy (GsfInput *input, GsfOutput *output) +{ + gsf_off_t remaining = 0; + gsf_off_t toread = 0; + const guint8 * buffer = NULL; + gboolean success = TRUE; + + g_return_val_if_fail (input != NULL, FALSE); + g_return_val_if_fail (output != NULL, FALSE); + + while ((remaining = gsf_input_remaining (input)) > 0 && (success)) { + toread = MIN (remaining, GSF_READ_BUFSIZE); + if (NULL == (buffer = gsf_input_read (input, toread, NULL))) + success = FALSE; + else + success = gsf_output_write (output, toread, buffer); + } + + return success; +} + +/****************************************************************************/ + +/** + * gsf_input_uncompress: maybe uncompress stream. + * @src: stream to be uncompressed. + * + * Returns: A stream equivalent to the source stream, but uncompressed if + * the source was compressed. + * + * This functions takes ownership of the incoming reference and yields a + * new one as its output. + */ +GsfInput * +gsf_input_uncompress (GsfInput *src) +{ + gsf_off_t cur_offset = src->cur_offset; + const guint8 *data; + + if (gsf_input_seek (src, 0, G_SEEK_SET)) + goto error; + + /* Read header up front, so we avoid extra seeks in tests. */ + data = gsf_input_read (src, 4, NULL); + if (!data) + goto error; + + /* Let's try gzip. */ + { + const unsigned char gzip_sig[2] = { 0x1f, 0x8b }; + + if (memcmp (gzip_sig, data, sizeof (gzip_sig)) == 0) { + GsfInput *res = gsf_input_gzip_new (src, NULL); + if (res) { + g_object_unref (G_OBJECT (src)); + return gsf_input_uncompress (res); + } + } + } + +#ifdef HAVE_BZIP + /* Let's try bzip. */ + { + guint8 const *bzip_sig = "BZh"; + + if (memcmp (gzip_sig, data, strlen (bzip_sig)) == 0) { + GsfInput *res = gsf_input_memory_new_from_bzip (src, NULL); + if (res) { + g_object_unref (G_OBJECT (src)); + return gsf_input_uncompress (res); + } + } + } +#endif + + /* Other methods go here. */ + + error: + (void)gsf_input_seek (src, cur_offset, G_SEEK_SET); + return src; +} + +#if 0 + +#include + +#ifdef HAVE_GNOME +#include +#endif + +GsfInput * +gsf_input_new_for_uri (char const * uri, GError ** err) +{ + GsfInput * input = NULL; + size_t len; + + g_return_val_if_fail (uri, NULL); + + len = strlen (uri); + g_return_val_if_fail (len, NULL); + + if (len > 3 && !strstr (uri, ":/")) { + /* assume plain file */ + input = gsf_input_stdio_new (uri, err); + } else { +#if HAVE_GNOME + /* have gnome, let GnomeVFS deal with this */ + input = gsf_input_gnomevfs_new (uri, err); +#else + if (len > 7 && !strncmp (uri, "file:/", 6)) { + /* dumb attempt to translate this into a local path */ + input = gsf_input_stdio_new (uri+7, err); + } + /* else: unknown or unhandled protocol - bail */ +#endif + } + + return input; +} + +#endif diff --git a/lib/libgsf-1.12.3/gsf/gsf-input.h b/lib/libgsf-1.12.3/gsf/gsf-input.h new file mode 100644 index 0000000000..02564407f0 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-input.h @@ -0,0 +1,64 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-input.h: interface for used by the ole layer to read raw data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_INPUT_H +#define GSF_INPUT_H + +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GSF_INPUT_TYPE (gsf_input_get_type ()) +#define GSF_INPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_INPUT_TYPE, GsfInput)) +#define GSF_IS_INPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_INPUT_TYPE)) + +GType gsf_input_get_type (void); + +char const *gsf_input_name (GsfInput *input); +GsfInfile *gsf_input_container (GsfInput *input); + +GsfInput *gsf_input_dup (GsfInput *input, GError **err); +GsfInput *gsf_input_sibling (GsfInput const *input, char const *name, GError **err); +gsf_off_t gsf_input_size (GsfInput *input); +gboolean gsf_input_eof (GsfInput *input); +guint8 const *gsf_input_read (GsfInput *input, size_t num_bytes, + guint8 *optional_buffer); +gsf_off_t gsf_input_remaining (GsfInput *input); +gsf_off_t gsf_input_tell (GsfInput *input); +gboolean gsf_input_seek (GsfInput *input, + gsf_off_t offset, GSeekType whence); + +/* Utilities */ +gboolean gsf_input_copy (GsfInput *input, GsfOutput *output); +GsfInput *gsf_input_uncompress (GsfInput *src); + +GQuark gsf_input_error_id (void); +#ifndef GSF_DISABLE_DEPRECATED +/* deprecated in 1.12.0, use gsf_input_error_id */ +GQuark gsf_input_error (void); +#endif /* GSF_DISABLE_DEPRECATED */ + +G_END_DECLS + +#endif /* GSF_INPUT_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-libxml.c b/lib/libgsf-1.12.3/gsf/gsf-libxml.c new file mode 100644 index 0000000000..2a23f05c74 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-libxml.c @@ -0,0 +1,1131 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-libxml.c : + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static GObjectClass *parent_class; + +/* Note: libxml erroneously declares the length argument as int. */ +static int +gsf_libxml_read (void *context, char *buffer, int len) +{ + gsf_off_t remaining = gsf_input_remaining ((GsfInput *)context); + guint8* res; + + if (len > remaining) + len = remaining; + res = (guint8 *) gsf_input_read ((GsfInput *)context, + (size_t)len, buffer); + if (res == NULL && len > 0) /* Not an error if len == 0 */ + return -1; + return len; +} + +static int +gsf_libxml_write (void *context, char const *buffer, int len) +{ + if (!gsf_output_write ((GsfOutput *)context, (size_t)len, buffer)) + return -1; + return len; +} + +static int +gsf_libxml_close (void *context) +{ + g_object_unref (G_OBJECT (context)); + return TRUE; +} + +static xmlParserCtxtPtr +gsf_xml_parser_context_full (GsfInput *input, xmlSAXHandlerPtr sax, gpointer user) +{ + GsfInput *gzip; + + g_return_val_if_fail (GSF_IS_INPUT (input), NULL); + + gzip = gsf_input_gzip_new (input, NULL); + if (gzip != NULL) + input = gzip; + else + g_object_ref (G_OBJECT (input)); + + return xmlCreateIOParserCtxt ( + sax, user, + (xmlInputReadCallback) gsf_libxml_read, + (xmlInputCloseCallback) gsf_libxml_close, + input, XML_CHAR_ENCODING_NONE); +} + +/** + * gsf_xml_parser_context : + * @input : + * + * Create a libxml2 pull style parser context wrapper around a gsf input. + * This signature will probably change to supply a SAX structure. + * + * NOTE : adds a reference to @input + * NOTE : a simple wrapper around a cleaner implementation that will fold in + * when we add other api changes. Its not worth bumping just for this + * + * Returns : A parser context or NULL + **/ +xmlParserCtxtPtr +gsf_xml_parser_context (GsfInput *input) +{ + return gsf_xml_parser_context_full (input, NULL, NULL); +} + +/** + * gsf_xml_output_buffer_new : + * @output : + * @encoding : optionally NULL. + * + * NOTE : adds a reference to @output + * NOTE : This is _not_ releated to GsfXMLOut + */ +static xmlOutputBufferPtr +gsf_xml_output_buffer_new (GsfOutput *output, + xmlCharEncodingHandlerPtr handler) +{ + xmlOutputBufferPtr res = xmlAllocOutputBuffer (handler); + if (res != NULL) { + g_object_ref (G_OBJECT (output)); + res->context = (void *)output; + res->writecallback = gsf_libxml_write; + res->closecallback = gsf_libxml_close; + } + + return res; +} + +int +gsf_xmlDocFormatDump (GsfOutput *output, xmlDocPtr cur, char const *encoding, + gboolean format) +{ + xmlOutputBufferPtr buf; + xmlCharEncodingHandlerPtr handler = NULL; + + if (cur == NULL) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlDocDump : document == NULL\n"); +#endif + return(-1); + } + + if (encoding != NULL) { + xmlCharEncoding enc; + + enc = xmlParseCharEncoding(encoding); + + if (cur->charset != XML_CHAR_ENCODING_UTF8) { + xmlGenericError(xmlGenericErrorContext, + "xmlDocDump: document not in UTF8\n"); + return(-1); + } + if (enc != XML_CHAR_ENCODING_UTF8) { + handler = xmlFindCharEncodingHandler(encoding); + if (handler == NULL) { + xmlFree((char *) cur->encoding); + cur->encoding = NULL; + } + } + } + buf = gsf_xml_output_buffer_new (output, handler); + return xmlSaveFormatFileTo (buf, cur, encoding, format); +} + +/***************************************************************************/ + +struct _GsfXMLInDoc { + GsfXMLInNode *root; + GsfXMLInNS *ns; + GPtrArray *ns_by_id; + GsfXMLInUnknownFunc unknown_handler; +}; + +typedef struct { + char *tag; + unsigned taglen; + unsigned ref_count; +} GsfXMLInNSInstance; + +typedef struct { + GsfXMLInNS const *ns; + GSList *elem; +} GsfXMLInNodeGroup; + +static char const * +node_name (GsfXMLInNode const *node) +{ + return (node->name != NULL) ? node->name : "{catch all)}"; +} + +static void +gsf_xml_in_start_element (GsfXMLIn *state, xmlChar const *name, xmlChar const **attrs) +{ + GSList *ptr, *elem; + GsfXMLInNSInstance *inst; + GsfXMLInNodeGroup *group; + GsfXMLInNode *node; + GsfXMLInNS const *ns, *default_ns = state->default_ns; + xmlChar const **ns_ptr; + char const *tmp; + int i; + gboolean check_unknown_handler = TRUE; + + /* Scan for namespace declarations. Yes it is ugly to have the api + * flag that its children can declare namespaces. However, given that a + * we need to know which namespace we are in before we can recognize + * the current node there is no choice. + * eg we can not know + * that we are in node 'Workbook' without recognizing ns=gnm, which we + * would not do unless we checked for a namespace */ + ns = state->doc->ns; + if (ns != NULL && state->node->check_children_for_ns) { + for (ns_ptr = attrs; ns_ptr != NULL && ns_ptr[0] && ns_ptr[1] ; ns_ptr += 2) { + if (strncmp (*ns_ptr, "xmlns", 5)) + continue; + if (ns_ptr[0][5] != '\0' && ns_ptr[0][5] != ':') + continue; + for (i = 0; (tmp = ns[i].uri) != NULL ; i++) { + if (strcmp (tmp, ns_ptr[1])) + continue; + + if (ns_ptr[0][5] == '\0') { + default_ns = ns + i; + break; + } + + inst = g_hash_table_lookup (state->ns_prefixes, ns_ptr[0] + 6); + if (inst == NULL) { + inst = g_new0 (GsfXMLInNSInstance, 1); + inst->tag = g_strconcat (ns_ptr[0] + 6, ":", NULL); + inst->taglen = strlen (inst->tag); + inst->ref_count = 1; + g_hash_table_insert (state->ns_prefixes, inst->tag, inst); + + if (ns[i].ns_id >= state->ns_by_id->len) + g_ptr_array_set_size (state->ns_by_id, ns[i].ns_id+1); + if (g_ptr_array_index (state->ns_by_id, ns[i].ns_id)) { + g_warning ("Damn. Someone just declared the same namespace '%s' with a different prefix '%s'", + ns[i].uri, inst->tag); + } else + g_ptr_array_index (state->ns_by_id, ns[i].ns_id) = inst; + } else + inst->ref_count++; + break; + } + } + } + +lookup_child : + for (ptr = state->node->groups ; ptr != NULL ; ptr = ptr->next) { + group = ptr->data; + /* does the namespace match */ + if (group->ns != NULL && group->ns != default_ns) { + g_return_if_fail (state->ns_by_id->len > group->ns->ns_id); + inst = g_ptr_array_index (state->ns_by_id, group->ns->ns_id); + if (inst == NULL || 0 != strncmp (name, inst->tag, inst->taglen)) + continue; + tmp = name + inst->taglen; + } else { +#if 0 + g_return_if_fail (state->ns_by_id->len > group->ns->ns_id); + inst = g_ptr_array_index (state->ns_by_id, group->ns->ns_id); + g_warning ("accepted ns = '%s' looking for '%s'", inst->tag, name); +#endif + tmp = name; + } + for (elem = group->elem ; elem != NULL ; elem = elem->next) { + node = elem->data; + if (node->name == NULL || !strcmp (tmp, node->name)) { + if (node->has_content == GSF_XML_CONTENT && + state->content->len > 0) { + g_warning ("too lazy to support nested unshared content for now. We'll add it for 2.0"); + } + state->state_stack = g_slist_prepend (state->state_stack, + (gpointer)state->node); + state->ns_stack = g_slist_prepend (state->ns_stack, + (gpointer)state->default_ns); + state->node = node; + state->default_ns = default_ns; + if (node->start != NULL) + node->start (state, attrs); + return; + } + } + } + + if (check_unknown_handler) { + check_unknown_handler = FALSE; /* only loop once */ + if (state->doc->unknown_handler != NULL && + (state->doc->unknown_handler) (state, name, attrs)) + goto lookup_child; + } + if (state->unknown_depth++) + return; + g_warning ("Unexpected element '%s' in state %s.", name, node_name (state->node)); + { + GSList *ptr; + GsfXMLInNode *node; + ptr = state->state_stack = g_slist_reverse (state->state_stack); + for (;ptr != NULL && ptr->next != NULL; ptr = ptr->next) { + node = ptr->data; + if (node != NULL) { +/* FIXME FIXME FIXME if we really want this do we also want namespaces ? */ + g_print ("%s", node_name (node)); + if (ptr->next != NULL && ptr->next->data != NULL) + g_print (" -> "); + } + } + state->state_stack = g_slist_reverse (state->state_stack); + } +} + +static void +gsf_xml_in_end_element (GsfXMLIn *state, + G_GNUC_UNUSED xmlChar const *name) +{ + if (state->unknown_depth > 0) { + state->unknown_depth--; + return; + } + + g_return_if_fail (state->state_stack != NULL); + g_return_if_fail (state->ns_stack != NULL); + + if (state->node->end) + state->node->end (state, NULL); + if (state->node->has_content == GSF_XML_CONTENT) + g_string_truncate (state->content, 0); + + /* pop the state stack */ + state->node = state->state_stack->data; + state->state_stack = g_slist_remove (state->state_stack, state->node); + state->default_ns = state->ns_stack->data; + state->ns_stack = g_slist_remove (state->ns_stack, state->default_ns); +} + +static void +gsf_xml_in_characters (GsfXMLIn *state, const xmlChar *chars, int len) +{ + if (state->node->has_content != GSF_XML_NO_CONTENT) + g_string_append_len (state->content, chars, len); +} + +static xmlEntityPtr +gsf_xml_in_get_entity (G_GNUC_UNUSED GsfXMLIn *state, const xmlChar *name) +{ + return xmlGetPredefinedEntity (name); +} + +static void +gsf_xml_in_start_document (GsfXMLIn *state) +{ + state->node = state->doc->root; + state->unknown_depth = 0; + state->state_stack = NULL; + state->ns_stack = NULL; + state->default_ns = NULL; + state->ns_by_id = g_ptr_array_new (); + state->ns_prefixes = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, g_free); +} + +static void +gsf_xml_in_end_document (GsfXMLIn *state) +{ + g_string_free (state->content, TRUE); + state->content = NULL; + + g_return_if_fail (state->node == state->doc->root); + g_return_if_fail (state->unknown_depth == 0); + + g_ptr_array_free (state->ns_by_id, TRUE); + state->ns_by_id = NULL; + + g_hash_table_destroy (state->ns_prefixes); + state->ns_prefixes = NULL; +} + +static void +gsf_xml_in_warning (G_GNUC_UNUSED GsfXMLIn *state, char const *msg, ...) +{ + va_list args; + + va_start (args, msg); + g_logv ("XML", G_LOG_LEVEL_WARNING, msg, args); + va_end (args); +} + +static void +gsf_xml_in_error (G_GNUC_UNUSED GsfXMLIn *state, char const *msg, ...) +{ + va_list args; + + va_start (args, msg); + g_logv ("XML", G_LOG_LEVEL_CRITICAL, msg, args); + va_end (args); +} + +static void +gsf_xml_in_fatal_error (G_GNUC_UNUSED GsfXMLIn *state, char const *msg, ...) +{ + va_list args; + + va_start (args, msg); + g_logv ("XML", G_LOG_LEVEL_ERROR, msg, args); + va_end (args); +} + +static xmlSAXHandler gsfXMLInParser = { + NULL, /* internalSubset */ + NULL, /* isStandalone */ + NULL, /* hasInternalSubset */ + NULL, /* hasExternalSubset */ + NULL, /* resolveEntity */ + (getEntitySAXFunc)gsf_xml_in_get_entity, /* getEntity */ + NULL, /* entityDecl */ + NULL, /* notationDecl */ + NULL, /* attributeDecl */ + NULL, /* elementDecl */ + NULL, /* unparsedEntityDecl */ + NULL, /* setDocumentLocator */ + (startDocumentSAXFunc)gsf_xml_in_start_document, /* startDocument */ + (endDocumentSAXFunc)gsf_xml_in_end_document, /* endDocument */ + (startElementSAXFunc)gsf_xml_in_start_element, /* startElement */ + (endElementSAXFunc)gsf_xml_in_end_element, /* endElement */ + NULL, /* reference */ + (charactersSAXFunc)gsf_xml_in_characters, /* characters */ + NULL, /* ignorableWhitespace */ + NULL, /* processingInstruction */ + NULL, /* comment */ + (warningSAXFunc)gsf_xml_in_warning, /* warning */ + (errorSAXFunc)gsf_xml_in_error, /* error */ + (fatalErrorSAXFunc)gsf_xml_in_fatal_error, /* fatalError */ + NULL, /* getParameterEntity */ + NULL, /* cdataBlock */ + NULL, /* externalSubset */ + 0 +#if LIBXML_VERSION >= 20600 + , + NULL, NULL, NULL +#if LIBXML_VERSION >= 20602 + , + NULL /* serror */ +#endif +#endif +}; + +/** + * gsf_xml_in_doc_new : + * @root : an array of node descriptors + * @ns : an array of namespace identifiers + * + * Put the nodes in the NULL terminated array starting at @root and the name + * spaces in the NULL terminated array starting at @ns together. Link them up + * and prepare the static data structures necessary to validate a doument based + * on that description. + * + * Returns NULL on error + **/ +GsfXMLInDoc * +gsf_xml_in_doc_new (GsfXMLInNode *root, GsfXMLInNS *ns) +{ + GsfXMLInDoc *doc; + unsigned i; + + if (root->parent_initialized) + return NULL; + + doc = g_new0 (GsfXMLInDoc, 1); + doc->root = root; + doc->ns = ns; + doc->ns_by_id = g_ptr_array_new (); + + /* Add namespaces to an idex */ + if (ns != NULL) { + for (i = 0; ns[i].uri != NULL ; i++) { + if (ns[i].ns_id >= doc->ns_by_id->len) + g_ptr_array_set_size (doc->ns_by_id, ns[i].ns_id+1); + g_ptr_array_index (doc->ns_by_id, ns[i].ns_id) = ns+i; + } + } + gsf_xml_in_doc_extend (doc, root); + return doc; +} + +void +gsf_xml_in_doc_extend (GsfXMLInDoc *doc, + GsfXMLInNode *extension_nodes) +{ + GsfXMLInNode *tmp, *real_node, *node; + GHashTable *symbols = g_hash_table_new (g_str_hash, g_str_equal); + + g_return_if_fail (doc != NULL); + g_return_if_fail (extension_nodes != NULL); + + if (extension_nodes->parent_initialized) + return; + for (node = extension_nodes; node->id != NULL ; node++ ) { + g_return_if_fail (!node->parent_initialized); + + tmp = g_hash_table_lookup (symbols, node->id); + if (tmp != NULL) { + /* if its empty then this is just a recusion */ + if (node->start != NULL || node->end != NULL || + node->has_content != GSF_XML_NO_CONTENT || node->user_data.v_int != 0) { + g_warning ("ID '%s' has already been registered.\n" + "The additional decls should not specify start,end,content,data", node->id); + return; + } + real_node = tmp; + } else { + /* be anal, the macro probably initialized this, but do it just in case */ + node->groups = NULL; + g_hash_table_insert (symbols, (gpointer)node->id, node); + real_node = node; + } + + tmp = g_hash_table_lookup (symbols, node->parent_id); + if (tmp != NULL) { + GSList *ptr; + GsfXMLInNodeGroup *group = NULL; + GsfXMLInNS const *ns = NULL; + + ns = (real_node->ns_id < 0) ? NULL + : g_ptr_array_index (doc->ns_by_id, + real_node->ns_id); + for (ptr = tmp->groups; ptr != NULL ; ptr = ptr->next) { + group = ptr->data; + if (group->ns == ns) + break; + } + if (ptr == NULL) { + group = g_new0 (GsfXMLInNodeGroup, 1); + group->ns = ns; + tmp->groups = g_slist_prepend (tmp->groups, group); + } + group->elem = g_slist_prepend (group->elem, real_node); + } else if (strcmp (node->id, node->parent_id)) { + g_warning ("Parent ID '%s' unknown", node->parent_id); + return; + } + + /* WARNING VILE HACK : + * The api in 1.8.2 passed has_content as a boolean. It's too + * late to change it but we need more contol. We edit the bool + * here to be GSF_CONTENT_NONE, GSF_CONTENT_ROOT and add a + * mechanism to edit the flag later */ + if (node->has_content != 0 && + node->has_content != GSF_XML_SHARED_CONTENT) + node->has_content = GSF_XML_CONTENT; + + node->parent_initialized = TRUE; + } + + g_hash_table_destroy (symbols); +} + +/** + * gsf_xml_in_doc_set_unknown_handler: + * @doc : #GsfXMLInDoc + * @handler : The function to call + * + * Call the function @handler when an unexpected child node is found + **/ +void +gsf_xml_in_doc_set_unknown_handler (GsfXMLInDoc *doc, + GsfXMLInUnknownFunc handler) +{ + g_return_if_fail (doc != NULL); + doc->unknown_handler = handler; +} + +/** + * gsf_xml_in_doc_free : + * @doc : + * + * Free up resources + **/ +void +gsf_xml_in_doc_free (GsfXMLInDoc *doc) +{ + GSList *ptr; + GsfXMLInNode *node; + GsfXMLInNodeGroup *group; + + g_return_if_fail (doc != NULL); + g_return_if_fail (doc->root != NULL); + g_return_if_fail (doc->ns_by_id != NULL); + + for (node = doc->root; node->id != NULL ; node++ ) { + for (ptr = node->groups; ptr != NULL ; ptr = ptr->next) { + group = ptr->data; + g_slist_free (group->elem); + g_free (group); + } + g_slist_free (node->groups); + node->groups = NULL; + } + + g_ptr_array_free (doc->ns_by_id, TRUE); + g_free (doc); +} + +/** + * gsf_xml_in_parse : + * @state : + * @input : + * + * Read an xml document from @input and parse based on the the descriptor in + * @state::doc + * + * returns FALSE on error + **/ +gboolean +gsf_xml_in_parse (GsfXMLIn *state, GsfInput *input) +{ + xmlParserCtxt *ctxt; + gboolean res; + + g_return_val_if_fail (state != NULL, FALSE); + g_return_val_if_fail (state->doc != NULL, FALSE); + g_return_val_if_fail (GSF_IS_INPUT (input), FALSE); + + ctxt = gsf_xml_parser_context_full (input, &gsfXMLInParser, state); + + g_return_val_if_fail (ctxt != NULL, FALSE); + + state->content = g_string_sized_new (128); + xmlParseDocument (ctxt); + res = ctxt->wellFormed; + xmlFreeParserCtxt (ctxt); + + return res; +} + +/** + * gsf_xml_in_check_ns : + * @state : + * @str : + * @ns_id : + * + * According to @state is @str in the namespace @ns_id ? + * + * Returns a pointer to @str after the namespace if successful, + * otherwise NULL. + **/ +char const * +gsf_xml_in_check_ns (GsfXMLIn const *state, char const *str, unsigned int ns_id) +{ + GsfXMLInNSInstance *inst; + if (state->ns_by_id->len <= ns_id) + return NULL; + if (NULL == (inst = g_ptr_array_index (state->ns_by_id, ns_id))) + return NULL; + if (strncmp (str, inst->tag, inst->taglen)) + return NULL; + return str + inst->taglen; +} + +/** + * gsf_xml_in_namecmp : + * @state : The #GsfXMLIn we are reading from. + * @str : The potentially namespace qualified node name. + * @ns_id : The name space id to check + * @name : The target node name + * + * Returns TRUE if @str == @ns_id:@name according to @state. + **/ +gboolean +gsf_xml_in_namecmp (GsfXMLIn const *state, char const *str, + unsigned int ns_id, char const *name) +{ + GsfXMLInNSInstance *inst; + if (state->ns_by_id->len <= ns_id) + return FALSE; + if (NULL == (inst = g_ptr_array_index (state->ns_by_id, ns_id))) + return FALSE; + if (strncmp (str, inst->tag, inst->taglen)) + return FALSE; + return 0 == strcmp (name, str + inst->taglen); +} + +/****************************************************************************/ + +typedef enum { + GSF_XML_OUT_NOCONTENT, + GSF_XML_OUT_CHILD, + GSF_XML_OUT_CONTENT +} GsfXMLOutState; + +struct _GsfXMLOut { + GObject base; + + GsfOutput *output; + char *doc_type; + GSList *stack; + GsfXMLOutState state; + unsigned indent; + gboolean needs_header; +}; + +typedef struct { + GObjectClass base; +} GsfXMLOutClass; + +static void +gsf_xml_out_finalize (GObject *obj) +{ + GsfXMLOut *xml = GSF_XML_OUT (obj); + + g_free (xml->doc_type); + + parent_class->finalize (obj); +} + +static void +gsf_xml_out_init (GObject *obj) +{ + GsfXMLOut *xml = GSF_XML_OUT (obj); + xml->output = NULL; + xml->stack = NULL; + xml->state = GSF_XML_OUT_CHILD; + xml->indent = 0; + xml->needs_header = TRUE; + xml->doc_type = NULL; +} + +static void +gsf_xml_out_class_init (GObjectClass *gobject_class) +{ + gobject_class->finalize = gsf_xml_out_finalize; + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfXMLOut, gsf_xml_out, + gsf_xml_out_class_init, gsf_xml_out_init, + G_TYPE_OBJECT) + +GsfXMLOut * +gsf_xml_out_new (GsfOutput *output) +{ + GsfXMLOut *xml = g_object_new (GSF_XML_OUT_TYPE, NULL); + if (!gsf_output_wrap (G_OBJECT (xml), output)) + return NULL; + xml->output = output; + return xml; +} + +/** + * gsf_xml_out_set_doc_type : + * @xml : #GsfXMLOut + * @type : + * + * Store some optional some <!DOCTYPE .. > content + **/ +void +gsf_xml_out_set_doc_type (GsfXMLOut *xml, char const *type) +{ + g_free (xml->doc_type); + xml->doc_type = g_strdup (type); +} + +static inline void +gsf_xml_out_indent (GsfXMLOut *xml) +{ + static char const spaces [] = + " " + " " + " " + " " + " " + " "; + unsigned i; + for (i = xml->indent ; i > (sizeof (spaces)/2) ; i -= sizeof (spaces)/2) + gsf_output_write (xml->output, sizeof (spaces) - 1, spaces); + gsf_output_write (xml->output, i*2, spaces); +} + +/** + * gsf_xml_out_start_elem : + * @xml : + * @id : + */ +void +gsf_xml_out_start_element (GsfXMLOut *xml, char const *id) +{ + g_return_if_fail (id != NULL); + g_return_if_fail (xml != NULL); + g_return_if_fail (xml->state != GSF_XML_OUT_CONTENT); + + if (xml->needs_header) { + static char const header0[] = + "\n"; + gsf_output_write (xml->output, sizeof (header0) - 1, header0); + if (xml->doc_type != NULL) + gsf_output_puts (xml->output, xml->doc_type); + xml->needs_header = FALSE; + } + if (xml->state == GSF_XML_OUT_NOCONTENT) + gsf_output_write (xml->output, 2, ">\n"); + + gsf_xml_out_indent (xml); + gsf_output_printf (xml->output, "<%s", id); + + xml->stack = g_slist_prepend (xml->stack, (gpointer)id); + xml->indent++; + xml->state = GSF_XML_OUT_NOCONTENT; +} + +/** + * gsf_xml_out_end_elem : + * @xml : + */ +char const * +gsf_xml_out_end_element (GsfXMLOut *xml) +{ + char const *id; + + g_return_val_if_fail (xml != NULL, NULL); + g_return_val_if_fail (xml->stack != NULL, NULL); + + id = xml->stack->data; + xml->stack = g_slist_remove (xml->stack, id); + xml->indent--; + switch (xml->state) { + case GSF_XML_OUT_NOCONTENT : + gsf_output_write (xml->output, 3, "/>\n"); + break; + + case GSF_XML_OUT_CHILD : + gsf_xml_out_indent (xml); + /* fall through */ + case GSF_XML_OUT_CONTENT : + gsf_output_printf (xml->output, "\n", id); + } + xml->state = GSF_XML_OUT_CHILD; + return id; +} + +/** + * gsf_xml_out_simple_element : + * @xml : + * @id : + * @content : + * + * A convenience routine + **/ +void +gsf_xml_out_simple_element (GsfXMLOut *xml, char const *id, + char const *content) +{ + gsf_xml_out_start_element (xml, id); + if (content != NULL) + gsf_xml_out_add_cstr (xml, NULL, content); + gsf_xml_out_end_element (xml); +} + +/** + * gsf_xml_out_simple_int_element : + * @xml : + * @id : + * @val : + * + * A convenience routine + **/ +void +gsf_xml_out_simple_int_element (GsfXMLOut *xml, char const *id, int val) +{ + gsf_xml_out_start_element (xml, id); + gsf_xml_out_add_int (xml, NULL, val); + gsf_xml_out_end_element (xml); +} + +/** + * gsf_xml_out_simple_float_element : + * @xml : + * @id : + * @val : + * @precision : + * + * A convenience routine + **/ +void +gsf_xml_out_simple_float_element (GsfXMLOut *xml, char const *id, + double val, int precision) +{ + gsf_xml_out_start_element (xml, id); + gsf_xml_out_add_float (xml, NULL, val, precision); + gsf_xml_out_end_element (xml); +} + +static void +close_tag_if_neccessary (GsfXMLOut* xml) +{ + if (xml->state != GSF_XML_OUT_CONTENT) { + xml->state = GSF_XML_OUT_CONTENT; + gsf_output_write (xml->output, 1, ">"); + } +} + +/** + * gsf_xml_out_add_cstr_unchecked : + * @xml : + * @id : optionally NULL for content + * @val_utf8 : a utf8 encoded string to export + * + * dump @val_utf8 to an attribute named @id without checking to see if the + * content needs escaping. A useful performance enhancement when the + * application knows that structure of the content well. If @val_utf8 is NULL + * do nothing (no warning, no output) + **/ +void +gsf_xml_out_add_cstr_unchecked (GsfXMLOut *xml, char const *id, + char const *val_utf8) +{ + g_return_if_fail (xml != NULL); + + if (val_utf8 == NULL) + return; + + if (id == NULL) { + close_tag_if_neccessary (xml); + gsf_output_write (xml->output, strlen (val_utf8), val_utf8); + } else + gsf_output_printf (xml->output, " %s=\"%s\"", id, val_utf8); +} + +/** + * gsf_xml_out_add_cstr : + * @xml : + * @id : optionally NULL for content + * @val_utf8 : a utf8 encoded string + * + * dump @val_utf8 to an attribute named @id or as the nodes content escaping + * characters as necessary. If @val_utf8 is NULL do nothing (no warning, no + * output) + **/ +void +gsf_xml_out_add_cstr (GsfXMLOut *xml, char const *id, + char const *val_utf8) +{ + guint8 const *cur = val_utf8; + guint8 const *start = val_utf8; + + g_return_if_fail (xml != NULL); + + if (val_utf8 == NULL) + return; + + if (id == NULL) { + close_tag_if_neccessary (xml); + } else + gsf_output_printf (xml->output, " %s=\"", id); + while (*cur != '\0') { + if (*cur == '<') { + if (cur != start) + gsf_output_write (xml->output, cur-start, start); + start = ++cur; + gsf_output_write (xml->output, 4, "<"); + } else if (*cur == '>') { + if (cur != start) + gsf_output_write (xml->output, cur-start, start); + start = ++cur; + gsf_output_write (xml->output, 4, ">"); + } else if (*cur == '&') { + if (cur != start) + gsf_output_write (xml->output, cur-start, start); + start = ++cur; + gsf_output_write (xml->output, 5, "&"); + } else if (*cur == '"') { + if (cur != start) + gsf_output_write (xml->output, cur-start, start); + start = ++cur; + gsf_output_write (xml->output, 6, """); + } else if (*cur < 0x20 && id != NULL) { + guint8 buf[8]; + sprintf (buf, "&#%d;", *cur); + + if (cur != start) + gsf_output_write (xml->output, cur-start, start); + start = ++cur; + + gsf_output_write (xml->output, strlen (buf), buf); + } else if (((*cur >= 0x20) && (*cur != 0x7f)) || + (*cur == '\n') || (*cur == '\r') || (*cur == '\t')) { + cur++; + } else { + g_warning ("Unknown char 0x%hhx in string", *cur); + cur++; + } + } + if (cur != start) + gsf_output_write (xml->output, cur-start, start); + if (id != NULL) + gsf_output_write (xml->output, 1, "\""); +} + +/** + * gsf_xml_out_add_bool : + * @xml : + * @id : optionally NULL for content + * @val : a boolean + * + * dump boolean value @val to an attribute named @id or as the nodes content + * Use '1' or '0' to simplify import + **/ +void +gsf_xml_out_add_bool (GsfXMLOut *xml, char const *id, + gboolean val) +{ + gsf_xml_out_add_cstr_unchecked (xml, id, + val ? "1" : "0"); +} + +/** + * gsf_xml_out_add_int : + * @xml : + * @id : optionally NULL for content + * @val : the value + * + * dump integer value @val to an attribute named @id or as the nodes content + **/ +void +gsf_xml_out_add_int (GsfXMLOut *xml, char const *id, + int val) +{ + char buf [4 * sizeof (int)]; + sprintf (buf, "%d", val); + gsf_xml_out_add_cstr_unchecked (xml, id, buf); +} + +/** + * gsf_xml_out_add_uint : + * @xml : + * @id : optionally NULL for content + * @val : the value + * + * dump unsigned integer value @val to an attribute named @id or as the nodes + * content + **/ +void +gsf_xml_out_add_uint (GsfXMLOut *xml, char const *id, + unsigned int val) +{ + char buf [4 * sizeof (unsigned int)]; + sprintf (buf, "%u", val); + gsf_xml_out_add_cstr_unchecked (xml, id, buf); +} + +/** + * gsf_xml_out_add_float : + * @xml : + * @id : optionally NULL for content + * @val : the value + * @precision : the number of significant digits to use, -1 meaning "enough". + * + * dump float value @val to an attribute named @id or as the nodes + * content with precision @precision. The number will be formattted + * according to the "C" locale. + **/ +void +gsf_xml_out_add_float (GsfXMLOut *xml, char const *id, + double val, int precision) +{ + char format_str[4 * sizeof (int) + 10]; + char buf[G_ASCII_DTOSTR_BUF_SIZE + DBL_DIG]; + + if (precision < 0 || precision > DBL_DIG) + precision = DBL_DIG; + + sprintf (format_str, "%%.%dg", precision); + g_ascii_formatd (buf, sizeof (buf), format_str, val); + gsf_xml_out_add_cstr_unchecked (xml, id, buf); +} + +/** + * gsf_xml_out_add_color : + * @xml : + * @id : optionally NULL for content + * @r : + * @g : + * @b : + * + * dump Color @r.@g.@b to an attribute named @id or as the nodes content + **/ +void +gsf_xml_out_add_color (GsfXMLOut *xml, char const *id, + unsigned int r, unsigned int g, unsigned int b) +{ + char buf [3 * 4 * sizeof (unsigned int) + 1]; + sprintf (buf, "%X:%X:%X", r, g, b); + gsf_xml_out_add_cstr_unchecked (xml, id, buf); +} + +void +gsf_xml_out_add_enum (GsfXMLOut *xml, char const *id, GType etype, gint val) +{ + GEnumClass *eclass = G_ENUM_CLASS (g_type_class_peek (etype)); + GEnumValue *ev = g_enum_get_value (eclass, val); + + if (ev) + gsf_xml_out_add_cstr_unchecked (xml, id, ev->value_name); + else + g_warning ("Invalid value %d for type %s", + val, g_type_name (etype)); +} + +/** + * gsf_xml_out_add_base64 : + * @xml : + * @id : optionally NULL for content + * @data : + * @len : + * + * dump @len bytes in @data into the content of node @id using base64 + **/ +void +gsf_xml_out_add_base64 (GsfXMLOut *xml, char const *id, + guint8 const *data, unsigned int len) +{ + /* We could optimize and stream right to the output, + * or even just keep the buffer around + * for now we start simple */ + guint8 *tmp = gsf_base64_encode_simple (data, len); + if (tmp == NULL) + return; + if (id != NULL) + g_warning ("Stream a binary blob into an attribute ??"); + gsf_xml_out_add_cstr_unchecked (xml, id, tmp); + g_free (tmp); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-libxml.h b/lib/libgsf-1.12.3/gsf/gsf-libxml.h new file mode 100644 index 0000000000..04e5260dc9 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-libxml.h @@ -0,0 +1,174 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-libxml.h: Utility wrappers for using gsf with libxml + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_LIBXML_H +#define GSF_LIBXML_H + +#include +#include +#include + +G_BEGIN_DECLS + +/****************************************************************************/ +/* GSF wrappers for libxml2 */ +xmlParserCtxt *gsf_xml_parser_context (GsfInput *input); +#if 0 + /* this is cleaner, tack it on for 2.0 */ + xmlSAXHandlerPtr sax, gpointer user); +#endif +int gsf_xmlDocFormatDump (GsfOutput *output, + xmlDoc *cur, + char const *encoding, + gboolean format); + +/****************************************************************************/ +/* Simplified GSF based xml import (based on libxml2 SAX) */ +typedef struct _GsfXMLBlob GsfXMLBlob; + +typedef struct _GsfXMLIn GsfXMLIn; +typedef struct _GsfXMLInDoc GsfXMLInDoc; +typedef struct _GsfXMLInNode GsfXMLInNode; +typedef struct _GsfXMLInNS GsfXMLInNS; + +typedef enum { + GSF_XML_NO_CONTENT, + GSF_XML_CONTENT, + GSF_XML_SHARED_CONTENT +} GsfXMLContent; + +typedef gboolean (*GsfXMLInUnknownFunc) (GsfXMLIn *state, xmlChar const *elem, xmlChar const **attrs); +struct _GsfXMLIn { + GsfXMLInDoc const *doc; /* init before parsing */ + + /* look but do not change */ + GsfXMLInNode const *node; /* current node */ + GSList *state_stack; + + GsfXMLInNS const *default_ns; /* optionally NULL */ + GSList *ns_stack; + + GString *content; + gint unknown_depth; /* handle recursive unknown tags */ + GHashTable *ns_prefixes; /* current ns prefixes */ + GPtrArray *ns_by_id; /* indexed by id */ +}; + +struct _GsfXMLInNode { + char const *id; + int ns_id; + char const *name; + char const *parent_id; + gboolean parent_initialized; + GSList *groups; + + unsigned has_content; + gboolean deprecated_unused_allow_unknown; /* remains here for binary compat */ + gboolean check_children_for_ns; + + void (*start) (GsfXMLIn *state, xmlChar const **attrs); + void (*end) (GsfXMLIn *state, GsfXMLBlob *unknown); + + union { + int v_int; + gboolean v_bool; + gpointer v_blob; + char const *v_str; + } user_data; +}; + +struct _GsfXMLInNS { + char const *uri; + unsigned ns_id; +}; + +#define GSF_XML_IN_NS(id, uri) \ +{ uri, id} + +#define GSF_XML_IN_NODE_FULL(parent_id, id, ns, name, has_content, \ + deprecated_unused_allow_unknown, check_ns, start, end, user) \ +{ \ + #id, ns, name, #parent_id, FALSE, NULL, \ + has_content, deprecated_unused_allow_unknown, check_ns, start, end, { user } \ +} + +#define GSF_XML_IN_NODE(parent_id, id, ns, name, has_content, start, end) \ + GSF_XML_IN_NODE_FULL(parent_id, id, ns, name, has_content, \ + FALSE, FALSE, start, end, 0) + +GsfXMLInDoc *gsf_xml_in_doc_new (GsfXMLInNode *root, GsfXMLInNS *ns); +void gsf_xml_in_doc_free (GsfXMLInDoc *doc); +void gsf_xml_in_doc_extend (GsfXMLInDoc *doc, + GsfXMLInNode *nodes); +void gsf_xml_in_doc_set_unknown_handler (GsfXMLInDoc *doc, + GsfXMLInUnknownFunc handler); + +gboolean gsf_xml_in_parse (GsfXMLIn *state, GsfInput *input); +char const *gsf_xml_in_check_ns (GsfXMLIn const *state, char const *str, + unsigned int ns_id); +gboolean gsf_xml_in_namecmp (GsfXMLIn const *state, char const *str, + unsigned int ns_id, char const *name); + +/****************************************************************************/ +/* Simplified GSF based xml export (does not use libxml) */ + +typedef struct _GsfXMLOut GsfXMLOut; + +#define GSF_XML_OUT_TYPE (gsf_xml_out_get_type ()) +#define GSF_XML_OUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_XML_OUT_TYPE, GsfXMLOut)) +#define GSF_IS_XML_OUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_XML_OUT_TYPE)) + +GType gsf_xml_out_get_type (void); +GsfXMLOut *gsf_xml_out_new (GsfOutput *output); + +void gsf_xml_out_set_doc_type (GsfXMLOut *xml, char const *type); +void gsf_xml_out_start_element (GsfXMLOut *xml, char const *id); +char const *gsf_xml_out_end_element (GsfXMLOut *xml); + +void gsf_xml_out_simple_element (GsfXMLOut *xml, char const *id, + char const *content); +void gsf_xml_out_simple_int_element (GsfXMLOut *xml, char const *id, + int val); +void gsf_xml_out_simple_float_element (GsfXMLOut *xml, char const *id, + double val, int precision); + +void gsf_xml_out_add_cstr_unchecked (GsfXMLOut *xml, char const *id, + char const *val_utf8); +void gsf_xml_out_add_cstr (GsfXMLOut *xml, char const *id, + char const *val_utf8); +void gsf_xml_out_add_bool (GsfXMLOut *xml, char const *id, + gboolean val); +void gsf_xml_out_add_int (GsfXMLOut *xml, char const *id, + int val); +void gsf_xml_out_add_uint (GsfXMLOut *xml, char const *id, + unsigned int val); +void gsf_xml_out_add_float (GsfXMLOut *xml, char const *id, + double val, int precision); +void gsf_xml_out_add_color (GsfXMLOut *xml, char const *id, + unsigned int r, unsigned int g, unsigned int b); +void gsf_xml_out_add_base64 (GsfXMLOut *xml, char const *id, + guint8 const *data, unsigned int len); +void gsf_xml_out_add_enum (GsfXMLOut *xml, char const *id, + GType etype, gint val); + +G_END_DECLS + +#endif /* GSF_LIBXML_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-meta-names.h b/lib/libgsf-1.12.3/gsf/gsf-meta-names.h new file mode 100644 index 0000000000..32bf99a958 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-meta-names.h @@ -0,0 +1,182 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-meta-names.h: a list of gsf-meta-names to "generically" represent + * all diviserly available implementation-specific + * meta-names. + * + * Author: Veerapuram Varadhan (vvaradhan@novell.com) + * + * Copyright (C) 2004 Novell, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ +#ifndef GSF_META_NAMES_H +#define GSF_META_NAMES_H + +/* (String) A formal name given to the resource */ +#define GSF_META_NAME_TITLE "dc:title" + +/* (String) An account of the content of the resource */ +#define GSF_META_NAME_DESCRIPTION "dc:description" + +/* (String) The topic of the content of the resource, *typically* including keywords */ +#define GSF_META_NAME_SUBJECT "dc:subject" + +/* (Date as ISO String) The last time this document was saved */ +#define GSF_META_NAME_DATE_MODIFIED "dc:date-modified" + +/* (Date as ISO String) A date associated with an event in the life cycle of the resource (creation/publication date) */ +#define GSF_META_NAME_DATE_CREATED "gsf:date-created" + +/* (String) Searchable, indexable keywords. Similar to PDF keywords or HTML's meta block */ +#define GSF_META_NAME_KEYWORDS "dc:keywords" + +/* (String) A language of the intellectual content of the resource (basically xx_YY form for us) */ +#define GSF_META_NAME_LANGUAGE "dc:language" + +/* (Integer) Count of revision on the document, if appropriate */ +#define GSF_META_NAME_REVISION_COUNT "gsf:revision-count" + +/* (Date as ISO String) The total-time taken till last-modified */ +#define GSF_META_NAME_EDITING_DURATION "gsf:editing-duration" + +/* (Integer) Count of tables in the document, if appropriate */ +#define GSF_META_NAME_TABLE_COUNT "gsf:table-count" + +/* (Integer) Count of images in the document, if appropriate */ +#define GSF_META_NAME_IMAGE_COUNT "gsf:image-count" + +/* (Integer) Count of objects (OLE and other graphics) in the document, if appropriate */ +#define GSF_META_NAME_OBJECT_COUNT "gsf:object-count" + +/* (Integer) Count of pages in the document, if appropriate */ +#define GSF_META_NAME_PAGE_COUNT "gsf:page-count" + +/* (Integer) Count of paragraphs in the document, if appropriate */ +#define GSF_META_NAME_PARAGRAPH_COUNT "gsf:paragraph-count" + +/* (Integer) Count of words in the document */ +#define GSF_META_NAME_WORD_COUNT "gsf:word-count" + +/* (Integer) Count of characters in the document */ +#define GSF_META_NAME_CHARACTER_COUNT "gsf:character-count" + +/* (Integer) Count of cells in the spread-sheet document, if appropriate */ +#define GSF_META_NAME_CELL_COUNT "gsf:cell-count" + +/* (Integer) Count of pages in the document, if appropriate */ +#define GSF_META_NAME_SPREADSHEET_COUNT "gsf:spreadsheet-count" + +/* (String) An entity primarily responsible for making the content of the resource + * typically a person, organization, or service + */ +#define GSF_META_NAME_CREATOR "gsf:creator" + +/* (String) The template file that is been used to generate this document */ +#define GSF_META_NAME_TEMPLATE "gsf:template" + +/* (String) The entity that made the last change to the document, + * typically a person, organization, or service + */ +#define GSF_META_NAME_LAST_SAVED_BY "gsf:last-saved-by" + +/* (Date as ISO String) The last time this document was printed */ +#define GSF_META_NAME_LAST_PRINTED "gsf:last-printed" + +/* (Integer) Level of security. + * Level Value + * ----- ----- + * None 0 + * Password protected 1 + * Read-only recommended 2 + * Read-only enforced 3 + * Locked for annotations 4 + * + */ +#define GSF_META_NAME_SECURITY "gsf:security" + +/* (String) Category of the document (example???) */ +#define GSF_META_NAME_CATEGORY "gsf:category" + +/* (String) Type of presentation, like "On-screen Show", "SlideView" etc */ +#define GSF_META_NAME_PRESENTATION_FORMAT "gsf:presentation-format" + +/* (Clipboard Format (VT_CF)) Thumbnail data of the document, typically + * a preview image of the document + */ +#define GSF_META_NAME_THUMBNAIL "gsf:thumbnail" + +/* (String) The creator (product) of this document. AbiWord, Gnumeric, etc... */ +#define GSF_META_NAME_GENERATOR "gsf:generator" + +/* (Integer) Count of liness in the document */ +#define GSF_META_NAME_LINE_COUNT "gsf:line-count" + +/* (Integer) Count of slides in the presentation document */ +#define GSF_META_NAME_SLIDE_COUNT "gsf:slide-count" + +/* (Integer) Count of "notes" in the document */ +#define GSF_META_NAME_NOTE_COUNT "gsf:note-count" + +/* (Integer) Count of hidden-slides in the presentation document */ +#define GSF_META_NAME_HIDDEN_SLIDE_COUNT "gsf:hidden-slide-count" + +/* (Integer) Count of "multi-media" clips in the document */ +#define GSF_META_NAME_MM_CLIP_COUNT "gsf:MM-clip-count" + +/* (Integer) Count of bytes in the document */ +#define GSF_META_NAME_BYTE_COUNT "gsf:byte-count" + +/* (Boolean) ????? */ +#define GSF_META_NAME_SCALE "gsf:scale" + +/* (VT_VECTOR|VT_VARIANT) ??????? */ +#define GSF_META_NAME_HEADING_PAIRS "gsf:heading-pairs" + +/* (VT_VECTOR|VT_LPSTR) ??????? */ +#define GSF_META_NAME_DOCUMENT_PARTS "gsf:document-parts" + +/* (String) Name of the manager of "CREATOR" entity */ +#define GSF_META_NAME_MANAGER "gsf:manager" + +/* (String) Name of the company/organization that + * the "CREATOR" entity is associated with. + */ +#define GSF_META_NAME_COMPANY "gsf:company" + +/* (Boolean) ??????? */ +#define GSF_META_NAME_LINKS_DIRTY "gsf:links-dirty" + +/* (Unknown) User-defined names */ +#define GSF_META_NAME_MSOLE_UNKNOWN_17 "msole:unknown-doc-17" +#define GSF_META_NAME_MSOLE_UNKNOWN_18 "msole:unknown-doc-18" +#define GSF_META_NAME_MSOLE_UNKNOWN_19 "msole:unknown-doc-19" /* bool */ +#define GSF_META_NAME_MSOLE_UNKNOWN_20 "msole:unknown-doc-20" +#define GSF_META_NAME_MSOLE_UNKNOWN_21 "msole:unknown-doc-21" +#define GSF_META_NAME_MSOLE_UNKNOWN_22 "msole:unknown-doc-22" /* bool */ +#define GSF_META_NAME_MSOLE_UNKNOWN_23 "msole:unknown-doc-23" /* i4 */ + +/* (None) Reserved name (PID) for Dictionary */ +#define GSF_META_NAME_DICTIONARY "gsf:dictionary" + +/* (Unsigned Integer) Identifier representing the default + * system locale. + */ +#define GSF_META_NAME_LOCALE_SYSTEM_DEFAULT "gsf:default-locale" + +/* (Unsigned Integer) Identifier representing the case-sensitiveness */ +#define GSF_META_NAME_CASE_SENSITIVE "gsf:case-sensitivity" + +#endif /* GSF_META_NAMES_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-msole-impl.h b/lib/libgsf-1.12.3/gsf/gsf-msole-impl.h new file mode 100644 index 0000000000..63bb91549c --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-msole-impl.h @@ -0,0 +1,84 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-msole-impl.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_MSOLE_IMPL_H +#define GSF_MSOLE_IMPL_H + +#include + +G_BEGIN_DECLS + +#define OLE_HEADER_SIZE 0x200 /* independent of big block size size */ +#define OLE_HEADER_SIGNATURE 0x00 +#define OLE_HEADER_CLSID 0x08 /* See ReadClassStg */ +#define OLE_HEADER_MINOR_VER 0x18 /* 0x33 and 0x3e have been seen */ +#define OLE_HEADER_MAJOR_VER 0x1a /* 0x3 been seen in wild */ +#define OLE_HEADER_BYTE_ORDER 0x1c /* 0xfe 0xff == Intel Little Endian */ +#define OLE_HEADER_BB_SHIFT 0x1e +#define OLE_HEADER_SB_SHIFT 0x20 +/* 0x22..0x27 reserved == 0 */ +#define OLE_HEADER_CSECTDIR 0x28 +#define OLE_HEADER_NUM_BAT 0x2c +#define OLE_HEADER_DIRENT_START 0x30 +/* 0x34..0x37 transacting signature must be 0 */ +#define OLE_HEADER_THRESHOLD 0x38 +#define OLE_HEADER_SBAT_START 0x3c +#define OLE_HEADER_NUM_SBAT 0x40 +#define OLE_HEADER_METABAT_BLOCK 0x44 +#define OLE_HEADER_NUM_METABAT 0x48 +#define OLE_HEADER_START_BAT 0x4c +#define BAT_INDEX_SIZE 4 +#define OLE_HEADER_METABAT_SIZE ((OLE_HEADER_SIZE - OLE_HEADER_START_BAT) / BAT_INDEX_SIZE) + +#define DIRENT_MAX_NAME_SIZE 0x40 +#define DIRENT_DETAILS_SIZE 0x40 +#define DIRENT_SIZE (DIRENT_MAX_NAME_SIZE + DIRENT_DETAILS_SIZE) +#define DIRENT_NAME_LEN 0x40 /* length in bytes incl 0 terminator */ +#define DIRENT_TYPE 0x42 +#define DIRENT_COLOUR 0x43 +#define DIRENT_PREV 0x44 +#define DIRENT_NEXT 0x48 +#define DIRENT_CHILD 0x4c +#define DIRENT_CLSID 0x50 /* only for dirs */ +#define DIRENT_USERFLAGS 0x60 /* only for dirs */ +#define DIRENT_CREATE_TIME 0x64 /* for files */ +#define DIRENT_MODIFY_TIME 0x6c /* for files */ +#define DIRENT_FIRSTBLOCK 0x74 +#define DIRENT_FILE_SIZE 0x78 +/* 0x7c..0x7f reserved == 0 */ + +#define DIRENT_TYPE_INVALID 0 +#define DIRENT_TYPE_DIR 1 +#define DIRENT_TYPE_FILE 2 +#define DIRENT_TYPE_LOCKBYTES 3 /* ? */ +#define DIRENT_TYPE_PROPERTY 4 /* ? */ +#define DIRENT_TYPE_ROOTDIR 5 +#define DIRENT_MAGIC_END 0xffffffff + +/* flags in the block allocation list to denote special blocks */ +#define BAT_MAGIC_UNUSED 0xffffffff /* -1 */ +#define BAT_MAGIC_END_OF_CHAIN 0xfffffffe /* -2 */ +#define BAT_MAGIC_BAT 0xfffffffd /* a bat block, -3 */ +#define BAT_MAGIC_METABAT 0xfffffffc /* a metabat block -4 */ + +G_END_DECLS + +#endif /* GSF_MSOLE_IMPL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-msole-utils.c b/lib/libgsf-1.12.3/gsf/gsf-msole-utils.c new file mode 100644 index 0000000000..c64362d994 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-msole-utils.c @@ -0,0 +1,2228 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-msole-utils.c: + * + * Copyright (C) 2002-2005 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2002-2005 Dom Lachowicz (cinamod@hotmail.com) + * excel_iconv* family of functions (C) 2001 by Vlad Harchev + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define NO_DEBUG_OLE_PROPS +#ifndef NO_DEBUG_OLE_PROPS +#define d(code) do { code } while (0) +#else +#define d(code) +#endif + +/* + * The Format Identifier for Summary Information + * F29F85E0-4FF9-1068-AB91-08002B27B3D9 + */ +static guint8 const component_guid [] = { + 0xe0, 0x85, 0x9f, 0xf2, 0xf9, 0x4f, 0x68, 0x10, + 0xab, 0x91, 0x08, 0x00, 0x2b, 0x27, 0xb3, 0xd9 +}; + +/* + * The Format Identifier for Document Summary Information + * D5CDD502-2E9C-101B-9397-08002B2CF9AE + */ +static guint8 const document_guid [] = { + 0x02, 0xd5, 0xcd, 0xd5, 0x9c, 0x2e, 0x1b, 0x10, + 0x93, 0x97, 0x08, 0x00, 0x2b, 0x2c, 0xf9, 0xae +}; + +/* + * The Format Identifier for User-Defined Properties + * D5CDD505-2E9C-101B-9397-08002B2CF9AE + */ +static guint8 const user_guid [] = { + 0x05, 0xd5, 0xcd, 0xd5, 0x9c, 0x2e, 0x1b, 0x10, + 0x93, 0x97, 0x08, 0x00, 0x2b, 0x2c, 0xf9, 0xae +}; + +typedef enum { + COMMON_PROP, /* in either summary or docsummary */ + COMPONENT_PROP, /* SummaryInformation properties */ + DOC_PROP, /* DocumentSummaryInformation properties */ + USER_PROP +} GsfMSOleMetaDataType; + +typedef enum { + VT_EMPTY = 0, + VT_NULL = 1, + VT_I2 = 2, + VT_I4 = 3, + VT_R4 = 4, + VT_R8 = 5, + VT_CY = 6, + VT_DATE = 7, + VT_BSTR = 8, + VT_DISPATCH = 9, + VT_ERROR = 10, + VT_BOOL = 11, + VT_VARIANT = 12, + VT_UNKNOWN = 13, + VT_DECIMAL = 14, + + VT_I1 = 16, + VT_UI1 = 17, + VT_UI2 = 18, + VT_UI4 = 19, + VT_I8 = 20, + VT_UI8 = 21, + VT_INT = 22, + VT_UINT = 23, + VT_VOID = 24, + VT_HRESULT = 25, + VT_PTR = 26, + VT_SAFEARRAY = 27, + VT_CARRAY = 28, + VT_USERDEFINED = 29, + VT_LPSTR = 30, + VT_LPWSTR = 31, + + VT_FILETIME = 64, + VT_BLOB = 65, + VT_STREAM = 66, + VT_STORAGE = 67, + VT_STREAMED_OBJECT = 68, + VT_STORED_OBJECT = 69, + VT_BLOB_OBJECT = 70, + VT_CF = 71, + VT_CLSID = 72, + VT_VECTOR = 0x1000 +} GsfMSOleVariantType; + +typedef struct { + char const *ms_name; + GsfMSOleMetaDataType section; + char const *gsf_name; + guint32 id; + GsfMSOleVariantType prefered_type; +} GsfMSOleMetaDataPropMap; + +typedef struct { + guint32 id; + gsf_off_t offset; +} GsfMSOleMetaDataProp; + +typedef struct { + GsfMSOleMetaDataType type; + gsf_off_t offset; + guint32 size, num_props; + GIConv iconv_handle; + unsigned char_size; + GHashTable *dict; +} GsfMSOleMetaDataSection; + +static GsfMSOleMetaDataPropMap const builtin_props [] = { + { "Dictionary", COMMON_PROP, GSF_META_NAME_DICTIONARY, 0, 0, /* magic */}, + { "CodePage", COMMON_PROP, GSF_META_NAME_LANGUAGE, 1, VT_I2 }, + { "LOCALE_SYSTEM_DEFAULT",COMMON_PROP, GSF_META_NAME_LOCALE_SYSTEM_DEFAULT, 0x80000000, VT_UI4}, + { "CASE_SENSITIVE", COMMON_PROP, GSF_META_NAME_CASE_SENSITIVE, 0x80000003, VT_UI4}, + { "Category", DOC_PROP, GSF_META_NAME_CATEGORY, 2, VT_LPSTR }, + { "PresentationFormat", DOC_PROP, GSF_META_NAME_PRESENTATION_FORMAT, 3, VT_LPSTR }, + { "NumBytes", DOC_PROP, GSF_META_NAME_BYTE_COUNT, 4, VT_I4 }, + { "NumLines", DOC_PROP, GSF_META_NAME_LINE_COUNT, 5, VT_I4 }, + { "NumParagraphs", DOC_PROP, GSF_META_NAME_PARAGRAPH_COUNT, 6, VT_I4 }, + { "NumSlides", DOC_PROP, GSF_META_NAME_SLIDE_COUNT, 7, VT_I4 }, + { "NumNotes", DOC_PROP, GSF_META_NAME_NOTE_COUNT, 8, VT_I4 }, + { "NumHiddenSlides", DOC_PROP, GSF_META_NAME_HIDDEN_SLIDE_COUNT, 9, VT_I4 }, + { "NumMMClips", DOC_PROP, GSF_META_NAME_MM_CLIP_COUNT, 10, VT_I4 }, + { "Scale", DOC_PROP, GSF_META_NAME_SCALE, 11, VT_BOOL }, + { "HeadingPairs", DOC_PROP, GSF_META_NAME_HEADING_PAIRS, 12, VT_VECTOR | VT_VARIANT }, + { "DocumentParts", DOC_PROP, GSF_META_NAME_DOCUMENT_PARTS, 13, VT_VECTOR | VT_LPSTR }, + { "Manager", DOC_PROP, GSF_META_NAME_MANAGER, 14, VT_LPSTR }, + { "Company", DOC_PROP, GSF_META_NAME_COMPANY, 15, VT_LPSTR }, + { "LinksDirty", DOC_PROP, GSF_META_NAME_LINKS_DIRTY, 16, VT_BOOL }, + { "DocSumInfo_17", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_17, 17, VT_UNKNOWN }, + { "DocSumInfo_18", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_18, 18, VT_UNKNOWN }, + { "DocSumInfo_19", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_19, 19, VT_BOOL }, + { "DocSumInfo_20", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_20, 20, VT_UNKNOWN }, + { "DocSumInfo_21", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_21, 21, VT_UNKNOWN }, + { "DocSumInfo_22", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_22, 22, VT_BOOL }, + { "DocSumInfo_23", DOC_PROP, GSF_META_NAME_MSOLE_UNKNOWN_23, 23, VT_I4 }, + { "Title", COMPONENT_PROP, GSF_META_NAME_TITLE, 2, VT_LPSTR }, + { "Subject", COMPONENT_PROP, GSF_META_NAME_SUBJECT, 3, VT_LPSTR }, + { "Author", COMPONENT_PROP, GSF_META_NAME_CREATOR, 4, VT_LPSTR }, + { "Keywords", COMPONENT_PROP, GSF_META_NAME_KEYWORDS, 5, VT_LPSTR }, + { "Comments", COMPONENT_PROP, GSF_META_NAME_DESCRIPTION, 6, VT_LPSTR }, + { "Template", COMPONENT_PROP, GSF_META_NAME_TEMPLATE, 7, VT_LPSTR }, + { "LastSavedBy", COMPONENT_PROP, GSF_META_NAME_LAST_SAVED_BY, 8, VT_LPSTR }, + { "RevisionNumber", COMPONENT_PROP, GSF_META_NAME_REVISION_COUNT, 9, VT_LPSTR }, + { "TotalEditingTime", COMPONENT_PROP, GSF_META_NAME_EDITING_DURATION, 10, VT_FILETIME }, + { "LastPrinted", COMPONENT_PROP, GSF_META_NAME_LAST_PRINTED, 11, VT_FILETIME }, + { "CreateTime", COMPONENT_PROP, GSF_META_NAME_DATE_CREATED, 12, VT_FILETIME }, + { "LastSavedTime", COMPONENT_PROP, GSF_META_NAME_DATE_MODIFIED, 13, VT_FILETIME }, + { "NumPages", COMPONENT_PROP, GSF_META_NAME_PAGE_COUNT, 14, VT_I4 }, + { "NumWords", COMPONENT_PROP, GSF_META_NAME_WORD_COUNT, 15, VT_I4 }, + { "NumCharacters", COMPONENT_PROP, GSF_META_NAME_CHARACTER_COUNT, 16, VT_I4 }, + { "Thumbnail", COMPONENT_PROP, GSF_META_NAME_THUMBNAIL, 17, VT_CF }, + { "AppName", COMPONENT_PROP, GSF_META_NAME_GENERATOR, 18, VT_LPSTR }, + { "Security", COMPONENT_PROP, GSF_META_NAME_SECURITY, 19, VT_I4 } +}; + +static GHashTable *name_to_prop_hash = NULL; + +static char const * +msole_vt_name (GsfMSOleVariantType type) +{ + static char const *names[] = { + "VT_EMPTY", "VT_NULL", "VT_I2", "VT_I4", "VT_R4", + "VT_R8", "VT_CY", "VT_DATE", "VT_BSTR", "VT_DISPATCH", + "VT_ERROR", "VT_BOOL", "VT_VARIANT", "VT_UNKNOWN", "VT_DECIMAL", + NULL, "VT_I1", "VT_UI1", "VT_UI2", "VT_UI4", + "VT_I8", "VT_UI8", "VT_INT", "VT_UINT", "VT_VOID", + "VT_HRESULT", "VT_PTR", "VT_SAFEARRAY", "VT_CARRAY", "VT_USERDEFINED", + "VT_LPSTR", "VT_LPWSTR", + }; + static char const *names2[] = { + "VT_FILETIME", + "VT_BLOB", "VT_STREAM", "VT_STORAGE", "VT_STREAMED_OBJECT", + "VT_STORED_OBJECT", "VT_BLOB_OBJECT", "VT_CF", "VT_CLSID" + }; + + type &= ~VT_VECTOR; + if (type <= VT_LPWSTR) + return names[type]; + g_return_val_if_fail (type >= VT_FILETIME, "_UNKNOWN_"); + g_return_val_if_fail (type <= VT_CLSID, "_UNKNOWN_"); + return names2[type-VT_FILETIME]; +} + +static char const * +msole_prop_id_to_gsf (GsfMSOleMetaDataSection *section, guint32 id, gboolean *linked) +{ + char const *res = NULL; + GsfMSOleMetaDataPropMap const *map = NULL; + unsigned i = 0; + + *linked = FALSE; + if (section->dict != NULL) { + if (id & 0x1000000) { + *linked = TRUE; + id &= ~0x1000000; + d (g_print ("LINKED ");); + } + + res = g_hash_table_lookup (section->dict, GINT_TO_POINTER (id)); + + if (res != NULL) { + d (g_print (res);); + return res; + } + } + + map = builtin_props ; + i = G_N_ELEMENTS (builtin_props); + while (i-- > 0) + if (map[i].id == id && + (map[i].section == COMMON_PROP || map[i].section == section->type)) { + d (g_print (map[i].gsf_name);); + return map[i].gsf_name; + } + + d (g_print ("_UNKNOWN_(0x%x %d)", id, id);); + + return NULL; +} + +static GsfMSOleMetaDataPropMap const * +msole_gsf_name_to_prop (char const *name) +{ + if (NULL == name_to_prop_hash) { + int i; + name_to_prop_hash = g_hash_table_new (g_str_hash, g_str_equal); + for (i = G_N_ELEMENTS (builtin_props); i-- > 0; ) + g_hash_table_replace (name_to_prop_hash, + (gpointer) builtin_props[i].gsf_name, + (gpointer) (builtin_props+i)); + } + + return g_hash_table_lookup (name_to_prop_hash, (gpointer)name); +} + +static void +set_error_missing_data (GError **error, const char *property_name, gsize size_needed, gsize size_gotten) +{ + g_set_error (error, + GSF_ERROR, + GSF_ERROR_INVALID_DATA, + _("Missing data when reading the %s property; got %" G_GSIZE_FORMAT "bytes, " + "but %" G_GSIZE_FORMAT " bytes at least are needed."), + property_name, + size_needed, + size_gotten); +} + +/* Can return errors from gsf_blob_new() and GSF_ERROR_INVALID_DATA */ +static gboolean +parse_vt_cf (GValue *res, guint8 const **data, guint8 const *data_end, GError **error) +{ + /* clipboard size uint32 sizeof (clipboard format tag) + sizeof (clipboard data) + * clipboard format tag int32 see below + * clipboard data byte[] see below + * + * Clipboard format tag: + * -1 - Windows clipboard format + * -2 - Macintosh clipboard format + * -3 - GUID that contains a format identifier (FMTID) + * >0 - custom clipboard format name plus data (see msdn site below) + * 0 - No data + * + * References: + * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/propvariant.asp + * http://jakarta.apache.org/poi/hpsf/thumbnails.html + * http://linux.com.hk/docs/poi/org/apache/poi/hpsf/Thumbnail.html + * http://sparks.discreet.com/knowledgebase/public/solutions/ExtractThumbnailImg.htm + */ + guint32 clip_size, clip_data_size; + gint32 clip_format; + GsfBlob *blob; + GsfClipData *clip_data; + + /* Clipboard size field */ + + if (data_end < *data + 4) { + set_error_missing_data (error, "VT_CF", 4, data_end - *data); + return FALSE; + } + + clip_size = GSF_LE_GET_GUINT32 (*data); + + if (clip_size < 4) { /* must emcompass int32 format plus data size */ + g_set_error (error, + GSF_ERROR, + GSF_ERROR_INVALID_DATA, + _("Corrupt data in the VT_CF property; clipboard data length must be at least 4 bytes, " + "but the data says it only has %" G_GSIZE_FORMAT " bytes available."), + (gsize) clip_size); + return FALSE; + } + + *data += 4; + + /* Check clipboard format plus data size */ + + if (data_end < *data + clip_size) { + set_error_missing_data (error, "VT_CF", clip_size, data_end - *data); + return FALSE; + } + + clip_format = GSF_LE_GET_GINT32 (*data); + *data += 4; + + switch (clip_format) { + case GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD: + case GSF_CLIP_FORMAT_MACINTOSH_CLIPBOARD: + case GSF_CLIP_FORMAT_GUID: + case GSF_CLIP_FORMAT_NO_DATA: + /* everything is ok */ + break; + + default: + if (clip_format > 0) + clip_format = GSF_CLIP_FORMAT_CLIPBOARD_FORMAT_NAME; + else + clip_format = GSF_CLIP_FORMAT_UNKNOWN; + + break; + } + + clip_data_size = clip_size - 4; + + blob = gsf_blob_new (clip_data_size, *data, error); + + *data += clip_data_size; + + if (!blob) + return FALSE; + + clip_data = gsf_clip_data_new (clip_format, blob); + g_object_unref (blob); + + g_value_init (res, GSF_TYPE_CLIP_DATA); + g_value_set_object (res, clip_data); + g_object_unref (clip_data); + + return TRUE; +} + +static GValue * +msole_prop_parse (GsfMSOleMetaDataSection *section, + guint32 type, guint8 const **data, guint8 const *data_end) +{ + GValue *res; + char *str; + guint32 len; + gboolean const is_vector = type & VT_VECTOR; + GError *error; + + g_return_val_if_fail (!(type & (unsigned)(~0x1fff)), NULL); /* not valid in a prop set */ + + type &= 0xfff; + + if (is_vector) { + /* + * A vector is basically an array. If the type associated with + * it is a variant, then each element can have a different + * variant type. Otherwise, each element has the same variant + * type associated with the vector. + */ + unsigned i, n; + GsfDocPropVector *vector; + + g_return_val_if_fail (*data + 4 <= data_end, NULL); + + n = GSF_LE_GET_GUINT32 (*data); + *data += 4; + + d (g_print (" array with %d elem\n", n); + gsf_mem_dump (*data, (unsigned)(data_end - *data));); + + vector = gsf_docprop_vector_new (); + + for (i = 0 ; i < n ; i++) { + GValue *v; + d (g_print ("\t[%d] ", i);); + v = msole_prop_parse (section, type, data, data_end); + if (v) { + if (G_IS_VALUE (v)) { + gsf_docprop_vector_append (vector, v); + g_value_unset (v); + } + g_free (v); + } + } + + res = g_new0 (GValue, 1); + g_value_init (res, GSF_DOCPROP_VECTOR_TYPE); + g_value_set_object (res, vector); + g_object_unref (vector); + return res; + } + + res = g_new0 (GValue, 1); + d (g_print ("%s\n", msole_vt_name (type));); + switch (type) { + case VT_EMPTY : + /* + * A property with a type indicator of VT_EMPTY has no data + * associated with it; that is, the size of the value is zero. + */ + /* value::unset == empty */ + break; + + case VT_NULL : + /* This is like a pointer to NULL */ + /* value::unset == null too :-) do we need to distinguish ? */ + break; + + case VT_I2 : + /* 2-byte signed integer */ + g_return_val_if_fail (*data + 2 <= data_end, NULL); + g_value_init (res, G_TYPE_INT); + g_value_set_int (res, GSF_LE_GET_GINT16 (*data)); + *data += 2; + break; + + case VT_I4 : + /* 4-byte signed integer */ + g_return_val_if_fail (*data + 4 <= data_end, NULL); + g_value_init (res, G_TYPE_INT); + g_value_set_int (res, GSF_LE_GET_GINT32 (*data)); + *data += 4; + break; + + case VT_R4 : + /* 32-bit IEEE floating-point value */ + g_return_val_if_fail (*data + 4 <= data_end, NULL); + g_value_init (res, G_TYPE_FLOAT); + g_value_set_float (res, GSF_LE_GET_FLOAT (*data)); + *data += 4; + break; + + case VT_R8 : + /* 64-bit IEEE floating-point value */ + g_return_val_if_fail (*data + 8 <= data_end, NULL); + g_value_init (res, G_TYPE_DOUBLE); + g_value_set_double (res, GSF_LE_GET_DOUBLE (*data)); + *data += 8; + break; + + case VT_CY : + /* 8-byte two's complement integer (scaled by 10,000) */ + /* CHEAT : just store as an int64 for now */ + g_return_val_if_fail (*data + 8 <= data_end, NULL); + g_value_init (res, G_TYPE_INT64); + g_value_set_int64 (res, GSF_LE_GET_GINT64 (*data)); + break; + + case VT_DATE : + /* + * 64-bit floating-point number representing the number of days + * (not seconds) since December 31, 1899. + */ +/* FIXME FIXME FIXME TODO */ + break; + + case VT_BSTR : + /* + * Pointer to null-terminated Unicode string; the string is pre- + * ceeded by a DWORD representing the byte count of the number + * of bytes in the string (including the terminating null). + */ +/* FIXME FIXME FIXME TODO */ + break; + + case VT_DISPATCH : +/* FIXME FIXME FIXME TODO */ + break; + + case VT_BOOL : + /* A boolean (WORD) value containg 0 (false) or -1 (true). */ + g_return_val_if_fail (*data + 1 <= data_end, NULL); + g_value_init (res, G_TYPE_BOOLEAN); + g_value_set_boolean (res, **data ? TRUE : FALSE); + *data += 1; + break; + + case VT_VARIANT : d (g_print ("\tcontaining a ");); + /* + * A type indicator (a DWORD) followed by the corresponding + * value. VT_VARIANT is only used in conjunction with + * VT_VECTOR. + */ + g_free (res); + type = GSF_LE_GET_GUINT32 (*data); + *data += 4; + return msole_prop_parse (section, type, data, data_end); + + case VT_UI1 : + /* 1-byte unsigned integer */ + g_return_val_if_fail (*data + 1 <= data_end, NULL); + g_value_init (res, G_TYPE_UCHAR); + g_value_set_uchar (res, (guchar)(**data)); + *data += 1; + break; + + case VT_UI2 : + /* 2-byte unsigned integer */ + g_return_val_if_fail (*data + 2 <= data_end, NULL); + g_value_init (res, G_TYPE_UINT); + g_value_set_uint (res, GSF_LE_GET_GUINT16 (*data)); + *data += 2; + break; + + case VT_UI4 : + /* 4-type unsigned integer */ + g_return_val_if_fail (*data + 4 <= data_end, NULL); + g_value_init (res, G_TYPE_UINT); + g_value_set_uint (res, GSF_LE_GET_GUINT32 (*data)); + *data += 4; + break; + + case VT_I8 : d (g_print ("VT_I8\n");); + /* 8-byte signed integer */ + g_return_val_if_fail (*data + 8 <= data_end, NULL); + g_value_init (res, G_TYPE_INT64); + g_value_set_int64 (res, GSF_LE_GET_GINT64 (*data)); + *data += 8; + break; + + case VT_UI8 : + /* 8-byte unsigned integer */ + g_return_val_if_fail (*data + 8 <= data_end, NULL); + g_value_init (res, G_TYPE_UINT64); + g_value_set_uint64 (res, GSF_LE_GET_GUINT64 (*data)); + *data += 8; + break; + + case VT_LPSTR : + /* + * This is the representation of many strings. It is stored in + * the same representation as VT_BSTR. Note that the serialized + * representation of VP_LPSTR has a preceding byte count, whereas + * the in-memory representation does not. + */ + /* be anal and safe */ + g_return_val_if_fail (*data + 4 <= data_end, NULL); + + len = GSF_LE_GET_GUINT32 (*data); + + g_return_val_if_fail (len < 0x10000, NULL); + g_return_val_if_fail (*data + 4 + len*section->char_size <= data_end, NULL); + + error = NULL; + d (gsf_mem_dump (*data + 4, len * section->char_size);); + str = g_convert_with_iconv (*data + 4, + len * section->char_size, + section->iconv_handle, NULL, NULL, &error); + + g_value_init (res, G_TYPE_STRING); + if (NULL != str) { + g_value_set_string (res, str); + g_free (str); + } else if (NULL != error) { + g_warning ("error: %s", error->message); + g_error_free (error); + } else { + g_warning ("unknown error converting string property, using blank"); + } + *data += 4 + len * section->char_size; + break; + + case VT_LPWSTR : + /* + * A counted and null-terminated Unicode string; a DWORD character + * count (where the count includes the terminating null) followed + * by that many Unicode (16-bit) characters. Note that the count + * is character count, not byte count. + */ + /* be anal and safe */ + g_return_val_if_fail (*data + 4 <= data_end, NULL); + + len = GSF_LE_GET_GUINT32 (*data); + + g_return_val_if_fail (len < 0x10000, NULL); + g_return_val_if_fail (*data + 4 + len <= data_end, NULL); + + error = NULL; + d (gsf_mem_dump (*data + 4, len*2);); + str = g_convert (*data + 4, len*2, + "UTF-8", "UTF-16LE", NULL, NULL, &error); + + g_value_init (res, G_TYPE_STRING); + if (NULL != str) { + g_value_set_string (res, str); + g_free (str); + } else if (NULL != error) { + g_warning ("error: %s", error->message); + g_error_free (error); + } else { + g_warning ("unknown error converting string property, using blank"); + } + *data += 4 + len*2; + break; + + case VT_FILETIME : + /* 64-bit FILETIME structure, as defined by Win32. */ + g_return_val_if_fail (*data + 8 <= data_end, NULL); + { + /* ft * 100ns since Jan 1 1601 */ + guint64 ft = GSF_LE_GET_GUINT64 (*data); + GsfTimestamp ts; + + ft /= 10000000; /* convert to seconds */ + ft -= G_GINT64_CONSTANT (11644473600); /* move to Jan 1 1970 */ + ts.timet = (time_t)ft; + g_value_init (res, GSF_TIMESTAMP_TYPE); + gsf_value_set_timestamp (res, &ts); + *data += 8; + break; + } + case VT_BLOB : + /* + * A DWORD count of bytes, followed by that many bytes of data. + * The byte count does not include the four bytes for the length + * of the count itself: An empty blob would have a count of + * zero, followed by zero bytes. Thus the serialized represen- + * tation of a VT_BLOB is similar to that of a VT_BSTR but does + * not guarantee a null byte at the end of the data. + */ +/* FIXME FIXME FIXME TODO */ + g_free (res); + res = NULL; + break; + + case VT_STREAM : + /* + * Indicates the value is stored in a stream that is sibling to + * the CONTENTS stream. Following this type indicator is data + * in the format of a serialized VT_LPSTR, which names the stream + * containing the data. + */ +/* FIXME FIXME FIXME TODO */ + g_free (res); + res = NULL; + break; + + case VT_STORAGE : + /* + * Indicates the value is stored in an IStorage that is sibling + * to the CONTENTS stream. Following this type indicator is data + * in the format of a serialized VT_LPSTR, which names the + * IStorage containing the data. + */ +/* FIXME FIXME FIXME TODO */ + g_free (res); + res = NULL; + break; + + case VT_STREAMED_OBJECT: + /* + * Same as VT_STREAM, but indicates that the stream contains a + * serialized object, which is a class ID followed by initiali- + * zation data for the class. + */ +/* FIXME FIXME FIXME TODO */ + g_free (res); + res = NULL; + break; + + case VT_STORED_OBJECT : + /* + * Same as VT_STORAGE, but indicates that the designated IStorage + * contains a loadable object. + */ +/* FIXME FIXME FIXME TODO */ + g_free (res); + res = NULL; + break; + + case VT_BLOB_OBJECT : + /* + * Contains a serialized object in the same representation as + * would appear in a VT_STREAMED_OBJECT. That is, following the + * VT_BLOB_OBJECT tag is a DWORD byte count of the remaining data + * (where the byte count does not include the size of itself) + * which is in the format of a class ID followed by initialization + * data for that class + */ +/* FIXME FIXME FIXME TODO */ + + g_free (res); + res = NULL; + break; + + case VT_CF : + error = NULL; + if (!parse_vt_cf (res, data, data_end, &error)) { + /* suck, we can't propagate the error upwards */ + g_warning ("error: %s", error->message); + g_error_free (error); + g_free (res); + res = NULL; + } + break; + + case VT_CLSID : + /* A class ID (or other GUID) */ + *data += 16; + g_free (res); + res = NULL; + break; + + case VT_ERROR : + /* A DWORD containing a status code. */ + case VT_UNKNOWN : + case VT_DECIMAL : + case VT_I1 : + /* 1-byte signed integer */ + case VT_INT : + case VT_UINT : + case VT_VOID : + case VT_HRESULT : + case VT_PTR : + case VT_SAFEARRAY : + case VT_CARRAY : + case VT_USERDEFINED : + g_warning ("type %s (0x%x) is not permitted in property sets", + msole_vt_name (type), type); + g_free (res); + res = NULL; + break; + + default : + g_warning ("Unknown property type %d (0x%x)", type, type); + g_free (res); + res = NULL; + } + + if (res != NULL && G_IS_VALUE (res)) { + d ( { + char *val = g_strdup_value_contents (res); + g_print ("%s\n", val); + g_free (val); + }); + } else { + d ({ + char const *type_name = msole_vt_name (type); + if (type_name) { + g_print ("A '%s' property could not be parsed\n", type_name); + } else { + g_print ("A %d property could not be parsed\n", type); + } + }); + } + return res; +} + +static gboolean +msole_prop_read (GsfInput *in, + GsfMSOleMetaDataSection *section, + GsfMSOleMetaDataProp *props, + unsigned i, + GsfDocMetaData *accum) +{ + guint32 type; + guint8 const *data; + /* FIXME : why size-4 ? I must be missing something */ + gsf_off_t size = ((i+1) >= section->num_props) + ? section->size-4 : props[i+1].offset; + char *name; + GValue *val; + + g_return_val_if_fail (i < section->num_props, FALSE); + g_return_val_if_fail (size >= props[i].offset + 4, FALSE); + + size -= props[i].offset; /* includes the type id */ + if (gsf_input_seek (in, section->offset+props[i].offset, G_SEEK_SET) || + NULL == (data = gsf_input_read (in, size, NULL))) { + g_warning ("failed to read prop #%d", i); + return FALSE; + } + + type = GSF_LE_GET_GUINT32 (data); + data += 4; + + /* dictionary is magic */ + if (props[i].id == 0) { + guint32 len, id, i, n; + gsize gslen; + char *name; + guint8 const *start = data; + + g_return_val_if_fail (section->dict == NULL, FALSE); + + section->dict = g_hash_table_new_full ( + g_direct_hash, g_direct_equal, + NULL, g_free); + + d ({ g_print ("Dictionary = \n"); gsf_mem_dump (data-4, size); }); + n = type; + for (i = 0 ; i < n ; i++) { + id = GSF_LE_GET_GUINT32 (data); + len = GSF_LE_GET_GUINT32 (data + 4); + + g_return_val_if_fail (len < 0x10000, FALSE); + + gslen = 0; + name = g_convert_with_iconv (data + 8, + len * section->char_size, + section->iconv_handle, &gslen, NULL, NULL); + len = (guint32)gslen; + data += 8 + len; + + d (g_print ("\t%u == %s\n", id, name);); + g_hash_table_replace (section->dict, + GINT_TO_POINTER (id), name); + + /* MS documentation blows goats ! + * The docs claim there are padding bytes in the dictionary. + * Their examples show padding bytes. + * In reality non-unicode strings do not see to have padding. + */ + if (section->char_size != 1 && (data - start) % 4) + data += 4 - ((data - start) % 4); + } + } else { + gboolean linked; + d (g_print ("===> %u) ", i); + gsf_mem_dump (data-4, size);); + + name = g_strdup (msole_prop_id_to_gsf (section, props[i].id, &linked)); + d (g_print (" @ %x %x = ", (unsigned)props[i].offset, (unsigned)size);); + val = msole_prop_parse (section, type, &data, data + size); + + if (NULL != name && NULL != val) { + if (linked) { + GsfDocProp *prop = gsf_doc_meta_data_lookup (accum, name); + if (NULL == prop) { + g_warning ("linking property '%s' before it\'s value is specified", + (name ? name : "")); + } else if (!G_VALUE_HOLDS_STRING (val)) { + g_warning ("linking property '%s' before it\'s value is specified", + (name ? name : "")); + } else + gsf_doc_prop_set_link (prop, + g_value_dup_string (val)); + } else { + gsf_doc_meta_data_insert (accum, name, val); + val = NULL; + name = NULL; + } + } + + if (NULL != val) { + if (G_IS_VALUE (val)) + g_value_unset (val); + g_free (val); + } + g_free (name); + } + + return TRUE; +} + +static int +msole_prop_cmp (gconstpointer a, gconstpointer b) +{ + GsfMSOleMetaDataProp const *prop_a = a; + GsfMSOleMetaDataProp const *prop_b = b; + + if (prop_a->offset < prop_b->offset) + return -1; + else if (prop_a->offset > prop_b->offset) + return +1; + else + return 0; +} + +/** + * gsf_msole_metadata_read : + * @in : #GsfInput + * @accum : #GsfDocMetaData + * + * Read a stream formated as a set of MS OLE properties from @in and store the + * results in @accum. + * + * Returns GError which the caller must free on error. + **/ +GError * +gsf_msole_metadata_read (GsfInput *in, GsfDocMetaData *accum) +{ + guint8 const *data = gsf_input_read (in, 28, NULL); + guint16 version; + guint32 os, num_sections; + unsigned i, j; + GsfMSOleMetaDataSection *sections; + GsfMSOleMetaDataProp *props; + GsfDocProp *prop; + + if (NULL == data) + return g_error_new (gsf_input_error_id (), 0, + "Unable to read MS property stream header"); + + d ({g_print ("===================================\n" + "header class id ==\n"); + gsf_mem_dump (data, 28);}); + /* + * Validate the Property Set Header. + * Format (bytes) : + * 00 - 01 Byte order 0xfffe + * 02 - 03 Format 0 + * 04 - 05 OS Version high word is the OS + * 06 - 07 low word is the OS version + * 0 = win16 + * 1 = mac + * 2 = win32 + * 08 - 23 Class Identifier Usually Format ID + * 24 - 27 Section count Should be at least 1 + */ + os = GSF_LE_GET_GUINT16 (data + 6); + version = GSF_LE_GET_GUINT16 (data + 2); + num_sections = GSF_LE_GET_GUINT32 (data + 24); + if (GSF_LE_GET_GUINT16 (data + 0) != 0xfffe + || (version != 0 && version != 1) + || os > 2 + || num_sections > 100) /* arbitrary sanity check */ + return g_error_new (gsf_input_error_id (), 0, + "Invalid MS property stream header"); + + /* extract the section info */ + /* + * The Format ID/Offset list follows. + * Format: + * 00 - 16 Section Name Format ID + * 16 - 19 Section Offset The offset is the number of + * bytes from the start of the + * whole stream to where the + * section begins. + */ + sections = (GsfMSOleMetaDataSection *)g_alloca (sizeof (GsfMSOleMetaDataSection)* num_sections); + for (i = 0 ; i < num_sections ; i++) { + data = gsf_input_read (in, 20, NULL); + if (NULL == data) + return g_error_new (gsf_input_error_id (), 0, + "Unable to read MS property stream header"); + if (!memcmp (data, component_guid, sizeof (component_guid))) + sections [i].type = COMPONENT_PROP; + else if (!memcmp (data, document_guid, sizeof (document_guid))) + sections [i].type = DOC_PROP; + else if (!memcmp (data, user_guid, sizeof (user_guid))) + sections [i].type = USER_PROP; + else { + sections [i].type = USER_PROP; + g_warning ("Unknown property section type, treating it as USER"); + gsf_mem_dump (data, 16); + } + + sections [i].offset = GSF_LE_GET_GUINT32 (data + 16); + } + + /* + * A section is the third part of the property set stream. + * Format (bytes) : + * 00 - 03 Section size A byte count for the section (which is inclusive + * of the byte count itself and should always be a + * multiple of 4); + * 04 - 07 Property count A count of the number of properties + * 08 - xx An array of 32-bit Property ID/Offset pairs + * yy - zz An array of Property Type indicators/Value pairs + */ + for (i = 0 ; i < num_sections ; i++) { + if (gsf_input_seek (in, sections[i].offset, G_SEEK_SET) || + NULL == (data = gsf_input_read (in, 8, NULL))) + return g_error_new (gsf_input_error_id (), 0, + "Invalid MS property section"); + + d (g_print ("=============================================\n" + "===> section #%d : type %d at offset 0x%x\n", + i, (int)sections [i].type, + (guint32)sections [i].offset);); + + sections[i].iconv_handle = (GIConv)-1; + sections[i].char_size = 1; + sections[i].dict = NULL; + sections[i].size = GSF_LE_GET_GUINT32 (data); /* includes header */ + sections[i].num_props = GSF_LE_GET_GUINT32 (data + 4); + if (sections[i].num_props <= 0) + continue; + + /* + * Get and save all the Property ID/Offset pairs. + * Format (bytes) : + * 00 - 03 id Property ID + * 04 - 07 offset The distance from the start of the section to the + * start of the Property Type/Value pair. + */ + d (g_print ("Offsets\n");); + props = g_new (GsfMSOleMetaDataProp, sections[i].num_props); + for (j = 0; j < sections[i].num_props; j++) { + if (NULL == (data = gsf_input_read (in, 8, NULL))) { + g_free (props); + return g_error_new (gsf_input_error_id (), 0, + "Invalid MS property section"); + } + + props [j].id = GSF_LE_GET_GUINT32 (data); + props [j].offset = GSF_LE_GET_GUINT32 (data + 4); + d (g_print ("%d) ID=%d, offset=0x%x\n", j, + props [j].id, (unsigned)props [j].offset);); + } + + /* order prop info by offset to facilitate bounds checking */ + qsort (props, sections[i].num_props, + sizeof (GsfMSOleMetaDataProp), + msole_prop_cmp); + + /* + * Find and process the code page. + * Property ID 1 is reserved as an indicator of the code page. + */ + sections[i].iconv_handle = (GIConv)-1; + sections[i].char_size = 1; + for (j = 0; j < sections[i].num_props; j++) /* first codepage */ + if (props[j].id == 1) { + msole_prop_read (in, sections+i, props, j, accum); + if (NULL != (prop = gsf_doc_meta_data_lookup (accum, GSF_META_NAME_LANGUAGE))) { + GValue const *val = gsf_doc_prop_get_val (prop); + if (NULL != val && G_VALUE_HOLDS_INT (val)) { + int codepage = g_value_get_int (val); + sections[i].iconv_handle = + gsf_msole_iconv_open_for_import (codepage); + if (codepage == 1200 || codepage == 1201) + sections[i].char_size = 2; + } + } + } + + if (sections[i].iconv_handle == (GIConv)-1) + sections[i].iconv_handle = gsf_msole_iconv_open_for_import (1252); + + /* + * Find and process the Property Set Dictionary + * Property ID 0 is reserved as an indicator of the dictionary. + * For User Defined Sections, Property ID 0 is NOT a dictionary. + */ + for (j = 0; j < sections[i].num_props; j++) /* then dictionary */ + if (props[j].id == 0) + msole_prop_read (in, sections+i, props, j, accum); + + /* Process all the properties */ + for (j = 0; j < sections[i].num_props; j++) /* the rest */ + if (props[j].id > 1) + msole_prop_read (in, sections+i, props, j, accum); + + gsf_iconv_close (sections[i].iconv_handle); + g_free (props); + if (sections[i].dict != NULL) + g_hash_table_destroy (sections[i].dict); + } + return NULL; +} + +/****************************************************************************/ + +typedef struct { + GsfOutput *out; + gboolean doc_not_component; + + GHashTable *dict; + struct { + unsigned count; /* includes 2nd prop for links */ + GSList *props; + } builtin, user; + + unsigned codepage; +} WritePropState; + +static GsfMSOleVariantType +gvalue_to_msole_vt (GValue const *value, GsfMSOleMetaDataPropMap const *map) +{ + g_return_val_if_fail (value != NULL, VT_EMPTY); + + switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value))) { + case G_TYPE_BOOLEAN: return VT_BOOL; + case G_TYPE_UCHAR: return VT_UI1; + case G_TYPE_FLOAT: return VT_R4; + case G_TYPE_DOUBLE: return VT_R8; + case G_TYPE_STRING: return VT_LPSTR; + case G_TYPE_INT: + return (NULL != map && map->prefered_type == VT_I2) + ? VT_I2 : VT_I4; + case G_TYPE_UINT: + return (NULL != map && map->prefered_type == VT_UI2) + ? VT_UI2 : VT_UI4; + case G_TYPE_BOXED: + if (VAL_IS_GSF_TIMESTAMP (value)) + return VT_FILETIME; + return VT_UNKNOWN; + case G_TYPE_OBJECT: + if (VAL_IS_GSF_DOCPROP_VECTOR (value)) { + GValueArray *vector = gsf_value_get_docprop_varray (value); + unsigned i, n; + GsfMSOleVariantType type, tmp; + + if (vector == NULL) + return VT_UNKNOWN; + + if (map != NULL) { + type = map->prefered_type & (~VT_VECTOR); + if (type == VT_VARIANT) + return VT_VECTOR | VT_VARIANT; + } else + type = VT_UNKNOWN; + n = vector->n_values; + for (i = 0; i < n; i++) { + tmp = gvalue_to_msole_vt ( + g_value_array_get_nth (vector, i), NULL); + if (type == VT_UNKNOWN) + type = tmp; + else if (type != tmp) + return VT_VECTOR | VT_VARIANT; + } + return VT_VECTOR | type; + } + break; + } + return VT_UNKNOWN; +} + +/* Returns TRUE on success */ +static gboolean +msole_metadata_write_prop (WritePropState *state, + char const *name, + GValue const *value, + gboolean suppress_type) +{ + static guint8 const zero[1] = { '\0' }; + GsfMSOleMetaDataPropMap const *map = + (name != NULL) ? msole_gsf_name_to_prop (name) : NULL; + GsfMSOleVariantType type; + guint8 buf[8]; + + g_return_val_if_fail (value != NULL, FALSE); + + type = gvalue_to_msole_vt (value, map); + if (!suppress_type) { + GSF_LE_SET_GUINT32 (buf, type); + gsf_output_write (state->out, 4, buf); + } + if (NULL != map && map->prefered_type != type) { + d(g_print ("Exporting property '%s' with type 0x%x rather than the usual 0x%x\n", + map->gsf_name, type, map->prefered_type);); + } + + if (type & VT_VECTOR) { + GValueArray *vector = gsf_value_get_docprop_varray (value); + unsigned i, n = vector->n_values; + gboolean res; + + GSF_LE_SET_GINT32 (buf, n); + res = gsf_output_write (state->out, 4, buf); + for (i = 0; i < n; i++) + res &= msole_metadata_write_prop (state, NULL, + g_value_array_get_nth (vector, i), + type != (VT_VECTOR | VT_VARIANT)); + return res; + } + + switch (type) { + case VT_BOOL: + if (g_value_get_boolean (value)) + GSF_LE_SET_GINT32 (buf, 0xffffffff); + else + GSF_LE_SET_GINT32 (buf, 0); + return gsf_output_write (state->out, 4, buf); + case VT_UI1: + GSF_LE_SET_GUINT32 (buf, g_value_get_uchar (value)); + return gsf_output_write (state->out, 4, buf); + case VT_I2: + GSF_LE_SET_GINT16 (buf, g_value_get_int (value)); + GSF_LE_SET_GUINT16 (buf+2, 0); + return gsf_output_write (state->out, 4, buf); + case VT_I4: + GSF_LE_SET_GINT32 (buf, g_value_get_int (value)); + return gsf_output_write (state->out, 4, buf); + case VT_UI2: + case VT_UI4: + GSF_LE_SET_GUINT32 (buf, g_value_get_uint (value)); + return gsf_output_write (state->out, 4, buf); + case VT_R4: + GSF_LE_SET_FLOAT (buf, g_value_get_float (value)); + return gsf_output_write (state->out, 4, buf); + case VT_R8: + GSF_LE_SET_FLOAT (buf, g_value_get_double (value)); + return gsf_output_write (state->out, 8, buf); + + case VT_LPSTR : { +/* FIXME FIXME FIXME TODO : use iconv from codepage */ + char const *txt = g_value_get_string (value); + unsigned len = (NULL != txt) ? strlen (txt) : 0; + GSF_LE_SET_GUINT32 (buf, len+1); + return gsf_output_write (state->out, 4, buf) && + gsf_output_write (state->out, len, txt) && + gsf_output_write (state->out, 1, zero); + } + + case VT_FILETIME : { + GsfTimestamp const *ts = g_value_get_boxed (value); + gint32 timet_signed = (gint32) ts->timet; + guint64 ft; + + ft = timet_signed + G_GINT64_CONSTANT (11644473600); + ft *= 10000000; + + GSF_LE_SET_GUINT64 (buf, ft); + + return gsf_output_write (state->out, 8, buf); + } + + default: + break; + } + + g_warning ("Ignoring property '%s', how do we export a property of type '%s'", + name ? name : "", + g_type_name (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value)))); + return FALSE; +} + +static void +cb_write_dict (char const *name, gpointer id, WritePropState *state) +{ + static guint8 const zero[1] = { '\0' }; + guint8 buf [4]; + unsigned len = strlen (name) + 1; + GSF_LE_SET_GUINT32 (buf, GPOINTER_TO_UINT (id)); + GSF_LE_SET_GUINT32 (buf+4, len+1); + gsf_output_write (state->out, 8, buf); + gsf_output_write (state->out, len, name); + gsf_output_write (state->out, 1, zero); +} + +static gboolean +msole_metadata_write_section (WritePropState *state, gboolean user) +{ + char const *name; + guint8 buf [8]; + GSList *ptr = user ? state->user.props : state->builtin.props; + unsigned count = user ? state->user.count : state->builtin.count; + gsf_off_t len, base = gsf_output_tell (state->out); + GsfMSOleMetaDataProp *offsets; + GsfMSOleMetaDataPropMap const *map; + GsfDocProp const *prop; + gpointer tmp; + unsigned i; + GValue scratch; + + if (user && state->dict == NULL) + return TRUE; + + /* Skip past the size and id/offset pairs */ + if (!gsf_output_seek (state->out, + 4 /* length */ + + 4 /* count */ + + 8 * count /* id/offset pairs */, + G_SEEK_END)) + return FALSE; + + memset (&scratch, 0, sizeof (GValue)); + g_value_init (&scratch, G_TYPE_STRING); + + offsets = g_alloca (sizeof (GsfMSOleMetaDataProp) * count); + + /* 0) codepage */ + offsets[0].id = 1; + offsets[0].offset = gsf_output_tell (state->out); + GSF_LE_SET_GUINT32 (buf, VT_I2); + GSF_LE_SET_GUINT32 (buf+4, state->codepage); + gsf_output_write (state->out, 8, buf); + + /* 1) dictionary */ + if (user) { + offsets[1].id = 0; + offsets[1].offset = gsf_output_tell (state->out); + GSF_LE_SET_GUINT32 (buf, g_hash_table_size (state->dict)); + gsf_output_write (state->out, 4, buf); + g_hash_table_foreach (state->dict, + (GHFunc) cb_write_dict, state); + i = 2; + } else + i = 1; + + /* 2) props */ + for (; ptr != NULL && i < count ; ptr = ptr->next, i++) { + prop = ptr->data; + name = gsf_doc_prop_get_name (prop); + if (user) { + tmp = g_hash_table_lookup (state->dict, name); + offsets[i].id = GPOINTER_TO_INT (tmp); + if (offsets[i].id < 2) { + g_warning ("Invalid ID (%d) for custom name '%s'", offsets[i].id, name); + continue; + } + } else { + map = msole_gsf_name_to_prop (name); + if (map == NULL) { + g_warning ("Missing map for builting property '%s'", name); + continue; + } + offsets[i].id = map->id; + } + + offsets[i].offset = gsf_output_tell (state->out); + msole_metadata_write_prop (state, name, + gsf_doc_prop_get_val (prop), FALSE); + if (gsf_doc_prop_get_link (prop)) { + i++; + offsets[i].id = offsets[i-1].id | 0x1000000; + offsets[i].offset = gsf_output_tell (state->out); + g_value_set_static_string (&scratch, + gsf_doc_prop_get_link (prop)); + msole_metadata_write_prop (state, NULL, &scratch, FALSE); + } + } + + len = gsf_output_tell (state->out) - base; + gsf_output_seek (state->out, base, G_SEEK_SET); + GSF_LE_SET_GUINT32 (buf, len); + GSF_LE_SET_GUINT32 (buf+4, count); + gsf_output_write (state->out, 8, buf); + for (i = 0 ; i < count ; i++) { + GSF_LE_SET_GUINT32 (buf, offsets[i].id); + GSF_LE_SET_GUINT32 (buf+4, offsets[i].offset - base); + gsf_output_write (state->out, 8, buf); + } + + return gsf_output_seek (state->out, 0, G_SEEK_END); +} + +static void +cb_count_props (char const *name, GsfDocProp *prop, WritePropState *state) +{ + GsfMSOleMetaDataPropMap const *map = msole_gsf_name_to_prop (name); + + /* allocate predefined ids or add it to the dictionary */ + if (map != NULL) { + if (map->id == 0) return; /* dictionary is handled elsewhere */ + if (map->section == (state->doc_not_component ? COMPONENT_PROP : DOC_PROP)) + return; + if (map->id == 1) { /*codepage */ + GValue const *val = gsf_doc_prop_get_val (prop); + if (NULL != val && G_VALUE_HOLDS_INT (val)) + state->codepage = g_value_get_int (val); + return; + } + + d (g_print ("%d) Adding builtin %s'\n", + state->builtin.count, map->gsf_name);); + state->builtin.count += gsf_doc_prop_get_link (prop) ? 2 : 1; + state->builtin.props = g_slist_prepend (state->builtin.props, prop); + } else if (state->doc_not_component) { /* keep user props in the document */ + d (g_print("user defined named '%s' assigned id = %d\n", + name, state->user.count);); + if (NULL == state->dict) + state->dict = g_hash_table_new (g_str_hash, g_str_equal); + g_hash_table_insert (state->dict, + (gpointer) name, GINT_TO_POINTER (state->user.count)); + state->user.count += gsf_doc_prop_get_link (prop) ? 2 : 1; + state->user.props = g_slist_prepend (state->user.props, prop); + } +} + +/** + * gsf_msole_metadata_write : + * @out : #GsfOutput + * @meta_data : #GsfDocMetaData + * @doc_not_component : a kludge to differentiate DocumentSummary from Summary + * + * Returns TRUE on success; + **/ +gboolean +gsf_msole_metadata_write (GsfOutput *out, + GsfDocMetaData const *meta_data, + gboolean doc_not_component) +{ + static guint8 const header[] = { + 0xfe, 0xff, /* byte order */ + 0, 0, /* Format */ + 0x04, 0x0a, /* OS : XP == 0xA04 */ + 0x02, 0x00, /* win32 == 2 */ + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* clasid = 0 */ + }; + + gboolean success = FALSE; + guint8 buf [4]; + WritePropState state; + + state.codepage = 1252; + state.out = out; + state.dict = NULL; + state.builtin.count = 1; /* codepage */ + state.user.count = 2; /* codepage and dictionary */ + state.builtin.props = state.user.props = NULL; + state.doc_not_component = doc_not_component; + d (g_print ("================================\nFinding props\n");); + gsf_doc_meta_data_foreach (meta_data, + (GHFunc) cb_count_props, &state); + d (g_print ("Done\n" + "================================\n");); + + /* Write stream header */ + GSF_LE_SET_GUINT32 (buf, (state.dict != NULL) ? 2 : 1); + if (!gsf_output_write (out, sizeof (header), header) || + !gsf_output_write (out, 4, buf)) + goto err; + + /* Write section header(s) */ + GSF_LE_SET_GUINT32 (buf, (state.dict != NULL) ? 0x44 : 0x30); + if (!gsf_output_write (out, 16, + doc_not_component ? document_guid : component_guid) || + !gsf_output_write (out, 4, buf)) + goto err; + if (state.dict != NULL) { + GSF_LE_SET_GUINT32 (buf, 0); + if (!gsf_output_write (out, sizeof (user_guid), user_guid) || + !gsf_output_write (out, 4, buf)) /* bogus position, fix it later */ + goto err; + } + + /* Write section(s) */ + if (!msole_metadata_write_section (&state, FALSE)) + goto err; + if (state.dict != NULL) { + gsf_off_t base = gsf_output_tell (state.out); + GSF_LE_SET_GUINT32 (buf, base); + if (!gsf_output_seek (state.out, 0x40, G_SEEK_SET) || + !gsf_output_write (out, 4, buf) || + !gsf_output_seek (state.out, 0, G_SEEK_END) || + !msole_metadata_write_section (&state, TRUE)) + goto err; + } + + success = TRUE; +err : + g_slist_free (state.builtin.props); + g_slist_free (state.user.props); + if (state.dict != NULL) + g_hash_table_destroy (state.dict); + return success; +} + +static struct { + char const *tag; + guint lid; +} const gsf_msole_language_ids[] = { + { "-none-", 0x0000 }, /* none (language neutral) */ + { "-none-", 0x0400 }, /* none */ + { "af_ZA", 0x0436 }, /* Afrikaans */ + { "am", 0x045e }, /* Amharic */ + { "sq_AL", 0x041c }, /* Albanian */ + { "ar_SA", 0x0401 }, /* Arabic (Saudi) */ + { "ar_IQ", 0x0801 }, /* Arabic (Iraq) */ + { "ar_EG", 0x0c01 }, /* Arabic (Egypt) */ + { "ar_LY", 0x1001 }, /* Arabic (Libya) */ + { "ar_DZ", 0x1401 }, /* Arabic (Algeria) */ + { "ar_MA", 0x1801 }, /* Arabic (Morocco) */ + { "ar_TN", 0x1c01 }, /* Arabic (Tunisia) */ + { "ar_OM", 0x2001 }, /* Arabic (Oman) */ + { "ar_YE", 0x2401 }, /* Arabic (Yemen) */ + { "ar_SY", 0x2801 }, /* Arabic (Syria) */ + { "ar_JO", 0x2c01 }, /* Arabic (Jordan) */ + { "ar_LB", 0x3001 }, /* Arabic (Lebanon) */ + { "ar_KW", 0x3401 }, /* Arabic (Kuwait) */ + { "ar_AE", 0x3801 }, /* Arabic (United Arab Emirates) */ + { "ar_BH", 0x3c01 }, /* Arabic (Bahrain) */ + { "ar_QA", 0x4001 }, /* Arabic (Qatar) */ + { "as", 0x044d }, /* Assamese */ + { "az", 0x042c }, /* Azerbaijani */ + { "hy_AM", 0x042b }, /* Armenian */ + { "az", 0x044c }, /* Azeri (Latin) az_ */ + { "az", 0x082c }, /* Azeri (Cyrillic) az_ */ + { "eu_ES", 0x042d }, /* Basque */ + { "be_BY", 0x0423 }, /* Belarussian */ + { "bn", 0x0445 }, /* Bengali bn_ */ + { "bg_BG", 0x0402 }, /* Bulgarian */ + { "ca_ES", 0x0403 }, /* Catalan */ + { "zh_TW", 0x0404 }, /* Chinese (Taiwan) */ + { "zh_CN", 0x0804 }, /* Chinese (PRC) */ + { "zh_HK", 0x0c04 }, /* Chinese (Hong Kong) */ + { "zh_SG", 0x1004 }, /* Chinese (Singapore) */ + { "ch_MO", 0x1404 }, /* Chinese (Macau SAR) */ + { "hr_HR", 0x041a }, /* Croatian */ + { "cs_CZ", 0x0405 }, /* Czech */ + { "da_DK", 0x0406 }, /* Danish */ + { "div", 0x465 }, /* Divehi div_*/ + { "nl_NL", 0x0413 }, /* Dutch (Netherlands) */ + { "nl_BE", 0x0813 }, /* Dutch (Belgium) */ + { "en_US", 0x0409 }, /* English (USA) */ + { "en_GB", 0x0809 }, /* English (UK) */ + { "en_AU", 0x0c09 }, /* English (Australia) */ + { "en_CA", 0x1009 }, /* English (Canada) */ + { "en_NZ", 0x1409 }, /* English (New Zealand) */ + { "en_IE", 0x1809 }, /* English (Ireland) */ + { "en_ZA", 0x1c09 }, /* English (South Africa) */ + { "en_JM", 0x2009 }, /* English (Jamaica) */ + { "en", 0x2409 }, /* English (Caribbean) */ + { "en_BZ", 0x2809 }, /* English (Belize) */ + { "en_TT", 0x2c09 }, /* English (Trinidad) */ + { "en_ZW", 0x3009 }, /* English (Zimbabwe) */ + { "en_PH", 0x3409 }, /* English (Phillipines) */ + { "et_EE", 0x0425 }, /* Estonian */ + { "fo", 0x0438 }, /* Faeroese fo_ */ + { "fa_IR", 0x0429 }, /* Farsi */ + { "fi_FI", 0x040b }, /* Finnish */ + { "fr_FR", 0x040c }, /* French (France) */ + { "fr_BE", 0x080c }, /* French (Belgium) */ + { "fr_CA", 0x0c0c }, /* French (Canada) */ + { "fr_CH", 0x100c }, /* French (Switzerland) */ + { "fr_LU", 0x140c }, /* French (Luxembourg) */ + { "fr_MC", 0x180c }, /* French (Monaco) */ + { "gl", 0x0456 }, /* Galician gl_ */ + { "ga_IE", 0x083c }, /* Irish Gaelic */ + { "gd_GB", 0x100c }, /* Scottish Gaelic */ + { "ka_GE", 0x0437 }, /* Georgian */ + { "de_DE", 0x0407 }, /* German (Germany) */ + { "de_CH", 0x0807 }, /* German (Switzerland) */ + { "de_AT", 0x0c07 }, /* German (Austria) */ + { "de_LU", 0x1007 }, /* German (Luxembourg) */ + { "de_LI", 0x1407 }, /* German (Liechtenstein) */ + { "el_GR", 0x0408 }, /* Greek */ + { "gu", 0x0447 }, /* Gujarati gu_ */ + { "ha", 0x0468 }, /* Hausa */ + { "he_IL", 0x040d }, /* Hebrew */ + { "hi_IN", 0x0439 }, /* Hindi */ + { "hu_HU", 0x040e }, /* Hungarian */ + { "is_IS", 0x040f }, /* Icelandic */ + { "id_ID", 0x0421 }, /* Indonesian */ + { "iu", 0x045d }, /* Inkutitut */ + { "it_IT", 0x0410 }, /* Italian (Italy) */ + { "it_CH", 0x0810 }, /* Italian (Switzerland) */ + { "ja_JP", 0x0411}, /* Japanese */ + { "kn", 0x044b }, /* Kannada kn_ */ + { "ks", 0x0860 }, /* Kashmiri (India) ks_ */ + { "kk", 0x043f }, /* Kazakh kk_ */ + { "kok", 0x0457 }, /* Konkani kok_ */ + { "ko_KR", 0x0412 }, /* Korean */ + { "ko", 0x0812 }, /* Korean (Johab) ko_ */ + { "kir", 0x0440 }, /* Kyrgyz */ + { "la", 0x0476 }, /* Latin */ + { "lo", 0x0454 }, /* Laothian */ + { "lv_LV", 0x0426 }, /* Latvian */ + { "lt_LT", 0x0427 }, /* Lithuanian */ + { "lt_LT", 0x0827 }, /* Lithuanian (Classic) */ + { "mk", 0x042f }, /* FYRO Macedonian */ + { "my_MY", 0x043e }, /* Malaysian */ + { "my_BN", 0x083e }, /* Malay Brunei Darussalam */ + { "ml", 0x044c }, /* Malayalam ml_ */ + { "mr", 0x044e }, /* Marathi mr_ */ + { "mt", 0x043a }, /* Maltese */ + { "mo", 0x0450 }, /* Mongolian */ + { "ne_NP", 0x0461 }, /* Napali (Nepal) */ + { "ne_IN", 0x0861 }, /* Nepali (India) */ + { "nb_NO", 0x0414 }, /* Norwegian (Bokmaal) */ + { "nn_NO", 0x0814 }, /* Norwegian (Nynorsk) */ + { "or", 0x0448 }, /* Oriya or_ */ + { "om", 0x0472 }, /* Oromo (Afan, Galla) */ + { "pl_PL", 0x0415 }, /* Polish */ + { "pt_BR", 0x0416 }, /* Portuguese (Brazil) */ + { "pt_PT", 0x0816 }, /* Portuguese (Portugal) */ + { "pa", 0x0446 }, /* Punjabi pa_ */ + { "ps", 0x0463 }, /* Pashto (Pushto) */ + { "rm", 0x0417 }, /* Rhaeto_Romanic rm_ */ + { "ro_RO", 0x0418 }, /* Romanian */ + { "ro_MD", 0x0818 }, /* Romanian (Moldova) */ + { "ru_RU", 0x0419 }, /* Russian */ + { "ru_MD", 0x0819 }, /* Russian (Moldova) */ + { "se", 0x043b }, /* Sami (Lappish) se_ */ + { "sa", 0x044f }, /* Sanskrit sa_ */ + { "sr", 0x0c1a }, /* Serbian (Cyrillic) sr_ */ + { "sr", 0x081a }, /* Serbian (Latin) sr_ */ + { "sd", 0x0459 }, /* Sindhi sd_ */ + { "sk_SK", 0x041b }, /* Slovak */ + { "sl_SI", 0x0424 }, /* Slovenian */ + { "wen", 0x042e }, /* Sorbian wen_ */ + { "so", 0x0477 }, /* Somali */ + { "es_ES", 0x040a }, /* Spanish (Spain, Traditional) */ + { "es_MX", 0x080a }, /* Spanish (Mexico) */ + { "es_ES", 0x0c0a }, /* Spanish (Modern) */ + { "es_GT", 0x100a }, /* Spanish (Guatemala) */ + { "es_CR", 0x140a }, /* Spanish (Costa Rica) */ + { "es_PA", 0x180a }, /* Spanish (Panama) */ + { "es_DO", 0x1c0a }, /* Spanish (Dominican Republic) */ + { "es_VE", 0x200a }, /* Spanish (Venezuela) */ + { "es_CO", 0x240a }, /* Spanish (Colombia) */ + { "es_PE", 0x280a }, /* Spanish (Peru) */ + { "es_AR", 0x2c0a }, /* Spanish (Argentina) */ + { "es_EC", 0x300a }, /* Spanish (Ecuador) */ + { "es_CL", 0x340a }, /* Spanish (Chile) */ + { "es_UY", 0x380a }, /* Spanish (Uruguay) */ + { "es_PY", 0x3c0a }, /* Spanish (Paraguay) */ + { "es_BO", 0x400a }, /* Spanish (Bolivia) */ + { "es_SV", 0x440a }, /* Spanish (El Salvador) */ + { "es_HN", 0x480a }, /* Spanish (Honduras) */ + { "es_NI", 0x4c0a }, /* Spanish (Nicaragua) */ + { "es_PR", 0x500a }, /* Spanish (Puerto Rico) */ + { "sx", 0x0430 }, /* Sutu */ + { "sw", 0x0441 }, /* Swahili (Kiswahili/Kenya) */ + { "sv_SE", 0x041d }, /* Swedish */ + { "sv_FI", 0x081d }, /* Swedish (Finland) */ + { "ta", 0x0449 }, /* Tamil ta_ */ + { "tt", 0x0444 }, /* Tatar (Tatarstan) tt_ */ + { "te", 0x044a }, /* Telugu te_ */ + { "th_TH", 0x041e }, /* Thai */ + { "ts", 0x0431 }, /* Tsonga ts_ */ + { "tn", 0x0432 }, /* Tswana tn_ */ + { "tr_TR", 0x041f }, /* Turkish */ + { "tl", 0x0464 }, /* Tagalog */ + { "tg", 0x0428 }, /* Tajik */ + { "bo", 0x0451 }, /* Tibetan */ + { "ti", 0x0473 }, /* Tigrinya */ + { "uk_UA", 0x0422 }, /* Ukrainian */ + { "ur_PK", 0x0420 }, /* Urdu (Pakistan) */ + { "ur_IN", 0x0820 }, /* Urdu (India) */ + { "uz", 0x0443 }, /* Uzbek (Latin) uz_ */ + { "uz", 0x0843 }, /* Uzbek (Cyrillic) uz_ */ + { "ven", 0x0433 }, /* Venda ven_ */ + { "vi_VN", 0x042a }, /* Vietnamese */ + { "cy_GB", 0x0452 }, /* Welsh */ + { "xh", 0x0434 }, /* Xhosa xh */ + { "yi", 0x043d }, /* Yiddish yi_ */ + { "yo", 0x046a }, /* Yoruba */ + { "zu", 0x0435 }, /* Zulu zu_ */ + { "en_US", 0x0800 } /* Default */ +}; + +/** + * gsf_msole_lid_for_language + * @lang : + * + * Returns the LID (Language Identifier) for the input language. + * If lang is %null, return 0x0400 ("-none-"), and not 0x0000 ("no proofing") + **/ +guint +gsf_msole_lid_for_language (char const *lang) +{ + guint i = 0 ; + size_t len; + + if (lang == NULL) + return 0x0400; /* return -none- */ + + /* Allow lang to match as a prefix (eg fr == fr_FR@euro) */ + len = strlen (lang); + for (i = 0 ; i < G_N_ELEMENTS(gsf_msole_language_ids); i++) + if (!strncmp (lang, gsf_msole_language_ids[i].tag, len)) + return gsf_msole_language_ids[i].lid; + + return 0x0400 ; /* return -none- */ +} + +/** + * gsf_msole_language_for_lid : + * @lid : + * + * Returns the xx_YY style string (can be just xx or xxx) for the given LID. + * Return value must not be freed. If the LID is not found, is set to 0x0400, + * or is set to 0x0000, will return "-none-" + **/ +char const * +gsf_msole_language_for_lid (guint lid) +{ + guint i = 0 ; + + for (i = 0 ; i < G_N_ELEMENTS(gsf_msole_language_ids); i++) + if (gsf_msole_language_ids[i].lid == lid) + return gsf_msole_language_ids[i].tag; + + return "-none-"; /* default */ +} + +/** + * gsf_msole_locale_to_lid : + * + * Covert the the codepage into an applicable LID + **/ +guint +gsf_msole_codepage_to_lid (int codepage) +{ + switch (codepage) { + case 77: /* MAC_CHARSET */ + return 0xFFF; /* This number is a hack */ + case 128: /* SHIFTJIS_CHARSET */ + return 0x411; /* Japanese */ + case 129: /* HANGEUL_CHARSET */ + return 0x412; /* Korean */ + case 130: /* JOHAB_CHARSET */ + return 0x812; /* Korean (Johab) */ + case 134: /* GB2312_CHARSET - Chinese Simplified */ + return 0x804; /* China PRC - And others!! */ + case 136: /* CHINESEBIG5_CHARSET - Chinese Traditional */ + return 0x404; /* Taiwan - And others!! */ + case 161: /* GREEK_CHARSET */ + return 0x408; /* Greek */ + case 162: /* TURKISH_CHARSET */ + return 0x41f; /* Turkish */ + case 163: /* VIETNAMESE_CHARSET */ + return 0x42a; /* Vietnamese */ + case 177: /* HEBREW_CHARSET */ + return 0x40d; /* Hebrew */ + case 178: /* ARABIC_CHARSET */ + return 0x01; /* Arabic */ + case 186: /* BALTIC_CHARSET */ + return 0x425; /* Estonian - And others!! */ + case 204: /* RUSSIAN_CHARSET */ + return 0x419; /* Russian - And others!! */ + case 222: /* THAI_CHARSET */ + return 0x41e; /* Thai */ + case 238: /* EASTEUROPE_CHARSET */ + return 0x405; /* Czech - And many others!! */ + } + + /* default */ + return 0x0; +} + +/** + * gsf_msole_lid_to_codepage + * @lid : + * + * Returns our best guess at the codepage for the given language id + **/ +int +gsf_msole_lid_to_codepage (guint lid) +{ + if (lid == 0x0FFF) /* Macintosh Hack */ + return 0x0FFF; + + switch (lid & 0xff) { + case 0x01: /* Arabic */ + return 1256; + case 0x02: /* Bulgarian */ + return 1251; + case 0x03: /* Catalan */ + return 1252; + case 0x04: /* Chinese */ + switch (lid) { + case 0x1004: /* Chinese (Singapore) */ + case 0x0404: /* Chinese (Taiwan) */ + case 0x1404: /* Chinese (Macau SAR) */ + case 0x0c04: /* Chinese (Hong Kong SAR, PRC) */ + return 950; + + case 0x0804: /* Chinese (PRC) */ + return 936; + default : + break; + } + break; + case 0x05: /* Czech */ + return 1250; + case 0x06: /* Danish */ + return 1252; + case 0x07: /* German */ + return 1252; + case 0x08: /* Greek */ + return 1253; + case 0x09: /* English */ + return 1252; + case 0x0a: /* Spanish */ + return 1252; + case 0x0b: /* Finnish */ + return 1252; + case 0x0c: /* French */ + return 1252; + case 0x0d: /* Hebrew */ + return 1255; + case 0x0e: /* Hungarian */ + return 1250; + case 0x0f: /* Icelandic */ + return 1252; + case 0x10: /* Italian */ + return 1252; + case 0x11: /* Japanese */ + return 932; + case 0x12: /* Korean */ + switch (lid) { + case 0x0812: /* Korean (Johab) */ + return 1361; + case 0x0412: /* Korean */ + return 949; + default : + break; + } + break; + case 0x13: /* Dutch */ + return 1252; + case 0x14: /* Norwegian */ + return 1252; + case 0x15: /* Polish */ + return 1250; + case 0x16: /* Portuguese */ + return 1252; + case 0x17: /* Rhaeto-Romanic */ + return 1252; + case 0x18: /* Romanian */ + return 1250; + case 0x19: /* Russian */ + return 1251; + case 0x1a: /* Serbian, Croatian, (Bosnian?) */ + switch (lid) { + case 0x041a: /* Croatian */ + return 1252; + case 0x0c1a: /* Serbian (Cyrillic) */ + return 1251; + case 0x081a: /* Serbian (Latin) */ + return 1252; + default : + break; + } + break; + case 0x1b: /* Slovak */ + return 1250; + case 0x1c: /* Albanian */ + return 1251; + case 0x1d: /* Swedish */ + return 1252; + case 0x1e: /* Thai */ + return 874; + case 0x1f: /* Turkish */ + return 1254; + case 0x20: /* Urdu. This is Unicode only. */ + return 0; + case 0x21: /* Bahasa Indonesian */ + return 1252; + case 0x22: /* Ukrainian */ + return 1251; + case 0x23: /* Byelorussian / Belarusian */ + return 1251; + case 0x24: /* Slovenian */ + return 1250; + case 0x25: /* Estonian */ + return 1257; + case 0x26: /* Latvian */ + return 1257; + case 0x27: /* Lithuanian */ + return 1257; + case 0x29: /* Farsi / Persian. This is Unicode only. */ + return 0; + case 0x2a: /* Vietnamese */ + return 1258; + case 0x2b: /* Windows 2000: Armenian. This is Unicode only. */ + return 0; + case 0x2c: /* Azeri */ + switch (lid) { + case 0x082c: /* Azeri (Cyrillic) */ + return 1251; + default : + break; + } + break; + case 0x2d: /* Basque */ + return 1252; + case 0x2f: /* Macedonian */ + return 1251; + case 0x36: /* Afrikaans */ + return 1252; + case 0x37: /* Windows 2000: Georgian. This is Unicode only. */ + return 0; + case 0x38: /* Faeroese */ + return 1252; + case 0x39: /* Windows 2000: Hindi. This is Unicode only. */ + return 0; + case 0x3E: /* Malaysian / Malay */ + return 1252; + case 0x41: /* Swahili */ + return 1252; + case 0x43: /* Uzbek */ + switch (lid) { + case 0x0843: /* Uzbek (Cyrillic) */ + return 1251; + default : + break; + } + break; + case 0x45: /* Windows 2000: Bengali. This is Unicode only. */ + case 0x46: /* Windows 2000: Punjabi. This is Unicode only. */ + case 0x47: /* Windows 2000: Gujarati. This is Unicode only. */ + case 0x48: /* Windows 2000: Oriya. This is Unicode only. */ + case 0x49: /* Windows 2000: Tamil. This is Unicode only. */ + case 0x4a: /* Windows 2000: Telugu. This is Unicode only. */ + case 0x4b: /* Windows 2000: Kannada. This is Unicode only. */ + case 0x4c: /* Windows 2000: Malayalam. This is Unicode only. */ + case 0x4d: /* Windows 2000: Assamese. This is Unicode only. */ + case 0x4e: /* Windows 2000: Marathi. This is Unicode only. */ + case 0x4f: /* Windows 2000: Sanskrit. This is Unicode only. */ + case 0x55: /* Myanmar / Burmese. This is Unicode only. */ + case 0x57: /* Windows 2000: Konkani. This is Unicode only. */ + case 0x61: /* Windows 2000: Nepali (India). This is Unicode only. */ + return 0; + +#if 0 + /****************************************************************** + * Below this line is untested, unproven, and are just guesses. * + * Insert above and use at your own risk * + ******************************************************************/ + + case 0x042c: /* Azeri (Latin) */ + case 0x0443: /* Uzbek (Latin) */ + case 0x30: /* Sutu */ + return 1252; /* UNKNOWN, believed to be CP1252 */ + + case 0x3f: /* Kazakh */ + return 1251; /* JUST UNKNOWN, probably CP1251 */ + + case 0x44: /* Tatar */ + case 0x58: /* Manipuri */ + case 0x59: /* Sindhi */ + case 0x60: /* Kashmiri (India) */ + return 0; /* UNKNOWN, believed to be Unicode only */ +#endif + }; + + /* This is just a guess, but it will be a frequent guess */ + return 1252; +} + +/** + * gsf_msole_lid_to_codepage_str + * @lid : + * + * Returns the Iconv codepage string for the given LID. + * Return value must be g_free ()'d + **/ +gchar * +gsf_msole_lid_to_codepage_str (guint lid) +{ + guint cp = 0; + + if (lid == 0x0FFF) /* Macintosh Hack */ + return g_strdup ("MACINTOSH"); + + cp = gsf_msole_lid_to_codepage (lid); + return g_strdup_printf ("CP%d", cp); +} + +/** + * gsf_msole_iconv_win_codepage : + * + * Returns our best guess at the applicable windows code page based on an + * environment variable or the current locale. + **/ +int +gsf_msole_iconv_win_codepage (void) +{ + char *lang; + + if ((lang = getenv("WINDOWS_LANGUAGE")) == NULL) { + char const *locale = setlocale (LC_CTYPE, NULL); + if (locale != NULL) { + char const *lang_sep = strchr (locale, '.'); + if (lang_sep) + lang = g_strndup (locale, (unsigned)(lang_sep - locale)); + else + lang = g_strdup (locale); /* simplifies exit */ + } + } + + if (lang != NULL) { + guint lid = gsf_msole_lid_for_language (lang); + g_free (lang); + return gsf_msole_lid_to_codepage (lid); + } + return 1252; /* default ansi */ +} + +static GSList * +gsf_msole_iconv_get_codepage_string_list (int codepage) +{ + GSList *cp_list = NULL; + + switch (codepage) + { + case 1200: + cp_list = g_slist_prepend (cp_list, g_strdup ("UTF-16LE")); + break; + case 1201: + cp_list = g_slist_prepend (cp_list, g_strdup ("UTF-16BE")); + break; + case 0x8000: + case 10000: + cp_list = g_slist_prepend (cp_list, g_strdup ("MACROMAN")); + cp_list = g_slist_prepend (cp_list, g_strdup ("MACINTOSH")); + break; + case -535: + case 65001: + cp_list = g_slist_prepend (cp_list, g_strdup ("UTF-8")); + break; + case 0x8001: + /* according to OOo docs 8001 is a synonym CP1252 */ + codepage = 1252; + default: + cp_list = g_slist_prepend (cp_list, g_strdup_printf ("CP%u", codepage)); + } + + return cp_list; +} + +/** + * gsf_msole_iconv_open_codepage_for_import : + * @to: + * @codepage : + * + * Returns an iconv converter for @codepage -> utf8. + **/ +GIConv +gsf_msole_iconv_open_codepage_for_import (char const *to, int codepage) +{ + GIConv iconv_handle = (GIConv)(-1); + gchar *codepage_str; + GSList *codepage_list, *cp; + g_return_val_if_fail (to != NULL, (GIConv)(-1)); + + cp = codepage_list = gsf_msole_iconv_get_codepage_string_list (codepage); + while (cp) { + codepage_str = cp->data; + if (iconv_handle == (GIConv)(-1)) + iconv_handle = g_iconv_open (to, codepage_str); + g_free (codepage_str); + cp = cp->next; + } + g_slist_free (codepage_list); + + if (iconv_handle == (GIConv)(-1)) + g_warning ("Unable to open an iconv handle from codepage %d -> %s", + codepage, to); + return iconv_handle; +} + +/** + * gsf_msole_iconv_open_for_import : + * @codepage : + * + * Returns an iconv converter for single byte encodings @codepage -> utf8. + * Attempt to handle the semantics of a specification for multibyte encodings + * since this is only supposed to be used for single bytes. + **/ +GIConv +gsf_msole_iconv_open_for_import (int codepage) +{ + return gsf_msole_iconv_open_codepage_for_import ("UTF-8", codepage); +} + +/** + * gsf_msole_iconv_open_codepages_for_export : + * @codepage_to : + * @from : + * + * Returns an iconv converter to go from utf8 -> to our best guess at a useful + * windows codepage. + **/ +GIConv +gsf_msole_iconv_open_codepages_for_export (int codepage_to, char const *from) +{ + GIConv iconv_handle = (GIConv)(-1); + gchar *codepage_str; + GSList *codepage_list, *cp; + g_return_val_if_fail (from != NULL, (GIConv)(-1)); + + cp = codepage_list = gsf_msole_iconv_get_codepage_string_list (codepage_to); + while (cp) { + codepage_str = cp->data; + if (iconv_handle == (GIConv)(-1)) + iconv_handle = g_iconv_open (codepage_str, from); + g_free (codepage_str); + cp = cp->next; + } + g_slist_free (codepage_list); + + if (iconv_handle == (GIConv)(-1)) + g_warning ("Unable to open an iconv handle from %s -> codepage %u", + from, codepage_to); + return iconv_handle; +} + +/** + * gsf_msole_iconv_open_codepage_for_export : + * @codepage_to: + * + * Returns an iconv converter to go from utf8 -> to our best guess at a useful + * windows codepage. + **/ +GIConv +gsf_msole_iconv_open_codepage_for_export (int codepage_to) +{ + return gsf_msole_iconv_open_codepages_for_export (codepage_to, "UTF-8"); +} + +/** + * gsf_msole_iconv_open_for_export : + * + * Returns an iconv convert to go from utf8 -> to our best guess at a useful + * windows codepage. + **/ +GIConv +gsf_msole_iconv_open_for_export (void) +{ + return gsf_msole_iconv_open_codepage_for_export (gsf_msole_iconv_win_codepage ()); +} + +#define VBA_COMPRESSION_WINDOW 4096 + +/** + * gsf_msole_inflate: + * @input: stream to read from + * @offset: offset into it for start byte of compresse stream + * + * Decompresses an LZ compressed stream. + * + * Return value: A GByteArray that the caller is responsible for freeing + **/ +GByteArray * +gsf_msole_inflate (GsfInput *input, gsf_off_t offset) +{ + GByteArray *res; + unsigned i, win_pos, pos = 0; + unsigned mask, shift, distance; + guint8 flag, buffer [VBA_COMPRESSION_WINDOW]; + guint8 const *tmp; + guint16 token, len; + gboolean clean = TRUE; + + if (gsf_input_seek (input, offset, G_SEEK_SET)) + return NULL; + + res = g_byte_array_new (); + + /* explaination from libole2/ms-ole-vba.c */ + /* The first byte is a flag byte. Each bit in this byte + * determines what the next byte is. If the bit is zero, + * the next byte is a character. Otherwise the next two + * bytes contain the number of characters to copy from the + * umcompresed buffer and where to copy them from (offset, + * length). + */ + while (NULL != gsf_input_read (input, 1, &flag)) + for (mask = 1; mask < 0x100 ; mask <<= 1) + if (flag & mask) { + if (NULL == (tmp = gsf_input_read (input, 2, NULL))) + break; + win_pos = pos % VBA_COMPRESSION_WINDOW; + if (win_pos <= 0x80) { + if (win_pos <= 0x20) + shift = (win_pos <= 0x10) ? 12 : 11; + else + shift = (win_pos <= 0x40) ? 10 : 9; + } else { + if (win_pos <= 0x200) + shift = (win_pos <= 0x100) ? 8 : 7; + else if (win_pos <= 0x800) + shift = (win_pos <= 0x400) ? 6 : 5; + else + shift = 4; + } + + token = GSF_LE_GET_GUINT16 (tmp); + len = (token & ((1 << shift) - 1)) + 3; + distance = token >> shift; + clean = TRUE; +/* fprintf (stderr, "Shift %d, token len %d, distance %d bytes %.2x %.2x\n", + shift, len, distance, (token & 0xff), (token >> 8)); */ + + for (i = 0; i < len; i++) { + unsigned srcpos = (pos - distance - 1) % VBA_COMPRESSION_WINDOW; + guint8 c = buffer [srcpos]; + buffer [pos++ % VBA_COMPRESSION_WINDOW] = c; + } + } else { + if ((pos != 0) && ((pos % VBA_COMPRESSION_WINDOW) == 0) && clean) { + (void) gsf_input_read (input, 2, NULL); + clean = FALSE; + g_byte_array_append (res, buffer, VBA_COMPRESSION_WINDOW); + break; + } + if (NULL != gsf_input_read (input, 1, buffer + (pos % VBA_COMPRESSION_WINDOW))) + pos++; + clean = TRUE; + } + + if (pos % VBA_COMPRESSION_WINDOW) + g_byte_array_append (res, buffer, pos % VBA_COMPRESSION_WINDOW); + return res; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-msole-utils.h b/lib/libgsf-1.12.3/gsf/gsf-msole-utils.h new file mode 100644 index 0000000000..b728f1af2e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-msole-utils.h @@ -0,0 +1,54 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-msole-utils.h: various tools for handling MS OLE files + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_MSOLE_UTILS_H +#define GSF_MSOLE_UTILS_H + +#include +#include + +G_BEGIN_DECLS + +GError *gsf_msole_metadata_read (GsfInput *in, + GsfDocMetaData *accum); +gboolean gsf_msole_metadata_write (GsfOutput *out, + GsfDocMetaData const *meta_data, + gboolean doc_not_component); + +guint gsf_msole_lid_for_language (char const *lang); +guint gsf_msole_codepage_to_lid (int codepage); +int gsf_msole_lid_to_codepage (guint lid); +gchar *gsf_msole_lid_to_codepage_str (guint lid); +char const *gsf_msole_language_for_lid (guint lid); + +int gsf_msole_iconv_win_codepage (void) ; +GIConv gsf_msole_iconv_open_for_import (int codepage) ; +GIConv gsf_msole_iconv_open_for_export (void) ; + +GIConv gsf_msole_iconv_open_codepage_for_import (char const *to, int codepage); +GIConv gsf_msole_iconv_open_codepages_for_export (int codepage_to, char const *from); +GIConv gsf_msole_iconv_open_codepage_for_export (int codepage_to); + +GByteArray *gsf_msole_inflate (GsfInput *input, gsf_off_t offset); + +G_END_DECLS + +#endif /* GSF_MSOLE_UTILS_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-impl.h b/lib/libgsf-1.12.3/gsf/gsf-outfile-impl.h new file mode 100644 index 0000000000..28f38e66bd --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-impl.h @@ -0,0 +1,48 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-impl.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTFILE_IMPL_H +#define GSF_OUTFILE_IMPL_H + +#include +#include +#include + +G_BEGIN_DECLS + +struct _GsfOutfile { + GsfOutput parent; +}; + +typedef struct { + GsfOutputClass output_class; + GsfOutput *(*new_child) (GsfOutfile *outfile, + char const *name, gboolean is_dir, + char const *first_property_name, + va_list args); +} GsfOutfileClass; + +#define GSF_OUTFILE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_OUTFILE_TYPE, GsfOutfileClass)) +#define GSF_IS_OUTFILE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_OUTFILE_TYPE)) + +G_END_DECLS + +#endif /* GSF_OUTFILE_IMPL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-msole.c b/lib/libgsf-1.12.3/gsf/gsf-outfile-msole.c new file mode 100644 index 0000000000..de02067d89 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-msole.c @@ -0,0 +1,795 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-msole.c: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Outc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +static GObjectClass *parent_class; +static GsfOutputClass *gsf_output_class; + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "libgsf:msole" + +typedef enum { MSOLE_DIR, MSOLE_SMALL_BLOCK, MSOLE_BIG_BLOCK } MSOleOutfileType; + +/* The most common values */ +#define OLE_DEFAULT_THRESHOLD 0x1000 +#define OLE_DEFAULT_BB_SIZE (1 << OLE_DEFAULT_BB_SHIFT) +#define OLE_DEFAULT_SB_SIZE (1 << OLE_DEFAULT_SB_SHIFT) + +struct _GsfOutfileMSOle { + GsfOutfile parent; + + GsfOutput *sink; + GsfOutfileMSOle *root; + + MSOleOutfileType type; + unsigned first_block; + unsigned blocks; + unsigned child_index; + + struct { + unsigned shift; + unsigned size; + } bb, sb; + + union { + struct { + GSList *children; + GPtrArray *root_order; /* only valid for the root */ + } dir; + struct { + guint8 *buf; + } small_block; + struct { + size_t start_offset; /* in bytes */ + } big_block; + } content; + unsigned char clsid[16]; /* 16 byte GUID used by some apps */ +}; +typedef GsfOutfileClass GsfOutfileMSOleClass; + +static void +gsf_outfile_msole_finalize (GObject *obj) +{ + GsfOutfileMSOle *ole = GSF_OUTFILE_MSOLE (obj); + GsfOutput *output = GSF_OUTPUT (obj); + + if (!gsf_output_is_closed (output)) + gsf_output_close (output); + + if (ole->sink != NULL) { + g_object_unref (G_OBJECT (ole->sink)); + ole->sink = NULL; + } + switch (ole->type) { + case MSOLE_DIR: + if (ole->content.dir.children != NULL) { + g_slist_free (ole->content.dir.children); + ole->content.dir.children = NULL; + } + if (ole->content.dir.root_order != NULL) + g_warning ("Finalizing a MSOle Outfile without closing it."); + break; + + case MSOLE_SMALL_BLOCK: + if (ole->content.small_block.buf != NULL) { + g_free (ole->content.small_block.buf); + ole->content.small_block.buf = NULL; + } + break; + + case MSOLE_BIG_BLOCK: + break; + default : + g_warning ("Unknown file type"); + } + parent_class->finalize (obj); +} + +static gboolean +gsf_outfile_msole_seek (GsfOutput *output, gsf_off_t offset, + GSeekType whence) +{ + GsfOutfileMSOle *ole = (GsfOutfileMSOle *)output; + + switch (whence) { + case G_SEEK_SET : break; + case G_SEEK_CUR : offset += output->cur_offset; break; + case G_SEEK_END : offset += output->cur_size; break; + default : + break; /*checked in GsfOutput wrapper */ + } + + switch (ole->type) { + case MSOLE_DIR: + if (offset != 0) { + g_warning ("Attempt to seek a directory"); + return FALSE; + } + return TRUE; + + case MSOLE_SMALL_BLOCK: + /* it is ok to seek past the big block threshold + * we don't convert until they _write_ something + */ + return TRUE; + + case MSOLE_BIG_BLOCK: + return gsf_output_seek (ole->sink, + (gsf_off_t)(ole->content.big_block.start_offset + offset), + G_SEEK_SET); + + default : + return FALSE; + } + + return FALSE; +} + +/* Globals to support variable OLE sector size. */ +/* 512 and 4096 bytes are the only known values for sector size on */ +/* Win2k/XP platforms. Attempts to create OLE files on Win2k/XP with */ +/* other values using StgCreateStorageEx() fail with invalid parameter. */ +/* This code has been tested with 128,256,512,4096,8192 sizes for */ +/* libgsf read/write. Interoperability with MS OLE32.DLL has been */ +/* tested with 512 and 4096 block size for filesizes up to 2GB. */ + +#define ZERO_PAD_BUF_SIZE 4096 + +/* static objects are zero-initialized as per C/C++ standards */ +static guint8 const zero_buf [ZERO_PAD_BUF_SIZE]; + +/* Calculate the block of the current offset in the file. A useful idiom is to + * pad_zero to move to the start of the next block, then get the block number. + * This avoids fence post type problems with partial blocks. */ +static inline guint32 +ole_cur_block (GsfOutfileMSOle const *ole) +{ + return (gsf_output_tell (ole->sink) - OLE_HEADER_SIZE) >> ole->bb.shift; +} + +static inline unsigned +ole_bytes_left_in_block (GsfOutfileMSOle *ole) +{ + /* blocks are multiples of bb.size (the header is padded out to bb.size) */ + unsigned r = gsf_output_tell (ole->sink) % ole->bb.size; + return (r != 0) ? (ole->bb.size - r) : 0; +} + +static void +ole_pad_zero (GsfOutfileMSOle *ole) +{ + /* no need to bounds check. len will always be less than bb.size, and + * we already check that zero_buf is big enough at creation */ + unsigned len = ole_bytes_left_in_block (ole); + if (len > 0) + gsf_output_write (ole->sink, len, zero_buf); +} + +/* Utility routine to generate a BAT for a file known to be sequential and + * continuous. */ +static void +ole_write_bat (GsfOutput *sink, guint32 block, unsigned blocks) +{ + guint8 buf [BAT_INDEX_SIZE]; + +/* FIXME FIXME FIXME optimize this to dump a buffer in 1 step */ + while (blocks-- > 1) { + block++; + GSF_LE_SET_GUINT32 (buf, block); + gsf_output_write (sink, BAT_INDEX_SIZE, buf); + } + GSF_LE_SET_GUINT32 (buf, BAT_MAGIC_END_OF_CHAIN); + gsf_output_write (sink, BAT_INDEX_SIZE, buf); +} + +static void +ole_write_const (GsfOutput *sink, guint32 value, unsigned n) +{ + guint8 buf [BAT_INDEX_SIZE]; + + GSF_LE_SET_GUINT32 (buf, value); + while (n-- > 0) + gsf_output_write (sink, BAT_INDEX_SIZE, buf); +} + +static void +ole_pad_bat_unused (GsfOutfileMSOle *ole, unsigned residual) +{ + ole_write_const (ole->sink, BAT_MAGIC_UNUSED, + (ole_bytes_left_in_block (ole) / BAT_INDEX_SIZE) - residual); +} + +/* write the metadata (dirents, small block, xbats) and close the sink */ +static gboolean +gsf_outfile_msole_close_root (GsfOutfileMSOle *ole) +{ + GsfOutfile *tmp; + guint8 buf [OLE_HEADER_SIZE]; + guint32 sbat_start, num_sbat, sb_data_start, sb_data_size, sb_data_blocks; + guint32 bat_start, num_bat, dirent_start, num_dirent_blocks, next, child_index; + unsigned i, j, blocks, num_xbat, xbat_pos; + gsf_off_t data_size; + unsigned metabat_size = ole->bb.size / BAT_INDEX_SIZE - 1; + GPtrArray *elem = ole->root->content.dir.root_order; + + /* write small block data */ + blocks = 0; + sb_data_start = ole_cur_block (ole); + data_size = gsf_output_tell (ole->sink); + for (i = 0 ; i < elem->len ; i++) { + GsfOutfileMSOle *child = g_ptr_array_index (elem, i); + if (child->type == MSOLE_SMALL_BLOCK) { + gsf_off_t size = gsf_output_size (GSF_OUTPUT (child)); + if (size > 0) { + child->blocks = ((size - 1) >> ole->sb.shift) + 1; + gsf_output_write (ole->sink, + child->blocks << ole->sb.shift, + child->content.small_block.buf); + child->first_block = blocks; + blocks += child->blocks; + } else { + child->blocks = 0; + child->first_block = BAT_MAGIC_END_OF_CHAIN; + } + } + } + data_size = gsf_output_tell (ole->sink) - data_size; + sb_data_size = data_size; + if ((gsf_off_t) sb_data_size != data_size) { + /* Check for overflow */ + g_warning ("File too big"); + return FALSE; + } + ole_pad_zero (ole); + sb_data_blocks = ole_cur_block (ole) - sb_data_start; + + /* write small block BAT (the meta bat is in a file) */ + sbat_start = ole_cur_block (ole); + for (i = 0 ; i < elem->len ; i++) { + GsfOutfileMSOle *child = g_ptr_array_index (elem, i); + if (child->type == MSOLE_SMALL_BLOCK && child->blocks > 0) + ole_write_bat (ole->sink, child->first_block, child->blocks); + } + ole_pad_bat_unused (ole, 0); + num_sbat = ole_cur_block (ole) - sbat_start; + + /* write dirents */ + dirent_start = ole_cur_block (ole); + for (i = 0 ; i < elem->len ; i++) { + GsfOutfileMSOle *child = g_ptr_array_index (elem, i); + glong j, name_len = 0; + + memset (buf, 0, DIRENT_SIZE); + + /* Hard code 'Root Entry' for the root */ + if (i == 0 || gsf_output_name (GSF_OUTPUT (child)) != NULL) { + char const *name = (i == 0) + ? "Root Entry" : gsf_output_name (GSF_OUTPUT (child)); + gunichar2 *name_utf16 = g_utf8_to_utf16 (name, + -1, NULL, &name_len, NULL); + if (name_len >= DIRENT_MAX_NAME_SIZE) + name_len = DIRENT_MAX_NAME_SIZE-1; + + /* be wary about endianness */ + for (j = 0 ; j < name_len ; j++) + GSF_LE_SET_GUINT16 (buf + j*2, name_utf16 [j]); + g_free (name_utf16); + name_len++; + } + GSF_LE_SET_GUINT16 (buf + DIRENT_NAME_LEN, name_len*2); + + if (child->root == child) { + GSF_LE_SET_GUINT8 (buf + DIRENT_TYPE, DIRENT_TYPE_ROOTDIR); + GSF_LE_SET_GUINT32 (buf + DIRENT_FIRSTBLOCK, + (sb_data_size > 0) ? sb_data_start : BAT_MAGIC_END_OF_CHAIN); + GSF_LE_SET_GUINT32 (buf + DIRENT_FILE_SIZE, sb_data_size); + memcpy (buf + DIRENT_CLSID, child->clsid, sizeof (child->clsid)); + } else if (child->type == MSOLE_DIR) { + GSF_LE_SET_GUINT8 (buf + DIRENT_TYPE, DIRENT_TYPE_DIR); + GSF_LE_SET_GUINT32 (buf + DIRENT_FIRSTBLOCK, BAT_MAGIC_END_OF_CHAIN); + GSF_LE_SET_GUINT32 (buf + DIRENT_FILE_SIZE, 0); + /* write the class id */ + memcpy (buf + DIRENT_CLSID, child->clsid, sizeof (child->clsid)); + } else { + guint32 size = child->parent.parent.cur_size; + + if ((gsf_off_t) size != child->parent.parent.cur_size) + g_warning ("File too big"); + GSF_LE_SET_GUINT8 (buf + DIRENT_TYPE, DIRENT_TYPE_FILE); + GSF_LE_SET_GUINT32 (buf + DIRENT_FIRSTBLOCK, child->first_block); + GSF_LE_SET_GUINT32 (buf + DIRENT_FILE_SIZE, size); + } + /* make everything black (red == 0) */ + GSF_LE_SET_GUINT8 (buf + DIRENT_COLOUR, 1); + + tmp = gsf_output_container (GSF_OUTPUT (child)); + next = DIRENT_MAGIC_END; + if (child->root != child && tmp != NULL) { + GSList *ptr = GSF_OUTFILE_MSOLE (tmp)->content.dir.children; + for (; ptr != NULL ; ptr = ptr->next) + if (ptr->data == child) { + if (ptr->next != NULL) { + GsfOutfileMSOle *sibling = ptr->next->data; + next = sibling->child_index; + } + break; + } + } + /* make linked list rather than tree, only use next */ + GSF_LE_SET_GUINT32 (buf + DIRENT_PREV, DIRENT_MAGIC_END); + GSF_LE_SET_GUINT32 (buf + DIRENT_NEXT, next); + + child_index = DIRENT_MAGIC_END; + if (child->type == MSOLE_DIR && child->content.dir.children != NULL) { + GsfOutfileMSOle *first = child->content.dir.children->data; + child_index = first->child_index; + } + GSF_LE_SET_GUINT32 (buf + DIRENT_CHILD, child_index); + + gsf_output_write (ole->sink, DIRENT_SIZE, buf); + } + ole_pad_zero (ole); + num_dirent_blocks = ole_cur_block (ole) - dirent_start; + + /* write BAT */ + bat_start = ole_cur_block (ole); + for (i = 0 ; i < elem->len ; i++) { + GsfOutfileMSOle *child = g_ptr_array_index (elem, i); + if (child->type == MSOLE_BIG_BLOCK) + ole_write_bat (ole->sink, child->first_block, child->blocks); + } + if (sb_data_blocks > 0) + ole_write_bat (ole->sink, sb_data_start, sb_data_blocks); + if (num_sbat > 0) + ole_write_bat (ole->sink, sbat_start, num_sbat); + ole_write_bat (ole->sink, dirent_start, num_dirent_blocks); + + /* List the BAT and meta-BAT blocks in the BAT. Doing this may + * increase the size of the bat and hence the metabat, so be + * prepared to iterate. + */ + num_bat = 0; + num_xbat = 0; +recalc_bat_bat : + i = ((ole->sink->cur_size + + BAT_INDEX_SIZE * (num_bat + num_xbat) + - OLE_HEADER_SIZE - 1) >> ole->bb.shift) + 1; + i -= bat_start; + if (num_bat != i) { + num_bat = i; + goto recalc_bat_bat; + } + i = 0; + if (num_bat > OLE_HEADER_METABAT_SIZE) + i = 1 + ((num_bat - OLE_HEADER_METABAT_SIZE - 1) + / metabat_size); + if (num_xbat != i) { + num_xbat = i; + goto recalc_bat_bat; + } + + ole_write_const (ole->sink, BAT_MAGIC_BAT, num_bat); + ole_write_const (ole->sink, BAT_MAGIC_METABAT, num_xbat); + ole_pad_bat_unused (ole, 0); + + if (num_xbat > 0) { + xbat_pos = ole_cur_block (ole); + blocks = OLE_HEADER_METABAT_SIZE; + } else { + xbat_pos = BAT_MAGIC_END_OF_CHAIN; + blocks = num_bat; + } + + /* fix up the header */ + if (ole->bb.size == 4096) { + /* set _cSectDir for 4k sector files */ + GSF_LE_SET_GUINT32 (buf, num_dirent_blocks); + gsf_output_seek (ole->sink, + (gsf_off_t) OLE_HEADER_CSECTDIR, G_SEEK_SET); + gsf_output_write (ole->sink, 4, buf); + } + GSF_LE_SET_GUINT32 (buf, num_bat); + GSF_LE_SET_GUINT32 (buf+4, dirent_start); + gsf_output_seek (ole->sink, + (gsf_off_t) OLE_HEADER_NUM_BAT, G_SEEK_SET); + gsf_output_write (ole->sink, 8, buf); + + GSF_LE_SET_GUINT32 (buf+0x0, + (num_sbat > 0) ? sbat_start : BAT_MAGIC_END_OF_CHAIN); + GSF_LE_SET_GUINT32 (buf+0x4, num_sbat); + GSF_LE_SET_GUINT32 (buf+0x8, xbat_pos); + GSF_LE_SET_GUINT32 (buf+0xc, num_xbat); + gsf_output_seek (ole->sink, (gsf_off_t) OLE_HEADER_SBAT_START, + G_SEEK_SET); + gsf_output_write (ole->sink, 0x10, buf); + + /* write initial Meta-BAT */ + for (i = 0 ; i < blocks ; i++) { + GSF_LE_SET_GUINT32 (buf, bat_start + i); + gsf_output_write (ole->sink, BAT_INDEX_SIZE, buf); + } + + /* write extended Meta-BAT */ + if (num_xbat > 0) { + gsf_output_seek (ole->sink, 0, G_SEEK_END); + for (i = 0 ; i++ < num_xbat ; ) { + bat_start += blocks; + num_bat -= blocks; + blocks = (num_bat > metabat_size) ? metabat_size : num_bat; + for (j = 0 ; j < blocks ; j++) { + GSF_LE_SET_GUINT32 (buf, bat_start + j); + gsf_output_write (ole->sink, BAT_INDEX_SIZE, buf); + } + + if (i == num_xbat) { + ole_pad_bat_unused (ole, 1); + xbat_pos = BAT_MAGIC_END_OF_CHAIN; + } else + xbat_pos++; + GSF_LE_SET_GUINT32 (buf, xbat_pos); + gsf_output_write (ole->sink, BAT_INDEX_SIZE, buf); + } + } + + /* free the children */ + for (i = 0 ; i < elem->len ; i++) + g_object_unref (G_OBJECT (g_ptr_array_index (elem, i))); + g_ptr_array_free (elem, TRUE); + ole->content.dir.root_order = NULL; + + return gsf_output_close (ole->sink); +} + +static gboolean +gsf_outfile_msole_close (GsfOutput *output) +{ + GsfOutfileMSOle *ole = (GsfOutfileMSOle *)output; + + if (gsf_output_container (output) == NULL) /* The root dir */ + return gsf_outfile_msole_close_root (ole); + + if (ole->type == MSOLE_BIG_BLOCK) { + gsf_outfile_msole_seek (output, 0, G_SEEK_END); + ole_pad_zero (ole); + ole->blocks = ole_cur_block (ole) - ole->first_block; + return gsf_output_unwrap (G_OBJECT (output), ole->sink); + } + + return TRUE; +} + +static gboolean +gsf_outfile_msole_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ + GsfOutfileMSOle *ole = (GsfOutfileMSOle *)output; + size_t wsize; + + g_return_val_if_fail (ole->type != MSOLE_DIR, FALSE); + if (ole->type == MSOLE_SMALL_BLOCK) { + gboolean ok; + guint8 *buf; + gsf_off_t start_offset; + + if ((output->cur_offset + num_bytes) < OLE_DEFAULT_THRESHOLD) { + memcpy (ole->content.small_block.buf + output->cur_offset, + data, num_bytes); + return TRUE; + } + ok = gsf_output_wrap (G_OBJECT (output), ole->sink); + if (!ok) + return FALSE; + + buf = ole->content.small_block.buf; + ole->content.small_block.buf = NULL; + start_offset = gsf_output_tell (ole->sink); + ole->content.big_block.start_offset = start_offset; + if ((gsf_off_t) ole->content.big_block.start_offset + != start_offset) { + /* Check for overflow */ + g_warning ("File too big"); + return FALSE; + } + + ole->first_block = ole_cur_block (ole); + ole->type = MSOLE_BIG_BLOCK; + wsize = output->cur_size; + if ((gsf_off_t) wsize != output->cur_size) { + /* Check for overflow */ + g_warning ("File too big"); + return FALSE; + } + gsf_output_write (ole->sink, wsize, buf); + g_free (buf); + } + + g_return_val_if_fail (ole->type == MSOLE_BIG_BLOCK, FALSE); + + gsf_output_write (ole->sink, num_bytes, data); + + return TRUE; +} + +static gsf_off_t gsf_outfile_msole_vprintf (GsfOutput *output, + char const *format, va_list args) G_GNUC_PRINTF (2, 0); + +static gsf_off_t +gsf_outfile_msole_vprintf (GsfOutput *output, char const *format, va_list args) +{ + GsfOutfileMSOle *ole = (GsfOutfileMSOle *)output; + + /* An optimization. */ + if (ole->type == MSOLE_BIG_BLOCK) + return gsf_output_vprintf (ole->sink, format, args); + + /* In other cases, use the gsf_output_real_vprintf fallback method. + * (This eventually calls gsf_outfile_msole_write, which will also + * check that ole->type != MSOLE_DIR.) + */ + return gsf_output_class->Vprintf (output, format, args); +} + + +static void +ole_register_child (GsfOutfileMSOle *root, GsfOutfileMSOle *child) +{ + child->root = root; + g_object_ref (G_OBJECT (child)); + child->child_index = root->content.dir.root_order->len; + g_ptr_array_add (root->content.dir.root_order, child); +} + +static gint +ole_name_cmp (GsfOutfileMSOle const *a, GsfOutfileMSOle const *b) +{ + /* According to the docs length is more important than lexical order */ + char const *a_name = gsf_output_name ((GsfOutput const *)a); + char const *b_name = gsf_output_name ((GsfOutput const *)b); + + /* be anal */ + if (a_name == NULL) + return (b_name == NULL) ? 0 : -1; + else if (b_name == NULL) + return 1; + else { + unsigned a_len = g_utf8_strlen (a_name, -1); + unsigned b_len = g_utf8_strlen (b_name, -1); + + if (a_len != b_len) + return a_len - b_len; + return g_utf8_collate (a_name, b_name); + } +} + +static void +gsf_outfile_msole_set_block_shift (GsfOutfileMSOle *ole, + unsigned bb_shift, unsigned sb_shift) +{ + ole->bb.shift = bb_shift; + ole->bb.size = (1 << ole->bb.shift); + ole->sb.shift = sb_shift; + ole->sb.size = (1 << ole->sb.shift); +} + +static GsfOutput * +gsf_outfile_msole_new_child (GsfOutfile *parent, + char const *name, gboolean is_dir, + char const *first_property_name, va_list args) +{ + GsfOutfileMSOle *ole_parent = (GsfOutfileMSOle *)parent; + GsfOutfileMSOle *child; + + g_return_val_if_fail (ole_parent != NULL, NULL); + g_return_val_if_fail (ole_parent->type == MSOLE_DIR, NULL); + + child = (GsfOutfileMSOle *)g_object_new_valist ( + GSF_OUTFILE_MSOLE_TYPE, first_property_name, args); + if (is_dir) { + child->type = MSOLE_DIR; + child->content.dir.children = NULL; + } else { + /* start as small block */ + child->type = MSOLE_SMALL_BLOCK; + child->content.small_block.buf = g_new0 (guint8, OLE_DEFAULT_THRESHOLD); + } + g_object_ref (G_OBJECT (ole_parent->sink)); + child->sink = ole_parent->sink; + child->root = ole_parent->root; + gsf_outfile_msole_set_block_shift (child, + ole_parent->bb.shift, ole_parent->sb.shift); + gsf_output_set_name (GSF_OUTPUT (child), name); + gsf_output_set_container (GSF_OUTPUT (child), parent); + + ole_parent->content.dir.children = g_slist_insert_sorted ( + ole_parent->content.dir.children, child, + (GCompareFunc)ole_name_cmp); + ole_register_child (ole_parent->root, child); + + return GSF_OUTPUT (child); +} + +static void +gsf_outfile_msole_init (GObject *obj) +{ + GsfOutfileMSOle *ole = GSF_OUTFILE_MSOLE (obj); + + ole->sink = NULL; + ole->root = NULL; + ole->type = MSOLE_DIR; + + gsf_outfile_msole_set_block_shift (ole, + OLE_DEFAULT_BB_SHIFT, OLE_DEFAULT_SB_SHIFT); + + ole->content.dir.children = NULL; + ole->content.dir.root_order = NULL; + memset (ole->clsid, 0, sizeof (ole->clsid)); +} + +static void +gsf_outfile_msole_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + GsfOutfileClass *outfile_class = GSF_OUTFILE_CLASS (gobject_class); + + gobject_class->finalize = gsf_outfile_msole_finalize; + output_class->Close = gsf_outfile_msole_close; + output_class->Seek = gsf_outfile_msole_seek; + output_class->Write = gsf_outfile_msole_write; + output_class->Vprintf = gsf_outfile_msole_vprintf; + outfile_class->new_child = gsf_outfile_msole_new_child; + + parent_class = g_type_class_peek_parent (gobject_class); + gsf_output_class = g_type_class_peek (GSF_OUTPUT_TYPE); +} + +GSF_CLASS (GsfOutfileMSOle, gsf_outfile_msole, + gsf_outfile_msole_class_init, gsf_outfile_msole_init, + GSF_OUTFILE_TYPE) + +/* returns the number of times 1 must be shifted left to reach value */ +static unsigned +compute_shift (unsigned value) +{ + unsigned i = 0; + while ((value >> i) > 1) + i++; + return i; +} + +/** + * gsf_outfile_msole_new_full : + * @sink : a #GsfOutput to hold the OLE2 file. + * @bb_size : size of large blocks. + * @sb_size : size of small blocks. + * + * Creates the root directory of an MS OLE file and manages the addition of + * children. + * + * NOTE : adds a reference to @sink + * + * Returns the new ole file handler + **/ +GsfOutfile * +gsf_outfile_msole_new_full (GsfOutput *sink, guint bb_size, guint sb_size) +{ + static guint8 const default_header [] = { +/* 0x00 */ 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1, +/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x18 */ 0x3e, 0x00, 0x03, 0x00, 0xfe, 0xff, 0x09, 0x00, +/* 0x20 */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x28 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0x30 */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, +/* 0x38 */ 0x00, 0x10, 0x00, 0x00 /* 0x3c-0x4b: filled on close */ + }; + guint8 *buf; + GsfOutfileMSOle *ole; + + g_return_val_if_fail (GSF_IS_OUTPUT (sink), NULL); + + ole = g_object_new (GSF_OUTFILE_MSOLE_TYPE, NULL); + g_object_ref (G_OBJECT (sink)); + ole->sink = sink; + ole->type = MSOLE_DIR; + ole->content.dir.root_order = g_ptr_array_new (); + ole_register_child (ole, ole); + + gsf_outfile_msole_set_block_shift (ole, + compute_shift (bb_size), compute_shift (sb_size)); + if (ole->bb.size != bb_size || + ole->sb.size != sb_size || + bb_size <= sb_size || + bb_size < DIRENT_SIZE || + sb_size < 8 || + ZERO_PAD_BUF_SIZE < ole->bb.size) { + if (ZERO_PAD_BUF_SIZE < ole->bb.size) + g_warning ("Block size is too big, failing back to defaults."); + else + g_warning ("Incorrect block sizes, failing back to defaults."); + gsf_outfile_msole_set_block_shift (ole, + OLE_DEFAULT_BB_SHIFT, OLE_DEFAULT_SB_SHIFT); + } + + /* The names are the same */ + gsf_output_set_name (GSF_OUTPUT (ole), gsf_output_name (sink)); + gsf_output_set_container (GSF_OUTPUT (ole), NULL); + + /* build the header */ + buf = g_new (guint8, OLE_HEADER_SIZE); + memcpy (buf, default_header, sizeof (default_header)); + memset (buf + sizeof (default_header), 0xff, + OLE_HEADER_SIZE - sizeof (default_header)); + GSF_LE_SET_GUINT16 (buf + OLE_HEADER_BB_SHIFT, ole->bb.shift); + GSF_LE_SET_GUINT16 (buf + OLE_HEADER_SB_SHIFT, ole->sb.shift); + /* 4k sector OLE files seen in the wild have version 4 */ + if (ole->bb.size == 4096) + GSF_LE_SET_GUINT16 (buf + OLE_HEADER_MAJOR_VER, 4); + gsf_output_write (sink, OLE_HEADER_SIZE, buf); + g_free (buf); + + /* header must be padded out to bb.size with zeros */ + ole_pad_zero(ole); + + return GSF_OUTFILE (ole); +} + +/** + * gsf_outfile_msole_new : + * @sink : a #GsfOutput to hold the OLE2 file + * + * Creates the root directory of an MS OLE file and manages the addition of + * children. + * + * NOTE : adds a reference to @sink + * + * Returns the new ole file handler + **/ +GsfOutfile * +gsf_outfile_msole_new (GsfOutput *sink) +{ + return gsf_outfile_msole_new_full (sink, + OLE_DEFAULT_BB_SIZE, OLE_DEFAULT_SB_SIZE); +} + +/** + * gsf_outfile_msole_set_class_id : + * @ole: a #GsfOutfileMSOle + * @clsid: 16 byte identifier (often a GUID in MS Windows apps) + * + * Write @clsid to the directory associated with @ole. + * + * Returns TRUE on success. + **/ +gboolean +gsf_outfile_msole_set_class_id (GsfOutfileMSOle *ole, guint8 const *clsid) +{ + g_return_val_if_fail (ole != NULL && ole->type == MSOLE_DIR, FALSE); + memcpy (ole->clsid, clsid, sizeof (ole->clsid)); + return TRUE; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-msole.h b/lib/libgsf-1.12.3/gsf/gsf-outfile-msole.h new file mode 100644 index 0000000000..f002778fdc --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-msole.h @@ -0,0 +1,48 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-msole.h: interface for creating OLE files + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTFILE_MSOLE_H +#define GSF_OUTFILE_MSOLE_H + +#include +#include + +G_BEGIN_DECLS + +typedef struct _GsfOutfileMSOle GsfOutfileMSOle; + +#define GSF_OUTFILE_MSOLE_TYPE (gsf_outfile_msole_get_type ()) +#define GSF_OUTFILE_MSOLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTFILE_MSOLE_TYPE, GsfOutfileMSOle)) +#define GSF_IS_OUTFILE_MSOLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTFILE_MSOLE_TYPE)) + +#define OLE_DEFAULT_SB_SHIFT 6 +#define OLE_DEFAULT_BB_SHIFT 9 + +GType gsf_outfile_msole_get_type (void); +GsfOutfile *gsf_outfile_msole_new (GsfOutput *sink); +GsfOutfile *gsf_outfile_msole_new_full (GsfOutput *sink, + guint bb_size, guint sb_size); +gboolean gsf_outfile_msole_set_class_id (GsfOutfileMSOle *ole, + guint8 const *clsid); + +G_END_DECLS + +#endif /* GSF_OUTFILE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-stdio.c b/lib/libgsf-1.12.3/gsf/gsf-outfile-stdio.c new file mode 100644 index 0000000000..70c54c2491 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-stdio.c @@ -0,0 +1,170 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-stdio.c: A directory tree wrapper for Outfile + * + * Copyright (C) 2004 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_GLIB26 +#include +#else +#include "glib24_26-compat.h" +#endif // HAVE_GLIB26 + +#include +#ifdef HAVE_UNISTD_H +#include +#endif + +static GObjectClass *parent_class; + +struct _GsfOutfileStdio { + GsfOutfile parent; + char *root; +}; +typedef GsfOutfileClass GsfOutfileStdioClass; + +static void +gsf_outfile_stdio_finalize (GObject *obj) +{ + GsfOutfileStdio *ofs = GSF_OUTFILE_STDIO (obj); + g_free (ofs->root); + parent_class->finalize (obj); +} + +static GsfOutput * +gsf_outfile_stdio_new_child (GsfOutfile *parent, + char const *name, gboolean is_dir, + G_GNUC_UNUSED char const *first_property_name, + G_GNUC_UNUSED va_list args) +{ + GsfOutfileStdio *ofs = GSF_OUTFILE_STDIO (parent); + GsfOutput *child; + char *path = g_build_filename (ofs->root, name, NULL); + +/* FIXME FIXME FIXME FIX : allow args */ + if (is_dir) + child = (GsfOutput *)gsf_outfile_stdio_new (path, NULL); + else + child = gsf_output_stdio_new (path, NULL); + g_free (path); + + return child; +} + +static gboolean +gsf_outfile_stdio_close (G_GNUC_UNUSED GsfOutput *output) +{ + return TRUE; +} + +static void +gsf_outfile_stdio_init (GsfOutfileStdio *ofs) +{ + ofs->root = NULL; +} + +static void +gsf_outfile_stdio_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + GsfOutfileClass *outfile_class = GSF_OUTFILE_CLASS (gobject_class); + + parent_class = g_type_class_peek (GSF_OUTFILE_TYPE); + + gobject_class->finalize = gsf_outfile_stdio_finalize; + + output_class->Close = gsf_outfile_stdio_close; + output_class->Seek = NULL; + output_class->Write = NULL; + output_class->Vprintf = NULL; + + outfile_class->new_child = gsf_outfile_stdio_new_child; +} + +GSF_CLASS (GsfOutfileStdio, gsf_outfile_stdio, + gsf_outfile_stdio_class_init, gsf_outfile_stdio_init, + GSF_OUTFILE_TYPE) + +/** + * gsf_outfile_stdio_new : + * @root : root directory in utf8. + * @err : optionally NULL. + * + * Returns a new outfile or NULL. + **/ +GsfOutfile * +gsf_outfile_stdio_new_valist (char const *root, GError **err, + char const *first_property_name, + va_list var_args) +{ + GsfOutfileStdio *ofs; + + if (0 != g_mkdir (root, 0777)) { + if (err != NULL) { + int save_errno = errno; + char *utf8name = g_filename_display_name (root); + *err = g_error_new (gsf_output_error_id (), 0, + "%s: %s", + utf8name, g_strerror (save_errno)); + g_free (utf8name); + } + return NULL; + } + + ofs = (GsfOutfileStdio *) g_object_new_valist (GSF_OUTFILE_STDIO_TYPE, + first_property_name, var_args); + ofs->root = g_strdup (root); + gsf_output_set_name_from_filename (GSF_OUTPUT (ofs), root); + + return GSF_OUTFILE (ofs); +} + +GsfOutfile * +gsf_outfile_stdio_new_full (char const *root, GError **err, + const gchar *first_property_name, + ...) +{ + GsfOutfile *res; + va_list var_args; + + va_start (var_args, first_property_name); + res = gsf_outfile_stdio_new_valist (root, err, first_property_name, var_args); + va_end (var_args); + + return res; +} + +/** + * gsf_outfile_stdio_new : + * @root : root directory in utf8. + * @err : optionally NULL. + * + * Returns a new outfile or NULL. + **/ +GsfOutfile * +gsf_outfile_stdio_new (char const *root, GError **err) +{ + return gsf_outfile_stdio_new_full (root, err, NULL); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-stdio.h b/lib/libgsf-1.12.3/gsf/gsf-outfile-stdio.h new file mode 100644 index 0000000000..7f7c1b0918 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-stdio.h @@ -0,0 +1,46 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-stdio.h: write a directory tree + * + * Copyright (C) 2004 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTFILE_STDIO_H +#define GSF_OUTFILE_STDIO_H + +#include + +G_BEGIN_DECLS + +typedef struct _GsfOutfileStdio GsfOutfileStdio; + +#define GSF_OUTFILE_STDIO_TYPE (gsf_outfile_stdio_get_type ()) +#define GSF_OUTFILE_STDIO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTFILE_STDIO_TYPE, GsfOutfileStdio)) +#define GSF_IS_OUTFILE_STDIO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTFILE_STDIO_TYPE)) + +GType gsf_outfile_stdio_get_type (void); +GsfOutfile *gsf_outfile_stdio_new (char const *root, GError **err); +GsfOutfile *gsf_outfile_stdio_new_full (char const *root, GError **err, + char const *first_property_name, + ...); /* G_GNUC_NULL_TERMINATED */ +GsfOutfile *gsf_outfile_stdio_new_valist (char const *root, GError **err, + char const *first_property_name, + va_list var_args); + +G_END_DECLS + +#endif /* GSF_OUTFILE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-zip.c b/lib/libgsf-1.12.3/gsf/gsf-outfile-zip.c new file mode 100644 index 0000000000..43e6104e6d --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-zip.c @@ -0,0 +1,764 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-zip.c: zip archive output. + * + * Copyright (C) 2002-2004 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Outc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifndef HAVE_GLIB26 +#include +#endif + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "libgsf:zip" + +enum { + PROP_0, + PROP_SINK, + PROP_ENTRY_NAME, + PROP_COMPRESSION_LEVEL +}; + +static GObjectClass *parent_class; + +struct _GsfOutfileZip { + GsfOutfile parent; + + GsfOutput *sink; + GsfOutfileZip *root; + + char *entry_name; + + GsfZipVDir *vdir; + GPtrArray *root_order; /* only valid for the root */ + + z_stream *stream; + GsfZipCompressionMethod compression_method; + + gboolean writing; + + guint8 *buf; + size_t buf_size; +}; + +typedef struct { + GsfOutfileClass parent_class; +} GsfOutfileZipClass; + +#define GSF_OUTFILE_ZIP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_OUTFILE_ZIP_TYPE, GsfOutfileZipClass)) +#define GSF_IS_OUTFILE_ZIP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_OUTFILE_ZIP_TYPE)) + +static void +disconnect_children (GsfOutfileZip *zip) +{ + unsigned i; + + if (!zip->root_order) + return; + + for (i = 0 ; i < zip->root_order->len ; i++) { + GsfOutfileZip *child = + g_ptr_array_index (zip->root_order, i); + if (child) + g_object_unref (child); + } + g_ptr_array_free (zip->root_order, TRUE); + zip->root_order = NULL; +} + +static void +gsf_outfile_zip_finalize (GObject *obj) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (obj); + + /* If the closing failed, we might have stuff here. */ + disconnect_children (zip); + + if (zip->sink != NULL) { + g_object_unref (zip->sink); + zip->sink = NULL; + } + + g_free (zip->entry_name); + + if (zip->stream) + (void) deflateEnd (zip->stream); + g_free (zip->stream); + g_free (zip->buf); + + if (zip == zip->root) + gsf_vdir_free (zip->vdir, TRUE); /* Frees vdirs recursively */ + + parent_class->finalize (obj); +} + +static GObject * +gsf_outfile_zip_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GsfOutfileZip *zip =(GsfOutfileZip *) + (parent_class->constructor (type, + n_construct_properties, + construct_params)); + + if (!zip->entry_name) { + zip->vdir = gsf_vdir_new ("", TRUE, NULL); + zip->root_order = g_ptr_array_new (); + zip->root = zip; + + /* The names are the same */ + gsf_output_set_name (GSF_OUTPUT (zip), gsf_output_name (zip->sink)); + gsf_output_set_container (GSF_OUTPUT (zip), NULL); + } + + return (GObject *)zip; +} + +static gboolean +gsf_outfile_zip_seek (G_GNUC_UNUSED GsfOutput *output, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static gboolean +zip_dirent_write (GsfOutput *sink, GsfZipDirent *dirent) +{ + static guint8 const dirent_signature[] = + { 'P', 'K', 0x01, 0x02 }; + guint8 buf[ZIP_DIRENT_SIZE]; + int nlen = strlen (dirent->name); + gboolean ret; + + memset (buf, 0, sizeof buf); + memcpy (buf, dirent_signature, sizeof dirent_signature); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_ENCODER, 0x317); /* Unix */ + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_EXTRACT, 0x14); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_FLAGS, 0x08); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_COMPR_METHOD, + dirent->compr_method); + GSF_LE_SET_GUINT32 (buf + ZIP_DIRENT_DOSTIME, dirent->dostime); + GSF_LE_SET_GUINT32 (buf + ZIP_DIRENT_CRC32, dirent->crc32); + GSF_LE_SET_GUINT32 (buf + ZIP_DIRENT_CSIZE, dirent->csize); + GSF_LE_SET_GUINT32 (buf + ZIP_DIRENT_USIZE, dirent->usize); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_NAME_SIZE, nlen); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_EXTRAS_SIZE, 0); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_COMMENT_SIZE, 0); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_DISKSTART, 0); + GSF_LE_SET_GUINT16 (buf + ZIP_DIRENT_FILE_TYPE, 0); + /* Hardcode file mode 644 */ + GSF_LE_SET_GUINT32 (buf + ZIP_DIRENT_FILE_MODE, 0644 << 16); + GSF_LE_SET_GUINT32 (buf + ZIP_DIRENT_OFFSET, dirent->offset); + + ret = gsf_output_write (sink, sizeof buf, buf); + if (ret) + ret = gsf_output_write (sink, nlen, dirent->name); + + return ret; +} + +static gboolean +zip_trailer_write (GsfOutfileZip *zip, unsigned entries, gsf_off_t dirpos) +{ + static guint8 const trailer_signature[] = + { 'P', 'K', 0x05, 0x06 }; + guint8 buf[ZIP_TRAILER_SIZE]; + gsf_off_t pos = gsf_output_tell (zip->sink); + + memset (buf, 0, sizeof buf); + memcpy (buf, trailer_signature, sizeof trailer_signature); + GSF_LE_SET_GUINT16 (buf + ZIP_TRAILER_ENTRIES, entries); + GSF_LE_SET_GUINT16 (buf + ZIP_TRAILER_TOTAL_ENTRIES, entries); + GSF_LE_SET_GUINT32 (buf + ZIP_TRAILER_DIR_SIZE, pos - dirpos); + GSF_LE_SET_GUINT32 (buf + ZIP_TRAILER_DIR_POS, dirpos); + + return gsf_output_write (zip->sink, sizeof buf, buf); +} + +static gboolean +zip_close_root (GsfOutput *output) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (output); + GsfOutfileZip *child; + gsf_off_t dirpos = gsf_output_tell (zip->sink); + GPtrArray *elem = zip->root_order; + unsigned entries = elem->len; + unsigned i; + + /* Check that children are closed */ + for (i = 0 ; i < elem->len ; i++) { + child = g_ptr_array_index (elem, i); + if (!gsf_output_is_closed (GSF_OUTPUT (child))) { + g_warning ("Child still open"); + return FALSE; + } + } + + /* Write directory */ + for (i = 0 ; i < entries ; i++) { + child = g_ptr_array_index (elem, i); + if (!zip_dirent_write (zip->sink, child->vdir->dirent)) + return FALSE; + } + + disconnect_children (zip); + + return zip_trailer_write (zip, entries, dirpos); +} + +static void +stream_name_write_to_buf (GsfOutfileZip *zip, GString *res) +{ + GsfOutput *output = GSF_OUTPUT (zip); + GsfOutfile *container; + + if (zip == zip->root) + return; + + container = gsf_output_container (output); + if (container) { + stream_name_write_to_buf (GSF_OUTFILE_ZIP (container), res); + if (res->len) { + /* Forward slash is specified by the format. */ + g_string_append_c (res, '/'); + } + } + + if (zip->entry_name) + g_string_append (res, zip->entry_name); +} + +static char * +stream_name_build (GsfOutfileZip *zip) +{ + GString *str = g_string_sized_new (80); + stream_name_write_to_buf (zip, str); + return g_string_free (str, FALSE); +} + +static guint32 +zip_time_make (time_t t) +{ + struct tm *localnow = localtime (&t); + guint32 ztime; + + ztime = (localnow->tm_year - 80) & 0x7f; + ztime = (ztime << 4) | ((localnow->tm_mon + 1) & 0x0f); + ztime = (ztime << 5) | (localnow->tm_mday & 0x1f); + ztime = (ztime << 5) | (localnow->tm_hour & 0x1f); + ztime = (ztime << 6) | (localnow->tm_min & 0x3f); + ztime = (ztime << 5) | ((localnow->tm_sec / 2) & 0x1f); + + return ztime; +} + +static GsfZipDirent* +zip_dirent_new_out (GsfOutfileZip *zip) +{ + GsfZipDirent *dirent = gsf_zip_dirent_new (); + dirent->name = stream_name_build (zip); + dirent->compr_method = zip->compression_method; + dirent->dostime = zip_time_make (time (NULL)); + return dirent; +} + +static gboolean +zip_header_write (GsfOutfileZip *zip) +{ + static guint8 const header_signature[] = + { 'P', 'K', 0x03, 0x04 }; + guint8 hbuf[ZIP_HEADER_SIZE]; + GsfZipDirent *dirent = zip->vdir->dirent; + guint16 flags = 0; + char *name = dirent->name; + int nlen = strlen (name); + gboolean ret; + + memset (hbuf, 0, sizeof hbuf); + memcpy (hbuf, header_signature, sizeof header_signature); + GSF_LE_SET_GUINT16 (hbuf + ZIP_HEADER_VERSION, 0x14); + if (dirent->compr_method == GSF_ZIP_DEFLATED) + flags = 0x08; + GSF_LE_SET_GUINT16 (hbuf + ZIP_HEADER_FLAGS, flags); + GSF_LE_SET_GUINT16 (hbuf + ZIP_HEADER_COMP_METHOD, + dirent->compr_method); + GSF_LE_SET_GUINT32 (hbuf + ZIP_HEADER_TIME, dirent->dostime); + GSF_LE_SET_GUINT16 (hbuf + ZIP_HEADER_NAME_LEN, nlen); + ret = gsf_output_write (zip->sink, sizeof hbuf, hbuf); + if (ret) + ret = gsf_output_write (zip->sink, nlen, name); + + return ret; +} + +static gboolean +zip_init_write (GsfOutput *output) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (output); + GsfZipDirent *dirent; + int ret; + + if (zip->root->writing) { + g_warning ("Already writing to another stream in archive"); + return FALSE; + } + + if (!gsf_output_wrap (G_OBJECT (output), zip->sink)) + return FALSE; + + dirent = zip_dirent_new_out (zip); + dirent->offset = gsf_output_tell (zip->sink); + if (zip->vdir->dirent) + g_warning ("Leak."); + + zip->vdir->dirent = dirent; + zip_header_write (zip); + zip->writing = TRUE; + zip->root->writing = TRUE; + dirent->crc32 = crc32 (0L, Z_NULL, 0); + if (zip->compression_method == GSF_ZIP_DEFLATED) { + if (!zip->stream) { + zip->stream = g_new0 (z_stream, 1); + } + ret = deflateInit2 (zip->stream, Z_DEFAULT_COMPRESSION, + Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, + Z_DEFAULT_STRATEGY); + if (ret != Z_OK) + return FALSE; + if (!zip->buf) { + zip->buf_size = ZIP_BUF_SIZE; + zip->buf = g_new (guint8, zip->buf_size); + } + zip->stream->next_out = zip->buf; + zip->stream->avail_out = zip->buf_size; + } + + return TRUE; +} + +static gboolean +zip_output_block (GsfOutfileZip *zip) +{ + size_t num_bytes = zip->buf_size - zip->stream->avail_out; + GsfZipDirent *dirent = zip->vdir->dirent; + + if (!gsf_output_write (zip->sink, num_bytes, zip->buf)) { + return FALSE; + } + dirent->csize += num_bytes; + zip->stream->next_out = zip->buf; + zip->stream->avail_out = zip->buf_size; + + return TRUE; +} + +static gboolean +zip_flush (GsfOutfileZip *zip) +{ + int zret; + + do { + zret = deflate (zip->stream, Z_FINISH); + if (zret == Z_OK || (zret == Z_BUF_ERROR && zip->stream->avail_out == 0)) { + /* In this case Z_OK or Z_BUF_ERROR means more buffer + space is needed */ + if (!zip_output_block (zip)) + return FALSE; + } + } while (zret == Z_OK || zret == Z_BUF_ERROR); + if (zret != Z_STREAM_END) + return FALSE; + if (!zip_output_block (zip)) + return FALSE; + + return TRUE; +} + +/* Write the per stream data descriptor */ +static gboolean +zip_ddesc_write (GsfOutfileZip *zip) +{ + static guint8 const ddesc_signature[] = + { 'P', 'K', 0x07, 0x08 }; + guint8 buf[16]; + GsfZipDirent *dirent = zip->vdir->dirent; + + memcpy (buf, ddesc_signature, sizeof ddesc_signature); + GSF_LE_SET_GUINT32 (buf + 4, dirent->crc32); + GSF_LE_SET_GUINT32 (buf + 8, dirent->csize); + GSF_LE_SET_GUINT32 (buf + 12, dirent->usize); + if (!gsf_output_write (zip->sink, sizeof buf, buf)) { + return FALSE; + } + + return TRUE; +} + +static gboolean +zip_header_write_sizes (GsfOutfileZip *zip) +{ + guint8 hbuf[ZIP_HEADER_SIZE]; + GsfZipDirent *dirent = zip->vdir->dirent; + gsf_off_t pos = gsf_output_tell (zip->sink); + + if (!gsf_output_seek (zip->sink, dirent->offset + ZIP_HEADER_CRC, + G_SEEK_SET)) + return FALSE; + + GSF_LE_SET_GUINT32 (hbuf + ZIP_HEADER_CRC, dirent->crc32); + GSF_LE_SET_GUINT32 (hbuf + ZIP_HEADER_COMP_SIZE, dirent->csize); + GSF_LE_SET_GUINT32 (hbuf + ZIP_HEADER_UNCOMP_SIZE, dirent->usize); + if (!gsf_output_write (zip->sink, 12, hbuf + ZIP_HEADER_CRC)) + return FALSE; + if (!gsf_output_seek (zip->sink, pos, G_SEEK_SET)) + return FALSE; + + return TRUE; +} + +static gboolean +zip_close_stream (GsfOutput *output) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (output); + gboolean result; + + if (!zip->writing) + if (!zip_init_write (output)) + return FALSE; + + if (zip->compression_method == GSF_ZIP_DEFLATED) { + if (!zip_flush (zip)) + return FALSE; + + if (!zip_ddesc_write (zip)) /* Write data descriptor */ + return FALSE; + } else { + if (!zip_header_write_sizes (zip)) /* Write crc, sizes */ + return FALSE; + } + zip->root->writing = FALSE; + + result = gsf_output_unwrap (G_OBJECT (output), zip->sink); + + /* Free unneeded memory */ + if (zip->stream) { + (void) deflateEnd (zip->stream); + g_free (zip->stream); + zip->stream = NULL; + g_free (zip->buf); + zip->buf = NULL; + } + + return result; +} + +static gboolean +gsf_outfile_zip_close (GsfOutput *output) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (output); + gboolean ret; + + /* The root dir */ + if (zip == zip->root) + ret = zip_close_root (output); + else if (zip->vdir->is_directory) + /* Directories: Do nothing. Should change this to actually + * write dirs which don't have children. */ + ret = TRUE; + else + ret = zip_close_stream (output); + + return ret; +} + +static gboolean +gsf_outfile_zip_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (output); + GsfZipDirent *dirent; + int ret; + + g_return_val_if_fail (zip && zip->vdir, FALSE); + g_return_val_if_fail (!zip->vdir->is_directory, FALSE); + g_return_val_if_fail (data, FALSE); + + if (!zip->writing) + if (!zip_init_write (output)) + return FALSE; + + dirent = zip->vdir->dirent; + if (zip->compression_method == GSF_ZIP_DEFLATED) { + zip->stream->next_in = (unsigned char *) data; + zip->stream->avail_in = num_bytes; + + while (zip->stream->avail_in > 0) { + if (zip->stream->avail_out == 0) { + if (!zip_output_block (zip)) + return FALSE; + } + ret = deflate (zip->stream, Z_NO_FLUSH); + if (ret != Z_OK) + return FALSE; + } + } else { + if (!gsf_output_write (zip->sink, num_bytes, data)) + return FALSE; + dirent->csize += num_bytes; + } + dirent->crc32 = crc32 (dirent->crc32, data, num_bytes); + dirent->usize += num_bytes; + + return TRUE; +} + +static void +root_register_child (GsfOutfileZip *root, GsfOutfileZip *child) +{ + child->root = root; + if (!child->vdir->is_directory) { + g_object_ref (child); + g_ptr_array_add (root->root_order, child); + } +} + +static void +gsf_outfile_zip_set_sink (GsfOutfileZip *zip, GsfOutput *sink) +{ + if (sink) + g_object_ref (sink); + if (zip->sink) + g_object_unref (zip->sink); + zip->sink = sink; +} + +static GsfOutput * +gsf_outfile_zip_new_child (GsfOutfile *parent, + char const *name, gboolean is_dir, + char const *first_property_name, va_list args) +{ + GsfOutfileZip *zip_parent = (GsfOutfileZip *)parent; + GsfOutfileZip *child; + size_t n_params = 0; + GParameter *params = NULL; + char *display_name; + + g_return_val_if_fail (zip_parent != NULL, NULL); + g_return_val_if_fail (zip_parent->vdir, NULL); + g_return_val_if_fail (zip_parent->vdir->is_directory, NULL); + g_return_val_if_fail (name && *name, NULL); + + gsf_property_settings_collect (GSF_OUTFILE_ZIP_TYPE, + ¶ms, &n_params, + "sink", zip_parent->sink, + "entry-name", name, + NULL); + gsf_property_settings_collect_valist (GSF_OUTFILE_ZIP_TYPE, + ¶ms, &n_params, + first_property_name, + args); + child = (GsfOutfileZip *)g_object_newv (GSF_OUTFILE_ZIP_TYPE, + n_params, + params); + gsf_property_settings_free (params, n_params); + + child->vdir = gsf_vdir_new (name, is_dir, NULL); + + /* FIXME: It isn't clear what encoding name is in. */ + display_name = g_filename_display_name (name); + gsf_output_set_name (GSF_OUTPUT (child), display_name); + g_free (display_name); + + gsf_output_set_container (GSF_OUTPUT (child), parent); + gsf_vdir_add_child (zip_parent->vdir, child->vdir); + root_register_child (zip_parent->root, child); + + return GSF_OUTPUT (child); +} + +static void +gsf_outfile_zip_init (GObject *obj) +{ + GsfOutfileZip *zip = GSF_OUTFILE_ZIP (obj); + + zip->sink = NULL; + zip->root = NULL; + zip->entry_name = NULL; + zip->vdir = NULL; + zip->root_order = NULL; + zip->stream = NULL; + zip->compression_method = GSF_ZIP_DEFLATED; + zip->writing = FALSE; + zip->buf = NULL; + zip->buf_size = 0; +} + +static void +gsf_outfile_zip_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GsfOutfileZip *zip = (GsfOutfileZip *)object; + + switch (property_id) { + case PROP_SINK: + g_value_set_object (value, zip->sink); + break; + case PROP_ENTRY_NAME: + g_value_set_string (value, zip->entry_name); + break; + case PROP_COMPRESSION_LEVEL: + g_value_set_int (value, + zip->vdir->dirent + ? zip->vdir->dirent->compr_method + : 0); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_outfile_zip_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GsfOutfileZip *zip = (GsfOutfileZip *)object; + + switch (property_id) { + case PROP_SINK: + gsf_outfile_zip_set_sink (zip, g_value_get_object (value)); + break; + case PROP_ENTRY_NAME: + zip->entry_name = g_strdup (g_value_get_string (value)); + break; + case PROP_COMPRESSION_LEVEL: { + int level = g_value_get_int (value); + switch (level) { + case GSF_ZIP_STORED: + case GSF_ZIP_DEFLATED: + zip->compression_method = level; + break; + default: + g_warning ("Unsupported compression level %d", level); + } + break; + } + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_outfile_zip_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *input_class = GSF_OUTPUT_CLASS (gobject_class); + GsfOutfileClass *outfile_class = GSF_OUTFILE_CLASS (gobject_class); + + gobject_class->constructor = gsf_outfile_zip_constructor; + gobject_class->finalize = gsf_outfile_zip_finalize; + gobject_class->get_property = gsf_outfile_zip_get_property; + gobject_class->set_property = gsf_outfile_zip_set_property; + + input_class->Write = gsf_outfile_zip_write; + input_class->Seek = gsf_outfile_zip_seek; + input_class->Close = gsf_outfile_zip_close; + outfile_class->new_child = gsf_outfile_zip_new_child; + + parent_class = g_type_class_peek_parent (gobject_class); + + g_object_class_install_property + (gobject_class, + PROP_SINK, + g_param_spec_object ("sink", "Sink", + "Where the archive is written.", + GSF_OUTPUT_TYPE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_ENTRY_NAME, + g_param_spec_string ("entry-name", "Entry Name", + "The filename of this member in the archive without path.", + NULL, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_COMPRESSION_LEVEL, + g_param_spec_int ("compression-level", + "Compression Level", + "The level of compression used, zero meaning none.", + 0, 10, + GSF_ZIP_DEFLATED, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); +} + +GSF_CLASS (GsfOutfileZip, gsf_outfile_zip, + gsf_outfile_zip_class_init, gsf_outfile_zip_init, + GSF_OUTFILE_TYPE) + +/** + * gsf_outfile_zip_new : + * @sink : + * @err : + * + * Creates the root directory of a Zip file and manages the addition of + * children. + * + * NOTE : adds a reference to @sink + * + * Returns : the new zip file handler + **/ +GsfOutfile * +gsf_outfile_zip_new (GsfOutput *sink, G_GNUC_UNUSED GError **err) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (sink), NULL); + + return (GsfOutfile *)g_object_new (GSF_OUTFILE_ZIP_TYPE, + "sink", sink, + NULL); +} + +/* deprecated has no effect */ +gboolean +gsf_outfile_zip_set_compression_method (G_GNUC_UNUSED GsfOutfileZip *zip, + G_GNUC_UNUSED GsfZipCompressionMethod method) +{ + return TRUE; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile-zip.h b/lib/libgsf-1.12.3/gsf/gsf-outfile-zip.h new file mode 100644 index 0000000000..ff455f76c5 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile-zip.h @@ -0,0 +1,59 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile-zip.h: interface for zip archive output. + * + * Copyright (C) 2002-2004 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTFILE_ZIP_H +#define GSF_OUTFILE_ZIP_H + +#include +#include + +G_BEGIN_DECLS + +typedef enum { + GSF_ZIP_STORED = 0, /* supported for export */ + GSF_ZIP_SHRUNK = 1, + GSF_ZIP_REDUCEDx1 = 2, + GSF_ZIP_REDUCEDx2 = 3, + GSF_ZIP_REDUCEDx3 = 4, + GSF_ZIP_REDUCEDx4 = 5, + GSF_ZIP_IMPLODED = 6, + GSF_ZIP_TOKENIZED = 7, + GSF_ZIP_DEFLATED = 8, /* supported for export */ + GSF_ZIP_DEFLATED_BETTER = 9, + GSF_ZIP_IMPLODED_BETTER = 10 +} GsfZipCompressionMethod; + +typedef struct _GsfOutfileZip GsfOutfileZip; + +#define GSF_OUTFILE_ZIP_TYPE (gsf_outfile_zip_get_type ()) +#define GSF_OUTFILE_ZIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTFILE_ZIP_TYPE, GsfOutfileZip)) +#define GSF_IS_OUTFILE_ZIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTFILE_ZIP_TYPE)) + +GType gsf_outfile_zip_get_type (void); +GsfOutfile *gsf_outfile_zip_new (GsfOutput *sink, GError **err); + +/* Deprecated. Has no effect. */ +gboolean gsf_outfile_zip_set_compression_method (GsfOutfileZip *zip, + GsfZipCompressionMethod method); + +G_END_DECLS + +#endif /* GSF_OUTFILE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile.c b/lib/libgsf-1.12.3/gsf/gsf-outfile.c new file mode 100644 index 0000000000..c50d755e2e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile.c @@ -0,0 +1,83 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile.c : + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#define GET_CLASS(instance) G_TYPE_INSTANCE_GET_CLASS (instance, GSF_OUTFILE_TYPE, GsfOutfileClass) + +/** + * gsf_outfile_new_child : + * @outfile : A #GsfOutfile + * @name : The name of the new child to create + * @is_dir : TRUE to create a directory, FALSE to create a plain file + * + * Returns a newly created child + **/ +GsfOutput * +gsf_outfile_new_child (GsfOutfile *outfile, + char const *name, gboolean is_dir) +{ + return gsf_outfile_new_child_full (outfile, name, is_dir, NULL); +} + +/** + * gsf_outfile_new_child_full : + * @outfile : A #GsfOutfile + * @name : The name of the new child to create + * @is_dir : TRUE to create a directory, FALSE to create a plain file + * @first_property_name : + * @Varargs : + * + * Returns a newly created child + **/ +GsfOutput * +gsf_outfile_new_child_full (GsfOutfile *outfile, + char const *name, gboolean is_dir, + char const *first_property_name, + ...) +{ + GsfOutput *res; + va_list args; + + g_return_val_if_fail (outfile != NULL, NULL); + + va_start (args, first_property_name); + res = gsf_outfile_new_child_varg (outfile, name, is_dir, + first_property_name, args); + va_end (args); + + return res; +} + +GsfOutput * +gsf_outfile_new_child_varg (GsfOutfile *outfile, + char const *name, gboolean is_dir, + char const *first_property_name, + va_list args) +{ + g_return_val_if_fail (outfile != NULL, NULL); + return GET_CLASS (outfile)->new_child (outfile, name, is_dir, + first_property_name, args); +} + +GSF_CLASS_ABSTRACT (GsfOutfile, gsf_outfile, NULL, NULL, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-outfile.h b/lib/libgsf-1.12.3/gsf/gsf-outfile.h new file mode 100644 index 0000000000..61e193fe8f --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-outfile.h @@ -0,0 +1,48 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-outfile.h: interface for creating structured files + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTFILE_H +#define GSF_OUTFILE_H + +#include + +G_BEGIN_DECLS + +#define GSF_OUTFILE_TYPE (gsf_outfile_get_type ()) +#define GSF_OUTFILE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTFILE_TYPE, GsfOutfile)) +#define GSF_IS_OUTFILE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTFILE_TYPE)) + +GType gsf_outfile_get_type (void); + +GsfOutput *gsf_outfile_new_child (GsfOutfile *outfile, + char const *name, gboolean is_dir); +GsfOutput *gsf_outfile_new_child_full (GsfOutfile *outfile, + char const *name, gboolean is_dir, + char const *first_property_name, + ...); +GsfOutput *gsf_outfile_new_child_varg (GsfOutfile *outfile, + char const *name, gboolean is_dir, + char const *first_property_name, + va_list args); + +G_END_DECLS + +#endif /* GSF_OUTFILE_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-bzip.c b/lib/libgsf-1.12.3/gsf/gsf-output-bzip.c new file mode 100644 index 0000000000..724da82a87 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-bzip.c @@ -0,0 +1,264 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-bzip.c: wrapper to compress to bzipped output + * + * Copyright (C) 2003-2004 Dom Lachowicz (cinamod@hotmail.com) + * 2002-2004 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include + +#include +#include +#include +#include + +#ifdef HAVE_BZ2 +/* For getting FILE. Don't ask. */ +#include +#include +#define BZ_BUFSIZE 1024 +#endif + +static GObjectClass *parent_class; + +struct _GsfOutputBzip { + GsfOutput output; + +#ifdef HAVE_BZ2 + GsfOutput *sink; /* compressed data */ + bz_stream stream; + guint8 *buf; + size_t buf_size; +#endif +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputBzipClass; + +static void +gsf_output_bzip_finalize (GObject *obj) +{ +#ifdef HAVE_BZ2 + GsfOutputBzip *bzip = (GsfOutputBzip *)obj; + + if (bzip->sink != NULL) { + g_object_unref (G_OBJECT (bzip->sink)); + bzip->sink = NULL; + } + g_free (bzip->buf); +#endif + parent_class->finalize (obj); +} + +#ifdef HAVE_BZ2 +static gboolean +init_bzip (GsfOutputBzip *bzip, GError **err) +{ + int ret; + + ret = BZ2_bzCompressInit (&bzip->stream, 6, 0, 0); + + if (ret != BZ_OK) { + if (err != NULL) + *err = g_error_new (gsf_output_error_id (), 0, + "Unable to initialize BZ2 library"); + return FALSE; + } + if (!bzip->buf) { + bzip->buf_size = BZ_BUFSIZE; + bzip->buf = g_new (guint8, bzip->buf_size); + } + bzip->stream.next_out = bzip->buf; + bzip->stream.avail_out = bzip->buf_size; + + return TRUE; +} + +static gboolean +bzip_output_block (GsfOutputBzip *bzip) +{ + size_t num_bytes = bzip->buf_size - bzip->stream.avail_out; + + if (!gsf_output_write (bzip->sink, num_bytes, bzip->buf)) + return FALSE; + + bzip->stream.next_out = bzip->buf; + bzip->stream.avail_out = bzip->buf_size; + + return TRUE; +} + +static gboolean +bzip_flush (GsfOutputBzip *bzip) +{ + int zret; + + do { + zret = BZ2_bzCompress (&bzip->stream, BZ_FINISH); + if (zret == BZ_FINISH_OK) { + /* In this case BZ_FINISH_OK means more buffer space + needed */ + if (!bzip_output_block (bzip)) + return FALSE; + } + } while (zret == BZ_FINISH_OK); + if (zret != BZ_STREAM_END) { + g_warning ("Unexpected error code %d from bzlib during compression.", + zret); + return FALSE; + } + if (!bzip_output_block (bzip)) + return FALSE; + + return TRUE; +} +#endif + +static gboolean +gsf_output_bzip_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ +#ifdef HAVE_BZ2 + GsfOutputBzip *bzip = GSF_OUTPUT_BZIP (output); + + g_return_val_if_fail (data, FALSE); + + bzip->stream.next_in = (unsigned char *) data; + bzip->stream.avail_in = num_bytes; + + while (bzip->stream.avail_in > 0) { + int zret; + + if (bzip->stream.avail_out == 0) { + if (!bzip_output_block (bzip)) + return FALSE; + } + + zret = BZ2_bzCompress (&bzip->stream, BZ_RUN); + if (zret != BZ_RUN_OK) { + g_warning ("Unexpected error code %d from bzlib during compression.", + zret); + return FALSE; + } + } + + if (bzip->stream.avail_out == 0) { + if (!bzip_output_block (bzip)) + return FALSE; + } + + return TRUE; +#else + return FALSE; +#endif +} + +static gboolean +gsf_output_bzip_seek (G_GNUC_UNUSED GsfOutput *output, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static gboolean +gsf_output_bzip_close (GsfOutput *output) +{ +#ifdef HAVE_BZ2 + GsfOutputBzip *bzip = GSF_OUTPUT_BZIP (output); + gboolean rt; + + rt = bzip_flush (bzip); + BZ2_bzCompressEnd (&bzip->stream); + + return rt; +#else + return FALSE; +#endif +} + +static void +gsf_output_bzip_init (GObject *obj) +{ +#ifdef HAVE_BZ2 + GsfOutputBzip *bzip = GSF_OUTPUT_BZIP (obj); + + bzip->sink = NULL; + bzip->stream.bzalloc = NULL; + bzip->stream.bzfree = NULL; + bzip->stream.opaque = NULL; + bzip->stream.next_in = NULL; + bzip->stream.next_out = NULL; + bzip->stream.avail_in = bzip->stream.avail_out = 0; + bzip->buf = NULL; + bzip->buf_size = 0; +#endif +} + +static void +gsf_output_bzip_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_bzip_finalize; + output_class->Write = gsf_output_bzip_write; + output_class->Seek = gsf_output_bzip_seek; + output_class->Close = gsf_output_bzip_close; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfOutputBzip, gsf_output_bzip, + gsf_output_bzip_class_init, gsf_output_bzip_init, + GSF_OUTPUT_TYPE) + +/** + * gsf_output_bzip_new : + * @sink : The underlying data source. + * @err : optionally NULL. + * + * Adds a reference to @sink. + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_bzip_new (GsfOutput *sink, GError **err) +{ +#ifdef HAVE_BZ2 + GsfOutputBzip *bzip; + + g_return_val_if_fail (GSF_IS_OUTPUT (sink), NULL); + + bzip = g_object_new (GSF_OUTPUT_BZIP_TYPE, NULL); + g_object_ref (G_OBJECT (sink)); + bzip->sink = sink; + + if (!init_bzip (bzip, err)) { + g_object_unref (G_OBJECT (bzip)); + return NULL; + } + + return GSF_OUTPUT (bzip); +#else + if (err) + *err = g_error_new (gsf_output_error_id (), 0, + "BZ2 support not enabled"); + return NULL; +#endif +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-bzip.h b/lib/libgsf-1.12.3/gsf/gsf-output-bzip.h new file mode 100644 index 0000000000..5a5f5530a9 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-bzip.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-bzip.h: wrapper to compress to bzipped output + * + * Copyright (C) 2003-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_BZIP_H +#define GSF_OUTPUT_BZIP_H + +#include "gsf-output.h" + +G_BEGIN_DECLS + +#define GSF_OUTPUT_BZIP_TYPE (gsf_output_bzip_get_type ()) +#define GSF_OUTPUT_BZIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_BZIP_TYPE, GsfOutputBzip)) +#define GSF_IS_OUTPUT_BZIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_BZIP_TYPE)) + +typedef struct _GsfOutputBzip GsfOutputBzip; + +GType gsf_output_bzip_get_type (void); +GsfOutput *gsf_output_bzip_new (GsfOutput *sink, GError **err); + +G_END_DECLS + +#endif /* GSF_OUTPUT_BZIP_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-csv.c b/lib/libgsf-1.12.3/gsf/gsf-output-csv.c new file mode 100644 index 0000000000..c8e4a16468 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-csv.c @@ -0,0 +1,352 @@ +/* + * gsf-output-csv.c: a GsfOutput to write .csv style files. + * + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include + +static GObjectClass *parent_class; + +enum { + PROP_0, + PROP_SINK, + PROP_QUOTE, + PROP_QUOTING_MODE, + PROP_QUOTING_TRIGGERS, + PROP_EOL, + PROP_SEPARATOR +}; + +static void +gsf_output_csv_finalize (GObject *obj) +{ + GsfOutputCsv *csv = (GsfOutputCsv *)obj; + + if (csv->sink != NULL) + g_object_unref (G_OBJECT (csv->sink)); + g_free (csv->quote); + g_free (csv->quoting_triggers); + g_free (csv->eol); + g_free (csv->separator); + g_string_free (csv->buf, TRUE); + + parent_class->finalize (obj); +} + +static gboolean +gsf_output_csv_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ + GsfOutputCsv *csv = GSF_OUTPUT_CSV (output); + return gsf_output_write (csv->sink, num_bytes, data); +} + +static gboolean +gsf_output_csv_seek (GsfOutput *output, + gsf_off_t offset, + GSeekType whence) +{ + GsfOutputCsv *csv = GSF_OUTPUT_CSV (output); + return gsf_output_seek (csv->sink, offset, whence); +} + +static gboolean +gsf_output_csv_close (G_GNUC_UNUSED GsfOutput *output) +{ + return TRUE; +} + +gboolean +gsf_output_csv_write_field (GsfOutputCsv *csv, char const *field, size_t len) +{ + gboolean quote; + gboolean ok; + char const *end; + + g_return_val_if_fail (GSF_IS_OUTPUT_CSV (csv), FALSE); + g_return_val_if_fail (field != NULL, FALSE); + + if (len == (size_t)-1) + len = strlen (field); + end = field + len; + + if (csv->fields_on_line && csv->separator_len) + g_string_append_len (csv->buf, + csv->separator, + csv->separator_len); + csv->fields_on_line = TRUE; + + switch (csv->quoting_mode) { + default: + case GSF_OUTPUT_CSV_QUOTING_MODE_NEVER: + quote = FALSE; + break; + case GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS: + quote = TRUE; + break; + case GSF_OUTPUT_CSV_QUOTING_MODE_AUTO: { + char const *p = field; + quote = FALSE; + while (p < end) { + gunichar c = g_utf8_get_char (p); + if (g_utf8_strchr (csv->quoting_triggers, -1, c)) { + quote = TRUE; + break; + } + p = g_utf8_next_char (p); + } + break; + } + } + + if (quote && csv->quote_len > 0) { + g_string_append_len (csv->buf, + csv->quote, + csv->quote_len); + + while (field < end) { + gunichar c = g_utf8_get_char (field); + if (g_utf8_strchr (csv->quote, -1, c)) + g_string_append_len (csv->buf, + csv->quote, + csv->quote_len); + g_string_append_unichar (csv->buf, c); + field = g_utf8_next_char (field); + } + + g_string_append_len (csv->buf, + csv->quote, + csv->quote_len); + } else + g_string_append_len (csv->buf, field, len); + + ok = gsf_output_write (csv->sink, csv->buf->len, csv->buf->str); + + g_string_truncate (csv->buf, 0); + + return ok; +} + +/* ------------------------------------------------------------------------- */ + +gboolean +gsf_output_csv_write_eol (GsfOutputCsv *csv) +{ + g_return_val_if_fail (GSF_IS_OUTPUT_CSV (csv), FALSE); + + csv->fields_on_line = FALSE; + return gsf_output_write (csv->sink, csv->eol_len, csv->eol); +} + +/* ------------------------------------------------------------------------- */ + +GType +gsf_output_csv_quoting_mode_get_type (void) +{ + static GType etype = 0; + if (etype == 0) { + static const GEnumValue values[] = { + { GSF_OUTPUT_CSV_QUOTING_MODE_NEVER, (char *)"GSF_OUTPUT_CSV_QUOTING_MODE_NEVER", (char *)"never" }, + { GSF_OUTPUT_CSV_QUOTING_MODE_AUTO, (char *)"GSF_OUTPUT_CSV_QUOTING_MODE_AUTO", (char *)"auto" }, + { GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS, (char *)"GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS", (char *)"always" }, + { 0, NULL, NULL } + }; + etype = g_enum_register_static ("GsfOutputCsvQuotingMode", values); + } + return etype; +} + +/* ------------------------------------------------------------------------- */ + +static void +gsf_output_csv_init (GObject *obj) +{ + GsfOutputCsv *csv = (GsfOutputCsv *)obj; + csv->quoting_triggers = g_strdup (""); + csv->eol = g_strdup ("\n"); + csv->buf = g_string_new (NULL); +} + +static void +gsf_output_csv_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GsfOutputCsv *csv = (GsfOutputCsv *)object; + + switch (property_id) { + case PROP_SINK: + g_value_set_object (value, csv->sink); + break; + case PROP_QUOTE: + g_value_set_string (value, csv->quote); + break; + case PROP_QUOTING_MODE: + g_value_set_enum (value, csv->quoting_mode); + break; + case PROP_QUOTING_TRIGGERS: + g_value_set_string (value, csv->quoting_triggers); + break; + case PROP_EOL: + g_value_set_string (value, csv->eol); + break; + case PROP_SEPARATOR: + g_value_set_string (value, csv->separator); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_csv_set_sink (GsfOutputCsv *csv, GsfOutput *sink) +{ + g_return_if_fail (GSF_IS_OUTPUT (sink)); + g_object_ref (sink); + if (csv->sink) + g_object_unref (csv->sink); + csv->sink = sink; +} + +static void +gsf_output_csv_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GsfOutputCsv *csv = (GsfOutputCsv *)object; + char *scopy; + + switch (property_id) { + case PROP_SINK: + gsf_output_csv_set_sink (csv, g_value_get_object (value)); + break; + case PROP_QUOTE: + scopy = g_strdup (g_value_get_string (value)); + g_free (csv->quote); + csv->quote = scopy; + csv->quote_len = scopy ? strlen (scopy) : 0; + break; + case PROP_QUOTING_MODE: + csv->quoting_mode = g_value_get_enum (value); + break; + case PROP_QUOTING_TRIGGERS: + scopy = g_strdup (g_value_get_string (value)); + g_free (csv->quoting_triggers); + csv->quoting_triggers = scopy ? scopy : g_strdup (""); + if (*csv->quoting_triggers) + csv->quoting_mode = GSF_OUTPUT_CSV_QUOTING_MODE_AUTO; + break; + case PROP_EOL: + scopy = g_strdup (g_value_get_string (value)); + g_free (csv->eol); + csv->eol = scopy ? scopy : g_strdup (""); + csv->eol_len = strlen (csv->eol); + break; + case PROP_SEPARATOR: + scopy = g_strdup (g_value_get_string (value)); + g_free (csv->separator); + csv->separator = scopy; + csv->separator_len = scopy ? strlen (scopy) : 0; + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_csv_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_csv_finalize; + gobject_class->set_property = gsf_output_csv_set_property; + gobject_class->get_property = gsf_output_csv_get_property; + output_class->Write = gsf_output_csv_write; + output_class->Seek = gsf_output_csv_seek; + output_class->Close = gsf_output_csv_close; + + g_object_class_install_property + (gobject_class, + PROP_SINK, + g_param_spec_object ("sink", "Sink", + "Where the compressed data is written.", + GSF_OUTPUT_TYPE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_QUOTE, + g_param_spec_string ("quote", "Quote", + "The string used for quoting fields.", + "\"", + GSF_PARAM_STATIC | + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_QUOTING_MODE, + g_param_spec_enum ("quoting-mode", + "Quoting Mode", + "When to quote fields.", + GSF_OUTPUT_CSV_QUOTING_MODE_TYPE, + GSF_OUTPUT_CSV_QUOTING_MODE_NEVER, + GSF_PARAM_STATIC | + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_QUOTING_TRIGGERS, + g_param_spec_string ("quoting-triggers", "Quoting Triggers", + "Characters that cause field quoting.", + NULL, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_SEPARATOR, + g_param_spec_string ("separator", "Separator", + "The field separator.", + ",", + GSF_PARAM_STATIC | + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE)); + g_object_class_install_property + (gobject_class, + PROP_EOL, + g_param_spec_string ("eol", "eol", + "The end-of-line marker.", + "\n", + GSF_PARAM_STATIC | + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE)); + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfOutputCsv, gsf_output_csv, + gsf_output_csv_class_init, gsf_output_csv_init, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-csv.h b/lib/libgsf-1.12.3/gsf/gsf-output-csv.h new file mode 100644 index 0000000000..b0c5e3350a --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-csv.h @@ -0,0 +1,70 @@ +/* + * gsf-output-csv.h: a GsfOutput to write .csv style files. + * + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_CSV_H +#define GSF_OUTPUT_CSV_H + +#include "gsf-output.h" + +G_BEGIN_DECLS + +typedef enum { + GSF_OUTPUT_CSV_QUOTING_MODE_NEVER, + GSF_OUTPUT_CSV_QUOTING_MODE_AUTO, + GSF_OUTPUT_CSV_QUOTING_MODE_ALWAYS +} GsfOutputCsvQuotingMode; +GType gsf_output_csv_quoting_mode_get_type (void); +#define GSF_OUTPUT_CSV_QUOTING_MODE_TYPE (gsf_output_csv_quoting_mode_get_type ()) + +typedef struct { + GsfOutput output; + + GsfOutput *sink; + + char *quote; + size_t quote_len; + GsfOutputCsvQuotingMode quoting_mode; + char *quoting_triggers; + + char *eol; + size_t eol_len; + char *separator; + size_t separator_len; + gboolean fields_on_line; + + GString *buf; +} GsfOutputCsv; + +#define GSF_OUTPUT_CSV_TYPE (gsf_output_csv_get_type ()) +#define GSF_OUTPUT_CSV(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_CSV_TYPE, GsfOutputCsv)) +#define GSF_IS_OUTPUT_CSV(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_CSV_TYPE)) +GType gsf_output_csv_get_type (void); +gboolean gsf_output_csv_write_field (GsfOutputCsv *csv, + char const *field, + size_t len); +gboolean gsf_output_csv_write_eol (GsfOutputCsv *csv); + +typedef struct { + GsfOutputClass output_class; +} GsfOutputCsvClass; + +G_END_DECLS + +#endif /* GSF_OUTPUT_CSV_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-gzip.c b/lib/libgsf-1.12.3/gsf/gsf-output-gzip.c new file mode 100644 index 0000000000..39d7e78509 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-gzip.c @@ -0,0 +1,401 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-gzip.c: wrapper to compress to gzipped output. See rfc1952. + * + * Copyright (C) 2002-2004 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +static GObjectClass *parent_class; + +struct _GsfOutputGZip { + GsfOutput output; + + GsfOutput *sink; /* compressed data */ + gboolean raw; /* No header and no trailer. */ + + z_stream stream; + uLong crc; /* crc32 of uncompressed data */ + size_t isize; + + guint8 *buf; + size_t buf_size; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputGZipClass; + +enum { + PROP_0, + PROP_RAW, + PROP_SINK +}; + + +/* gzip flag byte */ +#define GZIP_ORIGINAL_NAME 0x08 /* the original is stored */ + +static gboolean +init_gzip (GsfOutputGZip *gzip) +{ + int ret; + + ret = deflateInit2 (&gzip->stream, Z_DEFAULT_COMPRESSION, + Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, + Z_DEFAULT_STRATEGY); + if (ret != Z_OK) + return FALSE; + + if (!gzip->buf) { + gzip->buf_size = 0x100; + gzip->buf = g_new (guint8, gzip->buf_size); + } + gzip->stream.next_out = gzip->buf; + gzip->stream.avail_out = gzip->buf_size; + + return TRUE; +} + +static gboolean +gzip_output_header (GsfOutputGZip *gzip) +{ + guint8 buf[3 + 1 + 4 + 2]; + static guint8 const gzip_signature[] = { 0x1f, 0x8b, 0x08 } ; + time_t mtime = time (NULL); + char const *name = gsf_output_name (gzip->sink); + /* FIXME: What to do about gz extension ... ? */ + int nlen = 0; /* name ? strlen (name) : 0; */ + gboolean ret; + + memset (buf, 0, sizeof buf); + memcpy (buf, gzip_signature, 3); + if (nlen > 0) + buf[3] = GZIP_ORIGINAL_NAME; + GSF_LE_SET_GUINT32 (buf + 4, (guint32) mtime); + buf[9] = 3; /* UNIX */ + ret = gsf_output_write (gzip->sink, sizeof buf, buf); + if (ret && name && nlen > 0) + ret = gsf_output_write (gzip->sink, nlen, name); + + return ret; +} + +/** + * gsf_output_gzip_new : + * @sink : The underlying data source. + * @err : optionally NULL. + * + * Adds a reference to @sink. + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_gzip_new (GsfOutput *sink, GError **err) +{ + GsfOutput *output; + const GError *con_err; + + g_return_val_if_fail (GSF_IS_OUTPUT (sink), NULL); + + output = g_object_new (GSF_OUTPUT_GZIP_TYPE, "sink", sink, NULL); + con_err = gsf_output_error (output); + + if (con_err) { + if (err) + *err = g_error_copy (con_err); + g_object_unref (output); + return NULL; + } + + return output; +} + +static void +gsf_output_gzip_finalize (GObject *obj) +{ + GsfOutputGZip *gzip = (GsfOutputGZip *)obj; + + if (gzip->sink != NULL) { + g_object_unref (G_OBJECT (gzip->sink)); + gzip->sink = NULL; + } + + g_free (gzip->buf); + + /* FIXME: check for error? */ + deflateEnd (&gzip->stream); + + parent_class->finalize (obj); +} + +static gboolean +gzip_output_block (GsfOutputGZip *gzip) +{ + size_t num_bytes = gzip->buf_size - gzip->stream.avail_out; + + if (!gsf_output_write (gzip->sink, num_bytes, gzip->buf)) { + gsf_output_set_error (GSF_OUTPUT (gzip), 0, + "Failed to write"); + return FALSE; + } + gzip->stream.next_out = gzip->buf; + gzip->stream.avail_out = gzip->buf_size; + + return TRUE; +} + +static gboolean +gzip_flush (GsfOutputGZip *gzip) +{ + int zret; + + do { + zret = deflate (&gzip->stream, Z_FINISH); + if (zret == Z_OK) { + /* In this case Z_OK means more buffer space + needed */ + if (!gzip_output_block (gzip)) + return FALSE; + } + } while (zret == Z_OK); + if (zret != Z_STREAM_END) { + gsf_output_set_error (GSF_OUTPUT (gzip), 0, + "Unexpected compression failure"); + g_warning ("Unexpected error code %d from zlib during compression.", + zret); + return FALSE; + } + if (!gzip_output_block (gzip)) + return FALSE; + + return TRUE; +} + +static gboolean +gsf_output_gzip_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ + GsfOutputGZip *gzip = GSF_OUTPUT_GZIP (output); + + g_return_val_if_fail (data, FALSE); + + gzip->stream.next_in = (unsigned char *) data; + gzip->stream.avail_in = num_bytes; + + while (gzip->stream.avail_in > 0) { + int zret; + if (gzip->stream.avail_out == 0) { + if (!gzip_output_block (gzip)) + return FALSE; + } + + zret = deflate (&gzip->stream, Z_NO_FLUSH); + if (zret != Z_OK) { + gsf_output_set_error (output, 0, + "Unexpected compression failure"); + g_warning ("Unexpected error code %d from zlib during compression.", + zret); + return FALSE; + } + } + + gzip->crc = crc32 (gzip->crc, data, num_bytes); + gzip->isize += num_bytes; + + if (gzip->stream.avail_out == 0) { + if (!gzip_output_block (gzip)) + return FALSE; + } + + return TRUE; +} + +static gboolean +gsf_output_gzip_seek (G_GNUC_UNUSED GsfOutput *output, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static gboolean +gsf_output_gzip_close (GsfOutput *output) +{ + if (!gsf_output_error (output)) { + GsfOutputGZip *gzip = GSF_OUTPUT_GZIP (output); + + if (!gzip_flush (gzip)) + return FALSE; + + if (!gzip->raw) { + guint8 buf[8]; + + GSF_LE_SET_GUINT32 (buf, gzip->crc); + GSF_LE_SET_GUINT32 (buf + 4, gzip->isize); + if (!gsf_output_write (gzip->sink, 8, buf)) + return FALSE; + } + } + + return TRUE; +} + +static void +gsf_output_gzip_init (GObject *obj) +{ + GsfOutputGZip *gzip = GSF_OUTPUT_GZIP (obj); + + gzip->sink = NULL; + gzip->stream.zalloc = (alloc_func)0; + gzip->stream.zfree = (free_func)0; + gzip->stream.opaque = (voidpf)0; + gzip->stream.next_in = Z_NULL; + gzip->stream.next_out = Z_NULL; + gzip->stream.avail_in = gzip->stream.avail_out = 0; + gzip->crc = crc32 (0L, Z_NULL, 0); + gzip->isize = 0; + gzip->buf = NULL; + gzip->buf_size = 0; +} + +static void +gsf_output_gzip_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GsfOutputGZip *gzip = (GsfOutputGZip *)object; + + switch (property_id) { + case PROP_RAW: + g_value_set_boolean (value, gzip->raw); + break; + case PROP_SINK: + g_value_set_object (value, gzip->sink); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_gzip_set_sink (GsfOutputGZip *gzip, GsfOutput *sink) +{ + if (sink) + g_object_ref (GSF_OUTPUT (sink)); + if (gzip->sink) + g_object_unref (gzip->sink); + gzip->sink = sink; +} + +static void +gsf_output_gzip_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GsfOutputGZip *gzip = (GsfOutputGZip *)object; + + switch (property_id) { + case PROP_RAW: + gzip->raw = g_value_get_boolean (value); + break; + case PROP_SINK: + gsf_output_gzip_set_sink (gzip, g_value_get_object (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static GObject* +gsf_output_gzip_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GsfOutputGZip *gzip; + + gzip = (GsfOutputGZip *)(parent_class->constructor (type, + n_construct_properties, + construct_params)); + + if (!gzip->sink) + gsf_output_set_error (GSF_OUTPUT (gzip), + 0, + "NULL sink"); + else if (!init_gzip (gzip)) + gsf_output_set_error (GSF_OUTPUT (gzip), + 0, + "Failed to initialize zlib structure"); + else if (!gzip->raw && !gzip_output_header (gzip)) + gsf_output_set_error (GSF_OUTPUT (gzip), + 0, + "Failed to write gzip header"); + + return (GObject *)gzip; +} + +static void +gsf_output_gzip_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->constructor = gsf_output_gzip_constructor; + gobject_class->finalize = gsf_output_gzip_finalize; + gobject_class->set_property = gsf_output_gzip_set_property; + gobject_class->get_property = gsf_output_gzip_get_property; + output_class->Write = gsf_output_gzip_write; + output_class->Seek = gsf_output_gzip_seek; + output_class->Close = gsf_output_gzip_close; + + g_object_class_install_property + (gobject_class, + PROP_RAW, + g_param_spec_boolean ("raw", "Raw", + "Whether to write compressed data with no header/tailer.", + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_SINK, + g_param_spec_object ("sink", "Sink", + "Where the compressed data is written.", + GSF_OUTPUT_TYPE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfOutputGZip, gsf_output_gzip, + gsf_output_gzip_class_init, gsf_output_gzip_init, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-gzip.h b/lib/libgsf-1.12.3/gsf/gsf-output-gzip.h new file mode 100644 index 0000000000..0a7b1a8081 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-gzip.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-gzip.h: wrapper to compress to gzipped output + * + * Copyright (C) 2002-2004 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_GZIP_H +#define GSF_OUTPUT_GZIP_H + +#include "gsf-output.h" + +G_BEGIN_DECLS + +#define GSF_OUTPUT_GZIP_TYPE (gsf_output_gzip_get_type ()) +#define GSF_OUTPUT_GZIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_GZIP_TYPE, GsfOutputGZip)) +#define GSF_IS_OUTPUT_GZIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_GZIP_TYPE)) + +typedef struct _GsfOutputGZip GsfOutputGZip; + +GType gsf_output_gzip_get_type (void); +GsfOutput *gsf_output_gzip_new (GsfOutput *sink, GError **err); + +G_END_DECLS + +#endif /* GSF_OUTPUT_GZIP_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-iconv.c b/lib/libgsf-1.12.3/gsf/gsf-output-iconv.c new file mode 100644 index 0000000000..fa53eabedb --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-iconv.c @@ -0,0 +1,320 @@ +/* + * gsf-output-iconv.c: wrapper to convert character sets. + * + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include + +#define BUF_SIZE 0x400 + +static GObjectClass *parent_class; + +struct _GsfOutputIconv { + GsfOutput output; + + GsfOutput *sink; + char *input_charset; + char *output_charset; + char *fallback; + + guint8 *buf; + size_t buf_len; +}; + +enum { + PROP_0, + PROP_SINK, + PROP_INPUT_CHARSET, + PROP_OUTPUT_CHARSET, + PROP_FALLBACK +}; + +/** + * gsf_output_iconv_new : + * @sink : The underlying data source. + * @dst : The target character set. + * @src : The source character set. + * + * Adds a reference to @sink. + * + * Returns a new GsfOutput object or NULL. + **/ +GsfOutput * +gsf_output_iconv_new (GsfOutput *sink, char const *dst, char const *src) +{ + GError *error = NULL; + g_return_val_if_fail (GSF_IS_OUTPUT (sink), NULL); + + if (!dst) dst = "UTF-8"; + if (!src) src = "UTF-8"; + g_free (g_convert ("", 0, dst, src, NULL, NULL, &error)); + + if (error) { + g_error_free (error); + return NULL; + } + + return g_object_new (GSF_OUTPUT_ICONV_TYPE, + "sink", sink, + "input-charset", src, + "output-charset", dst, + NULL); +} + +static void +gsf_output_iconv_finalize (GObject *obj) +{ + GsfOutputIconv *ic = (GsfOutputIconv *)obj; + + if (ic->sink != NULL) + g_object_unref (G_OBJECT (ic->sink)); + g_free (ic->input_charset); + g_free (ic->output_charset); + g_free (ic->buf); + + parent_class->finalize (obj); +} + +static gboolean +iconv_flush (GsfOutputIconv *ic, gboolean must_empty) +{ + if (gsf_output_error (GSF_OUTPUT (ic))) + return FALSE; + + if (ic->buf_len > 0) { + gsize bytes_read, bytes_written; + gboolean ok; + char *data = g_convert_with_fallback (ic->buf, ic->buf_len, + ic->output_charset, + ic->input_charset, + ic->fallback, + &bytes_read, + &bytes_written, + NULL); + if (data == NULL || bytes_read <= 0) { + gsf_output_set_error (GSF_OUTPUT (ic), + 0, + "Failed to convert string"); + ok = FALSE; + } else { + ic->buf_len -= bytes_read; + if (ic->buf_len) + g_memmove (ic->buf, ic->buf + ic->buf_len, ic->buf_len); + + ok = gsf_output_write (ic->sink, bytes_written, data); + if (!ok) { + gsf_output_set_error (GSF_OUTPUT (ic), + 0, + "Failed to write"); + } + } + + g_free (data); + return ok && (!must_empty || ic->buf_len == 0); + } else + return TRUE; +} + +static gboolean +gsf_output_iconv_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ + GsfOutputIconv *ic = GSF_OUTPUT_ICONV (output); + + g_return_val_if_fail (data, FALSE); + + while (num_bytes > 0) { + if (gsf_output_error (output)) + return FALSE; + if (ic->buf_len == BUF_SIZE) + iconv_flush (ic, FALSE); + else { + size_t count = MIN (BUF_SIZE - ic->buf_len, num_bytes); + memcpy (ic->buf + ic->buf_len, data, count); + ic->buf_len += count; + num_bytes -= count; + data += count; + } + } + + return TRUE; +} + +static gboolean +gsf_output_iconv_seek (G_GNUC_UNUSED GsfOutput *output, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static gboolean +gsf_output_iconv_close (GsfOutput *output) +{ + if (!gsf_output_error (output)) { + GsfOutputIconv *ic = GSF_OUTPUT_ICONV (output); + + if (!iconv_flush (ic, TRUE)) + return FALSE; + } + + return TRUE; +} + +static void +gsf_output_iconv_init (GObject *obj) +{ + GsfOutputIconv *ic = GSF_OUTPUT_ICONV (obj); + + ic->buf = g_malloc (BUF_SIZE); + ic->buf_len = 0; +} + +static void +gsf_output_iconv_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GsfOutputIconv *ic = (GsfOutputIconv *)object; + + switch (property_id) { + case PROP_SINK: + g_value_set_object (value, ic->sink); + break; + case PROP_INPUT_CHARSET: + g_value_set_string (value, ic->input_charset); + break; + case PROP_OUTPUT_CHARSET: + g_value_set_string (value, ic->output_charset); + break; + case PROP_FALLBACK: + g_value_set_string (value, ic->fallback); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_iconv_set_sink (GsfOutputIconv *ic, GsfOutput *sink) +{ + g_return_if_fail (GSF_IS_OUTPUT (sink)); + g_object_ref (sink); + if (ic->sink) + g_object_unref (ic->sink); + ic->sink = sink; +} + +static void +gsf_output_iconv_set_property (GObject *object, + guint property_id, + GValue const *value, + GParamSpec *pspec) +{ + GsfOutputIconv *ic = (GsfOutputIconv *)object; + char *scopy; + + switch (property_id) { + case PROP_SINK: + gsf_output_iconv_set_sink (ic, g_value_get_object (value)); + break; + case PROP_INPUT_CHARSET: + ic->input_charset = g_strdup (g_value_get_string (value)); + break; + case PROP_OUTPUT_CHARSET: + ic->output_charset = g_strdup (g_value_get_string (value)); + break; + case PROP_FALLBACK: + scopy = g_strdup (g_value_get_string (value)); + g_free (ic->fallback); + ic->fallback = scopy; + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_iconv_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_iconv_finalize; + gobject_class->set_property = gsf_output_iconv_set_property; + gobject_class->get_property = gsf_output_iconv_get_property; + output_class->Write = gsf_output_iconv_write; + output_class->Seek = gsf_output_iconv_seek; + output_class->Close = gsf_output_iconv_close; + + g_object_class_install_property + (gobject_class, + PROP_SINK, + g_param_spec_object ("sink", "Sink", + "Where the converted data is written.", + GSF_OUTPUT_TYPE, + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_INPUT_CHARSET, + g_param_spec_string ("input-charset", "Input Charset", + "The character set to convert from.", + "UTF-8", + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property + (gobject_class, + PROP_OUTPUT_CHARSET, + g_param_spec_string ("output-charset", "Output Charset", + "The character set to convert to.", + "UTF-8", + GSF_PARAM_STATIC | + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + /** + * GsfOutputIconv:fallback: + * + * Either NULL or a UTF-8 string (representable in the target encoding) + * to convert and output in place of characters that cannot be represented + * in the target encoding. NULL means use \u1234 or \U12345678 format. + */ + g_object_class_install_property + (gobject_class, + PROP_FALLBACK, + g_param_spec_string ("fallback", "Fallback", + "The string to use for invalid characters.", + NULL, + GSF_PARAM_STATIC | + G_PARAM_READWRITE)); + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfOutputIconv, gsf_output_iconv, + gsf_output_iconv_class_init, gsf_output_iconv_init, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-iconv.h b/lib/libgsf-1.12.3/gsf/gsf-output-iconv.h new file mode 100644 index 0000000000..621a74ffed --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-iconv.h @@ -0,0 +1,43 @@ +/* + * gsf-output-iconv.h: wrapper to convert character sets. + * + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_ICONV_H +#define GSF_OUTPUT_ICONV_H + +#include "gsf-output.h" + +G_BEGIN_DECLS + +typedef struct { + GsfOutputClass output_class; +} GsfOutputIconvClass; + +#define GSF_OUTPUT_ICONV_TYPE (gsf_output_iconv_get_type ()) +#define GSF_OUTPUT_ICONV(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_ICONV_TYPE, GsfOutputIconv)) +#define GSF_IS_OUTPUT_ICONV(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_ICONV_TYPE)) + +typedef struct _GsfOutputIconv GsfOutputIconv; + +GType gsf_output_iconv_get_type (void); +GsfOutput *gsf_output_iconv_new (GsfOutput *sink, char const *dst, char const *src); + +G_END_DECLS + +#endif /* GSF_OUTPUT_ICONV_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-impl.h b/lib/libgsf-1.12.3/gsf/gsf-output-impl.h new file mode 100644 index 0000000000..ec159c86f1 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-impl.h @@ -0,0 +1,38 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-impl.h: interface for storing data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_IMPL_H +#define GSF_OUTPUT_IMPL_H + +#include +#include +#include + +G_BEGIN_DECLS + +/* protected */ +gboolean gsf_output_set_name (GsfOutput *output, char const *name); +gboolean gsf_output_set_name_from_filename (GsfOutput *output, char const *filename); +gboolean gsf_output_set_container (GsfOutput *output, GsfOutfile *container); + +G_END_DECLS + +#endif /* GSF_OUTPUT_IMPL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-iochannel.c b/lib/libgsf-1.12.3/gsf/gsf-output-iochannel.c new file mode 100644 index 0000000000..f781f6c716 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-iochannel.c @@ -0,0 +1,130 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-iochannel.c + * + * Copyright (C) 2002-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ +#include +#include +#include +#include + +static GsfOutputClass *parent_class; + +struct _GsfOutputIOChannel { + GsfOutput output; + GIOChannel * channel; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputIOChannelClass; + +/** + * gsf_output_iochannel_new : + * @channel: A #GIOChannel + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_iochannel_new (GIOChannel *channel) +{ + GsfOutputIOChannel *output = NULL; + + g_return_val_if_fail (channel != NULL, NULL); + + output = g_object_new (GSF_OUTPUT_IOCHANNEL_TYPE, NULL); + output->channel = channel; + return GSF_OUTPUT (output); +} + +static gboolean +gsf_output_iochannel_close (GsfOutput *output) +{ + g_io_channel_shutdown (GSF_OUTPUT_IOCHANNEL (output)->channel, TRUE, NULL); + + if (parent_class->Close) + parent_class->Close (output); + + return TRUE; +} + +static void +gsf_output_iochannel_finalize (GObject *obj) +{ + g_io_channel_unref (GSF_OUTPUT_IOCHANNEL (obj)->channel); + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static gboolean +gsf_output_iochannel_seek (GsfOutput *output, gsf_off_t offset, + GSeekType whence) +{ + GsfOutputIOChannel *io = GSF_OUTPUT_IOCHANNEL (output); + GIOStatus status = G_IO_STATUS_NORMAL; + + status = g_io_channel_seek_position (io->channel, offset, whence, NULL); + if (status == G_IO_STATUS_NORMAL) + return TRUE; + + gsf_output_set_error (output, status, " "); + return FALSE; +} + +static gboolean +gsf_output_iochannel_write (GsfOutput *output, + size_t num_bytes, + guint8 const *buffer) +{ + GsfOutputIOChannel *io = GSF_OUTPUT_IOCHANNEL (output); + GIOStatus status = G_IO_STATUS_NORMAL; + size_t bytes_written = 0, total_written = 0; + + g_return_val_if_fail (io != NULL, FALSE); + + while ((status == G_IO_STATUS_NORMAL) && (total_written < num_bytes)) { + status = g_io_channel_write_chars (io->channel, (const gchar *)(buffer + total_written), + num_bytes - total_written, &bytes_written, NULL); + total_written += bytes_written; + } + + return (status == G_IO_STATUS_NORMAL && total_written == num_bytes); +} + +static void +gsf_output_iochannel_init (GObject *obj) +{ + GsfOutputIOChannel *io = GSF_OUTPUT_IOCHANNEL (obj); + + io->channel = NULL; +} + +static void +gsf_output_iochannel_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_iochannel_finalize; + output_class->Close = gsf_output_iochannel_close; + output_class->Seek = gsf_output_iochannel_seek; + output_class->Write = gsf_output_iochannel_write; + + parent_class = GSF_OUTPUT_CLASS (g_type_class_peek_parent (gobject_class)); +} + +GSF_CLASS (GsfOutputIOChannel, gsf_output_iochannel, + gsf_output_iochannel_class_init, gsf_output_iochannel_init, GSF_OUTPUT_TYPE) diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-iochannel.h b/lib/libgsf-1.12.3/gsf/gsf-output-iochannel.h new file mode 100644 index 0000000000..db13b116a3 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-iochannel.h @@ -0,0 +1,40 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-iochannel.h + * + * Copyright (C) 2002-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_IOCHANNEL_H +#define GSF_OUTPUT_IOCHANNEL_H + +#include "gsf-output.h" + +G_BEGIN_DECLS + +#define GSF_OUTPUT_IOCHANNEL_TYPE (gsf_output_iochannel_get_type ()) +#define GSF_OUTPUT_IOCHANNEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_IOCHANNEL_TYPE, GsfOutputIOChannel)) +#define GSF_IS_OUTPUT_IOCHANNEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_IOCHANNEL_TYPE)) + +typedef struct _GsfOutputIOChannel GsfOutputIOChannel; + +GType gsf_output_iochannel_get_type (void); +GsfOutput *gsf_output_iochannel_new (GIOChannel * channel); + +G_END_DECLS + +#endif /* GSF_OUTPUT_IOCHANNEL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-memory.c b/lib/libgsf-1.12.3/gsf/gsf-output-memory.c new file mode 100644 index 0000000000..8a634bb15f --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-memory.c @@ -0,0 +1,200 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-memory.c: + * + * Copyright (C) 2002-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ +#include +#include +#include +#include +#include + +#define MIN_BLOCK 512 +#define MAX_STEP (MIN_BLOCK * 128) + +static GsfOutputClass *parent_class; + +struct _GsfOutputMemory { + GsfOutput output; + guint8 *buffer; + size_t capacity; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputMemoryClass; + +/** + * gsf_output_memory_new : + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_memory_new (void) +{ + return g_object_new (GSF_OUTPUT_MEMORY_TYPE, NULL); +} + +static gboolean +gsf_output_memory_close (GsfOutput *output) +{ + return (parent_class->Close == NULL) || + parent_class->Close (output); +} + +static void +gsf_output_memory_finalize (GObject *obj) +{ + GsfOutputMemory *mem = GSF_OUTPUT_MEMORY (obj); + + g_free (mem->buffer); + mem->buffer = NULL; + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static gboolean +gsf_output_memory_seek (G_GNUC_UNUSED GsfOutput *output, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + /* let parent implementation handle maneuvering cur_offset */ + return TRUE; +} + +static gboolean +gsf_output_memory_expand (GsfOutputMemory *mem, gsf_off_t needed) +{ + gsf_off_t capacity = MAX (mem->capacity, MIN_BLOCK); + gsize lcapacity; + + /* If we need >= MAX_STEP, align to a next multiple of MAX_STEP. + * Since MAX_STEP is probably a power of two, this computation + * should reduce to "dec, shr, inc, shl", which is probably + * quicker then branching. + */ + if (needed < MAX_STEP) + while (capacity < needed) + capacity *= 2; + else + capacity = ((needed - 1) / MAX_STEP + 1) * MAX_STEP; + + /* Check for overflow: g_renew() casts its parameters to gsize. */ + lcapacity = capacity; + if ((gsf_off_t) lcapacity != capacity || capacity < 0) { + g_warning ("overflow in gsf_output_memory_expand"); + return FALSE; + } + mem->buffer = g_renew (guint8, mem->buffer, lcapacity); + mem->capacity = capacity; + + return TRUE; +} + +static gboolean +gsf_output_memory_write (GsfOutput *output, + size_t num_bytes, + guint8 const *buffer) +{ + GsfOutputMemory *mem = GSF_OUTPUT_MEMORY (output); + + g_return_val_if_fail (mem != NULL, FALSE); + + if (!mem->buffer) { + mem->buffer = g_new (guint8, MIN_BLOCK); + mem->capacity = MIN_BLOCK; + } + if (num_bytes + output->cur_offset > mem->capacity) { + if (!gsf_output_memory_expand (mem, output->cur_offset + num_bytes)) + return FALSE; + } + + memcpy (mem->buffer + output->cur_offset, buffer, num_bytes); + return TRUE; +} + +static gsf_off_t gsf_output_memory_vprintf (GsfOutput *output, + char const *format, va_list args) G_GNUC_PRINTF (2, 0); + +static gsf_off_t +gsf_output_memory_vprintf (GsfOutput *output, char const *format, va_list args) +{ + GsfOutputMemory *mem = (GsfOutputMemory *)output; + + if (mem->buffer) { + va_list args2; + gsf_off_t len; + + /* + * We need to make a copy as args will become unusable after + * the g_vsnprintf call. + */ + G_VA_COPY (args2, args); + + len = + g_vsnprintf (mem->buffer + output->cur_offset, + mem->capacity - output->cur_offset, + format, args); + + if (len < mem->capacity - output->cur_offset) + return len; /* There was sufficient space */ + + return parent_class->Vprintf (output, format, args2); + } + return parent_class->Vprintf (output, format, args); +} + +static void +gsf_output_memory_init (GObject *obj) +{ + GsfOutputMemory *mem = GSF_OUTPUT_MEMORY (obj); + + mem->buffer = NULL; + mem->capacity = 0; +} + +static void +gsf_output_memory_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_memory_finalize; + output_class->Close = gsf_output_memory_close; + output_class->Seek = gsf_output_memory_seek; + output_class->Write = gsf_output_memory_write; + output_class->Vprintf = gsf_output_memory_vprintf; + + parent_class = GSF_OUTPUT_CLASS (g_type_class_peek_parent (gobject_class)); +} + +/** + * gsf_output_memory_get_bytes : + * @mem : the output device. + * + * Returns: The data that has been written to @mem, or %null + **/ +const guint8 * +gsf_output_memory_get_bytes (GsfOutputMemory * mem) +{ + g_return_val_if_fail (mem != NULL, NULL); + return mem->buffer; +} + +GSF_CLASS (GsfOutputMemory, gsf_output_memory, + gsf_output_memory_class_init, gsf_output_memory_init, GSF_OUTPUT_TYPE) + diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-memory.h b/lib/libgsf-1.12.3/gsf/gsf-output-memory.h new file mode 100644 index 0000000000..2cc78fffc7 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-memory.h @@ -0,0 +1,41 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-memory.h + * + * Copyright (C) 2002-2004 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_MEMORY_H +#define GSF_OUTPUT_MEMORY_H + +#include "gsf-output.h" + +G_BEGIN_DECLS + +#define GSF_OUTPUT_MEMORY_TYPE (gsf_output_memory_get_type ()) +#define GSF_OUTPUT_MEMORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_MEMORY_TYPE, GsfOutputMemory)) +#define GSF_IS_OUTPUT_MEMORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_MEMORY_TYPE)) + +typedef struct _GsfOutputMemory GsfOutputMemory; + +GType gsf_output_memory_get_type (void); +GsfOutput *gsf_output_memory_new (void); +const guint8* gsf_output_memory_get_bytes (GsfOutputMemory * mem); + +G_END_DECLS + +#endif /* GSF_OUTPUT_MEMORY_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-stdio.c b/lib/libgsf-1.12.3/gsf/gsf-output-stdio.c new file mode 100644 index 0000000000..6af7023584 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-stdio.c @@ -0,0 +1,574 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-stdio.c: stdio based output + * + * Copyright (C) 2002-2005 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#ifdef HAVE_GLIB26 +#include +#else +#include "glib24_26-compat.h" +#endif // HAVE_GLIB26 + +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include + +#ifdef G_OS_WIN32 +#include +#include +#include +#ifdef HAVE_IO_H +#include +#endif +#endif /* G_OS_WIN32 */ + +#ifndef W_OK +#define W_OK 2 +#endif + +static GObjectClass *parent_class; + +struct _GsfOutputStdio { + GsfOutput output; + + FILE *file; + char *real_filename, *temp_filename; + gboolean create_backup_copy, keep_open; + struct stat st; +}; + +typedef struct { + GsfOutputClass output_class; +} GsfOutputStdioClass; + +static int +rename_wrapper (char const *oldfilename, char const *newfilename) +{ + int result = g_rename (oldfilename, newfilename); +#ifdef G_OS_WIN32 + if (result) { + /* Win32's rename does not unlink the target. */ + (void)g_unlink (newfilename); + result = g_rename (oldfilename, newfilename); + } +#endif + return result; +} + +static int +chmod_wrapper (const char *filename, mode_t mode) +{ +#ifdef HAVE_G_CHMOD + return g_chmod (filename, mode); +#else + return chmod (filename, mode); +#endif +} + +static int +access_wrapper (char const *filename, int what) +{ +#ifdef HAVE_G_ACCESS + return g_access (filename, what); +#else + return access (filename, what); +#endif +} + +#define GSF_MAX_LINK_LEVEL 256 + +/* Calls g_file_read_link() until we find a real filename. */ +static char * +follow_symlinks (char const *filename, GError **error) +{ + gchar *followed_filename, *link; + gint link_count = 0; + + g_return_val_if_fail (filename != NULL, NULL); + + followed_filename = g_strdup (filename); + + while ((link = g_file_read_link (followed_filename, NULL)) != NULL && + ++link_count <= GSF_MAX_LINK_LEVEL) { + if (g_path_is_absolute (link)) { + g_free (followed_filename); + followed_filename = link; + } else { + /* If the linkname is not an absolute path name, append + * it to the directory name of the followed filename. E.g. + * we may have /foo/bar/baz.lnk -> eek.txt, which really + * is /foo/bar/eek.txt. */ + gchar *dir = g_path_get_dirname (followed_filename); + g_free (followed_filename); + followed_filename = g_build_filename (dir, link, NULL); + g_free (dir); + g_free (link); + } + } + + if (link == NULL) + return followed_filename; + + /* Too many symlinks */ + if (error != NULL) { +#ifdef ELOOP + int err = ELOOP; +#else + /* We have links, but not ELOOP. Very strange. */ + int err = EINVAL; +#endif + *error = g_error_new_literal (gsf_output_error_id (), err, + g_strerror (err)); + } + g_free (followed_filename); + return NULL; +} + +static gboolean +close_file_helper (GsfOutputStdio *stdio, gboolean seterr) +{ + gboolean res = (0 == fclose (stdio->file)); + stdio->file = NULL; + if (!res && seterr) + gsf_output_set_error (GSF_OUTPUT (stdio), errno, + "Failed to close file: %s", + g_strerror (errno)); + return res; +} + +static gboolean +unlink_file_helper (GsfOutputStdio *stdio) +{ + if (!stdio->temp_filename) + return TRUE; + + if (g_unlink (stdio->temp_filename) == 0) { + g_free (stdio->temp_filename); + stdio->temp_filename = NULL; + return TRUE; + } + + return FALSE; +} + +static gboolean +gsf_output_stdio_close (GsfOutput *output) +{ + GsfOutputStdio *stdio = GSF_OUTPUT_STDIO (output); + gboolean res; + char *backup_filename = NULL; + + if (stdio->file == NULL) + return FALSE; + + if (gsf_output_error (output)) { + res = TRUE; + if (!stdio->keep_open && !close_file_helper (stdio, FALSE)) + res = FALSE; + + if (!unlink_file_helper (stdio)) + res = FALSE; + + return res; + } + + if (stdio->keep_open) { + gboolean res = (0 == fflush (stdio->file)); + if (!res) + gsf_output_set_error (output, errno, + "Failed to flush."); + stdio->file = NULL; + return res; + } + + res = close_file_helper (stdio, TRUE); + + /* short circuit our when dealing with raw FILE */ + if (!stdio->real_filename) + return res; + if (!res) { + unlink_file_helper (stdio); + return FALSE; + } + + /* Move the original file to a backup */ + if (stdio->create_backup_copy) { + gint result; + backup_filename = g_strconcat (stdio->real_filename, ".bak", NULL); + result = rename_wrapper (stdio->real_filename, backup_filename); + if (result != 0) { + char *utf8name = g_filename_display_name (backup_filename); + gsf_output_set_error (output, errno, + "Could not backup the original as %s.", + utf8name); + g_free (utf8name); + g_free (backup_filename); + g_unlink (stdio->temp_filename); + return FALSE; + } + } + + /* Move the temp file to the original file */ + if (rename_wrapper (stdio->temp_filename, stdio->real_filename) != 0) { + gint saved_errno = errno; + if (backup_filename != NULL && + rename_wrapper (backup_filename, stdio->real_filename) != 0) + saved_errno = errno; + res = gsf_output_set_error (output, + saved_errno, + g_strerror (saved_errno)); + } else { + /* Restore permissions. There is not much error checking we + * can do here, I'm afraid. The final data is saved anyways. + * Note the order: mode, uid+gid, gid, uid, mode. + */ + chmod_wrapper (stdio->real_filename, stdio->st.st_mode); +#ifdef HAVE_CHOWN + if (chown (stdio->real_filename, + stdio->st.st_uid, + stdio->st.st_gid)) { + /* We cannot set both. Maybe we can set one. */ + chown (stdio->real_filename, -1, stdio->st.st_gid); + chown (stdio->real_filename, stdio->st.st_uid, -1); + } + chmod_wrapper (stdio->real_filename, stdio->st.st_mode); +#endif + } + + g_free (backup_filename); + + return res; +} + +static void +gsf_output_stdio_finalize (GObject *obj) +{ + GsfOutput *output = (GsfOutput *)obj; + GsfOutputStdio *stdio = GSF_OUTPUT_STDIO (output); + + if (!gsf_output_is_closed (output)) + gsf_output_close (output); + + g_free (stdio->real_filename); + stdio->real_filename = NULL; + g_free (stdio->temp_filename); + stdio->temp_filename = NULL; + + parent_class->finalize (obj); +} + +static gboolean +gsf_output_stdio_seek (GsfOutput *output, gsf_off_t offset, GSeekType whence) +{ + GsfOutputStdio const *stdio = GSF_OUTPUT_STDIO (output); + int stdio_whence = 0; /* make compiler shut up */ + +#ifndef HAVE_FSEEKO + long loffset; +#else + off_t loffset; +#endif + + g_return_val_if_fail (stdio->file != NULL, + gsf_output_set_error (output, 0, "missing file")); + + loffset = offset; + if ((gsf_off_t) loffset != offset) { /* Check for overflow */ +#ifdef HAVE_FSEEKO + g_warning ("offset too large for fseeko"); + return gsf_output_set_error (output, 0, "offset too large for fseeko"); +#else + g_warning ("offset too large for fseek"); + return gsf_output_set_error (output, 0, "offset too large for fseek"); +#endif + } + switch (whence) { + default : ; /*checked in GsfOutput wrapper */ + case G_SEEK_SET : stdio_whence = SEEK_SET; break; + case G_SEEK_CUR : stdio_whence = SEEK_CUR; break; + case G_SEEK_END : stdio_whence = SEEK_END; break; + } + + errno = 0; +#ifdef HAVE_FSEEKO + if (0 == fseeko (stdio->file, loffset, stdio_whence)) + return TRUE; +#else + if (0 == fseek (stdio->file, loffset, stdio_whence)) + return TRUE; +#endif + return gsf_output_set_error (output, errno, g_strerror (errno)); +} + +static gboolean +gsf_output_stdio_write (GsfOutput *output, + size_t num_bytes, + guint8 const *buffer) +{ + GsfOutputStdio *stdio = GSF_OUTPUT_STDIO (output); + size_t written, remaining; + + g_return_val_if_fail (stdio != NULL, FALSE); + g_return_val_if_fail (stdio->file != NULL, FALSE); + + remaining = num_bytes; + + while (remaining > 0) { + written = fwrite (buffer + (num_bytes - remaining), 1, + remaining, stdio->file); + if ((written < remaining) && ferror (stdio->file) != 0) + return gsf_output_set_error (output, errno, g_strerror (errno)); + + remaining -= written; + } + return TRUE; +} + +static gsf_off_t gsf_output_stdio_vprintf (GsfOutput *output, + char const *fmt, va_list args) G_GNUC_PRINTF (2, 0); + +static gsf_off_t +gsf_output_stdio_vprintf (GsfOutput *output, char const *fmt, va_list args) +{ + return vfprintf (((GsfOutputStdio *)output)->file, fmt, args); +} + +static void +gsf_output_stdio_init (GObject *obj) +{ + GsfOutputStdio *stdio = GSF_OUTPUT_STDIO (obj); + + stdio->file = NULL; + stdio->create_backup_copy = FALSE; + stdio->keep_open = FALSE; +} + +static void +gsf_output_stdio_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->finalize = gsf_output_stdio_finalize; + output_class->Close = gsf_output_stdio_close; + output_class->Seek = gsf_output_stdio_seek; + output_class->Write = gsf_output_stdio_write; + output_class->Vprintf = gsf_output_stdio_vprintf; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfOutputStdio, gsf_output_stdio, + gsf_output_stdio_class_init, gsf_output_stdio_init, GSF_OUTPUT_TYPE) + +GsfOutput * +gsf_output_stdio_new_valist (char const *filename, GError **err, + char const *first_property_name, + va_list var_args) +{ + GsfOutputStdio *stdio; + FILE *file = NULL; + char *dirname = NULL; + char *temp_filename = NULL; + char *real_filename = follow_symlinks (filename, err); + int fd; + mode_t saved_umask; + struct stat st; + gboolean fixup_mode = FALSE; + + if (real_filename == NULL) + goto failure; + + /* Get the directory in which the real filename lives */ + dirname = g_path_get_dirname (real_filename); + + if (g_stat (real_filename, &st) == 0) { + if (!S_ISREG (st.st_mode)) { + if (err != NULL) { + char *dname = g_filename_display_name + (real_filename); + *err = g_error_new (gsf_output_error_id (), 0, + "%s: Is not a regular file", + dname); + g_free (dname); + } + goto failure; + } + + /* FIXME? Race conditions en masse. */ + if (access_wrapper (real_filename, W_OK) == -1) { + if (err != NULL) { + int save_errno = errno; + char *dname = g_filename_display_name + (real_filename); + *err = g_error_new + (gsf_output_error_id (), errno, + "%s: %s", + dname, g_strerror (save_errno)); + g_free (dname); + } + goto failure; + } + } else { + /* + * File does not exist. Compute the permissions and uid/gid + * that we will use for the newly-created file. + */ + + memset (&st, 0, sizeof (st)); + + /* Use default permissions */ + st.st_mode = 0666; fixup_mode = TRUE; +#ifdef HAVE_CHOWN + { + struct stat dir_st; + + st.st_uid = getuid (); + + if (g_stat (dirname, &dir_st) == 0 && + S_ISDIR (dir_st.st_mode) && + (dir_st.st_mode & S_ISGID)) + st.st_gid = dir_st.st_gid; + else + st.st_gid = getgid (); + } +#endif + } + + /* Save to a temporary file. We set the umask because some (buggy) + * implementations of mkstemp() use permissions 0666 and we want 0600. + */ + temp_filename = g_build_filename (dirname, ".gsf-save-XXXXXX", NULL); + /* Oh, joy. What about threads? --MW */ + saved_umask = umask (0077); + fd = g_mkstemp (temp_filename); /* this modifies temp_filename to the used name */ + umask (saved_umask); + + if (fixup_mode) + st.st_mode &= ~saved_umask; + + if (fd < 0 || NULL == (file = fdopen (fd, "wb"))) { + if (err != NULL) { + int save_errno = errno; + char *dname = g_filename_display_name + (temp_filename); + *err = g_error_new + (gsf_output_error_id (), errno, + "%s: %s", + dname, g_strerror (save_errno)); + g_free (dname); + } + goto failure; + } + + stdio = (GsfOutputStdio *)g_object_new_valist (GSF_OUTPUT_STDIO_TYPE, + first_property_name, var_args); + stdio->file = file; + stdio->st = st; + stdio->create_backup_copy = FALSE; + stdio->real_filename = real_filename; + stdio->temp_filename = temp_filename; + + gsf_output_set_name_from_filename (GSF_OUTPUT (stdio), filename); + + g_free (dirname); + + return GSF_OUTPUT (stdio); + + failure: + g_free (temp_filename); + g_free (real_filename); + g_free (dirname); + return NULL; +} + +/** + * gsf_output_stdio_new_full : + * @filename : name of file to create or replace. + * @err : optionally NULL. + * @first_property_name : NULL terminated list of properties + * @Varargs : + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_stdio_new_full (char const *filename, GError **err, + char const *first_property_name, ...) +{ + GsfOutput *res; + va_list var_args; + + va_start (var_args, first_property_name); + res = gsf_output_stdio_new_valist (filename, err, first_property_name, var_args); + va_end (var_args); + + return res; +} + +/** + * gsf_output_stdio_new : + * @filename : name of file to create or replace. + * @err : optionally NULL. + * + * Returns a new file or NULL. + **/ +GsfOutput * +gsf_output_stdio_new (char const *filename, GError **err) +{ + return gsf_output_stdio_new_full (filename, err, NULL); +} + +/** + * gsf_output_stdio_new_FILE : + * @filename : The filename corresponding to @file. + * @file : an existing stdio FILE * + * @keep_open : Should @file be closed when the wrapper is closed + * + * Assumes ownership of @file. If @keep_open is true, ownership reverts + * to caller when the GsfObject is closed. + * + * Returns a new GsfOutput wrapper for @file. Warning: the result will be + * seekable only if @file is seekable. If it is seekable, the resulting + * GsfOutput object will seek relative to @file's beginning, not its + * current location at the time the GsfOutput object is created. + **/ +GsfOutput * +gsf_output_stdio_new_FILE (char const *filename, FILE *file, gboolean keep_open) +{ + GsfOutputStdio *stdio; + + g_return_val_if_fail (filename != NULL, NULL); + g_return_val_if_fail (file != NULL, NULL); + + stdio = g_object_new (GSF_OUTPUT_STDIO_TYPE, NULL); + stdio->file = file; + stdio->keep_open = keep_open; + stdio->real_filename = stdio->temp_filename = NULL; + gsf_output_set_name_from_filename (GSF_OUTPUT (stdio), filename); + return GSF_OUTPUT (stdio); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-output-stdio.h b/lib/libgsf-1.12.3/gsf/gsf-output-stdio.h new file mode 100644 index 0000000000..fccdb05c3f --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output-stdio.h @@ -0,0 +1,49 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output-stdio.h: stdio based output + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_STDIO_H +#define GSF_OUTPUT_STDIO_H + +#include "gsf-output.h" +#include + +G_BEGIN_DECLS + +#define GSF_OUTPUT_STDIO_TYPE (gsf_output_stdio_get_type ()) +#define GSF_OUTPUT_STDIO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_STDIO_TYPE, GsfOutputStdio)) +#define GSF_IS_OUTPUT_STDIO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_STDIO_TYPE)) + +typedef struct _GsfOutputStdio GsfOutputStdio; + +GType gsf_output_stdio_get_type (void); +GsfOutput *gsf_output_stdio_new (char const *filename, GError **err); +GsfOutput *gsf_output_stdio_new_full (char const *filename, GError **err, + char const *first_property_name, + ...); /* G_GNUC_NULL_TERMINATED */ +GsfOutput *gsf_output_stdio_new_valist (char const *filename, GError **err, + char const *first_property_name, + va_list var_args); +GsfOutput *gsf_output_stdio_new_FILE (char const *filename, FILE *file, + gboolean keep_open); + +G_END_DECLS + +#endif /* GSF_OUTPUT_STDIO_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-output.c b/lib/libgsf-1.12.3/gsf/gsf-output.c new file mode 100644 index 0000000000..4b2c53b3f8 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output.c @@ -0,0 +1,605 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output.c: interface for storing data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +static gsf_off_t gsf_output_real_vprintf (GsfOutput *output, + char const* format, va_list args) G_GNUC_PRINTF (2, 0); + +#define GET_CLASS(instance) G_TYPE_INSTANCE_GET_CLASS (instance, GSF_OUTPUT_TYPE, GsfOutputClass) + +static GObjectClass *parent_class; + +enum { + PROP_0, + PROP_NAME, + PROP_SIZE, + PROP_CLOSED, + PROP_POS +}; + +static void +gsf_output_set_property (GObject *object, + guint property_id, + G_GNUC_UNUSED GValue const *value, + GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + /* gsf_off_t is typedef'd to gint64 */ + switch (property_id) { + case PROP_NAME: + g_value_set_string (value, gsf_output_name (GSF_OUTPUT (object))); + break; + case PROP_SIZE: + g_value_set_int64 (value, gsf_output_size (GSF_OUTPUT (object))); + break; + case PROP_POS: + g_value_set_int64 (value, gsf_output_tell (GSF_OUTPUT (object))); + break; + case PROP_CLOSED: + g_value_set_boolean (value, gsf_output_is_closed (GSF_OUTPUT (object))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gsf_output_dispose (GObject *obj) +{ + GsfOutput *output = GSF_OUTPUT (obj); + + if (!output->is_closed) { + /* g_warning ("Disposing of an unclosed stream"); */ + gsf_output_close (output); + } + + g_free (output->name); + output->name = NULL; + g_free (output->printf_buf); + output->printf_buf = NULL; + + g_clear_error (&output->err); + + if (output->container != NULL) { + g_object_unref (G_OBJECT (output->container)); + output->container = NULL; + } + + G_OBJECT_CLASS (parent_class)->dispose (obj); +} + +static void +gsf_output_init (GObject *obj) +{ + GsfOutput *output = GSF_OUTPUT (obj); + + output->cur_offset = 0; + output->cur_size = 0; + output->name = NULL; + output->wrapped_by = NULL; + output->container = NULL; + output->err = NULL; + output->is_closed = FALSE; + output->printf_buf = NULL; + output->printf_buf_size = 0; +} + +static void +gsf_output_class_init (GObjectClass *gobject_class) +{ + GsfOutputClass *output_class = GSF_OUTPUT_CLASS (gobject_class); + + gobject_class->dispose = gsf_output_dispose; + gobject_class->set_property = gsf_output_set_property; + gobject_class->get_property = gsf_output_get_property; + output_class->Vprintf = gsf_output_real_vprintf; + + parent_class = g_type_class_peek_parent (gobject_class); + + g_object_class_install_property (gobject_class, + PROP_NAME, + g_param_spec_string ("name", "Name", + "The Output's Name", + NULL, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_SIZE, + g_param_spec_int64 ("size", "Size", + "The Output's Size", + 0, G_MAXINT64, 0, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_POS, + g_param_spec_int64 ("position", "Position", + "The Output's Current Position", + 0, G_MAXINT64, 0, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_CLOSED, + g_param_spec_boolean ("is-closed", "Is Closed", + "Whether the Output is Closed", + FALSE, + GSF_PARAM_STATIC | + G_PARAM_READABLE)); +} + +GSF_CLASS_ABSTRACT (GsfOutput, gsf_output, + gsf_output_class_init, gsf_output_init, + G_TYPE_OBJECT) + +/** + * gsf_output_name : + * @output : + * + * Returns @output's name in utf8 form, DO NOT FREE THIS STRING + **/ +char const * +gsf_output_name (GsfOutput const *output) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), NULL); + return output->name; +} + +/** + * gsf_output_container : + * @output : + * + * Returns, but does not add a reference to @output's container. + * Potentially NULL + **/ +GsfOutfile * +gsf_output_container (GsfOutput const *output) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), NULL); + return output->container; +} + +/** + * gsf_output_size : + * @output : + * + * Returns the size of the output, or -1 if it does not have a size. + **/ +gsf_off_t +gsf_output_size (GsfOutput *output) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), -1); + return output->cur_size; +} + +/** + * gsf_output_close : + * @output : + * + * Close a stream. + * Returns FALSE on error + **/ +gboolean +gsf_output_close (GsfOutput *output) +{ + gboolean res; + + g_return_val_if_fail (GSF_IS_OUTPUT (output), + gsf_output_set_error (output, 0, "")); + g_return_val_if_fail (!output->is_closed, + gsf_output_set_error (output, 0, "")); + + /* The implementation will log any errors, but we can never try to + * close multiple times even on failure. + */ + res = GET_CLASS (output)->Close (output); + output->is_closed = TRUE; + return res; +} + +/** + * gsf_output_is_closed : + * @output : + * + * Returns TRUE if @output has already been closed. + **/ +gboolean +gsf_output_is_closed (GsfOutput const *output) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), TRUE); + return output->is_closed; +} + +/** + * gsf_output_tell : + * @output : + * + * Returns the current position in the file + **/ +gsf_off_t +gsf_output_tell (GsfOutput *output) +{ + g_return_val_if_fail (output != NULL, 0); + + return output->cur_offset; +} + +/** + * gsf_output_seek : + * @output : + * @offset : + * @whence : + * + * Returns FALSE on error. + **/ +gboolean +gsf_output_seek (GsfOutput *output, gsf_off_t offset, GSeekType whence) +{ + gsf_off_t pos = offset; + + g_return_val_if_fail (output != NULL, FALSE); + + switch (whence) { + case G_SEEK_SET: break; + case G_SEEK_CUR: pos += output->cur_offset; break; + case G_SEEK_END: pos += output->cur_size; break; + default : + g_warning ("Invalid seek type %d", (int)whence); + return FALSE; + } + + if (pos < 0) { + g_warning ("Invalid seek position %" GSF_OFF_T_FORMAT + ", which is before the start of the file", pos); + return FALSE; + } + + /* If we go nowhere, just return. This in particular handles null + * seeks for streams with no seek method. + */ + if (pos == output->cur_offset) + return TRUE; + + if (GET_CLASS (output)->Seek (output, offset, whence)) { + /* NOTE : it is possible for the current pos to be beyond the + * end of the file. The intervening space is not filled with 0 + * until something is written. + */ + output->cur_offset = pos; + return TRUE; + } + + /* the implementation should have assigned whatever errors are necessary */ + return FALSE; +} + +static inline gboolean +gsf_output_inc_cur_offset (GsfOutput *output, gsf_off_t num_bytes) +{ + output->cur_offset += num_bytes; + if (output->cur_offset < num_bytes) + return gsf_output_set_error (output, 0, "Output size overflow."); + if (output->cur_size < output->cur_offset) + output->cur_size = output->cur_offset; + return TRUE; +} + +/** + * gsf_output_write : + * @output : + * @num_bytes : + * @data : + * + * Returns FALSE on error. + **/ +gboolean +gsf_output_write (GsfOutput *output, + size_t num_bytes, guint8 const *data) +{ + g_return_val_if_fail (output != NULL, FALSE); + + if (num_bytes == 0) + return TRUE; + if (GET_CLASS (output)->Write (output, num_bytes, data)) + return gsf_output_inc_cur_offset (output, num_bytes); + + /* the implementation should have assigned whatever errors are necessary */ + return FALSE; +} + +/** + * gsf_output_error : + * @output : + * + * Returns the last error logged on the output, or NULL. + **/ +GError const * +gsf_output_error (GsfOutput const *output) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), NULL); + return output->err; +} + +/** + * gsf_output_set_name : + * @output : + * @name : + * + * This is a utility routine that should only be used by derived + * outputs. + * + * Returns : TRUE if the assignment was ok. + **/ +gboolean +gsf_output_set_name (GsfOutput *output, char const *name) +{ + char *buf; + + g_return_val_if_fail (GSF_IS_OUTPUT (output), FALSE); + + buf = g_strdup (name); + g_free (output->name); + output->name = buf; + return TRUE; +} + +/** + * gsf_output_set_name_from_filename : + * @output : the output stream + * @filename : the (fs-sys encoded) filename + * + * This is a utility routine that should only be used by derived + * outputs. + * + * Returns : TRUE if the assignment was ok. + **/ +gboolean +gsf_output_set_name_from_filename (GsfOutput *output, char const *filename) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), FALSE); + + g_free (output->name); + output->name = filename + ? g_filename_to_utf8 (filename, -1, NULL, NULL, NULL) + : NULL; + return TRUE; +} + +/** + * gsf_output_set_container : + * @output : + * @container : + * + * This is a utility routine that should only be used by derived + * outputs. + * + * Returns : TRUE if the assignment was ok. + **/ +gboolean +gsf_output_set_container (GsfOutput *output, GsfOutfile *container) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), FALSE); + + if (container != NULL) + g_object_ref (G_OBJECT (container)); + if (output->container != NULL) + g_object_unref (G_OBJECT (output->container)); + output->container = container; + return TRUE; +} + +/** + * gsf_output_set_error : + * @output : + * @code : + * @format : + * @Varargs : + * + * This is a utility routine that should only be used by derived + * outputs. + * + * Returns Always returns FALSE to facilitate its use. + **/ +gboolean +gsf_output_set_error (GsfOutput *output, + gint code, + char const *format, + ...) +{ + g_return_val_if_fail (GSF_IS_OUTPUT (output), FALSE); + + g_clear_error (&output->err); + + if (format != NULL) { + va_list args; + va_start (args, format); + output->err = g_new (GError, 1); + output->err->domain = gsf_output_error_id (); + output->err->code = code; + output->err->message = g_strdup_vprintf (format, args); + va_end (args); + } + + return FALSE; +} + +static void +cb_output_unwrap (GsfOutput *wrapee, G_GNUC_UNUSED GObject *wrapper) +{ + wrapee->wrapped_by = NULL; +} + +/** + * gsf_output_wrap : + * @wrapper : + * @wrapee : + * + * Returns TRUE if the wrapping succeeded. + **/ +gboolean +gsf_output_wrap (GObject *wrapper, GsfOutput *wrapee) +{ + g_return_val_if_fail (wrapper != NULL, FALSE); + g_return_val_if_fail (wrapee != NULL, FALSE); + + if (wrapee->wrapped_by != NULL) { + g_warning ("Attempt to wrap an output that is already wrapped."); + return FALSE; + } + + g_object_weak_ref (G_OBJECT (wrapper), + (GWeakNotify) cb_output_unwrap, wrapee); + wrapee->wrapped_by = wrapper; + return TRUE; +} + +/** + * gsf_output_unwrap : + * @wrapper : + * @wrapee : + * + * Returns TRUE if the unwrapping succeeded. + **/ +gboolean +gsf_output_unwrap (GObject *wrapper, GsfOutput *wrapee) +{ + g_return_val_if_fail (wrapee != NULL, FALSE); + g_return_val_if_fail (wrapee->wrapped_by == wrapper, FALSE); + + wrapee->wrapped_by = NULL; + g_object_weak_unref (G_OBJECT (wrapper), + (GWeakNotify) cb_output_unwrap, wrapee); + return TRUE; +} + +GQuark +gsf_output_error_id (void) +{ + static GQuark quark; + if (!quark) + quark = g_quark_from_static_string ("gsf_output_error"); + return quark; +} + +/** + * gsf_output_printf: + * @output: A #GsfOutput + * @format: The printf-style format string + * @Varargs: the arguments for @format + * + * Returns: TRUE if successful, FALSE if not + **/ +gboolean +gsf_output_printf (GsfOutput *output, char const *format, ...) +{ + va_list args; + gboolean res; + + va_start (args, format); + res = (gsf_output_vprintf (output, format, args) >= 0); + va_end (args); + return res; +} + +/** + * gsf_output_vprintf: + * @output: A #GsfOutput + * @format: The printf-style format string + * @args: the arguments for @format + * + * Returns: number of bytes printed, a negative value if not successful + **/ +gsf_off_t +gsf_output_vprintf (GsfOutput *output, char const *format, va_list args) +{ + gsf_off_t num_bytes; + + g_return_val_if_fail (output != NULL, -1); + g_return_val_if_fail (format != NULL, -1); + /* g_return_val_if_fail (strlen (format) > 0, -1); -- Why? */ + + num_bytes = GET_CLASS (output)->Vprintf (output, format, args); + + if (num_bytes >= 0) + if (!gsf_output_inc_cur_offset (output, num_bytes)) + return -1; + return num_bytes; +} + +static gsf_off_t +gsf_output_real_vprintf (GsfOutput *output, char const *fmt, va_list args) +{ + gsf_off_t reslen; + + if (NULL == output->printf_buf) { + output->printf_buf_size = 128; + output->printf_buf = g_new (char, output->printf_buf_size); + } + reslen = g_vsnprintf (output->printf_buf, output->printf_buf_size, fmt, args); + + /* handle C99 or older -1 case of vsnprintf */ + if (reslen < 0 || reslen >= output->printf_buf_size) { + g_free (output->printf_buf); + output->printf_buf = g_strdup_vprintf (fmt, args); + reslen = output->printf_buf_size = strlen (output->printf_buf); + } + + if (reslen == 0 || + GET_CLASS (output)->Write (output, reslen, output->printf_buf)) + return reslen; + + return -1; +} + +/** + * gsf_output_puts: + * @output: A #GsfOutput + * @line: %null terminated string to write + * + * Like fputs, this assumes that the line already ends with a newline + * + * Returns: TRUE if successful, FALSE if not + **/ +gboolean +gsf_output_puts (GsfOutput *output, char const *line) +{ + size_t nbytes = 0; + + g_return_val_if_fail (line != NULL, FALSE); + + nbytes = strlen (line); + return gsf_output_write (output, nbytes, line); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-output.h b/lib/libgsf-1.12.3/gsf/gsf-output.h new file mode 100644 index 0000000000..32204ce58e --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-output.h @@ -0,0 +1,96 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-output.h: interface for storing data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_OUTPUT_H +#define GSF_OUTPUT_H + +#include +#include +#include + +G_BEGIN_DECLS + +typedef struct { + GObjectClass g_object_class; + + gboolean (*Close) (GsfOutput *output); + gboolean (*Seek) (GsfOutput *output, + gsf_off_t offset, GSeekType whence); + gboolean (*Write) (GsfOutput *output, + size_t num_bytes, guint8 const *data); + gsf_off_t (*Vprintf) (GsfOutput *output, + char const *format, va_list args); +} GsfOutputClass; +#define GSF_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSF_OUTPUT_TYPE, GsfOutputClass)) +#define GSF_IS_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSF_OUTPUT_TYPE)) + +struct _GsfOutput { + GObject g_object; + + /*< protected >*/ + gsf_off_t cur_size, cur_offset; + char *name; + GObject *wrapped_by; + GsfOutfile *container; + GError *err; + gboolean is_closed; + + char *printf_buf; + int printf_buf_size; +}; +#define GSF_OUTPUT_TYPE (gsf_output_get_type ()) +#define GSF_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_OUTPUT_TYPE, GsfOutput)) +#define GSF_IS_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_OUTPUT_TYPE)) + +GType gsf_output_get_type (void); + +char const *gsf_output_name (GsfOutput const *output); +GsfOutfile *gsf_output_container (GsfOutput const *output); + +GError const *gsf_output_error (GsfOutput const *output); +gboolean gsf_output_set_error (GsfOutput *output, + gint code, + char const *format, + ...) G_GNUC_PRINTF (3, 4); + +gsf_off_t gsf_output_size (GsfOutput *output); +gboolean gsf_output_close (GsfOutput *output); +gboolean gsf_output_is_closed (GsfOutput const *output); +gsf_off_t gsf_output_tell (GsfOutput *output); +gboolean gsf_output_seek (GsfOutput *output, + gsf_off_t offset, GSeekType whence); +gboolean gsf_output_write (GsfOutput *output, + size_t num_bytes, guint8 const *data); + +gboolean gsf_output_wrap (GObject *wrapper, GsfOutput *wrapee); +gboolean gsf_output_unwrap (GObject *wrapper, GsfOutput *wrapee); + +GQuark gsf_output_error_id (void); + +gboolean gsf_output_printf (GsfOutput *output, char const *format, + ...) G_GNUC_PRINTF (2, 3); +gsf_off_t gsf_output_vprintf (GsfOutput *output, char const *format, + va_list args) G_GNUC_PRINTF (2, 0); +gboolean gsf_output_puts (GsfOutput *output, char const *line); + +G_END_DECLS + +#endif /* GSF_OUTPUT_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-shared-memory.c b/lib/libgsf-1.12.3/gsf/gsf-shared-memory.c new file mode 100644 index 0000000000..13ac225e44 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-shared-memory.c @@ -0,0 +1,107 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-shared-memory.c: + * + * Copyright (C) 2002-2004 Morten Welinder (terra@diku.dk) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#ifdef HAVE_MMAP +#include +#include +#elif defined(G_OS_WIN32) +#include +#endif + +typedef struct { + GObjectClass g_object_class; +} GsfSharedMemoryClass; + +static GObjectClass *parent_class; + +GsfSharedMemory * +gsf_shared_memory_new (void *buf, gsf_off_t size, gboolean needs_free) +{ + GsfSharedMemory *mem = g_object_new (GSF_SHARED_MEMORY_TYPE, NULL); + mem->buf = buf; + mem->size = size; + mem->needs_free = needs_free; + mem->needs_unmap = FALSE; + return mem; +} + +GsfSharedMemory * +gsf_shared_memory_mmapped_new (void *buf, gsf_off_t size) +{ +#if defined(HAVE_MMAP) || defined(G_OS_WIN32) + size_t msize = size; + if ((gsf_off_t)msize != size) { + g_warning ("memory buffer size too large"); + return NULL; + } else { + GsfSharedMemory *mem = gsf_shared_memory_new (buf, size, FALSE); + mem->needs_unmap = TRUE; + return mem; + } +#else + return NULL; +#endif +} + +static void +gsf_shared_memory_finalize (GObject *obj) +{ + GsfSharedMemory *mem = (GsfSharedMemory *) (obj); + + if (mem->buf != NULL) { + if (mem->needs_free) + g_free (mem->buf); + else if (mem->needs_unmap) { +#ifdef HAVE_MMAP + munmap (mem->buf, mem->size); +#elif defined(G_OS_WIN32) + UnmapViewOfFile (mem->buf); +#else + g_assert_not_reached (); +#endif + } + } + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static void +gsf_shared_memory_init (GObject *obj) +{ + GsfSharedMemory *mem = (GsfSharedMemory *) (obj); + mem->buf = NULL; +} + +static void +gsf_shared_memory_class_init (GObjectClass *gobject_class) +{ + parent_class = g_type_class_peek_parent (gobject_class); + + gobject_class->finalize = gsf_shared_memory_finalize; +} + +GSF_CLASS (GsfSharedMemory, gsf_shared_memory, + gsf_shared_memory_class_init, gsf_shared_memory_init, + G_TYPE_OBJECT) diff --git a/lib/libgsf-1.12.3/gsf/gsf-shared-memory.h b/lib/libgsf-1.12.3/gsf/gsf-shared-memory.h new file mode 100644 index 0000000000..b6cb1d6c7c --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-shared-memory.h @@ -0,0 +1,50 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-shared-memory.h + * + * Copyright (C) 2002-2004 Morten Welinder (terra@diku.dk) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_SHARED_MEMORY_H +#define GSF_SHARED_MEMORY_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_SHARED_MEMORY_TYPE (gsf_shared_memory_get_type ()) +#define GSF_SHARED_MEMORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_SHARED_MEMORY_TYPE, GsfSharedMemory)) +#define GSF_IS_SHARED_MEMORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_SHARED_MEMORY_TYPE)) + +typedef struct _GsfSharedMemory GsfSharedMemory; +struct _GsfSharedMemory { + GObject g_object; + void *buf; + gsf_off_t size; + + gboolean needs_free; + gboolean needs_unmap; +}; + +GType gsf_shared_memory_get_type (void); +GsfSharedMemory *gsf_shared_memory_new (void *buf, gsf_off_t size, gboolean needs_free); +GsfSharedMemory *gsf_shared_memory_mmapped_new (void *buf, gsf_off_t size); + +G_END_DECLS + +#endif /* GSF_SHARED_MEMORY_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-structured-blob.c b/lib/libgsf-1.12.3/gsf/gsf-structured-blob.c new file mode 100644 index 0000000000..b1f72b7c58 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-structured-blob.c @@ -0,0 +1,298 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-structured_blob.c : Utility storage to blob in/out a tree of data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static GObjectClass *parent_class; + +struct _GsfStructuredBlob { + GsfInfile base; + + GsfSharedMemory *data; + GPtrArray *children; +}; +typedef struct { + GsfInfileClass base; +} GsfStructuredBlobClass; + +static void +blob_finalize (GObject *obj) +{ + unsigned i; + GsfStructuredBlob *blob = GSF_STRUCTURED_BLOB (obj); + + if (blob->data != NULL) { + g_object_unref (G_OBJECT (blob->data)); + blob->data = NULL; + } + + if (blob->children != NULL) { + for (i = 0; i < blob->children->len ; i++) + g_object_unref (g_ptr_array_index (blob->children, i)); + g_ptr_array_free (blob->children, TRUE); + blob->children = NULL; + } + + parent_class->finalize (obj); +} + +static GsfInput * +blob_dup (GsfInput *input, G_GNUC_UNUSED GError **err) +{ + GsfStructuredBlob const *src = (GsfStructuredBlob *) input; + GsfStructuredBlob *dst = g_object_new (GSF_STRUCTURED_BLOB_TYPE, NULL); + + if (src->data != NULL) { + dst->data = src->data; + g_object_ref (G_OBJECT (dst->data)); + } + if (src->children != NULL) { + unsigned i; + gpointer child; + + dst->children = g_ptr_array_sized_new (src->children->len); + g_ptr_array_set_size (dst->children, src->children->len); + for (i = 0; i < src->children->len ; i++) { + child = g_ptr_array_index (src->children, i); + g_ptr_array_index (dst->children, i) = child; + g_object_ref (child); + } + } + + return GSF_INPUT (dst); +} + +static guint8 const * +blob_read (GsfInput *input, size_t num_bytes, guint8 *optional_buffer) +{ + GsfStructuredBlob *blob = (GsfStructuredBlob *) input; + guchar const *src = blob->data->buf; + + if (src == NULL) + return NULL; + if (optional_buffer) { + memcpy (optional_buffer, src + input->cur_offset, num_bytes); + return optional_buffer; + } else + return src + input->cur_offset; +} + +static gboolean +blob_seek (G_GNUC_UNUSED GsfInput *input, + G_GNUC_UNUSED gsf_off_t offset, + G_GNUC_UNUSED GSeekType whence) +{ + return FALSE; +} + +static int +blob_num_children (GsfInfile *infile) +{ + GsfStructuredBlob const *blob = (GsfStructuredBlob *) infile; + + if (blob->children != NULL) + return blob->children->len; + return -1; +} + +static char const * +blob_name_by_index (GsfInfile *infile, int i) +{ + GsfStructuredBlob const *blob = (GsfStructuredBlob *) infile; + if (blob->children != NULL) { + g_return_val_if_fail (i < 0 || (unsigned)i >= blob->children->len, NULL); + return gsf_input_name (g_ptr_array_index (blob->children, i)); + } + return NULL; +} + +static GsfInput * +blob_child_by_index (GsfInfile *infile, int i, GError **err) +{ + GsfStructuredBlob const *blob = (GsfStructuredBlob *) infile; + if (blob->children != NULL) { + g_return_val_if_fail (i < 0 || (unsigned)i >= blob->children->len, NULL); + return gsf_input_dup (g_ptr_array_index (blob->children, i), err); + } + return NULL; +} + +static GsfInput * +blob_child_by_name (GsfInfile *infile, char const *name, GError **err) +{ + GsfStructuredBlob const *blob = (GsfStructuredBlob *) infile; + if (blob->children != NULL) { + unsigned i; + GsfInput *child; + + for (i = 0 ; i < blob->children->len ;) { + child = g_ptr_array_index (blob->children, i); + if (!strcmp (gsf_input_name (child), name)) + return gsf_input_dup (child, err); + } + } + return NULL; +} + +static void +gsf_structured_blob_init (GObject *obj) +{ + GsfStructuredBlob *blob = GSF_STRUCTURED_BLOB (obj); + + blob->data = NULL; + blob->children = NULL; +} + +static void +gsf_structured_blob_class_init (GObjectClass *gobject_class) +{ + GsfInputClass *input_class = GSF_INPUT_CLASS (gobject_class); + GsfInfileClass *infile_class = GSF_INFILE_CLASS (gobject_class); + + gobject_class->finalize = blob_finalize; + input_class->Dup = blob_dup; + input_class->Read = blob_read; + input_class->Seek = blob_seek; + infile_class->num_children = blob_num_children; + infile_class->name_by_index = blob_name_by_index; + infile_class->child_by_index = blob_child_by_index; + infile_class->child_by_name = blob_child_by_name; + + parent_class = g_type_class_peek_parent (gobject_class); +} + +GSF_CLASS (GsfStructuredBlob, gsf_structured_blob, + gsf_structured_blob_class_init, gsf_structured_blob_init, + GSF_INFILE_TYPE) + +/** + * gsf_structured_blob_read : + * @input : An input (potentially a GsfInfile) holding the blob + * + * Returns a freshly created tree of blobs + **/ +GsfStructuredBlob * +gsf_structured_blob_read (GsfInput *input) +{ + GsfStructuredBlob *blob; + gsf_off_t content_size; + int i = 0; + + g_return_val_if_fail (GSF_IS_INPUT (input), NULL); + + blob = g_object_new (GSF_STRUCTURED_BLOB_TYPE, NULL); + + content_size = gsf_input_remaining (input); + if (content_size > 0) { + guint8 *buf = (guint8*)g_try_malloc (content_size); + + if (buf == NULL) { + g_warning ("Failed attempting to allocate %" GSF_OFF_T_FORMAT " bytes", + content_size); + + g_object_unref (G_OBJECT (blob)); + return NULL; + } + + gsf_input_read (input, content_size, buf); + blob->data = gsf_shared_memory_new (buf, content_size, TRUE); + } + + gsf_input_set_name (GSF_INPUT (blob), gsf_input_name (input)); + + if (GSF_IS_INFILE (input)) + i = gsf_infile_num_children (GSF_INFILE (input)); + if (i > 0) { + GsfInput *child; + GsfStructuredBlob *child_blob; + + blob->children = g_ptr_array_sized_new (i); + g_ptr_array_set_size (blob->children, i); + while (i-- > 0) { + child = gsf_infile_child_by_index (GSF_INFILE (input), i); + child_blob = gsf_structured_blob_read (child); + g_object_unref (G_OBJECT (child)); + + g_ptr_array_index (blob->children, i) = child_blob; +#if 0 + /* + * We don't need this, and setting it causes circular + * links. + */ + gsf_input_set_container (GSF_INPUT (child_blob), + GSF_INFILE (blob)); +#endif + } + } + + return blob; +} + +/** + * gsf_structured_blob_write : + * @blob : + * @container : + * + * Dumps structured blob @blob onto the @container. Will fail if the output is + * not an Outfile and blob has multiple streams. + * + * Returns : TRUE on success. + **/ +gboolean +gsf_structured_blob_write (GsfStructuredBlob *blob, GsfOutfile *container) +{ + GsfOutput *output; + gboolean has_kids; + + g_return_val_if_fail (GSF_IS_STRUCTURED_BLOB (blob), FALSE); + g_return_val_if_fail (GSF_IS_OUTFILE (container), FALSE); + + has_kids = (blob->children != NULL && blob->children->len > 0); + + output = gsf_outfile_new_child (GSF_OUTFILE (container), + gsf_input_name (GSF_INPUT (blob)), + has_kids); + if (has_kids) { + GsfStructuredBlob *child_blob; + unsigned i; + + for (i = 0 ; i < blob->children->len ; i++) { + child_blob = g_ptr_array_index (blob->children, i); + if (!gsf_structured_blob_write (child_blob, GSF_OUTFILE (output))) + return FALSE; + } + } + + if (blob->data != NULL) + gsf_output_write (output, blob->data->size, blob->data->buf); + gsf_output_close (output); + g_object_unref (G_OBJECT (output)); + + return TRUE; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-structured-blob.h b/lib/libgsf-1.12.3/gsf/gsf-structured-blob.h new file mode 100644 index 0000000000..8b31936b04 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-structured-blob.h @@ -0,0 +1,45 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-structured-blob.h: Utility storage to blob in/out a tree of data + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_STRUCTURED_BLOB_H +#define GSF_STRUCTURED_BLOB_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_STRUCTURED_BLOB_TYPE (gsf_structured_blob_get_type ()) +#define GSF_STRUCTURED_BLOB(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSF_STRUCTURED_BLOB_TYPE, GsfStructuredBlob)) +#define GSF_IS_STRUCTURED_BLOB(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSF_STRUCTURED_BLOB_TYPE)) + +typedef struct _GsfStructuredBlob GsfStructuredBlob; + +/* inherits from GsfInfile */ +GType gsf_structured_blob_get_type (void); + +GsfStructuredBlob *gsf_structured_blob_read (GsfInput *input); +gboolean gsf_structured_blob_write (GsfStructuredBlob *blob, + GsfOutfile *container); + +G_END_DECLS + +#endif /* GSF_STRUCTURED_BLOB_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-timestamp.c b/lib/libgsf-1.12.3/gsf/gsf-timestamp.c new file mode 100644 index 0000000000..b3768fa479 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-timestamp.c @@ -0,0 +1,99 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-timestamp.c: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +static void +timestamp_to_string (GValue const *src_value, GValue *dest_value) +{ + char *str = gsf_timestamp_as_string (g_value_get_boxed (src_value)); + g_value_set_string (dest_value, str); + g_free (str); +} + +GType +gsf_timestamp_get_type (void) +{ + static GType our_type = 0; + + if (our_type == 0) { + our_type = g_boxed_type_register_static ("GsfTimestamp", + (GBoxedCopyFunc)gsf_timestamp_copy, + (GBoxedFreeFunc)gsf_timestamp_free); + g_value_register_transform_func (our_type, G_TYPE_STRING, + ×tamp_to_string); + } + return our_type; +} + +GsfTimestamp * +gsf_timestamp_copy (GsfTimestamp const *stamp) +{ + GsfTimestamp *res = g_new0 (GsfTimestamp, 1); + res->timet = stamp->timet; + return res; +} + +void +gsf_timestamp_free (GsfTimestamp *stamp) +{ + g_free (stamp); +} + +int +gsf_timestamp_parse (G_GNUC_UNUSED char const *spec, + G_GNUC_UNUSED GsfTimestamp *stamp) +{ + return 0; +} + +char * +gsf_timestamp_as_string (GsfTimestamp const *stamp) +{ + time_t t; + g_return_val_if_fail (stamp != NULL, g_strdup ("")); + + /* Use an honest time_t for ctime. */ + t = stamp->timet; +/* FIXME FIXME FIXME ctime is not thread safe, use ctime_r if available */ + return g_strdup (ctime (&t)); +} + +guint +gsf_timestamp_hash (GsfTimestamp const *stamp) +{ + return stamp->timet; +} + +gboolean +gsf_timestamp_equal (GsfTimestamp const *a, GsfTimestamp const *b) +{ + return a->timet == b->timet; +} + +void +gsf_value_set_timestamp (GValue *value, GsfTimestamp const *stamp) +{ + g_value_set_boxed (value, stamp); +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-timestamp.h b/lib/libgsf-1.12.3/gsf/gsf-timestamp.h new file mode 100644 index 0000000000..f1fb4b53c8 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-timestamp.h @@ -0,0 +1,60 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-timestamp.h: A useful little type for metadata, contains a superset of + * all the features it would be nice to have. + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_TIMESTAMP_H +#define GSF_TIMESTAMP_H + +#include +#include + +G_BEGIN_DECLS + +#define GSF_TIMESTAMP_TYPE (gsf_timestamp_get_type ()) +#define VAL_IS_GSF_TIMESTAMP(v) (G_TYPE_CHECK_VALUE_TYPE((v), GSF_TIMESTAMP_TYPE)) + +struct _GsfTimestamp { + GDate date; /* In local timezone */ + glong seconds; /* time of day */ + GString time_zone; /* possibly blank */ + + guint32 timet; +}; + +GType gsf_timestamp_get_type (void); + +GsfTimestamp *gsf_timestamp_new_now (void); +GsfTimestamp *gsf_timestamp_new (GDate const *date, glong seconds, + char const *tz); + +GsfTimestamp *gsf_timestamp_copy (GsfTimestamp const *stamp); +void gsf_timestamp_free (GsfTimestamp *stamp); +int gsf_timestamp_parse (char const *spec, GsfTimestamp *stamp); +char *gsf_timestamp_as_string (GsfTimestamp const *stamp); +guint gsf_timestamp_hash (GsfTimestamp const *stamp); +gboolean gsf_timestamp_equal (GsfTimestamp const *a, + GsfTimestamp const *b); + +void gsf_value_set_timestamp (GValue *value, GsfTimestamp const *stamp); + +G_END_DECLS + +#endif /* GSF_TIMESTAMP_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-utils.c b/lib/libgsf-1.12.3/gsf/gsf-utils.c new file mode 100644 index 0000000000..da23bb8438 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-utils.c @@ -0,0 +1,773 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-utils.c: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifndef HAVE_GLIB26 +#include +#endif + +/* + * Glib gets this wrong, really. ARM's floating point format is a weird + * mixture. + */ +#define G_ARMFLOAT_ENDIAN 56781234 +#if defined(__arm__) && !defined(__vfp__) && (G_BYTE_ORDER == G_LITTLE_ENDIAN) +#define G_FLOAT_BYTE_ORDER G_ARMFLOAT_ENDIAN +#else +#define G_FLOAT_BYTE_ORDER G_BYTE_ORDER +#endif + + +static void base64_init (void); + +/** + * gsf_init : + * + * Initializes the GSF library + */ +void +gsf_init (void) +{ +#ifdef ENABLE_NLS + bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); +#endif + + g_type_init (); + base64_init (); +} + +/** + * gsf_shutdown: + * + * De-intializes the GSF library + */ +void +gsf_shutdown (void) +{ +} + +void +gsf_init_dynamic (GTypeModule *module) +{ + (void)module; +} + +void +gsf_shutdown_dynamic (GTypeModule *module) +{ + (void)module; +} + +static void +gsf_mem_dump_full (guint8 const *ptr, size_t len, gsf_off_t offset) +{ + gsf_off_t i, j, off; + + for (i = 0 ; i < (len+15)/16 ; i++) { + g_print ("%8lx | ", (long)(i*16 + offset)); + for (j = 0;j < 16; j++) { + off = j + (i << 4); + off= '!' && ptr[off] < 127 ? ptr[off] : '.') : '*'); + } + g_print ("\n"); + } +} + +/** + * gsf_mem_dump : + * @ptr: memory area to be dumped. + * @len: how many bytes will be dumped. + * + * Dump @len bytes from the memory location given by @ptr. + **/ +void +gsf_mem_dump (guint8 const *ptr, size_t len) +{ + gsf_mem_dump_full (ptr, len, 0); +} + +/** + * gsf_input_dump : + * @input: a #GsfInput + * @dump_as_hex: If TRUE, dump in hexidecmal format + * + * Dumps @input's contents to STDOUT, optionally in hex format. + */ +void +gsf_input_dump (GsfInput *input, gboolean dump_as_hex) +{ + gsf_off_t offset = 0; + size_t size, count; + guint8 const *data; + + /* read in small blocks to excercise things */ + size = gsf_input_size (GSF_INPUT (input)); + while (size > 0) { + count = size; + if (count > 0x100) + count = 0x100; + data = gsf_input_read (GSF_INPUT (input), count, NULL); + g_return_if_fail (data != NULL); + if (dump_as_hex) + gsf_mem_dump_full (data, count, offset); + else + fwrite (data, 1, count, stdout); + size -= count; + offset += count; + } + if (!dump_as_hex) + fflush (stdout); +} + +guint64 +gsf_le_get_guint64 (void const *p) +{ +#if G_BYTE_ORDER == G_BIG_ENDIAN + if (sizeof (guint64) == 8) { + guint64 li; + int i; + guint8 *t = (guint8 *)&li; + guint8 *p2 = (guint8 *)p; + int sd = sizeof (li); + + for (i = 0; i < sd; i++) + t[i] = p2[sd - 1 - i]; + + return li; + } else { + g_error ("Big endian machine, but weird size of guint64"); + } +#elif G_BYTE_ORDER == G_LITTLE_ENDIAN + if (sizeof (guint64) == 8) { + /* + * On i86, we could access directly, but Alphas require + * aligned access. + */ + guint64 data; + memcpy (&data, p, sizeof (data)); + return data; + } else { + g_error ("Little endian machine, but weird size of guint64"); + } +#else +#error "Byte order not recognised -- out of luck" +#endif +} + +float +gsf_le_get_float (void const *p) +{ +#if G_FLOAT_BYTE_ORDER == G_BIG_ENDIAN + if (sizeof (float) == 4) { + float f; + int i; + guint8 *t = (guint8 *)&f; + guint8 *p2 = (guint8 *)p; + int sd = sizeof (f); + + for (i = 0; i < sd; i++) + t[i] = p2[sd - 1 - i]; + + return f; + } else { + g_error ("Big endian machine, but weird size of floats"); + } +#elif (G_FLOAT_BYTE_ORDER == G_LITTLE_ENDIAN) || (G_FLOAT_BYTE_ORDER == G_ARMFLOAT_ENDIAN) + if (sizeof (float) == 4) { + /* + * On i86, we could access directly, but Alphas require + * aligned access. + */ + float data; + memcpy (&data, p, sizeof (data)); + return data; + } else { + g_error ("Little endian machine, but weird size of floats"); + } +#else +#error "Floating-point byte order not recognised -- out of luck" +#endif +} + +void +gsf_le_set_float (void *p, float d) +{ +#if G_FLOAT_BYTE_ORDER == G_BIG_ENDIAN + if (sizeof (float) == 4) { + int i; + guint8 *t = (guint8 *)&d; + guint8 *p2 = (guint8 *)p; + int sd = sizeof (d); + + for (i = 0; i < sd; i++) + p2[sd - 1 - i] = t[i]; + } else { + g_error ("Big endian machine, but weird size of floats"); + } +#elif (G_FLOAT_BYTE_ORDER == G_LITTLE_ENDIAN) || (G_FLOAT_BYTE_ORDER == G_ARMFLOAT_ENDIAN) + if (sizeof (float) == 4) { + /* + * On i86, we could access directly, but Alphas require + * aligned access. + */ + memcpy (p, &d, sizeof (d)); + } else { + g_error ("Little endian machine, but weird size of floats"); + } +#else +#error "Floating-point byte order not recognised -- out of luck" +#endif +} + +double +gsf_le_get_double (void const *p) +{ +#if G_FLOAT_BYTE_ORDER == G_ARMFLOAT_ENDIAN + double data; + memcpy ((char *)&data + 4, p, 4); + memcpy ((char *)&data, (char const *)p + 4, 4); + return data; +#elif G_FLOAT_BYTE_ORDER == G_BIG_ENDIAN + if (sizeof (double) == 8) { + double d; + int i; + guint8 *t = (guint8 *)&d; + guint8 *p2 = (guint8 *)p; + int sd = sizeof (d); + + for (i = 0; i < sd; i++) + t[i] = p2[sd - 1 - i]; + + return d; + } else { + g_error ("Big endian machine, but weird size of doubles"); + } +#elif G_FLOAT_BYTE_ORDER == G_LITTLE_ENDIAN + if (sizeof (double) == 8) { + /* + * On i86, we could access directly, but Alphas require + * aligned access. + */ + double data; + memcpy (&data, p, sizeof (data)); + return data; + } else { + g_error ("Little endian machine, but weird size of doubles"); + } +#else +#error "Floating-point byte order not recognised -- out of luck" +#endif +} + +void +gsf_le_set_double (void *p, double d) +{ +#if G_FLOAT_BYTE_ORDER == G_ARMFLOAT_ENDIAN + memcpy (p, (char const *)&d + 4, 4); + memcpy ((char *)p + 4, &d, 4); +#elif G_FLOAT_BYTE_ORDER == G_BIG_ENDIAN + if (sizeof (double) == 8) { + int i; + guint8 *t = (guint8 *)&d; + guint8 *p2 = (guint8 *)p; + int sd = sizeof (d); + + for (i = 0; i < sd; i++) + p2[sd - 1 - i] = t[i]; + } else { + g_error ("Big endian machine, but weird size of doubles"); + } +#elif G_FLOAT_BYTE_ORDER == G_LITTLE_ENDIAN + if (sizeof (double) == 8) { + /* + * On i86, we could access directly, but Alphas require + * aligned access. + */ + memcpy (p, &d, sizeof (d)); + } else { + g_error ("Little endian machine, but weird size of doubles"); + } +#else +#error "Floating-point byte order not recognised -- out of luck" +#endif +} + +/** + * gsf_extension_pointer: + * @path: A filename or file path. + * + * Extracts the extension from the end of a filename (the part after the final + * '.' in the filename). + * + * Returns: A pointer to the extension part of the filename, or a + * pointer to the end of the string if the filename does not + * have an extension. + */ +char const * +gsf_extension_pointer (char const *path) +{ + char const *s, *end; + + g_return_val_if_fail (path != NULL, NULL); + + end = path + strlen (path); + for (s = end; s > path; ) { + s--; + if (G_IS_DIR_SEPARATOR (*s)) + break; + if (*s == '.') + return s + 1; + } + + return end; +} + +/** + * gsf_iconv_close : A utility wrapper to safely close an iconv handle + * @handle : + **/ +void +gsf_iconv_close (GIConv handle) +{ + if (handle != NULL && handle != ((GIConv)-1)) + g_iconv_close (handle); +} + +/** + * gsf_filename_to_utf8: + * @filename: file name suitable for open(2). + * @quoted: if TRUE, the resulting utf8 file name will be quoted + * (unless it is invalid). + * + * A utility wrapper to make sure filenames are valid utf8. + * Caller must g_free the result. + * + * Returns @filename using utf-8 encoding for display + **/ +char * +gsf_filename_to_utf8 (char const *filename, gboolean quoted) +{ + char *dname = g_filename_display_name (filename); + char *result; + + if (quoted) { + result = g_strconcat ("\"", dname, "\"", NULL); + g_free (dname); + } else + result = dname; + + return result; +} + +/***************************************************************************/ +/* some code taken from evolution/camel/camel-mime-utils.c */ + +/* + * Copyright (C) 2000 Ximian Inc. + * + * Authors: Michael Zucchi + * Jeffrey Stedfast + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 + */ + +/* dont touch this file without my permission - Michael */ +static guint8 camel_mime_base64_rank[256]; +static char const *base64_alphabet = +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +#define d(x) + +/* Line length for base64 encoding. Must be a multiple of 4. */ +enum { BASE64_LINE_LEN = 76 }; + +static void +base64_init(void) +{ + int i; + + memset(camel_mime_base64_rank, 0xff, sizeof(camel_mime_base64_rank)); + for (i=0;i<64;i++) { + camel_mime_base64_rank[(unsigned int)base64_alphabet[i]] = i; + } + camel_mime_base64_rank['='] = 0; +} + +/* call this when finished encoding everything, to + flush off the last little bit */ +size_t +gsf_base64_encode_close (guint8 const *in, size_t inlen, + gboolean break_lines, guint8 *out, int *state, unsigned int *save) +{ + int c1, c2; + guint8 *outptr = out; + + if (inlen>0) + outptr += gsf_base64_encode_step(in, inlen, break_lines, outptr, state, save); + + c1 = ((guint8 *)save)[1]; + c2 = ((guint8 *)save)[2]; + + d(printf("mode = %d\nc1 = %c\nc2 = %c\n", + (int)((char *)save)[0], + (int)((char *)save)[1], + (int)((char *)save)[2])); + + switch (((char *)save)[0]) { + case 2: + outptr[2] = base64_alphabet[ ( (c2 &0x0f) << 2 ) ]; + g_assert(outptr[2] != 0); + goto skip; + case 1: + outptr[2] = '='; + skip: + outptr[0] = base64_alphabet[ c1 >> 2 ]; + outptr[1] = base64_alphabet[ c2 >> 4 | ( (c1&0x3) << 4 )]; + outptr[3] = '='; + outptr += 4; + ++*state; + break; + } + if (break_lines && *state > 0) + *outptr++ = '\n'; + + *save = 0; + *state = 0; + + return outptr-out; +} + +/* + performs an 'encode step', only encodes blocks of 3 characters to the + output at a time, saves left-over state in state and save (initialise to + 0 on first invocation). +*/ +size_t +gsf_base64_encode_step (guint8 const *in, size_t len, + gboolean break_lines, guint8 *out, int *state, unsigned int *save) +{ + register guint8 const *inptr; + register guint8 *outptr; + + if (len<=0) + return 0; + + inptr = in; + outptr = out; + + d(printf("we have %d chars, and %d saved chars\n", len, ((char *)save)[0])); + + if (len + ((char *)save)[0] > 2) { + guint8 const *inend = in+len-2; + register int c1, c2, c3; + register int already; + + already = *state; + + switch (((char *)save)[0]) { + case 1: c1 = ((guint8 *)save)[1]; goto skip1; + case 2: c1 = ((guint8 *)save)[1]; + c2 = ((guint8 *)save)[2]; goto skip2; + } + + /* yes, we jump into the loop, no i'm not going to change it, it's beautiful! */ + while (inptr < inend) { + c1 = *inptr++; + skip1: + c2 = *inptr++; + skip2: + c3 = *inptr++; + *outptr++ = base64_alphabet[ c1 >> 2 ]; + *outptr++ = base64_alphabet[ c2 >> 4 | ( (c1&0x3) << 4 ) ]; + *outptr++ = base64_alphabet[ ( (c2 &0x0f) << 2 ) | (c3 >> 6) ]; + *outptr++ = base64_alphabet[ c3 & 0x3f ]; + /* this is a bit ugly ... */ + if (break_lines && (++already) * 4 >= BASE64_LINE_LEN) { + *outptr++='\n'; + already = 0; + } + } + + ((char *)save)[0] = 0; + len = 2-(inptr-inend); + *state = already; + } + + d(printf("state = %d, len = %d\n", + (int)((char *)save)[0], + len)); + + if (len>0) { + register char *saveout; + + /* points to the slot for the next char to save */ + saveout = & (((char *)save)[1]) + ((char *)save)[0]; + + /* len can only be 0 1 or 2 */ + switch(len) { + case 2: *saveout++ = *inptr++; + case 1: *saveout++ = *inptr++; + } + ((char *)save)[0]+=len; + } + + d(printf("mode = %d\nc1 = %c\nc2 = %c\n", + (int)((char *)save)[0], + (int)((char *)save)[1], + (int)((char *)save)[2])); + + return outptr-out; +} + + +/** + * gsf_base64_decode_step: decode a chunk of base64 encoded data + * @in: input stream + * @len: max length of data to decode + * @out: output stream + * @state: holds the number of bits that are stored in @save + * @save: leftover bits that have not yet been decoded + * + * Decodes a chunk of base64 encoded data + * + * Returns the number of bytes converted + **/ +size_t +gsf_base64_decode_step (guint8 const *in, size_t len, guint8 *out, + int *state, guint *save) +{ + register guint8 const *inptr; + register guint8 *outptr, c; + register unsigned int v; + guint8 const *inend; + int i; + + inend = in+len; + outptr = out; + + /* convert 4 base64 bytes to 3 normal bytes */ + v=*save; + i=*state; + inptr = in; + while (inptr>16; + *outptr++ = v>>8; + *outptr++ = v; + i=0; + } + } + } + + *save = v; + *state = i; + + /* quick scan back for '=' on the end somewhere */ + /* fortunately we can drop 1 output char for each trailing = (upto 2) */ + i=2; + while (inptr>in && i) { + inptr--; + if (camel_mime_base64_rank[*inptr] != 0xff) { + if (*inptr == '=' && outptr>out) + outptr--; + i--; + } + } + + /* if i!= 0 then there is a truncation error! */ + return outptr-out; +} + +guint8 * +gsf_base64_encode_simple (guint8 const *data, size_t len) +{ + guint8 *out; + int state = 0, outlen; + unsigned int save = 0; + gboolean break_lines = TRUE; + + outlen = len * 4 / 3 + 5; + if (break_lines) + outlen += outlen / BASE64_LINE_LEN + 1; + out = g_new (guint8, outlen); + outlen = gsf_base64_encode_close (data, len, break_lines, + out, &state, &save); + out [outlen] = '\0'; + return out; +} + +size_t +gsf_base64_decode_simple (guint8 *data, size_t len) +{ + int state = 0; + unsigned int save = 0; + return gsf_base64_decode_step (data, len, data, &state, &save); +} + + +/* Largely a copy of g_object_new_valist. */ +/** + * gsf_property_settings_collect_valist: collect property setting from a va_list. + * @object_type: the GType for which the properties are being set. + * @p_n_params: a pointer to the number of properties collected. (Used for + * both input and output.) + * @p_params: a pointer to the GParameter array that holds the properties. + * (Used for both input and output. This may point to a NULL pointer if + * there are no properties collected yet.) + * @first_property_name: the name of the first property being set, or NULL. + * @var_args: a va_list holding the remainder of the property names and + * values, terminated by a NULL. + * + * This function builds a GParameter array suitable for g_object_newv. + **/ +void +gsf_property_settings_collect_valist (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + va_list var_args) +{ + GObjectClass *class; + GParameter *params = *p_params; + const gchar *name; + size_t n_params = *p_n_params; + size_t n_alloced_params = n_params; /* We might have more. */ + + g_return_if_fail (G_TYPE_IS_OBJECT (object_type)); + + class = g_type_class_ref (object_type); + + name = first_property_name; + while (name) + { + gchar *error = NULL; + GParamSpec *pspec = g_object_class_find_property (class, name); + if (!pspec) + { + g_warning ("%s: object class `%s' has no property named `%s'", + G_STRFUNC, + g_type_name (object_type), + name); + break; + } + + if (n_params >= n_alloced_params) + { + n_alloced_params += 16; + params = g_renew (GParameter, params, n_alloced_params); + } + params[n_params].name = name; + params[n_params].value.g_type = 0; + g_value_init (¶ms[n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec)); + G_VALUE_COLLECT (¶ms[n_params].value, var_args, 0, &error); + if (error) + { + g_warning ("%s: %s", G_STRFUNC, error); + g_free (error); + g_value_unset (¶ms[n_params].value); + break; + } + n_params++; + name = va_arg (var_args, gchar*); + } + + g_type_class_unref (class); + + *p_params = params; + *p_n_params = n_params; +} + +/* This is a vararg version of gsf_property_settings_collect_valist. */ +void +gsf_property_settings_collect (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + ...) +{ + va_list var_args; + va_start (var_args, first_property_name); + gsf_property_settings_collect_valist (object_type, p_params, p_n_params, first_property_name, var_args); + va_end (var_args); +} + +void +gsf_property_settings_free (GParameter *params, + size_t n_params) +{ + while (n_params--) + g_value_unset (¶ms[n_params].value); + g_free (params); +} + + + +/* Errors */ + +/** + * gsf_error_quark: + * + * Returns the #GQuark used to identify libgsf errors in #GError structures. + * Specific error codes come from the #GsfError enumeration. + * + * Return value: A #GQuark. + **/ +GQuark +gsf_error_quark (void) +{ + static GQuark quark; + + if (quark == 0) + quark = g_quark_from_static_string ("gsf-error-quark"); + + return quark; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf-utils.h b/lib/libgsf-1.12.3/gsf/gsf-utils.h new file mode 100644 index 0000000000..8368b5afad --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-utils.h @@ -0,0 +1,142 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-utils.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_UTILS_H +#define GSF_UTILS_H + +#include +#include + +G_BEGIN_DECLS + +/* Do this the ugly way so that we don't have to worry about alignment */ +#define GSF_LE_GET_GUINT8(p) (*(guint8 const *)(p)) +#define GSF_LE_GET_GUINT16(p) \ + (guint16)((((guint8 const *)(p))[0] << 0) | \ + (((guint8 const *)(p))[1] << 8)) +#define GSF_LE_GET_GUINT32(p) \ + (guint32)((((guint8 const *)(p))[0] << 0) | \ + (((guint8 const *)(p))[1] << 8) | \ + (((guint8 const *)(p))[2] << 16) | \ + (((guint8 const *)(p))[3] << 24)) +#define GSF_LE_GET_GUINT64(p) (gsf_le_get_guint64 (p)) +#define GSF_LE_GET_GINT8(p) ((gint8)GSF_LE_GET_GUINT8(p)) +#define GSF_LE_GET_GINT16(p) ((gint16)GSF_LE_GET_GUINT16(p)) +#define GSF_LE_GET_GINT32(p) ((gint32)GSF_LE_GET_GUINT32(p)) +#define GSF_LE_GET_GINT64(p) ((gint64)GSF_LE_GET_GUINT64(p)) +#define GSF_LE_GET_FLOAT(p) (gsf_le_get_float (p)) +#define GSF_LE_GET_DOUBLE(p) (gsf_le_get_double (p)) +guint64 gsf_le_get_guint64 (void const *p); +float gsf_le_get_float (void const *p); +double gsf_le_get_double (void const *p); + +#define GSF_LE_SET_GUINT8(p, dat) \ + (*((guint8 *)(p)) = ((dat) & 0xff)) +#define GSF_LE_SET_GUINT16(p, dat) \ + ((*((guint8 *)(p) + 0) = ((dat) & 0xff)),\ + (*((guint8 *)(p) + 1) = ((dat) >> 8) & 0xff)) +#define GSF_LE_SET_GUINT32(p, dat) \ + ((*((guint8 *)(p) + 0) = (guchar) ((dat)) & 0xff), \ + (*((guint8 *)(p) + 1) = (guchar) ((dat) >> 8) & 0xff), \ + (*((guint8 *)(p) + 2) = (guchar) ((dat) >> 16) & 0xff), \ + (*((guint8 *)(p) + 3) = (guchar) ((dat) >> 24) & 0xff)) +#define GSF_LE_SET_GUINT64(p, dat) \ + ((*((guint8 *)(p) + 0) = (guchar) ((dat)) & 0xff), \ + (*((guint8 *)(p) + 1) = (guchar) ((dat) >> 8) & 0xff), \ + (*((guint8 *)(p) + 2) = (guchar) ((dat) >> 16) & 0xff), \ + (*((guint8 *)(p) + 3) = (guchar) ((dat) >> 24) & 0xff), \ + (*((guint8 *)(p) + 4) = (guchar) ((dat) >> 32) & 0xff), \ + (*((guint8 *)(p) + 5) = (guchar) ((dat) >> 40) & 0xff), \ + (*((guint8 *)(p) + 6) = (guchar) ((dat) >> 48) & 0xff), \ + (*((guint8 *)(p) + 7) = (guchar) ((dat) >> 56) & 0xff)) +#define GSF_LE_SET_GINT8(p,dat) GSF_LE_SET_GUINT8((p),(dat)) +#define GSF_LE_SET_GINT16(p,dat) GSF_LE_SET_GUINT16((p),(dat)) +#define GSF_LE_SET_GINT32(p,dat) GSF_LE_SET_GUINT32((p),(dat)) +#define GSF_LE_SET_GINT64(p,dat) GSF_LE_SET_GUINT64((p),(dat)) +#define GSF_LE_SET_FLOAT(p,dat) gsf_le_set_float((p),(dat)) +#define GSF_LE_SET_DOUBLE(p,dat) gsf_le_set_double((p),(dat)) +void gsf_le_set_float (void *p, float f); +void gsf_le_set_double (void *p, double d); + +void gsf_init (void); +void gsf_shutdown (void); +void gsf_init_dynamic (GTypeModule *module); +void gsf_shutdown_dynamic (GTypeModule *module); + +/* Debugging utilities */ + void gsf_mem_dump (guint8 const *ptr, size_t len); +void gsf_input_dump (GsfInput *input, gboolean dump_as_hex); + +/* base64 encoding utilities */ +guint8 *gsf_base64_encode_simple (guint8 const *data, size_t len); +size_t gsf_base64_encode_close (guint8 const *in, size_t inlen, + gboolean break_lines, guint8 *out, + int *state, guint *save); +size_t gsf_base64_encode_step (guint8 const *in, size_t len, + gboolean break_lines, guint8 *out, + int *state, guint *save); + +size_t gsf_base64_decode_simple (guint8 *data, size_t len); +size_t gsf_base64_decode_step (guint8 const *in, size_t len, + guint8 *out, int *state, guint *save); + + +/* For putting filenames into error messages. */ +char *gsf_filename_to_utf8 (char const *filename, gboolean quoted); + +/* Some version checking */ +extern int libgsf_major_version; +extern int libgsf_minor_version; +extern int libgsf_micro_version; + +char const *gsf_extension_pointer (char const * path); +void gsf_iconv_close (GIConv handle); + +void gsf_property_settings_collect_valist (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + va_list var_args); +void gsf_property_settings_collect (GType object_type, + GParameter **p_params, + size_t *p_n_params, + const gchar *first_property_name, + ...); +void gsf_property_settings_free (GParameter *params, + size_t n_params); + + + +/* Errors */ + +#define GSF_ERROR (gsf_error_quark ()) + +typedef enum { + GSF_ERROR_OUT_OF_MEMORY, + GSF_ERROR_INVALID_DATA +} GsfError; + +GQuark gsf_error_quark (void); + + +G_END_DECLS + +#endif /* GSF_UTILS_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-zip-impl.h b/lib/libgsf-1.12.3/gsf/gsf-zip-impl.h new file mode 100644 index 0000000000..6c5c431ade --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-zip-impl.h @@ -0,0 +1,117 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-zip-impl.h: + * + * Copyright (C) 2002-2004 Tambet Ingo (tambet@ximian.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_ZIP_IMPL_H +#define GSF_ZIP_IMPL_H + +#include /* for GsfZipCompressionMethod */ + +G_BEGIN_DECLS + +#define ZIP_HEADER_SIZE 30 +#define ZIP_HEADER_VERSION 4 +#define ZIP_HEADER_OS 5 +#define ZIP_HEADER_FLAGS 6 +#define ZIP_HEADER_COMP_METHOD 8 +#define ZIP_HEADER_TIME 10 +#define ZIP_HEADER_CRC 14 +#define ZIP_HEADER_COMP_SIZE 18 +#define ZIP_HEADER_UNCOMP_SIZE 22 +#define ZIP_HEADER_NAME_LEN 26 +#define ZIP_HEADER_EXTRA_LEN 28 + +#define ZIP_TRAILER_SIZE 22 +#define ZIP_TRAILER_DISK 4 +#define ZIP_TRAILER_DIR_DISK 6 +#define ZIP_TRAILER_ENTRIES 8 +#define ZIP_TRAILER_TOTAL_ENTRIES 10 +#define ZIP_TRAILER_DIR_SIZE 12 +#define ZIP_TRAILER_DIR_POS 16 +#define ZIP_TRAILER_COMMENT_SIZE 20 + +#define ZIP_DIRENT_SIZE 46 +#define ZIP_DIRENT_ENCODER 4 +#define ZIP_DIRENT_EXTRACT 6 +#define ZIP_DIRENT_FLAGS 8 +#define ZIP_DIRENT_COMPR_METHOD 10 +#define ZIP_DIRENT_DOSTIME 12 +#define ZIP_DIRENT_CRC32 16 +#define ZIP_DIRENT_CSIZE 20 +#define ZIP_DIRENT_USIZE 24 +#define ZIP_DIRENT_NAME_SIZE 28 +#define ZIP_DIRENT_EXTRAS_SIZE 30 +#define ZIP_DIRENT_COMMENT_SIZE 32 +#define ZIP_DIRENT_DISKSTART 34 +#define ZIP_DIRENT_FILE_TYPE 36 +#define ZIP_DIRENT_FILE_MODE 38 +#define ZIP_DIRENT_OFFSET 42 + +#define ZIP_FILE_HEADER_SIZE 30 +#define ZIP_FILE_HEADER_EXTRACT 4 +#define ZIP_FILE_HEADER_FLAGS 6 +#define ZIP_FILE_HEADER_COMPR_METHOD 8 +#define ZIP_FILE_HEADER_DOSTIME 10 +#define ZIP_FILE_HEADER_CRC32 14 +#define ZIP_FILE_HEADER_CSIZE 18 +#define ZIP_FILE_HEADER_USIZE 22 +#define ZIP_FILE_HEADER_NAME_SIZE 26 +#define ZIP_FILE_HEADER_EXTRAS_SIZE 28 + +#define ZIP_NAME_SEPARATOR '/' + +#define ZIP_BLOCK_SIZE 32768 +#define ZIP_BUF_SIZE 512 + + +/* z_flags */ +#define ZZIP_IS_ENCRYPTED(p) ((*(unsigned char*)p)&1) +#define ZZIP_IS_COMPRLEVEL(p) (((*(unsigned char*)p)>>1)&3) +#define ZZIP_IS_STREAMED(p) (((*(unsigned char*)p)>>3)&1) + +typedef struct { + char *name; + GsfZipCompressionMethod compr_method; + guint32 crc32; + size_t csize; + size_t usize; + gsf_off_t offset; + gsf_off_t data_offset; + guint32 dostime; +} GsfZipDirent; + +typedef struct { + char *name; + gboolean is_directory; + GsfZipDirent *dirent; + GSList *children, *last_child; +} GsfZipVDir; + +GsfZipDirent *gsf_zip_dirent_new (void); +void gsf_zip_dirent_free (GsfZipDirent *dirent); + +GsfZipVDir *gsf_vdir_new (char const *name, gboolean is_directory, + GsfZipDirent *dirent); +void gsf_vdir_free (GsfZipVDir *vdir, gboolean free_dirent); +void gsf_vdir_add_child (GsfZipVDir *vdir, GsfZipVDir *child); + +G_END_DECLS + +#endif /* GSF_ZIP_IMPL_H */ diff --git a/lib/libgsf-1.12.3/gsf/gsf-zip-utils.c b/lib/libgsf-1.12.3/gsf/gsf-zip-utils.c new file mode 100644 index 0000000000..504c1416f5 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf-zip-utils.c @@ -0,0 +1,85 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf-zip-utils.c: tools for zip archive output. + * + * Copyright (C) 2002-2004 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Outc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +#include +#include +#include +#include +#include "gsf-zip-impl.h" + +/* Doesn't do much, but include for symmetry */ +GsfZipDirent* +gsf_zip_dirent_new (void) +{ + return g_new0 (GsfZipDirent, 1); +} + +void +gsf_zip_dirent_free (GsfZipDirent *dirent) +{ + g_return_if_fail (dirent != NULL); + + g_free (dirent->name); + dirent->name = NULL; + + g_free (dirent); +} + +GsfZipVDir * +gsf_vdir_new (char const *name, gboolean is_directory, GsfZipDirent *dirent) +{ + GsfZipVDir *vdir = g_new (GsfZipVDir, 1); + + vdir->name = g_strdup (name); + vdir->is_directory = is_directory; + vdir->dirent = dirent; + vdir->children = NULL; + return vdir; +} + +void +gsf_vdir_free (GsfZipVDir *vdir, gboolean free_dirent) +{ + GSList *l; + + if (!vdir) + return; + + for (l = vdir->children; l; l = l->next) + gsf_vdir_free ((GsfZipVDir *)l->data, free_dirent); + + g_slist_free (vdir->children); + g_free (vdir->name); + if (free_dirent && vdir->dirent) + gsf_zip_dirent_free (vdir->dirent); + g_free (vdir); +} + +void +gsf_vdir_add_child (GsfZipVDir *vdir, GsfZipVDir *child) +{ + GSList *tail = g_slist_append (NULL, child); + if (vdir->children) + vdir->last_child->next = tail; + else + vdir->children = tail; + vdir->last_child = tail; +} diff --git a/lib/libgsf-1.12.3/gsf/gsf.h b/lib/libgsf-1.12.3/gsf/gsf.h new file mode 100644 index 0000000000..8e0bdab454 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/gsf.h @@ -0,0 +1,48 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * gsf.h: + * + * Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#ifndef GSF_H +#define GSF_H + +#include + +G_BEGIN_DECLS + +typedef struct _GsfInput GsfInput; +typedef struct _GsfInfile GsfInfile; + +typedef struct _GsfOutput GsfOutput; +typedef struct _GsfOutfile GsfOutfile; + +typedef struct _GsfDocProp GsfDocProp; +typedef struct _GsfDocMetaData GsfDocMetaData; +typedef struct _GsfTimestamp GsfTimestamp; + +/* FIXME: + * gsf_off_t is really supposed to be the widest type off_t can be configured + * to on the platform + */ +typedef gint64 gsf_off_t; +#define GSF_OFF_T_FORMAT G_GINT64_FORMAT + +G_END_DECLS + +#endif /* GSF_H */ diff --git a/lib/libgsf-1.12.3/gsf/version.c.in b/lib/libgsf-1.12.3/gsf/version.c.in new file mode 100644 index 0000000000..dd19cc95d9 --- /dev/null +++ b/lib/libgsf-1.12.3/gsf/version.c.in @@ -0,0 +1,3 @@ +int libgsf_major_version = @LIBGSF_MAJOR_VERSION@; /* The ABI version */ +int libgsf_minor_version = @LIBGSF_MINOR_VERSION@; /* The API version */ +int libgsf_micro_version = @LIBGSF_MICRO_VERSION@; /* bug fixes */ diff --git a/lib/libgsf-1.12.3/gtk-doc.make b/lib/libgsf-1.12.3/gtk-doc.make new file mode 100644 index 0000000000..d50629a1b9 --- /dev/null +++ b/lib/libgsf-1.12.3/gtk-doc.make @@ -0,0 +1,153 @@ +# -*- mode: makefile -*- + +#################################### +# Everything below here is generic # +#################################### + +if GTK_DOC_USE_LIBTOOL +GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) +else +GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) +endif + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) + +EXTRA_DIST = \ + $(content_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt + +DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \ + $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals + +CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS) + +if ENABLE_GTK_DOC +all-local: html-build.stamp + +#### scan #### + +scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) + @echo 'gtk-doc: Scanning header files' + @-chmod -R u+w $(srcdir) + if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \ + else \ + cd $(srcdir) ; \ + for i in $(SCANOBJ_FILES) ; do \ + test -f $$i || touch $$i ; \ + done \ + fi + cd $(srcdir) && \ + gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES) + touch scan-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp + @true + +#### templates #### + +tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt + @echo 'gtk-doc: Rebuilding template files' + @-chmod -R u+w $(srcdir) + cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) + touch tmpl-build.stamp + +tmpl.stamp: tmpl-build.stamp + @true + +#### xml #### + +sgml-build.stamp: tmpl.stamp $(CFILE_GLOB) $(srcdir)/tmpl/*.sgml $(expand_content_files) + @echo 'gtk-doc: Building XML' + @-chmod -R u+w $(srcdir) + cd $(srcdir) && \ + gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS) + touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo 'gtk-doc: Building HTML' + @-chmod -R u+w $(srcdir) + rm -rf $(srcdir)/html + mkdir $(srcdir)/html + cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) + test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html ) + @echo 'gtk-doc: Fixing cross-references' + cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + touch html-build.stamp +else +all-local: +endif + +############## + +clean-local: + rm -f *~ *.bak + rm -rf .libs + +maintainer-clean-local: clean + cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + +install-data-local: + installfiles=`echo $(srcdir)/html/*`; \ + if test "$$installfiles" = '$(srcdir)/html/*'; \ + then echo '-- Nothing to install' ; \ + else \ + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + echo '-- Installing $(srcdir)/html/index.sgml' ; \ + $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \ + fi + +uninstall-local: + rm -f $(DESTDIR)$(TARGET_DIR)/* + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/tmpl + mkdir $(distdir)/xml + mkdir $(distdir)/html + -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl + -cp $(srcdir)/xml/*.xml $(distdir)/xml + -cp $(srcdir)/html/* $(distdir)/html + if test -f $(srcdir)/$(DOC_MODULE).types; then \ + cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \ + fi + +.PHONY : dist-hook-local diff --git a/lib/libgsf-1.12.3/install-sh b/lib/libgsf-1.12.3/install-sh new file mode 100755 index 0000000000..6ce63b9f76 --- /dev/null +++ b/lib/libgsf-1.12.3/install-sh @@ -0,0 +1,294 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. 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}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# 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 [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/lib/libgsf-1.12.3/intltool-extract.in b/lib/libgsf-1.12.3/intltool-extract.in new file mode 100644 index 0000000000..adfa97134d --- /dev/null +++ b/lib/libgsf-1.12.3/intltool-extract.in @@ -0,0 +1,839 @@ +#!@INTLTOOL_PERL@ -w +# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +# +# The Intltool Message Extractor +# +# Copyright (C) 2000-2001, 2003 Free Software Foundation. +# +# Intltool 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. +# +# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, 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. +# +# Authors: Kenneth Christiansen +# Darin Adler +# + +## Release information +my $PROGRAM = "intltool-extract"; +my $PACKAGE = "intltool"; +my $VERSION = "0.34.1"; + +## Loaded modules +use strict; +use File::Basename; +use Getopt::Long; + +## Scalars used by the option stuff +my $TYPE_ARG = "0"; +my $LOCAL_ARG = "0"; +my $HELP_ARG = "0"; +my $VERSION_ARG = "0"; +my $UPDATE_ARG = "0"; +my $QUIET_ARG = "0"; +my $SRCDIR_ARG = "."; + +my $FILE; +my $OUTFILE; + +my $gettext_type = ""; +my $input; +my %messages = (); +my %loc = (); +my %count = (); +my %comments = (); +my $strcount = 0; + +my $XMLCOMMENT = ""; + +## Use this instead of \w for XML files to handle more possible characters. +my $w = "[-A-Za-z0-9._:]"; + +## Always print first +$| = 1; + +## Handle options +GetOptions ( + "type=s" => \$TYPE_ARG, + "local|l" => \$LOCAL_ARG, + "help|h" => \$HELP_ARG, + "version|v" => \$VERSION_ARG, + "update" => \$UPDATE_ARG, + "quiet|q" => \$QUIET_ARG, + "srcdir=s" => \$SRCDIR_ARG, + ) or &error; + +&split_on_argument; + + +## Check for options. +## This section will check for the different options. + +sub split_on_argument { + + if ($VERSION_ARG) { + &version; + + } elsif ($HELP_ARG) { + &help; + + } elsif ($LOCAL_ARG) { + &place_local; + &extract; + + } elsif ($UPDATE_ARG) { + &place_normal; + &extract; + + } elsif (@ARGV > 0) { + &place_normal; + &message; + &extract; + + } else { + &help; + + } +} + +sub place_normal { + $FILE = $ARGV[0]; + $OUTFILE = "$FILE.h"; +} + +sub place_local { + $FILE = $ARGV[0]; + $OUTFILE = fileparse($FILE, ()); + if (!-e "tmp/") { + system("mkdir tmp/"); + } + $OUTFILE = "./tmp/$OUTFILE.h" +} + +sub determine_type { + if ($TYPE_ARG =~ /^gettext\/(.*)/) { + $gettext_type=$1 + } +} + +## Sub for printing release information +sub version{ + print <<_EOF_; +${PROGRAM} (${PACKAGE}) $VERSION +Copyright (C) 2000, 2003 Free Software Foundation, Inc. +Written by Kenneth Christiansen, 2000. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +_EOF_ + exit; +} + +## Sub for printing usage information +sub help { + print <<_EOF_; +Usage: ${PROGRAM} [OPTION]... [FILENAME] +Generates a header file from an XML source file. + +It grabs all strings between <_translatable_node> and its end tag in +XML files. Read manpage (man ${PROGRAM}) for more info. + + --type=TYPE Specify the file type of FILENAME. Currently supports: + "gettext/glade", "gettext/ini", "gettext/keys" + "gettext/rfc822deb", "gettext/schemas", + "gettext/scheme", "gettext/xml" + -l, --local Writes output into current working directory + (conflicts with --update) + --update Writes output into the same directory the source file + reside (conflicts with --local) + --srcdir Root of the source tree + -v, --version Output version information and exit + -h, --help Display this help and exit + -q, --quiet Quiet mode + +Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") +or send email to . +_EOF_ + exit; +} + +## Sub for printing error messages +sub error{ + print STDERR "Try `${PROGRAM} --help' for more information.\n"; + exit; +} + +sub message { + print "Generating C format header file for translation.\n" unless $QUIET_ARG; +} + +sub extract { + &determine_type; + + &convert; + + open OUT, ">$OUTFILE"; + binmode (OUT) if $^O eq 'MSWin32'; + &msg_write; + close OUT; + + print "Wrote $OUTFILE\n" unless $QUIET_ARG; +} + +sub convert { + + ## Reading the file + { + local (*IN); + local $/; #slurp mode + open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!"; + $input = ; + } + + &type_ini if $gettext_type eq "ini"; + &type_keys if $gettext_type eq "keys"; + &type_xml if $gettext_type eq "xml"; + &type_glade if $gettext_type eq "glade"; + &type_scheme if $gettext_type eq "scheme"; + &type_schemas if $gettext_type eq "schemas"; + &type_rfc822deb if $gettext_type eq "rfc822deb"; +} + +sub entity_decode_minimal +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + + return $_; +} + +sub entity_decode +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + s/<//g; + + return $_; +} + +sub escape_char +{ + return '\"' if $_ eq '"'; + return '\n' if $_ eq "\n"; + return '\\' if $_ eq '\\'; + + return $_; +} + +sub escape +{ + my ($string) = @_; + return join "", map &escape_char, split //, $string; +} + +sub type_ini { + ### For generic translatable desktop files ### + while ($input =~ /^_.*=(.*)$/mg) { + $messages{$1} = []; + } +} + +sub type_keys { + ### For generic translatable mime/keys files ### + while ($input =~ /^\s*_\w+=(.*)$/mg) { + $messages{$1} = []; + } +} + +sub type_xml { + ### For generic translatable XML files ### + my $tree = readXml($input); + parseTree(0, $tree); +} + +sub print_var { + my $var = shift; + my $vartype = ref $var; + + if ($vartype =~ /ARRAY/) { + my @arr = @{$var}; + print "[ "; + foreach my $el (@arr) { + print_var($el); + print ", "; + } + print "] "; + } elsif ($vartype =~ /HASH/) { + my %hash = %{$var}; + print "{ "; + foreach my $key (keys %hash) { + print "$key => "; + print_var($hash{$key}); + print ", "; + } + print "} "; + } else { + print $var; + } +} + +# Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment) +sub getAttributeString +{ + my $sub = shift; + my $do_translate = shift || 1; + my $language = shift || ""; + my $translate = shift; + my $result = ""; + foreach my $e (reverse(sort(keys %{ $sub }))) { + my $key = $e; + my $string = $sub->{$e}; + my $quote = '"'; + + $string =~ s/^[\s]+//; + $string =~ s/[\s]+$//; + + if ($string =~ /^'.*'$/) + { + $quote = "'"; + } + $string =~ s/^['"]//g; + $string =~ s/['"]$//g; + + ## differences from intltool-merge.in.in + if ($key =~ /^_/) { + $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT; + $messages{entity_decode($string)} = []; + $$translate = 2; + } + ## differences end here from intltool-merge.in.in + $result .= " $key=$quote$string$quote"; + } + return $result; +} + +# Verbatim copy from intltool-merge.in.in +sub getXMLstring +{ + my $ref = shift; + my $spacepreserve = shift || 0; + my @list = @{ $ref }; + my $result = ""; + + my $count = scalar(@list); + my $attrs = $list[0]; + my $index = 1; + + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + + while ($index < $count) { + my $type = $list[$index]; + my $content = $list[$index+1]; + if (! $type ) { + # We've got CDATA + if ($content) { + # lets strip the whitespace here, and *ONLY* here + $content =~ s/\s+/ /gs if (!$spacepreserve); + $result .= $content; + } + } elsif ( "$type" ne "1" ) { + # We've got another element + $result .= "<$type"; + $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements + if ($content) { + my $subresult = getXMLstring($content, $spacepreserve); + if ($subresult) { + $result .= ">".$subresult . ""; + } else { + $result .= "/>"; + } + } else { + $result .= "/>"; + } + } + $index += 2; + } + return $result; +} + +# Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed +# Translate list of nodes if necessary +sub translate_subnodes +{ + my $fh = shift; + my $content = shift; + my $language = shift || ""; + my $singlelang = shift || 0; + my $spacepreserve = shift || 0; + + my @nodes = @{ $content }; + + my $count = scalar(@nodes); + my $index = 0; + while ($index < $count) { + my $type = $nodes[$index]; + my $rest = $nodes[$index+1]; + traverse($fh, $type, $rest, $language, $spacepreserve); + $index += 2; + } +} + +# Based on traverse() in intltool-merge.in.in +sub traverse +{ + my $fh = shift; # unused, to allow us to sync code between -merge and -extract + my $nodename = shift; + my $content = shift; + my $language = shift || ""; + my $spacepreserve = shift || 0; + + if ($nodename && "$nodename" eq "1") { + $XMLCOMMENT = $content; + } elsif ($nodename) { + # element + my @all = @{ $content }; + my $attrs = shift @all; + my $translate = 0; + my $outattr = getAttributeString($attrs, 1, $language, \$translate); + + if ($nodename =~ /^_/) { + $translate = 1; + $nodename =~ s/^_//; + } + my $lookup = ''; + + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + if ($translate) { + $lookup = getXMLstring($content, $spacepreserve); + if (!$spacepreserve) { + $lookup =~ s/^\s+//s; + $lookup =~ s/\s+$//s; + } + + if ($lookup && $translate != 2) { + $comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT; + $messages{$lookup} = []; + } elsif ($translate == 2) { + translate_subnodes($fh, \@all, $language, 1, $spacepreserve); + } + } else { + $XMLCOMMENT = ""; + my $count = scalar(@all); + if ($count > 0) { + my $index = 0; + while ($index < $count) { + my $type = $all[$index]; + my $rest = $all[$index+1]; + traverse($fh, $type, $rest, $language, $spacepreserve); + $index += 2; + } + } + } + $XMLCOMMENT = ""; + } +} + + +# Verbatim copy from intltool-merge.in.in, $fh for compatibility +sub parseTree +{ + my $fh = shift; + my $ref = shift; + my $language = shift || ""; + + my $name = shift @{ $ref }; + my $cont = shift @{ $ref }; + + while (!$name || "$name" eq "1") { + $name = shift @{ $ref }; + $cont = shift @{ $ref }; + } + + my $spacepreserve = 0; + my $attrs = @{$cont}[0]; + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + traverse($fh, $name, $cont, $language, $spacepreserve); +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_comment +{ + my $expat = shift; + my $data = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 1 => $data; +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_cdatastart +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 0 => $expat->original_string(); +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_cdataend +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + $clist->[$pos] .= $expat->original_string(); +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_char +{ + my $expat = shift; + my $text = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + # Use original_string so that we retain escaped entities + # in CDATA sections. + # + if ($pos > 0 and $clist->[$pos - 1] eq '0') { + $clist->[$pos] .= $expat->original_string(); + } else { + push @$clist, 0 => $expat->original_string(); + } +} + +# Verbatim copy from intltool-merge.in.in +sub intltool_tree_start +{ + my $expat = shift; + my $tag = shift; + my @origlist = (); + + # Use original_string so that we retain escaped entities + # in attribute values. We must convert the string to an + # @origlist array to conform to the structure of the Tree + # Style. + # + my @original_array = split /\x/, $expat->original_string(); + my $source = $expat->original_string(); + + # Remove leading tag. + # + $source =~ s|^\s*<\s*(\S+)||s; + + # Grab attribute key/value pairs and push onto @origlist array. + # + while ($source) + { + if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; + push @origlist, $1; + push @origlist, '"' . $2 . '"'; + } + elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; + push @origlist, $1; + push @origlist, "'" . $2 . "'"; + } + else + { + last; + } + } + + my $ol = [ { @origlist } ]; + + push @{ $expat->{Lists} }, $expat->{Curlist}; + push @{ $expat->{Curlist} }, $tag => $ol; + $expat->{Curlist} = $ol; +} + +# Copied from intltool-merge.in.in and added comment handler. +sub readXml +{ + my $xmldoc = shift || return; + my $ret = eval 'require XML::Parser'; + if(!$ret) { + die "You must have XML::Parser installed to run $0\n\n"; + } + my $xp = new XML::Parser(Style => 'Tree'); + $xp->setHandlers(Char => \&intltool_tree_char); + $xp->setHandlers(Start => \&intltool_tree_start); + $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); + $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); + + ## differences from intltool-merge.in.in + $xp->setHandlers(Comment => \&intltool_tree_comment); + ## differences end here from intltool-merge.in.in + + my $tree = $xp->parse($xmldoc); + #print_var($tree); + +# Hello thereHowdydo +# would be: +# [foo, [{}, 1, "comment", head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, +# [{}, 0, "Howdy", ref, [{}]], 0, "do" ] ] + + return $tree; +} + +sub type_schemas { + ### For schemas XML files ### + + # FIXME: We should handle escaped < (less than) + while ($input =~ / + \s* + (\s*(?:\s*)?(.*?)\s*<\/default>\s*)? + (\s*(?:\s*)?(.*?)\s*<\/short>\s*)? + (\s*(?:\s*)?(.*?)\s*<\/long>\s*)? + <\/locale> + /sgx) { + my @totranslate = ($3,$6,$9); + my @eachcomment = ($2,$5,$8); + foreach (@totranslate) { + my $currentcomment = shift @eachcomment; + next if !$_; + s/\s+/ /g; + $messages{entity_decode_minimal($_)} = []; + $comments{entity_decode_minimal($_)} = $currentcomment if (defined($currentcomment)); + } + } +} + +sub type_rfc822deb { + ### For rfc822-style Debian configuration files ### + + my $lineno = 1; + my $type = ''; + while ($input =~ /\G(.*?)(^|\n)(_+)([^:]+):[ \t]*(.*?)(?=\n\S|$)/sg) + { + my ($pre, $newline, $underscore, $tag, $text) = ($1, $2, $3, $4, $5); + while ($pre =~ m/\n/g) + { + $lineno ++; + } + $lineno += length($newline); + my @str_list = rfc822deb_split(length($underscore), $text); + for my $str (@str_list) + { + $strcount++; + $messages{$str} = []; + $loc{$str} = $lineno; + $count{$str} = $strcount; + my $usercomment = ''; + while($pre =~ s/(^|\n)#([^\n]*)$//s) + { + $usercomment = "\n" . $2 . $usercomment; + } + $comments{$str} = $tag . $usercomment; + } + $lineno += ($text =~ s/\n//g); + } +} + +sub rfc822deb_split { + # Debian defines a special way to deal with rfc822-style files: + # when a value contain newlines, it consists of + # 1. a short form (first line) + # 2. a long description, all lines begin with a space, + # and paragraphs are separated by a single dot on a line + # This routine returns an array of all paragraphs, and reformat + # them. + # When first argument is 2, the string is a comma separated list of + # values. + my $type = shift; + my $text = shift; + $text =~ s/^[ \t]//mg; + return (split(/, */, $text, 0)) if $type ne 1; + return ($text) if $text !~ /\n/; + + $text =~ s/([^\n]*)\n//; + my @list = ($1); + my $str = ''; + for my $line (split (/\n/, $text)) + { + chomp $line; + if ($line =~ /^\.\s*$/) + { + # New paragraph + $str =~ s/\s*$//; + push(@list, $str); + $str = ''; + } + elsif ($line =~ /^\s/) + { + # Line which must not be reformatted + $str .= "\n" if length ($str) && $str !~ /\n$/; + $line =~ s/\s+$//; + $str .= $line."\n"; + } + else + { + # Continuation line, remove newline + $str .= " " if length ($str) && $str !~ /\n$/; + $str .= $line; + } + } + $str =~ s/\s*$//; + push(@list, $str) if length ($str); + return @list; +} + +sub type_glade { + ### For translatable Glade XML files ### + + my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message"; + + while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) { + # Glade sometimes uses tags that normally mark translatable things for + # little bits of non-translatable content. We work around this by not + # translating strings that only includes something like label4 or window1. + $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label|dialog)[0-9]+$/; + } + + while ($input =~ /(..[^<]*)<\/items>/sg) { + for my $item (split (/\n/, $1)) { + $messages{entity_decode($item)} = []; + } + } + + ## handle new glade files + while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"(?:\s+[^>]*comments\s*=\s*"([^"]*)")?[^>]*>([^<]+)<\/\1>/sg) { + $messages{entity_decode($3)} = [] unless $3 =~ /^(window|label)[0-9]+$/; + if (defined($2) and !($3 =~ /^(window|label)[0-9]+$/)) { + $comments{entity_decode($3)} = entity_decode($2) ; + } + } + while ($input =~ /]*)"\s+description="([^>]+)"\/>/sg) { + $messages{entity_decode_minimal($2)} = []; + } +} + +sub type_scheme { + my ($line, $i, $state, $str, $trcomment, $char); + for $line (split(/\n/, $input)) { + $i = 0; + $state = 0; # 0 - nothing, 1 - string, 2 - translatable string + while ($i < length($line)) { + if (substr($line,$i,1) eq "\"") { + if ($state == 2) { + $comments{$str} = $trcomment if ($trcomment); + $messages{$str} = []; + $str = ''; + $state = 0; $trcomment = ""; + } elsif ($state == 1) { + $str = ''; + $state = 0; $trcomment = ""; + } else { + $state = 1; + $str = ''; + if ($i>0 && substr($line,$i-1,1) eq '_') { + $state = 2; + } + } + } elsif (!$state) { + if (substr($line,$i,1) eq ";") { + $trcomment = substr($line,$i+1); + $trcomment =~ s/^;*\s*//; + $i = length($line); + } elsif ($trcomment && substr($line,$i,1) !~ /\s|\(|\)|_/) { + $trcomment = ""; + } + } else { + if (substr($line,$i,1) eq "\\") { + $char = substr($line,$i+1,1); + if ($char ne "\"" && $char ne "\\") { + $str = $str . "\\"; + } + $i++; + } + $str = $str . substr($line,$i,1); + } + $i++; + } + } +} + +sub msg_write { + my @msgids; + if (%count) + { + @msgids = sort { $count{$a} <=> $count{$b} } keys %count; + } + else + { + @msgids = sort keys %messages; + } + for my $message (@msgids) + { + my $offsetlines = 1; + $offsetlines++ if $message =~ /%/; + if (defined ($comments{$message})) + { + while ($comments{$message} =~ m/\n/g) + { + $offsetlines++; + } + } + print OUT "# ".($loc{$message} - $offsetlines). " \"$FILE\"\n" + if defined $loc{$message}; + print OUT "/* ".$comments{$message}." */\n" + if defined $comments{$message}; + print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/; + + my @lines = split (/\n/, $message, -1); + for (my $n = 0; $n < @lines; $n++) + { + if ($n == 0) + { + print OUT "char *s = N_(\""; + } + else + { + print OUT " \""; + } + + print OUT escape($lines[$n]); + + if ($n < @lines - 1) + { + print OUT "\\n\"\n"; + } + else + { + print OUT "\");\n"; + } + } + } +} + diff --git a/lib/libgsf-1.12.3/intltool-merge.in b/lib/libgsf-1.12.3/intltool-merge.in new file mode 100644 index 0000000000..b2b06b20c9 --- /dev/null +++ b/lib/libgsf-1.12.3/intltool-merge.in @@ -0,0 +1,1356 @@ +#!@INTLTOOL_PERL@ -w +# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +# +# The Intltool Message Merger +# +# Copyright (C) 2000, 2003 Free Software Foundation. +# Copyright (C) 2000, 2001 Eazel, Inc +# +# Intltool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 published by the Free Software Foundation. +# +# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, 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. +# +# Authors: Maciej Stachowiak +# Kenneth Christiansen +# Darin Adler +# +# Proper XML UTF-8'ification written by Cyrille Chepelov +# + +## Release information +my $PROGRAM = "intltool-merge"; +my $PACKAGE = "intltool"; +my $VERSION = "0.34.1"; + +## Loaded modules +use strict; +use Getopt::Long; +use Text::Wrap; +use File::Basename; + +my $must_end_tag = -1; +my $last_depth = -1; +my $translation_depth = -1; +my @tag_stack = (); +my @entered_tag = (); +my @translation_strings = (); +my $leading_space = ""; + +## Scalars used by the option stuff +my $HELP_ARG = 0; +my $VERSION_ARG = 0; +my $BA_STYLE_ARG = 0; +my $XML_STYLE_ARG = 0; +my $KEYS_STYLE_ARG = 0; +my $DESKTOP_STYLE_ARG = 0; +my $SCHEMAS_STYLE_ARG = 0; +my $RFC822DEB_STYLE_ARG = 0; +my $QUIET_ARG = 0; +my $PASS_THROUGH_ARG = 0; +my $UTF8_ARG = 0; +my $MULTIPLE_OUTPUT = 0; +my $cache_file; + +## Handle options +GetOptions +( + "help" => \$HELP_ARG, + "version" => \$VERSION_ARG, + "quiet|q" => \$QUIET_ARG, + "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility + "ba-style|b" => \$BA_STYLE_ARG, + "xml-style|x" => \$XML_STYLE_ARG, + "keys-style|k" => \$KEYS_STYLE_ARG, + "desktop-style|d" => \$DESKTOP_STYLE_ARG, + "schemas-style|s" => \$SCHEMAS_STYLE_ARG, + "rfc822deb-style|r" => \$RFC822DEB_STYLE_ARG, + "pass-through|p" => \$PASS_THROUGH_ARG, + "utf8|u" => \$UTF8_ARG, + "multiple-output|m" => \$MULTIPLE_OUTPUT, + "cache|c=s" => \$cache_file + ) or &error; + +my $PO_DIR; +my $FILE; +my $OUTFILE; + +my %po_files_by_lang = (); +my %translations = (); +my $iconv = $ENV{"ICONV"} || $ENV{"INTLTOOL_ICONV"} || "/usr/bin/iconv"; +my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); + +# Use this instead of \w for XML files to handle more possible characters. +my $w = "[-A-Za-z0-9._:]"; + +# XML quoted string contents +my $q = "[^\\\"]*"; + +## Check for options. + +if ($VERSION_ARG) +{ + &print_version; +} +elsif ($HELP_ARG) +{ + &print_help; +} +elsif ($BA_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &ba_merge_translations; + &finalize; +} +elsif ($XML_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &xml_merge_output; + &finalize; +} +elsif ($KEYS_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &keys_merge_translations; + &finalize; +} +elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &desktop_merge_translations; + &finalize; +} +elsif ($SCHEMAS_STYLE_ARG && @ARGV > 2) +{ + &utf8_sanity_check; + &preparation; + &print_message; + &schemas_merge_translations; + &finalize; +} +elsif ($RFC822DEB_STYLE_ARG && @ARGV > 2) +{ + &preparation; + &print_message; + &rfc822deb_merge_translations; + &finalize; +} +else +{ + &print_help; +} + +exit; + +## Sub for printing release information +sub print_version +{ + print <<_EOF_; +${PROGRAM} (${PACKAGE}) ${VERSION} +Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen. + +Copyright (C) 2000-2003 Free Software Foundation, Inc. +Copyright (C) 2000-2001 Eazel, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +_EOF_ + exit; +} + +## Sub for printing usage information +sub print_help +{ + print <<_EOF_; +Usage: ${PROGRAM} [OPTION]... PO_DIRECTORY FILENAME OUTPUT_FILE +Generates an output file that includes some localized attributes from an +untranslated source file. + +Mandatory options: (exactly one must be specified) + -b, --ba-style includes translations in the bonobo-activation style + -d, --desktop-style includes translations in the desktop style + -k, --keys-style includes translations in the keys style + -s, --schemas-style includes translations in the schemas style + -r, --rfc822deb-style includes translations in the RFC822 style + -x, --xml-style includes translations in the standard xml style + +Other options: + -u, --utf8 convert all strings to UTF-8 before merging + (default for everything except RFC822 style) + -p, --pass-through deprecated, does nothing and issues a warning + -m, --multiple-output output one localized file per locale, instead of + a single file containing all localized elements + -c, --cache=FILE specify cache file name + (usually \$top_builddir/po/.intltool-merge-cache) + -q, --quiet suppress most messages + --help display this help and exit + --version output version information and exit + +Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") +or send email to . +_EOF_ + exit; +} + + +## Sub for printing error messages +sub print_error +{ + print STDERR "Try `${PROGRAM} --help' for more information.\n"; + exit; +} + + +sub print_message +{ + print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG; +} + + +sub preparation +{ + $PO_DIR = $ARGV[0]; + $FILE = $ARGV[1]; + $OUTFILE = $ARGV[2]; + + &gather_po_files; + &get_translation_database; +} + +# General-purpose code for looking up translations in .po files + +sub po_file2lang +{ + my ($tmp) = @_; + $tmp =~ s/^.*\/(.*)\.po$/$1/; + return $tmp; +} + +sub gather_po_files +{ + for my $po_file (glob "$PO_DIR/*.po") { + $po_files_by_lang{po_file2lang($po_file)} = $po_file; + } +} + +sub get_local_charset +{ + my ($encoding) = @_; + my $alias_file = $ENV{"G_CHARSET_ALIAS"} || "/local/gnome/head/test/lib/charset.alias"; + + # seek character encoding aliases in charset.alias (glib) + + if (open CHARSET_ALIAS, $alias_file) + { + while () + { + next if /^\#/; + return $1 if (/^\s*([-._a-zA-Z0-9]+)\s+$encoding\b/i) + } + + close CHARSET_ALIAS; + } + + # if not found, return input string + + return $encoding; +} + +sub get_po_encoding +{ + my ($in_po_file) = @_; + my $encoding = ""; + + open IN_PO_FILE, $in_po_file or die; + while () + { + ## example: "Content-Type: text/plain; charset=ISO-8859-1\n" + if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) + { + $encoding = $1; + last; + } + } + close IN_PO_FILE; + + if (!$encoding) + { + print STDERR "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n" unless $QUIET_ARG; + $encoding = "ISO-8859-1"; + } + + system ("$iconv -f $encoding -t UTF-8 <$devnull 2>$devnull"); + if ($?) { + $encoding = get_local_charset($encoding); + } + + return $encoding +} + +sub utf8_sanity_check +{ + print STDERR "Warning: option --pass-through has been removed.\n" if $PASS_THROUGH_ARG; + $UTF8_ARG = 1; +} + +sub get_translation_database +{ + if ($cache_file) { + &get_cached_translation_database; + } else { + &create_translation_database; + } +} + +sub get_newest_po_age +{ + my $newest_age; + + foreach my $file (values %po_files_by_lang) + { + my $file_age = -M $file; + $newest_age = $file_age if !$newest_age || $file_age < $newest_age; + } + + $newest_age = 0 if !$newest_age; + + return $newest_age; +} + +sub create_cache +{ + print "Generating and caching the translation database\n" unless $QUIET_ARG; + + &create_translation_database; + + open CACHE, ">$cache_file" || die; + print CACHE join "\x01", %translations; + close CACHE; +} + +sub load_cache +{ + print "Found cached translation database\n" unless $QUIET_ARG; + + my $contents; + open CACHE, "<$cache_file" || die; + { + local $/; + $contents = ; + } + close CACHE; + %translations = split "\x01", $contents; +} + +sub get_cached_translation_database +{ + my $cache_file_age = -M $cache_file; + if (defined $cache_file_age) + { + if ($cache_file_age <= &get_newest_po_age) + { + &load_cache; + return; + } + print "Found too-old cached translation database\n" unless $QUIET_ARG; + } + + &create_cache; +} + +sub create_translation_database +{ + for my $lang (keys %po_files_by_lang) + { + my $po_file = $po_files_by_lang{$lang}; + + if ($UTF8_ARG) + { + my $encoding = get_po_encoding ($po_file); + + if (lc $encoding eq "utf-8") + { + open PO_FILE, "<$po_file"; + } + else + { + print STDERR "WARNING: $po_file is not in UTF-8 but $encoding, converting...\n" unless $QUIET_ARG;; + + open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|"; + } + } + else + { + open PO_FILE, "<$po_file"; + } + + my $nextfuzzy = 0; + my $inmsgid = 0; + my $inmsgstr = 0; + my $msgid = ""; + my $msgstr = ""; + + while () + { + $nextfuzzy = 1 if /^#, fuzzy/; + + if (/^msgid "((\\.|[^\\])*)"/ ) + { + $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; + $msgid = ""; + $msgstr = ""; + + if ($nextfuzzy) { + $inmsgid = 0; + } else { + $msgid = unescape_po_string($1); + $inmsgid = 1; + } + $inmsgstr = 0; + $nextfuzzy = 0; + } + + if (/^msgstr "((\\.|[^\\])*)"/) + { + $msgstr = unescape_po_string($1); + $inmsgstr = 1; + $inmsgid = 0; + } + + if (/^"((\\.|[^\\])*)"/) + { + $msgid .= unescape_po_string($1) if $inmsgid; + $msgstr .= unescape_po_string($1) if $inmsgstr; + } + } + $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; + } +} + +sub finalize +{ +} + +sub unescape_one_sequence +{ + my ($sequence) = @_; + + return "\\" if $sequence eq "\\\\"; + return "\"" if $sequence eq "\\\""; + return "\n" if $sequence eq "\\n"; + return "\r" if $sequence eq "\\r"; + return "\t" if $sequence eq "\\t"; + return "\b" if $sequence eq "\\b"; + return "\f" if $sequence eq "\\f"; + return "\a" if $sequence eq "\\a"; + return chr(11) if $sequence eq "\\v"; # vertical tab, see ascii(7) + + return chr(hex($1)) if ($sequence =~ /\\x([0-9a-fA-F]{2})/); + return chr(oct($1)) if ($sequence =~ /\\([0-7]{3})/); + + # FIXME: Is \0 supported as well? Kenneth and Rodney don't want it, see bug #48489 + + return $sequence; +} + +sub unescape_po_string +{ + my ($string) = @_; + + $string =~ s/(\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\.)/unescape_one_sequence($1)/eg; + + return $string; +} + +## NOTE: deal with < - < but not > - > because it seems its ok to have +## > in the entity. For further info please look at #84738. +sub entity_decode +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + s/</; + close INPUT; + } + + open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!"; + # Binmode so that selftest works ok if using a native Win32 Perl... + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) + { + print OUTPUT $1; + + my $node = $2 . "\n"; + + my @strings = (); + $_ = $node; + while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) { + push @strings, entity_decode($3); + } + print OUTPUT; + + my %langs; + for my $string (@strings) + { + for my $lang (keys %po_files_by_lang) + { + $langs{$lang} = 1 if $translations{$lang, $string}; + } + } + + for my $lang (sort keys %langs) + { + $_ = $node; + s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s; + s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg; + print OUTPUT; + } + } + + print OUTPUT $source; + + close OUTPUT; +} + + +## XML (non-bonobo-activation) merge code + + +# Process tag attributes +# Only parameter is a HASH containing attributes -> values mapping +sub getAttributeString +{ + my $sub = shift; + my $do_translate = shift || 0; + my $language = shift || ""; + my $result = ""; + my $translate = shift; + foreach my $e (reverse(sort(keys %{ $sub }))) { + my $key = $e; + my $string = $sub->{$e}; + my $quote = '"'; + + $string =~ s/^[\s]+//; + $string =~ s/[\s]+$//; + + if ($string =~ /^'.*'$/) + { + $quote = "'"; + } + $string =~ s/^['"]//g; + $string =~ s/['"]$//g; + + if ($do_translate && $key =~ /^_/) { + $key =~ s|^_||g; + if ($language) { + # Handle translation + my $decode_string = entity_decode($string); + my $translation = $translations{$language, $decode_string}; + if ($translation) { + $translation = entity_encode($translation); + $string = $translation; + } + $$translate = 2; + } else { + $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" $translate + } + } + + $result .= " $key=$quote$string$quote"; + } + return $result; +} + +# Returns a translatable string from XML node, it works on contents of every node in XML::Parser tree +sub getXMLstring +{ + my $ref = shift; + my $spacepreserve = shift || 0; + my @list = @{ $ref }; + my $result = ""; + + my $count = scalar(@list); + my $attrs = $list[0]; + my $index = 1; + + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + + while ($index < $count) { + my $type = $list[$index]; + my $content = $list[$index+1]; + if (! $type ) { + # We've got CDATA + if ($content) { + # lets strip the whitespace here, and *ONLY* here + $content =~ s/\s+/ /gs if (!$spacepreserve); + $result .= $content; + } + } elsif ( "$type" ne "1" ) { + # We've got another element + $result .= "<$type"; + $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements + if ($content) { + my $subresult = getXMLstring($content, $spacepreserve); + if ($subresult) { + $result .= ">".$subresult . ""; + } else { + $result .= "/>"; + } + } else { + $result .= "/>"; + } + } + $index += 2; + } + return $result; +} + +# Translate list of nodes if necessary +sub translate_subnodes +{ + my $fh = shift; + my $content = shift; + my $language = shift || ""; + my $singlelang = shift || 0; + my $spacepreserve = shift || 0; + + my @nodes = @{ $content }; + + my $count = scalar(@nodes); + my $index = 0; + while ($index < $count) { + my $type = $nodes[$index]; + my $rest = $nodes[$index+1]; + if ($singlelang) { + my $oldMO = $MULTIPLE_OUTPUT; + $MULTIPLE_OUTPUT = 1; + traverse($fh, $type, $rest, $language, $spacepreserve); + $MULTIPLE_OUTPUT = $oldMO; + } else { + traverse($fh, $type, $rest, $language, $spacepreserve); + } + $index += 2; + } +} + +sub isWellFormedXmlFragment +{ + my $ret = eval 'require XML::Parser'; + if(!$ret) { + die "You must have XML::Parser installed to run $0\n\n"; + } + + my $fragment = shift; + return 0 if (!$fragment); + + $fragment = "$fragment"; + my $xp = new XML::Parser(Style => 'Tree'); + my $tree = 0; + eval { $tree = $xp->parse($fragment); }; + return $tree; +} + +sub traverse +{ + my $fh = shift; + my $nodename = shift; + my $content = shift; + my $language = shift || ""; + my $spacepreserve = shift || 0; + + if (!$nodename) { + if ($content =~ /^[\s]*$/) { + $leading_space .= $content; + } + print $fh $content; + } else { + # element + my @all = @{ $content }; + my $attrs = shift @all; + my $translate = 0; + my $outattr = getAttributeString($attrs, 1, $language, \$translate); + + if ($nodename =~ /^_/) { + $translate = 1; + $nodename =~ s/^_//; + } + my $lookup = ''; + + $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/)); + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + print $fh "<$nodename", $outattr; + if ($translate) { + $lookup = getXMLstring($content, $spacepreserve); + if (!$spacepreserve) { + $lookup =~ s/^\s+//s; + $lookup =~ s/\s+$//s; + } + + if ($lookup || $translate == 2) { + my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup}); + if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) { + $translation = $lookup if (!$translation); + print $fh " xml:lang=\"", $language, "\"" if $language; + print $fh ">"; + if ($translate == 2) { + translate_subnodes($fh, \@all, $language, 1, $spacepreserve); + } else { + print $fh $translation; + } + print $fh ""; + + return; # this means there will be no same translation with xml:lang="$language"... + # if we want them both, just remove this "return" + } else { + print $fh ">"; + if ($translate == 2) { + translate_subnodes($fh, \@all, $language, 1, $spacepreserve); + } else { + print $fh $lookup; + } + print $fh ""; + } + } else { + print $fh "/>"; + } + + for my $lang (sort keys %po_files_by_lang) { + if ($MULTIPLE_OUTPUT && $lang ne "$language") { + next; + } + if ($lang) { + # Handle translation + # + my $translate = 0; + my $localattrs = getAttributeString($attrs, 1, $lang, \$translate); + my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup}); + if ($translate && !$translation) { + $translation = $lookup; + } + + if ($translation || $translate) { + print $fh "\n"; + $leading_space =~ s/.*\n//g; + print $fh $leading_space; + print $fh "<", $nodename, " xml:lang=\"", $lang, "\"", $localattrs, ">"; + if ($translate == 2) { + translate_subnodes($fh, \@all, $lang, 1, $spacepreserve); + } else { + print $fh $translation; + } + print $fh ""; + } + } + } + + } else { + my $count = scalar(@all); + if ($count > 0) { + print $fh ">"; + my $index = 0; + while ($index < $count) { + my $type = $all[$index]; + my $rest = $all[$index+1]; + traverse($fh, $type, $rest, $language, $spacepreserve); + $index += 2; + } + print $fh ""; + } else { + print $fh "/>"; + } + } + } +} + +sub intltool_tree_comment +{ + my $expat = shift; + my $data = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 1 => $data; +} + +sub intltool_tree_cdatastart +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + push @$clist, 0 => $expat->original_string(); +} + +sub intltool_tree_cdataend +{ + my $expat = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + $clist->[$pos] .= $expat->original_string(); +} + +sub intltool_tree_char +{ + my $expat = shift; + my $text = shift; + my $clist = $expat->{Curlist}; + my $pos = $#$clist; + + # Use original_string so that we retain escaped entities + # in CDATA sections. + # + if ($pos > 0 and $clist->[$pos - 1] eq '0') { + $clist->[$pos] .= $expat->original_string(); + } else { + push @$clist, 0 => $expat->original_string(); + } +} + +sub intltool_tree_start +{ + my $expat = shift; + my $tag = shift; + my @origlist = (); + + # Use original_string so that we retain escaped entities + # in attribute values. We must convert the string to an + # @origlist array to conform to the structure of the Tree + # Style. + # + my @original_array = split /\x/, $expat->original_string(); + my $source = $expat->original_string(); + + # Remove leading tag. + # + $source =~ s|^\s*<\s*(\S+)||s; + + # Grab attribute key/value pairs and push onto @origlist array. + # + while ($source) + { + if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s; + push @origlist, $1; + push @origlist, '"' . $2 . '"'; + } + elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/) + { + $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s; + push @origlist, $1; + push @origlist, "'" . $2 . "'"; + } + else + { + last; + } + } + + my $ol = [ { @origlist } ]; + + push @{ $expat->{Lists} }, $expat->{Curlist}; + push @{ $expat->{Curlist} }, $tag => $ol; + $expat->{Curlist} = $ol; +} + +sub readXml +{ + my $filename = shift || return; + if(!-f $filename) { + die "ERROR Cannot find filename: $filename\n"; + } + + my $ret = eval 'require XML::Parser'; + if(!$ret) { + die "You must have XML::Parser installed to run $0\n\n"; + } + my $xp = new XML::Parser(Style => 'Tree'); + $xp->setHandlers(Char => \&intltool_tree_char); + $xp->setHandlers(Start => \&intltool_tree_start); + $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart); + $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend); + my $tree = $xp->parsefile($filename); + +# Hello thereHowdydo +# would be: +# [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, [{}, +# 0, "Howdy", ref, [{}]], 0, "do" ] ] + + return $tree; +} + +sub print_header +{ + my $infile = shift; + my $fh = shift; + my $source; + + if(!-f $infile) { + die "ERROR Cannot find filename: $infile\n"; + } + + print $fh qq{\n}; + { + local $/; + open DOCINPUT, "<${FILE}" or die; + $source = ; + close DOCINPUT; + } + if ($source =~ /()/s) + { + print $fh "$1\n"; + } + elsif ($source =~ /(]*>)/s) + { + print $fh "$1\n"; + } +} + +sub parseTree +{ + my $fh = shift; + my $ref = shift; + my $language = shift || ""; + + my $name = shift @{ $ref }; + my $cont = shift @{ $ref }; + + while (!$name || "$name" eq "1") { + $name = shift @{ $ref }; + $cont = shift @{ $ref }; + } + + my $spacepreserve = 0; + my $attrs = @{$cont}[0]; + $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)); + + traverse($fh, $name, $cont, $language, $spacepreserve); +} + +sub xml_merge_output +{ + my $source; + + if ($MULTIPLE_OUTPUT) { + for my $lang (sort keys %po_files_by_lang) { + if ( ! -e $lang ) { + mkdir $lang or die "Cannot create subdirectory $lang: $!\n"; + } + open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n"; + binmode (OUTPUT) if $^O eq 'MSWin32'; + my $tree = readXml($FILE); + print_header($FILE, \*OUTPUT); + parseTree(\*OUTPUT, $tree, $lang); + close OUTPUT; + print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG; + } + } + open OUTPUT, ">$OUTFILE" or die "Cannot open $OUTFILE: $!\n"; + binmode (OUTPUT) if $^O eq 'MSWin32'; + my $tree = readXml($FILE); + print_header($FILE, \*OUTPUT); + parseTree(\*OUTPUT, $tree); + close OUTPUT; + print "CREATED $OUTFILE\n" unless $QUIET_ARG; +} + +sub keys_merge_translations +{ + open INPUT, "<${FILE}" or die; + open OUTPUT, ">${OUTFILE}" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while () + { + if (s/^(\s*)_(\w+=(.*))/$1$2/) + { + my $string = $3; + + print OUTPUT; + + my $non_translated_line = $_; + + for my $lang (sort keys %po_files_by_lang) + { + my $translation = $translations{$lang, $string}; + next if !$translation; + + $_ = $non_translated_line; + s/(\w+)=.*/[$lang]$1=$translation/; + print OUTPUT; + } + } + else + { + print OUTPUT; + } + } + + close OUTPUT; + close INPUT; +} + +sub desktop_merge_translations +{ + open INPUT, "<${FILE}" or die; + open OUTPUT, ">${OUTFILE}" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while () + { + if (s/^(\s*)_(\w+=(.*))/$1$2/) + { + my $string = $3; + + print OUTPUT; + + my $non_translated_line = $_; + + for my $lang (sort keys %po_files_by_lang) + { + my $translation = $translations{$lang, $string}; + next if !$translation; + + $_ = $non_translated_line; + s/(\w+)=.*/${1}[$lang]=$translation/; + print OUTPUT; + } + } + else + { + print OUTPUT; + } + } + + close OUTPUT; + close INPUT; +} + +sub schemas_merge_translations +{ + my $source; + + { + local $/; # slurp mode + open INPUT, "<$FILE" or die "can't open $FILE: $!"; + $source = ; + close INPUT; + } + + open OUTPUT, ">$OUTFILE" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + # FIXME: support attribute translations + + # Empty nodes never need translation, so unmark all of them. + # For example, <_foo/> is just replaced by . + $source =~ s|<\s*_($w+)\s*/>|<$1/>|g; + + while ($source =~ s/ + (.*?) + (\s+)((\s*) + (\s*(?:\s*)?(.*?)\s*<\/default>)?(\s*) + (\s*(?:\s*)?(.*?)\s*<\/short>)?(\s*) + (\s*(?:\s*)?(.*?)\s*<\/long>)?(\s*) + <\/locale>) + //sx) + { + print OUTPUT $1; + + my $locale_start_spaces = $2 ? $2 : ''; + my $default_spaces = $4 ? $4 : ''; + my $short_spaces = $7 ? $7 : ''; + my $long_spaces = $10 ? $10 : ''; + my $locale_end_spaces = $13 ? $13 : ''; + my $c_default_block = $3 ? $3 : ''; + my $default_string = $6 ? $6 : ''; + my $short_string = $9 ? $9 : ''; + my $long_string = $12 ? $12 : ''; + + print OUTPUT "$locale_start_spaces$c_default_block"; + + $default_string =~ s/\s+/ /g; + $default_string = entity_decode($default_string); + $short_string =~ s/\s+/ /g; + $short_string = entity_decode($short_string); + $long_string =~ s/\s+/ /g; + $long_string = entity_decode($long_string); + + for my $lang (sort keys %po_files_by_lang) + { + my $default_translation = $translations{$lang, $default_string}; + my $short_translation = $translations{$lang, $short_string}; + my $long_translation = $translations{$lang, $long_string}; + + next if (!$default_translation && !$short_translation && + !$long_translation); + + print OUTPUT "\n$locale_start_spaces"; + + print OUTPUT "$default_spaces"; + + if ($default_translation) + { + $default_translation = entity_encode($default_translation); + print OUTPUT "$default_translation"; + } + + print OUTPUT "$short_spaces"; + + if ($short_translation) + { + $short_translation = entity_encode($short_translation); + print OUTPUT "$short_translation"; + } + + print OUTPUT "$long_spaces"; + + if ($long_translation) + { + $long_translation = entity_encode($long_translation); + print OUTPUT "$long_translation"; + } + + print OUTPUT "$locale_end_spaces"; + } + } + + print OUTPUT $source; + + close OUTPUT; +} + +sub rfc822deb_merge_translations +{ + my %encodings = (); + for my $lang (keys %po_files_by_lang) { + $encodings{$lang} = ($UTF8_ARG ? 'UTF-8' : get_po_encoding($po_files_by_lang{$lang})); + } + + my $source; + + $Text::Wrap::huge = 'overflow'; + $Text::Wrap::break = qr/\n|\s(?=\S)/; + + { + local $/; # slurp mode + open INPUT, "<$FILE" or die "can't open $FILE: $!"; + $source = ; + close INPUT; + } + + open OUTPUT, ">${OUTFILE}" or die; + binmode (OUTPUT) if $^O eq 'MSWin32'; + + while ($source =~ /(^|\n+)(_*)([^:\s]+)(:[ \t]*)(.*?)(?=\n[\S\n]|$)/sg) + { + my $sep = $1; + my $non_translated_line = $3.$4; + my $string = $5; + my $underscore = length($2); + next if $underscore eq 0 && $non_translated_line =~ /^#/; + # Remove [] dummy strings + my $stripped = $string; + $stripped =~ s/\[\s[^\[\]]*\],/,/g if $underscore eq 2; + $stripped =~ s/\[\s[^\[\]]*\]$//; + $non_translated_line .= $stripped; + + print OUTPUT $sep.$non_translated_line; + + if ($underscore) + { + my @str_list = rfc822deb_split($underscore, $string); + + for my $lang (sort keys %po_files_by_lang) + { + my $is_translated = 1; + my $str_translated = ''; + my $first = 1; + + for my $str (@str_list) + { + my $translation = $translations{$lang, $str}; + + if (!$translation) + { + $is_translated = 0; + last; + } + + # $translation may also contain [] dummy + # strings, mostly to indicate an empty string + $translation =~ s/\[\s[^\[\]]*\]$//; + + if ($first) + { + if ($underscore eq 2) + { + $str_translated .= $translation; + } + else + { + $str_translated .= + Text::Tabs::expand($translation) . + "\n"; + } + } + else + { + if ($underscore eq 2) + { + $str_translated .= ', ' . $translation; + } + else + { + $str_translated .= Text::Tabs::expand( + Text::Wrap::wrap(' ', ' ', $translation)) . + "\n .\n"; + } + } + $first = 0; + + # To fix some problems with Text::Wrap::wrap + $str_translated =~ s/(\n )+\n/\n .\n/g; + } + next unless $is_translated; + + $str_translated =~ s/\n \.\n$//; + $str_translated =~ s/\s+$//; + + $_ = $non_translated_line; + s/^(\w+):\s*.*/$sep${1}-$lang.$encodings{$lang}: $str_translated/s; + print OUTPUT; + } + } + } + print OUTPUT "\n"; + + close OUTPUT; + close INPUT; +} + +sub rfc822deb_split +{ + # Debian defines a special way to deal with rfc822-style files: + # when a value contain newlines, it consists of + # 1. a short form (first line) + # 2. a long description, all lines begin with a space, + # and paragraphs are separated by a single dot on a line + # This routine returns an array of all paragraphs, and reformat + # them. + # When first argument is 2, the string is a comma separated list of + # values. + my $type = shift; + my $text = shift; + $text =~ s/^[ \t]//mg; + return (split(/, */, $text, 0)) if $type ne 1; + return ($text) if $text !~ /\n/; + + $text =~ s/([^\n]*)\n//; + my @list = ($1); + my $str = ''; + + for my $line (split (/\n/, $text)) + { + chomp $line; + if ($line =~ /^\.\s*$/) + { + # New paragraph + $str =~ s/\s*$//; + push(@list, $str); + $str = ''; + } + elsif ($line =~ /^\s/) + { + # Line which must not be reformatted + $str .= "\n" if length ($str) && $str !~ /\n$/; + $line =~ s/\s+$//; + $str .= $line."\n"; + } + else + { + # Continuation line, remove newline + $str .= " " if length ($str) && $str !~ /\n$/; + $str .= $line; + } + } + + $str =~ s/\s*$//; + push(@list, $str) if length ($str); + + return @list; +} + diff --git a/lib/libgsf-1.12.3/intltool-update.in b/lib/libgsf-1.12.3/intltool-update.in new file mode 100644 index 0000000000..cad5132600 --- /dev/null +++ b/lib/libgsf-1.12.3/intltool-update.in @@ -0,0 +1,1064 @@ +#!@INTLTOOL_PERL@ -w +# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- + +# +# The Intltool Message Updater +# +# Copyright (C) 2000-2003 Free Software Foundation. +# +# Intltool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 published by the Free Software Foundation. +# +# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, 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. +# +# Authors: Kenneth Christiansen +# Maciej Stachowiak +# Darin Adler + +## Release information +my $PROGRAM = "intltool-update"; +my $VERSION = "0.34.1"; +my $PACKAGE = "intltool"; + +## Loaded modules +use strict; +use Getopt::Long; +use Cwd; +use File::Copy; +use File::Find; + +## Scalars used by the option stuff +my $HELP_ARG = 0; +my $VERSION_ARG = 0; +my $DIST_ARG = 0; +my $POT_ARG = 0; +my $HEADERS_ARG = 0; +my $MAINTAIN_ARG = 0; +my $REPORT_ARG = 0; +my $VERBOSE = 0; +my $GETTEXT_PACKAGE = ""; +my $OUTPUT_FILE = ""; + +my @languages; +my %varhash = (); +my %po_files_by_lang = (); + +# Regular expressions to categorize file types. +# FIXME: Please check if the following is correct + +my $xml_support = +"xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required) +"ui|". # Bonobo specific - User Interface desc. files +"lang|". # ? +"glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required) +"scm(?:\\.in)*|". # ? (Note: .in is not required) +"oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files +"etspec|". # ? +"server(?:\\.in)+|". # Bonobo specific +"sheet(?:\\.in)+|". # ? +"schemas(?:\\.in)+|". # GConf specific +"pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer. +"kbd(?:\\.in)+"; # GOK specific. + +my $ini_support = +"icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec +"desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec +"caves(?:\\.in)+|". # GNOME Games specific +"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec +"soundlist(?:\\.in)+|". # GNOME specific +"keys(?:\\.in)+|". # GNOME Mime database specific +"theme(?:\\.in)+"; # http://www.freedesktop.org/Standards/icon-theme-spec + +my $buildin_gettext_support = +"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py"; + +## Always flush buffer when printing +$| = 1; + +## Sometimes the source tree will be rooted somewhere else. +my $SRCDIR = "."; +my $POTFILES_in; + +$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"}; +$POTFILES_in = "<$SRCDIR/POTFILES.in"; + +my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); + +## Handle options +GetOptions +( + "help" => \$HELP_ARG, + "version" => \$VERSION_ARG, + "dist|d" => \$DIST_ARG, + "pot|p" => \$POT_ARG, + "headers|s" => \$HEADERS_ARG, + "maintain|m" => \$MAINTAIN_ARG, + "report|r" => \$REPORT_ARG, + "verbose|x" => \$VERBOSE, + "gettext-package|g=s" => \$GETTEXT_PACKAGE, + "output-file|o=s" => \$OUTPUT_FILE, + ) or &Console_WriteError_InvalidOption; + +&Console_Write_IntltoolHelp if $HELP_ARG; +&Console_Write_IntltoolVersion if $VERSION_ARG; + +my $arg_count = ($DIST_ARG > 0) + + ($POT_ARG > 0) + + ($HEADERS_ARG > 0) + + ($MAINTAIN_ARG > 0) + + ($REPORT_ARG > 0); + +&Console_Write_IntltoolHelp if $arg_count > 1; + +# --version and --help don't require a module name +my $MODULE = $GETTEXT_PACKAGE || &FindPackageName; + +if ($POT_ARG) +{ + &GenerateHeaders; + &GeneratePOTemplate; +} +elsif ($HEADERS_ARG) +{ + &GenerateHeaders; +} +elsif ($MAINTAIN_ARG) +{ + &FindLeftoutFiles; +} +elsif ($REPORT_ARG) +{ + &GenerateHeaders; + &GeneratePOTemplate; + &Console_Write_CoverageReport; +} +elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/) +{ + my $lang = $ARGV[0]; + + ## Report error if the language file supplied + ## to the command line is non-existent + &Console_WriteError_NotExisting("$SRCDIR/$lang.po") + if ! -s "$SRCDIR/$lang.po"; + + if (!$DIST_ARG) + { + print "Working, please wait..." if $VERBOSE; + &GenerateHeaders; + &GeneratePOTemplate; + } + &POFile_Update ($lang, $OUTPUT_FILE); + &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE); +} +else +{ + &Console_Write_IntltoolHelp; +} + +exit; + +######### + +sub Console_Write_IntltoolVersion +{ + print <<_EOF_; +${PROGRAM} (${PACKAGE}) $VERSION +Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler. + +Copyright (C) 2000-2003 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +_EOF_ + exit; +} + +sub Console_Write_IntltoolHelp +{ + print <<_EOF_; +Usage: ${PROGRAM} [OPTION]... LANGCODE +Updates PO template files and merge them with the translations. + +Mode of operation (only one is allowed): + -p, --pot generate the PO template only + -s, --headers generate the header files in POTFILES.in + -m, --maintain search for left out files from POTFILES.in + -r, --report display a status report for the module + -d, --dist merge LANGCODE.po with existing PO template + +Extra options: + -g, --gettext-package=NAME override PO template name, useful with --pot + -o, --output-file=FILE write merged translation to FILE + -x, --verbose display lots of feedback + --help display this help and exit + --version output version information and exit + +Examples of use: +${PROGRAM} --pot just create a new PO template +${PROGRAM} xy create new PO template and merge xy.po with it + +Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") +or send email to . +_EOF_ + exit; +} + +sub echo_n +{ + my $str = shift; + my $ret = `echo "$str"`; + + $ret =~ s/\n$//; # do we need the "s" flag? + + return $ret; +} + +sub POFile_DetermineType ($) +{ + my $type = $_; + my $gettext_type; + + my $xml_regex = "(?:" . $xml_support . ")"; + my $ini_regex = "(?:" . $ini_support . ")"; + my $buildin_regex = "(?:" . $buildin_gettext_support . ")"; + + if ($type =~ /\[type: gettext\/([^\]].*)]/) + { + $gettext_type=$1; + } + elsif ($type =~ /schemas(\.in)+$/) + { + $gettext_type="schemas"; + } + elsif ($type =~ /glade2?(\.in)*$/) + { + $gettext_type="glade"; + } + elsif ($type =~ /scm(\.in)*$/) + { + $gettext_type="scheme"; + } + elsif ($type =~ /keys(\.in)+$/) + { + $gettext_type="keys"; + } + + # bucket types + + elsif ($type =~ /$xml_regex$/) + { + $gettext_type="xml"; + } + elsif ($type =~ /$ini_regex$/) + { + $gettext_type="ini"; + } + elsif ($type =~ /$buildin_regex$/) + { + $gettext_type="buildin"; + } + else + { + $gettext_type="unknown"; + } + + return "gettext\/$gettext_type"; +} + +sub TextFile_DetermineEncoding ($) +{ + my $gettext_code="ASCII"; # All files are ASCII by default + my $filetype=`file $_ | cut -d ' ' -f 2`; + + if ($? eq "0") + { + if ($filetype =~ /^(ISO|UTF)/) + { + chomp ($gettext_code = $filetype); + } + elsif ($filetype =~ /^XML/) + { + $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8 + } + } + + return $gettext_code; +} + +sub isNotValidMissing +{ + my ($file) = @_; + + return if $file =~ /^\{arch\}\/.*$/; + return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/; +} + +sub FindLeftoutFiles +{ + my (@buf_i18n_plain, + @buf_i18n_xml, + @buf_i18n_xml_unmarked, + @buf_i18n_ini, + @buf_potfiles, + @buf_potfiles_ignore, + @buf_allfiles, + @buf_allfiles_sorted, + @buf_potfiles_sorted + ); + + ## Search and find all translatable files + find sub { + push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/; + push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/; + push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/; + push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/; + }, ".."; + + + open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n"; + @buf_potfiles = grep !/^(#|\s*$)/, ; + close POTFILES; + + foreach (@buf_potfiles) { + s/^\[.*]\s*//; + } + + print "Searching for missing translatable files...\n" if $VERBOSE; + + ## Check if we should ignore some found files, when + ## comparing with POTFILES.in + foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") + { + (-s $ignore) or next; + + if ("$ignore" eq "POTFILES.ignore") + { + print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n". + "content of this file to POTFILES.skip.\n"; + } + + print "Found $ignore: Ignoring files...\n" if $VERBOSE; + open FILE, "<$ignore" or die "ERROR: Failed to open $ignore!\n"; + + while () + { + push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/; + } + close FILE; + + @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles); + } + + foreach my $file (@buf_i18n_plain) + { + my $in_comment = 0; + my $in_macro = 0; + + open FILE, "<$file"; + while () + { + # Handle continued multi-line comment. + if ($in_comment) + { + next unless s-.*\*/--; + $in_comment = 0; + } + + # Handle continued macro. + if ($in_macro) + { + $in_macro = 0 unless /\\$/; + next; + } + + # Handle start of macro (or any preprocessor directive). + if (/^\s*\#/) + { + $in_macro = 1 if /^([^\\]|\\.)*\\$/; + next; + } + + # Handle comments and quoted text. + while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy + { + my $match = $1; + if ($match eq "/*") + { + if (!s-/\*.*?\*/--) + { + s-/\*.*--; + $in_comment = 1; + } + } + elsif ($match eq "//") + { + s-//.*--; + } + else # ' or " + { + if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) + { + warn "mismatched quotes at line $. in $file\n"; + s-$match.*--; + } + } + } + + if (/\.GetString ?\(QUOTEDTEXT/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + ## Remove the first 3 chars and add newline + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + + if (/_\(QUOTEDTEXT/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + ## Remove the first 3 chars and add newline + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + } + close FILE; + } + + foreach my $file (@buf_i18n_xml) + { + open FILE, "<$file"; + + while () + { + # FIXME: share the pattern matching code with intltool-extract + if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + } + close FILE; + } + + foreach my $file (@buf_i18n_ini) + { + open FILE, "<$file"; + while () + { + if (/_(.*)=/) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + last; + } + } + close FILE; + } + + foreach my $file (@buf_i18n_xml_unmarked) + { + if (defined isNotValidMissing (unpack("x3 A*", $file))) { + push @buf_allfiles, unpack("x3 A*", $file) . "\n"; + } + } + + + @buf_allfiles_sorted = sort (@buf_allfiles); + @buf_potfiles_sorted = sort (@buf_potfiles); + + my %in2; + foreach (@buf_potfiles_sorted) + { + $in2{$_} = 1; + } + + my @result; + + foreach (@buf_allfiles_sorted) + { + if (!exists($in2{$_})) + { + push @result, $_ + } + } + + my @buf_potfiles_notexist; + + foreach (@buf_potfiles_sorted) + { + chomp (my $dummy = $_); + if ("$dummy" ne "" and ! -f "../$dummy") + { + push @buf_potfiles_notexist, $_; + } + } + + ## Save file with information about the files missing + ## if any, and give information about this procedure. + if (@result + @buf_potfiles_notexist > 0) + { + if (@result) + { + print "\n" if $VERBOSE; + unlink "missing"; + open OUT, ">missing"; + print OUT @result; + close OUT; + warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n". + "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n"; + print STDERR @result, "\n"; + warn "If some of these files are left out on purpose then please add them to\n". + "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n". + "of left out files has been written in the current directory.\n"; + } + if (@buf_potfiles_notexist) + { + unlink "notexist"; + open OUT, ">notexist"; + print OUT @buf_potfiles_notexist; + close OUT; + warn "\n" if ($VERBOSE or @result); + warn "\e[1mThe following files do not exist anymore:\e[0m\n\n"; + warn @buf_potfiles_notexist, "\n"; + warn "Please remove them from POTFILES.in or POTFILES.skip. A file \e[1m'notexist'\e[0m\n". + "containing this list of absent files has been written in the current directory.\n"; + } + } + + ## If there is nothing to complain about, notify the user + else { + print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE; + } +} + +sub Console_WriteError_InvalidOption +{ + ## Handle invalid arguments + print STDERR "Try `${PROGRAM} --help' for more information.\n"; + exit 1; +} + +sub GenerateHeaders +{ + my $EXTRACT = "@INTLTOOL_EXTRACT@"; + chomp $EXTRACT; + + $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"}; + + ## Generate the .h header files, so we can allow glade and + ## xml translation support + if (! -x "$EXTRACT") + { + print STDERR "\n *** The intltool-extract script wasn't found!" + ."\n *** Without it, intltool-update can not generate files.\n"; + exit; + } + else + { + open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n"; + + while () + { + chomp; + next if /^\[\s*encoding/; + + ## Find xml files in POTFILES.in and generate the + ## files with help from the extract script + + my $gettext_type= &POFile_DetermineType ($1); + + if (/\.($xml_support|$ini_support)$/ || /^\[/) + { + s/^\[[^\[].*]\s*//; + + my $filename = "../$_"; + + if ($VERBOSE) + { + system ($EXTRACT, "--update", "--srcdir=$SRCDIR", + "--type=$gettext_type", $filename); + } + else + { + system ($EXTRACT, "--update", "--type=$gettext_type", + "--srcdir=$SRCDIR", "--quiet", $filename); + } + } + } + close FILE; + } +} + +# +# Generate .pot file from POTFILES.in +# +sub GeneratePOTemplate +{ + my $XGETTEXT = $ENV{"XGETTEXT"} || "/usr/bin/xgettext"; + my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || ''; + chomp $XGETTEXT; + + if (! -x $XGETTEXT) + { + print STDERR " *** xgettext is not found on this system!\n". + " *** Without it, intltool-update can not extract strings.\n"; + exit; + } + + print "Building $MODULE.pot...\n" if $VERBOSE; + + open INFILE, $POTFILES_in; + unlink "POTFILES.in.temp"; + open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing"); + + my $gettext_support_nonascii = 0; + + # checks for GNU gettext >= 0.12 + my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`; + if ($? == 0) + { + $gettext_support_nonascii = 1; + } + else + { + # urge everybody to upgrade gettext + print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n". + " strings. That means you should install a version of gettext\n". + " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n". + " or have to let non-ASCII strings untranslated. (If there is any)\n"; + } + + my $encoding = "ASCII"; + my $forced_gettext_code; + my @temp_headers; + my $encoding_problem_is_reported = 0; + + while () + { + next if (/^#/ or /^\s*$/); + + chomp; + + my $gettext_code; + + if (/^\[\s*encoding:\s*(.*)\s*\]/) + { + $forced_gettext_code=$1; + } + elsif (/\.($xml_support|$ini_support)$/ || /^\[/) + { + s/^\[.*]\s*//; + print OUTFILE "../$_.h\n"; + push @temp_headers, "../$_.h"; + $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code); + } + else + { + if ($SRCDIR eq ".") { + print OUTFILE "../$_\n"; + } else { + print OUTFILE "$SRCDIR/../$_\n"; + } + $gettext_code = &TextFile_DetermineEncoding ("../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code); + } + + next if (! $gettext_support_nonascii); + + if (defined $forced_gettext_code) + { + $encoding=$forced_gettext_code; + } + elsif (defined $gettext_code and "$encoding" ne "$gettext_code") + { + if ($encoding eq "ASCII") + { + $encoding=$gettext_code; + } + elsif ($gettext_code ne "ASCII") + { + # Only report once because the message is quite long + if (! $encoding_problem_is_reported) + { + print STDERR "WARNING: You should use the same file encoding for all your project files,\n". + " but $PROGRAM thinks that most of the source files are in\n". + " $encoding encoding, while \"$_\" is (likely) in\n". + " $gettext_code encoding. If you are sure that all translatable strings\n". + " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n". + " line to POTFILES.in:\n\n". + " [encoding: UTF-8]\n\n". + " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n". + "(such warning message will only be reported once.)\n"; + $encoding_problem_is_reported = 1; + } + } + } + } + + close OUTFILE; + close INFILE; + + unlink "$MODULE.pot"; + my @xgettext_argument=("$XGETTEXT", + "--add-comments", + "--directory\=\.", + "--output\=$MODULE\.pot", + "--files-from\=\.\/POTFILES\.in\.temp"); + my $XGETTEXT_KEYWORDS = &FindPOTKeywords; + push @xgettext_argument, $XGETTEXT_KEYWORDS; + push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii); + push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS; + my $xgettext_command = join ' ', @xgettext_argument; + + # intercept xgettext error message + print "Running $xgettext_command\n" if $VERBOSE; + my $xgettext_error_msg = `$xgettext_command 2>\&1`; + my $command_failed = $?; + + unlink "POTFILES.in.temp"; + + print "Removing generated header (.h) files..." if $VERBOSE; + unlink foreach (@temp_headers); + print "done.\n" if $VERBOSE; + + if (! $command_failed) + { + if (! -e "$MODULE.pot") + { + print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE; + } + else + { + print "Wrote $MODULE.pot\n" if $VERBOSE; + } + } + else + { + if ($xgettext_error_msg =~ /--from-code/) + { + # replace non-ASCII error message with a more useful one. + print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n". + " string marked for translation. Please make sure that all strings marked\n". + " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n". + " following line to POTFILES.in and rerun $PROGRAM:\n\n". + " [encoding: UTF-8]\n\n"; + } + else + { + print STDERR "$xgettext_error_msg"; + if (-e "$MODULE.pot") + { + # is this possible? + print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n". + " Please consult error message above if there is any.\n"; + } + else + { + print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n". + " error message above if there is any.\n"; + } + } + exit (1); + } +} + +sub POFile_Update +{ + -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n"; + + my $MSGMERGE = $ENV{"MSGMERGE"} || "/usr/bin/msgmerge"; + my ($lang, $outfile) = @_; + + print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE; + + my $infile = "$SRCDIR/$lang.po"; + $outfile = "$SRCDIR/$lang.po" if ($outfile eq ""); + + # I think msgmerge won't overwrite old file if merge is not successful + system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot"); +} + +sub Console_WriteError_NotExisting +{ + my ($file) = @_; + + ## Report error if supplied language file is non-existing + print STDERR "$PROGRAM: $file does not exist!\n"; + print STDERR "Try '$PROGRAM --help' for more information.\n"; + exit; +} + +sub GatherPOFiles +{ + my @po_files = glob ("./*.po"); + + @languages = map (&POFile_GetLanguage, @po_files); + + foreach my $lang (@languages) + { + $po_files_by_lang{$lang} = shift (@po_files); + } +} + +sub POFile_GetLanguage ($) +{ + s/^(.*\/)?(.+)\.po$/$2/; + return $_; +} + +sub Console_Write_TranslationStatus +{ + my ($lang, $output_file) = @_; + my $MSGFMT = $ENV{"MSGFMT"} || "/usr/bin/msgfmt"; + + $output_file = "$SRCDIR/$lang.po" if ($output_file eq ""); + + system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file); +} + +sub Console_Write_CoverageReport +{ + my $MSGFMT = $ENV{"MSGFMT"} || "/usr/bin/msgfmt"; + + &GatherPOFiles; + + foreach my $lang (@languages) + { + print "$lang: "; + &POFile_Update ($lang, ""); + } + + print "\n\n * Current translation support in $MODULE \n\n"; + + foreach my $lang (@languages) + { + print "$lang: "; + system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po"); + } +} + +sub SubstituteVariable +{ + my ($str) = @_; + + # always need to rewind file whenever it has been accessed + seek (CONF, 0, 0); + + # cache each variable. varhash is global to we can add + # variables elsewhere. + while () + { + if (/^(\w+)=(.*)$/) + { + ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/; + } + } + + if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) + { + my $rest = $3; + my $untouched = $1; + my $sub = $varhash{$2}; + + return SubstituteVariable ("$untouched$sub$rest"); + } + + # We're using Perl backticks ` and "echo -n" here in order to + # expand any shell escapes (such as backticks themselves) in every variable + return echo_n ($str); +} + +sub CONF_Handle_Open +{ + my $base_dirname = getcwd(); + $base_dirname =~ s@.*/@@; + + my ($conf_in, $src_dir); + + if ($base_dirname =~ /^po(-.+)?$/) + { + if (-f "Makevars") + { + my $makefile_source; + + local (*IN); + open (IN, ") + { + if (/^top_builddir[ \t]*=/) + { + $src_dir = $_; + $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; + + chomp $src_dir; + if (-f "$src_dir" . "/configure.ac") { + $conf_in = "$src_dir" . "/configure.ac" . "\n"; + } else { + $conf_in = "$src_dir" . "/configure.in" . "\n"; + } + last; + } + } + close IN; + + $conf_in || die "Cannot find top_builddir in Makevars."; + } + elsif (-f "../configure.ac") + { + $conf_in = "../configure.ac"; + } + elsif (-f "../configure.in") + { + $conf_in = "../configure.in"; + } + else + { + my $makefile_source; + + local (*IN); + open (IN, ") + { + if (/^top_srcdir[ \t]*=/) + { + $src_dir = $_; + $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; + + chomp $src_dir; + $conf_in = "$src_dir" . "/configure.in" . "\n"; + + last; + } + } + close IN; + + $conf_in || die "Cannot find top_srcdir in Makefile."; + } + + open (CONF, "<$conf_in"); + } + else + { + print STDERR "$PROGRAM: Unable to proceed.\n" . + "Make sure to run this script inside the po directory.\n"; + exit; + } +} + +sub FindPackageName +{ + my $version; + my $domain = &FindMakevarsDomain; + my $name = $domain || "untitled"; + + &CONF_Handle_Open; + + my $conf_source; { + local (*IN); + open (IN, "<&CONF") || return $name; + seek (IN, 0, 0); + local $/; # slurp mode + $conf_source = ; + close IN; + } + + # priority for getting package name: + # 1. GETTEXT_PACKAGE + # 2. first argument of AC_INIT (with >= 2 arguments) + # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument) + + # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m + # the \s makes this not work, why? + if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m) + { + ($name, $version) = ($1, $2); + $name =~ s/[\[\]\s]//g; + $version =~ s/[\[\]\s]//g; + $varhash{"PACKAGE_NAME"} = $name; + $varhash{"PACKAGE"} = $name; + $varhash{"PACKAGE_VERSION"} = $version; + $varhash{"VERSION"} = $version; + } + + if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) + { + ($name, $version) = ($1, $2); + $name =~ s/[\[\]\s]//g; + $version =~ s/[\[\]\s]//g; + $varhash{"PACKAGE_NAME"} = $name; + $varhash{"PACKAGE"} = $name; + $varhash{"PACKAGE_VERSION"} = $version; + $varhash{"VERSION"} = $version; + } + + # \s makes this not work, why? + $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m; + + # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value + # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables. + $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g; + + $name = $domain if $domain; + + $name = SubstituteVariable ($name); + $name =~ s/^["'](.*)["']$/$1/; + + return $name if $name; +} + + +sub FindPOTKeywords +{ + + my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_"; + my $varname = "XGETTEXT_OPTIONS"; + my $make_source; { + local (*IN); + open (IN, "; + close IN; + } + + $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m; + + return $keywords; +} + +sub FindMakevarsDomain +{ + + my $domain = ""; + my $makevars_source; { + local (*IN); + open (IN, "; + close IN; + } + + $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m; + $domain =~ s/^\s+//; + $domain =~ s/\s+$//; + + return $domain; +} diff --git a/lib/libgsf-1.12.3/libgsf-1.pc.in b/lib/libgsf-1.12.3/libgsf-1.pc.in new file mode 100644 index 0000000000..dcc65952c4 --- /dev/null +++ b/lib/libgsf-1.12.3/libgsf-1.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libgsf-1 +Description: A library for reading and writing structured files (eg MS OLE and Zip) +Version: @VERSION@ +Requires: glib-2.0 gobject-2.0 libxml-2.0 +Libs: -L${libdir} -lgsf-1 +Cflags: -I${includedir}/libgsf-1 diff --git a/lib/libgsf-1.12.3/libgsf-1.spec.in b/lib/libgsf-1.12.3/libgsf-1.spec.in new file mode 100644 index 0000000000..49335ea702 --- /dev/null +++ b/lib/libgsf-1.12.3/libgsf-1.spec.in @@ -0,0 +1,83 @@ +%define name libgsf +%define version @VERSION@ +%define release 1 +%define prefix /usr + +Summary: GNOME Structured File library + +Name: %{name} +Version: %{version} +Release: %{release} +Group: System Environment/Libraries +License: LGPL + +Source: ftp://ftp.gnome.org/pub/GNOME/unstable/sources/libgsf/%{name}-%{version}.tar.gz +Buildroot: /var/tmp/%{name}-%{version}-%{release}-root +URL: http://www.gnumeric.org + +Requires: glib2 >= 2.6.0 +BuildRequires: glib2-devel >= 2.6.0 + +%description +A library for reading and writing structured files (eg MS OLE and Zip) + +%package devel +Summary: Support files necessary to compile applications with libgsf. +Group: Development/Libraries +Requires: libgsf + +%description devel +Libraries, headers, and support files necessary to compile applications using libgsf. + +%prep + +%setup + +%build +%ifarch alpha + MYARCH_FLAGS="--host=alpha-redhat-linux" +%endif + +if [ ! -f configure ]; then +CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%{prefix} +else +CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} +fi + +if [ "$SMP" != "" ]; then + (make "MAKE=make -k -j $SMP"; exit 0) + make +else + make +fi + +%install +if [ -d $RPM_BUILD_ROOT ]; then rm -r $RPM_BUILD_ROOT; fi +mkdir -p $RPM_BUILD_ROOT%{prefix} +make prefix=$RPM_BUILD_ROOT%{prefix} install + +%files +%defattr(644,root,root,755) +%doc AUTHORS COPYING README +%{prefix}/lib/lib*.so* + +%files devel +%defattr(644,root,root,755) +%{prefix}/lib/*a +%{prefix}/lib/pkgconfig/libgsf-*1.pc +%{prefix}/include/libgsf-1/* +%{prefix}/share/doc/libgsf/html/* + +%clean +rm -r $RPM_BUILD_ROOT + +%changelog +* Tue May 13 2003 Rui M. Seabra +- fix spec to reflect current stat of the build + +* Tue Jun 18 2002 Rui M. Seabra +- set permission correctly +- fix common mistake of Copyright flag into License flag. + +* Thu May 23 2002 Jody Goldberg +- Initial version diff --git a/lib/libgsf-1.12.3/libgsf-gnome-1.pc.in b/lib/libgsf-1.12.3/libgsf-gnome-1.pc.in new file mode 100644 index 0000000000..502f3b124a --- /dev/null +++ b/lib/libgsf-1.12.3/libgsf-gnome-1.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libgsf-gnome-1 +Description: GNOME specific extensions to libgsf +Version: @VERSION@ +Requires: libgsf-1 +Libs: -L${libdir} -lgsf-gnome-1 +Cflags: diff --git a/lib/libgsf-1.12.3/libgsf-gnome-1.spec.in b/lib/libgsf-1.12.3/libgsf-gnome-1.spec.in new file mode 100644 index 0000000000..b7813ed392 --- /dev/null +++ b/lib/libgsf-1.12.3/libgsf-gnome-1.spec.in @@ -0,0 +1,80 @@ +%define name libgsf-1 +%define version @VERSION@ +%define release 1 +%define prefix /usr + +Summary: GNOME specific extensions to libgsf + +Name: %{name} +Version: %{version} +Release: %{release} +Group: System Environment/Libraries +License: LGPL + +Source: ftp://ftp.gnome.org/pub/GNOME/unstable/sources/libgsf/libgsf-%{version}.tar.gz +Buildroot: /var/tmp/%{name}-%{version}-%{release}-root +URL: http://www.gnumeric.org + +Requires: libgsf-1 >= 1.3.0 gnome-vfs >= 2.0.0 + +%description +GNOME specific extensions to support bonobo and gnome-vfs + +%package devel +Summary: Support files necessary to compile applications with libgsf-gnome. +Group: Development/Libraries +Requires: libgsf-gnome-1 + +%description devel +Libraries, headers, and support files necessary to compile applications using +GNOME specific extensions to libgsf. + +%prep +%setup -n libgsf-%{version} + +%build +%ifarch alpha + MYARCH_FLAGS="--host=alpha-redhat-linux" +%endif + +if [ ! -f configure ]; then +CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%{prefix} +else +CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} +fi + +if [ "$SMP" != "" ]; then + (make "MAKE=make -k -j $SMP"; exit 0) + make +else + make +fi + +%install +if [ -d $RPM_BUILD_ROOT ]; then rm -r $RPM_BUILD_ROOT; fi +mkdir -p $RPM_BUILD_ROOT%{prefix} +make prefix=$RPM_BUILD_ROOT%{prefix} install + +%files +%defattr(644,root,root,755) +%doc AUTHORS COPYING README +%{prefix}/lib/lib*.so.* + +%files devel +%defattr(644,root,root,755) +%{prefix}/lib/lib*.so +%{prefix}/lib/*a +%{prefix}/include/libgsf-1/* ++%{prefix}/lib/pkgconfig/* ++%{prefix}/share/doc/* + +%clean +rm -r $RPM_BUILD_ROOT + +%changelog +* Sun Aug 03 2003 Joseph Frazee +- Fixed some things, %{setup} -n libgsf-%{version} and removed %files devel + %{prefix}/lib/*.sh and %{prefix}/share/doc/gsf/* + +* Thu Aug 15 2002 Jody Goldberg +- Initial version diff --git a/lib/libgsf-1.12.3/libgsf-win32-1.pc.in b/lib/libgsf-1.12.3/libgsf-win32-1.pc.in new file mode 100644 index 0000000000..29a9cd3e17 --- /dev/null +++ b/lib/libgsf-1.12.3/libgsf-win32-1.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libgsf-gnome-1 +Description: Win32 specific extensions to libgsf +Version: @VERSION@ +Requires: libgsf-1 +Libs: -L${libdir} -lgsf-win32-1 +Cflags: diff --git a/lib/libgsf-1.12.3/libgsf-zip.in b/lib/libgsf-1.12.3/libgsf-zip.in new file mode 100755 index 0000000000..2c07ccda34 --- /dev/null +++ b/lib/libgsf-1.12.3/libgsf-zip.in @@ -0,0 +1,23 @@ +#!/bin/sh + +# Build runtime and developer zipfiles for libgsf on Win32. + +ZIP=/tmp/libgsf-@VERSION@.zip +DEVZIP=/tmp/libgsf-dev-@VERSION@.zip + +cd @prefix@ +rm $ZIP + +DLLDIR=lib +[ -f bin/libgsf-1-@LIBGSF_MAJOR_VERSION@.dll ] && DLLDIR=bin + +zip $ZIP -@ <, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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" + +# 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.6 +TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42) Debian$Rev: 224 $" + + +# 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 <&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= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# 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 /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + 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 + case "$@ " in + " $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 +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +# 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) 2003 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 $EXIT_SUCCESS + ;; + + --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 $EXIT_SUCCESS + ;; + + --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 $EXIT_SUCCESS + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case "$arg_mode" in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit $EXIT_FAILURE + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${output}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +#define HAVE_DOS_BASED_FILE_SYSTEM +#ifndef DIR_SEPARATOR_2 +#define DIR_SEPARATOR_2 '\\' +#endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +char * basename (const char *name); +char * fnqualify(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +char * +basename (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; +} + +char * +fnqualify(const char *path) +{ + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); +#endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# 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='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + 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 \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + save_umask=`umask` + umask 0077 + if $mkdir "$tmpdir"; then + umask $save_umask + else + umask $save_umask + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "----------------------------------------------------------------------" + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $EXIT_SUCCESS + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/lib/libgsf-1.12.3/missing b/lib/libgsf-1.12.3/missing new file mode 100755 index 0000000000..fc54c64ec9 --- /dev/null +++ b/lib/libgsf-1.12.3/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/lib/libgsf-1.12.3/mkinstalldirs b/lib/libgsf-1.12.3/mkinstalldirs new file mode 100755 index 0000000000..d2d5f21b61 --- /dev/null +++ b/lib/libgsf-1.12.3/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/lib/libgsf-1.12.3/po/ChangeLog b/lib/libgsf-1.12.3/po/ChangeLog new file mode 100644 index 0000000000..540e3c2e83 --- /dev/null +++ b/lib/libgsf-1.12.3/po/ChangeLog @@ -0,0 +1,20 @@ +2005-09-06 Jody Goldberg + + * Release 1.12.3 + +2005-08-13 Morten Welinder + + * Release 1.12.2 + +2005-07-19 gettextize + + * Makefile.in.in: New file, from gettext-0.14.3. + * boldquot.sed: New file, from gettext-0.14.3. + * en@boldquot.header: New file, from gettext-0.14.3. + * en@quot.header: New file, from gettext-0.14.3. + * insert-header.sin: New file, from gettext-0.14.3. + * quot.sed: New file, from gettext-0.14.3. + * remove-potcdate.sin: New file, from gettext-0.14.3. + * Rules-quot: New file, from gettext-0.14.3. + * POTFILES.in: New file. + diff --git a/lib/libgsf-1.12.3/po/Makefile.in.in b/lib/libgsf-1.12.3/po/Makefile.in.in new file mode 100644 index 0000000000..8aab821852 --- /dev/null +++ b/lib/libgsf-1.12.3/po/Makefile.in.in @@ -0,0 +1,262 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. +# +# - Modified by Owen Taylor to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize +# +# - Modified by Rodney Dawes for use with intltool +# +# We have the following line for use by intltoolize: +# INTLTOOL_MAKEFILE + +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +datarootdir = @datarootdir@ +libdir = @libdir@ +localedir = $(libdir)/locale +gnulocaledir = $(datadir)/locale +gettextsrcdir = $(datadir)/glib-2.0/gettext/po +subdir = po +install_sh = @install_sh@ +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +CC = @CC@ +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist +GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = ChangeLog Makefile.in.in POTFILES.in \ +$(POFILES) $(SOURCES) +EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && gencat $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: $(CATALOGS) +all-no: + +$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(GENPOT) + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ + fi + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "glib"; then \ + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + done + if test "$(PACKAGE)" = "glib"; then \ + rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + fi + +check: all $(GETTEXT_PACKAGE).pot + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp + rm -fr *.o + rm -f .intltool-merge-cache + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES + rm -f *.mo *.msg *.cat *.cat.m $(GMOFILES) + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f Makefile.in.in + +distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) +dist distdir: $(DISTFILES) + dists="$(DISTFILES)"; \ + extra_dists="$(EXTRA_DISTFILES)"; \ + for file in $$extra_dists; do \ + test -f $$file && dists="$$dists $$file"; \ + done; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(GETTEXT_PACKAGE).pot + tmpdir=`pwd`; \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + echo "$$lang:"; \ + result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ + if $$result; then \ + if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi; \ + done + +# POTFILES is created from POTFILES.in by stripping comments, empty lines +# and Intltool tags (enclosed in square brackets), and appending a full +# relative path to them +POTFILES: POTFILES.in + ( posrcprefix='$(top_srcdir)/'; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' \ + -e 's/^[[].*] *//' \ + -e '/^[ ]*$$/d' \ + -e "s@^@ $$posrcprefix@" $(srcdir)/$@.in \ + | sed -e '$$!s/$$/ \\/') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lib/libgsf-1.12.3/po/POTFILES.in b/lib/libgsf-1.12.3/po/POTFILES.in new file mode 100644 index 0000000000..88c523c6a0 --- /dev/null +++ b/lib/libgsf-1.12.3/po/POTFILES.in @@ -0,0 +1,7 @@ +# List of source files which contain translatable strings. +# Please keep this file sorted alphabetically. +[encoding: UTF-8] +gsf/gsf-blob.c +gsf/gsf-clip-data.c +gsf/gsf-msole-utils.c +thumbnailer/gsf-office-thumbnailer.schemas.in diff --git a/lib/libgsf-1.12.3/po/es.po b/lib/libgsf-1.12.3/po/es.po new file mode 100644 index 0000000000..295bb9db17 --- /dev/null +++ b/lib/libgsf-1.12.3/po/es.po @@ -0,0 +1,58 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: libgsf\n" +"Report-Msgid-Bugs-To: federico@novell.com\n" +"POT-Creation-Date: 2005-07-19 12:55-0500\n" +"PO-Revision-Date: 2005-07-19 13:04-0500\n" +"Last-Translator: Federico Mena-Quintero \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:1 +msgid "" +"Boolean options available, true enables thumbnailing and false disables the " +"creation of new thumbnails" +msgstr "Opciones booleanas disponibles: \"true\" habilita la generación de imágenes en miniatura y \"false\" la deshabilita" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:2 +msgid "Enable thumbnailing of Microsoft Excel documents" +msgstr "Habilitar miniaturas para documentos de Microsoft Excel" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:3 +msgid "Enable thumbnailing of Microsoft PowerPoint documents" +msgstr "Habilitar miniaturas para documentos de Microsoft PowerPoint" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:4 +msgid "Enable thumbnailing of Microsoft Word documents" +msgstr "Habilitar miniaturas para documentos de Microsoft Word" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:5 +msgid "Thumbnail command for Microsoft Excel documents" +msgstr "Comando para generar miniaturas de documentos de Microsoft Excel" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:6 +msgid "Thumbnail command for Microsoft PowerPoint documents" +msgstr "Comando para generar miniaturas de archivos de Microsoft PowerPoint" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:7 +msgid "Thumbnail command for Microsoft Word documents" +msgstr "Comando para generar miniaturas de archivos de Microsoft Word" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:8 +msgid "Valid command plus arguments for the Microsoft Excel thumbnailer." +msgstr "Comando válido y argumentos para el generador de miniaturas de Microsoft Excel" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:9 +msgid "Valid command plus arguments for the Microsoft PowerPoint thumbnailer." +msgstr "Comando válido y argumentos para el generador de miniaturas de Microsoft PowerPoint" + +#: ../thumbnailer/gsf-office-thumbnailer.schemas.in.h:10 +msgid "Valid command plus arguments for the Microsoft Word thumbnailer." +msgstr "Comando válido y argumentos para el generador de miniaturas de Microsoft Word" diff --git a/lib/libgsf-1.12.3/python/ChangeLog b/lib/libgsf-1.12.3/python/ChangeLog new file mode 100644 index 0000000000..9959552ae7 --- /dev/null +++ b/lib/libgsf-1.12.3/python/ChangeLog @@ -0,0 +1,237 @@ +2005-09-06 Jody Goldberg + + * Release 1.12.3 + +2005-08-13 Morten Welinder + + * Release 1.12.2 + +2005-08-02 Stepan Kasal + + * README-python: Partial cleanup; in particular, don't speak as if + Automake 1.5 were something new. + + * Makefile.am15: s/INCLUDES/AM_CPPFLAGS/ + * Makefile.am: A tine change. + + The two Makefile.am's should be merged. Who is able to do it? + +2005-06-12 Jody Goldberg + + * Release 1.12.1 + +2005-05-09 Jody Goldberg + + * Release 1.12.0 + +2004-12-06 Jody Goldberg + + * Release 1.11.1 + +2004-11-28 Jody Goldberg + + * Release 1.11.0 + +2004-08-20 Jody Goldberg + + * Release 1.10.1 + +2004-07-03 Jody Goldberg + + * Release 1.10.0 + +2004-05-15 Jody Goldberg + + * Release 1.9.1 + +2004-05-04 Jody Goldberg + + * Release 1.9.0 + +2003-09-12 Jody Goldberg + + * Release 1.8.2 + +2003-06-15 Jon K Hellan + + * python/__init__.py: Update to recent conventions. + + * gsfgnome.override: Remove orbit-python.h + +2003-06-07 Jody Goldberg + + * Release 1.8.1 + +2003-05-11 Jody Goldberg + + * Release 1.8.0 + +2003-01-28 Jody Goldberg + + * Release 1.7.2 + +2002-12-11 Jody Goldberg + + * Release 1.6.0 + +2002-10-26 Jody Goldberg + + * Release 1.5.0 + +2002-09-30 Jody Goldberg + + * Release 1.4.0 + +2002-09-19 Jon K Hellan + + * gsf.defs (GsfIOContext.error_occurred, + GsfIOContext.error_message, GsfIOContext.push_error, + GsfIOContext.pop_error): Remove. + (GsfOutfileZip.set_compression_method): Add. + + * gsf-arg-types.py: Handle GsfZipCompressionMethod. + +2002-09-13 Jon K Hellan + + * gsf.override (GSF_TYPE_OUTFILE_ZIP): Define. + (_wrap_gsf_xml_parser_context): Add. + + * gsf.defs (gsf_outfile_msole_new): Fix typo. + (gsf.OutfileZip, gsf_outfile_zip_new): Add. + (gsf_xml_parser_context): Add. + + * ex-out-zip.py: Add. + +2002-08-25 Jody Goldberg + + * Release 1.3.0 + +2002-08-21 Jon K Hellan + + * Makefile.am15: Use gsf-arg-types when generating code. + + * gsf-arg-types.py: Added char* variants to gnome-python - remove + from here. + +2002-08-20 Jon K Hellan + + * gsf-arg-types.py: Handle declaration variations not handled in + gnome-python. + + * gsfgnome.override (_wrap_gsf_input_bonobo_new): Initialize Gnome + VFS. + + * gsfgnome.defs (gsf_input_gnomevfs_new, gsf_output_gnomevfs_new): + Fix typo. + +2002-08-20 Jon K Hellan + + * Makefile.am15 (_gsfmodule_la_LIBADD): -lgsf-gnome-1 should not + be included here. + +2002-08-19 Jon K Hellan + + * gsf.defs (GsfInput.seek, GsfOutput.seek): + s/GsfSeekType/GSeekType/. + + * gsf.override (_wrap_gsf_input_seek, _wrap_gsf_output_seek): Ditto. + +2002-08-19 Jon K Hellan + + * Makefile.am15: Different CFLAGS and LIBADD for gsf and gsf.gnome + modules. + + * gsfgnome.override: Change include path for gsf-gnome headers. + +2002-08-18 Jon K Hellan + + * README-python: Update build procedure description. With todays + changes, it's simpler and should actually work. + + * Makefile.am15: Add, so that people who have Automake 1.5 can + actually build the thing. See README-python. + + * .cvsignore: Add gsfgnome.c + +2002-08-18 Jon K Hellan + + * gfs.defs: Split out bonobo and gnome-vfs dependency into + gsf.gnome module. + + * gsfmodule.c: Ditto. + + * gfs.override: Ditto. + + * __init__.py: Added to split into gsf and gsf.gnome modules. + + * gfsgnome.defs: Ditto. + + * gsfgnomemodule.c: Ditto. + + * gfsgnome.override: Ditto. + +2002-08-15 Jon K Hellan + + * gsf.defs (GsfInput.size, GsfInput.remaining, GsfInput.tell, + GsfOutput.size, GsfOutput.tell): Change return type to gsf_off_t. + (GsfInput.seek, GsfOutput.seek): Change type of offset parameter + to gsf_off_t, of 'whence' to GsfSeeType. + (GsfInput.set_size): Change type of size parameter to gsf_off_t. + (gsf_input_memory_new): Change type of length parameter to + gsf_off_t. + (GsfInfileZip.get_ooname): Remove. + (GsfMetaDataBag): Was commented out. Now remove. Original is still + in CVS. + (GsfOutputBonobo, GsfOutputMemory): Not built in C library, so + remove. + + * gsf.override: Include orbit-python.h. Don't ignore io-context. + (_wrap_gsf_input_size, _wrap_gsf_input_remaining, + _wrap_gsf_input_tell, _wrap_gsf_output_size, + _wrap_gsf_output_tell): Check for overflow from gsf_input_size. + (wrap_gsf_input_seek, _wrap_gsf_output_seek): Copy offset to a + gsf_off_t before calling gsf_input_seek + (_wrap_gsf_input_memory_new): Cast to suppress warning. + (_wrap_gsf_infile_zip_get_ooname): Remove. + (_wrap_gsf_output_tell): Add. + + * gsfmodule.c (initgsf): Suppress warnings. + +2002-08-05 Jon K Hellan + + * gsf.override: (GsfInputBonobo, GsfInputGnomeVFS, GsfIOContext, + GsfOutfile, GsfOutfileMSOle, GsfOutputBonobo, GsfOutputGnomeVFS, + GsfOutputMemory, GsfOuputStdio): Add. + (_wrap_gsf_input_read): Use correct type of gsf_input_size. + (_wrap_gsf_input_seek, _wrap_gsf_input_tell, + _wrap_gsf_input_memory_new): Kill warning. + (_wrap_gsf_input_stdio_new, _wrap_gsf_input_mmap_new, + _wrap_gsf_input_textline_utf8_gets, + _wrap_gsf_infile_name_by_index, _wrap_gsf_infile_child_by_name): + Remove. Improved pygtk-codegen? + (_wrap_gsf_input_bonobo_new, _wrap_gsf_output_size) + (_wrap_gsf_output_seek, _wrap_gsf_output_seek) + (_wrap_gsf_output_write, _wrap_gsf_output_bonobo_new): Add. + + * gsf.defs (GsfInput.uncompress, GsfInfileZip.get_ooname, + GsfInputBonobo, GsfInputGnomeVFS, GsfIOContext, GsfOutfile, + GsfOutfileMSOle, GsfOutputBonobo, GsfOutputGnomeVFS, + GsfOutputMemory, GsfOuputStdio): Add. + (GsfInput.name): Correct type. + +2002-08-12 Jody Goldberg + + * Release 1.2.0 + +2002-07-21 Jody Goldberg + + * Release 1.1.0 + +2002-06-23 Jon K Hellan + + * README-python: Update build instructions. + +2002-06-20 Jon K Hellan + + * README-python: Explain how to build. + diff --git a/lib/libgsf-1.12.3/python/Makefile.am b/lib/libgsf-1.12.3/python/Makefile.am new file mode 100644 index 0000000000..c77f88a58f --- /dev/null +++ b/lib/libgsf-1.12.3/python/Makefile.am @@ -0,0 +1,28 @@ +AM_CPPFLAGS = $(LIBGSF_CFLAGS) $(PYTHON_INCLUDES) $(PYGTK_CFLAGS) + +#defsdir = $(datadir)/pygtk/2.0/defs + +#defs_DATA = gconf.defs + +# libgsf binding + +#pyexec_LTLIBRARIES = gsfmodule.la +lib_LTLIBRARIES = gsfmodule.la +gsfmodule_la_CFLAGS = $(LIBGSF_CFLAGS) +gsfmodule_la_LDFLAGS = -module -avoid-version -export-symbols-regex initgsf +gsfmodule_la_LIBADD = $(LIBGSF_LIBS) -lgsf-1 +gsfmodule_la_SOURCES = gsfmodule.c +nodist_gsfmodule_la_SOURCES = gsf.c +CLEANFILES = gsf.c +EXTRA_DIST = gsf.defs gsf.override + +# Additional dependency: +gsf.c: gsf.override + +.defs.c: + (cd $(srcdir) \ + && $(PYGTK_CODEGEN) \ + --override $*.override \ + --prefix py$* $*.defs) > gen-$*.c \ + && cp gen-$*.c $*.c \ + && rm -f gen-$*.c diff --git a/lib/libgsf-1.12.3/python/gsf.defs b/lib/libgsf-1.12.3/python/gsf.defs new file mode 100644 index 0000000000..86f8068eb6 --- /dev/null +++ b/lib/libgsf-1.12.3/python/gsf.defs @@ -0,0 +1,578 @@ +;; -*- scheme -*- +; object definitions ... +(define-object Input + (in-module "Gsf") + (parent "GObject") + (c-name "GsfInput") + (gtype-id "GSF_TYPE_INPUT") +) + +(define-object Infile + (in-module "Gsf") + (parent "GsfInput") + (c-name "GsfInfile") + (gtype-id "GSF_TYPE_INFILE") +) + +;; Enumerations and flags ... + + +;; From libgsf/gsf/gsf-input.h + +(define-method container + (of-object "GsfInput") + (c-name "gsf_input_container") + (return-type "GsfInfile*") +) + +(define-method dup + (of-object "GsfInput") + (c-name "gsf_input_dup") + (return-type "GsfInput*") + (parameters + '("GError**" "err") + ) +) + +(define-method size + (of-object "GsfInput") + (c-name "gsf_input_size") + (return-type "gsf_off_t") +) + +(define-method eof + (of-object "GsfInput") + (c-name "gsf_input_eof") + (return-type "gboolean") +) + +(define-method remaining + (of-object "GsfInput") + (c-name "gsf_input_remaining") + (return-type "gsf_off_t") +) + +(define-method tell + (of-object "GsfInput") + (c-name "gsf_input_tell") + (return-type "gsf_off_t") +) + +(define-method seek + (of-object "GsfInput") + (c-name "gsf_input_seek") + (return-type "gboolean") + (parameters + '("gsf_off_t" "offset") + '("GSeekType" "whence") + ) +) + +(define-method uncompress + (of-object "GsfInput") + (c-name "gsf_input_uncompress") + (return-type "GsfInput*") +) + +(define-function gsf_input_error + (c-name "gsf_input_error") + (return-type "GQuark") +) + +;; From libgsf/gsf/gsf-input-impl.h + +(define-method set_name + (of-object "GsfInput") + (c-name "gsf_input_set_name") + (return-type "gboolean") + (parameters + '("char-const*" "name") + ) +) + +(define-method set_container + (of-object "GsfInput") + (c-name "gsf_input_set_container") + (return-type "gboolean") + (parameters + '("GsfInfile*" "container") + ) +) + +(define-method set_size + (of-object "GsfInput") + (c-name "gsf_input_set_size") + (return-type "gboolean") + (parameters + '("gsf_off_t" "size") + ) +) + +;; From libgsf/gsf/gsf-infile.h + +(define-method num_children + (of-object "GsfInfile") + (c-name "gsf_infile_num_children") + (return-type "int") +) + +(define-method child_by_index + (of-object "GsfInfile") + (c-name "gsf_infile_child_by_index") + (return-type "GsfInput*") + (parameters + '("int" "i") + ) +) + +(define-method child_by_name + (of-object "GsfInfile") + (c-name "gsf_infile_child_by_name") + (return-type "GsfInput*") + (parameters + '("char-const*" "name") + ) +) + +(define-method child_by_vname + (of-object "GsfInfile") + (c-name "gsf_infile_child_by_vname") + (return-type "GsfInput*") + (parameters + '("char-const*" "name") + ) + (varargs #t) +) + +;; From libgsf/gsf/gsf-infile-impl.h + + +;; Stuff which h2def.py didn't catch + +;; gsf-input.h + +(define-method name + (of-object "GsfInput") + (c-name "gsf_input_name") + (return-type "char-const*") +) + +(define-method read + (of-object "GsfInput") + (c-name "gsf_input_read") + (return-type "guint8-const*") + (caller-owns-return true) + (parameters + '("size_t" "num_bytes") + '("guint8*" "optional_buffer" (default null) (null-ok)) + ) +) + +;; gsf-input-stdio.[ch] + +(define-object InputStdio + (in-module "Gsf") + (parent "GsfInput") + (c-name "GsfInputStdio") + (gtype-id "GSF_TYPE_INPUT_STDIO") +) + +(define-function gsf_input_stdio_new + (c-name "gsf_input_stdio_new") + (is-constructor-of "GsfInputStdio") + (return-type "GsfInput*") + (parameters + '("char-const*" "filename") + '("GError**" "err") + ) +) + +;; gsf-input-memory.[ch] + +(define-object InputMemory + (in-module "Gsf") + (parent "GsfInput") + (c-name "GsfInputMemory") + (gtype-id "GSF_TYPE_INPUT_MEMORY") +) + +(define-function gsf_input_memory_new + (c-name "gsf_input_memory_new") + (is-constructor-of "GsfInputMemory") + (return-type "GsfInput*") + (parameters + '("guint8-const*" "buf") + '("gsf_off_t" "length") + '("gboolean" "needs_free") + ) +) + +(define-function gsf_input_mmap_new + (c-name "gsf_input_mmap_new") + (return-type "GsfInput*") + (parameters + '("char-const*" "filename") + '("GError**" "err") + ) +) + +;; gsf-input-textline.[ch] + +(define-object InputTextline + (in-module "Gsf") + (parent "GsfInput") + (c-name "GsfInputTextline") + (gtype-id "GSF_TYPE_INPUT_TEXTLINE") +) + +(define-function gsf_input_textline_new + (c-name "gsf_input_textline_new") + (is-constructor-of "GsfInputTextline") + (return-type "GsfInputTextline*") + (parameters + '("GsfInput*" "source") + ) +) + +(define-method ascii_gets + (of-object "GsfInputTextline") + (c-name "gsf_input_textline_ascii_gets") + (return-type "unsigned-char*") + (caller-owns-return true) +) + +(define-method utf8_gets + (of-object "GsfInputTextline") + (c-name "gsf_input_textline_utf8_gets") + (return-type "guint8*") + (caller-owns-return true) +) + +;; gsf-input-gzip.[ch] + +(define-object InputGZip + (in-module "Gsf") + (parent "GsfInput") + (c-name "GsfInputGZip") + (gtype-id "GSF_TYPE_INPUT_GZIP") +) + +(define-function gsf_input_gzip_new + (c-name "gsf_input_gzip_new") + (is-constructor-of "GsfInputGZip") + (return-type "GsfInputGZip*") + (parameters + '("GsfInput*" "source") + '("GError**" "err") + ) +) + +;; gsf-infile.h +(define-method name_by_index + (of-object "GsfInfile") + (c-name "gsf_infile_name_by_index") + (return-type "char-const*") + (caller-owns-return true) + (parameters + '("int" "i") + ) +) + +;; gsf-infile-msole.[ch] +(define-object InfileMSOle + (in-module "Gsf") + (parent "GsfInfile") + (c-name "GsfInfileMSOle") + (gtype-id "GSF_TYPE_INFILE_MS_OLE") +) + +(define-function gsf_infile_msole_new + (c-name "gsf_infile_msole_new") + (is-constructor-of "GsfInfileMSOle") + (return-type "GsfInfile*") + (parameters + '("GsfInput*" "source") + '("GError**" "err") + ) +) + +;; From gsf-infile-msvba.[ch] +(define-object InfileMSVBA + (in-module "Gsf") + (parent "GsfInfile") + (c-name "GsfInfileMSVBA") + (gtype-id "GSF_TYPE_INFILE_MSVBA") +) + +(define-function gsf_infile_msvba_new + (c-name "gsf_infile_msvba_new") + (is-constructor-of "GsfInfileMSVBA") + (return-type "GsfInfile*") + (parameters + '("GsfInput*" "source") + '("GError**" "err") + ) +) + +;; gsf-infile-zip.[ch] + +(define-object InfileZip + (in-module "Gsf") + (parent "GsfInfile") + (c-name "GsfInfileZip") + (gtype-id "GSF_TYPE_INFILE_ZIP") +) + +(define-function gsf_infile_zip_new + (c-name "gsf_infile_zip_new") + (is-constructor-of "GsfInfileZip") + (return-type "GsfInfile*") + (parameters + '("GsfInput*" "source") + '("GError**" "err") + ) +) + +;; gsf-io-context.[ch] + +(define-object IOContext + (in-module "Gsf") + (parent "GObject") + (c-name "GsfIOContext") + (gtype-id "GSF_TYPE_IO_CONTEXT") +) + +(define-function gsf_io_context_new + (c-name "gsf_io_context_new") + (is-constructor-of "GsfIOContext") + (return-type "GsfIOContext*") +) + +(define-method clear + (of-object "GsfIOContext") + (c-name "gsf_io_context_clear") + (return-type "none") +) + +(define-method update_progress + (of-object "GsfIOContext") + (c-name "gsf_io_context_update_progress") + (return-type "none") + (parameters + '("gdouble" "value") + ) +) + +;; gsf-output.[ch], gsf-output-impl.h + +(define-object Output + (in-module "Gsf") + (parent "GObject") + (c-name "GsfOutput") + (gtype-id "GSF_TYPE_OUTPUT") +) + +(define-method name + (of-object "GsfOutput") + (c-name "gsf_output_name") + (return-type "char-const*") +) + +(define-method container + (of-object "GsfOutput") + (c-name "gsf_output_container") + (return-type "GsfOutfile*") +) + +(define-method size + (of-object "GsfOutput") + (c-name "gsf_output_size") + (return-type "gsf_off_t") +) + +(define-method close + (of-object "GsfOutput") + (c-name "gsf_output_close") + (return-type "gboolean") +) + +(define-method is_closed + (of-object "GsfOutput") + (c-name "gsf_output_is_closed") + (return-type "gboolean") +) + +(define-method tell + (of-object "GsfOutput") + (c-name "gsf_output_tell") + (return-type "gsf_off_t") +) + +(define-method seek + (of-object "GsfOutput") + (c-name "gsf_output_seek") + (return-type "gboolean") + (parameters + '("gsf_off_t" "offset") + '("GSeekType" "whence") + ) +) + +(define-method write + (of-object "GsfOutput") + (c-name "gsf_output_write") + (return-type "gboolean") + (parameters + '("size_t" "num_bytes") + '("guint8-const*" "data") + ) +) + +(define-method wrap + (of-object "GsfOutput") + (c-name "gsf_output_wrap") + (return-type "gboolean") + (parameters + '("GsfOutput*" "wrapee") + ) +) + +(define-method unwrap + (of-object "GsfOutput") + (c-name "gsf_output_unwrap") + (return-type "gboolean") + (parameters + '("GsfOutput*" "wrapee") + ) +) + +(define-function gsf_output_error + (c-name "gsf_output_error") + (return-type "GQuark") +) + + + +;; gsf-outfile.[ch] + +(define-object Outfile + (in-module "Gsf") + (parent "GsfOutput") + (c-name "GsfOutfile") + (gtype-id "GSF_TYPE_OUTFILE") +) + +(define-method new_child + (of-object "GsfOutfile") + (c-name "gsf_outfile_new_child") + (return-type "GsfOutput*") + (parameters + '("char-const*" "name") + '("gboolean" "is_dir") + ) +) + +(define-function gsf_outfile_error + (c-name "gsf_outfile_error") + (return-type "GQuark") +) + +;; gsf-outfile-msole.[ch] + +(define-object OutfileMSOle + (in-module "Gsf") + (parent "GsfOutfile") + (c-name "GsfOutfileMSOle") + (gtype-id "GSF_TYPE_OUTFILE_MS_OLE") +) + +(define-function gsf_outfile_msole_new + (c-name "gsf_outfile_msole_new") + (is-constructor-of "GsfOutfileMSOle") + (return-type "GsfOutfile*") + (parameters + '("GsfOutput*" "sink") + ) +) + +;; gsf-outfile-zip.[ch] + +(define-object OutfileZip + (in-module "Gsf") + (parent "GsfOutfile") + (c-name "GsfOutfileZip") + (gtype-id "GSF_TYPE_OUTFILE_ZIP") +) + +(define-function gsf_outfile_zip_new + (c-name "gsf_outfile_zip_new") + (is-constructor-of "GsfOutfileZip") + (return-type "GsfOutfile*") + (parameters + '("GsfOutput*" "source") + '("GError**" "err") + ) +) + +(define-method set_compression_method + (of-object "GsfOutfileZip") + (c-name "gsf_outfile_zip_set_compression_method") + (return-type "gboolean") + (parameters + '("GsfZipCompressionMethod" "method") + ) +) + +;; gsf-output-stdio.[ch] + +(define-object OutputStdio + (in-module "Gsf") + (parent "GsfOutput") + (c-name "GsfOutputStdio") + (gtype-id "GSF_TYPE_OUTPUT_STDIO") +) + +(define-function gsf_output_stdio_new + (c-name "gsf_output_stdio_new") + (is-constructor-of "GsfOutputStdio") + (return-type "GsfOutput*") + (parameters + '("char-const*" "filename") + '("GError**" "err") + ) +) + +;; From gsf-output-memory.[hh] + +(define-object OutputMemory + (in-module "Gsf") + (parent "GsfOutput") + (c-name "GsfOutputMemory") + (gtype-id "GSF_TYPE_OUTPUT_MEMORY") +) + +(define-function gsf_output_memory_new + (c-name "gsf_output_memory_new") + (is-constructor-of "GsfOutputMemory") + (return-type "GsfOutput*") +) + +(define-method get_bytes + (of-object "GsfOutputMemory") + (c-name "gsf_output_memory_get_bytes") + (return-type "none") + (parameters + '("guint8**" "outbuffer") + '("gsf_off_t*" "outlength") + ) +) + +(define-function gsf_xml_parser_context + (c-name "gsf_xml_parser_context") + (return-type "xmlParserCtxtPtr") + (caller-owns-return true) + (parameters + '("GsfInput*" "input") + ) +) + diff --git a/lib/libgsf-1.12.3/python/gsf.override b/lib/libgsf-1.12.3/python/gsf.override new file mode 100644 index 0000000000..8cf2c11365 --- /dev/null +++ b/lib/libgsf-1.12.3/python/gsf.override @@ -0,0 +1,272 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ +%% +headers +#include + +#include "pygobject.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GSF_TYPE_INPUT GSF_INPUT_TYPE +#define GSF_TYPE_INPUT_STDIO GSF_INPUT_STDIO_TYPE +#define GSF_TYPE_INPUT_MEMORY GSF_INPUT_MEMORY_TYPE +#define GSF_TYPE_INPUT_TEXTLINE GSF_INPUT_TEXTLINE_TYPE +#define GSF_TYPE_INPUT_GZIP GSF_INPUT_GZIP_TYPE +#define GSF_TYPE_INFILE GSF_INFILE_TYPE +#define GSF_TYPE_INFILE_ZIP GSF_INFILE_ZIP_TYPE +#define GSF_TYPE_INFILE_MSVBA GSF_INFILE_MSVBA_TYPE +#define GSF_TYPE_INFILE_MS_OLE GSF_INFILE_MSOLE_TYPE +#define GSF_TYPE_IO_CONTEXT GSF_IO_CONTEXT_TYPE +#define GSF_TYPE_META_DATA_BAG GSF_METADATA_BAG_TYPE +#define GSF_TYPE_OUTPUT GSF_OUTPUT_TYPE +#define GSF_TYPE_OUTFILE GSF_OUTFILE_TYPE +#define GSF_TYPE_OUTFILE_MS_OLE GSF_OUTFILE_MSOLE_TYPE +#define GSF_TYPE_OUTFILE_ZIP GSF_OUTFILE_ZIP_TYPE +#define GSF_TYPE_OUTPUT_MEMORY GSF_OUTPUT_MEMORY_TYPE +#define GSF_TYPE_OUTPUT_STDIO GSF_OUTPUT_STDIO_TYPE +%% +modulename gsf +%% +import gobject.GObject as PyGObject_Type +%% +ignore-glob + _* + gsf_input_set_* + *_get_type + gsf_metadata_bag_* + gsf_*_error +%% +override gsf_input_size noargs +static PyObject * +_wrap_gsf_input_size(PyGObject *self) +{ + long ret; + gsf_off_t size = gsf_input_size(GSF_INPUT(self->obj)); + + ret = size; + if (ret != size) { /* Check for overflow */ + PyErr_SetString(PyExc_OverflowError, "Size is too large"); + } + return PyInt_FromLong(ret); +} +%% +override gsf_input_read kwargs +static PyObject * +_wrap_gsf_input_read(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { (char *) "num_bytes", + (char *) "optional_buffer", NULL }; + size_t num_bytes; + guint8 *optional_buffer = NULL; + guint8 const *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "i|z:GsfInput.read", + kwlist, &num_bytes, &optional_buffer)) + return NULL; + ret = gsf_input_read(GSF_INPUT(self->obj), num_bytes, optional_buffer); + if (ret) + return PyString_FromStringAndSize(ret, (int) num_bytes); + Py_INCREF(Py_None); + return Py_None; +} +%% +override gsf_input_seek kwargs +static PyObject * +_wrap_gsf_input_seek(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { (char *) "offset", (char *) "whence", NULL }; + long loffset; + gsf_off_t offset; + GSeekType whence; + gboolean ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "li:GsfInput.seek", + kwlist, &loffset, &whence)) + return NULL; + offset = loffset; + ret = gsf_input_seek(GSF_INPUT(self->obj), offset, whence); + return PyInt_FromLong(ret); +} +%% +override gsf_input_remaining noargs +static PyObject * +_wrap_gsf_input_remaining(PyGObject *self) +{ + long ret; + gsf_off_t remain = gsf_input_remaining(GSF_INPUT(self->obj)); + + ret = remain; + if (ret != remain) { /* Check for overflow */ + PyErr_SetString(PyExc_OverflowError, "Size is too large"); + } + return PyInt_FromLong(ret); +} +%% +override gsf_input_tell noargs +static PyObject * +_wrap_gsf_input_tell(PyGObject *self) +{ + long ret; + gsf_off_t pos = gsf_input_tell(GSF_INPUT(self->obj)); + ret = pos; + if (ret != pos) { /* Check for overflow */ + PyErr_SetString(PyExc_OverflowError, "Position is too large"); + } + return PyInt_FromLong(ret); +} +%% +override gsf_input_memory_new kwargs +static int +_wrap_gsf_input_memory_new(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { + (char *) "buf", (char *) "needs_free", NULL }; + guint8 *buf; + size_t length; + gboolean needs_free; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + (char *) "s#i:GsfInputMemory.__init__", + kwlist, &buf, &length, &needs_free)) + return -1; + self->obj = (GObject *)gsf_input_memory_new(buf, (gsf_off_t) length, + needs_free); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GsfInputMemory object"); + return -1; + } + pygobject_register_wrapper((PyObject *)self); + return 0; +} +%% +override gsf_input_textline_ascii_gets noargs +static PyObject * +_wrap_gsf_input_textline_ascii_gets(PyGObject *self) +{ + const unsigned char *ret; + + ret = gsf_input_textline_ascii_gets(GSF_INPUT_TEXTLINE(self->obj)); + if (ret) + return PyString_FromString(ret); + Py_INCREF(Py_None); + return Py_None; +} +%% +override gsf_output_size noargs +static PyObject * +_wrap_gsf_output_size(PyGObject *self) +{ + long ret; + gsf_off_t size = gsf_output_size(GSF_OUTPUT(self->obj)); + + ret = size; + if (ret != size) { /* Check for overflow */ + PyErr_SetString(PyExc_OverflowError, "Size is too large"); + } + return PyInt_FromLong(ret); +} +%% +override gsf_output_tell noargs +static PyObject * +_wrap_gsf_output_tell(PyGObject *self) +{ + long ret; + gsf_off_t pos = gsf_output_tell(GSF_OUTPUT(self->obj)); + ret = pos; + if (ret != pos) { /* Check for overflow */ + PyErr_SetString(PyExc_OverflowError, "Position is too large"); + } + return PyInt_FromLong(ret); +} +%% +override gsf_output_seek kwargs +static PyObject * +_wrap_gsf_output_seek(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { (char *) "offset", (char *) "whence", NULL }; + long loffset; + gsf_off_t offset; + GSeekType whence; + gboolean ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + (char *) "li:GsfOutput.seek", + kwlist, &loffset, &whence)) + return NULL; + offset = loffset; + ret = gsf_output_seek(GSF_OUTPUT(self->obj), offset, whence); + return PyInt_FromLong(ret); +} +%% +override gsf_output_write kwargs +static PyObject * +_wrap_gsf_output_write(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { (char *) "num_bytes", (char *) "data", NULL }; + size_t num_bytes, ret; + char *data; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + (char *) "is:GsfOutput.write", + kwlist, &num_bytes, &data)) + return NULL; + ret = gsf_output_write(GSF_OUTPUT(self->obj), num_bytes, data); + return PyInt_FromLong((long) ret); +} +%% +override gsf_output_memory_get_bytes noargs +static PyObject * +_wrap_gsf_output_memory_get_bytes(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + guint8 *outbuffer = NULL; + gsf_off_t outlength = 0; + int num_bytes; + + gsf_output_memory_get_bytes (GSF_OUTPUT_MEMORY(self->obj), + &outbuffer, &outlength); + if (outbuffer) { + num_bytes = outlength; + if (num_bytes != outlength) { /* Check for overflow */ + PyErr_SetString(PyExc_OverflowError, "Size is too large"); + } + return PyString_FromStringAndSize(outbuffer, (int) num_bytes); + } else + return NULL; +} +%% +override gsf_xml_parser_context kwargs +static PyObject * +_wrap_gsf_xml_parser_context(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { (char *) "input", NULL }; + PyGObject *input; + xmlParserCtxtPtr ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + (char *) "O!:gsf_xml_parser_context", + kwlist, &PyGsfInput_Type, &input)) + return NULL; + ret = gsf_xml_parser_context(GSF_INPUT(input->obj)); + if (ret) + return PyCObject_FromVoidPtrAndDesc((void *) ret, + (char *) "xmlParserCtxtPtr", + NULL); + Py_INCREF(Py_None); + return Py_None; +} diff --git a/lib/libgsf-1.12.3/python/gsfmodule.c b/lib/libgsf-1.12.3/python/gsfmodule.c new file mode 100644 index 0000000000..2c521e83d7 --- /dev/null +++ b/lib/libgsf-1.12.3/python/gsfmodule.c @@ -0,0 +1,45 @@ +/* + * gsfmodule.c + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +/* + * Python bindings for libgsf. + */ + +#include + +extern PyMethodDef pygsf_functions[]; +extern DL_EXPORT(void) init_gsf (void); + +DL_EXPORT(void) +init_gsf (void) +{ + PyObject *m, *d; + + init_pygobject (); + + m = Py_InitModule ((char *) "_gsf", pygsf_functions); + d = PyModule_GetDict (m); + + pygsf_register_classes (d); + + if (PyErr_Occurred ()) { + Py_FatalError ((char *) "can't initialise module gsf"); + } +} diff --git a/lib/libgsf-1.12.3/tests/Makefile.am b/lib/libgsf-1.12.3/tests/Makefile.am new file mode 100644 index 0000000000..56e7d9a38a --- /dev/null +++ b/lib/libgsf-1.12.3/tests/Makefile.am @@ -0,0 +1,11 @@ +AM_CPPFLAGS = -I$(top_srcdir) $(LIBGSF_CFLAGS) $(LIBXML_CFLAGS) +LDADD = $(top_builddir)/gsf/libgsf-1.la $(LIBGSF_LIBS) + +check_PROGRAMS = test-msole1 test-msole2 test-cp-msole test-msvba \ + test-zip1 test-input1 test-cp \ + test-textline test-ls-zip test-cat-zip test-zip2 \ + test-cp-zip test-out-printf test-outmem-printf \ + test-msole-printf test-zip-out test-zip-out-subdirs \ + test-out-gzip1 test-out-gzip2 test-gzip1 test-gzip2 \ + test-out-bzip test-bzip \ + test-dump-msole test-restore-msole test-msvba-zip # test-xml diff --git a/lib/libgsf-1.12.3/tests/test-bzip.c b/lib/libgsf-1.12.3/tests/test-bzip.c new file mode 100644 index 0000000000..d3f01038cc --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-bzip.c @@ -0,0 +1,76 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-bzip.c: + * + * Copyright (C) 2003 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInput *bzip; + GError *err; + int i; + + for (i = 1 ; i < argc ; i++) { + puts (argv[i]); + input = gsf_input_stdio_new (argv[i], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + continue; + } + + bzip = gsf_input_memory_new_from_bzip (input, &err); + if (bzip == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not a BZip file: %s", argv[i], err->message); + g_error_free (err); + g_object_unref (G_OBJECT (input)); + continue; + } + gsf_input_dump (bzip, FALSE); + + g_object_unref (G_OBJECT (bzip)); + g_object_unref (G_OBJECT (input)); + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-cat-zip.c b/lib/libgsf-1.12.3/tests/test-cat-zip.c new file mode 100644 index 0000000000..37083c2e8f --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-cat-zip.c @@ -0,0 +1,135 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-cat-zip.c: test program to list content and dump raw stream data + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include +#include +#include + +static void +ls_R (GsfInput *input) +{ + int i; + char const *name = gsf_input_name (GSF_INPUT (input)); + gboolean is_dir = GSF_IS_INFILE (input) && + (gsf_infile_num_children (GSF_INFILE (input)) >= 0); + + printf ("%c '%s'\t\t%" GSF_OFF_T_FORMAT "\n", + (is_dir ? 'd' : ' '), + (name != NULL) ? name : "", + gsf_input_size (GSF_INPUT (input))); + + if (is_dir) { + puts ("{"); + for (i = 0 ; i < gsf_infile_num_children (GSF_INFILE (input)) ; i++) + ls_R (gsf_infile_child_by_index (GSF_INFILE (input), i)); + puts ("}"); + } + + g_object_unref (G_OBJECT (input)); +} + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GError *err; + + fprintf (stderr, "%s\n", argv [1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + input = gsf_input_uncompress (input); + infile = gsf_infile_zip_new (input, &err); + g_object_unref (G_OBJECT (input)); + + if (infile == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not an OLE file: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + if (argc > 2) { + int i; + GsfInput *child, *ptr = GSF_INPUT (infile); + for (i = 2 ; i < argc && ptr != NULL; i++, ptr = child) { + fprintf (stderr, "--> '%s'\n", argv [i]); + if (GSF_IS_INFILE (ptr) && + gsf_infile_num_children (GSF_INFILE (ptr)) >= 0) { + child = gsf_infile_child_by_name (GSF_INFILE (ptr), argv [i]); + + if (child == NULL) { + g_warning ("No child named '%s'", argv [i]); + child = NULL; + break; + } + } else { + g_warning ("stream is not a directory '%s'", argv [i]); + child = NULL; + break; + } + g_object_unref (G_OBJECT (ptr)); + } + if (ptr != NULL) { + if (GSF_IS_INFILE (ptr) && + gsf_infile_num_children (GSF_INFILE (ptr)) >= 0) + ls_R (ptr); /* unrefs infile */ + else { + gsf_input_dump (GSF_INPUT (ptr), FALSE); + g_object_unref (G_OBJECT (ptr)); + } + } + } else + ls_R (GSF_INPUT (infile)); /* unrefs infile */ + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc < 2) { + fprintf (stderr, "%s : file stream stream ...\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-cp-msole.c b/lib/libgsf-1.12.3/tests/test-cp-msole.c new file mode 100644 index 0000000000..63c8adb270 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-cp-msole.c @@ -0,0 +1,133 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-cp-msole.c: Test gsf-outfile-msole by cloning a file the hard way + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include + +#include +#include +#include + +#include +#include +#include + +#include + +static void +clone (GsfInfile *in, GsfOutfile *out) +{ + GsfInput *input = GSF_INPUT (in); + GsfOutput *output = GSF_OUTPUT (out); + guint8 const *data; + size_t len; + int i; + + if (gsf_input_size (input) > 0) { + while ((len = gsf_input_remaining (input)) > 0) { + /* copy in odd sized chunks to exercise system */ + if (len > 314) + len = 314; + if (NULL == (data = gsf_input_read (input, len, NULL))) { + g_warning ("error reading ?"); + return; + } + if (!gsf_output_write (output, len, data)) { + g_warning ("error writing ?"); + return; + } + } + } else for (i = 0 ; i < gsf_infile_num_children (in) ; i++) { + input = gsf_infile_child_by_index (in, i); + output = gsf_outfile_new_child (out, + gsf_infile_name_by_index (in, i), + gsf_infile_num_children (GSF_INFILE (input)) >= 0); + clone (GSF_INFILE (input), GSF_OUTFILE (output)); + } + gsf_output_close (GSF_OUTPUT (out)); + g_object_unref (G_OBJECT (out)); + g_object_unref (G_OBJECT (in)); +} + +static int +test (char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GsfOutput *output; + GsfOutfile *outfile; + GError *err; + + fprintf (stderr, "%s\n", argv [1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + infile = gsf_infile_msole_new (input, &err); + g_object_unref (G_OBJECT (input)); + + if (infile == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not an OLE file: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + output = gsf_output_stdio_new (argv[2], &err); + if (output == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[2], err->message); + g_error_free (err); + g_object_unref (G_OBJECT (infile)); + return 1; + } + + outfile = gsf_outfile_msole_new (output); + g_object_unref (G_OBJECT (output)); + clone (infile, outfile); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc != 3) { + fprintf (stderr, "%s : infile outfile\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-cp-zip.c b/lib/libgsf-1.12.3/tests/test-cp-zip.c new file mode 100644 index 0000000000..3128d65032 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-cp-zip.c @@ -0,0 +1,155 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-cp-zip.c: Test gsf-outfile-zip by cloning a file the hard way + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include + +#include +#include +#include + +#include +#include +#include + +#include + +static void +clone (GsfInfile *in, GsfOutfile *out) +{ + GsfInput *input = GSF_INPUT (in); + GsfOutput *output = GSF_OUTPUT (out); + + if (gsf_input_size (input) > 0) { + size_t len; + while ((len = gsf_input_remaining (input)) > 0) { + guint8 const *data; + /* copy in odd sized chunks to exercise system */ + if (len > 314) + len = 314; + if (NULL == (data = gsf_input_read (input, len, NULL))) { + g_warning ("error reading ?"); + return; + } + if (!gsf_output_write (output, len, data)) { + g_warning ("error writing ?"); + return; + } + } + } else { + int i, n = gsf_infile_num_children (in); + for (i = 0 ; i < n; i++) { + const char *name; + char *display_name; + int level; + gboolean is_dir; + + input = gsf_infile_child_by_index (in, i); + name = gsf_infile_name_by_index (in, i); + is_dir = gsf_infile_num_children (GSF_INFILE (input)) >= 0; + + g_object_get (G_OBJECT (input), "compression-level", &level, NULL); + + display_name = name + ? g_filename_display_name (name) + : NULL; + g_print ("%s: size=%ld, level=%d, %s\n", + display_name ? display_name : "?", + (long)gsf_input_size (input), + level, + is_dir ? "directory" : "file"); + g_free (display_name); + + output = gsf_outfile_new_child_full (out, name, is_dir, + "compression-level", level, + NULL); + clone (GSF_INFILE (input), GSF_OUTFILE (output)); + } + } + gsf_output_close (GSF_OUTPUT (out)); + g_object_unref (G_OBJECT (out)); + g_object_unref (G_OBJECT (in)); +} + +static int +test (char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GsfOutput *output; + GsfOutfile *outfile; + GError *err; + + fprintf (stderr, "%s\n", argv [1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + infile = gsf_infile_zip_new (input, &err); + g_object_unref (G_OBJECT (input)); + + if (infile == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not a zip file: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + output = gsf_output_stdio_new (argv[2], &err); + if (output == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[2], err->message); + g_error_free (err); + g_object_unref (G_OBJECT (infile)); + return 1; + } + + outfile = gsf_outfile_zip_new (output, &err); + g_object_unref (G_OBJECT (output)); + clone (infile, outfile); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc != 3) { + fprintf (stderr, "%s : infile outfile\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-cp.c b/lib/libgsf-1.12.3/tests/test-cp.c new file mode 100644 index 0000000000..97dc8f885c --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-cp.c @@ -0,0 +1,90 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-cp-zip.c: Test gsf_input_copy + * + * Copyright (C) 2002-2003 Dom Lachowicz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include + +static int +test (char *argv[]) +{ + GsfInput *input; + GsfOutput *output; + GError *err; + int rval = 0; + + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s\n", argv[1], err->message); + g_error_free (err); + return 1; + } + + output = gsf_output_stdio_new (argv[2], &err); + if (output == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s\n", argv[2], err->message); + g_error_free (err); + + g_object_unref (G_OBJECT (input)); + return 1; + } + + if (gsf_input_copy (input, output) == FALSE) { + rval = 1; + err = (GError*) gsf_output_error (output); + if (err != NULL) { + g_warning ("'%s' error: %s\n", argv[2], err->message); + } + } + + g_object_unref (G_OBJECT (input)); + + gsf_output_close (output); + g_object_unref (G_OBJECT (output)); + + return rval; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc != 3) { + fprintf (stderr, "%s : infile outfile\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-dump-msole.c b/lib/libgsf-1.12.3/tests/test-dump-msole.c new file mode 100644 index 0000000000..d12a0f4938 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-dump-msole.c @@ -0,0 +1,138 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-cp-msole.c: Test gsf-outfile-msole by cloning a file the hard way + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include + +static void +clone (GsfInput *input, GsfOutput *output) +{ + guint8 const *data; + size_t len; + int i; + + if (gsf_input_size (input) > 0) { + while ((len = gsf_input_remaining (input)) > 0) { + /* copy in odd sized chunks to exercise system */ + if (len > 314) + len = 314; + if (NULL == (data = gsf_input_read (input, len, NULL))) { + g_warning ("error reading ?"); + return; + } + if (!gsf_output_write (output, len, data)) { + g_warning ("error writing ?"); + return; + } + } + } + + if (GSF_IS_INFILE (input) && + gsf_infile_num_children (GSF_INFILE (input)) > 0) { + GsfInfile *in = GSF_INFILE (input); + GsfOutfile *out = GSF_OUTFILE (output); + GsfInput *src; + GsfOutput *dst; + + for (i = 0 ; i < gsf_infile_num_children (in) ; i++) { + src = gsf_infile_child_by_index (in, i); + dst = gsf_outfile_new_child (out, + gsf_infile_name_by_index (in, i), + GSF_IS_INFILE (src) && gsf_infile_num_children (GSF_INFILE (src)) >= 0); + clone (src, dst); + } + } + + gsf_output_close (output); + g_object_unref (G_OBJECT (output)); + g_object_unref (G_OBJECT (input)); +} + +static int +test (char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GsfOutfile *outfile; + GError *err; + + fprintf (stderr, "%s\n", argv [1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + infile = gsf_infile_msole_new (input, &err); + g_object_unref (G_OBJECT (input)); + + if (infile == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not an OLE file: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + outfile = gsf_outfile_stdio_new (argv[2], &err); + if (outfile == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + clone (GSF_INPUT (infile), GSF_OUTPUT (outfile)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc != 3) { + fprintf (stderr, "%s : infile outfile\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-gzip1.c b/lib/libgsf-1.12.3/tests/test-gzip1.c new file mode 100644 index 0000000000..4c1538b083 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-gzip1.c @@ -0,0 +1,77 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-gzip1.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInput *gzip; + GError *err; + int i; + + for (i = 1 ; i < argc ; i++) { + puts (argv[i]); + input = gsf_input_stdio_new (argv[i], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + continue; + } + + gzip = gsf_input_gzip_new (input, &err); + if (gzip == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not a GZip file: %s", argv[i], err->message); + g_error_free (err); + g_object_unref (G_OBJECT (input)); + continue; + } + gsf_input_dump (gzip, FALSE); + + g_object_unref (G_OBJECT (gzip)); + g_object_unref (G_OBJECT (input)); + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-gzip2.c b/lib/libgsf-1.12.3/tests/test-gzip2.c new file mode 100644 index 0000000000..008d5e7d0a --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-gzip2.c @@ -0,0 +1,83 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-gzip2.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * Copyright (C) 2005 Morten Welinder (terra@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInput *gzip; + GError *err; + int i; + + for (i = 1 ; i < argc ; i++) { + puts (argv[i]); + input = gsf_input_stdio_new (argv[i], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + continue; + } + + /* + * We must know the length of the uncompressed file in advance. + * test-out-gzip2's output uncompresses to 90 bytes. + */ + gzip = g_object_new (GSF_INPUT_GZIP_TYPE, + "source", input, + "raw", TRUE, + "uncompressed_size", (gsf_off_t)90, + NULL); + if (gzip == NULL) { + g_warning ("'%s' Not a GZip file: %s", argv[i], "???" /* err->message */); + g_error_free (err); + g_object_unref (G_OBJECT (input)); + continue; + } + gsf_input_dump (gzip, FALSE); + + g_object_unref (G_OBJECT (gzip)); + g_object_unref (G_OBJECT (input)); + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-input1.c b/lib/libgsf-1.12.3/tests/test-input1.c new file mode 100644 index 0000000000..a195dca153 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-input1.c @@ -0,0 +1,62 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-input1.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GError *err; + + if (argc != 3) { + fprintf (stderr, "Usage : %s infile outfile\n", argv[0]); + return 1; + } + + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } else + g_object_unref (G_OBJECT (input)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-ls-zip.c b/lib/libgsf-1.12.3/tests/test-ls-zip.c new file mode 100644 index 0000000000..afb27758b7 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-ls-zip.c @@ -0,0 +1,91 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-ls-zip.c: test program to list content of zip files. + * + * Copyright (C) 2002-2003 Tambet Ingo (tambet@ximian.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include +#include +#include + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GError *err; + gint i, j; + + for (i = 1; i < argc; i++) { + fprintf (stderr, "%s\n", argv [i]); + input = gsf_input_stdio_new (argv[i], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + return 1; + } + + input = gsf_input_uncompress (input); + infile = gsf_infile_zip_new (input, &err); + g_object_unref (G_OBJECT (input)); + + if (infile == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not a zip file: %s", argv[i], err->message); + g_error_free (err); + return 1; + } + + for (j = 0; j < gsf_infile_num_children (infile); j++) { + GsfInput *child = gsf_infile_child_by_index (infile, j); + + g_print ("\t%s\t\t%" GSF_OFF_T_FORMAT "\n", gsf_input_name (child), gsf_input_size (child)); + g_object_unref (G_OBJECT (child)); + } + + g_object_unref (G_OBJECT (infile)); + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc < 2) { + fprintf (stderr, "%s : file.zip ...\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-msole-printf.c b/lib/libgsf-1.12.3/tests/test-msole-printf.c new file mode 100644 index 0000000000..f26eb318b0 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-msole-printf.c @@ -0,0 +1,106 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-msole-printf.c: + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include + +static gboolean +test_write_once (GsfOutput *output) +{ + if (!gsf_output_printf (output, + "The %s sat on the %s.\n", "cat", "mat")) + return FALSE; + if (!gsf_output_printf (output, "%d %ss sat on the %s.\n", + 2, "cat", "mat")) + return FALSE; + if (!gsf_output_puts (output, + "The quick brown fox is afraid of the cats.\n")) + return FALSE; + + return TRUE; +} + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GsfOutfile *outfile; + GsfOutput *small; + GsfOutput *large; + GError *err; + int i; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + outfile = gsf_outfile_msole_new (output); + g_object_unref (G_OBJECT (output)); + small = gsf_outfile_new_child (outfile, "small", FALSE); + + if (!test_write_once (small)) + return 1; + if (!gsf_output_close (small)) + return 1; + + large = gsf_outfile_new_child (outfile, "large", FALSE); + + for (i = 1; i <= 100; i++) { + if (!gsf_output_printf (large, "=== Round %d ===\n", i)) + return 1; + if (!test_write_once (large)) + return 1; + } + + if (!gsf_output_close (large)) + return 1; + if (!gsf_output_close ((GsfOutput *) outfile)) + return 1; + g_object_unref (G_OBJECT (outfile)); + g_object_unref (small); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-msole1.c b/lib/libgsf-1.12.3/tests/test-msole1.c new file mode 100644 index 0000000000..9dddb4010c --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-msole1.c @@ -0,0 +1,292 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-msole1.c: test program to dump biff streams + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * Michael Meeks (michael@ximian.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + * + * Parts of this code are taken from libole2/test/test-ole.c + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define BIFF_TYPES_FILE "biff-types.h" +#define DUMP_CONTENT + +typedef struct { + guint16 opcode; + char *name; +} GENERIC_TYPE; + +#ifdef DUMP_CONTENT +static GPtrArray *biff_types = NULL; +static void +read_types (char const *fname, GPtrArray **types) +{ + FILE *file = fopen(fname, "r"); + unsigned char buffer[1024]; + *types = g_ptr_array_new (); + if (!file) { + char *newname = g_strconcat ("../", fname, NULL); + file = fopen (newname, "r"); + } + if (!file) { + g_printerr ("Can't find vital file '%s'\n", fname); + return; + } + while (!feof(file)) { + unsigned char *p; + fgets ((char *)buffer, sizeof (buffer)-1, file); + for (p=buffer;*p;p++) + if (*p=='0' && *(p+1)=='x') { + GENERIC_TYPE *bt = g_new (GENERIC_TYPE,1); + unsigned char *name, *pt; + bt->opcode=strtol((char *)p+2,0,16); + pt = buffer; + while (*pt && *pt != '#') pt++; /* # */ + while (*pt && !isspace(*pt)) + pt++; /* define */ + while (*pt && isspace((unsigned char)*pt)) + pt++; /* ' ' */ + while (*pt && *pt != '_') pt++; /* BIFF_ */ + name = *pt?pt+1:pt; + while (*pt && !isspace((unsigned char)*pt)) + pt++; + bt->name = g_strndup ((gchar *)name, (unsigned)(pt - name)); + g_ptr_array_add (*types, bt); + break; + } + } + fclose (file); +} + +static char const * +get_biff_opcode_name (unsigned opcode) +{ + int lp; + if (!biff_types) + read_types (BIFF_TYPES_FILE, &biff_types); + /* Count backwars to give preference to non-filtered record types */ + for (lp=biff_types->len; --lp >= 0 ;) { + GENERIC_TYPE *bt = g_ptr_array_index (biff_types, lp); + if (bt->opcode == opcode) + return bt->name; + } + return "Unknown"; +} + +static void +dump_biff_stream (GsfInput *stream) +{ + guint8 const *data; + guint16 len, opcode; + unsigned pos = gsf_input_tell (stream); + + while (NULL != (data = gsf_input_read (stream, 4, NULL))) { + gboolean enable_dump = TRUE; + + opcode = GSF_LE_GET_GUINT16 (data); + len = GSF_LE_GET_GUINT16 (data+2); + + if (len > 15000) { + enable_dump = TRUE; + g_warning ("Suspicious import of biff record > 15,000 (0x%x) for opcode 0x%hx", + len, opcode); + } else if ((opcode & 0xff00) > 0x1000) { + enable_dump = TRUE; + g_warning ("Suspicious import of biff record with opcode 0x%hx", + opcode); + } + + if (enable_dump) + printf ("Opcode 0x%3hx : %15s, length 0x%hx (=%hd)\n", + opcode, get_biff_opcode_name (opcode), + len, len); + + if (len > 0) { + data = gsf_input_read (stream, len, NULL); + if (data == NULL) + break; + if (enable_dump) + gsf_mem_dump (data, len); + } + pos = gsf_input_tell (stream); + } +} +#endif /* DUMP_CONTENT */ + +static void +cb_print_property (char const *name, GsfDocProp const *prop) +{ + GValue const *val = gsf_doc_prop_get_val (prop); + char *tmp; + + if (gsf_doc_prop_get_link (prop) != NULL) + g_print ("prop '%s' LINKED TO -> '%s'\n", + name, gsf_doc_prop_get_link (prop)); + else + g_print ("prop '%s'\n", name); + + if (VAL_IS_GSF_DOCPROP_VECTOR ((GValue *)val)) { + GValueArray *va = gsf_value_get_docprop_varray (val); + unsigned i; + + for (i = 0 ; i < va->n_values; i++) { + tmp = g_strdup_value_contents ( + g_value_array_get_nth (va, i)); + g_print ("\t[%u] = %s\n", i, tmp); + g_free (tmp); + } + } else { + tmp = g_strdup_value_contents (val); + printf ("\t= %s\n", tmp); + g_free (tmp); + } +} + +static int +test (unsigned argc, char *argv[]) +{ + static char const * const stream_names[] = { + "Workbook", "WORKBOOK", "workbook", + "Book", "BOOK", "book" + }; + + GsfInput *input, *stream; + GsfInfile *infile; + GError *err = NULL; + unsigned i, j; + + for (i = 1 ; i < argc ; i++) { + fprintf( stderr, "%s\n",argv[i]); + + input = gsf_input_mmap_new (argv[i], NULL); + if (input == NULL) /* Only report error if stdio fails too */ + input = gsf_input_stdio_new (argv[i], &err); + if (input == NULL) { + g_return_val_if_fail (err != NULL, 1); + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + continue; + } + + input = gsf_input_uncompress (input); + + infile = gsf_infile_msole_new (input, &err); + + if (infile == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not an OLE file: %s", argv[i], err->message); + g_error_free (err); + +#ifdef DUMP_CONTENT + dump_biff_stream (input); +#endif + + g_object_unref (G_OBJECT (input)); + continue; + } +#if 0 + stream = gsf_infile_child_by_name (infile, "\01CompObj"); + if (stream != NULL) { + gsf_off_t len = gsf_input_size (stream); + guint8 const *data = gsf_input_read (stream, len, NULL); + if (data != NULL) + gsf_mem_dump (data, len); + g_object_unref (G_OBJECT (stream)); + } + return 0; +#endif + + stream = gsf_infile_child_by_name (infile, "\05SummaryInformation"); + if (stream != NULL) { + GsfDocMetaData *meta_data = gsf_doc_meta_data_new (); + + puts ( "SummaryInfo"); + err = gsf_msole_metadata_read (stream, meta_data); + if (err != NULL) { + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + err = NULL; + } else + gsf_doc_meta_data_foreach (meta_data, + (GHFunc) cb_print_property, NULL); + + g_object_unref (meta_data); + g_object_unref (G_OBJECT (stream)); + } + + stream = gsf_infile_child_by_name (infile, "\05DocumentSummaryInformation"); + if (stream != NULL) { + GsfDocMetaData *meta_data = gsf_doc_meta_data_new (); + + puts ( "DocSummaryInfo"); + err = gsf_msole_metadata_read (stream, meta_data); + if (err != NULL) { + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + err = NULL; + } else + gsf_doc_meta_data_foreach (meta_data, + (GHFunc) cb_print_property, NULL); + + g_object_unref (meta_data); + g_object_unref (G_OBJECT (stream)); + } + + for (j = 0 ; j < G_N_ELEMENTS (stream_names) ; j++) { + stream = gsf_infile_child_by_name (infile, stream_names[j]); + if (stream != NULL) { + puts (j < 3 ? "Excel97" : "Excel95"); +#ifdef DUMP_CONTENT + dump_biff_stream (stream); +#endif + g_object_unref (G_OBJECT (stream)); + break; + } + } + + g_object_unref (G_OBJECT (infile)); + g_object_unref (G_OBJECT (input)); + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-msole2.c b/lib/libgsf-1.12.3/tests/test-msole2.c new file mode 100644 index 0000000000..cd688212a3 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-msole2.c @@ -0,0 +1,144 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-msole1.c: test program to list content and dump raw stream data + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +static gboolean dump_as_hex = FALSE; + +static void +ls_R (GsfInput *input) +{ + int i; + char const *name = gsf_input_name (GSF_INPUT (input)); + gboolean is_dir = GSF_IS_INFILE (input) && + (gsf_infile_num_children (GSF_INFILE (input)) >= 0); + + printf ("%c '%s'\t\t%" GSF_OFF_T_FORMAT "\n", + (is_dir ? 'd' : ' '), + (name != NULL) ? name : "", + gsf_input_size (GSF_INPUT (input))); + + if (is_dir) { + puts ("{"); + for (i = 0 ; i < gsf_infile_num_children (GSF_INFILE (input)) ; i++) + ls_R (gsf_infile_child_by_index (GSF_INFILE (input), i)); + puts ("}"); + } + + g_object_unref (G_OBJECT (input)); +} + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GError *err; + + fprintf (stderr, "%s\n", argv [1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + input = gsf_input_uncompress (input); + infile = gsf_infile_msole_new (input, &err); + g_object_unref (G_OBJECT (input)); + + if (infile == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not an OLE file: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + if (argc > 2) { + int i; + GsfInput *child, *ptr = GSF_INPUT (infile); + for (i = 2 ; i < argc && ptr != NULL; i++, ptr = child) { + fprintf (stderr, "--> '%s'\n", argv [i]); + if (GSF_IS_INFILE (ptr) && + gsf_infile_num_children (GSF_INFILE (ptr)) >= 0) { + child = gsf_infile_child_by_name (GSF_INFILE (ptr), argv [i]); + + if (child == NULL) { + g_warning ("No child named '%s'", argv [i]); + child = NULL; + break; + } + } else { + g_warning ("stream is not a directory '%s'", argv [i]); + child = NULL; + break; + } + g_object_unref (G_OBJECT (ptr)); + } + if (ptr != NULL) { + if (GSF_IS_INFILE (ptr) && + gsf_infile_num_children (GSF_INFILE (ptr)) >= 0) + ls_R (ptr); /* unrefs infile */ + else { + gsf_input_dump (GSF_INPUT (ptr), dump_as_hex); + g_object_unref (G_OBJECT (ptr)); + } + } + } else + ls_R (GSF_INPUT (infile)); /* unrefs infile */ + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc < 2) { + fprintf (stderr, "%s : file [--hex] stream stream ...\n", argv [0]); + return 1; + } + + if (argv[1] != NULL && 0 == strcmp (argv[1], "--hex")) { + dump_as_hex = TRUE; + argv++; + argc--; + } + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-msvba-zip.c b/lib/libgsf-1.12.3/tests/test-msvba-zip.c new file mode 100644 index 0000000000..003bc13ef1 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-msvba-zip.c @@ -0,0 +1,382 @@ +#include +#include +#include +#include +#include +#include + +#define VBA_COMPRESSION_WINDOW 4096 + +#define HEADER_SIZE 3 + +/* Brute force and ugliness ! */ +typedef struct { + guint8 inblock[VBA_COMPRESSION_WINDOW]; + guint length; + guint pos; + guint8 shift; + + guint8 mask; + GString *outstr; + + GsfOutput *output; +} CompressBuf; + +#define DEBUG + +static char +byte_to_char (guint8 data) +{ + return data >= 0x20 && data < 126 ? data : '.'; +} + +static gint +get_shift (guint cur_pos) +{ + int shift; + + if (cur_pos <= 0x80) { + if (cur_pos <= 0x20) + shift = (cur_pos <= 0x10) ? 12 : 11; + else + shift = (cur_pos <= 0x40) ? 10 : 9; + } else { + if (cur_pos <= 0x200) + shift = (cur_pos <= 0x100) ? 8 : 7; + else if (cur_pos <= 0x800) + shift = (cur_pos <= 0x400) ? 6 : 5; + else + shift = 4; + } + + return shift; +} + +static gint +find_match (CompressBuf *buf, guint pos, guint *len) +{ + gint i; + guint max_match = (1 << get_shift (pos)) - 1; + + /* FIXME: the MS impl. does different to a linear search here + and is not very good at this either; is happy to get much + worse matches; perhaps some single-entry match lookup table ? + it seems to ~regularly truncate strings, and get earlier + / later matches of equivalent length with no predictability + ( hashing ? ). + */ + for (i = pos - 1; i >= 0; i--) { + guint j; + + for (j = 0; j < buf->length - pos && j < pos; j++) + if (buf->inblock[pos + j] != buf->inblock[i + j]) + break; + + if (j >= 3) { + *len = MIN (j, max_match); + return i; + } + } + return -1; +} + +static void +output_data (CompressBuf *buf, guint8 *data, gboolean compressed) +{ + if (compressed) { + buf->mask |= 1 << buf->shift; + g_string_append_c (buf->outstr, data [0]); + g_string_append_c (buf->outstr, data [1]); + } else + g_string_append_c (buf->outstr, data [0]); + + buf->shift++; + if (buf->shift == 8) { + guint i; + + gsf_output_write (buf->output, 1, &buf->mask); + gsf_output_write (buf->output, buf->outstr->len, buf->outstr->str); + +#ifdef DEBUG + fprintf (stderr, "Block: 0x%x '", buf->mask); + for (i = 0; i < buf->outstr->len; i++) + fprintf (stderr, "%c", byte_to_char (buf->outstr->str[i])); + fprintf (stderr, "'\n"); +#endif + + buf->mask = 0; + buf->shift = 0; + g_string_set_size (buf->outstr, 0); + } +} + +static void +output_match (CompressBuf *buf, guint cur_pos, guint pos, guint len) +{ + int shift, token, distance; + guint8 data[2]; + + shift = get_shift (cur_pos); + + distance = cur_pos - pos - 1; + + /* Window size issue !? - get a better match later with a larger window !? */ + + token = (distance << shift) + ((len - 3) & ((1<<(shift + 1))-1)); + data[0] = token & 0xff; + data[1] = token >> 8; + +#ifdef DEBUG + fprintf (stderr, "shift %d, [0x%x(%d) - %d], len %d, distance %d bytes %.2x %.2x\n", + shift, cur_pos, cur_pos, pos, len, distance, + data[0], data[1]); + if (cur_pos + len >= (1u<length;) { + if ((match = find_match (buf, pos, &len)) >= 0) { + output_match (buf, pos, match, len); + pos += len; + } else + output_data (buf, &(buf->inblock[pos++]), FALSE); + } +} + +static void +do_compress (GsfInput *input, GsfOutput *output) +{ + CompressBuf real_buf, *buf; + GString *string; + guint8 data[HEADER_SIZE]; + int length; + + buf = &real_buf; + memset (buf, 0, sizeof (CompressBuf)); + buf->output = output; + buf->outstr = g_string_sized_new (20); + + data[0] = 0x01; + data[1] = 0x00; + data[2] = 0xb0; + gsf_output_write (buf->output, 3, data); /* dummy padding */ + + string = g_string_sized_new (64); + + while (gsf_input_remaining (input) > 0) { + buf->length = MIN (gsf_input_remaining (input), VBA_COMPRESSION_WINDOW); + if (!gsf_input_read (input, buf->length, buf->inblock)) + g_error ("Failed to read %d bytes\n", buf->length); + compress_block (buf); + } + + if (buf->outstr->len) { + gsf_output_write (buf->output, 1, &buf->mask); + gsf_output_write (buf->output, buf->outstr->len, buf->outstr->str); + } + + length = gsf_output_size (buf->output) - 3 - 1; + if (length > 0x0c0c) /* TESTME: is this really right ? */ + length = 0x0c0c; + data[1] = length & 0xff; + data[2] |= (length >> 8); + gsf_output_seek (output, 0, G_SEEK_SET); + gsf_output_write (buf->output, 3, data); /* real data */ +} + +static void +do_decompress (GsfInput *input, GsfOutput *output) +{ + gboolean err = FALSE; + guint8 data[HEADER_SIZE]; + GByteArray *decompressed; + int size, comp_len; + + err |= !gsf_input_read (input, HEADER_SIZE, data); + if (data [0] != 0x01) + fprintf (stderr, "Odd pre-amble byte 0x%x\n", data[0]); + if ((data [2] & 0xf0) != 0xb0) + fprintf (stderr, "Odd high nibble 0x%x\n", (data[2] & 0xf0)); + comp_len = ((data[2] & 0x0f) << 8) + data[1]; + if (comp_len + 1 != gsf_input_size (input) - 3) + fprintf (stderr, "Size mismatch %d %d\n", + comp_len + 1, (int) (gsf_input_size (input) - 3)); + + decompressed = gsf_msole_inflate (input, 3); + if (!decompressed) + fprintf (stderr, "Failed to decompress\n"); + + size = decompressed->len; + err |= !gsf_output_write (output, size, + g_byte_array_free (decompressed, FALSE)); + + if (err) + fprintf (stderr, "I/O error\n"); +} + +#define MAP(a,b) + +static void +decode_dir (GsfInput *input) +{ + gboolean err = FALSE; + guint8 data[6]; + int op_count = 0; + + while (gsf_input_remaining (input) && !err) { + unsigned i; + guint16 op; + guint32 length; + gboolean ascii = FALSE; + gboolean unicode = FALSE; + gboolean offset = FALSE; + + err |= !gsf_input_read (input, 6, data); + + op = GSF_LE_GET_GUINT16 (&data[0]); + length = GSF_LE_GET_GUINT32 (&data[2]); + + if (op == 9) { + fprintf (stderr, "** Quirk fix **\n"); + length += 2; + } + + /* Special nasties / up-stream bugs */ + switch (op) { + case 0x4: + case 0x16: + case 0x19: + case 0x1a: + ascii = TRUE; + break; + case 0x32: + case 0x3e: + case 0x47: + unicode = TRUE; + break; + case 0x31: + offset = TRUE; + break; + default: + break; + } + + fprintf (stderr, "0x%.6x Op %3d 0x%.2x, length %3d: '", + (int)gsf_input_tell (input), op_count, op, length); + + if (length > gsf_input_remaining (input)) { + fprintf (stderr, "Broken - foo !\n"); + length = MIN (64, gsf_input_remaining (input)); + err = TRUE; + } + + if (ascii || unicode) { + int advance = ascii ? 1 : 2; + /* quick and dirty for now */ + for (i = 0 ; i < length; i += advance) { + guint8 ug; + err |= !gsf_input_read (input, advance, &ug); + fprintf (stderr, "%c", byte_to_char (ug)); + } + fprintf (stderr, "' - '%s", ascii ? "Ascii" : "Unicode"); + } else if (offset) { + gint8 data[4]; + guint32 offset; + g_assert (length == 4); + err |= !gsf_input_read (input, 4, data); + offset = GSF_LE_GET_GUINT32 (data); + fprintf (stderr, "0x%.8x' - 'Offset", offset); + } else { + GString *chars = g_string_new (""); + + for (i = 0 ; i < length; i++) { + guint8 ug; + err |= !gsf_input_read (input, 1, &ug); + fprintf (stderr, "%.2x ", ug); + g_string_append_printf (chars, "%c", byte_to_char (ug)); + } + fprintf (stderr, "' - '%s", chars->str); + g_string_free (chars, TRUE); + } + fprintf (stderr, "'\n"); + + op_count++; + } +} + +int +main (int argc, char *argv[]) +{ + int i; + char const *src = NULL; + char const *dest = NULL; + GsfInput *input; + GsfOutput *output; + GError *error = NULL; + + /* options */ + gboolean dir = FALSE; + gboolean compress = FALSE; + + gsf_init (); + + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + switch (argv[i][1]) { + case 'c': + compress = TRUE; + break; + case 'd': + dir = TRUE; + break; + default: + fprintf (stderr, "Unknown option '%s'\n", argv[i]); + return 1; + break; + } + } else if (!src) + src = argv[i]; + else + dest = argv[i]; + } + + if (!src || (!dir && !dest)) { + fprintf (stderr, "%s: [-c(ompress)] \n", argv[0]); + fprintf (stderr, "%s: [-d(ecode dir)] \n", argv[0]); + return 1; + } + + input = gsf_input_stdio_new (src, &error); + if (dir) + decode_dir (input); + else { + output = gsf_output_stdio_new (dest, &error); + if (!input || !output) { + fprintf (stderr, "Failed to open input(%p)/output(%p): '%s'\n", + input, output, error ? error->message : ""); + return 1; + } + + if (compress) + do_compress (input, output); + else + do_decompress (input, output); + + g_object_unref (output); + } + + g_object_unref (input); + + gsf_shutdown (); + + return 0; +} diff --git a/lib/libgsf-1.12.3/tests/test-msvba.c b/lib/libgsf-1.12.3/tests/test-msvba.c new file mode 100644 index 0000000000..97da4fb727 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-msvba.c @@ -0,0 +1,86 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-msvba.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfInfile *vba_wrapper; + GsfInput *input; + GError *err = NULL; + int i; + + for (i = 1 ; i < argc ; i++) { + input = gsf_input_mmap_new (argv[i], NULL); + if (input == NULL) /* Only report error if stdio fails too */ + input = gsf_input_stdio_new (argv[i], &err); + if (input != NULL) { + GsfInfile *infile = gsf_infile_msole_new (input, &err); + if (infile != NULL) { + GsfInput *vba = gsf_infile_child_by_vname (infile, "_VBA_PROJECT_CUR", "VBA", NULL); + if (vba != NULL) { + fprintf( stderr, "%s\n",argv[i]); + + vba_wrapper = gsf_infile_msvba_new (GSF_INFILE (vba), &err); + if (vba_wrapper != NULL) { + g_object_unref (G_OBJECT (vba_wrapper)); + } + g_object_unref (G_OBJECT (vba)); + } else { +#if 0 + g_warning ("'%s' : No VBA directory", argv[i]); +#endif + continue; + } + + g_object_unref (G_OBJECT (infile)); + } + g_object_unref (G_OBJECT (input)); + } + + if (err != NULL) { + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + } + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-out-bzip.c b/lib/libgsf-1.12.3/tests/test-out-bzip.c new file mode 100644 index 0000000000..6daf13ca4e --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-out-bzip.c @@ -0,0 +1,88 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-out-bzip.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * 2003 Dom Lachowicz (cinamod@hotmail.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GsfOutput *bzout; + GError *err; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + bzout = gsf_output_bzip_new (output, &err); + if (bzout == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", "bzip output", err->message); + g_error_free (err); + return 1; + } + + if (!gsf_output_printf (bzout, + "The %s sat on the %s.\n", "cat", "mat")) + return 1; + if (!gsf_output_printf (bzout, "%d %ss sat on the %s.\n", + 2, "cat", "mat")) + return 1; + if (!gsf_output_puts (bzout, + "The quick brown fox is afraid of the cats.\n")) + return 1; + if (!gsf_output_close (bzout)) + return 1; + if (!gsf_output_close (output)) + return 1; + g_object_unref (G_OBJECT (bzout)); + g_object_unref (G_OBJECT (output)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-out-gzip1.c b/lib/libgsf-1.12.3/tests/test-out-gzip1.c new file mode 100644 index 0000000000..bbedc48766 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-out-gzip1.c @@ -0,0 +1,87 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-out-gzip1.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GsfOutput *gzout; + GError *err; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + gzout = gsf_output_gzip_new (output, &err); + if (gzout == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", "gzip output", err->message); + g_error_free (err); + return 1; + } + + if (!gsf_output_printf (gzout, + "The %s sat on the %s.\n", "cat", "mat")) + return 1; + if (!gsf_output_printf (gzout, "%d %ss sat on the %s.\n", + 2, "cat", "mat")) + return 1; + if (!gsf_output_puts (gzout, + "The quick brown fox is afraid of the cats.\n")) + return 1; + if (!gsf_output_close (gzout)) + return 1; + if (!gsf_output_close (output)) + return 1; + g_object_unref (G_OBJECT (gzout)); + g_object_unref (G_OBJECT (output)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-out-gzip2.c b/lib/libgsf-1.12.3/tests/test-out-gzip2.c new file mode 100644 index 0000000000..77ce79ca0e --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-out-gzip2.c @@ -0,0 +1,88 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-out-gzip2.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GsfOutput *gzout; + GError *err; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + gzout = g_object_new (GSF_OUTPUT_GZIP_TYPE, + "sink", output, + "raw", TRUE, + NULL); + if (gsf_output_error (gzout)) { + g_warning ("'%s' error: %s", "gzip output", gsf_output_error (gzout)->message); + g_object_unref (gzout); + return 1; + } + + if (!gsf_output_printf (gzout, + "The %s sat on the %s.\n", "cat", "mat")) + return 1; + if (!gsf_output_printf (gzout, "%d %ss sat on the %s.\n", + 2, "cat", "mat")) + return 1; + if (!gsf_output_puts (gzout, + "The quick brown fox is afraid of the cats.\n")) + return 1; + if (!gsf_output_close (gzout)) + return 1; + if (!gsf_output_close (output)) + return 1; + g_object_unref (G_OBJECT (gzout)); + g_object_unref (G_OBJECT (output)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-out-printf.c b/lib/libgsf-1.12.3/tests/test-out-printf.c new file mode 100644 index 0000000000..6ac6acedc5 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-out-printf.c @@ -0,0 +1,73 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-input1.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GError *err; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + if (!gsf_output_printf (output, + "The %s sat on the %s.\n", "cat", "mat")) + return 1; + if (!gsf_output_printf (output, "%d %ss sat on the %s.\n", + 2, "cat", "mat")) + return 1; + if (!gsf_output_puts (output, + "The quick brown fox is afraid of the cats.\n")) + return 1; + if (!gsf_output_close (output)) + return 1; + g_object_unref (G_OBJECT (output)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-outmem-printf.c b/lib/libgsf-1.12.3/tests/test-outmem-printf.c new file mode 100644 index 0000000000..f3c520ec9e --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-outmem-printf.c @@ -0,0 +1,91 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-outmem-printf.c: + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include + +#include + +static gboolean +test_write_once (GsfOutput *output) +{ + if (!gsf_output_printf (output, + "The %s sat on the %s.\n", "cat", "mat")) + return FALSE; + if (!gsf_output_printf (output, "%d %ss sat on the %s.\n", + 2, "cat", "mat")) + return FALSE; + if (!gsf_output_puts (output, + "The quick brown fox is afraid of the cats.\n")) + return FALSE; + + return TRUE; +} + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + guint8 const *buf; + gsf_off_t size; + FILE *fout; + int i; + int res; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + fout = fopen (argv[1], "w"); + if (!fout) { + perror (argv[1]); + return 1; + } + + output = gsf_output_memory_new (); + for (i = 1; i <= 100; i++) { + if (!gsf_output_printf (output, "=== Round %d ===\n", i)) + return 1; + if (!test_write_once (output)) + return 1; + } + + buf = gsf_output_memory_get_bytes (GSF_OUTPUT_MEMORY (output)); + size = gsf_output_size (output); + res = fwrite (buf, size, 1, fout); + fclose (fout); + gsf_output_close (output); + g_object_unref (output); + return (res == 1); +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-restore-msole.c b/lib/libgsf-1.12.3/tests/test-restore-msole.c new file mode 100644 index 0000000000..d2f3daf40f --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-restore-msole.c @@ -0,0 +1,131 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-cp-msole.c: Test gsf-outfile-msole by cloning a file the hard way + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include + +static void +clone (GsfInput *input, GsfOutput *output) +{ + guint8 const *data; + size_t len; + int i; + + if (gsf_input_size (input) > 0) { + while ((len = gsf_input_remaining (input)) > 0) { + /* copy in odd sized chunks to exercise system */ + if (len > 314) + len = 314; + if (NULL == (data = gsf_input_read (input, len, NULL))) { + g_warning ("error reading ?"); + return; + } + if (!gsf_output_write (output, len, data)) { + g_warning ("error writing ?"); + return; + } + } + } + + if (GSF_IS_INFILE (input) && + gsf_infile_num_children (GSF_INFILE (input)) > 0) { + GsfInfile *in = GSF_INFILE (input); + GsfOutfile *out = GSF_OUTFILE (output); + GsfInput *src; + GsfOutput *dst; + + for (i = 0 ; i < gsf_infile_num_children (in) ; i++) { + src = gsf_infile_child_by_index (in, i); + dst = gsf_outfile_new_child (out, + gsf_infile_name_by_index (in, i), + GSF_IS_INFILE (src) && gsf_infile_num_children (GSF_INFILE (src)) >= 0); + clone (src, dst); + } + } + + gsf_output_close (output); + g_object_unref (G_OBJECT (output)); + g_object_unref (G_OBJECT (input)); +} + +static int +test (char *argv[]) +{ + GsfInfile *infile; + GsfOutfile *outfile; + GsfOutput *output; + GError *err; + + fprintf (stderr, "%s\n", argv [1]); + infile = gsf_infile_stdio_new (argv[1], &err); + if (infile == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + + output = gsf_output_stdio_new (argv[2], &err); + if (output == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[2], err->message); + g_error_free (err); + g_object_unref (G_OBJECT (infile)); + return 1; + } + + outfile = gsf_outfile_msole_new (output); + g_object_unref (G_OBJECT (output)); + clone (GSF_INPUT (infile), GSF_OUTPUT (outfile)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + if (argc != 3) { + fprintf (stderr, "%s : infile outfile\n", argv [0]); + return 1; + } + + gsf_init (); + res = test (argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-textline.c b/lib/libgsf-1.12.3/tests/test-textline.c new file mode 100644 index 0000000000..341da85920 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-textline.c @@ -0,0 +1,75 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-textline.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include + +#include + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInputTextline *textline; + GError *err; + unsigned char *line; + + if (argc < 2) { + fprintf (stderr, "Usage : %s \n", argv[0]); + return 1; + } + + fprintf (stderr, "%s\n", argv[1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + textline = (GsfInputTextline *)gsf_input_textline_new (input); + if (textline == NULL) { + g_warning ("unable to create a textline"); + return 2; + } + + while (NULL != (line = gsf_input_textline_ascii_gets (textline))) + puts (line); + + g_object_unref (G_OBJECT (input)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-zip-out-subdirs.c b/lib/libgsf-1.12.3/tests/test-zip-out-subdirs.c new file mode 100644 index 0000000000..2e788f4b77 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-zip-out-subdirs.c @@ -0,0 +1,113 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-zip-out.c: + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include +#include + +static gboolean +test_write_once (GsfOutput *output) +{ + char const *str = "The cat sat on the mat. 2 cats sat on the mat. The quick brown fox is afraid of the cats.\n"; + + return gsf_output_write (output, strlen (str), str); +} + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GsfOutfile *outfile, *dir1, *dir2; + GsfOutput *ch1, *ch2, *ch3; + GError *err; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + outfile = gsf_outfile_zip_new (output, &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", + "gsf_outfile_zip_new", err->message); + g_error_free (err); + return 1; + } + g_object_unref (G_OBJECT (output)); + dir1 = GSF_OUTFILE (gsf_outfile_new_child (outfile, "test", TRUE)); + ch1 = gsf_outfile_new_child (dir1, "portfolio.abw", FALSE); + ch2 = gsf_outfile_new_child (dir1, "test.abw", FALSE); + dir2 = GSF_OUTFILE (gsf_outfile_new_child (dir1, "1", TRUE)); + if (!gsf_output_close ((GsfOutput *) dir1)) + return 1; + ch3 = gsf_outfile_new_child (dir2, "simply.pve", FALSE); + + if (!test_write_once (ch1)) + return 1; + if (!gsf_output_close ((GsfOutput *) ch1)) + return 1; + if (!test_write_once (ch2)) + return 1; + if (!gsf_output_close ((GsfOutput *) ch2)) + return 1; + if (!test_write_once (ch3)) + return 1; + if (!gsf_output_close ((GsfOutput *) ch3)) + return 1; + if (!gsf_output_close ((GsfOutput *) dir2)) + return 1; + if (!gsf_output_close ((GsfOutput *) outfile)) + return 1; + g_object_unref (G_OBJECT (outfile)); + g_object_unref (ch1); + g_object_unref (ch2); + g_object_unref (ch3); + g_object_unref (dir1); + g_object_unref (dir2); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-zip-out.c b/lib/libgsf-1.12.3/tests/test-zip-out.c new file mode 100644 index 0000000000..d74289da67 --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-zip-out.c @@ -0,0 +1,93 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-zip-out.c: + * + * Copyright (C) 2002-2003 Jon K Hellan (hellan@acm.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include +#include + +static gboolean +test_write_once (GsfOutput *output) +{ + char const *str = "The cat sat on the mat. 2 cats sat on the mat. The quick brown fox is afraid of the cats.\n"; + + return gsf_output_write (output, strlen (str), str); +} + +static int +test (int argc, char *argv[]) +{ + GsfOutput *output; + GsfOutfile *outfile; + GsfOutput *child; + GError *err; + + if (argc != 2) { + fprintf (stderr, "Usage : %s outfile\n", argv[0]); + return 1; + } + + output = gsf_output_stdio_new (argv[1], &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return 1; + } + outfile = gsf_outfile_zip_new (output, &err); + if (output == NULL) { + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", + "gsf_outfile_zip_new", err->message); + g_error_free (err); + return 1; + } + g_object_unref (G_OBJECT (output)); + child = gsf_outfile_new_child (outfile, "child", FALSE); + + if (!test_write_once (child)) + return 1; + if (!gsf_output_close ((GsfOutput *) child)) + return 1; + if (!gsf_output_close ((GsfOutput *) outfile)) + return 1; + g_object_unref (G_OBJECT (outfile)); + g_object_unref (child); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-zip1.c b/lib/libgsf-1.12.3/tests/test-zip1.c new file mode 100644 index 0000000000..ba681a917c --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-zip1.c @@ -0,0 +1,98 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-zip1.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include + +#include + +static void +ls_R (GsfInput *input) +{ + int i; + gboolean is_dir = GSF_IS_INFILE (input) && + (gsf_infile_num_children (GSF_INFILE (input)) >= 0); + + printf ("%c '%s' %" GSF_OFF_T_FORMAT "\n", + (is_dir ? 'd' : ' '), + gsf_input_name (GSF_INPUT (input)), + gsf_input_size (GSF_INPUT (input))); + + if (!is_dir) + return; + + puts ("{"); + for (i = 0 ; i < gsf_infile_num_children (GSF_INFILE (input)) ; i++) + ls_R (gsf_infile_child_by_index (GSF_INFILE (input), i)); + puts ("}"); +} + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GError *err; + int i; + + for (i = 1 ; i < argc ; i++) { + puts (argv[i]); + input = gsf_input_stdio_new (argv[i], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[i], err->message); + g_error_free (err); + continue; + } + + infile = gsf_infile_zip_new (input, &err); + if (infile == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not a Zip file: %s", argv[i], err->message); + g_error_free (err); + continue; + } + + ls_R (GSF_INPUT (infile)); + g_object_unref (G_OBJECT (infile)); + g_object_unref (G_OBJECT (input)); + } + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/tests/test-zip2.c b/lib/libgsf-1.12.3/tests/test-zip2.c new file mode 100644 index 0000000000..3740b04b4f --- /dev/null +++ b/lib/libgsf-1.12.3/tests/test-zip2.c @@ -0,0 +1,113 @@ +/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * test-zip2.c: + * + * Copyright (C) 2002-2003 Jody Goldberg (jody@gnome.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include + +#include +#include + +static void +dump_child (GsfInfile *infile, char const *childname) +{ + GsfInput *child = gsf_infile_child_by_name (infile, childname); + GsfInputTextline *textinput; + unsigned char *res; + int len = 0; + + if (child == NULL) { + printf ("not an OpenOffice document\n"); + return; + } + + textinput = (GsfInputTextline *)gsf_input_textline_new (child); + if (textinput == NULL) { + printf ("Could not read lines from %s", + gsf_input_name (child)); + return; + } + + do { + res = gsf_input_textline_ascii_gets (textinput); + if (res) { + printf ("'%s'\n", res); + len += strlen (res) + 1; + } + } while (res); + + printf ("Finished reading - %d bytes\n", len); + g_object_unref (G_OBJECT (textinput)); + g_object_unref (G_OBJECT (child)); +} + +static int +test (int argc, char *argv[]) +{ + GsfInput *input; + GsfInfile *infile; + GError *err = NULL; + int i; + + puts (argv[1]); + input = gsf_input_stdio_new (argv[1], &err); + if (input == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' error: %s", argv[1], err->message); + g_error_free (err); + return -1; + } + + infile = gsf_infile_zip_new (input, &err); + if (infile == NULL) { + + g_return_val_if_fail (err != NULL, 1); + + g_warning ("'%s' Not a Zip file: %s", argv[1], err->message); + g_error_free (err); + g_object_unref (G_OBJECT (input)); + return -1; + } + + for (i = 2 ; i < argc ; i++) { + dump_child (infile, argv[i]); + } + g_object_unref (G_OBJECT (infile)); + g_object_unref (G_OBJECT (input)); + + return 0; +} + +int +main (int argc, char *argv[]) +{ + int res; + + gsf_init (); + res = test (argc, argv); + gsf_shutdown (); + + return res; +} diff --git a/lib/libgsf-1.12.3/thumbnailer/Makefile.am b/lib/libgsf-1.12.3/thumbnailer/Makefile.am new file mode 100644 index 0000000000..8288c856cd --- /dev/null +++ b/lib/libgsf-1.12.3/thumbnailer/Makefile.am @@ -0,0 +1,32 @@ +@INTLTOOL_SCHEMAS_RULE@ + +AM_CPPFLAGS = -I$(top_srcdir) $(LIBGSF_CFLAGS) $(LIBXML_CFLAGS) +LDADD = $(top_builddir)/gsf/libgsf-1.la $(LIBGSF_LIBS) + +bin_PROGRAMS = gsf-office-thumbnailer + +gsf_office_thumbnailer_SOURCES = \ + main.c + +schema_files = \ + gsf-office-thumbnailer.schemas.in + +schema_DATA = gsf-office-thumbnailer.schemas + +schemadir = $(GCONF_SCHEMA_FILE_DIR) + +install-data-local: +if GCONF_SCHEMAS_INSTALL + if test -z "$(DESTDIR)"; then \ + for p in $(schema_DATA); do \ + GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \ + $(GCONFTOOL) --makefile-install-rule $$p; \ + done \ + fi +endif + +EXTRA_DIST = \ + $(schema_files) + +DISTCLEANFILES = \ + $(schema_DATA) diff --git a/lib/libgsf-1.12.3/thumbnailer/gsf-office-thumbnailer.schemas.in b/lib/libgsf-1.12.3/thumbnailer/gsf-office-thumbnailer.schemas.in new file mode 100644 index 0000000000..874cb4b903 --- /dev/null +++ b/lib/libgsf-1.12.3/thumbnailer/gsf-office-thumbnailer.schemas.in @@ -0,0 +1,77 @@ + + + + + /schemas/desktop/gnome/thumbnailers/application@vnd.ms-powerpoint/enable + /desktop/gnome/thumbnailers/application@vnd.ms-powerpoint/enable + libgsf + bool + true + + Enable thumbnailing of Microsoft PowerPoint documents + Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails + + + + + /schemas/desktop/gnome/thumbnailers/application@vnd.ms-powerpoint/command + /desktop/gnome/thumbnailers/application@vnd.ms-powerpoint/command + libgsf + string + gsf-office-thumbnailer -i %i -o %o -s %s + + Thumbnail command for Microsoft PowerPoint documents + Valid command plus arguments for the Microsoft PowerPoint thumbnailer. + + + + + /schemas/desktop/gnome/thumbnailers/application@vnd.ms-excel/enable + /desktop/gnome/thumbnailers/application@vnd.ms-excel/enable + libgsf + bool + true + + Enable thumbnailing of Microsoft Excel documents + Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails + + + + + /schemas/desktop/gnome/thumbnailers/application@vnd.ms-excel/command + /desktop/gnome/thumbnailers/application@vnd.ms-excel/command + libgsf + string + gsf-office-thumbnailer -i %i -o %o -s %s + + Thumbnail command for Microsoft Excel documents + Valid command plus arguments for the Microsoft Excel thumbnailer. + + + + + /schemas/desktop/gnome/thumbnailers/application@msword/enable + /desktop/gnome/thumbnailers/application@msword/enable + libgsf + bool + true + + Enable thumbnailing of Microsoft Word documents + Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails + + + + + /schemas/desktop/gnome/thumbnailers/application@msword/command + /desktop/gnome/thumbnailers/application@msword/command + libgsf + string + gsf-office-thumbnailer -i %i -o %o -s %s + + Thumbnail command for Microsoft Word documents + Valid command plus arguments for the Microsoft Word thumbnailer. + + + + + diff --git a/lib/libgsf-1.12.3/thumbnailer/main.c b/lib/libgsf-1.12.3/thumbnailer/main.c new file mode 100644 index 0000000000..3a93d90beb --- /dev/null +++ b/lib/libgsf-1.12.3/thumbnailer/main.c @@ -0,0 +1,224 @@ +/* GNOME thumbnailer for Office files + * Copyright (C) 2005 Novell, Inc. + * + * Authors: + * Federico Mena-Quintero + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2.1 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 Lesser 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +G_GNUC_NORETURN static void +show_error_string_and_exit (const char *str) +{ + fprintf (stderr, "error: %s\n", str); + exit (EXIT_FAILURE); +} + +G_GNUC_NORETURN static void +show_error_and_exit (GError *error) +{ + if (error) + show_error_string_and_exit (error->message); + else + show_error_string_and_exit ("an error happened, and we didn't get a GError. Exiting."); +} + +static void +call_convert (const char *in_filename, const char *out_filename, int thumb_size) +{ + char *in_quote; + char *out_quote; + char *cmd_line; + GError *error; + gint exit_status; + + in_quote = g_shell_quote (in_filename); + out_quote = g_shell_quote (out_filename); + cmd_line = g_strdup_printf ("convert -resize %dx%d %s png:%s", + thumb_size, thumb_size, + in_quote, + out_quote); + fprintf (stderr, "calling %s\n", cmd_line); + g_free (in_quote); + g_free (out_quote); + + error = NULL; + if (!g_spawn_command_line_sync (cmd_line, NULL, NULL, &exit_status, &error)) + show_error_and_exit (error); + + g_free (cmd_line); +} + +static void +write_thumbnail (const char *filename, gconstpointer data, gsize size, int thumb_size) +{ + char *tmp_name; + int fd; + FILE *file; + + tmp_name = g_strdup_printf ("%s.XXXXXX", filename); + fd = g_mkstemp (tmp_name); + if (fd == -1) { + perror ("Could not create temporary file"); + exit (EXIT_FAILURE); + } + + file = fdopen (fd, "w"); + if (!file) { + show_error_string_and_exit ("Could not open temporary file for writing"); + exit (EXIT_FAILURE); + } + + if (fwrite (data, 1, size, file) != size) { + perror ("Could not write data to output file"); + exit (EXIT_FAILURE); + } + + if (fclose (file) != 0) { + perror ("Could not close oputput file"); + exit (EXIT_FAILURE); + } + + call_convert (tmp_name, filename, thumb_size); + unlink (tmp_name); +} + +static void +read_thumbnail_and_write (const char *in_filename, const char *out_filename, int thumb_size) +{ + GsfInput *input; + GsfInfile *infile; + GError *error; + GsfInput *summary_stream; + GsfDocMetaData *meta_data; + GsfDocProp *thumb_doc_prop; + GValue const *thumb_value; + GsfClipData *clip_data; + GsfClipFormat clip_format; + gconstpointer data; + gsize size; + + input = gsf_input_mmap_new (in_filename, NULL); + if (!input) { + error = NULL; + input = gsf_input_stdio_new (in_filename, &error); + if (!input) + show_error_and_exit (error); + } + + input = gsf_input_uncompress (input); + + error = NULL; + infile = gsf_infile_msole_new (input, &error); + if (!infile) + show_error_and_exit (error); + + summary_stream = gsf_infile_child_by_name (infile, "\05SummaryInformation"); + if (!summary_stream) + show_error_string_and_exit ("Could not find the SummaryInformation stream"); + + meta_data = gsf_doc_meta_data_new (); + error = gsf_msole_metadata_read (summary_stream, meta_data); + if (error) + show_error_and_exit (error); + + thumb_doc_prop = gsf_doc_meta_data_lookup (meta_data, GSF_META_NAME_THUMBNAIL); + if (!thumb_doc_prop) + show_error_string_and_exit ("The metadata does not have a thumbnail property"); + + thumb_value = gsf_doc_prop_get_val (thumb_doc_prop); + if (!thumb_value) + show_error_string_and_exit ("We got the thumbnail property, but it didn't have a value!?"); + + clip_data = GSF_CLIP_DATA (g_value_get_object (thumb_value)); + + clip_format = gsf_clip_data_get_format (clip_data); + + if (clip_format == GSF_CLIP_FORMAT_WINDOWS_CLIPBOARD) { + GsfClipFormatWindows win_format; + + error = NULL; + win_format = gsf_clip_data_get_windows_clipboard_format (clip_data, &error); + if (win_format == GSF_CLIP_FORMAT_WINDOWS_ERROR) + show_error_and_exit (error); + } + + error = NULL; + data = gsf_clip_data_peek_real_data (clip_data, &size, &error); + + if (!data) + show_error_and_exit (error); + + write_thumbnail (out_filename, data, size, thumb_size); + + g_object_unref (clip_data); + + g_object_unref (meta_data); + g_object_unref (summary_stream); + g_object_unref (infile); + g_object_unref (input); +} + +/* Command-line options */ +static int option_size = -1; +static char *option_input_filename = NULL; +static char *option_output_filename = NULL; + +static GOptionEntry option_entries[] = { + { "input", 'i', 0, G_OPTION_ARG_FILENAME, &option_input_filename, + "Name of file for which to create a thumbnail", + "filename" }, + { "output", 'o', 0, G_OPTION_ARG_FILENAME, &option_output_filename, + "Name of the file to put the thumbnail", + "filename" }, + { "size", 's', 0, G_OPTION_ARG_INT, &option_size, + "Size of thumbnail in pixels; the thumbnail will be at most N*N pixels large", + "N" }, + { NULL, 0, 0, 0, NULL, NULL, NULL } +}; + +int +main (int argc, char **argv) +{ + GOptionContext *option_ctx; + + option_ctx = g_option_context_new ("Options"); + g_option_context_add_main_entries (option_ctx, option_entries, NULL); /* FIXME: no translation domain */ + if (!g_option_context_parse (option_ctx, &argc, &argv, NULL) + || option_size == -1 + || option_input_filename == NULL + || option_output_filename == NULL) { + fprintf (stderr, "Invalid usage; type \"%s --help\" for instructions. All the options must be used.\n", argv[0]); + exit (EXIT_FAILURE); + } + + gsf_init (); + read_thumbnail_and_write (option_input_filename, option_output_filename, option_size); + + return 0; +} diff --git a/src/gnome-utils/Makefile.am b/src/gnome-utils/Makefile.am index 618f29b91f..f956b075c0 100644 --- a/src/gnome-utils/Makefile.am +++ b/src/gnome-utils/Makefile.am @@ -4,7 +4,7 @@ PWD := $(shell pwd) pkglib_LTLIBRARIES = libgncmod-gnome-utils.la libgw-gnome-utils.la # Note that src/gnome-utils CANNOT depend on src/gnome! -if USE_LIBGOFFICE + AM_CFLAGS = \ -DPREFIX=\"${prefix}\" \ -DSYSCONFDIR=\"${GNC_CONFIGDIR}\" \ @@ -25,36 +25,9 @@ AM_CFLAGS = \ ${GTKHTML_CFLAGS} \ ${GUILE_INCS} \ ${G_WRAP_COMPILE_ARGS} \ - ${GSF_CFLAGS} \ - ${QOF_CFLAGS} \ - ${LIBGOFFICE_CFLAGS} -else -AM_CFLAGS = \ - -DPREFIX=\"${prefix}\" \ - -DSYSCONFDIR=\"${GNC_CONFIGDIR}\" \ - -DDATADIR=\"${GNC_SHAREDIR}\" \ - -DLIBDIR=\"${GNC_LIBDIR}\" \ - -I${top_srcdir}/src/core-utils \ - -I${top_srcdir}/src/gnc-module \ - -I${top_srcdir}/src/engine \ - -I${top_srcdir}/src/backend/file \ - -I${top_srcdir}/src/network-utils \ - -I${top_srcdir}/src/app-utils \ - -I${top_srcdir}/src \ - -I${top_srcdir}/lib/goffice \ - -I${top_srcdir}/lib/goffice/split \ - -I${top_srcdir}/lib/glib26 \ - -I${top_srcdir}/lib \ - ${GNOME_CFLAGS} \ - ${GTKHTML_CFLAGS} \ - ${GLIB_CFLAGS} \ - ${GLADE_CFLAGS} \ - ${GUILE_INCS} \ - ${GNOME_PRINT_CFLAGS} \ - ${G_WRAP_COMPILE_ARGS} \ ${QOF_CFLAGS} \ + ${GOFFICE_CFLAGS} \ ${GSF_CFLAGS} -endif libgncmod_gnome_utils_la_SOURCES = \ QuickFill.c \ @@ -195,7 +168,6 @@ noinst_HEADERS = \ gw-gnome-utils.h \ search-param.h -if USE_LIBGOFFICE libgncmod_gnome_utils_la_LIBADD = \ ${top_builddir}/src/core-utils/libcore-utils.la \ ${top_builddir}/src/gnc-module/libgncmodule.la \ @@ -215,31 +187,8 @@ libgncmod_gnome_utils_la_LIBADD = \ ${DB_LIBS} \ ${GSF_LIBS} \ ${QOF_LIBS} \ - ${LIBGOFFICE_LIBS} \ + ${GOFFICE_LIBS} \ ${XML_LIBS} -else -libgncmod_gnome_utils_la_LIBADD = \ - ${top_builddir}/src/core-utils/libcore-utils.la \ - ${top_builddir}/src/gnc-module/libgncmodule.la \ - ${top_builddir}/src/engine/libgncmod-engine.la \ - ${top_builddir}/src/calculation/libgncmod-calculation.la \ - ${top_builddir}/src/network-utils/libgncmod-network-utils.la \ - ${top_builddir}/src/app-utils/libgncmod-app-utils.la \ - ${top_builddir}/lib/goffice/libgoffice.la \ - ${top_builddir}/lib/glib26/libgncglib.la \ - ${GNOME_LIBS} \ - ${GNOME_PRINT_LIBS} \ - ${GTKHTML_LIBS} \ - ${GUILE_LIBS} \ - ${GDK_PIXBUF_LIBS} \ - ${GLADE_LIBS} \ - ${GUILE_LIBS} \ - ${GLIB_LIBS} \ - ${DB_LIBS} \ - ${GSF_LIBS} \ - ${QOF_LIBS} \ - ${XML_LIBS} -endif libgw_gnome_utils_la_SOURCES = gw-gnome-utils.c diff --git a/src/gnome-utils/gnc-html-graph-gog.c b/src/gnome-utils/gnc-html-graph-gog.c index 20a949dab2..33b89d677d 100644 --- a/src/gnome-utils/gnc-html-graph-gog.c +++ b/src/gnome-utils/gnc-html-graph-gog.c @@ -31,8 +31,6 @@ #include "gnc-html-graph-gog.h" #include "gnc-html.h" #include "gnc-engine.h" - -#ifdef HAVE_GOFFICE #include #include #include @@ -45,21 +43,8 @@ #include #include #include -#else -#include "goffice.h" -#include "graph/gog-graph.h" -#include "graph/gog-object.h" -#include "graph/gog-plot.h" -#include "graph/gog-series.h" -#include "graph/go-data-simple.h" -#include "utils/go-color.h" -#include "utils/go-pattern.h" -#include "graph/gog-renderer-pixbuf.h" -#include "graph/gog-renderer-svg.h" -#include "graph/gog-data-set.h" -#include "graph/gog-styled-object.h" -#include "graph/gog-style.h" -#endif +#include +#include #include #include @@ -96,6 +81,9 @@ gnc_html_graph_gog_init(void) PINFO( "init gog graphing" ); libgoffice_init(); + + /* Initialize plugins manager */ + go_plugins_init (NULL, NULL, NULL, NULL, TRUE, GO_PLUGIN_LOADER_MODULE_TYPE); gnc_html_register_object_handler( "gnc-guppi-pie", handle_piechart ); gnc_html_register_object_handler( "gnc-guppi-bar", handle_barchart ); @@ -242,9 +230,6 @@ set_chart_titles(GogObject *chart, const char *title, const char* sub_title) } tmp = gog_object_add_by_name(chart, "Title", NULL); -#ifndef HAVE_GOFFICE - gog_object_set_pos(tmp, GOG_POSITION_N | GOG_POSITION_ALIGN_START); -#endif titleScalar = go_data_scalar_str_new(totalTitle->str, FALSE); gog_dataset_set_dim(GOG_DATASET(tmp), 0, titleScalar, NULL); @@ -345,19 +330,11 @@ handle_piechart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d) GOG_STYLED_OBJECT(graph)->style->outline.color = RGBA_BLACK; series = gog_plot_new_series(plot); -#ifdef HAVE_GOFFICE labelData = go_data_vector_str_new((char const * const *)labels, datasize, NULL); -#else - labelData = go_data_vector_str_new((char const * const *)labels, datasize); -#endif gog_series_set_dim(series, 0, labelData, NULL); go_data_emit_changed(GO_DATA(labelData)); -#ifdef HAVE_GOFFICE sliceData = go_data_vector_val_new(data, datasize, NULL); -#else - sliceData = go_data_vector_val_new(data, datasize); -#endif gog_series_set_dim(series, 1, sliceData, NULL); go_data_emit_changed(GO_DATA(sliceData)); @@ -449,11 +426,7 @@ handle_barchart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d) "type", barType, "overlap_percentage", barOverlap, NULL); -#ifdef HAVE_GOFFICE labelData = go_data_vector_str_new( (char const * const *)col_labels, datacols, NULL ); -#else - labelData = go_data_vector_str_new( (char const * const *)col_labels, datacols ); -#endif { // foreach row: // series = row @@ -474,11 +447,7 @@ handle_barchart(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d) gog_series_set_dim( series, 0, labelData, NULL ); go_data_emit_changed (GO_DATA (labelData)); -#ifdef HAVE_GOFFICE sliceData = go_data_vector_val_new( data + (i*datarows), datarows, NULL ); -#else - sliceData = go_data_vector_val_new( data + (i*datarows), datarows ); -#endif gog_series_set_dim( series, 1, sliceData, NULL ); /* @@ -539,19 +508,11 @@ handle_scatter(gnc_html * html, GtkHTMLEmbedded * eb, gpointer d) series = gog_plot_new_series( plot ); -#ifdef HAVE_GOFFICE sliceData = go_data_vector_val_new( xData, datasize, NULL ); -#else - sliceData = go_data_vector_val_new( xData, datasize ); -#endif gog_series_set_dim( series, 0, sliceData, NULL ); go_data_emit_changed (GO_DATA (sliceData)); -#ifdef HAVE_GOFFICE sliceData = go_data_vector_val_new( yData, datasize, NULL ); -#else - sliceData = go_data_vector_val_new( yData, datasize ); -#endif gog_series_set_dim( series, 1, sliceData, NULL ); go_data_emit_changed (GO_DATA (sliceData));